diff --git a/_layouts/home.html b/_layouts/home.html
index 23957a76..5b082460 100644
--- a/_layouts/home.html
+++ b/_layouts/home.html
@@ -16,7 +16,9 @@
Securely manage JFR recordings for your containerized Java workloads. Start, stop, and dump recordings for further analysis with triggers on Kubernetes
- Cryostat is an upstream project sponsored by Red Hat and is available for Kubernetes 1.19+ and OpenShift 4.6+
+ Cryostat is an upstream project sponsored by Red Hat and is available for
+ Kubernetes {{ site.data.versions.kubernetes.version }}+
+ and OpenShift {{ site.data.versions.openshift.version }}+
+ {% toc %}
+
+
{{ content }}
diff --git a/_posts/2022-09-30-cryosat-blog.md b/_posts/2022-09-30-cryosat-blog.md
index 64e97d7b..cc3c23bb 100644
--- a/_posts/2022-09-30-cryosat-blog.md
+++ b/_posts/2022-09-30-cryosat-blog.md
@@ -4,7 +4,7 @@ title: 'Hello World'
date: 2022-09-30
synopsis: Introducing Cryostat's Upstream Blog
author: Andrew Azores
-
+toc: true
---
Hello, readers!
diff --git a/_posts/2022-10-18-archive-on-stop.md b/_posts/2022-10-18-archive-on-stop.md
index 0b16304e..b3dcd936 100644
--- a/_posts/2022-10-18-archive-on-stop.md
+++ b/_posts/2022-10-18-archive-on-stop.md
@@ -4,7 +4,7 @@ title: '"Archive On Stop" feature in the Cryostat 2.2'
date: 2022-10-18
synopsis: Cryostat 2.2 New features
author: Leticia Konno
-
+toc: true
---
Hello, readers!
diff --git a/_posts/2022-11-15-cryostat-release.md b/_posts/2022-11-15-cryostat-release.md
index 1585c4f2..d2a4ed02 100644
--- a/_posts/2022-11-15-cryostat-release.md
+++ b/_posts/2022-11-15-cryostat-release.md
@@ -4,7 +4,7 @@ title: Cryostat 2.2.0 is Released!
date: 2022-11-15
synopsis: Cryostat 2.2.0 is here. Learn what's new in this release.
author: Andrew Azores
-
+toc: true
---
Hello readers, and welcome back to the Cryostat blog. Today we have exciting news: Cryostat 2.2.0 is released!
diff --git a/_posts/2023-05-03-agent-threads-investigation.md b/_posts/2023-05-03-agent-threads-investigation.md
index b1796275..cd60631a 100644
--- a/_posts/2023-05-03-agent-threads-investigation.md
+++ b/_posts/2023-05-03-agent-threads-investigation.md
@@ -4,6 +4,7 @@ title: 'An Introspective Investigation'
date: 2023-05-03
synopsis: Investigating a bug in the new Cryostat Agent, using Cryostat.
author: Andrew Azores
+toc: true
---
*Preface: this blog post is about the new [Cryostat Agent](https://github.com/cryostatio/cryostat-agent),
diff --git a/_posts/2023-05-26-cryostat-release.md b/_posts/2023-05-26-cryostat-release.md
new file mode 100644
index 00000000..dddeff75
--- /dev/null
+++ b/_posts/2023-05-26-cryostat-release.md
@@ -0,0 +1,53 @@
+---
+layout: post
+title: Cryostat 2.3.0 is Released!
+date: 2023-05-26
+synopsis: Cryostat 2.3.0 is here. Learn what's new in this release.
+author: Andrew Azores
+toc: true
+---
+
+Hello everyone,
+
+We are pleased to announce the release of Cryostat 2.3!
+
+## [What’s New in 2.3?](#whats-new-in-23)
+- **[Cryostat Agent](/guides#using-the-cryostat-agent)**: an agent can be included in your deployment, which
+ facilitates application discovery and JFR operations over HTTP API
+- **[Cross-namespace target discovery](/get-started/#using-clustercryostats)**: a `ClusterCryostat` custom resource can
+ be configured to communicate with applications deployed across multiple namespaces
+- **Web interface enhancements**:
+ - **Quick starts and Guided Tour**: short tutorials on how to navigate and perform basic functions in Cryostat
+ - **[Topology view with bulk actions](/guides#use-topology-view)**: view your deployed applications in a topology
+ view and create JFR recordings in bulk
+ - **[Customizable dashboards](/guides#navigate-the-dashboard)**: view and configure cards displaying your JVM metrics on a dashboard
+- **Podman API**: Discover target applications using Podman HTTP API. This requires the Podman service to be running.
+ You might try `systemctl --user enable --now podman.socket`. The next time you run Cryostat under your user, it will
+ be able to talk to Podman and query for running containers with the label `io.cryostat.connectUrl`. The value of
+ this label is expected to be a JMX service URL for the JVM within the container.
+
+## What’s Next?
+- Additional types of analyses and visualizations
+- Smart triggering of JFR start/stop based on JVM conditions
+
+## Where can I get the latest version of Cryostat?
+You can install Cryostat using our
+[Kubernetes operator on OperatorHub.io](https://operatorhub.io/operator/cryostat-operator)
+or via a
+[Helm Chart](https://github.com/cryostatio/cryostat-helm/releases/tag/v0.3.0)
+. As always, you can also run Cryostat in other environments with a little more manual setup.
+
+If this is your first time installing Cryostat on Kubernetes, you can [Get Started](/get-started) right here on this
+website.
+
+If you had previously installed Cryostat Operator 2.2.0 with OLM, then you may have already been upgraded to 2.3.0, or
+else you should be able to approve and install the upgrade.
+
+## Blogs
+This is a really big release with many new features, including several that have been long requested by the community.
+Watch this space for more posts about some of the ["What's New"](#whats-new-in-23) items above.
+
+## Feedback
+Our team is very excited to present this update to Cryostat and we look forward to your feedback. Please reach out to
+the [Cryostat mailing list](mailto:cryostat-development@googlegroups.com) or
+[GitHub Discussion](https://github.com/cryostatio/cryostat/discussions/1493) with any questions or comments.
diff --git a/_sass/core/cryostat.scss b/_sass/core/cryostat.scss
index da157305..50572ddc 100644
--- a/_sass/core/cryostat.scss
+++ b/_sass/core/cryostat.scss
@@ -140,6 +140,26 @@ details > figure > a > img {
border: 2px solid $grey-0;
}
+details p {
+ font-family: inherit;
+ font-weight: inherit;
+}
+
+details {
+ .multi-image {
+ display: flex;
+ figure {
+ figcaption {
+ text-align: center;
+ }
+ }
+ }
+}
+
+figcaption > code {
+ font-size: 0.9em;
+}
+
.page-link {
font-size: 1.25em;
}
diff --git a/_sass/core/demo.scss b/_sass/core/demo.scss
new file mode 100644
index 00000000..cb26179f
--- /dev/null
+++ b/_sass/core/demo.scss
@@ -0,0 +1,23 @@
+.linear-dot-spinner {
+ width: 2em;
+ aspect-ratio: 4;
+ background: radial-gradient(circle closest-side, #73BCF7 90%, #0000) 0/calc(100%/3) 100% space;
+ clip-path: inset(0 100% 0 0);
+ animation: linear-dot-spinner-animate 1s steps(4) infinite;
+}
+
+@keyframes linear-dot-spinner-animate {
+ to {
+ clip-path: inset(0 -34% 0 0)
+ }
+}
+
+.demo-iframe {
+ opacity: 0;
+ box-sizing: border-box;
+ width: 100%;
+ height: 50em;
+ scale: 0.98;
+ border: 1px solid;
+ border-radius: 4px;
+}
diff --git a/_sass/includes/header.scss b/_sass/includes/header.scss
index 8e34a464..f6f61ee2 100644
--- a/_sass/includes/header.scss
+++ b/_sass/includes/header.scss
@@ -32,4 +32,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/alternate-installation-options/index.md b/alternate-installation-options/index.md
deleted file mode 100644
index 9f4be5e6..00000000
--- a/alternate-installation-options/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-# Feel free to add content and custom Front Matter to this file.
-# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults
-
-layout: default
----
-
-{:.cryostat-heading-1}
-Cryostat {{ site.data.versions.cryostat.version }}
-
-## [Alternate Installation Options](#alternate-installation-options)
-
-The recommended method to install the Cryostat Operator is via OperatorHub on the [Get Started](/get-started) page. If needed, see below for alternative methods to install the Cryostat Operator. All of the installation options require [cert-manager](/get-started#install-cert-manager) as a prerequisite.
-
-Once the operator is installed, proceed to the [Setup](/get-started#setup) section of the Get Started page.
-
-### Install with kubectl
-```
-$ kubectl create namespace cryostat-operator-system
-$ kubectl apply -k 'github.com/cryostatio/cryostat-operator//config/default?ref=v{{ site.data.versions.cryostat.version }}'
-```
-
-### Install with operator bundle
-1. Download [Operator SDK](https://github.com/operator-framework/operator-sdk/releases/tag/v1.5.2) >= 1.5.2
-2. Install Operator Lifecycle Manager into your cluster, if not already present.
- ```
- $ operator-sdk olm install
- ```
-3. Install the operator bundle
- ```
- $ operator-sdk run bundle quay.io/cryostat/cryostat-operator-bundle:{{ site.data.versions.cryostat.version }}
- ```
-
-## [Uninstalling Cryostat Operator](#uninstalling-cryostat-operator)
-Follow steps 1 and 2 in the [Uninstalling Cryostat Operator](/get-started#uninstalling-cryostat-operator) section of the Get Started page. At step 3, run the following instead:
-
-### Uninstall with kubectl
-```
-$ kubectl delete -k github.com/cryostatio/cryostat-operator//config/default?ref=v{{ site.data.versions.cryostat.version }}
-```
-### Uninstall with operator bundle
-```
-$ operator-sdk cleanup cryostat-operator
-```
diff --git a/assets/css/main.scss b/assets/css/main.scss
index 6a4fc9be..5aebc2ff 100644
--- a/assets/css/main.scss
+++ b/assets/css/main.scss
@@ -7,6 +7,7 @@
@import "core/cryostat";
@import "core/blog";
+@import "core/demo";
@import "includes/redhat-footer";
@import "includes/back-to-top.scss";
diff --git a/assets/demo/site/393.e5a9eabb40cd5f66.bundle.css b/assets/demo/site/393.e5a9eabb40cd5f66.bundle.css
new file mode 100644
index 00000000..2ecb14d8
--- /dev/null
+++ b/assets/demo/site/393.e5a9eabb40cd5f66.bundle.css
@@ -0,0 +1 @@
+.pf-t-light{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100)}.pf-t-dark{--pf-global--Color--100:var(--pf-global--Color--light-100);--pf-global--Color--200:var(--pf-global--Color--light-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--light-100);--pf-global--primary-color--100:var(--pf-global--primary-color--light-100);--pf-global--link--Color:var(--pf-global--link--Color--light);--pf-global--link--Color--hover:var(--pf-global--link--Color--light);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--dark-100)}.pf-t-dark .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-200)}.pf-t-dark .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--active--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-secondary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--BorderColor:var(--pf-global--Color--light-100)}:root{--pf-global--palette--black-100:#fafafa;--pf-global--palette--black-150:#f5f5f5;--pf-global--palette--black-200:#f0f0f0;--pf-global--palette--black-300:#d2d2d2;--pf-global--palette--black-400:#b8bbbe;--pf-global--palette--black-500:#8a8d90;--pf-global--palette--black-600:#6a6e73;--pf-global--palette--black-700:#4f5255;--pf-global--palette--black-800:#3c3f42;--pf-global--palette--black-850:#212427;--pf-global--palette--black-900:#151515;--pf-global--palette--black-1000:#030303;--pf-global--palette--blue-50:#e7f1fa;--pf-global--palette--blue-100:#bee1f4;--pf-global--palette--blue-200:#73bcf7;--pf-global--palette--blue-300:#2b9af3;--pf-global--palette--blue-400:#06c;--pf-global--palette--blue-500:#004080;--pf-global--palette--blue-600:#002952;--pf-global--palette--blue-700:#001223;--pf-global--palette--cyan-50:#f2f9f9;--pf-global--palette--cyan-100:#a2d9d9;--pf-global--palette--cyan-200:#73c5c5;--pf-global--palette--cyan-300:#009596;--pf-global--palette--cyan-400:#005f60;--pf-global--palette--cyan-500:#003737;--pf-global--palette--cyan-600:#002323;--pf-global--palette--cyan-700:#000f0f;--pf-global--palette--gold-50:#fdf7e7;--pf-global--palette--gold-100:#f9e0a2;--pf-global--palette--gold-200:#f6d173;--pf-global--palette--gold-300:#f4c145;--pf-global--palette--gold-400:#f0ab00;--pf-global--palette--gold-500:#c58c00;--pf-global--palette--gold-600:#795600;--pf-global--palette--gold-700:#3d2c00;--pf-global--palette--green-50:#f3faf2;--pf-global--palette--green-100:#bde5b8;--pf-global--palette--green-200:#95d58e;--pf-global--palette--green-300:#6ec664;--pf-global--palette--green-400:#5ba352;--pf-global--palette--green-500:#3e8635;--pf-global--palette--green-600:#1e4f18;--pf-global--palette--green-700:#0f280d;--pf-global--palette--light-blue-100:#beedf9;--pf-global--palette--light-blue-200:#7cdbf3;--pf-global--palette--light-blue-300:#35caed;--pf-global--palette--light-blue-400:#00b9e4;--pf-global--palette--light-blue-500:#008bad;--pf-global--palette--light-blue-600:#005c73;--pf-global--palette--light-blue-700:#002d39;--pf-global--palette--light-green-100:#e4f5bc;--pf-global--palette--light-green-200:#c8eb79;--pf-global--palette--light-green-300:#ace12e;--pf-global--palette--light-green-400:#92d400;--pf-global--palette--light-green-500:#6ca100;--pf-global--palette--light-green-600:#486b00;--pf-global--palette--light-green-700:#253600;--pf-global--palette--orange-50:#fff6ec;--pf-global--palette--orange-100:#f4b678;--pf-global--palette--orange-200:#ef9234;--pf-global--palette--orange-300:#ec7a08;--pf-global--palette--orange-400:#c46100;--pf-global--palette--orange-500:#8f4700;--pf-global--palette--orange-600:#773d00;--pf-global--palette--orange-700:#3b1f00;--pf-global--palette--purple-50:#f2f0fc;--pf-global--palette--purple-100:#cbc1ff;--pf-global--palette--purple-200:#b2a3ff;--pf-global--palette--purple-300:#a18fff;--pf-global--palette--purple-400:#8476d1;--pf-global--palette--purple-500:#6753ac;--pf-global--palette--purple-600:#40199a;--pf-global--palette--purple-700:#1f0066;--pf-global--palette--red-50:#faeae8;--pf-global--palette--red-100:#c9190b;--pf-global--palette--red-200:#a30000;--pf-global--palette--red-300:#7d1007;--pf-global--palette--red-400:#470000;--pf-global--palette--red-500:#2c0000;--pf-global--palette--white:#fff;--pf-global--BackgroundColor--100:#fff;--pf-global--BackgroundColor--150:#fafafa;--pf-global--BackgroundColor--200:#f0f0f0;--pf-global--BackgroundColor--light-100:#fff;--pf-global--BackgroundColor--light-200:#fafafa;--pf-global--BackgroundColor--light-300:#f0f0f0;--pf-global--BackgroundColor--dark-100:#151515;--pf-global--BackgroundColor--dark-200:#3c3f42;--pf-global--BackgroundColor--dark-300:#212427;--pf-global--BackgroundColor--dark-400:#4f5255;--pf-global--BackgroundColor--dark-transparent-100:rgba(3,3,3,.62);--pf-global--BackgroundColor--dark-transparent-200:rgba(3,3,3,.32);--pf-global--Color--100:#151515;--pf-global--Color--200:#6a6e73;--pf-global--Color--300:#3c3f42;--pf-global--Color--400:#8a8d90;--pf-global--Color--light-100:#fff;--pf-global--Color--light-200:#f0f0f0;--pf-global--Color--light-300:#d2d2d2;--pf-global--Color--dark-100:#151515;--pf-global--Color--dark-200:#6a6e73;--pf-global--active-color--100:#06c;--pf-global--active-color--200:#bee1f4;--pf-global--active-color--300:#2b9af3;--pf-global--active-color--400:#73bcf7;--pf-global--disabled-color--100:#6a6e73;--pf-global--disabled-color--200:#d2d2d2;--pf-global--disabled-color--300:#f0f0f0;--pf-global--primary-color--100:#06c;--pf-global--primary-color--200:#004080;--pf-global--primary-color--light-100:#73bcf7;--pf-global--primary-color--dark-100:#06c;--pf-global--secondary-color--100:#6a6e73;--pf-global--default-color--100:#73c5c5;--pf-global--default-color--200:#009596;--pf-global--default-color--300:#003737;--pf-global--success-color--100:#3e8635;--pf-global--success-color--200:#1e4f18;--pf-global--info-color--100:#2b9af3;--pf-global--info-color--200:#002952;--pf-global--warning-color--100:#f0ab00;--pf-global--warning-color--200:#795600;--pf-global--danger-color--100:#c9190b;--pf-global--danger-color--200:#a30000;--pf-global--danger-color--300:#470000;--pf-global--BoxShadow--sm:0 0.0625rem 0.125rem 0 rgba(3,3,3,.12),0 0 0.125rem 0 rgba(3,3,3,.06);--pf-global--BoxShadow--sm-top:0 -0.125rem 0.25rem -0.0625rem rgba(3,3,3,.16);--pf-global--BoxShadow--sm-right:0.125rem 0 0.25rem -0.0625rem rgba(3,3,3,.16);--pf-global--BoxShadow--sm-bottom:0 0.125rem 0.25rem -0.0625rem rgba(3,3,3,.16);--pf-global--BoxShadow--sm-left:-0.125rem 0 0.25rem -0.0625rem rgba(3,3,3,.16);--pf-global--BoxShadow--md:0 0.25rem 0.5rem 0rem rgba(3,3,3,.12),0 0 0.25rem 0 rgba(3,3,3,.06);--pf-global--BoxShadow--md-top:0 -0.5rem 0.5rem -0.375rem rgba(3,3,3,.18);--pf-global--BoxShadow--md-right:0.5rem 0 0.5rem -0.375rem rgba(3,3,3,.18);--pf-global--BoxShadow--md-bottom:0 0.5rem 0.5rem -0.375rem rgba(3,3,3,.18);--pf-global--BoxShadow--md-left:-0.5rem 0 0.5rem -0.375rem rgba(3,3,3,.18);--pf-global--BoxShadow--lg:0 0.5rem 1rem 0 rgba(3,3,3,.16),0 0 0.375rem 0 rgba(3,3,3,.08);--pf-global--BoxShadow--lg-top:0 -0.75rem 0.75rem -0.5rem rgba(3,3,3,.18);--pf-global--BoxShadow--lg-right:0.75rem 0 0.75rem -0.5rem rgba(3,3,3,.18);--pf-global--BoxShadow--lg-bottom:0 0.75rem 0.75rem -0.5rem rgba(3,3,3,.18);--pf-global--BoxShadow--lg-left:-0.75rem 0 0.75rem -0.5rem rgba(3,3,3,.18);--pf-global--BoxShadow--xl:0 1rem 2rem 0 rgba(3,3,3,.16),0 0 0.5rem 0 rgba(3,3,3,.1);--pf-global--BoxShadow--xl-top:0 -1rem 1rem -0.5rem rgba(3,3,3,.2);--pf-global--BoxShadow--xl-right:1rem 0 1rem -0.5rem rgba(3,3,3,.2);--pf-global--BoxShadow--xl-bottom:0 1rem 1rem -0.5rem rgba(3,3,3,.2);--pf-global--BoxShadow--xl-left:-1rem 0 1rem -0.5rem rgba(3,3,3,.2);--pf-global--BoxShadow--inset:inset 0 0 0.625rem 0 rgba(3,3,3,.25);--pf-global--font-path:"./assets/fonts";--pf-global--fonticon-path:"./assets/pficon";--pf-global--spacer--xs:0.25rem;--pf-global--spacer--sm:0.5rem;--pf-global--spacer--md:1rem;--pf-global--spacer--lg:1.5rem;--pf-global--spacer--xl:2rem;--pf-global--spacer--2xl:3rem;--pf-global--spacer--3xl:4rem;--pf-global--spacer--4xl:5rem;--pf-global--spacer--form-element:0.375rem;--pf-global--gutter:1rem;--pf-global--gutter--md:1.5rem;--pf-global--ZIndex--xs:100;--pf-global--ZIndex--sm:200;--pf-global--ZIndex--md:300;--pf-global--ZIndex--lg:400;--pf-global--ZIndex--xl:500;--pf-global--ZIndex--2xl:600;--pf-global--breakpoint--xs:0;--pf-global--breakpoint--sm:576px;--pf-global--breakpoint--md:768px;--pf-global--breakpoint--lg:992px;--pf-global--breakpoint--xl:1200px;--pf-global--breakpoint--2xl:1450px;--pf-global--height-breakpoint--sm:0;--pf-global--height-breakpoint--md:40rem;--pf-global--height-breakpoint--lg:48rem;--pf-global--height-breakpoint--xl:60rem;--pf-global--height-breakpoint--2xl:80rem;--pf-global--link--Color:#06c;--pf-global--link--Color--hover:#004080;--pf-global--link--Color--light:#2b9af3;--pf-global--link--Color--light--hover:#73bcf7;--pf-global--link--Color--dark:#06c;--pf-global--link--Color--dark--hover:#004080;--pf-global--link--Color--visited:#40199a;--pf-global--link--TextDecoration:none;--pf-global--link--TextDecoration--hover:underline;--pf-global--BorderWidth--sm:1px;--pf-global--BorderWidth--md:2px;--pf-global--BorderWidth--lg:3px;--pf-global--BorderWidth--xl:4px;--pf-global--BorderColor--100:#d2d2d2;--pf-global--BorderColor--200:#8a8d90;--pf-global--BorderColor--300:#f0f0f0;--pf-global--BorderColor--dark-100:#d2d2d2;--pf-global--BorderColor--light-100:#b8bbbe;--pf-global--BorderRadius--sm:3px;--pf-global--BorderRadius--lg:30em;--pf-global--icon--Color--light:#6a6e73;--pf-global--icon--Color--dark:#151515;--pf-global--icon--FontSize--sm:0.625rem;--pf-global--icon--FontSize--md:1.125rem;--pf-global--icon--FontSize--lg:1.5rem;--pf-global--icon--FontSize--xl:3.375rem;--pf-global--FontFamily--sans-serif:"RedHatText","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--heading--sans-serif:"RedHatDisplay","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--monospace:"Liberation Mono",consolas,"SFMono-Regular",menlo,monaco,"Courier New",monospace;--pf-global--FontFamily--redhat-updated--sans-serif:"RedHatTextUpdated","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--redhat-updated--heading--sans-serif:"RedHatDisplayUpdated","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--redhat--monospace:"RedHatMono","Liberation Mono",consolas,"SFMono-Regular",menlo,monaco,"Courier New",monospace;--pf-global--FontFamily--redhatVF--sans-serif:"RedHatTextVF","RedHatText","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--redhatVF--heading--sans-serif:"RedHatDisplayVF","RedHatDisplay","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--redhatVF--monospace:"RedHatMonoVF","RedHatMono","Liberation Mono",consolas,"SFMono-Regular",menlo,monaco,"Courier New",monospace;--pf-global--FontFamily--overpass--sans-serif:"overpass",overpass,"open sans",-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--pf-global--FontFamily--overpass--monospace:"overpass-mono",overpass-mono,"SFMono-Regular",menlo,monaco,consolas,"Liberation Mono","Courier New",monospace;--pf-global--FontSize--4xl:2.25rem;--pf-global--FontSize--3xl:1.75rem;--pf-global--FontSize--2xl:1.5rem;--pf-global--FontSize--xl:1.25rem;--pf-global--FontSize--lg:1.125rem;--pf-global--FontSize--md:1rem;--pf-global--FontSize--sm:0.875rem;--pf-global--FontSize--xs:0.75rem;--pf-global--FontWeight--light:300;--pf-global--FontWeight--normal:400;--pf-global--FontWeight--semi-bold:700;--pf-global--FontWeight--overpass--semi-bold:500;--pf-global--FontWeight--bold:700;--pf-global--FontWeight--overpass--bold:600;--pf-global--LineHeight--sm:1.3;--pf-global--LineHeight--md:1.5;--pf-global--ListStyle:disc outside;--pf-global--Transition:all 250ms cubic-bezier(0.42,0,0.58,1);--pf-global--TimingFunction:cubic-bezier(0.645,0.045,0.355,1);--pf-global--TransitionDuration:250ms;--pf-global--arrow--width:0.9375rem;--pf-global--arrow--width-lg:1.5625rem;--pf-global--target-size--MinWidth:44px;--pf-global--target-size--MinHeight:44px}.pf-m-overpass-font{--pf-global--FontFamily--sans-serif:var(--pf-global--FontFamily--overpass--sans-serif);--pf-global--FontFamily--heading--sans-serif:var(--pf-global--FontFamily--sans-serif);--pf-global--FontFamily--monospace:var(--pf-global--FontFamily--overpass--monospace);--pf-global--FontWeight--semi-bold:var(--pf-global--FontWeight--overpass--semi-bold);--pf-global--FontWeight--bold:var(--pf-global--FontWeight--overpass--bold)}.pf-m-redhat-updated-font{--pf-global--FontFamily--sans-serif:var(--pf-global--FontFamily--redhat-updated--sans-serif);--pf-global--FontFamily--heading--sans-serif:var(--pf-global--FontFamily--redhat-updated--heading--sans-serif)}.pf-m-redhatmono-font{--pf-global--FontFamily--monospace:var(--pf-global--FontFamily--redhat--monospace)}.pf-m-redhatVF-font{--pf-global--FontFamily--sans-serif:var(--pf-global--FontFamily--redhatVF--sans-serif);--pf-global--FontFamily--heading--sans-serif:var(--pf-global--FontFamily--redhatVF--heading--sans-serif);--pf-global--FontFamily--monospace:var(--pf-global--FontFamily--redhatVF--monospace)}:root:where(.pf-theme-dark){--pf-global--palette--black-50:#e0e0e0;--pf-global--palette--black-100:#c6c7c8;--pf-global--palette--black-200:#aaabac;--pf-global--palette--black-300:#868789;--pf-global--palette--black-400:#57585a;--pf-global--palette--black-500:#444548;--pf-global--palette--black-600:#36373a;--pf-global--palette--black-700:#26292d;--pf-global--palette--black-800:#1b1d21;--pf-global--palette--black-900:#0f1214;--pf-global--palette--red-9999:#fe5142;--pf-global--palette--red-8888:#ff7468;--pf-global--palette--blue-300:#1fa7f8;--pf-global--BackgroundColor--100:#1b1d21;--pf-global--BackgroundColor--150:#212427;--pf-global--BackgroundColor--200:#0f1214;--pf-global--BackgroundColor--300:#26292d;--pf-global--BackgroundColor--400:#36373a;--pf-global--BorderColor--100:#444548;--pf-global--BorderColor--200:#444548;--pf-global--BorderColor--300:#57585a;--pf-global--BorderColor--400:#aaabac;--pf-global--Color--100:#e0e0e0;--pf-global--Color--200:#aaabac;--pf-global--active-color--100:#1fa7f8;--pf-global--primary-color--100:#1fa7f8;--pf-global--primary-color--300:#06c;--pf-global--success-color--100:#5ba352;--pf-global--warning-color--100:#f0ab00;--pf-global--warning-color--200:#f4c145;--pf-global--danger-color--100:#fe5142;--pf-global--danger-color--200:#ff7468;--pf-global--link--Color:#1fa7f8;--pf-global--link--Color--hover:#73bcf7;--pf-global--link--Color--visited:#a18fff;--pf-global--disabled-color--100:#57585a;--pf-global--disabled-color--200:#444548;--pf-global--disabled-color--300:#aaabac;--pf-global--icon--Color--light:#aaabac;--pf-global--icon--Color--dark:#aaabac;--pf-global--Color--dark-100:#e0e0e0;--pf-global--Color--dark-200:#aaabac;--pf-global--Color--light-100:#e0e0e0;--pf-global--Color--light-200:#aaabac;--pf-global--Color--light-300:#3c3f42;--pf-global--BorderColor--dark-100:#444548;--pf-global--BorderColor--light-100:#444548;--pf-global--primary-color--light-100:#1fa7f8;--pf-global--primary-color--dark-100:#1fa7f8;--pf-global--link--Color--light:#1fa7f8;--pf-global--link--Color--light--hover:#73bcf7;--pf-global--link--Color--dark:#1fa7f8;--pf-global--link--Color--dark--hover:#73bcf7;--pf-global--BackgroundColor--light-100:#1b1d21;--pf-global--BackgroundColor--light-200:#0f1214;--pf-global--BackgroundColor--light-300:#26292d;--pf-global--BackgroundColor--dark-100:#1b1d21;--pf-global--BackgroundColor--dark-200:#0f1214;--pf-global--BackgroundColor--dark-300:#26292d;--pf-global--BackgroundColor--dark-400:#36373a;--pf-global--BoxShadow--sm:0 0.0625rem 0.125rem 0 rgba(3,3,3,.48),0 0 0.125rem 0 rgba(3,3,3,.24);--pf-global--BoxShadow--sm-top:0 -0.125rem 0.25rem -0.0625rem rgba(3,3,3,.64);--pf-global--BoxShadow--sm-right:0.125rem 0 0.25rem -0.0625rem rgba(3,3,3,.64);--pf-global--BoxShadow--sm-bottom:0 0.125rem 0.25rem -0.0625rem rgba(3,3,3,.64);--pf-global--BoxShadow--sm-left:-0.125rem 0 0.25rem -0.0625rem rgba(3,3,3,.64);--pf-global--BoxShadow--md:0 0.25rem 0.5rem 0rem rgba(3,3,3,.48),0 0 0.25rem 0 rgba(3,3,3,.24);--pf-global--BoxShadow--md-top:0 -0.5rem 0.5rem -0.375rem rgba(3,3,3,.72);--pf-global--BoxShadow--md-right:0.5rem 0 0.5rem -0.375rem rgba(3,3,3,.72);--pf-global--BoxShadow--md-bottom:0 0.5rem 0.5rem -0.375rem rgba(3,3,3,.72);--pf-global--BoxShadow--md-left:-0.5rem 0 0.5rem -0.375rem rgba(3,3,3,.72);--pf-global--BoxShadow--lg:0 0.5rem 1rem 0 rgba(3,3,3,.64),0 0 0.375rem 0 rgba(3,3,3,.32);--pf-global--BoxShadow--lg-top:0 -0.75rem 0.75rem -0.5rem rgba(3,3,3,.72);--pf-global--BoxShadow--lg-right:0.75rem 0 0.75rem -0.5rem rgba(3,3,3,.72);--pf-global--BoxShadow--lg-bottom:0 0.75rem 0.75rem -0.5rem rgba(3,3,3,.72);--pf-global--BoxShadow--lg-left:-0.75rem 0 0.75rem -0.5rem rgba(3,3,3,.72);--pf-global--BoxShadow--xl:0 1rem 2rem 0 rgba(3,3,3,.64),0 0 0.5rem 0 rgba(3,3,3,.4);--pf-global--BoxShadow--xl-top:0 -1rem 1rem -0.5rem rgba(3,3,3,.8);--pf-global--BoxShadow--xl-right:1rem 0 1rem -0.5rem rgba(3,3,3,.8);--pf-global--BoxShadow--xl-bottom:0 1rem 1rem -0.5rem rgba(3,3,3,.8);--pf-global--BoxShadow--xl-left:-1rem 0 1rem -0.5rem rgba(3,3,3,.8);--pf-global--BoxShadow--inset:inset 0 0 0.625rem 0 #030303}@font-face{font-family:RedHatDisplay;font-style:normal;font-weight:300;src:url(/assets/demo/site/fonts/RedHatDisplay-Regular.woff2) format("woff2"),url(/assets/demo/site/fonts/RedHatDisplay-Regular.woff) format("woff");text-rendering:optimizelegibility}@font-face{font-family:RedHatDisplay;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/RedHatDisplay-Medium.woff2) format("woff2"),url(/assets/demo/site/fonts/RedHatDisplay-Medium.woff) format("woff");text-rendering:optimizelegibility}@font-face{font-family:RedHatDisplay;font-style:normal;font-weight:700;src:url(/assets/demo/site/fonts/RedHatDisplay-Bold.woff2) format("woff2"),url(/assets/demo/site/fonts/RedHatDisplay-Bold.woff) format("woff");text-rendering:optimizelegibility}@font-face{font-family:RedHatText;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/RedHatText-Regular.woff2) format("woff2"),url(/assets/demo/site/fonts/RedHatText-Regular.woff) format("woff");text-rendering:optimizelegibility}@font-face{font-family:RedHatText;font-style:normal;font-weight:700;src:url(/assets/demo/site/fonts/RedHatText-Medium.woff2) format("woff2"),url(/assets/demo/site/fonts/RedHatText-Medium.woff) format("woff");text-rendering:optimizelegibility}@font-face{font-family:RedHatDisplayUpdated;font-style:normal;font-weight:300;src:url(/assets/demo/site/fonts/RedHatDisplay-updated-Regular.woff2) format("woff2");text-rendering:optimizelegibility}@font-face{font-family:RedHatDisplayUpdated;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/RedHatDisplay-updated-Medium.woff2) format("woff2");text-rendering:optimizelegibility}@font-face{font-family:RedHatDisplayUpdated;font-style:normal;font-weight:700;src:url(/assets/demo/site/fonts/RedHatDisplay-updated-Bold.woff2) format("woff2");text-rendering:optimizelegibility}@font-face{font-family:RedHatTextUpdated;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/RedHatText-updated-Regular.woff2) format("woff2");text-rendering:optimizelegibility}@font-face{font-family:RedHatTextUpdated;font-style:normal;font-weight:700;src:url(/assets/demo/site/fonts/RedHatText-updated-Medium.woff2) format("woff2");text-rendering:optimizelegibility}@font-face{font-display:fallback;font-family:RedHatMono;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/RedHatMono-updated-Regular.woff2) format("woff2")}@font-face{font-display:fallback;font-family:RedHatDisplayVF;font-style:normal;font-weight:300 900;src:url(/assets/demo/site/fonts/RedHatDisplayVFModified-updated.woff2) format("woff2-variations")}@font-face{font-display:fallback;font-family:RedHatDisplayVF;font-style:italic;font-weight:300 900;src:url(/assets/demo/site/fonts/RedHatDisplayVF-updated-ItalicModified.woff2) format("woff2-variations")}@font-face{font-display:fallback;font-family:RedHatTextVF;font-style:normal;font-weight:400 500;src:url(/assets/demo/site/fonts/RedHatTextVFModified-updated.woff2) format("woff2-variations")}@font-face{font-display:fallback;font-family:RedHatTextVF;font-style:italic;font-weight:400 500;src:url(/assets/demo/site/fonts/RedHatTextVF-updated-ItalicModified.woff2) format("woff2-variations")}@font-face{font-display:fallback;font-family:RedHatMonoVF;font-style:normal;font-weight:300 700;src:url(/assets/demo/site/fonts/RedHatMonoVF-updated.woff2) format("woff2-variations")}@font-face{font-display:fallback;font-family:RedHatMonoVF;font-style:italic;font-weight:300 700;src:url(/assets/demo/site/fonts/RedHatMonoVF-updated-Italic.woff2) format("woff2-variations")}@font-face{font-family:overpass;font-style:normal;font-weight:200;src:url(/assets/demo/site/fonts/overpass-thin.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-thin.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:200;src:url(/assets/demo/site/fonts/overpass-thin-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-thin-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:300;src:url(/assets/demo/site/fonts/overpass-extralight.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-extralight.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:300;src:url(/assets/demo/site/fonts/overpass-extralight-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-extralight-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/overpass-light.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-light.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:400;src:url(/assets/demo/site/fonts/overpass-light-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-light-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:500;src:url(/assets/demo/site/fonts/overpass-regular.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-regular.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:500;src:url(/assets/demo/site/fonts/overpass-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:600;src:url(/assets/demo/site/fonts/overpass-semibold.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-semibold.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:600;src:url(/assets/demo/site/fonts/overpass-semibold-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-semibold-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:700;src:url(/assets/demo/site/fonts/overpass-bold.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-bold.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:700;src:url(/assets/demo/site/fonts/overpass-bold-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-bold-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:800;src:url(/assets/demo/site/fonts/overpass-extrabold.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-extrabold.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:800;src:url(/assets/demo/site/fonts/overpass-extrabold-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-extrabold-italic.woff) format("woff")}@font-face{font-family:overpass;font-style:normal;font-weight:900;src:url(/assets/demo/site/fonts/overpass-heavy.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-heavy.woff) format("woff")}@font-face{font-family:overpass;font-style:italic;font-weight:900;src:url(/assets/demo/site/fonts/overpass-heavy-italic.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-heavy-italic.woff) format("woff")}@font-face{font-family:overpass-mono;font-style:normal;font-weight:300;src:url(/assets/demo/site/fonts/overpass-mono-light.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-mono-light.woff) format("woff")}@font-face{font-family:overpass-mono;font-style:normal;font-weight:400;src:url(/assets/demo/site/fonts/overpass-mono-regular.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-mono-regular.woff) format("woff")}@font-face{font-family:overpass-mono;font-style:normal;font-weight:500;src:url(/assets/demo/site/fonts/overpass-mono-semibold.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-mono-semibold.woff) format("woff")}@font-face{font-family:overpass-mono;font-style:normal;font-weight:600;src:url(/assets/demo/site/fonts/overpass-mono-bold.woff2) format("woff2"),url(/assets/demo/site/fonts/overpass-mono-bold.woff) format("woff")}[class*=pf-c-],[class*=pf-c-]:after,[class*=pf-c-]:before{background-color:transparent;margin:0;padding:0}html{font-size:var(--pf-global--root--FontSize,unset)!important}.pf-screen-reader{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-screen-reader.pf-m-full-size{height:100%;width:100%}.pf-screen-reader.pf-m-absolute{position:absolute}.pf-m-tabular-nums{font-variant-numeric:tabular-nums}blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}body,html{height:100%}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:var(--pf-global--FontWeight--normal)}ul{list-style:none}button,input,optgroup,select,textarea{color:var(--pf-global--Color--100);font-family:inherit;font-size:100%;line-height:var(--pf-global--LineHeight--md);margin:0}audio,embed,iframe,img,object,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0;text-align:left}code,pre{font-family:var(--pf-global--FontFamily--monospace)}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15}body{background-color:var(--pf-global--BackgroundColor--100);font-family:var(--pf-global--FontFamily--sans-serif);font-size:var(--pf-global--FontSize--md);font-weight:var(--pf-global--FontWeight--normal);line-height:var(--pf-global--LineHeight--md);text-align:left}a{color:var(--pf-global--link--Color);font-weight:var(--pf-global--link--FontWeight);text-decoration:var(--pf-global--link--TextDecoration)}a:hover{--pf-global--link--Color:var(--pf-global--link--Color--hover);--pf-global--link--TextDecoration:var(--pf-global--link--TextDecoration--hover)}a,button{cursor:pointer}.pf-m-overpass-font a{font-weight:var(--pf-global--FontWeight--semi-bold)}:root:where(.pf-theme-dark){color-scheme:dark}.pf-t-dark.pf-m-transparent{background-color:transparent}.pf-t-dark.pf-m-transparent-100{background-color:rgba(3,3,3,.42)}.pf-t-dark.pf-m-transparent-200{background-color:rgba(3,3,3,.6)}.pf-t-dark.pf-m-opaque-100{background-color:#1b1d21}.pf-t-dark.pf-m-opaque-200{background-color:#0f1214}.pf-t-light.pf-m-transparent{background-color:transparent}.pf-t-light.pf-m-opaque-100{background-color:#fff}.pf-t-light.pf-m-opaque-200{background-color:#c6c7c8}.pf-t-light.pf-m-opaque-300{background-color:#aaabac}@font-face{font-family:pficon;src:url(/assets/demo/site/fonts/pficon.woff2) format("woff2"),url(/assets/demo/site/fonts/pficon.woff) format("woff")}.pf-icon-add-circle-o:before,.pf-icon-ansible-tower:before,.pf-icon-applications:before,.pf-icon-arrow:before,.pf-icon-asleep:before,.pf-icon-attention-bell:before,.pf-icon-automation:before,.pf-icon-bell:before,.pf-icon-blueprint:before,.pf-icon-build:before,.pf-icon-builder-image:before,.pf-icon-bundle:before,.pf-icon-catalog:before,.pf-icon-chat:before,.pf-icon-close:before,.pf-icon-cloud-security:before,.pf-icon-cloud-tenant:before,.pf-icon-cluster:before,.pf-icon-connected:before,.pf-icon-container-node:before,.pf-icon-cpu:before,.pf-icon-critical-risk:before,.pf-icon-data-sink:before,.pf-icon-data-source:before,.pf-icon-degraded:before,.pf-icon-disconnected:before,.pf-icon-domain:before,.pf-icon-edit:before,.pf-icon-enhancement:before,.pf-icon-enterprise:before,.pf-icon-equalizer:before,.pf-icon-error-circle-o:before,.pf-icon-export:before,.pf-icon-filter:before,.pf-icon-flavor:before,.pf-icon-folder-close:before,.pf-icon-folder-open:before,.pf-icon-globe-route:before,.pf-icon-help:before,.pf-icon-history:before,.pf-icon-home:before,.pf-icon-import:before,.pf-icon-in-progress:before,.pf-icon-info:before,.pf-icon-infrastructure:before,.pf-icon-integration:before,.pf-icon-key:before,.pf-icon-locked:before,.pf-icon-maintenance:before,.pf-icon-memory:before,.pf-icon-messages:before,.pf-icon-middleware:before,.pf-icon-migration:before,.pf-icon-module:before,.pf-icon-monitoring:before,.pf-icon-namespaces:before,.pf-icon-network:before,.pf-icon-new-process:before,.pf-icon-not-started:before,.pf-icon-off:before,.pf-icon-ok:before,.pf-icon-on-running:before,.pf-icon-on:before,.pf-icon-open-drawer-right:before,.pf-icon-openshift:before,.pf-icon-openstack:before,.pf-icon-optimize:before,.pf-icon-orders:before,.pf-icon-os-image:before,.pf-icon-package:before,.pf-icon-panel-close:before,.pf-icon-panel-open:before,.pf-icon-paused:before,.pf-icon-pending:before,.pf-icon-pficon-dragdrop:before,.pf-icon-pficon-history:before,.pf-icon-pficon-network-range:before,.pf-icon-pficon-satellite:before,.pf-icon-pficon-sort-common-asc:before,.pf-icon-pficon-sort-common-desc:before,.pf-icon-pficon-template:before,.pf-icon-pficon-vcenter:before,.pf-icon-plugged:before,.pf-icon-port:before,.pf-icon-print:before,.pf-icon-private:before,.pf-icon-process-automation:before,.pf-icon-project:before,.pf-icon-rebalance:before,.pf-icon-rebooting:before,.pf-icon-regions:before,.pf-icon-registry:before,.pf-icon-remove2:before,.pf-icon-replicator:before,.pf-icon-repository:before,.pf-icon-resource-pool:before,.pf-icon-resources-almost-empty:before,.pf-icon-resources-almost-full:before,.pf-icon-resources-empty:before,.pf-icon-resources-full:before,.pf-icon-running:before,.pf-icon-save:before,.pf-icon-screen:before,.pf-icon-security:before,.pf-icon-server-group:before,.pf-icon-server:before,.pf-icon-service-catalog:before,.pf-icon-service:before,.pf-icon-services:before,.pf-icon-spinner2:before,.pf-icon-spinner:before,.pf-icon-storage-domain:before,.pf-icon-task:before,.pf-icon-tenant:before,.pf-icon-thumb-tack:before,.pf-icon-topology:before,.pf-icon-trend-down:before,.pf-icon-trend-up:before,.pf-icon-unknown:before,.pf-icon-unlocked:before,.pf-icon-unplugged:before,.pf-icon-user:before,.pf-icon-users:before,.pf-icon-virtual-machine:before,.pf-icon-volume:before,.pf-icon-warning-triangle:before,.pf-icon-zone:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:pficon;font-style:normal;font-variant:normal;font-weight:400;text-decoration:none;text-transform:none}.pf-icon-add-circle-o:before{content:"\e61b"}.pf-icon-ansible-tower:before{content:"\e950"}.pf-icon-applications:before{content:"\e936"}.pf-icon-arrow:before{content:"\e929"}.pf-icon-asleep:before{content:"\e92e"}.pf-icon-attention-bell:before{content:"\e951"}.pf-icon-automation:before{content:"\e937"}.pf-icon-bell:before{content:"\e952"}.pf-icon-blueprint:before{content:"\e915"}.pf-icon-build:before{content:"\e902"}.pf-icon-builder-image:before{content:"\e800"}.pf-icon-bundle:before{content:"\e918"}.pf-icon-catalog:before{content:"\e953"}.pf-icon-chat:before{content:"\e954"}.pf-icon-close:before{content:"\e60b"}.pf-icon-cloud-security:before{content:"\e903"}.pf-icon-cloud-tenant:before{content:"\e904"}.pf-icon-cluster:before{content:"\e620"}.pf-icon-connected:before{content:"\e938"}.pf-icon-container-node:before{content:"\e621"}.pf-icon-cpu:before{content:"\e927"}.pf-icon-critical-risk:before{content:"\e976"}.pf-icon-data-sink:before{content:"\e978"}.pf-icon-data-source:before{content:"\e979"}.pf-icon-degraded:before{content:"\e91b"}.pf-icon-disconnected:before{content:"\e955"}.pf-icon-domain:before{content:"\e919"}.pf-icon-edit:before{content:"\e60a"}.pf-icon-enhancement:before{content:"\e93a"}.pf-icon-enterprise:before{content:"\e906"}.pf-icon-equalizer:before{content:"\e956"}.pf-icon-error-circle-o:before{content:"\e926"}.pf-icon-export:before{content:"\e616"}.pf-icon-filter:before{content:"\e943"}.pf-icon-flavor:before{content:"\e957"}.pf-icon-folder-close:before{content:"\e607"}.pf-icon-folder-open:before{content:"\e606"}.pf-icon-globe-route:before{content:"\e958"}.pf-icon-help:before{content:"\e605"}.pf-icon-history:before{content:"\e617"}.pf-icon-home:before{content:"\e618"}.pf-icon-import:before{content:"\e615"}.pf-icon-in-progress:before{content:"\e933"}.pf-icon-info:before{content:"\e92b"}.pf-icon-infrastructure:before{content:"\e93d"}.pf-icon-integration:before{content:"\e948"}.pf-icon-key:before{content:"\e924"}.pf-icon-locked:before{content:"\e923"}.pf-icon-maintenance:before{content:"\e932"}.pf-icon-memory:before{content:"\e908"}.pf-icon-messages:before{content:"\e603"}.pf-icon-middleware:before{content:"\e917"}.pf-icon-migration:before{content:"\e931"}.pf-icon-module:before{content:"\e959"}.pf-icon-monitoring:before{content:"\e95a"}.pf-icon-namespaces:before{content:"\e95b"}.pf-icon-network:before{content:"\e909"}.pf-icon-new-process:before{content:"\e95c"}.pf-icon-not-started:before{content:"\e95d"}.pf-icon-off:before{content:"\e92d"}.pf-icon-ok:before{content:"\e602"}.pf-icon-on-running:before{content:"\e925"}.pf-icon-on:before{content:"\e92c"}.pf-icon-open-drawer-right:before{content:"\e977"}.pf-icon-openshift:before{content:"\e95e"}.pf-icon-openstack:before{content:"\e95f"}.pf-icon-optimize:before{content:"\e93e"}.pf-icon-orders:before{content:"\e93f"}.pf-icon-os-image:before{content:"\e960"}.pf-icon-package:before{content:"\e961"}.pf-icon-panel-close:before{content:"\e962"}.pf-icon-panel-open:before{content:"\e963"}.pf-icon-paused:before{content:"\e92f"}.pf-icon-pending:before{content:"\e964"}.pf-icon-pficon-dragdrop:before{content:"\e965"}.pf-icon-pficon-history:before{content:"\e966"}.pf-icon-pficon-network-range:before{content:"\e967"}.pf-icon-pficon-satellite:before{content:"\e968"}.pf-icon-pficon-sort-common-asc:before{content:"\e94e"}.pf-icon-pficon-sort-common-desc:before{content:"\e94f"}.pf-icon-pficon-template:before{content:"\e94c"}.pf-icon-pficon-vcenter:before{content:"\e969"}.pf-icon-plugged:before{content:"\e96a"}.pf-icon-port:before{content:"\e96b"}.pf-icon-print:before{content:"\e612"}.pf-icon-private:before{content:"\e914"}.pf-icon-process-automation:before{content:"\e949"}.pf-icon-project:before{content:"\e96c"}.pf-icon-rebalance:before{content:"\e91c"}.pf-icon-rebooting:before{content:"\e96d"}.pf-icon-regions:before{content:"\e90a"}.pf-icon-registry:before{content:"\e623"}.pf-icon-remove2:before{content:"\e96e"}.pf-icon-replicator:before{content:"\e624"}.pf-icon-repository:before{content:"\e90b"}.pf-icon-resource-pool:before{content:"\e90c"}.pf-icon-resources-almost-empty:before{content:"\e91d"}.pf-icon-resources-almost-full:before{content:"\e912"}.pf-icon-resources-empty:before{content:"\e96f"}.pf-icon-resources-full:before{content:"\e913"}.pf-icon-running:before{content:"\e970"}.pf-icon-save:before{content:"\e601"}.pf-icon-screen:before{content:"\e971"}.pf-icon-security:before{content:"\e946"}.pf-icon-server-group:before{content:"\e91a"}.pf-icon-server:before{content:"\e90d"}.pf-icon-service-catalog:before{content:"\e972"}.pf-icon-service:before{content:"\e61e"}.pf-icon-services:before{content:"\e947"}.pf-icon-spinner:before{content:"\e973"}.pf-icon-spinner2:before{content:"\e613"}.pf-icon-storage-domain:before{content:"\e90e"}.pf-icon-task:before{content:"\e974"}.pf-icon-tenant:before{content:"\e916"}.pf-icon-thumb-tack:before{content:"\e920"}.pf-icon-topology:before{content:"\e608"}.pf-icon-trend-down:before{content:"\e900"}.pf-icon-trend-up:before{content:"\e901"}.pf-icon-unknown:before{content:"\e935"}.pf-icon-unlocked:before{content:"\e922"}.pf-icon-unplugged:before{content:"\e942"}.pf-icon-user:before{content:"\e91e"}.pf-icon-users:before{content:"\e91f"}.pf-icon-virtual-machine:before{content:"\e90f"}.pf-icon-volume:before{content:"\e910"}.pf-icon-warning-triangle:before{content:"\e975"}.pf-icon-zone:before{content:"\e911"}.pf-c-chart svg g[clip-path]{mix-blend-mode:multiply}:root{--pf-chart-color-blue-100:#8bc1f7;--pf-chart-color-blue-200:#519de9;--pf-chart-color-blue-300:#06c;--pf-chart-color-blue-400:#004b95;--pf-chart-color-blue-500:#002f5d;--pf-chart-color-green-100:#bde2b9;--pf-chart-color-green-200:#7cc674;--pf-chart-color-green-300:#4cb140;--pf-chart-color-green-400:#38812f;--pf-chart-color-green-500:#23511e;--pf-chart-color-cyan-100:#a2d9d9;--pf-chart-color-cyan-200:#73c5c5;--pf-chart-color-cyan-300:#009596;--pf-chart-color-cyan-400:#005f60;--pf-chart-color-cyan-500:#003737;--pf-chart-color-purple-100:#b2b0ea;--pf-chart-color-purple-200:#8481dd;--pf-chart-color-purple-300:#5752d1;--pf-chart-color-purple-400:#3c3d99;--pf-chart-color-purple-500:#2a265f;--pf-chart-color-gold-100:#f9e0a2;--pf-chart-color-gold-200:#f6d173;--pf-chart-color-gold-300:#f4c145;--pf-chart-color-gold-400:#f0ab00;--pf-chart-color-gold-500:#c58c00;--pf-chart-color-orange-100:#f4b678;--pf-chart-color-orange-200:#ef9234;--pf-chart-color-orange-300:#ec7a08;--pf-chart-color-orange-400:#c46100;--pf-chart-color-orange-500:#8f4700;--pf-chart-color-red-100:#c9190b;--pf-chart-color-red-200:#a30000;--pf-chart-color-red-300:#7d1007;--pf-chart-color-red-400:#470000;--pf-chart-color-red-500:#2c0000;--pf-chart-color-black-100:#f0f0f0;--pf-chart-color-black-200:#d2d2d2;--pf-chart-color-black-300:#b8bbbe;--pf-chart-color-black-400:#8a8d90;--pf-chart-color-black-500:#6a6e73;--pf-chart-global--FontSize--xs:12;--pf-chart-global--FontSize--sm:14;--pf-chart-global--FontSize--lg:18;--pf-chart-global--FontSize--2xl:24;--pf-chart-global--FontFamily:"RedHatText","Overpass",overpass,helvetica,arial,sans-serif;--pf-chart-global--letter-spacing:normal;--pf-chart-global--label--Padding:10;--pf-chart-global--label--Margin:8;--pf-chart-global--label--stroke:transparent;--pf-chart-global--label--text-anchor:middle;--pf-chart-global--label--stroke--Width:0;--pf-chart-global--label--Fill:#151515;--pf-chart-global--layout--Padding:50;--pf-chart-global--layout--Height:300;--pf-chart-global--layout--Width:450;--pf-chart-global--stroke--Width--xs:1;--pf-chart-global--stroke--Width--sm:2;--pf-chart-global--BorderWidth--xs:1;--pf-chart-global--BorderWidth--sm:2;--pf-chart-global--BorderWidth--lg:8;--pf-chart-global--stroke-line-cap:round;--pf-chart-global--stroke-line-join:round;--pf-chart-global--danger--Color--100:#c9190b;--pf-chart-global--warning--Color--100:#ec7a08;--pf-chart-global--warning--Color--200:#f0ab00;--pf-chart-global--success--Color--100:#06c;--pf-chart-global--Fill--Color--900:#151515;--pf-chart-global--Fill--Color--700:#4f5255;--pf-chart-global--Fill--Color--500:#8a8d90;--pf-chart-global--Fill--Color--400:#b8bbbe;--pf-chart-global--Fill--Color--300:#d2d2d2;--pf-chart-global--Fill--Color--200:#f0f0f0;--pf-chart-global--Fill--Color--white:#fff;--pf-chart-area--Opacity:0.3;--pf-chart-area--stroke--Width:2;--pf-chart-area--data--Fill:#151515;--pf-chart-axis--axis--stroke--Width:1;--pf-chart-axis--axis--stroke--Color:#d2d2d2;--pf-chart-axis--axis--Fill:transparent;--pf-chart-axis--axis-label--Padding:40;--pf-chart-axis--axis-label--stroke--Color:transparent;--pf-chart-axis--grid--Fill:none;--pf-chart-axis--grid--stroke--Color:#d2d2d2;--pf-chart-axis--grid--PointerEvents:painted;--pf-chart-axis--tick--Fill:transparent;--pf-chart-axis--tick--Size:5;--pf-chart-axis--tick--Width:1;--pf-chart-axis--tick--stroke--Color:#d2d2d2;--pf-chart-axis--tick-label--Fill:#4f5255;--pf-chart-bar--Width:10;--pf-chart-bar--data--stroke:none;--pf-chart-bar--data--Fill:#151515;--pf-chart-bar--data--Padding:8;--pf-chart-bar--data-stroke--Width:0;--pf-chart-boxplot--max--Padding:8;--pf-chart-boxplot--max--stroke--Color:#151515;--pf-chart-boxplot--max--stroke--Width:1;--pf-chart-boxplot--median--Padding:8;--pf-chart-boxplot--median--stroke--Color:#151515;--pf-chart-boxplot--median--stroke--Width:1;--pf-chart-boxplot--min--Padding:8;--pf-chart-boxplot--min--stroke--Width:1;--pf-chart-boxplot--min--stroke--Color:#151515;--pf-chart-boxplot--lower-quartile--Padding:8;--pf-chart-boxplot--lower-quartile--Fill:#8a8d90;--pf-chart-boxplot--upper-quartile--Padding:8;--pf-chart-boxplot--upper-quartile--Fill:#8a8d90;--pf-chart-boxplot--box--Width:20;--pf-chart-bullet--axis--tick--count:5;--pf-chart-bullet--comparative-measure--Fill--Color:#4f5255;--pf-chart-bullet--comparative-measure--stroke--Color:#4f5255;--pf-chart-bullet--comparative-measure--stroke--Width:1;--pf-chart-bullet--comparative-measure--error--Fill--Color:#c9190b;--pf-chart-bullet--comparative-measure--error--stroke--Color:#c9190b;--pf-chart-bullet--comparative-measure--error--stroke--Width:2;--pf-chart-bullet--comparative-measure--error--Width:30;--pf-chart-bullet--comparative-measure--warning--Fill--Color:#ec7a08;--pf-chart-bullet--comparative-measure--warning--stroke--Color:#ec7a08;--pf-chart-bullet--comparative-measure--warning--stroke--Width:2;--pf-chart-bullet--comparative-measure--warning--Width:30;--pf-chart-bullet--comparative-measure--Width:30;--pf-chart-bullet--group-title--divider--Fill--Color:#f0f0f0;--pf-chart-bullet--group-title--divider--stroke--Color:#f0f0f0;--pf-chart-bullet--group-title--divider--stroke--Width:2;--pf-chart-bullet--Height:140;--pf-chart-bullet--label--title--Fill:#151515;--pf-chart-bullet--label--grouptitle--Fill:#151515;--pf-chart-bullet--label--subtitle--Fill:#b8bbbe;--pf-chart-bullet--primary-measure--dot--size:6;--pf-chart-bullet--primary-measure--segmented--Width:9;--pf-chart-bullet--negative-measure--ColorScale--100:#c9190b;--pf-chart-bullet--negative-measure--ColorScale--200:#a30000;--pf-chart-bullet--negative-measure--ColorScale--300:#7d1007;--pf-chart-bullet--negative-measure--ColorScale--400:#470000;--pf-chart-bullet--negative-measure--ColorScale--500:#2c0000;--pf-chart-bullet--qualitative-range--Width:30;--pf-chart-bullet--qualitative-range--ColorScale--100:#f0f0f0;--pf-chart-bullet--qualitative-range--ColorScale--200:#d2d2d2;--pf-chart-bullet--qualitative-range--ColorScale--300:#b8bbbe;--pf-chart-bullet--qualitative-range--ColorScale--400:#8a8d90;--pf-chart-bullet--qualitative-range--ColorScale--500:#6a6e73;--pf-chart-candelstick--data--stroke--Width:1;--pf-chart-candelstick--data--stroke--Color:#151515;--pf-chart-candelstick--candle--positive--Color:#fff;--pf-chart-candelstick--candle--negative--Color:#151515;--pf-chart-container--cursor--line--Fill:#151515;--pf-chart-donut--label--title--Fill:#151515;--pf-chart-donut--label--subtitle--Fill:#b8bbbe;--pf-chart-donut--label--subtitle--position:center;--pf-chart-donut--pie--Height:230;--pf-chart-donut--pie--angle--Padding:1;--pf-chart-donut--pie--Padding:20;--pf-chart-donut--pie--Width:230;--pf-chart-donut--threshold--first--Color:#f0f0f0;--pf-chart-donut--threshold--second--Color:#d2d2d2;--pf-chart-donut--threshold--third--Color:#b8bbbe;--pf-chart-donut--threshold--warning--Color:#f0ab00;--pf-chart-donut--threshold--danger--Color:#c9190b;--pf-chart-donut--threshold--dynamic--pie--Height:202;--pf-chart-donut--threshold--dynamic--pie--Padding:20;--pf-chart-donut--threshold--dynamic--pie--Width:202;--pf-chart-donut--threshold--static--pie--Height:230;--pf-chart-donut--threshold--static--pie--angle--Padding:1;--pf-chart-donut--threshold--static--pie--Padding:20;--pf-chart-donut--threshold--static--pie--Width:230;--pf-chart-donut--utilization--dynamic--pie--Height:230;--pf-chart-donut--utilization--dynamic--pie--angle--Padding:1;--pf-chart-donut--utilization--dynamic--pie--Padding:20;--pf-chart-donut--utilization--dynamic--pie--Width:230;--pf-chart-donut--utilization--static--pie--Padding:20;--pf-chart-errorbar--BorderWidth:8;--pf-chart-errorbar--data--Fill:transparent;--pf-chart-errorbar--data--Opacity:1;--pf-chart-errorbar--data-stroke--Width:2;--pf-chart-errorbar--data-stroke--Color:#151515;--pf-chart-legend--gutter--Width:20;--pf-chart-legend--orientation:horizontal;--pf-chart-legend--position:right;--pf-chart-legend--title--orientation:top;--pf-chart-legend--data--type:square;--pf-chart-legend--title--Padding:2;--pf-chart-legend--Margin:16;--pf-chart-line--data--Fill:transparent;--pf-chart-line--data--Opacity:1;--pf-chart-line--data--stroke--Width:2;--pf-chart-line--data--stroke--Color:#151515;--pf-chart-pie--Padding:20;--pf-chart-pie--data--Padding:8;--pf-chart-pie--data--stroke--Width:1;--pf-chart-pie--data--stroke--Color:transparent;--pf-chart-pie--labels--Padding:8;--pf-chart-pie--Height:230;--pf-chart-pie--Width:230;--pf-chart-scatter--data--stroke--Color:transparent;--pf-chart-scatter--data--stroke--Width:0;--pf-chart-scatter--data--Opacity:1;--pf-chart-scatter--data--Fill:#151515;--pf-chart-scatter--active--size:5;--pf-chart-scatter--size:3;--pf-chart-stack--data--stroke--Width:1;--pf-chart-threshold--stroke-dash-array:4,2;--pf-chart-threshold--stroke--Width:1.5;--pf-chart-tooltip--corner-radius:0;--pf-chart-tooltip--pointer-length:10;--pf-chart-tooltip--Fill:#f0f0f0;--pf-chart-tooltip--flyoutStyle--corner-radius:0;--pf-chart-tooltip--flyoutStyle--stroke--Width:0;--pf-chart-tooltip--flyoutStyle--PointerEvents:none;--pf-chart-tooltip--flyoutStyle--stroke--Color:#151515;--pf-chart-tooltip--flyoutStyle--Fill:#151515;--pf-chart-tooltip--pointer--Width:20;--pf-chart-tooltip--Padding:8;--pf-chart-tooltip--PointerEvents:none;--pf-chart-voronoi--data--Fill:transparent;--pf-chart-voronoi--data--stroke--Color:transparent;--pf-chart-voronoi--data--stroke--Width:0;--pf-chart-voronoi--labels--Padding:8;--pf-chart-voronoi--labels--Fill:#f0f0f0;--pf-chart-voronoi--labels--PointerEvents:none;--pf-chart-voronoi--flyout--stroke--Width:1;--pf-chart-voronoi--flyout--stroke--Color:#151515;--pf-chart-voronoi--flyout--stroke--Fill:#151515;--pf-chart-voronoi--flyout--PointerEvents:none;--pf-chart-theme--blue--ColorScale--100:#06c;--pf-chart-theme--blue--ColorScale--200:#8bc1f7;--pf-chart-theme--blue--ColorScale--300:#002f5d;--pf-chart-theme--blue--ColorScale--400:#519de9;--pf-chart-theme--blue--ColorScale--500:#004b95;--pf-chart-theme--cyan--ColorScale--100:#009596;--pf-chart-theme--cyan--ColorScale--200:#a2d9d9;--pf-chart-theme--cyan--ColorScale--300:#003737;--pf-chart-theme--cyan--ColorScale--400:#73c5c5;--pf-chart-theme--cyan--ColorScale--500:#005f60;--pf-chart-theme--gold--ColorScale--100:#f4c145;--pf-chart-theme--gold--ColorScale--200:#f9e0a2;--pf-chart-theme--gold--ColorScale--300:#c58c00;--pf-chart-theme--gold--ColorScale--400:#f6d173;--pf-chart-theme--gold--ColorScale--500:#f0ab00;--pf-chart-theme--gray--ColorScale--100:#b8bbbe;--pf-chart-theme--gray--ColorScale--200:#f0f0f0;--pf-chart-theme--gray--ColorScale--300:#6a6e73;--pf-chart-theme--gray--ColorScale--400:#d2d2d2;--pf-chart-theme--gray--ColorScale--500:#8a8d90;--pf-chart-theme--green--ColorScale--100:#4cb140;--pf-chart-theme--green--ColorScale--200:#bde2b9;--pf-chart-theme--green--ColorScale--300:#23511e;--pf-chart-theme--green--ColorScale--400:#7cc674;--pf-chart-theme--green--ColorScale--500:#38812f;--pf-chart-theme--multi-color-ordered--ColorScale--100:#06c;--pf-chart-theme--multi-color-ordered--ColorScale--200:#4cb140;--pf-chart-theme--multi-color-ordered--ColorScale--300:#009596;--pf-chart-theme--multi-color-ordered--ColorScale--400:#f4c145;--pf-chart-theme--multi-color-ordered--ColorScale--500:#ec7a08;--pf-chart-theme--multi-color-ordered--ColorScale--600:#8bc1f7;--pf-chart-theme--multi-color-ordered--ColorScale--700:#23511e;--pf-chart-theme--multi-color-ordered--ColorScale--800:#a2d9d9;--pf-chart-theme--multi-color-ordered--ColorScale--900:#f9e0a2;--pf-chart-theme--multi-color-ordered--ColorScale--1000:#8f4700;--pf-chart-theme--multi-color-ordered--ColorScale--1100:#002f5d;--pf-chart-theme--multi-color-ordered--ColorScale--1200:#bde2b9;--pf-chart-theme--multi-color-ordered--ColorScale--1300:#003737;--pf-chart-theme--multi-color-ordered--ColorScale--1400:#c58c00;--pf-chart-theme--multi-color-ordered--ColorScale--1500:#f4b678;--pf-chart-theme--multi-color-ordered--ColorScale--1600:#519de9;--pf-chart-theme--multi-color-ordered--ColorScale--1700:#38812f;--pf-chart-theme--multi-color-ordered--ColorScale--1800:#73c5c5;--pf-chart-theme--multi-color-ordered--ColorScale--1900:#f6d173;--pf-chart-theme--multi-color-ordered--ColorScale--2000:#c46100;--pf-chart-theme--multi-color-ordered--ColorScale--2100:#004b95;--pf-chart-theme--multi-color-ordered--ColorScale--2200:#7cc674;--pf-chart-theme--multi-color-ordered--ColorScale--2300:#005f60;--pf-chart-theme--multi-color-ordered--ColorScale--2400:#f0ab00;--pf-chart-theme--multi-color-ordered--ColorScale--2500:#ef9234;--pf-chart-theme--multi-color-unordered--ColorScale--100:#06c;--pf-chart-theme--multi-color-unordered--ColorScale--200:#f4c145;--pf-chart-theme--multi-color-unordered--ColorScale--300:#4cb140;--pf-chart-theme--multi-color-unordered--ColorScale--400:#5752d1;--pf-chart-theme--multi-color-unordered--ColorScale--500:#ec7a08;--pf-chart-theme--multi-color-unordered--ColorScale--600:#009596;--pf-chart-theme--multi-color-unordered--ColorScale--700:#b8bbbe;--pf-chart-theme--multi-color-unordered--ColorScale--800:#8bc1f7;--pf-chart-theme--multi-color-unordered--ColorScale--900:#c58c00;--pf-chart-theme--multi-color-unordered--ColorScale--1000:#bde2b9;--pf-chart-theme--multi-color-unordered--ColorScale--1100:#2a265f;--pf-chart-theme--multi-color-unordered--ColorScale--1200:#f4b678;--pf-chart-theme--multi-color-unordered--ColorScale--1300:#003737;--pf-chart-theme--multi-color-unordered--ColorScale--1400:#f0f0f0;--pf-chart-theme--multi-color-unordered--ColorScale--1500:#002f5d;--pf-chart-theme--multi-color-unordered--ColorScale--1600:#f9e0a2;--pf-chart-theme--multi-color-unordered--ColorScale--1700:#23511e;--pf-chart-theme--multi-color-unordered--ColorScale--1800:#b2b0ea;--pf-chart-theme--multi-color-unordered--ColorScale--1900:#8f4700;--pf-chart-theme--multi-color-unordered--ColorScale--2000:#a2d9d9;--pf-chart-theme--multi-color-unordered--ColorScale--2100:#6a6e73;--pf-chart-theme--multi-color-unordered--ColorScale--2200:#519de9;--pf-chart-theme--multi-color-unordered--ColorScale--2300:#f0ab00;--pf-chart-theme--multi-color-unordered--ColorScale--2400:#7cc674;--pf-chart-theme--multi-color-unordered--ColorScale--2500:#3c3d99;--pf-chart-theme--multi-color-unordered--ColorScale--2600:#ef9234;--pf-chart-theme--multi-color-unordered--ColorScale--2700:#005f60;--pf-chart-theme--multi-color-unordered--ColorScale--2800:#d2d2d2;--pf-chart-theme--multi-color-unordered--ColorScale--2900:#004b95;--pf-chart-theme--multi-color-unordered--ColorScale--3000:#f6d173;--pf-chart-theme--multi-color-unordered--ColorScale--3100:#38812f;--pf-chart-theme--multi-color-unordered--ColorScale--3200:#8481dd;--pf-chart-theme--multi-color-unordered--ColorScale--3300:#c46100;--pf-chart-theme--multi-color-unordered--ColorScale--3400:#73c5c5;--pf-chart-theme--multi-color-unordered--ColorScale--3500:#8a8d90;--pf-chart-theme--orange--ColorScale--100:#ec7a08;--pf-chart-theme--orange--ColorScale--200:#f4b678;--pf-chart-theme--orange--ColorScale--300:#8f4700;--pf-chart-theme--orange--ColorScale--400:#ef9234;--pf-chart-theme--orange--ColorScale--500:#c46100;--pf-chart-theme--purple--ColorScale--100:#5752d1;--pf-chart-theme--purple--ColorScale--200:#b2b0ea;--pf-chart-theme--purple--ColorScale--300:#2a265f;--pf-chart-theme--purple--ColorScale--400:#8481dd;--pf-chart-theme--purple--ColorScale--500:#3c3d99}.pfext-quick-start-panel-content__body dl{margin:0}.pfext-quick-start-panel-content__body dt{font-weight:var(--pf-global--FontWeight--bold)}.pfext-quick-start-panel-content__body dd{margin-bottom:20px}.pfext-quick-start-panel-content__body dd:last-child{margin-bottom:0}.pfext-quick-start-panel-content__body input[type=number]{-webkit-appearance:textfield;appearance:textfield;max-width:100px}.pfext-quick-start-panel-content__body input[type=number]::-webkit-inner-spin-button,.pfext-quick-start-panel-content__body input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.pfext-quick-start-panel-content__body input[type=radio]{margin-right:7px}.pfext-quick-start-panel-content__body .pf-c-list{--pf-c-list--PaddingLeft:20px}.pfext-page-layout__content,.pfext-popover__base,.pfext-quick-start-panel-content__body,.pfext-quick-start-panel-content__header{--pf-global--FontSize--md:14px;--pf-global--FontSize--sm:13px}.pfext-page-layout__content ul,.pfext-popover__base ul,.pfext-quick-start-panel-content__body ul,.pfext-quick-start-panel-content__header ul{list-style-type:disc}.pfext-page-layout__content input[type=checkbox],.pfext-page-layout__content input[type=radio],.pfext-popover__base input[type=checkbox],.pfext-popover__base input[type=radio],.pfext-quick-start-panel-content__body input[type=checkbox],.pfext-quick-start-panel-content__body input[type=radio],.pfext-quick-start-panel-content__header input[type=checkbox],.pfext-quick-start-panel-content__header input[type=radio]{margin-top:1px!important}.pf-theme-dark .pfext-catalog-item-icon__img--large{filter:brightness(1.5) invert(1) hue-rotate(180deg) saturate(4)}.pf-theme-dark .pfext-quick-start-panel-content__header--blue-white .pfext-quick-start-panel-content__duration{color:var(--pf-global--Color--light-100)}.pf-theme-dark .pfext-quick-start-task-header__subtitle{color:var(--pf-global--palette--black-200)!important}.pf-theme-dark .pfext-quick-start-task-header__task-icon-init{background-color:var(--pf-global--primary-color--300)}.pf-theme-dark .pfext-quick-start-task-header__tryagain{color:var(--pf-global--palette--black-200)!important}.pf-theme-dark .pfext-markdown-view pre{background-color:var(--pf-global--BackgroundColor--100);border-color:var(--pf-global--BorderColor--100)}.pf-theme-dark .pfext-markdown-view code{background-color:var(--pf-global--palette--black-600);color:var(--pf-global--Color--100)}.pf-theme-dark .pfext-markdown-view .pf-c-code-block,.pf-theme-dark .pfext-markdown-view .pf-c-code-block code{background-color:var(--pf-global--BackgroundColor--400)}.pf-theme-dark :where(.pfext-markdown-view) .pf-c-clipboard-copy.pf-m-inline{--pf-c-clipboard-copy--m-inline--BackgroundColor:var(--pf-global--BackgroundColor--400)}.pf-theme-dark .pfext-page-layout__content{background-color:var(--pf-global--BackgroundColor--200)}.pf-theme-dark .pfext-quick-start-catalog__gallery-item .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--100)}.pf-theme-dark .pf-c-alert{--pf-c-alert--BackgroundColor:var(--pf-global--palette--black-700);--pf-c-alert--m-inline--BackgroundColor:var(--pf-global--palette--black-700);--pf-c-alert--m-inline--m-success--BackgroundColor:var(--pf-global--palette--black-700);--pf-c-alert--m-inline--m-danger--BackgroundColor:var(--pf-global--palette--black-700);--pf-c-alert--m-inline--m-warning--BackgroundColor:var(--pf-global--palette--black-700);--pf-c-alert--m-inline--m-info--BackgroundColor:var(--pf-global--palette--black-700)}.pfext-icon-and-text{align-items:baseline;display:flex}.pf-c-label__icon .pfext-icon-and-text{display:block}.pfext-icon-and-text__icon{flex-shrink:0;margin-right:5px}.catalog-item-header-pf-subtitle,.catalog-tile-pf-body .catalog-tile-pf-subtitle{font-size:13px}.pfext-catalog{display:flex;flex-direction:column;min-height:100%;min-width:515px}.pfext-catalog-tile-view{--pf-l-gallery--GridTemplateColumns:repeat(auto-fill,260px)!important;display:flex;flex-wrap:wrap}.pfext-catalog__body{min-width:575px}@media (min-width:768px){.pfext-catalog__body{min-width:590px}}.pfext-catalog-item-details{display:flex;margin:0 0 10px}.pfext-catalog-item-details__description{white-space:pre-wrap}.pfext-catalog-item-details__kind-label{font-weight:var(--pf-global--FontWeight--bold)}.pfext-catalog-item-details__name{margin-bottom:10px}.pfext-catalog-item-details__provider,.pfext-catalog-item-details__tags{margin-bottom:5px}.pfext-catalog-item-details__tag{color:#72767b;font-size:13px;margin-right:5px;text-transform:uppercase}.pfext-catalog-item-icon{padding-right:10px}.pfext-catalog-item-icon__icon{font-size:24px}.pfext-catalog-item-icon__icon--large{font-size:40px}.pfext-catalog-item-icon__img{max-height:24px;max-width:24px}.pfext-catalog-item-icon__img[src$=".svg"]{width:24px}.pfext-catalog-item-icon__img--large{max-height:40px;max-width:40px}.pfext-catalog-item-icon__img--large[src$=".svg"]{width:40px}.pfext-catalog-page{background:#fff;border:1px solid var(--pf-global--BorderColor--300);display:flex;flex:1;padding-top:15px}.pfext-catalog-page--with-sidebar{margin:0 15px;padding-bottom:15px}.pfext-catalog-page__btn-group__group-by{display:inline;margin-left:var(--pf-global--spacer--md)}.pfext-catalog-page__content{flex:1 1 auto;overflow:hidden}.pfext-catalog-page__description{margin-top:-10px;padding:0 15px 10px}@media (min-width:768px){.pfext-catalog-page__description{padding-left:30px;padding-right:30px}}.pfext-catalog-page__filter{display:flex;justify-content:space-between}.pfext-catalog-page__filter-toggle{margin-top:5px}.pfext-catalog-page__grid{background-color:#f5f5f5}.pfext-catalog-page__grouped-items{margin-bottom:var(--pf-global--spacer--md)}.pfext-catalog-page__group-title{margin-bottom:var(--pf-global--spacer--sm)}.pfext-catalog-page__header{margin:0 30px 0 0}.pfext-catalog-page__heading{font-size:16px;margin:0 0 20px 30px}.pfext-catalog-page__hint{margin:0 0 var(--pf-global--spacer--md) 0}.pfext-catalog-page__input{display:inline-flex!important;margin:0 0 20px 30px;width:auto!important}.pfext-catalog-page__sort{display:inline;margin-left:var(--pf-global--spacer--md)}.pfext-catalog-page__num-items{font-weight:var(--pf-global--FontWeight--bold);padding:0 0 20px}.pfext-catalog-page__info-icon{color:#6a6e73;vertical-align:middle}.pfext-catalog-page__info-icon:hover{color:#151515}.pfext-catalog-page__overlay{border:0!important}.pfext-catalog-page__overlay .modal-body .pfext-hint-block{margin-bottom:10px}.pfext-catalog-page__overlay .properties-side-panel-pf{flex:0 0 auto}.pfext-catalog-page__overlay--right{bottom:0;padding:0!important;right:0;top:4.75rem}.pfext-catalog-page__overlay--right .pf-c-modal-box__body{display:flex;flex-direction:column;margin:0!important;padding:0}.pfext-catalog-page__overlay--right .modal-body-inner-shadow-covers{padding-left:0!important;padding-right:0!important}.pfext-catalog-page__overlay--right h1{white-space:normal}.pfext-catalog-page__overlay-action{align-items:baseline;display:inline-flex!important;margin:var(--pf-global--spacer--sm) var(--pf-global--spacer--sm) 0 0;overflow-x:hidden}.pfext-catalog-page__overlay-action-icon{flex-shrink:0;font-size:14px;margin-left:6px}.pfext-catalog-page__overlay-action-label{overflow-x:hidden;text-overflow:ellipsis}.pfext-catalog-page__overlay-actions{display:flex;flex-wrap:wrap;white-space:normal}.pfext-catalog-page__overlay-actions,.pfext-catalog-page__overlay-header{margin-bottom:var(--pf-global--spacer--md)}.pfext-catalog-page__overlay-body{margin:0;padding-left:var(--pf-global--spacer--lg);padding-right:var(--pf-global--spacer--lg);padding-top:var(--pf-global--spacer--md)}@media (min-width:768px){.pfext-catalog-page__overlay-body{display:flex}}.pfext-catalog-page__overlay-description{margin:20px 0 0;white-space:pre-wrap}.pfext-catalog-page__overlay-description h1,.pfext-catalog-page__overlay-description h2,.pfext-catalog-page__overlay-description h3{color:#333}.pfext-catalog-page__overlay-description h2{font-size:20px}.pfext-catalog-page__overlay-description li,.pfext-catalog-page__overlay-description ol,.pfext-catalog-page__overlay-description p{color:#333;font-size:14px!important}@media (min-width:768px){.pfext-catalog-page__overlay-description{flex:1 1 auto;margin-left:20px;margin-top:0}}.pfext-catalog-page__tabs{flex:0 0 220px;margin:0 15px 0 0}@media screen and (min-width:768px){.pf-c-modal-box.pfext-catalog-page__overlay{width:600px}}@media screen and (min-width:992px){.pf-c-modal-box.pfext-catalog-page__overlay{width:900px}}.pfext-catalog-tab__empty{color:#72767b}.pfext-modal-ignore-warning{height:auto}.pfext-modal-ignore-warning__checkbox.checkbox{margin-bottom:0;padding-top:15px}.pfext-modal-ignore-warning__content{display:flex}.pfext-modal-ignore-warning__icon{font-size:30px;margin-right:15px;min-width:30px}.pfext-modal-ignore-warning__link{display:block;margin:10px 0}.properties-side-panel-pf-property-label{font-size:13px}.properties-side-panel-pf-property-value__capability-level{color:var(--pf-global--Color--400);margin-bottom:5px;position:relative}.properties-side-panel-pf-property-value__capability-level--active{color:inherit}.properties-side-panel-pf-property-value__capability-level--active:before{display:none}.properties-side-panel-pf-property-value__capability-level:before{border:1px solid var(--pf-global--Color--400);border-radius:10px;content:"";height:14px;left:-20px;position:absolute;top:4px;width:14px}.properties-side-panel-pf-property-value__capability-level:not(:last-child):after{background:var(--pf-global--Color--400);content:"";height:6px;left:-13px;position:absolute;top:21px;width:1px}.properties-side-panel-pf-property-value__capability-level-icon{left:-20px;position:absolute;top:4px}.properties-side-panel-pf-property-value__capability-levels{list-style:none}.pfext-status-box{padding:40px 20px}.pfext-status-box__loading-message{margin-top:var(--pf-global--spacer--sm)}.pfext-status-box--loading{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;min-height:50px;width:100%}.pfext-m-loader{min-width:18px}.pfext-m-loader-dot__one,.pfext-m-loader-dot__three,.pfext-m-loader-dot__two{animation-delay:0;animation-direction:normal;animation-duration:1s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:bouncedelay;animation-play-state:running;animation-timing-function:ease-in-out;background:#419eda;border-radius:100%;display:inline-block;height:6px;width:6px}.pfext-m-loader-dot__one{animation-delay:-.32s}.pfext-m-loader-dot__two{animation-delay:-.16s}@keyframes bouncedelay{0%,80%,to{transform:scale(.25)}40%{transform:scale(1)}}.pfext-page-layout__content{flex:1;padding:var(--pf-global--spacer--lg)}.pfext-page-layout__header{background-color:var(--pf-global--BackgroundColor--light-100);padding-top:1px}.pfext-page-layout__hint{font-size:14px;padding-bottom:var(--pf-global--spacer--md);padding-left:var(--pf-global--spacer--lg);padding-right:var(--pf-global--spacer--lg)}.pfext-page-layout__title{font-family:var(--pf-global--FontFamily--heading--sans-serif);font-size:var(--pf-global--FontSize--2xl);font-weight:var(--pf-global--FontWeight--normal);line-height:1.1;margin-bottom:11.5px;margin-top:23px;padding-left:var(--pf-global--spacer--lg);padding-right:var(--pf-global--spacer--lg)}.pfext-markdown-view .h1,.pfext-markdown-view .h2,.pfext-markdown-view .h3,.pfext-markdown-view .h4,.pfext-markdown-view .h5,.pfext-markdown-view .h6,.pfext-markdown-view h1,.pfext-markdown-view h2,.pfext-markdown-view h3,.pfext-markdown-view h4,.pfext-markdown-view h5,.pfext-markdown-view h6{color:inherit;font-family:var(--pf-global--FontFamily--heading--sans-serif);font-weight:var(--pf-global--FontWeight--normal);line-height:1.1}.pfext-markdown-view .h1,.pfext-markdown-view .h2,.pfext-markdown-view .h3,.pfext-markdown-view h1,.pfext-markdown-view h2,.pfext-markdown-view h3{margin-bottom:11.5px;margin-top:23px}.pfext-markdown-view .h4,.pfext-markdown-view .h5,.pfext-markdown-view .h6,.pfext-markdown-view h4,.pfext-markdown-view h5,.pfext-markdown-view h6{margin-bottom:11.5px;margin-top:11.5px}.pfext-markdown-view .h1,.pfext-markdown-view h1{font-size:var(--pf-global--FontSize--2xl)}.pfext-markdown-view .h2,.pfext-markdown-view h2{font-size:20px}.pfext-markdown-view .h3,.pfext-markdown-view h3{font-size:var(--pf-global--FontSize--lg)}.pfext-markdown-view .h4,.pfext-markdown-view .h5,.pfext-markdown-view .h6,.pfext-markdown-view h4,.pfext-markdown-view h5,.pfext-markdown-view h6{font-size:var(--pf-global--FontSize--md)}.pfext-markdown-view p{margin:0 0 11.5px}.pfext-markdown-view ol,.pfext-markdown-view ul{margin-bottom:11.5px;margin-top:0}.pfext-markdown-view ol ol,.pfext-markdown-view ol ul,.pfext-markdown-view ul ol,.pfext-markdown-view ul ul{margin-bottom:0}.pfext-markdown-view dl{margin-bottom:23px;margin-top:0}.pfext-markdown-view dd,.pfext-markdown-view dt{line-height:1.66666667}.pfext-markdown-view dt{font-weight:700}.pfext-markdown-view dd{margin-left:0}.pfext-markdown-view blockquote{border-left:5px solid #f1f1f1;font-size:17.5px;margin:0 0 23px;padding:11.5px 23px}.pfext-markdown-view blockquote ol:last-child,.pfext-markdown-view blockquote p:last-child,.pfext-markdown-view blockquote ul:last-child{margin-bottom:0}.pfext-markdown-view code,.pfext-markdown-view pre{font-family:Menlo,Monaco,Consolas,monospace}.pfext-markdown-view code{background-color:#def3ff;border-radius:1px;color:#004368;font-size:90%;padding:2px 4px}.pfext-markdown-view pre{word-wrap:break-word;background-color:#fafafa;border:1px solid #ccc;border-radius:1px;color:#363636;display:block;font-size:13px;line-height:1.66666667;margin:0 0 11.5px;padding:11px;word-break:break-all}.pfext-markdown-view pre code{background-color:transparent;border-radius:0;color:inherit;font-size:inherit;padding:0;white-space:pre-wrap}.pfext-markdown-view table{background-color:transparent}.pfext-markdown-view table col[class*=col-]{display:table-column;float:none;position:static}.pfext-markdown-view table td[class*=col-],.pfext-markdown-view table th[class*=col-]{display:table-cell;float:none;position:static}.pfext-markdown-view caption{color:#9c9c9c;padding-bottom:10px;padding-top:10px;text-align:left}.pfext-markdown-view th{text-align:left}.pfext-quick-start-drawer__body{display:flex;flex-direction:column;position:relative;z-index:0}.pfext-quick-start-drawer__modal>.pf-c-modal-box__footer{display:block}.pfext-quick-start-panel-content__header{background:inherit;position:sticky;top:0;z-index:var(--pf-global--ZIndex--xs)}.pfext-quick-start-panel-content__header__shadow{box-shadow:var(--pf-global--BoxShadow--sm-bottom)}.pfext-quick-start-panel-content__header--blue-white{background-color:var(--pf-global--palette--blue-400)}.pfext-quick-start-panel-content__header--blue-white .pfext-quick-start-panel-content__title{color:var(--pf-global--Color--light-100)}.pfext-quick-start-panel-content__header--blue-white .pfext-quick-start-panel-content__duration{color:var(--pf-global--Color--light-200)}.pfext-quick-start-panel-content__header--blue-white .pfext-quick-start-panel-content__close-button button{color:var(--pf-global--Color--light-100)!important}.pfext-quick-start-panel-content__body{display:flex;flex-direction:column}.pfext-quick-start-panel-content__title{align-items:center;display:flex;flex-wrap:wrap}.pfext-quick-start-panel-content__duration{color:#9c9c9c;display:inline-block;font-size:var(--pf-global--FontSize--md);font-weight:400;line-height:1}.pfext-quick-start-panel-content__footer__shadow{box-shadow:var(--pf-global--BoxShadow--sm-top)}.pfext-quick-start-catalog__gallery{--pf-l-gallery--GridTemplateColumns:repeat(auto-fill,300px)!important}.pfext-quick-start-catalog__gallery-item{display:inherit!important}.pfext-quick-start-tile{height:100%}.pfext-quick-start-tile .catalog-tile-pf-description .has-footer{-webkit-line-clamp:unset;display:block}.pfext-quick-start-tile .catalog-tile-pf-icon{display:flex}.pfext-quick-start-tile-description{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;overflow:hidden}.pfext-quick-start-tile-description p{margin:0 0 11.5px}.pfext-quick-start-tile-prerequisites{display:inline-flex}.pfext-quick-start-tile-prerequisites__text{font-family:var(--pf-global--FontFamily--heading--sans-serif);font-size:var(--pf-global--FontSize--md);font-weight:var(--pf-global--FontWeight--normal);line-height:1.1;margin-bottom:11.5px;margin-right:var(--pf-global--spacer--sm);margin-top:11.5px}.pfext-quick-start-tile-prerequisites-list{padding-left:20px}.pfext-quick-start-tile-header__status{margin:var(--pf-global--spacer--sm) 0}.pfext-quick-start-tile-header--margin{margin-bottom:var(--pf-global--spacer--sm)}.pfext-quick-start-tile-header .pf-c-badge:not(:last-of-type),.pfext-quick-start-tile-header--margin{margin-right:var(--pf-global--spacer--sm)}.pfext-markdown-view.is-empty{color:#999}.pfext-markdown-view table{display:block;margin-bottom:11.5px;overflow-x:auto}.pfext-markdown-view td,.pfext-markdown-view th{border-bottom:1px solid #ededed;padding:10px;vertical-align:top}.pfext-markdown-view th{padding-top:0}.pfext-quick-start-catalog-filter__input{flex-grow:1;max-width:500px}.pfext-quick-start-catalog-filter__count{font-weight:var(--pf-global--FontWeight--bold)}.pf-c-toolbar.pf-m-page-insets.pfext-quick-start-catalog-filter__flex{--pf-c-toolbar--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-toolbar--PaddingTop:var(--pf-global--spacer--sm);--pf-c-toolbar--RowGap:0;font-size:14px}.pf-c-toolbar.pf-m-page-insets.pfext-quick-start-catalog-filter__flex .pf-c-select{--pf-c-select__toggle--FontSize:14px}.pf-c-toolbar.pf-m-page-insets.pfext-quick-start-catalog-filter__flex .pf-c-check{--pf-c-check__label--FontSize:14px}.pfext-quick-start-content{flex:1 1 0;font-size:16px;overflow:auto;padding:var(--pf-global--spacer--lg)}.pfext-quick-start-content .pf-c-alert__description p{font-size:13px}.pfext-quick-start-footer{background-color:var(--pf-global--BackgroundColor--100);flex:0 0 auto;padding:var(--pf-global--spacer--md) var(--pf-global--spacer--lg)}.pfext-quick-start-footer__actionbtn{margin-right:var(--pf-global--spacer--md)}.pfext-quick-start-footer__restartbtn{float:right}.pfext-quick-start-intro__prereq{margin-bottom:var(--pf-global--spacer--md)}.pfext-quick-start-intro__prereq .pf-c-expandable-section__content{margin-top:var(--pf-global--spacer--sm)}.pfext-quick-start-intro__prereq .pf-c-expandable-section__toggle{padding-bottom:0;padding-top:0}.pfext-quick-start-intro__prereq .pf-c-expandable-section__toggle-text{margin-left:var(--pf-global--spacer--sm)}.pfext-quick-start-intro__prereq .pf-c-expandable-section__toggle-icon{color:var(--pf-c-expandable-section__toggle--Color)}.pfext-quick-start-intro__prereq .pf-c-expandable-section__toggle-icon:focus,.pfext-quick-start-intro__prereq .pf-c-expandable-section__toggle-icon:hover{--pf-c-expandable-section__toggle--Color:var(--pf-c-expandable-section__toggle--focus--Color)}.pfext-quick-start-intro__prereq-list{padding-left:20px}.pfext-quick-start-intro__prereq-list__item::marker{font-size:.8rem}.pfext-quick-start-intro__prereq-list__item-content{left:2px;position:relative}.pfext-quick-start-tasks__list button:before{content:none}.pfext-quick-start-tasks__list li.pf-c-wizard__nav-item{align-items:center;display:flex;flex-wrap:wrap;list-style-type:none;margin-bottom:var(--pf-global--spacer--xs)}.pfext-quick-start-tasks__list .pfext-quick-start-task__content{margin-bottom:var(--pf-global--spacer--md)}.pfext-quick-start-tasks__list .task-pflist-title{font-size:14px!important;margin-bottom:6px}.pfext-quick-start-tasks__list .task-pflist-subtitle{color:var(--pf-global--Color--200);font-size:16px}.pfext-quick-start-tasks__list .task-pflist-list{font-size:16px}.pfext-quick-start-tasks__list .task-pflist-list--prereq{padding-left:var(--pf-global--spacer--lg)}.pfext-quick-start-tasks__list .task-pflist-list--prereq li+li{margin-top:4px}.pfext-quick-start-tasks__list .task-pflist-list--proc{padding-left:10px}.pfext-quick-start-tasks__list .task-pflist-list--proc li+li{margin-top:16px}.pfext-quick-start-tasks__list .task-pflist-list__item--prereq::marker{font-size:.8rem}.pfext-quick-start-tasks__list .task-pflist-list__item--prereq .task-pflist-list__item__content{left:2px;position:relative}.pfext-quick-start-tasks__list .task-pflist-list__item--proc{font-size:14px}.pfext-quick-start-tasks__list .task-pflist-list__item--proc .task-pflist-list__item__content{left:4px;position:relative}.pfext-quick-start-tasks__list .task-pflist-list__item__content .pf-c-alert{margin:var(--pf-global--spacer--md) 0}.pfext-quick-start-tasks__list .task-pflist-list__item__content .pf-c-alert__title{color:var(--pf-c-alert__title--Color);font-family:inherit;font-weight:var(--pf-c-alert__title--FontWeight);line-height:inherit;margin-bottom:0;margin-top:0;word-break:break-word}.pfext-quick-start-tasks__list .task-pflist-list__item__content .task-pflist-list__item__content__note{background-color:var(--pf-global--palette--blue-50);border-color:var(--pf-global--active-color--200);margin:var(--pf-global--spacer--md) 0}.pfext-quick-start-tasks__list .task-pflist-list__item__content .task-pflist-list__item__content__note__body{font-size:14px}.pfext-quick-start-task-header__list{padding:0!important}.pfext-quick-start-task-header__list button:before{content:none}.pfext-quick-start-task-header__list li{align-items:center;display:flex;flex-wrap:wrap;list-style-type:none;margin-bottom:var(--pf-global--spacer--xs)}.pfext-quick-start-task-header{display:grid;font-size:var(--pf-global--FontSize--md);grid-template-columns:min-content auto;margin-bottom:var(--pf-global--spacer--sm)}.pfext-quick-start-task-header button:before{content:none}.pfext-quick-start-task-header__title{color:var(--pf-global--primary-color--100)!important;margin-right:var(--pf-global--spacer--md)!important}.pfext-quick-start-task-header__subtitle{color:var(--pf-global--Color--dark-200)!important;font-size:var(--pf-global--FontSize--sm)}.pfext-quick-start-task-header__tryagain{color:var(--pf-global--Color--300)!important;display:block;font-size:var(--pf-global--FontSize--md)}.pfext-quick-start-task-header__title-success{color:var(--pf-global--success-color--100)!important}.pfext-quick-start-task-header__title-failed{color:var(--pf-global--danger-color--100)!important}.pfext-quick-start-task-header__task-icon-init{background-color:var(--pf-global--primary-color--100);border-radius:var(--pf-global--BorderRadius--lg);color:var(--pf-global--Color--light-100);display:inline-flex;height:1.5em;justify-content:center;width:1.5em}.pfext-quick-start-task-header__task-icon-failed,.pfext-quick-start-task-header__task-icon-success{vertical-align:middle!important}.pfext-quick-start-task-header__task-icon-success{color:var(--pf-global--success-color--100)!important}.pfext-quick-start-task-header__task-icon-failed{color:var(--pf-global--danger-color--100)!important}.pfext-quick-start-task-review-alert{margin:var(--pf-global--spacer--lg) 0}.pfext-quick-start-task-review{font-family:var(--pf-global--FontFamily--heading--sans-serif);font-size:var(--pf-global--FontSize--md);line-height:var(--pf-global--FontSize--xl)}.pfext-quick-start-task-review__actions{align-items:flex-start;display:flex;margin-bottom:var(--pf-global--spacer--sm)}.pfext-quick-start-task-review__actions input[type=radio]{margin-right:0;margin-top:0}.pfext-quick-start-task-review__radio{margin-right:var(--pf-global--spacer--xl)!important}.pfext-quick-start-task-review--success{color:var(--pf-global--success-color--100)!important}.pfext-quick-start-task-review--failed{color:var(--pf-chart-global--danger--Color--100)}.pfext-modal{position:absolute!important}.pfext-markdown-view .pfext-code-block__pre{background-color:transparent;border:none;border-radius:none;display:flex;margin:0;padding:0}.pfext-markdown-view .pfext-markdown-execute-snippet__button>i.fa-check{display:none}.pfext-markdown-view .pfext-markdown-execute-snippet__button>i.fa-play,.pfext-markdown-view .pfext-markdown-execute-snippet__button[data-executed]>i.fa-check{display:inline}.pfext-markdown-view .pfext-markdown-execute-snippet__button[data-executed]>i.fa-play{display:none}.pfext-markdown-view .pfext-markdown-admonition.pf-c-alert{margin:var(--pf-global--spacer--md) 0}.pfext-markdown-view .pfext-markdown-admonition.pf-c-alert .pf-c-alert__title{color:var(--pf-c-alert__title--Color);font-family:inherit;font-weight:var(--pf-c-alert__title--FontWeight);line-height:inherit;margin-bottom:0;margin-top:0;word-break:break-word}@keyframes pfext-spotlight-expand{0%{opacity:1;outline-offset:-4px;outline-width:4px}to{opacity:0;outline-offset:21px;outline-width:12px}}@keyframes pfext-spotlight-fade-in{0%{opacity:0}to{opacity:1}}@keyframes pfext-spotlight-fade-out{0%{opacity:1}to{opacity:0}}.pfext-spotlight{pointer-events:none;position:absolute}.pfext-spotlight__with-backdrop{mix-blend-mode:hard-light}.pfext-spotlight__element-highlight-noanimate{background-color:var(--pf-global--palette--black-500);border:var(--pf-global--BorderWidth--xl) solid var(--pf-global--palette--blue-200);z-index:9999}.pfext-spotlight__element-highlight-animate{animation:pfext-spotlight-fade-in .4s ease-in-out 0s,pfext-spotlight-fade-out 5s ease-in-out 12.8s;animation-fill-mode:forwards;box-shadow:inset 0 0 0 4px var(--pf-global--palette--blue-200);opacity:0;pointer-events:none;position:absolute}.pfext-spotlight__element-highlight-animate:after{animation:pfext-spotlight-expand 1.2s ease-out 1.6s;animation-fill-mode:forwards;bottom:0;content:"";left:0;outline:4px solid var(--pf-global--palette--blue-200);outline-offset:-4px;position:absolute;right:0;top:0}:root{--vertical-tab-pf-color:var(--pf-global--Color--100);--vertical-tab-pf-active-color:var(--pf-global--active-color--100)}.catalog-tile-pf.featured{border-top:2px solid var(--pf-global--active-color--100)}.catalog-tile-pf:active,.catalog-tile-pf:focus,.catalog-tile-pf:hover,.catalog-tile-pf:visited{color:inherit;text-decoration:none}.catalog-tile-pf .pf-c-card__actions{padding-left:5px}.catalog-tile-pf-header{font-size:16px;font-weight:400;padding-bottom:16px}.catalog-tile-pf-header .catalog-tile-pf-title{font-size:15px;font-weight:400}.catalog-tile-pf-header .catalog-tile-pf-subtitle{color:var(--pf-global--Color--200);font-size:13px;font-weight:400}.catalog-tile-pf-header .catalog-tile-pf-subtitle a,.catalog-tile-pf-header .catalog-tile-pf-subtitle a:hover{text-decoration:none}.catalog-tile-pf-icon{font-size:40px;height:40px;max-width:60px;min-width:40px}.catalog-tile-pf-badge-container{display:flex;flex:1;justify-content:flex-end}.catalog-tile-pf-description{margin-top:0}.catalog-tile-pf-description span{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;overflow:hidden}.catalog-tile-pf-description .has-footer{-webkit-line-clamp:1}.pf-u-screen-reader{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-u-visible{clip:auto;border:inherit;overflow:visible;position:static;white-space:normal}.pf-u-hidden{display:none!important}@media screen and (min-width:576px){.pf-u-screen-reader-on-sm{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-u-visible-on-sm{clip:auto;border:inherit;overflow:visible;position:static;white-space:normal}.pf-u-hidden-on-sm{display:none!important}}@media screen and (min-width:768px){.pf-u-screen-reader-on-md{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-u-visible-on-md{clip:auto;border:inherit;overflow:visible;position:static;white-space:normal}.pf-u-hidden-on-md{display:none!important}}@media screen and (min-width:992px){.pf-u-screen-reader-on-lg{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-u-visible-on-lg{clip:auto;border:inherit;overflow:visible;position:static;white-space:normal}.pf-u-hidden-on-lg{display:none!important}}@media screen and (min-width:1200px){.pf-u-screen-reader-on-xl{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-u-visible-on-xl{clip:auto;border:inherit;overflow:visible;position:static;white-space:normal}.pf-u-hidden-on-xl{display:none!important}}@media screen and (min-width:1450px){.pf-u-screen-reader-on-2xl{clip:rect(0,0,0,0);border:0;left:0;overflow:hidden;position:fixed;top:0;white-space:nowrap}.pf-u-visible-on-2xl{clip:auto;border:inherit;overflow:visible;position:static;white-space:normal}.pf-u-hidden-on-2xl{display:none!important}}.pf-c-alert{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-alert--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-alert--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-alert--GridTemplateColumns:max-content 1fr max-content;--pf-c-alert--GridTemplateAreas:"icon title action" ". description description" ". actiongroup actiongroup";--pf-c-alert--BorderTopWidth:var(--pf-global--BorderWidth--md);--pf-c-alert--BorderTopColor:var(--pf-global--default-color--200);--pf-c-alert--PaddingTop:var(--pf-global--spacer--md);--pf-c-alert--PaddingRight:var(--pf-global--spacer--md);--pf-c-alert--PaddingBottom:var(--pf-global--spacer--md);--pf-c-alert--PaddingLeft:var(--pf-global--spacer--md);--pf-c-alert__FontSize:var(--pf-global--FontSize--sm);--pf-c-alert__toggle--MarginTop:calc(var(--pf-global--spacer--form-element)*-1 - 0.0625rem);--pf-c-alert__toggle--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-alert__toggle--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-alert__toggle-icon--Rotate:0;--pf-c-alert__toggle-icon--Transition:var(--pf-global--Transition);--pf-c-alert__icon--Color:var(--pf-global--default-color--200);--pf-c-alert__icon--MarginTop:0.0625rem;--pf-c-alert__icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-alert__icon--FontSize:var(--pf-global--icon--FontSize--md);--pf-c-alert__title--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-alert__title--Color:var(--pf-global--default-color--300);--pf-c-alert__title--max-lines:1;--pf-c-alert__action--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-alert__action--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-alert__action--TranslateY:0.125rem;--pf-c-alert__action--MarginRight:calc(var(--pf-global--spacer--sm)*-1);--pf-c-alert__description--PaddingTop:var(--pf-global--spacer--xs);--pf-c-alert__action-group--PaddingTop-base:var(--pf-global--spacer--xs);--pf-c-alert__action-group--PaddingTop:var(--pf-c-alert__action-group--PaddingTop-base);--pf-c-alert__description--action-group--PaddingTop-base:var(--pf-global--spacer--md);--pf-c-alert__description--action-group--PaddingTop:var(--pf-c-alert__description--action-group--PaddingTop-base);--pf-c-alert__action-group__c-button--not-last-child--MarginRight:var(--pf-global--spacer--lg);--pf-c-alert--m-success--BorderTopColor:var(--pf-global--success-color--100);--pf-c-alert--m-success__icon--Color:var(--pf-global--success-color--100);--pf-c-alert--m-success__title--Color:var(--pf-global--success-color--200);--pf-c-alert--m-danger--BorderTopColor:var(--pf-global--danger-color--100);--pf-c-alert--m-danger__icon--Color:var(--pf-global--danger-color--100);--pf-c-alert--m-danger__title--Color:var(--pf-global--danger-color--200);--pf-c-alert--m-warning--BorderTopColor:var(--pf-global--warning-color--100);--pf-c-alert--m-warning__icon--Color:var(--pf-global--warning-color--100);--pf-c-alert--m-warning__title--Color:var(--pf-global--warning-color--200);--pf-c-alert--m-info--BorderTopColor:var(--pf-global--info-color--100);--pf-c-alert--m-info__icon--Color:var(--pf-global--info-color--100);--pf-c-alert--m-info__title--Color:var(--pf-global--info-color--200);--pf-c-alert--m-inline--BoxShadow:none;--pf-c-alert--m-inline--BackgroundColor:var(--pf-global--palette--cyan-50);--pf-c-alert--m-inline--m-success--BackgroundColor:var(--pf-global--palette--green-50);--pf-c-alert--m-inline--m-danger--BackgroundColor:var(--pf-global--palette--red-50);--pf-c-alert--m-inline--m-warning--BackgroundColor:var(--pf-global--palette--gold-50);--pf-c-alert--m-inline--m-info--BackgroundColor:var(--pf-global--palette--blue-50);--pf-c-alert--m-inline--m-plain--BorderTopWidth:0;--pf-c-alert--m-inline--m-plain--BackgroundColor:transparent;--pf-c-alert--m-inline--m-plain--PaddingTop:0;--pf-c-alert--m-inline--m-plain--PaddingRight:0;--pf-c-alert--m-inline--m-plain--PaddingBottom:0;--pf-c-alert--m-inline--m-plain--PaddingLeft:0;--pf-c-alert--m-expandable--GridTemplateColumns:auto max-content 1fr max-content;--pf-c-alert--m-expandable--GridTemplateAreas:"toggle icon title action" ". . description description" ". . actiongroup actiongroup";--pf-c-alert--m-expandable__description--action-group--PaddingTop:var(--pf-c-alert__action-group--PaddingTop-base);--pf-c-alert--m-expanded__toggle-icon--Rotate:90deg;--pf-c-alert--m-expanded__description--action-group--PaddingTop:var(--pf-c-alert__description--action-group--PaddingTop-base);background-color:var(--pf-c-alert--BackgroundColor);border-top:var(--pf-c-alert--BorderTopWidth) solid var(--pf-c-alert--BorderTopColor);box-shadow:var(--pf-c-alert--BoxShadow);color:var(--pf-global--Color--100);display:grid;font-size:var(--pf-c-alert__FontSize);grid-template-areas:var(--pf-c-alert--GridTemplateAreas);grid-template-columns:var(--pf-c-alert--GridTemplateColumns);padding:var(--pf-c-alert--PaddingTop) var(--pf-c-alert--PaddingRight) var(--pf-c-alert--PaddingBottom) var(--pf-c-alert--PaddingLeft);position:relative}.pf-c-alert.pf-m-success{--pf-c-alert--BorderTopColor:var(--pf-c-alert--m-success--BorderTopColor);--pf-c-alert__icon--Color:var(--pf-c-alert--m-success__icon--Color);--pf-c-alert__title--Color:var(--pf-c-alert--m-success__title--Color);--pf-c-alert--m-inline--BackgroundColor:var(--pf-c-alert--m-inline--m-success--BackgroundColor)}.pf-c-alert.pf-m-danger{--pf-c-alert--BorderTopColor:var(--pf-c-alert--m-danger--BorderTopColor);--pf-c-alert__icon--Color:var(--pf-c-alert--m-danger__icon--Color);--pf-c-alert__title--Color:var(--pf-c-alert--m-danger__title--Color);--pf-c-alert--m-inline--BackgroundColor:var(--pf-c-alert--m-inline--m-danger--BackgroundColor)}.pf-c-alert.pf-m-warning{--pf-c-alert--BorderTopColor:var(--pf-c-alert--m-warning--BorderTopColor);--pf-c-alert__icon--Color:var(--pf-c-alert--m-warning__icon--Color);--pf-c-alert__title--Color:var(--pf-c-alert--m-warning__title--Color);--pf-c-alert--m-inline--BackgroundColor:var(--pf-c-alert--m-inline--m-warning--BackgroundColor)}.pf-c-alert.pf-m-info{--pf-c-alert--BorderTopColor:var(--pf-c-alert--m-info--BorderTopColor);--pf-c-alert__icon--Color:var(--pf-c-alert--m-info__icon--Color);--pf-c-alert__title--Color:var(--pf-c-alert--m-info__title--Color);--pf-c-alert--m-inline--BackgroundColor:var(--pf-c-alert--m-inline--m-info--BackgroundColor)}.pf-c-alert.pf-m-inline{--pf-c-alert--BoxShadow:var(--pf-c-alert--m-inline--BoxShadow);--pf-c-alert--BackgroundColor:var(--pf-c-alert--m-inline--BackgroundColor)}.pf-c-alert.pf-m-plain{--pf-c-alert--BorderTopWidth:var(--pf-c-alert--m-inline--m-plain--BorderTopWidth);--pf-c-alert--BackgroundColor:var(--pf-c-alert--m-inline--m-plain--BackgroundColor);--pf-c-alert--PaddingTop:var(--pf-c-alert--m-inline--m-plain--PaddingTop);--pf-c-alert--PaddingRight:var(--pf-c-alert--m-inline--m-plain--PaddingRight);--pf-c-alert--PaddingBottom:var(--pf-c-alert--m-inline--m-plain--PaddingBottom);--pf-c-alert--PaddingLeft:var(--pf-c-alert--m-inline--m-plain--PaddingLeft)}.pf-c-alert.pf-m-expandable{--pf-c-alert--GridTemplateColumns:var(--pf-c-alert--m-expandable--GridTemplateColumns);--pf-c-alert--GridTemplateAreas:var(--pf-c-alert--m-expandable--GridTemplateAreas);--pf-c-alert__description--action-group--PaddingTop:var(--pf-c-alert--m-expandable__description--action-group--PaddingTop)}.pf-c-alert.pf-m-expanded{--pf-c-alert__toggle-icon--Rotate:var(--pf-c-alert--m-expanded__toggle-icon--Rotate);--pf-c-alert__description--action-group--PaddingTop:var(--pf-c-alert--m-expanded__description--action-group--PaddingTop)}.pf-c-alert__toggle{margin-bottom:var(--pf-c-alert__toggle--MarginBottom);margin-left:var(--pf-c-alert__toggle--MarginLeft);margin-top:var(--pf-c-alert__toggle--MarginTop)}.pf-c-alert__toggle-icon{display:inline-block;transform:rotate(var(--pf-c-alert__toggle-icon--Rotate));transition:var(--pf-c-alert__toggle-icon--Transition)}.pf-c-alert__icon{color:var(--pf-c-alert__icon--Color);display:flex;font-size:var(--pf-c-alert__icon--FontSize);grid-area:icon;margin-right:var(--pf-c-alert__icon--MarginRight);margin-top:var(--pf-c-alert__icon--MarginTop)}.pf-c-alert__title{color:var(--pf-c-alert__title--Color);font-weight:var(--pf-c-alert__title--FontWeight);grid-area:title;word-break:break-word}.pf-c-alert__title.pf-m-truncate{-webkit-box-orient:vertical;-webkit-line-clamp:var(--pf-c-alert__title--max-lines);display:-webkit-box;overflow:hidden}.pf-c-alert__description{grid-area:description;padding-top:var(--pf-c-alert__description--PaddingTop);word-break:break-word}.pf-c-alert__description+.pf-c-alert__action-group{--pf-c-alert__action-group--PaddingTop:var(--pf-c-alert__description--action-group--PaddingTop)}.pf-c-alert__action{grid-area:action;margin-bottom:var(--pf-c-alert__action--MarginBottom);margin-right:var(--pf-c-alert__action--MarginRight);margin-top:var(--pf-c-alert__action--MarginTop);transform:translateY(var(--pf-c-alert__action--TranslateY))}.pf-c-alert__action>.pf-c-button{--pf-c-button--LineHeight:1}.pf-c-alert__action-group{grid-area:actiongroup;padding-top:var(--pf-c-alert__action-group--PaddingTop)}.pf-c-alert__action-group>.pf-c-button{--pf-c-button--m-link--m-inline--hover--TextDecoration:none}.pf-c-alert__action-group>.pf-c-button:not(:last-child){margin-right:var(--pf-c-alert__action-group__c-button--not-last-child--MarginRight)}.pf-m-overpass-font .pf-c-alert__title{--pf-c-alert__title--FontWeight:var(--pf-global--FontWeight--normal)}:where(.pf-theme-dark) .pf-c-alert{--pf-c-alert--BackgroundColor:var(--pf-global--palette--black-600);--pf-c-alert__title--Color:var(--pf-global--default-color--200);--pf-c-alert--m-success__title--Color:var(--pf-global--success-color--100);--pf-c-alert--m-danger__title--Color:var(--pf-global--danger-color--100);--pf-c-alert--m-warning__title--Color:var(--pf-global--warning-color--100);--pf-c-alert--m-info__title--Color:var(--pf-global--info-color--100);--pf-c-alert--m-inline--BackgroundColor:var(--pf-global--palette--black-600);--pf-c-alert--m-inline--m-success--BackgroundColor:var(--pf-global--palette--black-600);--pf-c-alert--m-inline--m-danger--BackgroundColor:var(--pf-global--palette--black-600);--pf-c-alert--m-inline--m-warning--BackgroundColor:var(--pf-global--palette--black-600);--pf-c-alert--m-inline--m-info--BackgroundColor:var(--pf-global--palette--black-600)}.pf-c-button{--pf-c-button--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-button--PaddingRight:var(--pf-global--spacer--md);--pf-c-button--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-button--PaddingLeft:var(--pf-global--spacer--md);--pf-c-button--LineHeight:var(--pf-global--LineHeight--md);--pf-c-button--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-button--FontSize:var(--pf-global--FontSize--md);--pf-c-button--BackgroundColor:transparent;--pf-c-button--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-button--after--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-button--after--BorderColor:transparent;--pf-c-button--after--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-button--hover--after--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-button--focus--after--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-button--active--after--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-button--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-button--disabled--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-button--disabled--after--BorderColor:transparent;--pf-c-button--m-primary--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-button--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--BackgroundColor:transparent;--pf-c-button--m-secondary--after--BorderColor:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--hover--BackgroundColor:transparent;--pf-c-button--m-secondary--hover--after--BorderColor:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--focus--BackgroundColor:transparent;--pf-c-button--m-secondary--focus--after--BorderColor:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--active--BackgroundColor:transparent;--pf-c-button--m-secondary--active--after--BorderColor:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--active--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--m-danger--BackgroundColor:transparent;--pf-c-button--m-secondary--m-danger--Color:var(--pf-global--danger-color--100);--pf-c-button--m-secondary--m-danger--after--BorderColor:var(--pf-global--danger-color--100);--pf-c-button--m-secondary--m-danger--hover--BackgroundColor:transparent;--pf-c-button--m-secondary--m-danger--hover--Color:var(--pf-global--danger-color--200);--pf-c-button--m-secondary--m-danger--hover--after--BorderColor:var(--pf-global--danger-color--100);--pf-c-button--m-secondary--m-danger--focus--BackgroundColor:transparent;--pf-c-button--m-secondary--m-danger--focus--Color:var(--pf-global--danger-color--200);--pf-c-button--m-secondary--m-danger--focus--after--BorderColor:var(--pf-global--danger-color--100);--pf-c-button--m-secondary--m-danger--active--BackgroundColor:transparent;--pf-c-button--m-secondary--m-danger--active--Color:var(--pf-global--danger-color--200);--pf-c-button--m-secondary--m-danger--active--after--BorderColor:var(--pf-global--danger-color--100);--pf-c-button--m-tertiary--BackgroundColor:transparent;--pf-c-button--m-tertiary--after--BorderColor:var(--pf-global--Color--100);--pf-c-button--m-tertiary--Color:var(--pf-global--Color--100);--pf-c-button--m-tertiary--hover--BackgroundColor:transparent;--pf-c-button--m-tertiary--hover--after--BorderColor:var(--pf-global--Color--100);--pf-c-button--m-tertiary--hover--Color:var(--pf-global--Color--100);--pf-c-button--m-tertiary--focus--BackgroundColor:transparent;--pf-c-button--m-tertiary--focus--after--BorderColor:var(--pf-global--Color--100);--pf-c-button--m-tertiary--focus--Color:var(--pf-global--Color--100);--pf-c-button--m-tertiary--active--BackgroundColor:transparent;--pf-c-button--m-tertiary--active--after--BorderColor:var(--pf-global--Color--100);--pf-c-button--m-tertiary--active--Color:var(--pf-global--Color--100);--pf-c-button--m-warning--BackgroundColor:var(--pf-global--warning-color--100);--pf-c-button--m-warning--Color:var(--pf-global--Color--dark-100);--pf-c-button--m-warning--hover--BackgroundColor:var(--pf-global--palette--gold-500);--pf-c-button--m-warning--hover--Color:var(--pf-global--Color--dark-100);--pf-c-button--m-warning--focus--BackgroundColor:var(--pf-global--palette--gold-500);--pf-c-button--m-warning--focus--Color:var(--pf-global--Color--dark-100);--pf-c-button--m-warning--active--BackgroundColor:var(--pf-global--palette--gold-500);--pf-c-button--m-warning--active--Color:var(--pf-global--Color--dark-100);--pf-c-button--m-danger--BackgroundColor:var(--pf-global--danger-color--100);--pf-c-button--m-danger--Color:var(--pf-global--Color--light-100);--pf-c-button--m-danger--hover--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-button--m-danger--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-danger--focus--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-button--m-danger--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-danger--active--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-button--m-danger--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-link--BackgroundColor:transparent;--pf-c-button--m-link--Color:var(--pf-global--link--Color);--pf-c-button--m-link--hover--BackgroundColor:transparent;--pf-c-button--m-link--hover--Color:var(--pf-global--link--Color--hover);--pf-c-button--m-link--focus--BackgroundColor:transparent;--pf-c-button--m-link--focus--Color:var(--pf-global--link--Color--hover);--pf-c-button--m-link--active--BackgroundColor:transparent;--pf-c-button--m-link--active--Color:var(--pf-global--link--Color--hover);--pf-c-button--m-link--disabled--BackgroundColor:transparent;--pf-c-button--m-link--m-inline--FontSize:inherit;--pf-c-button--m-link--m-inline--hover--TextDecoration:var(--pf-global--link--TextDecoration--hover);--pf-c-button--m-link--m-inline--hover--Color:var(--pf-global--link--Color--hover);--pf-c-button--m-link--m-inline--PaddingTop:0;--pf-c-button--m-link--m-inline--PaddingRight:0;--pf-c-button--m-link--m-inline--PaddingBottom:0;--pf-c-button--m-link--m-inline--PaddingLeft:0;--pf-c-button--m-link--m-inline__progress--Left:var(--pf-global--spacer--xs);--pf-c-button--m-link--m-inline--m-in-progress--PaddingLeft:calc(var(--pf-c-button--m-link--m-inline__progress--Left) + 1rem + var(--pf-global--spacer--sm));--pf-c-button--m-link--m-danger--BackgroundColor:transparent;--pf-c-button--m-link--m-danger--Color:var(--pf-global--danger-color--100);--pf-c-button--m-link--m-danger--hover--BackgroundColor:transparent;--pf-c-button--m-link--m-danger--hover--Color:var(--pf-global--danger-color--200);--pf-c-button--m-link--m-danger--focus--BackgroundColor:transparent;--pf-c-button--m-link--m-danger--focus--Color:var(--pf-global--danger-color--200);--pf-c-button--m-link--m-danger--active--BackgroundColor:transparent;--pf-c-button--m-link--m-danger--active--Color:var(--pf-global--danger-color--200);--pf-c-button--m-plain--BackgroundColor:transparent;--pf-c-button--m-plain--Color:var(--pf-global--Color--200);--pf-c-button--m-plain--hover--BackgroundColor:transparent;--pf-c-button--m-plain--hover--Color:var(--pf-global--Color--100);--pf-c-button--m-plain--focus--BackgroundColor:transparent;--pf-c-button--m-plain--focus--Color:var(--pf-global--Color--100);--pf-c-button--m-plain--active--BackgroundColor:transparent;--pf-c-button--m-plain--active--Color:var(--pf-global--Color--100);--pf-c-button--m-plain--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-button--m-plain--disabled--BackgroundColor:transparent;--pf-c-button--m-control--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-button--m-control--Color:var(--pf-global--Color--100);--pf-c-button--m-control--BorderRadius:0;--pf-c-button--m-control--after--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-button--m-control--after--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-button--m-control--after--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-button--m-control--after--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-button--m-control--after--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-button--m-control--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-button--m-control--hover--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-button--m-control--hover--Color:var(--pf-global--Color--100);--pf-c-button--m-control--hover--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-button--m-control--hover--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-button--m-control--active--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-button--m-control--active--Color:var(--pf-global--Color--100);--pf-c-button--m-control--active--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-button--m-control--active--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-button--m-control--focus--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-button--m-control--focus--Color:var(--pf-global--Color--100);--pf-c-button--m-control--focus--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-button--m-control--focus--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-button--m-control--m-expanded--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-button--m-control--m-expanded--Color:var(--pf-global--Color--100);--pf-c-button--m-control--m-expanded--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-button--m-control--m-expanded--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-button--m-small--FontSize:var(--pf-global--FontSize--sm);--pf-c-button--m-display-lg--PaddingTop:var(--pf-global--spacer--md);--pf-c-button--m-display-lg--PaddingRight:var(--pf-global--spacer--xl);--pf-c-button--m-display-lg--PaddingBottom:var(--pf-global--spacer--md);--pf-c-button--m-display-lg--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-button--m-display-lg--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-button--m-link--m-display-lg--FontSize:var(--pf-global--FontSize--lg);--pf-c-button__icon--m-start--MarginRight:var(--pf-global--spacer--xs);--pf-c-button__icon--m-end--MarginLeft:var(--pf-global--spacer--xs);--pf-c-button__progress--width:calc(var(--pf-global--icon--FontSize--md) + var(--pf-global--spacer--sm));--pf-c-button__progress--Opacity:0;--pf-c-button__progress--TranslateY:-50%;--pf-c-button__progress--TranslateX:0;--pf-c-button__progress--Top:50%;--pf-c-button__progress--Left:var(--pf-global--spacer--md);--pf-c-button--m-progress--TransitionProperty:padding;--pf-c-button--m-progress--TransitionDuration:var(--pf-global--TransitionDuration);--pf-c-button--m-progress--PaddingRight:calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width)/2);--pf-c-button--m-progress--PaddingLeft:calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width)/2);--pf-c-button--m-in-progress--PaddingRight:var(--pf-global--spacer--md);--pf-c-button--m-in-progress--PaddingLeft:calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width));--pf-c-button--m-in-progress--m-plain--Color:var(--pf-global--primary-color--100);--pf-c-button--m-in-progress--m-plain__progress--Left:50%;--pf-c-button--m-in-progress--m-plain__progress--TranslateX:-50%;--pf-c-button__count--MarginLeft:var(--pf-global--spacer--sm);--pf-c-button--disabled__c-badge--Color:var(--pf-global--Color--dark-100);--pf-c-button--disabled__c-badge--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-button--m-primary__c-badge--BorderColor:var(--pf-global--BorderColor--300);--pf-c-button--m-primary__c-badge--BorderWidth:var(--pf-global--BorderWidth--sm);border:0;border-radius:var(--pf-c-button--BorderRadius);display:inline-block;font-size:var(--pf-c-button--FontSize);font-weight:var(--pf-c-button--FontWeight);line-height:var(--pf-c-button--LineHeight);padding:var(--pf-c-button--PaddingTop) var(--pf-c-button--PaddingRight) var(--pf-c-button--PaddingBottom) var(--pf-c-button--PaddingLeft);position:relative;text-align:center;user-select:none;white-space:nowrap}.pf-c-button:after{border:var(--pf-c-button--after--BorderWidth) solid;border-color:var(--pf-c-button--after--BorderColor);border-radius:var(--pf-c-button--after--BorderRadius);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-button:hover{--pf-c-button--after--BorderWidth:var(--pf-c-button--hover--after--BorderWidth);text-decoration:none}.pf-c-button:focus{--pf-c-button--after--BorderWidth:var(--pf-c-button--focus--after--BorderWidth)}.pf-c-button.pf-m-active,.pf-c-button:active{--pf-c-button--after--BorderWidth:var(--pf-c-button--active--after--BorderWidth)}.pf-c-button.pf-m-block{display:block;width:100%}.pf-c-button.pf-m-small{--pf-c-button--FontSize:var(--pf-c-button--m-small--FontSize)}.pf-c-button.pf-m-link.pf-m-display-lg,.pf-c-button.pf-m-primary.pf-m-display-lg,.pf-c-button.pf-m-secondary.pf-m-display-lg,.pf-c-button.pf-m-tertiary.pf-m-display-lg{--pf-c-button--PaddingTop:var(--pf-c-button--m-display-lg--PaddingTop);--pf-c-button--PaddingRight:var(--pf-c-button--m-display-lg--PaddingRight);--pf-c-button--PaddingBottom:var(--pf-c-button--m-display-lg--PaddingBottom);--pf-c-button--PaddingLeft:var(--pf-c-button--m-display-lg--PaddingLeft);--pf-c-button--FontWeight:var(--pf-c-button--m-display-lg--FontWeight)}.pf-c-button.pf-m-primary{background-color:var(--pf-c-button--m-primary--BackgroundColor);color:var(--pf-c-button--m-primary--Color)}.pf-c-button.pf-m-primary:hover{--pf-c-button--m-primary--Color:var(--pf-c-button--m-primary--hover--Color);--pf-c-button--m-primary--BackgroundColor:var(--pf-c-button--m-primary--hover--BackgroundColor)}.pf-c-button.pf-m-primary:focus{--pf-c-button--m-primary--Color:var(--pf-c-button--m-primary--focus--Color);--pf-c-button--m-primary--BackgroundColor:var(--pf-c-button--m-primary--focus--BackgroundColor)}.pf-c-button.pf-m-primary.pf-m-active,.pf-c-button.pf-m-primary:active{--pf-c-button--m-primary--Color:var(--pf-c-button--m-primary--active--Color);--pf-c-button--m-primary--BackgroundColor:var(--pf-c-button--m-primary--active--BackgroundColor)}.pf-c-button.pf-m-primary .pf-c-badge.pf-m-unread{border:var(--pf-c-button--m-primary__c-badge--BorderWidth) solid var(--pf-c-button--m-primary__c-badge--BorderColor)}.pf-c-button.pf-m-secondary{--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--after--BorderColor);background-color:var(--pf-c-button--m-secondary--BackgroundColor);color:var(--pf-c-button--m-secondary--Color)}.pf-c-button.pf-m-secondary:hover{--pf-c-button--m-secondary--Color:var(--pf-c-button--m-secondary--hover--Color);--pf-c-button--m-secondary--BackgroundColor:var(--pf-c-button--m-secondary--hover--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--hover--after--BorderColor)}.pf-c-button.pf-m-secondary:focus{--pf-c-button--m-secondary--Color:var(--pf-c-button--m-secondary--focus--Color);--pf-c-button--m-secondary--BackgroundColor:var(--pf-c-button--m-secondary--focus--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--focus--after--BorderColor)}.pf-c-button.pf-m-secondary.pf-m-active,.pf-c-button.pf-m-secondary:active{--pf-c-button--m-secondary--Color:var(--pf-c-button--m-secondary--active--Color);--pf-c-button--m-secondary--BackgroundColor:var(--pf-c-button--m-secondary--active--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--active--after--BorderColor)}.pf-c-button.pf-m-tertiary{--pf-c-button--after--BorderColor:var(--pf-c-button--m-tertiary--after--BorderColor);background-color:var(--pf-c-button--m-tertiary--BackgroundColor);color:var(--pf-c-button--m-tertiary--Color)}.pf-c-button.pf-m-tertiary:hover{--pf-c-button--m-tertiary--Color:var(--pf-c-button--m-tertiary--hover--Color);--pf-c-button--m-tertiary--BackgroundColor:var(--pf-c-button--m-tertiary--hover--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-tertiary--hover--after--BorderColor)}.pf-c-button.pf-m-tertiary:focus{--pf-c-button--m-tertiary--Color:var(--pf-c-button--m-tertiary--focus--Color);--pf-c-button--m-tertiary--BackgroundColor:var(--pf-c-button--m-tertiary--focus--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-tertiary--focus--after--BorderColor)}.pf-c-button.pf-m-tertiary.pf-m-active,.pf-c-button.pf-m-tertiary:active{--pf-c-button--m-tertiary--Color:var(--pf-c-button--m-tertiary--active--Color);--pf-c-button--m-tertiary--BackgroundColor:var(--pf-c-button--m-tertiary--active--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-tertiary--active--after--BorderColor)}.pf-c-button.pf-m-link{--pf-c-button--disabled--BackgroundColor:var(--pf-c-button--m-link--disabled--BackgroundColor);background-color:var(--pf-c-button--m-link--BackgroundColor);color:var(--pf-c-button--m-link--Color)}.pf-c-button.pf-m-link:not(.pf-m-inline):hover{--pf-c-button--m-link--Color:var(--pf-c-button--m-link--hover--Color);--pf-c-button--m-link--BackgroundColor:var(--pf-c-button--m-link--hover--BackgroundColor)}.pf-c-button.pf-m-link:not(.pf-m-inline):focus{--pf-c-button--m-link--Color:var(--pf-c-button--m-link--focus--Color);--pf-c-button--m-link--BackgroundColor:var(--pf-c-button--m-link--focus--BackgroundColor)}.pf-c-button.pf-m-link:not(.pf-m-inline).pf-m-active,.pf-c-button.pf-m-link:not(.pf-m-inline):active{--pf-c-button--m-link--Color:var(--pf-c-button--m-link--active--Color);--pf-c-button--m-link--BackgroundColor:var(--pf-c-button--m-link--active--BackgroundColor)}.pf-c-button.pf-m-link.pf-m-inline{--pf-c-button--FontSize:var(--pf-c-button--m-link--m-inline--FontSize);--pf-c-button__progress--Left:var(--pf-c-button--m-link--m-inline__progress--Left);cursor:pointer;display:inline;padding:var(--pf-c-button--m-link--m-inline--PaddingTop) var(--pf-c-button--m-link--m-inline--PaddingRight) var(--pf-c-button--m-link--m-inline--PaddingBottom) var(--pf-c-button--m-link--m-inline--PaddingLeft);text-align:left;white-space:normal}.pf-c-button.pf-m-link.pf-m-inline:hover{--pf-c-button--m-link--Color:var(--pf-c-button--m-link--m-inline--hover--Color);text-decoration:var(--pf-c-button--m-link--m-inline--hover--TextDecoration)}.pf-c-button.pf-m-link.pf-m-display-lg{--pf-c-button--FontSize:var(--pf-c-button--m-link--m-display-lg--FontSize)}.pf-c-button.pf-m-danger{background-color:var(--pf-c-button--m-danger--BackgroundColor);color:var(--pf-c-button--m-danger--Color)}.pf-c-button.pf-m-danger:hover{--pf-c-button--m-danger--Color:var(--pf-c-button--m-danger--hover--Color);--pf-c-button--m-danger--BackgroundColor:var(--pf-c-button--m-danger--hover--BackgroundColor)}.pf-c-button.pf-m-danger:focus{--pf-c-button--m-danger--Color:var(--pf-c-button--m-danger--focus--Color);--pf-c-button--m-danger--BackgroundColor:var(--pf-c-button--m-danger--focus--BackgroundColor)}.pf-c-button.pf-m-danger.pf-m-active,.pf-c-button.pf-m-danger:active{--pf-c-button--m-danger--Color:var(--pf-c-button--m-danger--active--Color);--pf-c-button--m-danger--BackgroundColor:var(--pf-c-button--m-danger--active--BackgroundColor)}.pf-c-button.pf-m-danger.pf-m-secondary{--pf-c-button--m-danger--Color:var(--pf-c-button--m-secondary--m-danger--Color);--pf-c-button--m-danger--BackgroundColor:var(--pf-c-button--m-secondary--m-danger--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--m-danger--after--BorderColor)}.pf-c-button.pf-m-danger.pf-m-secondary:hover{--pf-c-button--m-secondary--m-danger--Color:var(--pf-c-button--m-secondary--m-danger--hover--Color);--pf-c-button--m-secondary--m-danger--BackgroundColor:var(--pf-c-button--m-secondary--m-danger--hover--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--m-danger--hover--after--BorderColor)}.pf-c-button.pf-m-danger.pf-m-secondary:focus{--pf-c-button--m-secondary--m-danger--Color:var(--pf-c-button--m-secondary--m-danger--focus--Color);--pf-c-button--m-secondary--m-danger--BackgroundColor:var(--pf-c-button--m-secondary--m-danger--focus--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--m-danger--focus--after--BorderColor)}.pf-c-button.pf-m-danger.pf-m-secondary.pf-m-active,.pf-c-button.pf-m-danger.pf-m-secondary:active{--pf-c-button--m-secondary--m-danger--Color:var(--pf-c-button--m-secondary--m-danger--active--Color);--pf-c-button--m-secondary--m-danger--BackgroundColor:var(--pf-c-button--m-secondary--m-danger--active--BackgroundColor);--pf-c-button--after--BorderColor:var(--pf-c-button--m-secondary--m-danger--active--after--BorderColor)}.pf-c-button.pf-m-danger.pf-m-link{--pf-c-button--m-danger--Color:var(--pf-c-button--m-link--m-danger--Color);--pf-c-button--m-danger--BackgroundColor:var(--pf-c-button--m-link--m-danger--BackgroundColor)}.pf-c-button.pf-m-danger.pf-m-link:hover{--pf-c-button--m-link--m-danger--Color:var(--pf-c-button--m-link--m-danger--hover--Color);--pf-c-button--m-link--m-danger--BackgroundColor:var(--pf-c-button--m-link--m-danger--hover--BackgroundColor)}.pf-c-button.pf-m-danger.pf-m-link:focus{--pf-c-button--m-link--m-danger--Color:var(--pf-c-button--m-link--m-danger--focus--Color);--pf-c-button--m-link--m-danger--BackgroundColor:var(--pf-c-button--m-link--m-danger--focus--BackgroundColor)}.pf-c-button.pf-m-danger.pf-m-link.pf-m-active,.pf-c-button.pf-m-danger.pf-m-link:active{--pf-c-button--m-link--m-danger--Color:var(--pf-c-button--m-link--m-danger--active--Color);--pf-c-button--m-link--m-danger--BackgroundColor:var(--pf-c-button--m-link--m-danger--active--BackgroundColor)}.pf-c-button.pf-m-warning{background-color:var(--pf-c-button--m-warning--BackgroundColor);color:var(--pf-c-button--m-warning--Color)}.pf-c-button.pf-m-warning:hover{--pf-c-button--m-warning--Color:var(--pf-c-button--m-warning--hover--Color);--pf-c-button--m-warning--BackgroundColor:var(--pf-c-button--m-warning--hover--BackgroundColor)}.pf-c-button.pf-m-warning:focus{--pf-c-button--m-warning--Color:var(--pf-c-button--m-warning--focus--Color);--pf-c-button--m-warning--BackgroundColor:var(--pf-c-button--m-warning--focus--BackgroundColor)}.pf-c-button.pf-m-warning.pf-m-active,.pf-c-button.pf-m-warning:active{--pf-c-button--m-warning--Color:var(--pf-c-button--m-warning--active--Color);--pf-c-button--m-warning--BackgroundColor:var(--pf-c-button--m-warning--active--BackgroundColor)}.pf-c-button.pf-m-control{--pf-c-button--BorderRadius:var(--pf-c-button--m-control--BorderRadius);--pf-c-button--disabled--BackgroundColor:var(--pf-c-button--m-control--disabled--BackgroundColor);--pf-c-button--after--BorderWidth:var(--pf-c-button--m-control--after--BorderWidth);--pf-c-button--after--BorderColor:var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-c-button--m-control--after--BorderLeftColor);background-color:var(--pf-c-button--m-control--BackgroundColor);color:var(--pf-c-button--m-control--Color)}.pf-c-button.pf-m-control:after{border-radius:initial}.pf-c-button.pf-m-control:hover{--pf-c-button--m-control--Color:var(--pf-c-button--m-control--hover--Color);--pf-c-button--m-control--BackgroundColor:var(--pf-c-button--m-control--hover--BackgroundColor);--pf-c-button--m-control--after--BorderBottomColor:var(--pf-c-button--m-control--hover--after--BorderBottomColor)}.pf-c-button.pf-m-control:hover:after{border-bottom-width:var(--pf-c-button--m-control--hover--after--BorderBottomWidth)}.pf-c-button.pf-m-control.pf-m-active,.pf-c-button.pf-m-control:active{--pf-c-button--m-control--Color:var(--pf-c-button--m-control--active--Color);--pf-c-button--m-control--BackgroundColor:var(--pf-c-button--m-control--active--BackgroundColor);--pf-c-button--m-control--after--BorderBottomColor:var(--pf-c-button--m-control--active--after--BorderBottomColor)}.pf-c-button.pf-m-control.pf-m-active:after,.pf-c-button.pf-m-control:active:after{border-bottom-width:var(--pf-c-button--m-control--active--after--BorderBottomWidth)}.pf-c-button.pf-m-control:focus{--pf-c-button--m-control--Color:var(--pf-c-button--m-control--focus--Color);--pf-c-button--m-control--BackgroundColor:var(--pf-c-button--m-control--focus--BackgroundColor);--pf-c-button--m-control--after--BorderBottomColor:var(--pf-c-button--m-control--focus--after--BorderBottomColor)}.pf-c-button.pf-m-control:focus:after{border-bottom-width:var(--pf-c-button--m-control--focus--after--BorderBottomWidth)}.pf-c-button.pf-m-control.pf-m-expanded{--pf-c-button--m-control--Color:var(--pf-c-button--m-control--m-expanded--Color);--pf-c-button--m-control--BackgroundColor:var(--pf-c-button--m-control--m-expanded--BackgroundColor);--pf-c-button--m-control--after--BorderBottomColor:var(--pf-c-button--m-control--m-expanded--after--BorderBottomColor)}.pf-c-button.pf-m-control.pf-m-expanded:after{border-bottom-width:var(--pf-c-button--m-control--m-expanded--after--BorderBottomWidth)}.pf-c-button.pf-m-plain{--pf-c-button--disabled--Color:var(--pf-c-button--m-plain--disabled--Color);--pf-c-button--disabled--BackgroundColor:var(--pf-c-button--m-plain--disabled--BackgroundColor);background-color:var(--pf-c-button--m-plain--BackgroundColor);color:var(--pf-c-button--m-plain--Color)}.pf-c-button.pf-m-plain:hover{--pf-c-button--m-plain--Color:var(--pf-c-button--m-plain--hover--Color);--pf-c-button--m-plain--BackgroundColor:var(--pf-c-button--m-plain--hover--BackgroundColor)}.pf-c-button.pf-m-plain.pf-m-active,.pf-c-button.pf-m-plain:active{--pf-c-button--m-plain--Color:var(--pf-c-button--m-plain--active--Color);--pf-c-button--m-plain--BackgroundColor:var(--pf-c-button--m-plain--active--BackgroundColor)}.pf-c-button.pf-m-plain:focus{--pf-c-button--m-plain--Color:var(--pf-c-button--m-plain--focus--Color);--pf-c-button--m-plain--BackgroundColor:var(--pf-c-button--m-plain--focus--BackgroundColor)}.pf-c-button.pf-m-disabled,.pf-c-button:disabled{pointer-events:none}.pf-c-button.pf-m-aria-disabled,.pf-c-button.pf-m-disabled,.pf-c-button:disabled{background-color:var(--pf-c-button--disabled--BackgroundColor);color:var(--pf-c-button--disabled--Color)}.pf-c-button.pf-m-aria-disabled:after,.pf-c-button.pf-m-disabled:after,.pf-c-button:disabled:after{border-color:var(--pf-c-button--disabled--after--BorderColor)}.pf-c-button.pf-m-aria-disabled .pf-c-badge,.pf-c-button.pf-m-disabled .pf-c-badge,.pf-c-button:disabled .pf-c-badge{--pf-c-badge--m-unread--Color:var(--pf-c-button--disabled__c-badge--Color);--pf-c-badge--m-unread--BackgroundColor:var(--pf-c-button--disabled__c-badge--BackgroundColor);--pf-c-button--m-primary__c-badge--BorderWidth:0}.pf-c-button.pf-m-aria-disabled{--pf-c-button--after--BorderWidth:0;--pf-c-button--m-link--m-inline--hover--TextDecoration:none;cursor:default}.pf-c-button.pf-m-progress{--pf-c-button--PaddingRight:var(--pf-c-button--m-progress--PaddingRight);--pf-c-button--PaddingLeft:var(--pf-c-button--m-progress--PaddingLeft);transition:var(--pf-c-button--m-progress--TransitionProperty) var(--pf-c-button--m-progress--TransitionDuration)}.pf-c-button.pf-m-in-progress{--pf-c-button--m-link--m-inline--PaddingLeft:var(--pf-c-button--m-link--m-inline--m-in-progress--PaddingLeft)}.pf-c-button.pf-m-in-progress:not(.pf-m-plain){--pf-c-button--PaddingRight:var(--pf-c-button--m-in-progress--PaddingRight);--pf-c-button--PaddingLeft:var(--pf-c-button--m-in-progress--PaddingLeft)}.pf-c-button.pf-m-in-progress.pf-m-plain{--pf-c-button--m-plain--Color:var(--pf-c-button--m-in-progress--m-plain--Color);--pf-c-button__progress--Left:var(--pf-c-button--m-in-progress--m-plain__progress--Left);--pf-c-button__progress--TranslateX:var(--pf-c-button--m-in-progress--m-plain__progress--TranslateX)}.pf-c-button.pf-m-in-progress.pf-m-plain>:not(.pf-c-button__progress){opacity:0}.pf-c-button__icon.pf-m-start{margin-right:var(--pf-c-button__icon--m-start--MarginRight)}.pf-c-button__icon.pf-m-end{margin-left:var(--pf-c-button__icon--m-end--MarginLeft)}.pf-c-button__progress{left:var(--pf-c-button__progress--Left);line-height:1;position:absolute;top:var(--pf-c-button__progress--Top);transform:translate(var(--pf-c-button__progress--TranslateX),var(--pf-c-button__progress--TranslateY))}.pf-c-button__progress .pf-c-spinner{--pf-c-spinner--Color:currentcolor}.pf-c-button__count{align-items:center;display:inline-flex;margin-left:var(--pf-c-button__count--MarginLeft)}.pf-m-overpass-font .pf-c-button{--pf-c-button--FontWeight:var(--pf-global--FontWeight--semi-bold)}:where(.pf-theme-dark) .pf-c-button{--pf-c-button--disabled--Color:var(--pf-global--disabled-color--300);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-button--m-tertiary--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-button--m-tertiary--Color:var(--pf-global--palette--black-100);--pf-c-button--m-tertiary--hover--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-button--m-tertiary--hover--Color:var(--pf-global--palette--black-100);--pf-c-button--m-tertiary--focus--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-button--m-tertiary--focus--Color:var(--pf-global--palette--black-100);--pf-c-button--m-tertiary--active--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-button--m-tertiary--active--Color:var(--pf-global--palette--black-100);--pf-c-button--m-warning--Color:var(--pf-global--palette--black-900);--pf-c-button--m-warning--hover--Color:var(--pf-global--palette--black-900);--pf-c-button--m-warning--focus--Color:var(--pf-global--palette--black-900);--pf-c-button--m-warning--active--Color:var(--pf-global--palette--black-900);--pf-c-button--m-warning--hover--BackgroundColor:var(--pf-global--warning-color--200);--pf-c-button--m-warning--focus--BackgroundColor:var(--pf-global--warning-color--200);--pf-c-button--m-warning--active--BackgroundColor:var(--pf-global--warning-color--200);--pf-c-button--m-danger--Color:var(--pf-global--palette--black-900);--pf-c-button--m-danger--hover--Color:var(--pf-global--palette--black-900);--pf-c-button--m-danger--focus--Color:var(--pf-global--palette--black-900);--pf-c-button--m-danger--active--Color:var(--pf-global--palette--black-900);--pf-c-button--m-control--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-button--m-control--hover--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-button--m-control--active--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-button--m-control--focus--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-button--m-control--m-expanded--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-button--m-control--after--BorderTopColor:transparent;--pf-c-button--m-control--after--BorderRightColor:transparent;--pf-c-button--m-control--after--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-button--m-control--after--BorderLeftColor:transparent;--pf-c-button--m-control--hover--after--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-button--m-control--active--after--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-button--m-control--focus--after--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-button--m-control--m-expanded--after--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-button--m-control--disabled--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-button--m-primary__c-badge--BorderColor:var(--pf-global--Color--100)}:where(.pf-theme-dark) .pf-c-button.pf-m-control:disabled:after{border:0;border-bottom:var(--pf-global--BorderWidth--sm) solid var(--pf-global--palette--black-700)}.pf-c-spinner{--pf-c-spinner--diameter:var(--pf-global--icon--FontSize--xl);--pf-c-spinner--Width:var(--pf-c-spinner--diameter);--pf-c-spinner--Height:var(--pf-c-spinner--diameter);--pf-c-spinner--Color:var(--pf-global--primary-color--100);--pf-c-spinner--m-sm--diameter:var(--pf-global--icon--FontSize--sm);--pf-c-spinner--m-md--diameter:var(--pf-global--icon--FontSize--md);--pf-c-spinner--m-lg--diameter:var(--pf-global--icon--FontSize--lg);--pf-c-spinner--m-xl--diameter:var(--pf-global--icon--FontSize--xl);--pf-c-spinner--m-inline--diameter:1em;height:var(--pf-c-spinner--Height);overflow:hidden;width:var(--pf-c-spinner--Width)}.pf-c-spinner.pf-m-inline{--pf-c-spinner--diameter:var(--pf-c-spinner--m-inline--diameter)}.pf-c-spinner.pf-m-sm{--pf-c-spinner--diameter:var(--pf-c-spinner--m-sm--diameter)}.pf-c-spinner.pf-m-md{--pf-c-spinner--diameter:var(--pf-c-spinner--m-md--diameter)}.pf-c-spinner.pf-m-lg{--pf-c-spinner--diameter:var(--pf-c-spinner--m-lg--diameter)}.pf-c-spinner.pf-m-xl{--pf-c-spinner--diameter:var(--pf-c-spinner--m-xl--diameter)}span.pf-c-spinner{--pf-c-spinner--AnimationDuration:1.5s;--pf-c-spinner--AnimationTimingFunction:cubic-bezier(.77,.005,.315,1);--pf-c-spinner--stroke-width-multiplier:.1;--pf-c-spinner--stroke-width:calc(var(--pf-c-spinner--diameter)*var(--pf-c-spinner--stroke-width-multiplier));--pf-c-spinner__clipper--Width:var(--pf-c-spinner--diameter);--pf-c-spinner__clipper--Height:var(--pf-c-spinner--diameter);--pf-c-spinner__clipper--after--BoxShadowColor:var(--pf-c-spinner--Color);--pf-c-spinner__clipper--after--Width:var(--pf-c-spinner--diameter);--pf-c-spinner__clipper--after--Height:var(--pf-c-spinner--diameter);--pf-c-spinner__clipper--after--BoxShadowSpreadRadius:var(--pf-c-spinner--stroke-width);--pf-c-spinner__lead-ball--after--BackgroundColor:var(--pf-c-spinner--Color);--pf-c-spinner__ball--after--Width:var(--pf-c-spinner--stroke-width);--pf-c-spinner__ball--after--Height:var(--pf-c-spinner--stroke-width);--pf-c-spinner__tail-ball--after--BackgroundColor:var(--pf-c-spinner--Color);animation:pf-animation-spinner-parent calc(var(--pf-c-spinner--AnimationDuration)*2) var(--pf-c-spinner--AnimationTimingFunction) infinite;display:inline-block;position:relative;text-align:left}@keyframes pf-animation-spinner-parent{0%{transform:rotate(0deg)}50%{transform:rotate(540deg)}to{transform:rotate(3turn)}}.pf-c-spinner__clipper{animation:pf-animation-spinner__clipper var(--pf-c-spinner--AnimationDuration) linear infinite;clip-path:inset(0 0 50% 50%);height:var(--pf-c-spinner__clipper--Height);position:absolute;width:var(--pf-c-spinner__clipper--Width)}@keyframes pf-animation-spinner__clipper{0%{transform:rotate(90deg)}to{transform:rotate(1turn)}}.pf-c-spinner__clipper:after{animation:pf-animation-spinner__clipper-after var(--pf-c-spinner--AnimationDuration) linear infinite;border-radius:50%;box-shadow:inset 0 0 0 var(--pf-c-spinner__clipper--after--BoxShadowSpreadRadius) var(--pf-c-spinner__clipper--after--BoxShadowColor);clip-path:inset(0 0 0 50%);content:"";height:var(--pf-c-spinner__clipper--after--Height);position:absolute;width:var(--pf-c-spinner__clipper--after--Width)}@keyframes pf-animation-spinner__clipper-after{0%{transform:rotate(-180deg)}to{transform:rotate(90deg)}}.pf-c-spinner__lead-ball{animation:pf-animation-spinner__lead-ball var(--pf-c-spinner--AnimationDuration) linear infinite;height:100%;left:0;position:absolute;top:0;width:100%}.pf-c-spinner__lead-ball:after{background-color:var(--pf-c-spinner__lead-ball--after--BackgroundColor);border-radius:50%;content:"";height:var(--pf-c-spinner__ball--after--Height);position:absolute;right:0;top:calc(50% - var(--pf-c-spinner__ball--after--Height)/2);transform-origin:top right;width:var(--pf-c-spinner__ball--after--Width)}@keyframes pf-animation-spinner__lead-ball{0%{transform:rotate(0deg)}33%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.pf-c-spinner__tail-ball{animation:pf-animation-spinner__tail-ball var(--pf-c-spinner--AnimationDuration) linear infinite;height:100%;left:0;position:absolute;top:0;width:100%}.pf-c-spinner__tail-ball:after{background-color:var(--pf-c-spinner__tail-ball--after--BackgroundColor);border-radius:50%;content:"";height:var(--pf-c-spinner__ball--after--Height);position:absolute;right:0;top:calc(50% - var(--pf-c-spinner__ball--after--Height)/2);transform-origin:top right;width:var(--pf-c-spinner__ball--after--Width)}@keyframes pf-animation-spinner__tail-ball{0%{transform:rotate(0deg)}66%{transform:rotate(180deg)}to{transform:rotate(1turn)}}svg.pf-c-spinner{--pf-c-spinner--diameter:var(--pf-global--icon--FontSize--xl);--pf-c-spinner--AnimationDuration:1.4s;--pf-c-spinner--AnimationTimingFunction:linear;--pf-c-spinner--stroke-width:10;--pf-c-spinner__path--Stroke:var(--pf-c-spinner--Color);--pf-c-spinner__path--StrokeWidth:var(--pf-c-spinner--stroke-width);--pf-c-spinner__path--AnimationTimingFunction:ease-in-out;--pf-c-spinner--m-sm--diameter:var(--pf-global--icon--FontSize--sm);--pf-c-spinner--m-md--diameter:var(--pf-global--icon--FontSize--md);--pf-c-spinner--m-lg--diameter:var(--pf-global--icon--FontSize--lg);--pf-c-spinner--m-xl--diameter:var(--pf-global--icon--FontSize--xl);animation:pf-c-spinner-animation-rotate calc(var(--pf-c-spinner--AnimationDuration)*2) var(--pf-c-spinner--AnimationTimingFunction) infinite}svg.pf-c-spinner.pf-m-sm{--pf-c-spinner--diameter:var(--pf-c-spinner--m-sm--diameter)}svg.pf-c-spinner.pf-m-md{--pf-c-spinner--diameter:var(--pf-c-spinner--m-md--diameter)}svg.pf-c-spinner.pf-m-lg{--pf-c-spinner--diameter:var(--pf-c-spinner--m-lg--diameter)}svg.pf-c-spinner.pf-m-xl{--pf-c-spinner--diameter:var(--pf-c-spinner--m-xl--diameter)}.pf-c-spinner__path{stroke:var(--pf-c-spinner--Color);stroke-linecap:round;stroke-dasharray:283;stroke-dashoffset:280;stroke-width:var(--pf-c-spinner--stroke-width);animation:pf-c-spinner-animation-dash var(--pf-c-spinner--AnimationDuration) var(--pf-c-spinner__path--AnimationTimingFunction) infinite;height:100%;transform-origin:50% 50%;width:100%}@keyframes pf-c-spinner-animation-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes pf-c-spinner-animation-dash{0%{stroke-dashoffset:280;transform:rotate(0)}15%{stroke-width:calc(var(--pf-c-spinner__path--StrokeWidth) - 4)}40%{stroke-dashoffset:150;stroke-dasharray:220}to{stroke-dashoffset:280;transform:rotate(2turn)}}.pf-c-badge{--pf-c-badge--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-badge--FontSize:var(--pf-global--FontSize--xs);--pf-c-badge--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-badge--PaddingRight:var(--pf-global--spacer--sm);--pf-c-badge--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-badge--Color:var(--pf-global--Color--dark-100);--pf-c-badge--MinWidth:var(--pf-global--spacer--xl);--pf-c-badge--m-read--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-badge--m-read--Color:var(--pf-global--Color--dark-100);--pf-c-badge--m-unread--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-badge--m-unread--Color:var(--pf-global--Color--light-100);background-color:var(--pf-c-badge--BackgroundColor);border-radius:var(--pf-c-badge--BorderRadius);color:var(--pf-c-badge--Color);display:inline-block;font-size:var(--pf-c-badge--FontSize);font-weight:var(--pf-c-badge--FontWeight);min-width:var(--pf-c-badge--MinWidth);padding-left:var(--pf-c-badge--PaddingLeft);padding-right:var(--pf-c-badge--PaddingRight);text-align:center}.pf-c-badge.pf-m-read{--pf-c-badge--Color:var(--pf-c-badge--m-read--Color);--pf-c-badge--BackgroundColor:var(--pf-c-badge--m-read--BackgroundColor)}.pf-c-badge.pf-m-unread{--pf-c-badge--Color:var(--pf-c-badge--m-unread--Color);--pf-c-badge--BackgroundColor:var(--pf-c-badge--m-unread--BackgroundColor)}:where(.pf-theme-dark) .pf-c-badge{--pf-c-badge--m-read--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-badge--m-unread--BackgroundColor:var(--pf-global--primary-color--300)}.pf-c-tooltip{--pf-c-tooltip--MaxWidth:18.75rem;--pf-c-tooltip--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-tooltip__content--PaddingTop:var(--pf-global--spacer--sm);--pf-c-tooltip__content--PaddingRight:var(--pf-global--spacer--sm);--pf-c-tooltip__content--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tooltip__content--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-tooltip__content--Color:var(--pf-global--Color--light-100);--pf-c-tooltip__content--BackgroundColor:var(--pf-global--BackgroundColor--dark-100);--pf-c-tooltip__content--FontSize:var(--pf-global--FontSize--sm);--pf-c-tooltip__arrow--Width:0.5rem;--pf-c-tooltip__arrow--Height:0.5rem;--pf-c-tooltip__arrow--m-top--TranslateX:-50%;--pf-c-tooltip__arrow--m-top--TranslateY:50%;--pf-c-tooltip__arrow--m-top--Rotate:45deg;--pf-c-tooltip__arrow--m-right--TranslateX:-50%;--pf-c-tooltip__arrow--m-right--TranslateY:-50%;--pf-c-tooltip__arrow--m-right--Rotate:45deg;--pf-c-tooltip__arrow--m-bottom--TranslateX:-50%;--pf-c-tooltip__arrow--m-bottom--TranslateY:-50%;--pf-c-tooltip__arrow--m-bottom--Rotate:45deg;--pf-c-tooltip__arrow--m-left--TranslateX:50%;--pf-c-tooltip__arrow--m-left--TranslateY:-50%;--pf-c-tooltip__arrow--m-left--Rotate:45deg;box-shadow:var(--pf-c-tooltip--BoxShadow);max-width:var(--pf-c-tooltip--MaxWidth);position:relative}.pf-c-tooltip.pf-m-top .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-top-left .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-top-right .pf-c-tooltip__arrow{bottom:0;left:50%;transform:translateX(var(--pf-c-tooltip__arrow--m-top--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-top--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-top--Rotate))}.pf-c-tooltip.pf-m-bottom .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-bottom-left .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-bottom-right .pf-c-tooltip__arrow{left:50%;top:0;transform:translateX(var(--pf-c-tooltip__arrow--m-bottom--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-bottom--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-bottom--Rotate))}.pf-c-tooltip.pf-m-left .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-left-bottom .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-left-top .pf-c-tooltip__arrow{right:0;top:50%;transform:translateX(var(--pf-c-tooltip__arrow--m-left--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-left--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-left--Rotate))}.pf-c-tooltip.pf-m-right .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-right-bottom .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-right-top .pf-c-tooltip__arrow{left:0;top:50%;transform:translateX(var(--pf-c-tooltip__arrow--m-right--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-right--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-right--Rotate))}.pf-c-tooltip.pf-m-left-top .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-right-top .pf-c-tooltip__arrow{top:var(--pf-c-tooltip__arrow--Height)}.pf-c-tooltip.pf-m-left-bottom .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-right-bottom .pf-c-tooltip__arrow{bottom:0;top:auto}.pf-c-tooltip.pf-m-bottom-left .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-top-left .pf-c-tooltip__arrow{left:var(--pf-c-tooltip__arrow--Width)}.pf-c-tooltip.pf-m-bottom-right .pf-c-tooltip__arrow,.pf-c-tooltip.pf-m-top-right .pf-c-tooltip__arrow{left:auto;right:0}.pf-c-tooltip__content{background-color:var(--pf-c-tooltip__content--BackgroundColor);color:var(--pf-c-tooltip__content--Color);font-size:var(--pf-c-tooltip__content--FontSize);padding:var(--pf-c-tooltip__content--PaddingTop) var(--pf-c-tooltip__content--PaddingRight) var(--pf-c-tooltip__content--PaddingBottom) var(--pf-c-tooltip__content--PaddingLeft);position:relative;text-align:center;word-break:break-word}.pf-c-tooltip__content.pf-m-text-align-left{text-align:left}.pf-c-tooltip__arrow{background-color:var(--pf-c-tooltip__content--BackgroundColor);height:var(--pf-c-tooltip__arrow--Height);pointer-events:none;position:absolute;width:var(--pf-c-tooltip__arrow--Width)}:where(.pf-theme-dark) .pf-c-tooltip{--pf-c-tooltip--BoxShadow:none;--pf-c-tooltip__content--BackgroundColor:var(--pf-global--BackgroundColor--300)}:where(.pf-theme-dark) .pf-c-tooltip,:where(.pf-theme-dark) .pf-c-tooltip__arrow{border:var(--pf-global--BorderWidth--lg) solid var(--pf-global--BorderColor--300)}:where(.pf-theme-dark) .pf-c-tooltip__arrow{--pf-c-tooltip__arrow--Width:0.9375rem;--pf-c-tooltip__arrow--Height:0.9375rem}.pf-c-popover[data-popper-reference-hidden=true]{pointer-events:none;visibility:hidden}.pf-c-table{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100)}.pf-c-table tr>*{--pf-hidden-visible--visible--Visibility:visible;--pf-hidden-visible--hidden--Display:none;--pf-hidden-visible--hidden--Visibility:hidden;--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility);display:var(--pf-hidden-visible--Display);visibility:var(--pf-hidden-visible--Visibility)}.pf-c-table tr>.pf-m-hidden{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}@media screen and (min-width:576px){.pf-c-table tr>.pf-m-hidden-on-sm{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-c-table tr>.pf-m-visible-on-sm{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-c-table tr>.pf-m-hidden-on-md{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-c-table tr>.pf-m-visible-on-md{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:992px){.pf-c-table tr>.pf-m-hidden-on-lg{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-c-table tr>.pf-m-visible-on-lg{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1200px){.pf-c-table tr>.pf-m-hidden-on-xl{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-c-table tr>.pf-m-visible-on-xl{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1450px){.pf-c-table tr>.pf-m-hidden-on-2xl{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-c-table tr>.pf-m-visible-on-2xl{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}.pf-c-table{--pf-c-table--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--BorderColor:var(--pf-global--BorderColor--100);--pf-c-table--border-width--base:var(--pf-global--BorderWidth--sm);--pf-c-table-caption--FontSize:var(--pf-global--FontSize--sm);--pf-c-table-caption--Color:var(--pf-global--Color--200);--pf-c-table-caption--PaddingTop:var(--pf-global--spacer--md);--pf-c-table-caption--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table-caption--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table-caption--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table-caption--xl--PaddingRight:var(--pf-global--spacer--md);--pf-c-table-caption--xl--PaddingLeft:var(--pf-global--spacer--md);--pf-c-table--thead--cell--FontSize:var(--pf-global--FontSize--sm);--pf-c-table--thead--cell--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-table--tbody--cell--PaddingTop:var(--pf-global--spacer--lg);--pf-c-table--tbody--cell--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-table--tr--BoxShadow--top--base:0 -0.1875rem 0.25rem -0.125rem rgba(3,3,3,.08);--pf-c-table--cell--Padding--base:var(--pf-global--spacer--md);--pf-c-table--cell--FontSize:var(--pf-global--FontSize--md);--pf-c-table--cell--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-table--cell--Color:var(--pf-global--Color--100);--pf-c-table--cell--PaddingTop:var(--pf-c-table--cell--Padding--base);--pf-c-table--cell--PaddingRight:var(--pf-c-table--cell--Padding--base);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--cell--Padding--base);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--cell--Padding--base);--pf-c-table--cell--first-last-child--PaddingLeft:var(--pf-global--spacer--md);--pf-c-table--cell--first-last-child--PaddingRight:var(--pf-global--spacer--md);--pf-c-table--cell--first-last-child--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table--cell--first-last-child--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table--tr--m-first-cell-offset-reset--cell--PaddingLeft:var(--pf-c-table--cell--Padding--base);--pf-c-table--cell--MinWidth:0;--pf-c-table--cell--MaxWidth:none;--pf-c-table--cell--Width:auto;--pf-c-table--cell--Overflow:visible;--pf-c-table--cell--TextOverflow:clip;--pf-c-table--cell--WhiteSpace:normal;--pf-c-table--cell--WordBreak:normal;--pf-c-table--cell--m-border-right--before--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-table--cell--m-border-right--before--BorderRightColor:var(--pf-global--BorderColor--100);--pf-c-table--cell--m-border-left--before--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-table--cell--m-border-left--before--BorderLeftColor:var(--pf-global--BorderColor--100);--pf-c-table--cell--m-help--MinWidth:11ch;--pf-c-table--m-truncate--cell--MaxWidth:1px;--pf-c-table--m-truncate--cell--MinWidth:calc(5ch + var(--pf-c-table--cell--PaddingRight) + var(--pf-c-table--cell--PaddingLeft));--pf-c-table--cell--hidden-visible--Display:table-cell;--pf-c-table__toggle--c-button--MarginTop:-0.375rem;--pf-c-table__toggle--c-button--MarginBottom:-0.375rem;--pf-c-table__toggle--c-button__toggle-icon--Rotate:270deg;--pf-c-table__toggle--c-button__toggle-icon--Transition:.2s ease-in 0s;--pf-c-table__toggle--c-button--m-expanded__toggle-icon--Rotate:360deg;--pf-c-table__button--BackgroundColor:transparent;--pf-c-table__button--Color:var(--pf-global--Color--100);--pf-c-table__button--hover--Color:var(--pf-global--Color--100);--pf-c-table__button--focus--Color:var(--pf-global--Color--100);--pf-c-table__button--active--Color:var(--pf-global--Color--100);--pf-c-table__button--OutlineOffset:calc(var(--pf-global--BorderWidth--lg)*-1);--pf-c-table--m-compact__toggle--PaddingTop:0;--pf-c-table--m-compact__toggle--PaddingBottom:0;--pf-c-table__check--input--MarginTop:0.25rem;--pf-c-table__check--input--FontSize:var(--pf-global--FontSize--md);--pf-c-table--cell--m-favorite--Color:var(--pf-global--Color--light-300);--pf-c-table__favorite--c-button--Color:var(--pf-global--Color--light-300);--pf-c-table__favorite--c-button--FontSize:var(--pf-global--FontSize--sm);--pf-c-table__favorite--c-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-table__favorite--c-button--MarginRight:calc(var(--pf-global--spacer--md)*-1);--pf-c-table__favorite--c-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-table__favorite--c-button--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-table__favorite--m-favorited--c-button--Color:var(--pf-global--palette--gold-400);--pf-c-table__sort--m-favorite__button__text--Color:var(--pf-global--Color--200);--pf-c-table__sort--m-favorite__button--hover__text--Color:var(--pf-global--Color--100);--pf-c-table__sort--m-favorite__button--focus__text--Color:var(--pf-global--Color--100);--pf-c-table__sort--m-favorite__button--active__text--Color:var(--pf-global--Color--100);--pf-c-table__draggable--c-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-table__draggable--c-button--MarginRight:calc(var(--pf-global--spacer--md)*-1);--pf-c-table__draggable--c-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-table__draggable--c-button--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-table__tr--m-ghost-row--Opacity:.4;--pf-c-table__tr--m-ghost-row--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table__action--PaddingTop:0;--pf-c-table__action--PaddingRight:0;--pf-c-table__action--PaddingBottom:0;--pf-c-table__action--PaddingLeft:0;--pf-c-table__inline-edit-action--PaddingTop:0;--pf-c-table__inline-edit-action--PaddingRight:0;--pf-c-table__inline-edit-action--PaddingBottom:0;--pf-c-table__inline-edit-action--PaddingLeft:0;--pf-c-table__expandable-row--Transition:var(--pf-global--Transition);--pf-c-table__expandable-row--MaxHeight:28.125rem;--pf-c-table__expandable-row-content--Transition:var(--pf-global--Transition);--pf-c-table__expandable-row-content--PaddingTop:var(--pf-global--spacer--lg);--pf-c-table__expandable-row-content--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-table__expandable-row--after--Top:calc(var(--pf-c-table--border-width--base)*-1);--pf-c-table__expandable-row--after--Bottom:calc(var(--pf-c-table--border-width--base)*-1);--pf-c-table__expandable-row--after--border-width--base:var(--pf-global--BorderWidth--lg);--pf-c-table__expandable-row--after--BorderLeftWidth:0;--pf-c-table__expandable-row--after--BorderColor:var(--pf-global--active-color--100);--pf-c-table__icon-inline--MarginRight:var(--pf-global--spacer--sm);--pf-c-table__sort--MinWidth:calc(6ch + var(--pf-c-table--cell--PaddingRight) + var(--pf-c-table--cell--PaddingLeft) + var(--pf-c-table__sort-indicator--MarginLeft));--pf-c-table__sort__button--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-table__sort__button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table__sort__button--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-table__sort__button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-table__sort__button--MarginTop:calc(var(--pf-c-table__sort__button--PaddingTop)*-1);--pf-c-table__sort__button--MarginBottom:calc(var(--pf-c-table__sort__button--PaddingBottom)*-1);--pf-c-table__sort__button--MarginLeft:calc(var(--pf-c-table__sort__button--PaddingLeft)*-1);--pf-c-table__sort__button--Color:var(--pf-global--Color--100);--pf-c-table__sort--m-selected__button--Color:var(--pf-global--active-color--100);--pf-c-table__sort--m-help--MinWidth:15ch;--pf-c-table__sort__button__text--Color:currentcolor;--pf-c-table__sort__button--hover__text--Color:currentcolor;--pf-c-table__sort__button--focus__text--Color:currentcolor;--pf-c-table__sort__button--active__text--Color:currentcolor;--pf-c-table__sort-indicator--Color:var(--pf-global--disabled-color--200);--pf-c-table__sort-indicator--MarginLeft:var(--pf-global--spacer--md);--pf-c-table__sort--m-selected__sort-indicator--Color:var(--pf-global--active-color--100);--pf-c-table__sort__button--hover__sort-indicator--Color:var(--pf-global--Color--100);--pf-c-table__sort__button--active__sort-indicator--Color:var(--pf-global--Color--100);--pf-c-table__sort__button--focus__sort-indicator--Color:var(--pf-global--Color--100);--pf-c-table--th--m-help--MinWidth:11ch;--pf-c-table__column-help--MarginLeft:var(--pf-global--spacer--xs);--pf-c-table__column-help--TranslateY:0.125rem;--pf-c-table__column-help--c-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-table__column-help--c-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-table__column-help--c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table__column-help--c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-table__compound-expansion-toggle__button--Color:var(--pf-global--active-color--100);--pf-c-table__compound-expansion-toggle__button--hover--Color:var(--pf-global--link--Color--hover);--pf-c-table__compound-expansion-toggle__button--focus--Color:var(--pf-global--link--Color--hover);--pf-c-table__compound-expansion-toggle__button--active--Color:var(--pf-global--link--Color--hover);--pf-c-table__compound-expansion-toggle__button--before--border-width--base:var(--pf-global--BorderWidth--sm);--pf-c-table__compound-expansion-toggle__button--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:0;--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0;--pf-c-table__compound-expansion-toggle__button--before--Bottom:calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base)*-1);--pf-c-table__compound-expansion-toggle__button--before--Left:calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base)*-1);--pf-c-table__compound-expansion-toggle__button--after--border-width--base:var(--pf-global--BorderWidth--lg);--pf-c-table__compound-expansion-toggle__button--after--BorderColor:var(--pf-global--primary-color--100);--pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth:0;--pf-c-table__compound-expansion-toggle__button--after--Top:calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base)*-1);--pf-c-table__compound-expansion-toggle__button--after--Left:calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base)*-1);--pf-c-table--m-compact-th--PaddingTop:calc(var(--pf-global--spacer--sm) + var(--pf-global--spacer--xs));--pf-c-table--m-compact-th--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-table--m-compact--cell--PaddingTop:var(--pf-global--spacer--sm);--pf-c-table--m-compact--cell--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table--m-compact--cell--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-table--m-compact--cell--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-table--m-compact--cell--first-last-child--PaddingLeft:var(--pf-global--spacer--md);--pf-c-table--m-compact--cell--first-last-child--PaddingRight:var(--pf-global--spacer--md);--pf-c-table--m-compact--cell--first-last-child--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table--m-compact--cell--first-last-child--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table--m-compact--FontSize:var(--pf-global--FontSize--sm);--pf-c-table--m-compact__expandable-row-content--PaddingTop:var(--pf-global--spacer--lg);--pf-c-table--m-compact__expandable-row-content--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table--m-compact__expandable-row-content--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-table--m-compact__expandable-row-content--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table--nested--first-last-child--PaddingRight:var(--pf-c-table--m-compact--cell--first-last-child--PaddingLeft);--pf-c-table--nested--first-last-child--PaddingLeft:var(--pf-c-table--m-compact--cell--first-last-child--PaddingRight);--pf-c-table__expandable-row--m-expanded--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-table--tr--m-hoverable--BoxShadow--top:var(--pf-c-table--tr--BoxShadow--top--base);--pf-c-table--tr--m-hoverable--BackgroundColor:transparent;--pf-c-table--tr--m-hoverable--BoxShadow:none;--pf-c-table--tr--m-hoverable--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--tr--m-hoverable--hover--BoxShadow:var(--pf-c-table--tr--m-hoverable--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-hoverable--hover--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tr--m-hoverable--focus--BoxShadow:var(--pf-c-table--tr--m-hoverable--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-hoverable--focus--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tr--m-hoverable--active--BoxShadow:var(--pf-c-table--tr--m-hoverable--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-hoverable--active--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tr--m-hoverable--m-selected--BoxShadow:var(--pf-global--BoxShadow--sm-bottom) inset,var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-selected--BoxShadow--top:var(--pf-c-table--tr--BoxShadow--top--base);--pf-c-table--tr--m-selected--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tr--m-selected--BoxShadow:var(--pf-c-table--tr--m-selected--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-selected--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--tr--m-selected--after--BorderLeftWidth:var(--pf-c-table__expandable-row--after--border-width--base);--pf-c-table--tr--m-selected--after--BorderLeftColor:var(--pf-global--active-color--100);--pf-c-table--tr--m-selected--m-selected--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-selected--hover--m-selected--BoxShadow:var(--pf-global--BoxShadow--sm-bottom) inset,var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tr--m-selected--tr--m-selected--hover--BoxShadow:var(--pf-c-table--tr--m-selected--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-hoverable--BoxShadow--top:var(--pf-c-table--tr--BoxShadow--top--base);--pf-c-table--tbody--m-hoverable--BoxShadow:none;--pf-c-table--tbody--m-hoverable--BackgroundColor:transparent;--pf-c-table--tbody--m-hoverable--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--tbody--m-hoverable--hover--BoxShadow:var(--pf-c-table--tbody--m-hoverable--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-hoverable--hover--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tbody--m-hoverable--focus--BoxShadow:var(--pf-c-table--tbody--m-hoverable--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-hoverable--focus--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tbody--m-hoverable--active--BoxShadow:var(--pf-c-table--tbody--m-hoverable--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-hoverable--active--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tbody--m-hoverable--m-expanded--BorderColor:var(--pf-global--active-color--400);--pf-c-table--tbody--m-hoverable--m-selected--hover--tr--BoxShadow:var(--pf-global--BoxShadow--sm-bottom) inset,var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-selected--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table--tbody--m-selected--BoxShadow--top:var(--pf-c-table--tr--BoxShadow--top--base);--pf-c-table--tbody--m-selected--BoxShadow:var(--pf-c-table--tbody--m-selected--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-selected--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--tbody--m-selected--after--BorderLeftWidth:var(--pf-c-table__expandable-row--after--border-width--base);--pf-c-table--tbody--m-selected--after--BorderLeftColor:var(--pf-global--active-color--100);--pf-c-table--tbody--m-selected--m-selected--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-selected--hover--tbody--m-selected--BoxShadow:var(--pf-global--BoxShadow--sm-bottom) inset,var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--tbody--m-selected--tbody--m-selected--hover--BoxShadow:var(--pf-c-table--tr--m-selected--BoxShadow--top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-table--thead--m-nested-column-header--button--OutlineOffset:-0.1875rem;--pf-c-table--thead--m-nested-column-header--tr--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--thead--m-nested-column-header--tr--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table__subhead--Color:var(--pf-global--Color--200);--pf-c-table--m-striped__tr--BackgroundColor:var(--pf-global--BackgroundColor--light-200);background-color:var(--pf-c-table--BackgroundColor);color:var(--pf-global--Color--100);width:100%}@media screen and (max-width:1200px){.pf-c-table{--pf-c-table-caption--PaddingRight:var(--pf-c-table-caption--xl--PaddingRight);--pf-c-table-caption--PaddingLeft:var(--pf-c-table-caption--xl--PaddingLeft)}}@media screen and (min-width:1200px){.pf-c-table{--pf-c-table--cell--first-last-child--PaddingRight:var(--pf-c-table--cell--first-last-child--xl--PaddingRight);--pf-c-table--cell--first-last-child--PaddingLeft:var(--pf-c-table--cell--first-last-child--xl--PaddingLeft);--pf-c-table--m-compact--cell--first-last-child--PaddingLeft:var(--pf-c-table--m-compact--cell--first-last-child--xl--PaddingLeft);--pf-c-table--m-compact--cell--first-last-child--PaddingRight:var(--pf-c-table--m-compact--cell--first-last-child--xl--PaddingRight)}}.pf-c-table.pf-m-fixed{table-layout:fixed}.pf-c-table.pf-m-sticky-header{position:relative}.pf-c-table.pf-m-sticky-header>thead>tr{border-bottom:0}.pf-c-table.pf-m-sticky-header>thead>tr>*{z-index:var(--pf-global--ZIndex--xs)}.pf-c-table.pf-m-sticky-header>thead:not(.pf-m-nested-column-header)>tr>*{background:var(--pf-c-table--BackgroundColor);position:sticky;top:0}.pf-c-table.pf-m-sticky-header>thead:not(.pf-m-nested-column-header)>tr>:after{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor);bottom:0;content:"";left:0;position:absolute;right:0}.pf-c-table.pf-m-sticky-header>.pf-m-nested-column-header{background:var(--pf-c-table--BackgroundColor);position:sticky;top:0;z-index:var(--pf-global--ZIndex--xs)}.pf-c-table.pf-m-sticky-header>.pf-m-nested-column-header>.pf-m-border-row{background-color:var(--pf-c-table--BorderColor);height:var(--pf-c-table--border-width--base)}.pf-c-table.pf-m-sticky-header>.pf-m-nested-column-header tr:not(:nth-last-child(2)) td:not([rowspan]),.pf-c-table.pf-m-sticky-header>.pf-m-nested-column-header tr:not(:nth-last-child(2)) th:not([rowspan]){--pf-c-table--cell--PaddingBottom:var(--pf-c-table--thead--m-nested-column-header--tr--PaddingBottom)}.pf-c-table:not(.pf-m-sticky-header)>.pf-m-nested-column-header tr:not(:last-child){border-bottom:0}.pf-c-table:not(.pf-m-sticky-header)>.pf-m-nested-column-header tr:not(:last-child) td:not([rowspan]),.pf-c-table:not(.pf-m-sticky-header)>.pf-m-nested-column-header tr:not(:last-child) th:not([rowspan]){--pf-c-table--cell--PaddingBottom:var(--pf-c-table--thead--m-nested-column-header--tr--PaddingBottom)}.pf-c-table tr.pf-m-striped,.pf-c-table.pf-m-striped.pf-m-expandable>tbody:nth-of-type(odd)>tr:not(.pf-c-table__expandable-row),.pf-c-table.pf-m-striped:not(.pf-m-expandable)>tbody>tr:nth-child(odd),.pf-c-table>.pf-m-striped-even>tr:nth-child(2n),.pf-c-table>.pf-m-striped>tr:nth-child(odd){--pf-c-table__sticky-column--BackgroundColor:var(--pf-c-table--m-striped__tr--BackgroundColor);background:var(--pf-c-table--m-striped__tr--BackgroundColor)}.pf-c-table tr:not(.pf-c-table__expandable-row){border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-c-table tr:not(.pf-c-table__expandable-row).pf-m-ghost-row{background-color:var(--pf-c-table__tr--m-ghost-row--BackgroundColor);opacity:var(--pf-c-table__tr--m-ghost-row--Opacity)}.pf-c-table tr>*{--pf-hidden-visible--visible--Display:var(--pf-c-table--cell--hidden-visible--Display);color:var(--pf-c-table--cell--Color);font-size:var(--pf-c-table--cell--FontSize);font-weight:var(--pf-c-table--cell--FontWeight);max-width:var(--pf-c-table--cell--MaxWidth);min-width:var(--pf-c-table--cell--MinWidth);overflow:var(--pf-c-table--cell--Overflow);padding:var(--pf-c-table--cell--PaddingTop) var(--pf-c-table--cell--PaddingRight) var(--pf-c-table--cell--PaddingBottom) var(--pf-c-table--cell--PaddingLeft);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:var(--pf-c-table--cell--Width);word-break:var(--pf-c-table--cell--WordBreak)}.pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:var(--pf-c-table--cell--first-last-child--PaddingLeft)}.pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:var(--pf-c-table--cell--first-last-child--PaddingRight)}.pf-c-table tr>.pf-m-center{text-align:center}.pf-c-table tr>:empty{min-width:0;padding:0;width:auto}.pf-c-table tr>.pf-m-help{--pf-c-table--cell--MinWidth:var(--pf-c-table--cell--m-help--MinWidth)}.pf-c-table tr>.pf-m-favorite{--pf-c-table__button--Color:var(--pf-c-table--cell--m-favorite--Color);--pf-c-table__sort--MinWidth:fit-content;--pf-c-table--cell--MaxWidth:fit-content;--pf-c-table--cell--Overflow:visible}.pf-c-table tr>.pf-m-border-left:before,.pf-c-table tr>.pf-m-border-right:before{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-table tr>.pf-m-border-right:before{border-right:var(--pf-c-table--cell--m-border-right--before--BorderRightWidth) solid var(--pf-c-table--cell--m-border-right--before--BorderRightColor)}.pf-c-table tr>.pf-m-border-left:before{border-left:var(--pf-c-table--cell--m-border-left--before--BorderLeftWidth) solid var(--pf-c-table--cell--m-border-left--before--BorderLeftColor)}.pf-c-table caption{background-color:var(--pf-c-table--BackgroundColor);color:var(--pf-c-table-caption--Color);font-size:var(--pf-c-table-caption--FontSize);padding-bottom:var(--pf-c-table-caption--PaddingBottom);padding-left:var(--pf-c-table-caption--PaddingLeft);padding-top:var(--pf-c-table-caption--PaddingTop);text-align:left}.pf-c-table thead{--pf-c-table--cell--FontSize:var(--pf-c-table--thead--cell--FontSize);--pf-c-table--cell--FontWeight:var(--pf-c-table--thead--cell--FontWeight);vertical-align:bottom}.pf-c-table thead.pf-m-nested-column-header button{outline-offset:var(--pf-c-table--thead--m-nested-column-header--button--OutlineOffset)}.pf-c-table thead.pf-m-nested-column-header input,.pf-c-table thead.pf-m-nested-column-header td,.pf-c-table thead.pf-m-nested-column-header th{vertical-align:middle}.pf-c-table thead.pf-m-nested-column-header .pf-c-table__check label{align-items:center;display:flex}.pf-c-table thead.pf-m-nested-column-header tr:not(:first-child) td:not([rowspan]),.pf-c-table thead.pf-m-nested-column-header tr:not(:first-child) th:not([rowspan]){--pf-c-table--cell--PaddingTop:var(--pf-c-table--thead--m-nested-column-header--tr--PaddingTop)}.pf-c-table thead .pf-c-table__subhead{--pf-c-table__sort__button__text--Color:var(--pf-c-table__subhead--Color);color:var(--pf-c-table__subhead--Color)}.pf-c-table tbody{--pf-c-table--cell--PaddingTop:var(--pf-c-table--tbody--cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--tbody--cell--PaddingBottom)}.pf-c-table tbody>tr>*{overflow-wrap:break-word;vertical-align:baseline}.pf-c-table tbody>tr>:first-child:after{background-color:transparent;border-left:var(--pf-c-table__expandable-row--after--BorderLeftWidth) solid var(--pf-c-table__expandable-row--after--BorderColor);bottom:var(--pf-c-table__expandable-row--after--Bottom);content:"";left:0;position:absolute;top:var(--pf-c-table__expandable-row--after--Top)}.pf-c-table tbody .pf-c-table__check input{margin-top:var(--pf-c-table__check--input--MarginTop);vertical-align:top}.pf-c-table .pf-c-table__compound-expansion-toggle,.pf-c-table .pf-c-table__compound-expansion-toggle:first-child,.pf-c-table .pf-c-table__compound-expansion-toggle:last-child{padding:0}.pf-c-table .pf-c-table__sort{min-width:var(--pf-c-table__sort--MinWidth)}.pf-c-table .pf-m-help{min-width:var(--pf-c-table--th--m-help--MinWidth)}.pf-c-table .pf-m-truncate,.pf-c-table thead{--pf-c-table--cell--MinWidth:var(--pf-c-table--m-truncate--cell--MinWidth);--pf-c-table--cell--MaxWidth:var(--pf-c-table--m-truncate--cell--MaxWidth);--pf-c-table--cell--Overflow:hidden;--pf-c-table--cell--TextOverflow:ellipsis;--pf-c-table--cell--WhiteSpace:nowrap}.pf-c-table .pf-m-wrap{--pf-c-table--cell--MinWidth:0;--pf-c-table--cell--MaxWidth:none;--pf-c-table--cell--Overflow:visible;--pf-c-table--cell--TextOverflow:clip;--pf-c-table--cell--WhiteSpace:normal}.pf-c-table .pf-m-nowrap{--pf-c-table--cell--MinWidth:0;--pf-c-table--cell--MaxWidth:none;--pf-c-table--cell--Overflow:visible;--pf-c-table--cell--TextOverflow:clip;--pf-c-table--cell--WhiteSpace:nowrap}.pf-c-table .pf-c-table__icon,.pf-c-table .pf-m-fit-content{--pf-c-table--cell--MinWidth:fit-content;--pf-c-table--cell--MaxWidth:none;--pf-c-table--cell--Width:1%;--pf-c-table--cell--Overflow:visible;--pf-c-table--cell--TextOverflow:clip;--pf-c-table--cell--WhiteSpace:nowrap}.pf-c-table .pf-m-break-word{--pf-c-table--cell--WordBreak:break-word;--pf-c-table--cell--WhiteSpace:normal}.pf-c-table.pf-m-no-border-rows>tbody>tr{border-bottom:0}.pf-c-table.pf-m-no-border-rows>tbody>tr>:first-child:after{border-left:0}.pf-c-table.pf-m-no-border-rows>tbody:not(.pf-m-expanded) .pf-c-table__compound-expansion-toggle .pf-c-table__button:before{display:none}.pf-c-table.pf-m-no-border-rows>tbody.pf-m-expanded>.pf-c-table__control-row{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-c-table.pf-m-no-border-rows>tbody .pf-c-table__control-row>.pf-c-table__compound-expansion-toggle:first-child>:before{border-left-width:0}.pf-c-table tr.pf-m-hoverable{background-color:var(--pf-c-table--tr--m-hoverable--BackgroundColor);box-shadow:var(--pf-c-table--tr--m-hoverable--BoxShadow);cursor:pointer;outline-offset:var(--pf-c-table--tr--m-hoverable--OutlineOffset)}.pf-c-table tr.pf-m-hoverable:active:not(.pf-m-selected)+tr.pf-m-selected,.pf-c-table tr.pf-m-hoverable:focus:not(.pf-m-selected)+tr.pf-m-selected,.pf-c-table tr.pf-m-hoverable:hover:not(.pf-m-selected)+tr.pf-m-selected{box-shadow:var(--pf-c-table--tr--m-hoverable--m-selected--BoxShadow)}.pf-c-table tr.pf-m-hoverable:hover{--pf-c-table--tr--m-hoverable--BoxShadow:var(--pf-c-table--tr--m-hoverable--hover--BoxShadow);--pf-c-table--tr--m-hoverable--BackgroundColor:var(--pf-c-table--tr--m-hoverable--hover--BackgroundColor)}.pf-c-table tr.pf-m-hoverable:focus{--pf-c-table--tr--m-hoverable--BoxShadow:var(--pf-c-table--tr--m-hoverable--focus--BoxShadow);--pf-c-table--tr--m-hoverable--BackgroundColor:var(--pf-c-table--tr--m-hoverable--focus--BackgroundColor)}.pf-c-table tr.pf-m-hoverable:active{--pf-c-table--tr--m-hoverable--BoxShadow:var(--pf-c-table--tr--m-hoverable--active--BoxShadow);--pf-c-table--tr--m-hoverable--BackgroundColor:var(--pf-c-table--tr--m-hoverable--active--BackgroundColor)}.pf-c-table tr.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:var(--pf-c-table--tr--m-selected--after--BorderLeftWidth);--pf-c-table__expandable-row--after--BorderColor:var(--pf-c-table--tr--m-selected--after--BorderLeftColor);background-color:var(--pf-c-table--tr--m-selected--BackgroundColor);box-shadow:var(--pf-c-table--tr--m-selected--BoxShadow);outline-offset:var(--pf-c-table--tr--m-selected--OutlineOffset);position:relative}.pf-c-table tr.pf-m-selected+tr.pf-m-selected{box-shadow:var(--pf-c-table--tr--m-selected--m-selected--BoxShadow)}.pf-c-table tr.pf-m-selected+tr.pf-m-selected:hover{box-shadow:var(--pf-c-table--tr--m-selected--tr--m-selected--hover--BoxShadow)}.pf-c-table tr.pf-m-selected:hover+tr.pf-m-selected{box-shadow:var(--pf-c-table--tr--m-selected--hover--m-selected--BoxShadow)}.pf-c-table tr.pf-m-first-cell-offset-reset{--pf-c-table--cell--first-last-child--PaddingLeft:var(--pf-c-table--tr--m-first-cell-offset-reset--cell--PaddingLeft)}.pf-c-table tbody.pf-m-hoverable{background-color:var(--pf-c-table--tbody--m-hoverable--BackgroundColor);box-shadow:var(--pf-c-table--tbody--m-hoverable--BoxShadow);cursor:pointer;outline-offset:var(--pf-c-table--tbody--m-hoverable--OutlineOffset)}.pf-c-table tbody.pf-m-hoverable.pf-m-expanded:not(.pf-m-selected){--pf-c-table__expandable-row--after--BorderColor:var(--pf-c-table--tbody--m-hoverable--m-expanded--BorderColor)}.pf-c-table tbody.pf-m-hoverable:active:not(.pf-m-selected)+tbody.pf-m-selected,.pf-c-table tbody.pf-m-hoverable:focus:not(.pf-m-selected)+tbody.pf-m-selected,.pf-c-table tbody.pf-m-hoverable:hover:not(.pf-m-selected)+tbody.pf-m-selected{box-shadow:var(--pf-c-table--tbody--m-hoverable--m-selected--hover--tr--BoxShadow)}.pf-c-table tbody.pf-m-hoverable:hover{--pf-c-table--tbody--m-hoverable--BoxShadow:var(--pf-c-table--tbody--m-hoverable--hover--BoxShadow);--pf-c-table--tbody--m-hoverable--BackgroundColor:var(--pf-c-table--tbody--m-hoverable--hover--BackgroundColor)}.pf-c-table tbody.pf-m-hoverable:focus{--pf-c-table--tbody--m-hoverable--BoxShadow:var(--pf-c-table--tbody--m-hoverable--focus--BoxShadow);--pf-c-table--tbody--m-hoverable--BackgroundColor:var(--pf-c-table--tbody--m-hoverable--focus--BackgroundColor)}.pf-c-table tbody.pf-m-hoverable:active{--pf-c-table--tbody--m-hoverable--BoxShadow:var(--pf-c-table--tbody--m-hoverable--active--BoxShadow);--pf-c-table--tbody--m-hoverable--BackgroundColor:var(--pf-c-table--tbody--m-hoverable--active--BackgroundColor)}.pf-c-table tbody.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:var(--pf-c-table--tbody--m-selected--after--BorderLeftWidth);--pf-c-table__expandable-row--after--BorderColor:var(--pf-c-table--tbody--m-selected--after--BorderLeftColor);background-color:var(--pf-c-table--tbody--m-selected--BackgroundColor);box-shadow:var(--pf-c-table--tbody--m-selected--BoxShadow);outline-offset:var(--pf-c-table--tbody--m-selected--OutlineOffset)}.pf-c-table tbody.pf-m-selected+tbody.pf-m-selected{--pf-c-table--tbody--m-selected--BoxShadow:var(--pf-c-table--tbody--m-selected--m-selected--BoxShadow)}.pf-c-table tbody.pf-m-selected+tbody.pf-m-selected:hover{box-shadow:var(--pf-c-table--tbody--m-selected--tbody--m-selected--hover--BoxShadow)}.pf-c-table tbody.pf-m-selected:hover+tbody.pf-m-selected{box-shadow:var(--pf-c-table--tbody--m-selected--hover--tbody--m-selected--BoxShadow)}.pf-c-table.pf-m-drag-over{overflow-anchor:none}.pf-c-table__text{--pf-c-table--cell--MaxWidth:100%;display:block;max-width:var(--pf-c-table--cell--MaxWidth);min-width:var(--pf-c-table--cell--MinWidth);overflow:var(--pf-c-table--cell--Overflow);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:var(--pf-c-table--cell--Width);word-break:var(--pf-c-table--cell--WordBreak)}.pf-c-table__text.pf-m-truncate{--pf-c-table--cell--MinWidth:100%}.pf-c-table__text.pf-m-truncate>*{overflow:var(--pf-c-table--cell--Overflow);text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace)}.pf-c-table__button{background-color:var(--pf-c-table__button--BackgroundColor);border:0;color:var(--pf-c-table__button--Color);font-size:inherit;font-weight:inherit;padding:var(--pf-c-table--cell--PaddingTop) var(--pf-c-table--cell--PaddingRight) var(--pf-c-table--cell--PaddingBottom) var(--pf-c-table--cell--PaddingLeft);position:static;text-align:left;user-select:text;white-space:inherit;width:100%}.pf-c-table__button:before{bottom:0;content:"";cursor:pointer;left:0;position:absolute;right:0;top:0}.pf-c-table__button:hover{color:var(--pf-c-table__button--hover--Color)}.pf-c-table__button:focus{color:var(--pf-c-table__button--focus--Color)}.pf-c-table__button:active{color:var(--pf-c-table__button--active--Color)}.pf-c-table__compound-expansion-toggle .pf-c-table__text,.pf-c-table__sort .pf-c-table__text{display:block;overflow:var(--pf-c-table--cell--Overflow);text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:auto}.pf-c-table__sort .pf-c-table__text{--pf-c-table--cell--MinWidth:0}.pf-c-table__button-content,.pf-c-table__column-help{align-items:end;display:grid;grid-template-columns:auto max-content;justify-content:start}.pf-c-table__button-content .pf-c-table__text,.pf-c-table__column-help .pf-c-table__text{min-width:auto}.pf-c-table th.pf-m-nowrap .pf-c-table__button-content,.pf-c-table th.pf-m-nowrap .pf-c-table__column-help,.pf-c-table thead.pf-m-nowrap .pf-c-table__button-content,.pf-c-table thead.pf-m-nowrap .pf-c-table__column-help,.pf-c-table tr.pf-m-nowrap .pf-c-table__button-content,.pf-c-table tr.pf-m-nowrap .pf-c-table__column-help{grid-template-columns:min-content max-content}.pf-c-table th.pf-m-fit-content .pf-c-table__button-content,.pf-c-table th.pf-m-fit-content .pf-c-table__column-help,.pf-c-table thead.pf-m-fit-content .pf-c-table__button-content,.pf-c-table thead.pf-m-fit-content .pf-c-table__column-help,.pf-c-table tr.pf-m-fit-content .pf-c-table__button-content,.pf-c-table tr.pf-m-fit-content .pf-c-table__column-help{grid-template-columns:fit-content max-content}.pf-c-table th.pf-m-truncate .pf-c-table__button-content,.pf-c-table th.pf-m-truncate .pf-c-table__column-help,.pf-c-table th.pf-m-wrap .pf-c-table__button-content,.pf-c-table th.pf-m-wrap .pf-c-table__column-help,.pf-c-table thead.pf-m-truncate .pf-c-table__button-content,.pf-c-table thead.pf-m-truncate .pf-c-table__column-help,.pf-c-table thead.pf-m-wrap .pf-c-table__button-content,.pf-c-table thead.pf-m-wrap .pf-c-table__column-help,.pf-c-table tr.pf-m-truncate .pf-c-table__button-content,.pf-c-table tr.pf-m-truncate .pf-c-table__column-help,.pf-c-table tr.pf-m-wrap .pf-c-table__button-content,.pf-c-table tr.pf-m-wrap .pf-c-table__column-help{grid-template-columns:auto max-content}.pf-c-table .pf-c-table__action,.pf-c-table .pf-c-table__inline-edit-action,.pf-c-table .pf-c-table__toggle{--pf-c-table--cell--PaddingBottom:0}.pf-c-table .pf-c-table__action,.pf-c-table .pf-c-table__check,.pf-c-table .pf-c-table__draggable,.pf-c-table .pf-c-table__favorite,.pf-c-table .pf-c-table__inline-edit-action,.pf-c-table .pf-c-table__toggle,.pf-c-table th.pf-m-favorite{--pf-c-table--cell--MinWidth:0;--pf-c-table--cell--Width:1%}.pf-c-table__toggle{--pf-c-table--cell--PaddingRight:0;--pf-c-table--cell--PaddingLeft:0;vertical-align:top}.pf-c-table__toggle .pf-c-button{margin-bottom:var(--pf-c-table__toggle--c-button--MarginBottom);margin-top:var(--pf-c-table__toggle--c-button--MarginTop)}.pf-c-table__toggle .pf-c-button.pf-m-expanded .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--c-button--m-expanded__toggle-icon--Rotate))}.pf-c-table__toggle .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--c-button__toggle-icon--Rotate));transition:var(--pf-c-table__toggle--c-button__toggle-icon--Transition)}.pf-c-table__toggle svg{pointer-events:none}.pf-c-table__check{--pf-c-table--cell--FontSize:var(--pf-c-table__check--input--FontSize)}.pf-c-table__check input:not([disabled]),.pf-c-table__check label:not([disabled]){cursor:pointer}.pf-c-table__check label{display:block;margin:calc(var(--pf-c-table--cell--PaddingTop)*-1) calc(var(--pf-c-table--cell--PaddingRight)*-1) calc(var(--pf-c-table--cell--PaddingBottom)*-1) calc(var(--pf-c-table--cell--PaddingLeft)*-1);padding:inherit}.pf-c-table__favorite .pf-c-button{--pf-c-button--m-plain--Color:var(--pf-c-table__favorite--c-button--Color);--pf-c-button--FontSize:var(--pf-c-table__favorite--c-button--FontSize);margin:var(--pf-c-table__favorite--c-button--MarginTop) var(--pf-c-table__favorite--c-button--MarginRight) var(--pf-c-table__favorite--c-button--MarginBottom) var(--pf-c-table__favorite--c-button--MarginLeft)}.pf-m-favorited.pf-c-table__favorite .pf-c-button{--pf-c-button--m-plain--Color:var(--pf-c-table__favorite--m-favorited--c-button--Color)}.pf-c-table__draggable .pf-c-button{cursor:grab;margin:var(--pf-c-table__draggable--c-button--MarginTop) var(--pf-c-table__draggable--c-button--MarginRight) var(--pf-c-table__draggable--c-button--MarginBottom) var(--pf-c-table__draggable--c-button--MarginLeft)}.pf-c-table__draggable .pf-c-button:active{cursor:grabbing}.pf-c-table__action,.pf-c-table__inline-edit-action{--pf-c-table--cell--PaddingTop:0;--pf-c-table--cell--PaddingRight:var(--pf-c-table__action--PaddingRight);--pf-c-table--cell--PaddingBottom:0;--pf-c-table--cell--PaddingLeft:var(--pf-c-table__action--PaddingLeft);padding-bottom:0;padding-top:0;vertical-align:middle}.pf-c-table__inline-edit-action{--pf-c-table--cell--PaddingLeft:0;--pf-c-table--cell--PaddingRight:0;text-align:right}.pf-c-table__compound-expansion-toggle{--pf-c-table__button--Color:var(--pf-c-table__compound-expansion-toggle__button--Color);--pf-c-table__button--hover--Color:var(--pf-c-table__compound-expansion-toggle__button--hover--Color);--pf-c-table__button--focus--Color:var(--pf-c-table__compound-expansion-toggle__button--focus--Color);--pf-c-table__button--active--Color:var(--pf-c-table__compound-expansion-toggle__button--active--Color);position:relative}.pf-c-table__compound-expansion-toggle.pf-m-truncate{overflow:visible}.pf-c-table__compound-expansion-toggle .pf-c-table__button{min-width:100%;overflow:hidden}.pf-c-table__compound-expansion-toggle .pf-c-table__button:active,.pf-c-table__compound-expansion-toggle .pf-c-table__button:focus,.pf-c-table__compound-expansion-toggle .pf-c-table__button:hover{outline:0}.pf-c-table__compound-expansion-toggle .pf-c-table__button:after,.pf-c-table__compound-expansion-toggle .pf-c-table__button:before{border-style:solid;border-width:0;content:"";position:absolute;right:0}.pf-c-table__compound-expansion-toggle .pf-c-table__button:before{border-color:var(--pf-c-table__compound-expansion-toggle__button--before--BorderColor);border-left-width:var(--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth);border-right-width:var(--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth);bottom:var(--pf-c-table__compound-expansion-toggle__button--before--Bottom);left:var(--pf-c-table__compound-expansion-toggle__button--before--Left);top:0}.pf-c-table__compound-expansion-toggle .pf-c-table__button:after{border-color:var(--pf-c-table__compound-expansion-toggle__button--after--BorderColor);border-top-width:var(--pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth);left:var(--pf-c-table__compound-expansion-toggle__button--after--Left);pointer-events:none;top:var(--pf-c-table__compound-expansion-toggle__button--after--Top)}.pf-c-table__compound-expansion-toggle.pf-m-expanded,.pf-c-table__compound-expansion-toggle:focus-within,.pf-c-table__compound-expansion-toggle:hover{--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base);--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base);--pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth:var(--pf-c-table__compound-expansion-toggle__button--after--border-width--base)}.pf-c-table__compound-expansion-toggle:first-child{--pf-c-table__compound-expansion-toggle__button--before--Left:0;--pf-c-table__compound-expansion-toggle__button--after--Left:0}.pf-c-table__compound-expansion-toggle.pf-m-expanded .pf-c-table__button:before{border-bottom:var(--pf-c-table--BackgroundColor) solid var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base)}.pf-c-table__compound-expansion-toggle.pf-m-expanded:first-child{--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0}.pf-c-table__compound-expansion-toggle:focus-within{outline-offset:var(--pf-c-table__button--OutlineOffset)}@media (-webkit-min-device-pixel-ratio:0){.pf-c-table__compound-expansion-toggle:focus-within{outline-color:-webkit-focus-ring-color;outline-style:auto}}.pf-c-table__column-help-action{margin-left:var(--pf-c-table__column-help--MarginLeft);transform:translateY(var(--pf-c-table__column-help--TranslateY))}.pf-c-table__column-help-action .pf-c-button{--pf-c-button--PaddingRight:var(--pf-c-table__column-help--c-button--PaddingRight);--pf-c-button--PaddingLeft:var(--pf-c-table__column-help--c-button--PaddingLeft);font-size:inherit;line-height:1;margin-bottom:var(--pf-c-table__column-help--c-button--MarginBottom);margin-top:var(--pf-c-table__column-help--c-button--MarginTop)}.pf-c-table__sort .pf-c-table__button{--pf-c-table--cell--PaddingTop:var(--pf-c-table__sort__button--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table__sort__button--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table__sort__button--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table__sort__button--PaddingLeft);display:flex;margin-bottom:var(--pf-c-table__sort__button--MarginBottom);margin-left:var(--pf-c-table__sort__button--MarginLeft);margin-top:var(--pf-c-table__sort__button--MarginTop);width:auto}.pf-c-table__sort .pf-c-table__button:hover{--pf-c-table__sort-indicator--Color:var(--pf-c-table__sort__button--hover__sort-indicator--Color);--pf-c-table__sort__button__text--Color:var(--pf-c-table__sort__button--hover__text--Color)}.pf-c-table__sort .pf-c-table__button:focus{--pf-c-table__sort-indicator--Color:var(--pf-c-table__sort__button--focus__sort-indicator--Color);--pf-c-table__sort__button__text--Color:var(--pf-c-table__sort__button--focus__text--Color)}.pf-c-table__sort .pf-c-table__button:active{--pf-c-table__sort-indicator--Color:var(--pf-c-table__sort__button--active__sort-indicator--Color);--pf-c-table__sort__button__text--Color:var(--pf-c-table__sort__button--active__text--Color)}.pf-c-table__sort .pf-c-table__button .pf-c-table__text{color:var(--pf-c-table__sort__button__text--Color)}.pf-c-table__sort.pf-m-selected .pf-c-table__button{--pf-c-table__sort-indicator--Color:var(--pf-c-table__sort--m-selected__sort-indicator--Color);--pf-c-table__sort__button__text--Color:var(--pf-c-table__sort--m-selected__button__text--Color);color:var(--pf-c-table__sort--m-selected__button--Color)}.pf-c-table__sort.pf-m-help{--pf-c-table--th--m-help--MinWidth:var(--pf-c-table__sort--m-help--MinWidth)}.pf-c-table__sort.pf-m-favorite{--pf-c-table__sort__button__text--Color:var(--pf-c-table__sort--m-favorite__button__text--Color);--pf-c-table__sort__button--hover__text--Color:var(--pf-c-table__sort--m-favorite__button--hover__text--Color);--pf-c-table__sort__button--focus__text--Color:var(--pf-c-table__sort--m-favorite__button--focus__text--Color);--pf-c-table__sort__button--active__text--Color:var(--pf-c-table__sort--m-favorite__button--active__text--Color);--pf-c-table__sort--m-selected__button__text--Color:currentcolor}.pf-c-table__sort-indicator{color:var(--pf-c-table__sort-indicator--Color);grid-column:2;margin-left:var(--pf-c-table__sort-indicator--MarginLeft);pointer-events:none}.pf-c-table__expandable-row{--pf-c-table--cell--PaddingTop:0;--pf-c-table--cell--PaddingBottom:0;border-bottom:0 solid transparent;box-shadow:0 0 0 0 transparent;position:relative}.pf-c-table__expandable-row,.pf-c-table__expandable-row td:first-child:after{transition:var(--pf-c-table__expandable-row--Transition)}.pf-c-table__expandable-row td.pf-m-no-padding,.pf-c-table__expandable-row th.pf-m-no-padding{padding:0 0 0 var(--pf-c-table__expandable-row--after--border-width--base)}.pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,.pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content{padding:0}.pf-c-table__expandable-row .pf-c-table__expandable-row-content{padding-bottom:var(--pf-c-table__expandable-row-content--PaddingBottom);padding-top:var(--pf-c-table__expandable-row-content--PaddingTop)}.pf-c-table__expandable-row.pf-m-expanded{border-bottom-color:var(--pf-c-table__expandable-row--m-expanded--BorderBottomColor);border-bottom-width:var(--pf-c-table--border-width--base);box-shadow:var(--pf-c-table__expandable-row--m-expanded--BoxShadow)}.pf-c-table__expandable-row:not(.pf-m-expanded){display:none;visibility:hidden}.pf-c-table tbody.pf-m-expanded>tr>:not(.pf-c-table__compound-expansion-toggle),.pf-c-table__compound-expansion-toggle.pf-m-expanded:first-child,.pf-c-table__expandable-row.pf-m-expanded>:first-child{--pf-c-table__expandable-row--after--BorderLeftWidth:var(--pf-c-table__expandable-row--after--border-width--base)}.pf-c-table .pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:var(--pf-c-table--nested--first-last-child--PaddingLeft)}.pf-c-table .pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:var(--pf-c-table--nested--first-last-child--PaddingRight)}.pf-c-table.pf-m-compact{--pf-c-table--cell--FontSize:var(--pf-c-table--m-compact--FontSize);--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-compact--cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-compact--cell--PaddingBottom);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-compact--cell--PaddingLeft)}.pf-c-table.pf-m-compact tr{--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-compact--cell--PaddingLeft);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-compact--cell--PaddingRight)}.pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row){--pf-c-table--cell--FontSize:var(--pf-c-table--m-compact--FontSize);--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-compact--cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-compact--cell--PaddingBottom)}.pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row)>:first-child{--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-compact--cell--first-last-child--PaddingLeft)}.pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row)>:last-child{--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-compact--cell--first-last-child--PaddingRight)}.pf-c-table.pf-m-compact thead .pf-c-table__toggle,.pf-c-table.pf-m-compact thead th{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-compact-th--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-compact-th--PaddingBottom)}.pf-c-table.pf-m-compact .pf-c-table__action{--pf-c-table--cell--PaddingTop:var(--pf-c-table__action--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table__action--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table__action--PaddingLeft)}.pf-c-table.pf-m-compact .pf-c-table__toggle{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-compact__toggle--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-compact__toggle--PaddingBottom)}.pf-c-table.pf-m-compact .pf-c-table__icon{min-width:0;text-align:center;width:auto}.pf-c-table .pf-c-table.pf-m-compact tr>:first-child{--pf-c-table--cell--PaddingLeft:var(--pf-c-table--nested--first-last-child--PaddingLeft)}.pf-c-table .pf-c-table.pf-m-compact tr>:last-child{--pf-c-table--cell--PaddingRight:var(--pf-c-table--nested--first-last-child--PaddingRight)}.pf-c-table.pf-m-compact .pf-c-table__expandable-row-content{--pf-c-table__expandable-row-content--PaddingTop:var(--pf-c-table--m-compact__expandable-row-content--PaddingTop);--pf-c-table__expandable-row-content--PaddingBottom:var(--pf-c-table--m-compact__expandable-row-content--PaddingBottom)}.pf-c-table__icon-inline{align-items:center;display:flex}.pf-c-table__icon-inline>:not(:last-child){margin-right:var(--pf-c-table__icon-inline--MarginRight)}.pf-c-table .pf-m-width-10{--pf-c-table--cell--Width:10%}.pf-c-table .pf-m-width-15{--pf-c-table--cell--Width:15%}.pf-c-table .pf-m-width-20{--pf-c-table--cell--Width:20%}.pf-c-table .pf-m-width-25{--pf-c-table--cell--Width:25%}.pf-c-table .pf-m-width-30{--pf-c-table--cell--Width:30%}.pf-c-table .pf-m-width-35{--pf-c-table--cell--Width:35%}.pf-c-table .pf-m-width-40{--pf-c-table--cell--Width:40%}.pf-c-table .pf-m-width-45{--pf-c-table--cell--Width:45%}.pf-c-table .pf-m-width-50{--pf-c-table--cell--Width:50%}.pf-c-table .pf-m-width-60{--pf-c-table--cell--Width:60%}.pf-c-table .pf-m-width-70{--pf-c-table--cell--Width:70%}.pf-c-table .pf-m-width-80{--pf-c-table--cell--Width:80%}.pf-c-table .pf-m-width-90{--pf-c-table--cell--Width:90%}.pf-c-table .pf-m-width-100{--pf-c-table--cell--Width:100%}:where(.pf-theme-dark) .pf-c-table{--pf-c-table--m-striped__tr--BackgroundColor:var(--pf-global--BackgroundColor--150)}:where(.pf-theme-dark) .pf-c-table__favorite .pf-c-button:focus,:where(.pf-theme-dark) .pf-c-table__favorite .pf-c-button:hover{--pf-c-button--m-plain--Color:var(--pf-global--palette--gold-100)}.pf-c-select{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-select__toggle--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-select__toggle--PaddingRight:var(--pf-global--spacer--sm);--pf-c-select__toggle--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-select__toggle--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-select__toggle--MinWidth:var(--pf-global--target-size--MinWidth);--pf-c-select__toggle--FontSize:var(--pf-global--FontSize--md);--pf-c-select__toggle--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-select__toggle--LineHeight:var(--pf-global--LineHeight--md);--pf-c-select__toggle--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-select__toggle--before--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-select__toggle--before--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-select__toggle--before--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-select__toggle--before--BorderWidth:initial;--pf-c-select__toggle--before--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-select__toggle--before--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-select__toggle--before--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-select__toggle--before--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-select__toggle--Color:var(--pf-global--Color--100);--pf-c-select__toggle--hover--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-select__toggle--focus--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-select__toggle--focus--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-select__toggle--active--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-select__toggle--active--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-select__toggle--m-expanded--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-select__toggle--m-expanded--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-select__toggle--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-select__toggle--m-plain--before--BorderColor:transparent;--pf-c-select__toggle--m-placeholder--Color:transparent;--pf-c-select--m-invalid__toggle--before--BorderBottomColor:var(--pf-global--danger-color--100);--pf-c-select--m-invalid__toggle--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-select--m-invalid__toggle--hover--before--BorderBottomColor:var(--pf-global--danger-color--100);--pf-c-select--m-invalid__toggle--focus--before--BorderBottomColor:var(--pf-global--danger-color--100);--pf-c-select--m-invalid__toggle--active--before--BorderBottomColor:var(--pf-global--danger-color--100);--pf-c-select--m-invalid__toggle--m-expanded--before--BorderBottomColor:var(--pf-global--danger-color--100);--pf-c-select--m-invalid__toggle-status-icon--Color:var(--pf-global--danger-color--100);--pf-c-select--m-success__toggle--before--BorderBottomColor:var(--pf-global--success-color--100);--pf-c-select--m-success__toggle--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-select--m-success__toggle--hover--before--BorderBottomColor:var(--pf-global--success-color--100);--pf-c-select--m-success__toggle--focus--before--BorderBottomColor:var(--pf-global--success-color--100);--pf-c-select--m-success__toggle--active--before--BorderBottomColor:var(--pf-global--success-color--100);--pf-c-select--m-success__toggle--m-expanded--before--BorderBottomColor:var(--pf-global--success-color--100);--pf-c-select--m-success__toggle-status-icon--Color:var(--pf-global--success-color--100);--pf-c-select--m-warning__toggle--before--BorderBottomColor:var(--pf-global--warning-color--100);--pf-c-select--m-warning__toggle--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-select--m-warning__toggle--hover--before--BorderBottomColor:var(--pf-global--warning-color--100);--pf-c-select--m-warning__toggle--focus--before--BorderBottomColor:var(--pf-global--warning-color--100);--pf-c-select--m-warning__toggle--active--before--BorderBottomColor:var(--pf-global--warning-color--100);--pf-c-select--m-warning__toggle--m-expanded--before--BorderBottomColor:var(--pf-global--warning-color--100);--pf-c-select--m-warning__toggle-status-icon--Color:var(--pf-global--warning-color--100);--pf-c-select__toggle-wrapper--not-last-child--MarginRight:var(--pf-global--spacer--xs);--pf-c-select__toggle-wrapper--MaxWidth:calc(100% - var(--pf-global--spacer--lg));--pf-c-select__toggle-wrapper--c-chip-group--MarginTop:0.3125rem;--pf-c-select__toggle-wrapper--c-chip-group--MarginBottom:0.3125rem;--pf-c-select__toggle-typeahead--FlexBasis:10em;--pf-c-select__toggle-typeahead--BackgroundColor:transparent;--pf-c-select__toggle-typeahead--BorderTop:var(--pf-global--BorderWidth--sm) solid transparent;--pf-c-select__toggle-typeahead--BorderRight:none;--pf-c-select__toggle-typeahead--BorderLeft:none;--pf-c-select__toggle-typeahead--MinWidth:7.5rem;--pf-c-select__toggle-typeahead--focus--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--md));--pf-c-select__toggle--m-placeholder__toggle-text--Color:var(--pf-global--Color--dark-200);--pf-c-select__toggle-icon--toggle-text--MarginLeft:var(--pf-global--spacer--xs);--pf-c-select__toggle-badge--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-select__toggle-status-icon--MarginLeft:var(--pf-global--spacer--xs);--pf-c-select__toggle-status-icon--Color:var(--pf-global--Color--100);--pf-c-select__toggle-arrow--MarginLeft:var(--pf-global--spacer--md);--pf-c-select__toggle-arrow--MarginRight:var(--pf-global--spacer--sm);--pf-c-select__toggle-arrow--with-clear--MarginLeft:var(--pf-global--spacer--sm);--pf-c-select__toggle-arrow--m-top--m-expanded__toggle-arrow--Rotate:180deg;--pf-c-select--m-plain__toggle-arrow--Color:var(--pf-global--Color--200);--pf-c-select--m-plain--hover__toggle-arrow--Color:var(--pf-global--Color--100);--pf-c-select__toggle-clear--PaddingRight:var(--pf-global--spacer--sm);--pf-c-select__toggle-clear--PaddingLeft:var(--pf-global--spacer--md);--pf-c-select__toggle-clear--toggle-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-select__toggle-button--Color:var(--pf-global--Color--100);--pf-c-select__menu--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-select__menu--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-select__menu--PaddingTop:var(--pf-global--spacer--sm);--pf-c-select__menu--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-select__menu--Top:calc(100% + var(--pf-global--spacer--xs));--pf-c-select__menu--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-select__menu--Width:auto;--pf-c-select__menu--MinWidth:100%;--pf-c-select__menu--m-top--TranslateY:calc(-100% - var(--pf-global--spacer--xs));--pf-c-select__list-item--m-loading--PaddingTop:var(--pf-global--spacer--sm);--pf-c-select__menu-item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-select__menu-item--PaddingRight:var(--pf-global--spacer--md);--pf-c-select__menu-item--m-selected--PaddingRight:var(--pf-global--spacer--2xl);--pf-c-select__menu-item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-select__menu-item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-select__menu-item--FontSize:var(--pf-global--FontSize--md);--pf-c-select__menu-item--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-select__menu-item--LineHeight:var(--pf-global--LineHeight--md);--pf-c-select__menu-item--Color:var(--pf-global--Color--dark-100);--pf-c-select__menu-item--disabled--Color:var(--pf-global--Color--dark-200);--pf-c-select__menu-item--Width:100%;--pf-c-select__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-select__menu-item--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-select__menu-item--disabled--BackgroundColor:transparent;--pf-c-select__menu-item--m-link--Width:auto;--pf-c-select__menu-item--m-link--hover--BackgroundColor:transparent;--pf-c-select__menu-item--m-link--focus--BackgroundColor:transparent;--pf-c-select__menu-item--m-action--Color:var(--pf-global--Color--200);--pf-c-select__menu-item--m-action--hover--Color:var(--pf-global--Color--100);--pf-c-select__menu-item--m-action--focus--Color:var(--pf-global--Color--100);--pf-c-select__menu-item--m-action--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-select__menu-item--m-action--Width:auto;--pf-c-select__menu-item--m-action--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-select__menu-item--m-action--hover--BackgroundColor:transparent;--pf-c-select__menu-item--m-action--focus--BackgroundColor:transparent;--pf-c-select__menu-item--hover__menu-item--m-action--Color:var(--pf-global--Color--200);--pf-c-select__menu-item--m-favorite-action--Color:var(--pf-global--Color--200);--pf-c-select__menu-item--m-favorite-action--hover--Color:var(--pf-global--Color--100);--pf-c-select__menu-item--m-favorite-action--focus--Color:var(--pf-global--Color--100);--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--Color:var(--pf-global--palette--gold-400);--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--hover--Color:var(--pf-global--palette--gold-500);--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--focus--Color:var(--pf-global--palette--gold-500);--pf-c-select__menu-item--m-load--Color:var(--pf-global--link--Color);--pf-c-select__menu-item-icon--Color:var(--pf-global--active-color--100);--pf-c-select__menu-item-icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-select__menu-item-icon--Right:var(--pf-global--spacer--md);--pf-c-select__menu-item-icon--Top:50%;--pf-c-select__menu-item-icon--TranslateY:-50%;--pf-c-select__menu-item-action-icon--MinHeight:calc(var(--pf-c-select__menu-item--FontSize)*var(--pf-c-select__menu-item--LineHeight));--pf-c-select__menu-item--match--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-select__menu-search--PaddingTop:var(--pf-global--spacer--sm);--pf-c-select__menu-search--PaddingRight:var(--pf-c-select__menu-item--PaddingRight);--pf-c-select__menu-search--PaddingBottom:var(--pf-global--spacer--md);--pf-c-select__menu-search--PaddingLeft:var(--pf-c-select__menu-item--PaddingLeft);--pf-c-select__menu-group--menu-group--PaddingTop:var(--pf-global--spacer--sm);--pf-c-select__menu-group-title--PaddingTop:var(--pf-c-select__menu-item--PaddingTop);--pf-c-select__menu-group-title--PaddingRight:var(--pf-c-select__menu-item--PaddingRight);--pf-c-select__menu-group-title--PaddingBottom:var(--pf-c-select__menu-item--PaddingBottom);--pf-c-select__menu-group-title--PaddingLeft:var(--pf-c-select__menu-item--PaddingLeft);--pf-c-select__menu-group-title--FontSize:var(--pf-global--FontSize--xs);--pf-c-select__menu-group-title--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-select__menu-group-title--Color:var(--pf-global--Color--dark-200);--pf-c-select__menu-item-count--MarginLeft:var(--pf-global--spacer--md);--pf-c-select__menu-item-count--FontSize:var(--pf-global--FontSize--sm);--pf-c-select__menu-item-count--Color:var(--pf-global--Color--200);--pf-c-select__menu-item--disabled__menu-item-count--Color:var(--pf-global--Color--dark-200);--pf-c-select__menu-item-description--FontSize:var(--pf-global--FontSize--xs);--pf-c-select__menu-item-description--Color:var(--pf-global--Color--200);--pf-c-select__menu-item-description--PaddingRight:var(--pf-c-select__menu-item--PaddingRight);--pf-c-select__menu-item-main--PaddingRight:var(--pf-c-select__menu-item--PaddingRight);--pf-c-select__menu-item--m-selected__menu-item-main--PaddingRight:var(--pf-c-select__menu-item--m-selected--PaddingRight);--pf-c-select__menu-footer--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-select__menu-footer--PaddingTop:var(--pf-global--spacer--md);--pf-c-select__menu-footer--PaddingRight:var(--pf-global--spacer--md);--pf-c-select__menu-footer--PaddingBottom:var(--pf-global--spacer--md);--pf-c-select__menu-footer--PaddingLeft:var(--pf-global--spacer--md);--pf-c-select__menu-footer--MarginTop:var(--pf-global--spacer--sm);--pf-c-select__menu-footer--MarginBottom:calc(var(--pf-global--spacer--sm)*-1);--pf-c-select-menu--c-divider--MarginTop:var(--pf-global--spacer--sm);--pf-c-select-menu--c-divider--MarginBottom:var(--pf-global--spacer--sm);color:var(--pf-global--Color--100);display:inline-block;position:relative;width:100%}.pf-c-select .pf-c-divider{margin-bottom:var(--pf-c-select-menu--c-divider--MarginBottom);margin-top:var(--pf-c-select-menu--c-divider--MarginTop)}.pf-c-select .pf-c-divider:last-child{--pf-c-select-menu--c-divider--MarginBottom:0}.pf-c-select.pf-m-invalid{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select--m-invalid__toggle--before--BorderBottomColor);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-c-select--m-invalid__toggle--before--BorderBottomWidth);--pf-c-select__toggle--hover--before--BorderBottomColor:var(--pf-c-select--m-invalid__toggle--hover--before--BorderBottomColor);--pf-c-select__toggle--focus--before--BorderBottomColor:var(--pf-c-select--m-invalid__toggle--focus--before--BorderBottomColor);--pf-c-select__toggle--active--before--BorderBottomColor:var(--pf-c-select--m-invalid__toggle--active--before--BorderBottomColor);--pf-c-select__toggle--m-expanded--before--BorderBottomColor:var(--pf-c-select--m-invalid__toggle--m-expanded--before--BorderBottomColor);--pf-c-select__toggle-status-icon--Color:var(--pf-c-select--m-invalid__toggle-status-icon--Color)}.pf-c-select.pf-m-success{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select--m-success__toggle--before--BorderBottomColor);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-c-select--m-success__toggle--before--BorderBottomWidth);--pf-c-select__toggle--hover--before--BorderBottomColor:var(--pf-c-select--m-success__toggle--hover--before--BorderBottomColor);--pf-c-select__toggle--focus--before--BorderBottomColor:var(--pf-c-select--m-success__toggle--focus--before--BorderBottomColor);--pf-c-select__toggle--active--before--BorderBottomColor:var(--pf-c-select--m-success__toggle--active--before--BorderBottomColor);--pf-c-select__toggle--m-expanded--before--BorderBottomColor:var(--pf-c-select--m-success__toggle--m-expanded--before--BorderBottomColor);--pf-c-select__toggle-status-icon--Color:var(--pf-c-select--m-success__toggle-status-icon--Color)}.pf-c-select.pf-m-warning{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select--m-warning__toggle--before--BorderBottomColor);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-c-select--m-warning__toggle--before--BorderBottomWidth);--pf-c-select__toggle--hover--before--BorderBottomColor:var(--pf-c-select--m-warning__toggle--hover--before--BorderBottomColor);--pf-c-select__toggle--focus--before--BorderBottomColor:var(--pf-c-select--m-warning__toggle--focus--before--BorderBottomColor);--pf-c-select__toggle--active--before--BorderBottomColor:var(--pf-c-select--m-warning__toggle--active--before--BorderBottomColor);--pf-c-select__toggle--m-expanded--before--BorderBottomColor:var(--pf-c-select--m-warning__toggle--m-expanded--before--BorderBottomColor);--pf-c-select__toggle-status-icon--Color:var(--pf-c-select--m-warning__toggle-status-icon--Color)}.pf-c-select__menu-search+.pf-c-divider{--pf-c-select-menu--c-divider--MarginTop:0}.pf-c-select__toggle{align-items:center;background-color:var(--pf-c-select__toggle--BackgroundColor);border:none;color:var(--pf-c-select__toggle--Color);cursor:pointer;display:flex;font-size:var(--pf-c-select__toggle--FontSize);font-weight:var(--pf-c-select__toggle--FontWeight);justify-content:space-between;line-height:var(--pf-c-select__toggle--LineHeight);min-width:var(--pf-c-select__toggle--MinWidth);padding:var(--pf-c-select__toggle--PaddingTop) var(--pf-c-select__toggle--PaddingRight) var(--pf-c-select__toggle--PaddingBottom) var(--pf-c-select__toggle--PaddingLeft);position:relative;white-space:nowrap;width:100%}.pf-c-select__toggle.pf-m-disabled,.pf-c-select__toggle:disabled{--pf-c-select__toggle--BackgroundColor:var(--pf-c-select__toggle--disabled--BackgroundColor);pointer-events:none}.pf-c-select__toggle.pf-m-disabled:before,.pf-c-select__toggle:disabled:before{border:0}.pf-c-select__toggle:before{--pf-c-select__toggle--before--BorderWidth-base:var(--pf-c-select__toggle--before--BorderTopWidth) var(--pf-c-select__toggle--before--BorderRightWidth) var(--pf-c-select__toggle--before--BorderBottomWidth) var(--pf-c-select__toggle--before--BorderLeftWidth);border-color:var(--pf-c-select__toggle--before--BorderTopColor) var(--pf-c-select__toggle--before--BorderRightColor) var(--pf-c-select__toggle--before--BorderBottomColor) var(--pf-c-select__toggle--before--BorderLeftColor);border-style:solid;border-width:var(--pf-c-select__toggle--before--BorderWidth,var(--pf-c-select__toggle--before--BorderWidth-base));bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-select__toggle:hover{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select__toggle--hover--before--BorderBottomColor)}.pf-c-select__toggle:focus,.pf-c-select__toggle:focus-within{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select__toggle--focus--before--BorderBottomColor);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-c-select__toggle--focus--before--BorderBottomWidth)}.pf-c-select__toggle.pf-m-active,.pf-c-select__toggle:active{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select__toggle--active--before--BorderBottomColor);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-c-select__toggle--active--before--BorderBottomWidth)}.pf-m-expanded>.pf-c-select__toggle{--pf-c-select__toggle--before--BorderBottomColor:var(--pf-c-select__toggle--m-expanded--before--BorderBottomColor);--pf-c-select__toggle--before--BorderBottomWidth:var(--pf-c-select__toggle--m-expanded--before--BorderBottomWidth)}.pf-c-select__toggle.pf-m-plain{--pf-c-select__toggle-arrow--Color:var(--pf-c-select--m-plain__toggle-arrow--Color)}.pf-c-select__toggle.pf-m-plain:before{border-color:var(--pf-c-select__toggle--m-plain--before--BorderColor)}.pf-c-select.pf-m-expanded>.pf-c-select__toggle.pf-m-plain,.pf-c-select__toggle.pf-m-plain.pf-m-active,.pf-c-select__toggle.pf-m-plain:active,.pf-c-select__toggle.pf-m-plain:focus,.pf-c-select__toggle.pf-m-plain:hover{--pf-c-select--m-plain__toggle-arrow--Color:var(--pf-c-select--m-plain--hover__toggle-arrow--Color)}.pf-c-select__toggle.pf-m-typeahead{--pf-c-select__toggle--PaddingTop:0;--pf-c-select__toggle--PaddingRight:0;--pf-c-select__toggle--PaddingBottom:0}.pf-c-select__toggle.pf-m-typeahead .pf-c-form-control{--pf-c-form-control--invalid--BackgroundUrl:none;height:auto;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.pf-c-select__toggle .pf-c-select__toggle-clear{margin-left:auto;padding-left:var(--pf-c-select__toggle-clear--PaddingLeft);padding-right:var(--pf-c-select__toggle-clear--PaddingRight)}.pf-c-select__toggle .pf-c-select__toggle-button{color:var(--pf-c-select__toggle-button--Color)}.pf-c-select__toggle .pf-c-select__toggle-clear+.pf-c-select__toggle-button{padding-left:var(--pf-c-select__toggle-clear--toggle-button--PaddingLeft)}.pf-c-select__toggle.pf-m-placeholder{--pf-c-select__toggle-text--Color:var(--pf-c-select__toggle--m-placeholder__toggle-text--Color)}.pf-c-select__toggle-arrow{color:var(--pf-c-select__toggle-arrow--Color,inherit)}*+.pf-c-select__toggle-arrow{margin-left:var(--pf-c-select__toggle-arrow--MarginLeft);margin-right:var(--pf-c-select__toggle-arrow--MarginRight)}.pf-c-select.pf-m-top.pf-m-expanded .pf-c-select__toggle-arrow{transform:rotate(var(--pf-c-select__toggle-arrow--m-top--m-expanded__toggle-arrow--Rotate))}.pf-c-select__toggle-text{color:var(--pf-c-select__toggle-text--Color,inherit);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-select__toggle-wrapper{align-items:center;display:flex;flex:1;flex-wrap:wrap;justify-content:flex-start;max-width:var(--pf-c-select__toggle-wrapper--MaxWidth);min-width:0;white-space:normal}.pf-c-select__toggle-wrapper>:not(:last-child){margin-right:var(--pf-c-select__toggle-wrapper--not-last-child--MarginRight)}.pf-c-select__toggle-wrapper>.pf-c-form-control{margin-top:calc(var(--pf-c-select__toggle-wrapper--m-typeahead--PaddingTop)*-1)}.pf-c-select__toggle-wrapper .pf-c-chip-group{margin-bottom:var(--pf-c-select__toggle-wrapper--c-chip-group--MarginBottom);margin-top:var(--pf-c-select__toggle-wrapper--c-chip-group--MarginTop)}.pf-c-select__toggle-wrapper>.pf-c-select__toggle-typeahead:first-child{margin-left:calc(var(--pf-c-select__toggle--PaddingLeft)*-1)}.pf-c-select__toggle-icon+.pf-c-select__toggle-text{margin-left:var(--pf-c-select__toggle-icon--toggle-text--MarginLeft)}.pf-c-select__toggle-status-icon{color:var(--pf-c-select__toggle-status-icon--Color);margin-left:var(--pf-c-select__toggle-status-icon--MarginLeft)}.pf-c-select__toggle-badge{display:flex;padding-left:var(--pf-c-select__toggle-badge--PaddingLeft)}.pf-c-select__toggle-typeahead{flex-basis:var(--pf-c-select__toggle-typeahead--FlexBasis);flex-grow:1;flex-shrink:0;min-width:var(--pf-c-select__toggle-typeahead--MinWidth)}.pf-c-select__toggle-typeahead.pf-c-form-control{background-color:var(--pf-c-select__toggle-typeahead--BackgroundColor);border-bottom-color:transparent;border-left:var(--pf-c-select__toggle-typeahead--BorderLeft);border-right:var(--pf-c-select__toggle-typeahead--BorderRight);border-top:var(--pf-c-select__toggle-typeahead--BorderTop)}.pf-c-select__toggle-typeahead.pf-c-form-control:focus{padding-bottom:var(--pf-c-select__toggle-typeahead--focus--PaddingBottom)}.pf-c-select__menu{background-clip:padding-box;background-color:var(--pf-c-select__menu--BackgroundColor);box-shadow:var(--pf-c-select__menu--BoxShadow);min-width:var(--pf-c-select__menu--MinWidth);padding-bottom:var(--pf-c-select__menu--PaddingBottom);padding-top:var(--pf-c-select__menu--PaddingTop);position:absolute;top:var(--pf-c-select__menu--Top);width:var(--pf-c-select__menu--Width);z-index:var(--pf-c-select__menu--ZIndex)}.pf-c-select__menu.pf-m-align-right{right:0}.pf-c-select.pf-m-top .pf-c-select__menu{top:0;transform:translateY(var(--pf-c-select__menu--m-top--TranslateY))}.pf-c-select__menu.pf-m-static{--pf-c-select__menu--m-top--TranslateY:0;bottom:auto;left:auto;min-width:min-content;position:static;right:auto;top:auto;z-index:auto}.pf-c-select__menu-fieldset{border:0}.pf-c-select__menu-wrapper{display:flex}.pf-c-select__menu-wrapper.pf-m-favorite .pf-c-select__menu-item.pf-m-favorite-action{--pf-c-select__menu-item--m-favorite-action--Color:var(--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--Color);--pf-c-select__menu-item--m-favorite-action--hover--Color:var(--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--hover--Color);--pf-c-select__menu-item--m-favorite-action--focus--Color:var(--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--focus--Color)}.pf-c-select__menu-item{background-color:transparent;border:none;color:var(--pf-c-select__menu-item--Color);font-size:var(--pf-c-select__menu-item--FontSize);font-weight:var(--pf-c-select__menu-item--FontWeight);line-height:var(--pf-c-select__menu-item--LineHeight);padding:var(--pf-c-select__menu-item--PaddingTop) var(--pf-c-select__menu-item--PaddingRight) var(--pf-c-select__menu-item--PaddingBottom) var(--pf-c-select__menu-item--PaddingLeft);position:relative;text-align:left;white-space:nowrap;width:var(--pf-c-select__menu-item--Width)}.pf-c-select__menu-item.pf-m-focus,.pf-c-select__menu-item:focus,.pf-c-select__menu-item:hover{--pf-c-select__menu-item--m-action--Color:var(--pf-c-select__menu-item--hover__menu-item--m-action--Color);text-decoration:none}.pf-c-select__menu-item:hover,.pf-c-select__menu-wrapper:hover{background-color:var(--pf-c-select__menu-item--hover--BackgroundColor)}.pf-c-select__menu-item.pf-m-focus,.pf-c-select__menu-item:focus,.pf-c-select__menu-wrapper.pf-m-focus,.pf-c-select__menu-wrapper:focus-within{background-color:var(--pf-c-select__menu-item--focus--BackgroundColor);position:relative}.pf-c-select__menu-item.pf-m-link{--pf-c-select__menu-item--PaddingRight:0;--pf-c-select__menu-item-main--PaddingRight:0;--pf-c-select__menu-item-description--PaddingRight:0;--pf-c-select__menu-item--Width:var(--pf-c-select__menu-item--m-link--Width);--pf-c-select__menu-item--hover--BackgroundColor:var(--pf-c-select__menu-item--m-link--hover--BackgroundColor);--pf-c-select__menu-item--focus--BackgroundColor:var(--pf-c-select__menu-item--m-link--focus--BackgroundColor);flex-grow:1}.pf-c-select__menu-item.pf-m-action{--pf-c-select__menu-item--Color:var(--pf-c-select__menu-item--m-action--Color);--pf-c-select__menu-item--Width:var(--pf-c-select__menu-item--m-action--Width);--pf-c-select__menu-item--hover--BackgroundColor:var(--pf-c-select__menu-item--m-action--hover--BackgroundColor);--pf-c-select__menu-item--focus--BackgroundColor:var(--pf-c-select__menu-item--m-action--focus--BackgroundColor);align-items:flex-start;display:flex;font-size:var(--pf-c-select__menu-item--m-action--FontSize)}.pf-c-select__menu-item.pf-m-action:hover{--pf-c-select__menu-item--m-action--Color:var(--pf-c-select__menu-item--m-action--hover--Color)}.pf-c-select__menu-item.pf-m-action:focus{--pf-c-select__menu-item--m-action--Color:var(--pf-c-select__menu-item--m-action--focus--Color)}.pf-c-select__menu-item.pf-m-action:disabled{--pf-c-select__menu-item--disabled--Color:var(--pf-c-select__menu-item--m-action--disabled--Color)}.pf-c-select__menu-item.pf-m-favorite-action{--pf-c-select__menu-item--m-action--Color:var(--pf-c-select__menu-item--m-favorite-action--Color);--pf-c-select__menu-item--m-action--hover--Color:var(--pf-c-select__menu-item--m-favorite-action--hover--Color);--pf-c-select__menu-item--m-action--focus--Color:var(--pf-c-select__menu-item--m-favorite-action--focus--Color)}.pf-c-select__menu-item.pf-m-selected{--pf-c-select__menu-item--PaddingRight:var(--pf-c-select__menu-item--m-selected--PaddingRight);--pf-c-select__menu-item-main--PaddingRight:var(--pf-c-select__menu-item--m-selected__menu-item-main--PaddingRight)}.pf-c-select__menu-item.pf-m-description{white-space:normal}.pf-c-select__menu-item.pf-m-description:not(.pf-c-check){--pf-c-select__menu-item--PaddingRight:0}.pf-c-select__menu-item.pf-m-description .pf-c-check__label{white-space:nowrap}.pf-c-select__menu-item.pf-m-disabled,.pf-c-select__menu-item:disabled,.pf-c-select__menu-wrapper.pf-m-disabled{--pf-c-select__menu-item-count--Color:var(--pf-c-select__menu-item--disabled__menu-item-count--Color);background-color:var(--pf-c-select__menu-item--disabled--BackgroundColor);color:var(--pf-c-select__menu-item--disabled--Color);pointer-events:none}.pf-c-select__menu-item.pf-c-check .pf-c-check__label{width:100%}.pf-c-select__menu-item.pf-m-load{--pf-c-select__menu-item--hover--BackgroundColor:transparent;--pf-c-select__menu-item--focus--BackgroundColor:transparent;--pf-c-select__menu-item--Color:var(--pf-c-select__menu-item--m-load--Color)}.pf-c-select__list-item.pf-m-loading{padding-top:var(--pf-c-select__list-item--m-loading--PaddingTop);text-align:center}.pf-c-select__menu-item-main{display:block;padding-right:var(--pf-c-select__menu-item-main--PaddingRight);position:relative;white-space:nowrap}.pf-c-select__menu-item-row{display:flex}.pf-c-select__menu-item-text{flex-grow:1}.pf-c-select__menu-item-count{align-self:center;color:var(--pf-c-select__menu-item-count--Color);font-size:var(--pf-c-select__menu-item-count--FontSize);margin-left:var(--pf-c-select__menu-item-count--MarginLeft)}.pf-c-select__menu-item-description{color:var(--pf-c-select__menu-item-description--Color);display:block;font-size:var(--pf-c-select__menu-item-description--FontSize);padding-right:var(--pf-c-select__menu-item-description--PaddingRight)}.pf-c-select__menu-item-icon{color:var(--pf-c-select__menu-item-icon--Color);font-size:var(--pf-c-select__menu-item-icon--FontSize);position:absolute;right:var(--pf-c-select__menu-item-icon--Right);top:var(--pf-c-select__menu-item-icon--Top);transform:translateY(var(--pf-c-select__menu-item-icon--TranslateY))}.pf-c-select__menu-item-action-icon{align-items:center;display:flex;min-height:var(--pf-c-select__menu-item-action-icon--MinHeight)}.pf-c-select__menu-item--match{background-color:inherit;font-weight:var(--pf-c-select__menu-item--match--FontWeight)}.pf-c-select__menu-group+.pf-c-select__menu-group{padding-top:var(--pf-c-select__menu-group--menu-group--PaddingTop)}.pf-c-select__menu-search{padding:var(--pf-c-select__menu-search--PaddingTop) var(--pf-c-select__menu-search--PaddingRight) var(--pf-c-select__menu-search--PaddingBottom) var(--pf-c-select__menu-search--PaddingLeft)}.pf-c-select__menu-group-title{color:var(--pf-c-select__menu-group-title--Color);font-size:var(--pf-c-select__menu-group-title--FontSize);font-weight:var(--pf-c-select__menu-group-title--FontWeight);padding-bottom:var(--pf-c-select__menu-group-title--PaddingBottom);padding-left:var(--pf-c-select__menu-group-title--PaddingLeft);padding-right:var(--pf-c-select__menu-group-title--PaddingRight);padding-top:var(--pf-c-select__menu-group-title--PaddingTop)}.pf-c-select__menu-footer{box-shadow:var(--pf-c-select__menu-footer--BoxShadow);margin-bottom:var(--pf-c-select__menu-footer--MarginBottom);margin-top:var(--pf-c-select__menu-footer--MarginTop);padding:var(--pf-c-select__menu-footer--PaddingTop) var(--pf-c-select__menu-footer--PaddingRight) var(--pf-c-select__menu-footer--PaddingBottom) var(--pf-c-select__menu-footer--PaddingLeft)}:where(.pf-theme-dark) .pf-c-select{--pf-c-select__toggle--disabled--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-select__toggle--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-select__toggle--before--BorderTopColor:transparent;--pf-c-select__toggle--before--BorderRightColor:transparent;--pf-c-select__toggle--before--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-select__toggle--before--BorderLeftColor:transparent;--pf-c-select__menu--Top:100%;--pf-c-select__menu--m-top--TranslateY:-100%;--pf-c-select__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-select__menu--BackgroundColor:var(--pf-global--BackgroundColor--300)}:where(.pf-theme-dark) .pf-c-select__toggle.pf-m-disabled,:where(.pf-theme-dark) .pf-c-select__toggle:disabled{color:var(--pf-global--palette--black-100)}.pf-c-dropdown{--pf-c-dropdown__toggle--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-dropdown__toggle--PaddingRight:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-dropdown__toggle--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--MinWidth:0;--pf-c-dropdown__toggle--FontSize:var(--pf-global--FontSize--md);--pf-c-dropdown__toggle--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-dropdown__toggle--Color:var(--pf-global--Color--100);--pf-c-dropdown__toggle--LineHeight:var(--pf-global--LineHeight--md);--pf-c-dropdown__toggle--BackgroundColor:transparent;--pf-c-dropdown__toggle--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-dropdown__toggle--before--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-dropdown__toggle--before--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-dropdown__toggle--before--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-dropdown__toggle--hover--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-dropdown__toggle--focus--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--focus--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-dropdown__toggle--active--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--active--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown--m-expanded__toggle--before--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-dropdown__toggle--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-dropdown__toggle--m-plain--Color:var(--pf-global--Color--200);--pf-c-dropdown__toggle--m-plain--hover--Color:var(--pf-global--Color--100);--pf-c-dropdown__toggle--m-plain--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-dropdown__toggle--m-plain--PaddingRight:var(--pf-global--spacer--md);--pf-c-dropdown__toggle--m-plain--PaddingLeft:var(--pf-global--spacer--md);--pf-c-dropdown__toggle--m-plain--child--LineHeight:normal;--pf-c-dropdown__toggle--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-dropdown__toggle--m-primary--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-dropdown__toggle--m-primary--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown--m-expanded__toggle--m-primary--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-primary--disabled--Color:var(--pf-global--Color--100);--pf-c-dropdown__toggle--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-secondary--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-dropdown__toggle--m-secondary--BackgroundColor:transparent;--pf-c-dropdown__toggle--m-secondary--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-dropdown__toggle--m-secondary--hover--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--focus--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--active--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-secondary--hover--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-secondary--focus--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-secondary--active--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-dropdown--m-expanded__toggle--m-secondary--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown--m-expanded__toggle--m-secondary--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle-button--Color:var(--pf-global--Color--100);--pf-c-dropdown__toggle-progress--Visibility:hidden;--pf-c-dropdown__toggle-progress--c-spinner--diameter:var(--pf-global--FontSize--sm);--pf-c-dropdown__toggle--m-split-button--child--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-dropdown__toggle--m-split-button--child--PaddingRight:var(--pf-global--spacer--xs);--pf-c-dropdown__toggle--m-split-button--child--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-dropdown__toggle--m-split-button--child--PaddingLeft:var(--pf-global--spacer--xs);--pf-c-dropdown__toggle--m-split-button--child--BackgroundColor:transparent;--pf-c-dropdown__toggle--m-split-button--first-child--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--m-split-button--last-child--PaddingRight:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingRight:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight:calc(var(--pf-global--BorderWidth--sm)*-1);--pf-c-dropdown__toggle--m-split-button__toggle-check__input--TranslateY:-0.0625rem;--pf-c-dropdown__toggle--m-split-button__toggle-text--MarginLeft:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--m-split-button--child--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-dropdown__toggle--m-split-button--m-primary--child--BorderRadius:var(--pf-c-dropdown__toggle--m-split-button--child--BorderRadius);--pf-c-dropdown__toggle--m-split-button--m-primary--child--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-split-button--m-primary--child--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-split-button--m-primary--child--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-split-button--m-primary--child--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-split-button--m-primary--child--m-expanded--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-split-button--m-primary--m-action--child--BorderLeftColor:var(--pf-global--primary-color--200);--pf-c-dropdown__toggle--m-split-button--m-primary--m-action--child--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-dropdown--m-expanded__toggle--m-secondary--m-split-button--child--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--m-split-button--Color:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-secondary--m-split-button--hover--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--m-split-button--focus--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--m-split-button--active--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth--base:var(--pf-global--BorderWidth--sm);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderColor--base:var(--pf-global--primary-color--100);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderColor:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderColor--base);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth--base);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--hover--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--focus--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--active--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-dropdown__toggle-icon--LineHeight:var(--pf-global--LineHeight--md);--pf-c-dropdown__toggle-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle-icon--MarginLeft:var(--pf-global--spacer--md);--pf-c-dropdown--m-top--m-expanded__toggle-icon--Rotate:180deg;--pf-c-dropdown--m-plain__toggle-icon--Color:var(--pf-global--Color--200);--pf-c-dropdown--m-plain--hover__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-dropdown__menu--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-dropdown__menu--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-dropdown__menu--PaddingTop:var(--pf-global--spacer--sm);--pf-c-dropdown__menu--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-dropdown__menu--Top:calc(100% + var(--pf-global--spacer--xs));--pf-c-dropdown__menu--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-dropdown--m-top__menu--Top:0;--pf-c-dropdown--m-top__menu--TranslateY:calc(-100% - var(--pf-global--spacer--xs));--pf-c-dropdown__menu-item--BackgroundColor:transparent;--pf-c-dropdown__menu-item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-dropdown__menu-item--PaddingRight:var(--pf-global--spacer--md);--pf-c-dropdown__menu-item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-dropdown__menu-item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-dropdown__menu-item--FontSize:var(--pf-global--FontSize--md);--pf-c-dropdown__menu-item--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-dropdown__menu-item--LineHeight:var(--pf-global--LineHeight--md);--pf-c-dropdown__menu-item--Color:var(--pf-global--Color--dark-100);--pf-c-dropdown__menu-item--hover--Color:var(--pf-global--Color--dark-100);--pf-c-dropdown__menu-item--disabled--Color:var(--pf-global--Color--dark-200);--pf-c-dropdown__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-dropdown__menu-item--disabled--BackgroundColor:transparent;--pf-c-dropdown__menu-item--m-text--Color:var(--pf-global--Color--dark-200);--pf-c-dropdown__menu-item-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-dropdown__menu-item-icon--Width:var(--pf-global--icon--FontSize--lg);--pf-c-dropdown__menu-item-icon--Height:var(--pf-global--icon--FontSize--lg);--pf-c-dropdown__menu-item-description--FontSize:var(--pf-global--FontSize--xs);--pf-c-dropdown__menu-item-description--Color:var(--pf-global--Color--dark-200);--pf-c-dropdown__group--group--PaddingTop:var(--pf-global--spacer--sm);--pf-c-dropdown__group-title--PaddingTop:var(--pf-global--spacer--sm);--pf-c-dropdown__group-title--PaddingRight:var(--pf-c-dropdown__menu-item--PaddingRight);--pf-c-dropdown__group-title--PaddingBottom:var(--pf-c-dropdown__menu-item--PaddingBottom);--pf-c-dropdown__group-title--PaddingLeft:var(--pf-c-dropdown__menu-item--PaddingLeft);--pf-c-dropdown__group-title--FontSize:var(--pf-global--FontSize--xs);--pf-c-dropdown__group-title--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-dropdown__group-title--Color:var(--pf-global--Color--dark-200);--pf-c-dropdown__toggle-image--MarginTop:0;--pf-c-dropdown__toggle-image--MarginBottom:0;--pf-c-dropdown__toggle-image--MarginRight:var(--pf-global--spacer--sm);--pf-c-dropdown--c-divider--MarginTop:var(--pf-global--spacer--sm);--pf-c-dropdown--c-divider--MarginBottom:var(--pf-global--spacer--sm);--pf-c-dropdown__toggle--c-badge__toggle-icon--MarginLeft:var(--pf-global--spacer--xs);--pf-c-dropdown__toggle--c-badge__toggle-icon--MarginRight:0;--pf-c-dropdown--c-menu--Top:calc(100% + var(--pf-global--spacer--xs));--pf-c-dropdown--c-menu--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-dropdown--m-top--c-menu--Top:0;--pf-c-dropdown--m-top--c-menu--TranslateY:calc(-100% - var(--pf-global--spacer--xs));--pf-c-dropdown--m-full-height__toggle--before--BorderTopWidth:0;--pf-c-dropdown--m-full-height__toggle--expanded--before--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-dropdown--m-full-height__toggle--hover--before--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-dropdown--m-full-height__toggle--active--before--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-dropdown--m-full-height__toggle--focus--before--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-dropdown--m-full-height__toggle--PaddingRight:var(--pf-global--spacer--lg);--pf-c-dropdown--m-full-height__toggle--PaddingLeft:var(--pf-global--spacer--lg);display:inline-block;max-width:100%;position:relative}.pf-c-dropdown .pf-c-divider{margin-bottom:var(--pf-c-dropdown--c-divider--MarginBottom);margin-top:var(--pf-c-dropdown--c-divider--MarginTop)}.pf-c-dropdown .pf-c-divider:last-child{--pf-c-dropdown--c-divider--MarginBottom:0}.pf-c-dropdown>.pf-c-menu{position:absolute;top:var(--pf-c-dropdown--c-menu--Top);z-index:var(--pf-c-dropdown--c-menu--ZIndex)}.pf-c-dropdown.pf-m-full-height{--pf-c-dropdown__toggle--PaddingRight:var(--pf-c-dropdown--m-full-height__toggle--PaddingRight);--pf-c-dropdown__toggle--PaddingLeft:var(--pf-c-dropdown--m-full-height__toggle--PaddingLeft);--pf-c-dropdown__toggle--active--before--BorderBottomWidth:var(--pf-c-dropdown--m-full-height__toggle--active--before--BorderBottomWidth);--pf-c-dropdown__toggle--focus--before--BorderBottomWidth:var(--pf-c-dropdown--m-full-height__toggle--focus--before--BorderBottomWidth);--pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth:var(--pf-c-dropdown--m-full-height__toggle--expanded--before--BorderBottomWidth);align-items:center;display:inline-flex;height:100%}.pf-c-dropdown.pf-m-full-height .pf-c-dropdown__toggle{align-self:stretch}.pf-c-dropdown.pf-m-full-height .pf-c-dropdown__toggle:before{border-top-width:var(--pf-c-dropdown--m-full-height__toggle--before--BorderTopWidth)}.pf-c-dropdown.pf-m-full-height:hover .pf-c-dropdown__toggle:before{border-bottom-width:var(--pf-c-dropdown--m-full-height__toggle--hover--before--BorderBottomWidth)}.pf-c-dropdown.pf-m-expanded{--pf-c-dropdown__toggle--m-split-button--m-primary--child--BackgroundColor:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--m-expanded--BackgroundColor);--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth:var(--pf-c-dropdown--m-expanded__toggle--m-secondary--m-split-button--child--before--BorderWidth)}.pf-c-dropdown__toggle{align-items:center;background-color:var(--pf-c-dropdown__toggle--BackgroundColor);border:none;color:var(--pf-c-dropdown__toggle--Color);display:flex;font-size:var(--pf-c-dropdown__toggle--FontSize);font-weight:var(--pf-c-dropdown__toggle--FontWeight);justify-content:space-between;line-height:var(--pf-c-dropdown__toggle--LineHeight);max-width:100%;min-width:var(--pf-c-dropdown__toggle--MinWidth);padding:var(--pf-c-dropdown__toggle--PaddingTop) var(--pf-c-dropdown__toggle--PaddingRight) var(--pf-c-dropdown__toggle--PaddingBottom) var(--pf-c-dropdown__toggle--PaddingLeft);position:relative}.pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:before,.pf-c-dropdown__toggle:before{border:var(--pf-c-dropdown__toggle--before--BorderWidth) solid;border-color:var(--pf-c-dropdown__toggle--before--BorderTopColor) var(--pf-c-dropdown__toggle--before--BorderRightColor) var(--pf-c-dropdown__toggle--before--BorderBottomColor) var(--pf-c-dropdown__toggle--before--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-dropdown__toggle.pf-m-disabled,.pf-c-dropdown__toggle:disabled{--pf-c-dropdown__toggle--m-primary--Color:var(--pf-c-dropdown__toggle--m-primary--disabled--Color);--pf-c-dropdown__toggle--before--BorderBottomColor:transparent;pointer-events:none}.pf-c-dropdown__toggle.pf-m-disabled.pf-m-plain.pf-m-text,.pf-c-dropdown__toggle.pf-m-disabled:not(.pf-m-plain),.pf-c-dropdown__toggle:disabled.pf-m-plain.pf-m-text,.pf-c-dropdown__toggle:disabled:not(.pf-m-plain){--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown__toggle--disabled--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-disabled.pf-m-plain.pf-m-text:before,.pf-c-dropdown__toggle.pf-m-disabled:not(.pf-m-plain):before,.pf-c-dropdown__toggle:disabled.pf-m-plain.pf-m-text:before,.pf-c-dropdown__toggle:disabled:not(.pf-m-plain):before{border:0}.pf-c-dropdown__toggle.pf-m-split-button{padding:0}.pf-c-dropdown__toggle.pf-m-split-button:not(.pf-m-disabled){background-color:var(--pf-c-dropdown__toggle--m-split-button--child--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-split-button>*{padding-bottom:var(--pf-c-dropdown__toggle--m-split-button--child--PaddingBottom);padding-left:var(--pf-c-dropdown__toggle--m-split-button--child--PaddingLeft);padding-right:var(--pf-c-dropdown__toggle--m-split-button--child--PaddingRight);padding-top:var(--pf-c-dropdown__toggle--m-split-button--child--PaddingTop);position:relative}.pf-c-dropdown__toggle.pf-m-split-button>:first-child{--pf-c-dropdown__toggle--m-split-button--child--PaddingLeft:var(--pf-c-dropdown__toggle--m-split-button--first-child--PaddingLeft)}.pf-c-dropdown__toggle.pf-m-split-button>:last-child{--pf-c-dropdown__toggle--m-split-button--child--PaddingRight:var(--pf-c-dropdown__toggle--m-split-button--last-child--PaddingRight)}.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action{--pf-c-dropdown__toggle--m-split-button--child--PaddingRight:var(--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingRight);--pf-c-dropdown__toggle--m-split-button--child--PaddingLeft:var(--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingLeft)}.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button{margin-right:var(--pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight)}.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button:before{border-left:0}.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button:last-child{--pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight:0}.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action.pf-m-primary>:not(:first-child){border-left:var(--pf-c-dropdown__toggle--m-split-button--m-primary--m-action--child--BorderLeftWidth) solid var(--pf-c-dropdown__toggle--m-split-button--m-primary--m-action--child--BorderLeftColor)}.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action.pf-m-primary.pf-m-disabled,.pf-c-dropdown__toggle.pf-m-split-button.pf-m-action.pf-m-primary[disabled]{--pf-c-dropdown__toggle--m-split-button--m-primary--m-action--child--BorderLeftWidth:0}.pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check{align-items:center;cursor:pointer;display:flex}.pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check.pf-m-in-progress{--pf-c-dropdown__toggle--m-split-button__toggle-check__input--Visibility:hidden;--pf-c-dropdown__toggle-progress--Visibility:visible}.pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check .pf-c-check,.pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check>input{cursor:pointer;transform:translateY(var(--pf-c-dropdown__toggle--m-split-button__toggle-check__input--TranslateY));visibility:var(--pf-c-dropdown__toggle--m-split-button__toggle-check__input--Visibility,unset)}.pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-button{border:0;color:var(--pf-c-dropdown__toggle-button--Color)}.pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-text{margin-left:var(--pf-c-dropdown__toggle--m-split-button__toggle-text--MarginLeft)}.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled){--pf-c-dropdown__toggle--before--BorderWidth:0;--pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth:0}.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>*{background-color:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--BackgroundColor);border:0}.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>:hover{--pf-c-dropdown__toggle--m-split-button--m-primary--child--BackgroundColor:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--hover--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>.pf-m-active,.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>:active,.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>:focus{--pf-c-dropdown__toggle--m-split-button--m-primary--child--BackgroundColor:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--focus--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>:first-child{border-bottom-left-radius:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--BorderRadius);border-top-left-radius:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--BorderRadius)}.pf-c-dropdown__toggle.pf-m-primary.pf-m-split-button:not(.pf-m-disabled)>:last-child{border-bottom-right-radius:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--BorderRadius);border-top-right-radius:var(--pf-c-dropdown__toggle--m-split-button--m-primary--child--BorderRadius)}.pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:hover:before,.pf-c-dropdown__toggle:not(.pf-m-action):not(.pf-m-secondary):hover:before{--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-c-dropdown__toggle--hover--before--BorderBottomColor)}.pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:focus:before,.pf-c-dropdown__toggle:not(.pf-m-action):not(.pf-m-secondary):focus:before{--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-c-dropdown__toggle--focus--before--BorderBottomColor);border-bottom-width:var(--pf-c-dropdown__toggle--focus--before--BorderBottomWidth)}.pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:active:before,.pf-c-dropdown__toggle:not(.pf-m-action):not(.pf-m-secondary).pf-m-active:before,.pf-c-dropdown__toggle:not(.pf-m-action):not(.pf-m-secondary):active:before{--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-c-dropdown__toggle--active--before--BorderBottomColor);border-bottom-width:var(--pf-c-dropdown__toggle--active--before--BorderBottomWidth)}.pf-m-expanded>.pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:before,.pf-m-expanded>.pf-c-dropdown__toggle:not(.pf-m-action):not(.pf-m-secondary):before{--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-c-dropdown--m-expanded__toggle--before--BorderBottomColor);border-bottom-width:var(--pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth)}.pf-c-dropdown__toggle.pf-m-plain{--pf-c-dropdown__toggle-icon--Color:var(--pf-c-dropdown--m-plain__toggle-icon--Color)}.pf-c-dropdown__toggle.pf-m-plain:not(.pf-m-text){--pf-c-dropdown__toggle--PaddingRight:var(--pf-c-dropdown__toggle--m-plain--PaddingRight);--pf-c-dropdown__toggle--PaddingLeft:var(--pf-c-dropdown__toggle--m-plain--PaddingLeft);color:var(--pf-c-dropdown__toggle--m-plain--Color);display:inline-block}.pf-c-dropdown__toggle.pf-m-plain:not(.pf-m-text)>*{line-height:var(--pf-c-dropdown__toggle--m-plain--child--LineHeight)}.pf-c-dropdown__toggle.pf-m-plain:before{border:0}.pf-c-dropdown__toggle.pf-m-plain.pf-m-active,.pf-c-dropdown__toggle.pf-m-plain:active,.pf-c-dropdown__toggle.pf-m-plain:focus,.pf-c-dropdown__toggle.pf-m-plain:hover,.pf-m-expanded>.pf-c-dropdown__toggle.pf-m-plain{--pf-c-dropdown__toggle--m-plain--Color:var(--pf-c-dropdown__toggle--m-plain--hover--Color);--pf-c-dropdown--m-plain__toggle-icon--Color:var(--pf-c-dropdown--m-plain--hover__toggle-icon--Color)}.pf-c-dropdown__toggle.pf-m-plain.pf-m-disabled,.pf-c-dropdown__toggle.pf-m-plain:disabled{--pf-c-dropdown__toggle--m-plain--Color:var(--pf-c-dropdown__toggle--m-plain--disabled--Color)}.pf-c-dropdown__toggle.pf-m-primary{--pf-c-dropdown__toggle--Color:var(--pf-c-dropdown__toggle--m-primary--Color);--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown__toggle--m-primary--BackgroundColor);--pf-c-dropdown__toggle-button--Color:var(--pf-c-dropdown__toggle--m-primary--Color);border-radius:var(--pf-c-dropdown__toggle--m-primary--BorderRadius)}.pf-c-dropdown__toggle.pf-m-primary .pf-c-dropdown__toggle-button:before,.pf-c-dropdown__toggle.pf-m-primary:before{border:0}.pf-c-dropdown__toggle.pf-m-primary:hover{--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown__toggle--m-primary--hover--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-primary:focus{--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown__toggle--m-primary--focus--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-primary.pf-m-active,.pf-c-dropdown__toggle.pf-m-primary:active{--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown__toggle--m-primary--active--BackgroundColor)}.pf-m-expanded>.pf-c-dropdown__toggle.pf-m-primary{--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown--m-expanded__toggle--m-primary--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-secondary{border-radius:var(--pf-c-dropdown__toggle--m-secondary--BorderRadius)}.pf-c-dropdown__toggle.pf-m-secondary:not(.pf-m-disabled):not([disabled]){--pf-c-dropdown__toggle--Color:var(--pf-c-dropdown__toggle--m-secondary--Color);--pf-c-dropdown__toggle--BackgroundColor:var(--pf-c-dropdown__toggle--m-secondary--BackgroundColor)}.pf-c-dropdown__toggle.pf-m-secondary:not(.pf-m-disabled):not([disabled]):before{border:var(--pf-c-dropdown__toggle--m-secondary--before--BorderWidth) solid var(--pf-c-dropdown__toggle--m-secondary--before--BorderColor);border-radius:var(--pf-c-dropdown__toggle--m-secondary--BorderRadius)}.pf-c-dropdown__toggle.pf-m-secondary:hover{--pf-c-dropdown__toggle--m-secondary--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--hover--before--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary:focus{--pf-c-dropdown__toggle--m-secondary--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--focus--before--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-active,.pf-c-dropdown__toggle.pf-m-secondary:active{--pf-c-dropdown__toggle--m-secondary--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--active--before--BorderWidth)}.pf-m-expanded>.pf-c-dropdown__toggle.pf-m-secondary{--pf-c-dropdown__toggle--m-secondary--before--BorderWidth:var(--pf-c-dropdown--m-expanded__toggle--m-secondary--before--BorderWidth);--pf-c-dropdown__toggle--m-secondary--before--BorderColor:var(--pf-c-dropdown--m-expanded__toggle--m-secondary--before--BorderColor)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled){--pf-c-dropdown__toggle-button--Color:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--Color)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled):hover{--pf-c-dropdown__toggle--m-secondary--hover--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--hover--before--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled):focus{--pf-c-dropdown__toggle--m-secondary--focus--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--focus--before--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled):active{--pf-c-dropdown__toggle--m-secondary--active--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--active--before--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:before{border:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth) solid var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderColor)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:hover{--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--hover--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:focus{--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--focus--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:active{--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--active--BorderWidth)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:first-child:before{border-bottom-left-radius:var(--pf-c-dropdown__toggle--m-split-button--child--BorderRadius);border-top-left-radius:var(--pf-c-dropdown__toggle--m-split-button--child--BorderRadius)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:last-child:before{border-bottom-right-radius:var(--pf-c-dropdown__toggle--m-split-button--child--BorderRadius);border-top-right-radius:var(--pf-c-dropdown__toggle--m-split-button--child--BorderRadius)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:not(:first-child):before{border-left:var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderWidth--base) solid var(--pf-c-dropdown__toggle--m-secondary--m-split-button--child--before--BorderColor--base)}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled)>:not(:last-child):before{border-right:0}.pf-c-dropdown__toggle.pf-m-secondary.pf-m-split-button:not(.pf-m-disabled).pf-m-action:before{border:0}.pf-c-dropdown__toggle>.pf-c-badge{--pf-c-dropdown__toggle-icon--MarginLeft:var(--pf-c-dropdown__toggle--c-badge__toggle-icon--MarginLeft);--pf-c-dropdown__toggle-icon--MarginRight:var(--pf-c-dropdown__toggle--c-badge__toggle-icon--MarginRight)}.pf-c-dropdown__toggle .pf-c-dropdown__toggle-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-dropdown__toggle-text{flex:0 1 auto}.pf-c-dropdown__toggle-icon{color:var(--pf-c-dropdown__toggle-icon--Color,inherit);line-height:var(--pf-c-dropdown__toggle-icon--LineHeight);margin-left:var(--pf-c-dropdown__toggle-icon--MarginLeft);margin-right:var(--pf-c-dropdown__toggle-icon--MarginRight)}.pf-c-dropdown.pf-m-top.pf-m-expanded .pf-c-dropdown__toggle-icon{transform:rotate(var(--pf-c-dropdown--m-top--m-expanded__toggle-icon--Rotate))}.pf-c-dropdown__toggle-image{align-self:center;display:inline-flex;flex-shrink:0;line-height:1;margin-bottom:var(--pf-c-dropdown__toggle-image--MarginBottom);margin-right:var(--pf-c-dropdown__toggle-image--MarginRight);margin-top:var(--pf-c-dropdown__toggle-image--MarginTop)}.pf-c-dropdown__toggle-image:last-child{--pf-c-dropdown__toggle-image--MarginRight:0}.pf-c-dropdown__toggle-progress{position:absolute;visibility:var(--pf-c-dropdown__toggle-progress--Visibility)}.pf-c-dropdown__toggle-progress .pf-c-spinner{--pf-c-spinner--diameter:var(--pf-c-dropdown__toggle-progress--c-spinner--diameter)}.pf-c-dropdown__menu{background:var(--pf-c-dropdown__menu--BackgroundColor);background-clip:padding-box;box-shadow:var(--pf-c-dropdown__menu--BoxShadow);padding-bottom:var(--pf-c-dropdown__menu--PaddingBottom);padding-top:var(--pf-c-dropdown__menu--PaddingTop);position:absolute;top:var(--pf-c-dropdown__menu--Top);z-index:var(--pf-c-dropdown__menu--ZIndex)}.pf-c-dropdown__menu.pf-m-static{--pf-c-dropdown--m-top__menu--TranslateY:0;bottom:auto;left:auto;min-width:min-content;position:static;right:auto;top:auto;z-index:auto}.pf-c-dropdown .pf-c-menu,.pf-c-dropdown__menu{min-width:100%}.pf-c-dropdown .pf-c-menu.pf-m-align-right,.pf-c-dropdown__menu.pf-m-align-right{right:0}.pf-c-dropdown .pf-c-menu.pf-m-align-left,.pf-c-dropdown__menu.pf-m-align-left{right:auto}@media (min-width:576px){.pf-c-dropdown .pf-c-menu.pf-m-align-right-on-sm,.pf-c-dropdown__menu.pf-m-align-right-on-sm{right:0}.pf-c-dropdown .pf-c-menu.pf-m-align-left-on-sm,.pf-c-dropdown__menu.pf-m-align-left-on-sm{right:auto}}@media (min-width:768px){.pf-c-dropdown .pf-c-menu.pf-m-align-right-on-md,.pf-c-dropdown__menu.pf-m-align-right-on-md{right:0}.pf-c-dropdown .pf-c-menu.pf-m-align-left-on-md,.pf-c-dropdown__menu.pf-m-align-left-on-md{right:auto}}@media (min-width:992px){.pf-c-dropdown .pf-c-menu.pf-m-align-right-on-lg,.pf-c-dropdown__menu.pf-m-align-right-on-lg{right:0}.pf-c-dropdown .pf-c-menu.pf-m-align-left-on-lg,.pf-c-dropdown__menu.pf-m-align-left-on-lg{right:auto}}@media (min-width:1200px){.pf-c-dropdown .pf-c-menu.pf-m-align-right-on-xl,.pf-c-dropdown__menu.pf-m-align-right-on-xl{right:0}.pf-c-dropdown .pf-c-menu.pf-m-align-left-on-xl,.pf-c-dropdown__menu.pf-m-align-left-on-xl{right:auto}}@media (min-width:1450px){.pf-c-dropdown .pf-c-menu.pf-m-align-right-on-2xl,.pf-c-dropdown__menu.pf-m-align-right-on-2xl{right:0}.pf-c-dropdown .pf-c-menu.pf-m-align-left-on-2xl,.pf-c-dropdown__menu.pf-m-align-left-on-2xl{right:auto}}.pf-c-dropdown.pf-m-top .pf-c-dropdown__menu{--pf-c-dropdown__menu--Top:var(--pf-c-dropdown--m-top__menu--Top);transform:translateY(var(--pf-c-dropdown--m-top__menu--TranslateY))}.pf-c-dropdown.pf-m-top>.pf-c-menu{--pf-c-dropdown--c-menu--Top:var(--pf-c-dropdown--m-top--c-menu--Top);transform:translateY(var(--pf-c-dropdown--m-top--c-menu--TranslateY))}.pf-c-dropdown__menu-item{background-color:var(--pf-c-dropdown__menu-item--BackgroundColor);border:none;color:var(--pf-c-dropdown__menu-item--Color);display:block;font-size:var(--pf-c-dropdown__menu-item--FontSize);font-weight:var(--pf-c-dropdown__menu-item--FontWeight);line-height:var(--pf-c-dropdown__menu-item--LineHeight);padding:var(--pf-c-dropdown__menu-item--PaddingTop) var(--pf-c-dropdown__menu-item--PaddingRight) var(--pf-c-dropdown__menu-item--PaddingBottom) var(--pf-c-dropdown__menu-item--PaddingLeft);text-align:left;white-space:nowrap;width:100%}.pf-c-dropdown__menu-item:focus,.pf-c-dropdown__menu-item:hover{--pf-c-dropdown__menu-item--Color:var(--pf-c-dropdown__menu-item--hover--Color);--pf-c-dropdown__menu-item--BackgroundColor:var(--pf-c-dropdown__menu-item--hover--BackgroundColor);text-decoration:none}.pf-c-dropdown__menu-item.pf-m-aria-disabled,.pf-c-dropdown__menu-item.pf-m-disabled,.pf-c-dropdown__menu-item:disabled{--pf-c-dropdown__menu-item--Color:var(--pf-c-dropdown__menu-item--disabled--Color);--pf-c-dropdown__menu-item--BackgroundColor:var(--pf-c-dropdown__menu-item--disabled--BackgroundColor)}.pf-c-dropdown__menu-item.pf-m-disabled,.pf-c-dropdown__menu-item:disabled{pointer-events:none}.pf-c-dropdown__menu-item.pf-m-aria-disabled{cursor:default}.pf-c-dropdown__menu-item.pf-m-icon{align-items:center;display:flex}.pf-c-dropdown__menu-item.pf-m-icon.pf-m-description{align-items:start;flex-direction:column}.pf-c-dropdown__menu-item.pf-m-icon .pf-c-dropdown__menu-item-main{align-items:center;display:flex}.pf-c-dropdown__menu-item.pf-m-text{--pf-c-dropdown__menu-item--Color:var(--pf-c-dropdown__menu-item--m-text--Color)}.pf-c-dropdown__menu-item.pf-m-text:focus,.pf-c-dropdown__menu-item.pf-m-text:hover{--pf-c-dropdown__menu-item--BackgroundColor:transparent}.pf-c-dropdown__menu-item-icon{align-items:center;display:inline-flex;height:var(--pf-c-dropdown__menu-item-icon--Height);justify-content:center;margin-right:var(--pf-c-dropdown__menu-item-icon--MarginRight);width:var(--pf-c-dropdown__menu-item-icon--Width)}.pf-c-dropdown__menu-item-icon>*{max-height:100%;max-width:100%}.pf-c-dropdown__menu-item-description{color:var(--pf-c-dropdown__menu-item-description--Color);font-size:var(--pf-c-dropdown__menu-item-description--FontSize)}.pf-c-dropdown__group+.pf-c-dropdown__group{padding-top:var(--pf-c-dropdown__group--group--PaddingTop)}.pf-c-dropdown__group-title{color:var(--pf-c-dropdown__group-title--Color);font-size:var(--pf-c-dropdown__group-title--FontSize);font-weight:var(--pf-c-dropdown__group-title--FontWeight);padding-bottom:var(--pf-c-dropdown__group-title--PaddingBottom);padding-left:var(--pf-c-dropdown__group-title--PaddingLeft);padding-right:var(--pf-c-dropdown__group-title--PaddingRight);padding-top:var(--pf-c-dropdown__group-title--PaddingTop)}:where(.pf-theme-dark) .pf-c-dropdown{--pf-c-dropdown__toggle--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-dropdown__toggle--before--BorderTopColor:transparent;--pf-c-dropdown__toggle--before--BorderRightColor:transparent;--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-dropdown__toggle--before--BorderLeftColor:transparent;--pf-c-dropdown__toggle--disabled--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-dropdown__toggle--m-primary--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-dropdown__menu--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-dropdown__menu--Top:100%;--pf-c-dropdown--m-top__menu--TranslateY:-100%;--pf-c-dropdown__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--400)}:where(.pf-theme-dark) .pf-c-dropdown__toggle:not(.pf-m-plain).pf-m-disabled,:where(.pf-theme-dark) .pf-c-dropdown__toggle:not(.pf-m-plain):disabled{color:var(--pf-global--palette--black-100)}:where(.pf-theme-dark) .pf-c-dropdown__toggle.pf-m-plain{background:transparent}.pf-c-divider{--pf-hidden-visible--visible--Visibility:visible;--pf-hidden-visible--hidden--Display:none;--pf-hidden-visible--hidden--Visibility:hidden;--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility);display:var(--pf-hidden-visible--Display);visibility:var(--pf-hidden-visible--Visibility)}.pf-m-hidden.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}@media screen and (min-width:576px){.pf-m-hidden-on-sm.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-sm.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-m-hidden-on-md.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-md.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:992px){.pf-m-hidden-on-lg.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-lg.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1200px){.pf-m-hidden-on-xl.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-xl.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1450px){.pf-m-hidden-on-2xl.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-2xl.pf-c-divider{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}.pf-c-divider{--pf-c-divider--BorderWidth--base:var(--pf-global--BorderWidth--sm);--pf-c-divider--BorderColor--base:var(--pf-c-divider--BackgroundColor);--pf-c-divider--Height:var(--pf-c-divider--BorderWidth--base);--pf-c-divider--BackgroundColor:var(--pf-global--BorderColor--100);--pf-c-divider--after--BackgroundColor:var(--pf-c-divider--BorderColor--base);--pf-c-divider--after--FlexBasis:100%;--pf-c-divider--after--Inset:0%;--pf-c-divider--m-vertical--after--FlexBasis:100%;--pf-c-divider--m-horizontal--Display:flex;--pf-c-divider--m-horizontal--FlexDirection:row;--pf-c-divider--m-horizontal--after--Height:var(--pf-c-divider--Height);--pf-c-divider--m-horizontal--after--Width:auto;--pf-c-divider--m-vertical--Display:inline-flex;--pf-c-divider--m-vertical--FlexDirection:column;--pf-c-divider--m-vertical--after--Height:auto;--pf-c-divider--m-vertical--after--Width:var(--pf-c-divider--BorderWidth--base);--pf-hidden-visible--visible--Display:var(--pf-c-divider--Display);--pf-c-divider--Display:var(--pf-c-divider--m-horizontal--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-horizontal--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-horizontal--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-horizontal--after--Height);align-items:center;align-self:stretch;border:0;display:var(--pf-c-divider--Display);flex-direction:var(--pf-c-divider--FlexDirection);flex-shrink:0;height:auto;justify-content:center;width:100%}.pf-c-divider:after{align-self:stretch;background-color:var(--pf-c-divider--after--BackgroundColor);content:"";flex-basis:calc(var(--pf-c-divider--after--FlexBasis) - var(--pf-c-divider--after--Inset)*2);height:var(--pf-c-divider--after--Height);justify-self:center;width:var(--pf-c-divider--after--Width)}.pf-c-divider.pf-m-vertical{--pf-c-divider--Display:var(--pf-c-divider--m-vertical--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-vertical--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-vertical--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-vertical--after--Height);height:inherit;width:auto}.pf-c-divider.pf-m-vertical:after{flex-basis:calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset))}.pf-c-divider.pf-m-inset-none{--pf-c-divider--after--Inset:0%}.pf-c-divider.pf-m-inset-xs{--pf-c-divider--after--Inset:var(--pf-global--spacer--xs)}.pf-c-divider.pf-m-inset-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--sm)}.pf-c-divider.pf-m-inset-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--md)}.pf-c-divider.pf-m-inset-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--lg)}.pf-c-divider.pf-m-inset-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--xl)}.pf-c-divider.pf-m-inset-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--2xl)}.pf-c-divider.pf-m-inset-3xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--3xl)}@media (min-width:576px){.pf-c-divider.pf-m-horizontal-on-sm{--pf-c-divider--Display:var(--pf-c-divider--m-horizontal--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-horizontal--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-horizontal--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-horizontal--after--Height);height:auto;width:100%}.pf-c-divider.pf-m-horizontal-on-sm:after{flex-basis:calc(var(--pf-c-divider--after--FlexBasis) - var(--pf-c-divider--after--Inset)*2)}.pf-c-divider.pf-m-vertical-on-sm{--pf-c-divider--Display:var(--pf-c-divider--m-vertical--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-vertical--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-vertical--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-vertical--after--Height);height:inherit;width:auto}.pf-c-divider.pf-m-vertical-on-sm:after{flex-basis:calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset))}.pf-c-divider.pf-m-inset-none-on-sm{--pf-c-divider--after--Inset:0%}.pf-c-divider.pf-m-inset-xs-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--xs)}.pf-c-divider.pf-m-inset-sm-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--sm)}.pf-c-divider.pf-m-inset-md-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--md)}.pf-c-divider.pf-m-inset-lg-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--lg)}.pf-c-divider.pf-m-inset-xl-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--xl)}.pf-c-divider.pf-m-inset-2xl-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--2xl)}.pf-c-divider.pf-m-inset-3xl-on-sm{--pf-c-divider--after--Inset:var(--pf-global--spacer--3xl)}}@media (min-width:768px){.pf-c-divider.pf-m-horizontal-on-md{--pf-c-divider--Display:var(--pf-c-divider--m-horizontal--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-horizontal--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-horizontal--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-horizontal--after--Height);height:auto;width:100%}.pf-c-divider.pf-m-horizontal-on-md:after{flex-basis:calc(var(--pf-c-divider--after--FlexBasis) - var(--pf-c-divider--after--Inset)*2)}.pf-c-divider.pf-m-vertical-on-md{--pf-c-divider--Display:var(--pf-c-divider--m-vertical--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-vertical--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-vertical--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-vertical--after--Height);height:inherit;width:auto}.pf-c-divider.pf-m-vertical-on-md:after{flex-basis:calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset))}.pf-c-divider.pf-m-inset-none-on-md{--pf-c-divider--after--Inset:0%}.pf-c-divider.pf-m-inset-xs-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--xs)}.pf-c-divider.pf-m-inset-sm-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--sm)}.pf-c-divider.pf-m-inset-md-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--md)}.pf-c-divider.pf-m-inset-lg-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--lg)}.pf-c-divider.pf-m-inset-xl-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--xl)}.pf-c-divider.pf-m-inset-2xl-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--2xl)}.pf-c-divider.pf-m-inset-3xl-on-md{--pf-c-divider--after--Inset:var(--pf-global--spacer--3xl)}}@media (min-width:992px){.pf-c-divider.pf-m-horizontal-on-lg{--pf-c-divider--Display:var(--pf-c-divider--m-horizontal--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-horizontal--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-horizontal--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-horizontal--after--Height);height:auto;width:100%}.pf-c-divider.pf-m-horizontal-on-lg:after{flex-basis:calc(var(--pf-c-divider--after--FlexBasis) - var(--pf-c-divider--after--Inset)*2)}.pf-c-divider.pf-m-vertical-on-lg{--pf-c-divider--Display:var(--pf-c-divider--m-vertical--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-vertical--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-vertical--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-vertical--after--Height);height:inherit;width:auto}.pf-c-divider.pf-m-vertical-on-lg:after{flex-basis:calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset))}.pf-c-divider.pf-m-inset-none-on-lg{--pf-c-divider--after--Inset:0%}.pf-c-divider.pf-m-inset-xs-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--xs)}.pf-c-divider.pf-m-inset-sm-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--sm)}.pf-c-divider.pf-m-inset-md-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--md)}.pf-c-divider.pf-m-inset-lg-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--lg)}.pf-c-divider.pf-m-inset-xl-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--xl)}.pf-c-divider.pf-m-inset-2xl-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--2xl)}.pf-c-divider.pf-m-inset-3xl-on-lg{--pf-c-divider--after--Inset:var(--pf-global--spacer--3xl)}}@media (min-width:1200px){.pf-c-divider.pf-m-horizontal-on-xl{--pf-c-divider--Display:var(--pf-c-divider--m-horizontal--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-horizontal--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-horizontal--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-horizontal--after--Height);height:auto;width:100%}.pf-c-divider.pf-m-horizontal-on-xl:after{flex-basis:calc(var(--pf-c-divider--after--FlexBasis) - var(--pf-c-divider--after--Inset)*2)}.pf-c-divider.pf-m-vertical-on-xl{--pf-c-divider--Display:var(--pf-c-divider--m-vertical--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-vertical--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-vertical--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-vertical--after--Height);height:inherit;width:auto}.pf-c-divider.pf-m-vertical-on-xl:after{flex-basis:calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset))}.pf-c-divider.pf-m-inset-none-on-xl{--pf-c-divider--after--Inset:0%}.pf-c-divider.pf-m-inset-xs-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--xs)}.pf-c-divider.pf-m-inset-sm-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--sm)}.pf-c-divider.pf-m-inset-md-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--md)}.pf-c-divider.pf-m-inset-lg-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--lg)}.pf-c-divider.pf-m-inset-xl-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--xl)}.pf-c-divider.pf-m-inset-2xl-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--2xl)}.pf-c-divider.pf-m-inset-3xl-on-xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--3xl)}}@media (min-width:1450px){.pf-c-divider.pf-m-horizontal-on-2xl{--pf-c-divider--Display:var(--pf-c-divider--m-horizontal--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-horizontal--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-horizontal--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-horizontal--after--Height);height:auto;width:100%}.pf-c-divider.pf-m-horizontal-on-2xl:after{flex-basis:calc(var(--pf-c-divider--after--FlexBasis) - var(--pf-c-divider--after--Inset)*2)}.pf-c-divider.pf-m-vertical-on-2xl{--pf-c-divider--Display:var(--pf-c-divider--m-vertical--Display);--pf-c-divider--FlexDirection:var(--pf-c-divider--m-vertical--FlexDirection);--pf-c-divider--after--Width:var(--pf-c-divider--m-vertical--after--Width);--pf-c-divider--after--Height:var(--pf-c-divider--m-vertical--after--Height);height:inherit;width:auto}.pf-c-divider.pf-m-vertical-on-2xl:after{flex-basis:calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset))}.pf-c-divider.pf-m-inset-none-on-2xl{--pf-c-divider--after--Inset:0%}.pf-c-divider.pf-m-inset-xs-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--xs)}.pf-c-divider.pf-m-inset-sm-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--sm)}.pf-c-divider.pf-m-inset-md-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--md)}.pf-c-divider.pf-m-inset-lg-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--lg)}.pf-c-divider.pf-m-inset-xl-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--xl)}.pf-c-divider.pf-m-inset-2xl-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--2xl)}.pf-c-divider.pf-m-inset-3xl-on-2xl{--pf-c-divider--after--Inset:var(--pf-global--spacer--3xl)}}.pf-c-check{--pf-c-check--GridGap:var(--pf-global--spacer--xs) var(--pf-global--spacer--sm);--pf-c-check__label--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-check__label--Color:var(--pf-global--Color--100);--pf-c-check__label--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-check__label--FontSize:var(--pf-global--FontSize--md);--pf-c-check__label--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-check__input--Height:var(--pf-c-check__label--FontSize);--pf-c-check__input--MarginTop:calc(((var(--pf-c-check__label--FontSize)*var(--pf-c-check__label--LineHeight)) - var(--pf-c-check__input--Height))/2);--pf-c-check__description--FontSize:var(--pf-global--FontSize--sm);--pf-c-check__description--Color:var(--pf-global--Color--200);--pf-c-check__body--MarginTop:var(--pf-global--spacer--sm);--pf-c-check__label-required--MarginLeft:var(--pf-global--spacer--xs);--pf-c-check__label-required--FontSize:var(--pf-global--FontSize--sm);--pf-c-check__label-required--Color:var(--pf-global--danger-color--100);grid-gap:var(--pf-c-check--GridGap);align-items:start;display:grid;grid-template-columns:auto 1fr;justify-items:start}.pf-c-check.pf-m-standalone{--pf-c-check--GridGap:0;--pf-c-check__input--Height:auto;--pf-c-check__input--MarginTop:0;display:inline-grid;line-height:1}.pf-c-check__label{color:var(--pf-c-check__label--Color);font-size:var(--pf-c-check__label--FontSize);font-weight:var(--pf-c-check__label--FontWeight);line-height:var(--pf-c-check__label--LineHeight)}.pf-c-check__input{height:var(--pf-c-check__input--Height);margin-top:var(--pf-c-check__input--MarginTop)}.pf-c-check__description{color:var(--pf-c-check__description--Color);font-size:var(--pf-c-check__description--FontSize);grid-column:2}.pf-c-check__body{grid-column:2;margin-top:var(--pf-c-check__body--MarginTop)}.pf-c-check__input,.pf-c-check__label,label.pf-c-check{cursor:pointer}.pf-c-check__input.pf-m-disabled,.pf-c-check__input:disabled,.pf-c-check__label.pf-m-disabled,.pf-c-check__label:disabled{--pf-c-check__label--Color:var(--pf-c-check__label--disabled--Color);cursor:not-allowed}.pf-c-check__label-required{color:var(--pf-c-check__label-required--Color);font-size:var(--pf-c-check__label-required--FontSize);margin-left:var(--pf-c-check__label-required--MarginLeft)}.pf-c-chip-group{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-chip-group__list--MarginBottom:calc(var(--pf-global--spacer--xs)*-1);--pf-c-chip-group__list--MarginRight:calc(var(--pf-global--spacer--xs)*-1);--pf-c-chip-group--m-category--PaddingTop:var(--pf-global--spacer--xs);--pf-c-chip-group--m-category--PaddingRight:var(--pf-global--spacer--xs);--pf-c-chip-group--m-category--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-chip-group--m-category--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-chip-group--m-category--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-chip-group--m-category--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-chip-group__label--MarginRight:var(--pf-global--spacer--sm);--pf-c-chip-group__label--FontSize:var(--pf-global--FontSize--sm);--pf-c-chip-group__label--MaxWidth:18ch;--pf-c-chip-group__close--MarginTop:calc(var(--pf-global--spacer--xs)*-1);--pf-c-chip-group__close--MarginBottom:calc(var(--pf-global--spacer--xs)*-1);--pf-c-chip-group__list-item--MarginRight:var(--pf-global--spacer--xs);--pf-c-chip-group__list-item--MarginBottom:var(--pf-global--spacer--xs);color:var(--pf-global--Color--100);max-width:100%}.pf-c-chip-group.pf-m-category{background-color:var(--pf-c-chip-group--m-category--BackgroundColor);border-radius:var(--pf-c-chip-group--m-category--BorderRadius);padding-bottom:var(--pf-c-chip-group--m-category--PaddingBottom);padding-left:var(--pf-c-chip-group--m-category--PaddingLeft);padding-right:var(--pf-c-chip-group--m-category--PaddingRight);padding-top:var(--pf-c-chip-group--m-category--PaddingTop)}.pf-c-chip-group__main{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;min-width:0}.pf-c-chip-group__list{margin-bottom:var(--pf-c-chip-group__list--MarginBottom);margin-right:var(--pf-c-chip-group__list--MarginRight)}.pf-c-chip-group,.pf-c-chip-group__list{align-items:center;display:inline-flex;flex-wrap:wrap;min-width:0}.pf-c-chip-group__list-item{display:inline-flex;margin-bottom:var(--pf-c-chip-group__list-item--MarginBottom);margin-right:var(--pf-c-chip-group__list-item--MarginRight);min-width:0}.pf-c-chip-group__label{font-size:var(--pf-c-chip-group__label--FontSize);margin-right:var(--pf-c-chip-group__label--MarginRight);max-width:var(--pf-c-chip-group__label--MaxWidth);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-chip-group__close{align-self:flex-start;display:flex;margin-bottom:var(--pf-c-chip-group__close--MarginBottom);margin-top:var(--pf-c-chip-group__close--MarginTop)}.pf-c-chip{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-chip--PaddingTop:var(--pf-global--spacer--xs);--pf-c-chip--PaddingRight:var(--pf-global--spacer--sm);--pf-c-chip--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-chip--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-chip--BackgroundColor:var(--pf-global--Color--light-100);--pf-c-chip--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-chip--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-chip--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-chip--before--BorderRadius:var(--pf-c-chip--BorderRadius);--pf-c-chip--m-overflow__text--Color:var(--pf-global--primary-color--100);--pf-c-chip--m-draggable--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-chip--m-draggable--BoxShadow:var(--pf-global--BoxShadow--sm);--pf-c-chip--m-draggable__icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-chip__text--FontSize:var(--pf-global--FontSize--xs);--pf-c-chip__text--Color:var(--pf-global--Color--100);--pf-c-chip__text--MaxWidth:16ch;--pf-c-chip__c-button--PaddingTop:var(--pf-global--spacer--xs);--pf-c-chip__c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-chip__c-button--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-chip__c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-chip__c-button--MarginTop:calc(var(--pf-c-chip--PaddingTop)*-1);--pf-c-chip__c-button--MarginRight:calc(var(--pf-c-chip--PaddingRight)/2*-1);--pf-c-chip__c-button--MarginBottom:calc(var(--pf-c-chip--PaddingBottom)*-1);--pf-c-chip__c-button--FontSize:var(--pf-global--FontSize--xs);--pf-c-chip__c-badge--MarginLeft:var(--pf-global--spacer--xs);--pf-c-chip__icon--MarginLeft:var(--pf-global--spacer--sm);align-items:center;background-color:var(--pf-c-chip--BackgroundColor);border-radius:var(--pf-c-chip--BorderRadius);color:var(--pf-global--Color--100);display:inline-flex;list-style:none;min-width:0;padding:var(--pf-c-chip--PaddingTop) var(--pf-c-chip--PaddingRight) var(--pf-c-chip--PaddingBottom) var(--pf-c-chip--PaddingLeft);position:relative}.pf-c-chip:before{border:var(--pf-c-chip--before--BorderWidth) solid var(--pf-c-chip--before--BorderColor);border-radius:var(--pf-c-chip--before--BorderRadius);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-chip.pf-m-overflow{border:0}.pf-c-chip.pf-m-overflow .pf-c-chip__text{color:var(--pf-c-chip--m-overflow__text--Color)}.pf-c-chip.pf-m-draggable{--pf-c-chip--BackgroundColor:var(--pf-c-chip--m-draggable--BackgroundColor);box-shadow:var(--pf-c-chip--m-draggable--BoxShadow)}.pf-c-chip.pf-m-draggable .pf-c-chip__icon{font-size:var(--pf-c-chip--m-draggable__icon--FontSize)}.pf-c-chip .pf-c-button{--pf-c-button--PaddingTop:var(--pf-c-chip__c-button--PaddingTop);--pf-c-button--PaddingRight:var(--pf-c-chip__c-button--PaddingRight);--pf-c-button--PaddingBottom:var(--pf-c-chip__c-button--PaddingBottom);--pf-c-button--PaddingLeft:var(--pf-c-chip__c-button--PaddingLeft);--pf-c-button--FontSize:var(--pf-c-chip__c-button--FontSize);margin-bottom:var(--pf-c-chip__c-button--MarginBottom);margin-right:var(--pf-c-chip__c-button--MarginRight);margin-top:var(--pf-c-chip__c-button--MarginTop)}.pf-c-chip .pf-c-badge{margin-left:var(--pf-c-chip__c-badge--MarginLeft)}.pf-c-chip__text{color:var(--pf-c-chip__text--Color);font-size:var(--pf-c-chip__text--FontSize);max-width:var(--pf-c-chip__text--MaxWidth);overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.pf-c-chip__icon+.pf-c-chip__text,.pf-c-chip__text+.pf-c-chip__icon{margin-left:var(--pf-c-chip__icon--MarginLeft)}:where(.pf-theme-dark) .pf-c-chip{--pf-c-chip--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-chip--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-chip--m-draggable--BackgroundColor:var(--pf-global--palette--black-600)}.pf-c-form-control{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-form-control--Color:var(--pf-global--Color--100);--pf-c-form-control--FontSize:var(--pf-global--FontSize--md);--pf-c-form-control--LineHeight:var(--pf-global--LineHeight--md);--pf-c-form-control--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-form-control--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-form-control--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-form-control--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-form-control--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-form-control--BorderRadius:0;--pf-c-form-control--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-form-control--Width:100%;--pf-c-form-control--Height:calc(var(--pf-c-form-control--FontSize)*var(--pf-c-form-control--LineHeight) + var(--pf-c-form-control--BorderWidth)*2 + var(--pf-c-form-control--PaddingTop) + var(--pf-c-form-control--PaddingBottom));--pf-c-form-control--inset--base:var(--pf-global--spacer--sm);--pf-c-form-control--PaddingTop:calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));--pf-c-form-control--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));--pf-c-form-control--PaddingRight:var(--pf-c-form-control--inset--base);--pf-c-form-control--PaddingLeft:var(--pf-c-form-control--inset--base);--pf-c-form-control--hover--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-form-control--focus--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-form-control--focus--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));--pf-c-form-control--focus--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-form-control--m-expanded--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-form-control--m-expanded--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));--pf-c-form-control--m-expanded--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-form-control--placeholder--Color:var(--pf-global--Color--dark-200);--pf-c-form-control--placeholder--child--Color:var(--pf-global--Color--100);--pf-c-form-control--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-form-control--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-form-control--disabled--BorderColor:transparent;--pf-c-form-control--readonly--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-form-control--readonly--hover--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-form-control--readonly--focus--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));--pf-c-form-control--readonly--focus--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-form-control--readonly--focus--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-form-control--readonly--m-plain--BackgroundColor:transparent;--pf-c-form-control--readonly--m-plain--inset--base:0;--pf-c-form-control--success--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-form-control--success--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--success--BorderBottomWidth));--pf-c-form-control--success--BorderBottomColor:var(--pf-global--success-color--100);--pf-c-form-control--success--PaddingRight:var(--pf-global--spacer--xl);--pf-c-form-control--success--BackgroundPositionX:calc(100% - var(--pf-c-form-control--PaddingLeft));--pf-c-form-control--success--BackgroundPositionY:center;--pf-c-form-control--success--BackgroundPosition:var(--pf-c-form-control--success--BackgroundPositionX) var(--pf-c-form-control--success--BackgroundPositionY);--pf-c-form-control--success--BackgroundSizeX:var(--pf-c-form-control--FontSize);--pf-c-form-control--success--BackgroundSizeY:var(--pf-c-form-control--FontSize);--pf-c-form-control--success--BackgroundSize:var(--pf-c-form-control--success--BackgroundSizeX) var(--pf-c-form-control--success--BackgroundSizeY);--pf-c-form-control--success--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 512 512%27%3E%3Cpath fill=%27%233e8635%27 d=%27M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z%27/%3E%3C/svg%3E");--pf-c-form-control--m-warning--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-form-control--m-warning--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--m-warning--BorderBottomWidth));--pf-c-form-control--m-warning--BorderBottomColor:var(--pf-global--warning-color--100);--pf-c-form-control--m-warning--PaddingRight:var(--pf-global--spacer--xl);--pf-c-form-control--m-warning--BackgroundPositionX:calc(100% - var(--pf-c-form-control--PaddingLeft) + 0.0625rem);--pf-c-form-control--m-warning--BackgroundPositionY:center;--pf-c-form-control--m-warning--BackgroundPosition:var(--pf-c-form-control--m-warning--BackgroundPositionX) var(--pf-c-form-control--m-warning--BackgroundPositionY);--pf-c-form-control--m-warning--BackgroundSizeX:1.25rem;--pf-c-form-control--m-warning--BackgroundSizeY:var(--pf-c-form-control--FontSize);--pf-c-form-control--m-warning--BackgroundSize:var(--pf-c-form-control--m-warning--BackgroundSizeX) var(--pf-c-form-control--m-warning--BackgroundSizeY);--pf-c-form-control--m-warning--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 512 512%27%3E%3Cpath fill=%27%23f0ab00%27 d=%27M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z%27/%3E%3C/svg%3E");--pf-c-form-control--invalid--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-form-control--invalid--PaddingBottom:calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--invalid--BorderBottomWidth));--pf-c-form-control--invalid--BorderBottomColor:var(--pf-global--danger-color--100);--pf-c-form-control--invalid--PaddingRight:var(--pf-global--spacer--xl);--pf-c-form-control--invalid--BackgroundPositionX:calc(100% - var(--pf-c-form-control--PaddingLeft));--pf-c-form-control--invalid--BackgroundPositionY:center;--pf-c-form-control--invalid--BackgroundPosition:var(--pf-c-form-control--invalid--BackgroundPositionX) var(--pf-c-form-control--invalid--BackgroundPositionY);--pf-c-form-control--invalid--BackgroundSizeX:var(--pf-c-form-control--FontSize);--pf-c-form-control--invalid--BackgroundSizeY:var(--pf-c-form-control--FontSize);--pf-c-form-control--invalid--BackgroundSize:var(--pf-c-form-control--invalid--BackgroundSizeX) var(--pf-c-form-control--invalid--BackgroundSizeY);--pf-c-form-control--invalid--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 512 512%27%3E%3Cpath fill=%27%23c9190b%27 d=%27M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z%27/%3E%3C/svg%3E");--pf-c-form-control--invalid--exclamation--Background:var(--pf-c-form-control--invalid--BackgroundUrl) var(--pf-c-form-control--invalid--BackgroundPosition) /var(--pf-c-form-control--invalid--BackgroundSize) no-repeat;--pf-c-form-control--invalid--Background:var(--pf-c-form-control--BackgroundColor) var(--pf-c-form-control--invalid--exclamation--Background);--pf-c-form-control--m-search--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-form-control--m-search--BackgroundPosition:var(--pf-c-form-control--PaddingRight);--pf-c-form-control--m-search--BackgroundSize:var(--pf-c-form-control--FontSize) var(--pf-c-form-control--FontSize);--pf-c-form-control--m-search--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 512 512%27%3E%3Cpath fill=%27%236a6e73%27 d=%27M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z%27/%3E%3C/svg%3E");--pf-c-form-control--m-icon--PaddingRight:calc(var(--pf-c-form-control--inset--base) + var(--pf-c-form-control--m-icon--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer));--pf-c-form-control--m-icon--BackgroundUrl:none;--pf-c-form-control--m-icon--BackgroundPositionX:calc(100% - var(--pf-c-form-control--inset--base));--pf-c-form-control--m-icon--BackgroundPositionY:center;--pf-c-form-control--m-icon--BackgroundSizeX:var(--pf-c-form-control--FontSize);--pf-c-form-control--m-icon--BackgroundSizeY:var(--pf-c-form-control--FontSize);--pf-c-form-control--m-icon--icon--spacer:var(--pf-global--spacer--sm);--pf-c-form-control--m-icon--icon--PaddingRight:calc(var(--pf-c-form-control--inset--base) + var(--pf-c-form-control--invalid--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer) + var(--pf-c-form-control--m-icon--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer));--pf-c-form-control--m-icon--icon--BackgroundPositionX:calc(var(--pf-c-form-control--m-icon--BackgroundPositionX) - var(--pf-c-form-control--m-icon--icon--spacer) - var(--pf-c-form-control--invalid--BackgroundSizeX));--pf-c-form-control--m-icon--invalid--BackgroundUrl:var(--pf-c-form-control--invalid--BackgroundUrl),var(--pf-c-form-control--m-icon--BackgroundUrl);--pf-c-form-control--m-icon--invalid--BackgroundPosition:var(--pf-c-form-control--invalid--BackgroundPosition),var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);--pf-c-form-control--m-icon--invalid--BackgroundSize:var(--pf-c-form-control--invalid--BackgroundSize),var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);--pf-c-form-control--m-icon--success--BackgroundUrl:var(--pf-c-form-control--success--BackgroundUrl),var(--pf-c-form-control--m-icon--BackgroundUrl);--pf-c-form-control--m-icon--success--BackgroundPosition:var(--pf-c-form-control--success--BackgroundPosition),var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);--pf-c-form-control--m-icon--success--BackgroundSize:var(--pf-c-form-control--success--BackgroundSize),var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);--pf-c-form-control--m-icon--m-warning--BackgroundUrl:var(--pf-c-form-control--m-warning--BackgroundUrl),var(--pf-c-form-control--m-icon--BackgroundUrl);--pf-c-form-control--m-icon--m-warning--BackgroundPosition:var(--pf-c-form-control--m-warning--BackgroundPosition),var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);--pf-c-form-control--m-icon--m-warning--BackgroundSize:var(--pf-c-form-control--m-warning--BackgroundSize),var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);--pf-c-form-control--m-calendar--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 512 512%27%3E%3Cpath fill=%27%236a6e73%27 d=%27M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z%27/%3E%3C/svg%3E");--pf-c-form-control--m-clock--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 512 512%27%3E%3Cpath fill=%27%236a6e73%27 d=%27M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z%27/%3E%3C/svg%3E");--pf-c-form-control__select--PaddingRight:calc(var(--pf-global--spacer--lg) + var(--pf-c-form-control--BorderWidth) + var(--pf-c-form-control--BorderWidth));--pf-c-form-control__select--PaddingLeft:calc(var(--pf-global--spacer--sm) - var(--pf-c-form-control--BorderWidth));--pf-c-form-control__select--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 320 512%27%3E%3Cpath fill=%27%23urrentColor%27 d=%27M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z%27/%3E%3C/svg%3E");--pf-c-form-control__select--BackgroundSize:.625em;--pf-c-form-control__select--BackgroundPositionX:calc(100% - var(--pf-global--spacer--md) + 1px);--pf-c-form-control__select--BackgroundPositionY:center;--pf-c-form-control__select--BackgroundPosition:var(--pf-c-form-control__select--BackgroundPositionX) var(--pf-c-form-control__select--BackgroundPositionY);--pf-c-form-control__select--success--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-form-control__select--success--BackgroundPosition:calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg));--pf-c-form-control__select--m-warning--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-form-control__select--m-warning--BackgroundPosition:calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg) + 0.0625rem);--pf-c-form-control__select--invalid--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-form-control__select--invalid--BackgroundPosition:calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg));--pf-c-form-control--textarea--Width:var(--pf-c-form-control--Width);--pf-c-form-control--textarea--Height:auto;--pf-c-form-control--textarea--success--BackgroundPositionY:var(--pf-c-form-control--PaddingLeft);--pf-c-form-control--textarea--m-warning--BackgroundPositionY:var(--pf-c-form-control--PaddingLeft);--pf-c-form-control--textarea--invalid--BackgroundPositionY:var(--pf-c-form-control--PaddingLeft);--pf-c-form-control--m-icon-sprite--success--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#success);--pf-c-form-control--m-icon-sprite--m-warning--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#warning);--pf-c-form-control--m-icon-sprite--invalid--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#invalid);--pf-c-form-control--m-icon-sprite__select--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#select);--pf-c-form-control--m-icon-sprite--m-search--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#search);--pf-c-form-control--m-icon-sprite--m-calendar--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#calendar);--pf-c-form-control--m-icon-sprite--m-clock--BackgroundUrl:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnNwcml0ZXtkaXNwbGF5Om5vbmV9LnNwcml0ZTp0YXJnZXR7ZGlzcGxheTppbmxpbmV9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUwNCAyNTZjMCAxMzYuOTY3LTExMS4wMzMgMjQ4LTI0OCAyNDhTOCAzOTIuOTY3IDggMjU2IDExOS4wMzMgOCAyNTYgOHMyNDggMTExLjAzMyAyNDggMjQ4ek0yMjcuMzE0IDM4Ny4zMTRsMTg0LTE4NGM2LjI0OC02LjI0OCA2LjI0OC0xNi4zNzkgMC0yMi42MjdsLTIyLjYyNy0yMi42MjdjLTYuMjQ4LTYuMjQ5LTE2LjM3OS02LjI0OS0yMi42MjggMEwyMTYgMzA4LjExOGwtNzAuMDU5LTcwLjA1OWMtNi4yNDgtNi4yNDgtMTYuMzc5LTYuMjQ4LTIyLjYyOCAwbC0yMi42MjcgMjIuNjI3Yy02LjI0OCA2LjI0OC02LjI0OCAxNi4zNzkgMCAyMi42MjdsMTA0IDEwNGM2LjI0OSA2LjI0OSAxNi4zNzkgNi4yNDkgMjIuNjI4LjAwMXoiIGZpbGw9IiMzZTg2MzUiIGNsYXNzPSJzcHJpdGUiIGlkPSJzdWNjZXNzIi8+PHBhdGggZD0iTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDYgNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eiIgZmlsbD0iI2YwYWIwMCIgY2xhc3M9InNwcml0ZSIgaWQ9Indhcm5pbmciLz48cGF0aCBkPSJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4em0tMjQ4IDUwYy0yNS40MDUgMC00NiAyMC41OTUtNDYgNDZzMjAuNTk1IDQ2IDQ2IDQ2IDQ2LTIwLjU5NSA0Ni00Ni0yMC41OTUtNDYtNDYtNDZ6bS00My42NzMtMTY1LjM0NiA3LjQxOCAxMzZjLjM0NyA2LjM2NCA1LjYwOSAxMS4zNDYgMTEuOTgyIDExLjM0Nmg0OC41NDZjNi4zNzMgMCAxMS42MzUtNC45ODIgMTEuOTgyLTExLjM0Nmw3LjQxOC0xMzZjLjM3NS02Ljg3NC01LjA5OC0xMi42NTQtMTEuOTgyLTEyLjY1NGgtNjMuMzgzYy02Ljg4NCAwLTEyLjM1NiA1Ljc4LTExLjk4MSAxMi42NTR6IiBmaWxsPSIjYzkxOTBiIiBjbGFzcz0ic3ByaXRlIiBpZD0iaW52YWxpZCIvPjxwYXRoIGQ9Ik0zMS4zIDE5MmgyNTcuM2MxNy44IDAgMjYuNyAyMS41IDE0LjEgMzQuMUwxNzQuMSAzNTQuOGMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBMMTcuMiAyMjYuMUM0LjYgMjEzLjUgMTMuNSAxOTIgMzEuMyAxOTJ6IiBmaWxsPSIjMTUxNTE1IiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VsZWN0Ii8+PHBhdGggZD0iTTUwNSA0NDIuNyA0MDUuMyAzNDNjLTQuNS00LjUtMTAuNi03LTE3LTdIMzcyYzI3LjYtMzUuMyA0NC03OS43IDQ0LTEyOEM0MTYgOTMuMSAzMjIuOSAwIDIwOCAwUzAgOTMuMSAwIDIwOHM5My4xIDIwOCAyMDggMjA4YzQ4LjMgMCA5Mi43LTE2LjQgMTI4LTQ0djE2LjNjMCA2LjQgMi41IDEyLjUgNyAxN2w5OS43IDk5LjdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMjguMy0yOC4zYzkuNC05LjQgOS40LTI0LjYuMS0zNHpNMjA4IDMzNmMtNzAuNyAwLTEyOC01Ny4yLTEyOC0xMjggMC03MC43IDU3LjItMTI4IDEyOC0xMjggNzAuNyAwIDEyOCA1Ny4yIDEyOCAxMjggMCA3MC43LTU3LjIgMTI4LTEyOCAxMjh6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0ic2VhcmNoIi8+PHBhdGggZD0iTTAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDM1MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJIMHYyNzJ6bTMyMC0xOTZjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTE5MiAyNjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJoLTQwYy02LjYgMC0xMi01LjQtMTItMTJ2LTQwem0wIDEyOGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMmgtNDBjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTY0IDI2OGMwLTYuNiA1LjQtMTIgMTItMTJoNDBjNi42IDAgMTIgNS40IDEyIDEydjQwYzAgNi42LTUuNCAxMi0xMiAxMkg3NmMtNi42IDAtMTItNS40LTEyLTEydi00MHptMCAxMjhjMC02LjYgNS40LTEyIDEyLTEyaDQwYzYuNiAwIDEyIDUuNCAxMiAxMnY0MGMwIDYuNi01LjQgMTItMTIgMTJINzZjLTYuNiAwLTEyLTUuNC0xMi0xMnYtNDB6TTQwMCA2NGgtNDhWMTZjMC04LjgtNy4yLTE2LTE2LTE2aC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2djQ4SDE2MFYxNmMwLTguOC03LjItMTYtMTYtMTZoLTMyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhoNDQ4di00OGMwLTI2LjUtMjEuNS00OC00OC00OHoiIGZpbGw9IiM2YTZlNzMiIGNsYXNzPSJzcHJpdGUiIGlkPSJjYWxlbmRhciIvPjxwYXRoIGQ9Ik0yNTYgOEMxMTkgOCA4IDExOSA4IDI1NnMxMTEgMjQ4IDI0OCAyNDggMjQ4LTExMSAyNDgtMjQ4UzM5MyA4IDI1NiA4em0wIDQ0OGMtMTEwLjUgMC0yMDAtODkuNS0yMDAtMjAwUzE0NS41IDU2IDI1NiA1NnMyMDAgODkuNSAyMDAgMjAwLTg5LjUgMjAwLTIwMCAyMDB6bTYxLjgtMTA0LjQtODQuOS02MS43Yy0zLjEtMi4zLTQuOS01LjktNC45LTkuN1YxMTZjMC02LjYgNS40LTEyIDEyLTEyaDMyYzYuNiAwIDEyIDUuNCAxMiAxMnYxNDEuN2w2Ni44IDQ4LjZjNS40IDMuOSA2LjUgMTEuNCAyLjYgMTYuOEwzMzQuNiAzNDljLTMuOSA1LjMtMTEuNCA2LjUtMTYuOCAyLjZ6IiBmaWxsPSIjNmE2ZTczIiBjbGFzcz0ic3ByaXRlIiBpZD0iY2xvY2siLz48L3N2Zz4=#clock);--pf-c-form-control--m-icon-sprite__select--BackgroundSize:var(--pf-c-form-control--FontSize);--pf-c-form-control--m-icon-sprite__select--BackgroundPositionX:calc(100% - var(--pf-global--spacer--md) + 7px);--pf-c-form-control--m-icon-sprite__select--success--BackgroundPosition:calc(100% - var(--pf-global--spacer--md) + 1px - var(--pf-global--spacer--lg));--pf-c-form-control--m-icon-sprite__select--m-warning--BackgroundPosition:calc(100% - var(--pf-global--spacer--md) - var(--pf-global--spacer--lg) + 0.0625rem);--pf-c-form-control--m-icon-sprite__select--invalid--BackgroundPosition:calc(100% - var(--pf-global--spacer--md) - var(--pf-global--spacer--lg));-moz-appearance:none;-webkit-appearance:none;background-color:var(--pf-c-form-control--BackgroundColor);background-repeat:no-repeat;border:var(--pf-c-form-control--BorderWidth) solid;border-color:var(--pf-c-form-control--BorderTopColor) var(--pf-c-form-control--BorderRightColor) var(--pf-c-form-control--BorderBottomColor) var(--pf-c-form-control--BorderLeftColor);border-radius:var(--pf-c-form-control--BorderRadius);color:var(--pf-c-form-control--Color);font-size:var(--pf-c-form-control--FontSize);line-height:var(--pf-c-form-control--LineHeight);padding:var(--pf-c-form-control--PaddingTop) var(--pf-c-form-control--PaddingRight) var(--pf-c-form-control--PaddingBottom) var(--pf-c-form-control--PaddingLeft);width:var(--pf-c-form-control--Width)}.pf-c-form-control::placeholder{color:var(--pf-c-form-control--placeholder--Color)}.pf-c-form-control:not(textarea){height:var(--pf-c-form-control--Height);text-overflow:ellipsis}.pf-c-form-control[readonly]{background-color:var(--pf-c-form-control--readonly--BackgroundColor)}.pf-c-form-control[readonly]:not(.pf-m-success):not([aria-invalid=true]):hover{--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--readonly--hover--BorderBottomColor)}.pf-c-form-control[readonly]:not(.pf-m-success):not([aria-invalid=true]):focus{--pf-c-form-control--focus--PaddingBottom:var(--pf-c-form-control--readonly--focus--PaddingBottom);--pf-c-form-control--focus--BorderBottomWidth:var(--pf-c-form-control--readonly--focus--BorderBottomWidth);--pf-c-form-control--focus--BorderBottomColor:var(--pf-c-form-control--readonly--focus--BorderBottomColor)}.pf-c-form-control[readonly].pf-m-plain{--pf-c-form-control--readonly--BackgroundColor:var(--pf-c-form-control--readonly--m-plain--BackgroundColor);--pf-c-form-control--inset--base:var(--pf-c-form-control--readonly--m-plain--inset--base);border-color:transparent}.pf-c-form-control:hover{--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--hover--BorderBottomColor)}.pf-c-form-control:focus{--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--focus--BorderBottomColor);border-bottom-width:var(--pf-c-form-control--focus--BorderBottomWidth);padding-bottom:var(--pf-c-form-control--focus--PaddingBottom)}.pf-c-form-control.pf-m-expanded{--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--m-expanded--BorderBottomColor);border-bottom-width:var(--pf-c-form-control--m-expanded--BorderBottomWidth);padding-bottom:var(--pf-c-form-control--m-expanded--PaddingBottom)}.pf-c-form-control:disabled{--pf-c-form-control--BackgroundColor:var(--pf-c-form-control--disabled--BackgroundColor);border-color:var(--pf-c-form-control--disabled--BorderColor);color:var(--pf-c-form-control--disabled--Color);cursor:not-allowed}.pf-c-form-control[aria-invalid=true]{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--invalid--PaddingRight);--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--invalid--BorderBottomColor);background-image:var(--pf-c-form-control--invalid--BackgroundUrl);background-position:var(--pf-c-form-control--invalid--BackgroundPosition);background-size:var(--pf-c-form-control--invalid--BackgroundSize);border-bottom-width:var(--pf-c-form-control--invalid--BorderBottomWidth);padding-bottom:var(--pf-c-form-control--invalid--PaddingBottom)}.pf-c-form-control[aria-invalid=true].pf-m-icon{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--m-icon--icon--PaddingRight);background-image:var(--pf-c-form-control--m-icon--invalid--BackgroundUrl);background-position:var(--pf-c-form-control--m-icon--invalid--BackgroundPosition);background-size:var(--pf-c-form-control--m-icon--invalid--BackgroundSize)}.pf-c-form-control.pf-m-success{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--success--PaddingRight);--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--success--BorderBottomColor);background-image:var(--pf-c-form-control--success--BackgroundUrl);background-position:var(--pf-c-form-control--success--BackgroundPosition);background-size:var(--pf-c-form-control--success--BackgroundSize);border-bottom-width:var(--pf-c-form-control--success--BorderBottomWidth);padding-bottom:var(--pf-c-form-control--success--PaddingBottom)}.pf-c-form-control.pf-m-success.pf-m-icon{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--m-icon--icon--PaddingRight);background-image:var(--pf-c-form-control--m-icon--success--BackgroundUrl);background-position:var(--pf-c-form-control--m-icon--success--BackgroundPosition);background-size:var(--pf-c-form-control--m-icon--success--BackgroundSize)}.pf-c-form-control.pf-m-warning{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--m-warning--PaddingRight);--pf-c-form-control--BorderBottomColor:var(--pf-c-form-control--m-warning--BorderBottomColor);background-image:var(--pf-c-form-control--m-warning--BackgroundUrl);background-position:var(--pf-c-form-control--m-warning--BackgroundPosition);background-size:var(--pf-c-form-control--m-warning--BackgroundSize);border-bottom-width:var(--pf-c-form-control--m-warning--BorderBottomWidth);padding-bottom:var(--pf-c-form-control--m-warning--PaddingBottom)}.pf-c-form-control.pf-m-warning.pf-m-icon{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--m-icon--icon--PaddingRight);background-image:var(--pf-c-form-control--m-icon--m-warning--BackgroundUrl);background-position:var(--pf-c-form-control--m-icon--m-warning--BackgroundPosition);background-size:var(--pf-c-form-control--m-icon--m-warning--BackgroundSize)}.pf-c-form-control.pf-m-search{--pf-c-form-control--PaddingLeft:var(--pf-c-form-control--m-search--PaddingLeft);background-image:var(--pf-c-form-control--m-search--BackgroundUrl);background-position:var(--pf-c-form-control--m-search--BackgroundPosition);background-size:var(--pf-c-form-control--m-search--BackgroundSize)}.pf-c-form-control.pf-m-icon{--pf-c-form-control--PaddingRight:var(--pf-c-form-control--m-icon--PaddingRight);background-image:var(--pf-c-form-control--m-icon--BackgroundUrl);background-position:var(--pf-c-form-control--m-icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);background-size:var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY)}.pf-c-form-control.pf-m-icon.pf-m-calendar{--pf-c-form-control--m-icon--BackgroundUrl:var(--pf-c-form-control--m-calendar--BackgroundUrl)}.pf-c-form-control.pf-m-icon.pf-m-clock{--pf-c-form-control--m-icon--BackgroundUrl:var(--pf-c-form-control--m-clock--BackgroundUrl)}.pf-c-form-control.pf-m-icon-sprite{--pf-c-form-control--success--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite--success--BackgroundUrl);--pf-c-form-control--m-warning--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite--m-warning--BackgroundUrl);--pf-c-form-control--invalid--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite--invalid--BackgroundUrl);--pf-c-form-control__select--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite__select--BackgroundUrl);--pf-c-form-control--m-search--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite--m-search--BackgroundUrl);--pf-c-form-control--m-calendar--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite--m-calendar--BackgroundUrl);--pf-c-form-control--m-clock--BackgroundUrl:var(--pf-c-form-control--m-icon-sprite--m-clock--BackgroundUrl);--pf-c-form-control__select--BackgroundSize:var(--pf-c-form-control--m-icon-sprite__select--BackgroundSize);--pf-c-form-control__select--BackgroundPositionX:var(--pf-c-form-control--m-icon-sprite__select--BackgroundPositionX);--pf-c-form-control__select--success--BackgroundPosition:var(--pf-c-form-control--m-icon-sprite__select--success--BackgroundPosition);--pf-c-form-control__select--m-warning--BackgroundPosition:var(--pf-c-form-control--m-icon-sprite__select--m-warning--BackgroundPosition);--pf-c-form-control__select--invalid--BackgroundPosition:var(--pf-c-form-control--m-icon-sprite__select--invalid--BackgroundPosition)}select.pf-c-form-control{--pf-c-form-control--PaddingRight:var(--pf-c-form-control__select--PaddingRight);--pf-c-form-control--PaddingLeft:var(--pf-c-form-control__select--PaddingLeft);background-image:var(--pf-c-form-control__select--BackgroundUrl);background-position:var(--pf-c-form-control__select--BackgroundPosition);background-size:var(--pf-c-form-control__select--BackgroundSize)}@-moz-document url-prefix(){select.pf-c-form-control{--pf-c-form-control--PaddingRight:calc(var(--pf-c-form-control__select--PaddingRight) - 1px);--pf-c-form-control--PaddingLeft:calc(var(--pf-c-form-control__select--PaddingLeft) - 4px)}}select.pf-c-form-control[aria-invalid=true]{--pf-c-form-control--PaddingRight:var(--pf-c-form-control__select--invalid--PaddingRight);--pf-c-form-control--invalid--BackgroundPosition:var(--pf-c-form-control__select--invalid--BackgroundPosition);background-image:var(--pf-c-form-control__select--BackgroundUrl),var(--pf-c-form-control--invalid--BackgroundUrl);background-position:var(--pf-c-form-control__select--BackgroundPosition),var(--pf-c-form-control--invalid--BackgroundPosition);background-size:var(--pf-c-form-control__select--BackgroundSize),var(--pf-c-form-control--invalid--BackgroundSize)}select.pf-c-form-control.pf-m-success{--pf-c-form-control--PaddingRight:var(--pf-c-form-control__select--success--PaddingRight);--pf-c-form-control--success--BackgroundPosition:var(--pf-c-form-control__select--success--BackgroundPosition);background-image:var(--pf-c-form-control__select--BackgroundUrl),var(--pf-c-form-control--success--BackgroundUrl);background-position:var(--pf-c-form-control__select--BackgroundPosition),var(--pf-c-form-control--success--BackgroundPosition);background-size:var(--pf-c-form-control__select--BackgroundSize),var(--pf-c-form-control--success--BackgroundSize)}select.pf-c-form-control.pf-m-warning{--pf-c-form-control--PaddingRight:var(--pf-c-form-control__select--m-warning--PaddingRight);background-image:var(--pf-c-form-control__select--BackgroundUrl),var(--pf-c-form-control--m-warning--BackgroundUrl);background-position:var(--pf-c-form-control__select--BackgroundPosition),var(--pf-c-form-control__select--m-warning--BackgroundPosition);background-size:var(--pf-c-form-control__select--BackgroundSize),var(--pf-c-form-control--m-warning--BackgroundSize)}select.pf-c-form-control.pf-m-placeholder{color:var(--pf-c-form-control--placeholder--Color)}select.pf-c-form-control.pf-m-placeholder *{color:var(--pf-c-form-control--placeholder--child--Color)}select.pf-c-form-control.pf-m-placeholder :disabled{color:revert}textarea.pf-c-form-control{--pf-c-form-control--success--BackgroundPositionY:var(--pf-c-form-control--textarea--success--BackgroundPositionY);--pf-c-form-control--invalid--BackgroundPositionY:var(--pf-c-form-control--textarea--invalid--BackgroundPositionY);--pf-c-form-control--m-warning--BackgroundPositionY:var(--pf-c-form-control--textarea--m-warning--BackgroundPositionY);height:var(--pf-c-form-control--textarea--Height);vertical-align:bottom;width:var(--pf-c-form-control--textarea--Width)}.pf-c-form-control.pf-m-resize-vertical{resize:vertical}.pf-c-form-control.pf-m-resize-horizontal{resize:horizontal}:where(.pf-theme-dark) .pf-c-form-control{--pf-c-form-control__select--BackgroundUrl:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 320 512%27%3E%3Cpath fill=%27%23e0e0e0%27 d=%27M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z%27/%3E%3C/svg%3E");--pf-c-form-control--BorderTopColor:transparent;--pf-c-form-control--BorderRightColor:transparent;--pf-c-form-control--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-form-control--BorderLeftColor:transparent;--pf-c-form-control--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-form-control--disabled--Color:var(--pf-global--disabled-color--300);--pf-c-form-control--disabled--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-form-control--readonly--BackgroundColor:var(--pf-global--BackgroundColor--400);color:var(--pf-global--Color--100)}:where(.pf-theme-dark) .pf-c-form-control::-webkit-calendar-picker-indicator{filter:invert(1)}:where(.pf-theme-dark) .pf-c-form-control[readonly]{border-bottom-color:var(--pf-global--palette--black-700)}:where(.pf-theme-dark) .pf-c-form-control:disabled{color:var(--pf-global--palette--black-100)}.pf-c-form{--pf-c-form--GridGap:var(--pf-global--gutter--md);--pf-c-form__group--m-action--MarginTop:var(--pf-global--spacer--xl);--pf-c-form--m-horizontal__group-label--md--GridColumnWidth:9.375rem;--pf-c-form--m-horizontal__group-label--md--GridColumnGap:var(--pf-global--spacer--md);--pf-c-form--m-horizontal__group-control--md--GridColumnWidth:1fr;--pf-c-form--m-limit-width--MaxWidth:55rem;--pf-c-form--m-horizontal__group-label--md--PaddingTop:calc((((var(--pf-global--FontSize--md)*var(--pf-global--LineHeight--md)) + (2*var(--pf-global--BorderWidth--sm))) - var(--pf-global--FontSize--md))/2 + var(--pf-global--FontSize--md) - ((var(--pf-global--FontSize--sm)*var(--pf-global--LineHeight--sm)) - var(--pf-global--FontSize--sm))/2 - var(--pf-global--FontSize--sm) + var(--pf-global--BorderWidth--sm));--pf-c-form__group-label--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop:0;--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY:calc(((var(--pf-global--FontSize--sm)*var(--pf-global--LineHeight--sm)) - var(--pf-global--FontSize--sm))/2 + var(--pf-global--FontSize--sm) - ((var(--pf-global--FontSize--md)*var(--pf-global--LineHeight--sm)) - var(--pf-global--FontSize--md))/2 - var(--pf-global--FontSize--md));--pf-c-form__label--FontSize:var(--pf-global--FontSize--sm);--pf-c-form__label--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-form__label--m-disabled--Color:var(--pf-global--disabled-color--100);--pf-c-form__label--hover--Cursor:pointer;--pf-c-form__label--m-disabled--hover--Cursor:not-allowed;--pf-c-form__label-text--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-form__label-required--MarginLeft:var(--pf-global--spacer--xs);--pf-c-form__label-required--FontSize:var(--pf-global--FontSize--sm);--pf-c-form__label-required--Color:var(--pf-global--danger-color--100);--pf-c-form__group-label-help--PaddingTop:var(--pf-global--spacer--xs);--pf-c-form__group-label-help--PaddingRight:var(--pf-global--spacer--xs);--pf-c-form__group-label-help--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-form__group-label-help--PaddingLeft:var(--pf-global--spacer--xs);--pf-c-form__group-label-help--MarginTop:calc(var(--pf-c-form__group-label-help--PaddingTop)*-1);--pf-c-form__group-label-help--MarginRight:calc(var(--pf-c-form__group-label-help--PaddingRight)*-1);--pf-c-form__group-label-help--MarginBottom:calc(var(--pf-c-form__group-label-help--PaddingBottom)*-1);--pf-c-form__group-label-help--MarginLeft:calc(var(--pf-c-form__group-label-help--PaddingLeft)*-1 + var(--pf-global--spacer--xs));--pf-c-form__group-label-help--FontSize:var(--pf-global--FontSize--sm);--pf-c-form__group-label-help--TranslateY:0.125rem;--pf-c-form__group-label-help--Color:var(--pf-global--Color--200);--pf-c-form__group-label-help--hover--Color:var(--pf-global--Color--100);--pf-c-form__group-label-help--focus--Color:var(--pf-global--Color--100);--pf-c-form__group-label-info--MarginLeft:var(--pf-global--spacer--sm);--pf-c-form__group-label-info--FontSize:var(--pf-global--FontSize--sm);--pf-c-form__group-control--m-inline--child--MarginRight:var(--pf-global--spacer--lg);--pf-c-form__group-control__helper-text--MarginBottom:var(--pf-global--spacer--xs);--pf-c-grid__group-control--m-stack--Gap:var(--pf-global--spacer--sm);--pf-c-grid__group-control--m-stack__helper-text--MarginTop:calc(var(--pf-c-grid__group-control--m-stack--Gap)*-1 + var(--pf-c-form__helper-text--MarginTop--base));--pf-c-form__actions--child--MarginTop:var(--pf-global--spacer--sm);--pf-c-form__actions--child--MarginRight:var(--pf-global--spacer--sm);--pf-c-form__actions--child--MarginBottom:var(--pf-global--spacer--sm);--pf-c-form__actions--child--MarginLeft:var(--pf-global--spacer--sm);--pf-c-form__actions--MarginTop:calc(var(--pf-c-form__actions--child--MarginTop)*-1);--pf-c-form__actions--MarginRight:calc(var(--pf-c-form__actions--child--MarginRight)*-1);--pf-c-form__actions--MarginBottom:calc(var(--pf-c-form__actions--child--MarginBottom)*-1);--pf-c-form__actions--MarginLeft:calc(var(--pf-c-form__actions--child--MarginLeft)*-1);--pf-c-form__helper-text--MarginTop--base:var(--pf-global--spacer--xs);--pf-c-form__helper-text--MarginTop:var(--pf-c-form__helper-text--MarginTop--base);--pf-c-form__helper-text--FontSize:var(--pf-global--FontSize--sm);--pf-c-form__helper-text--Color:var(--pf-global--Color--100);--pf-c-form__helper-text-icon--FontSize:var(--pf-global--FontSize--md);--pf-c-form__helper-text-icon--MarginRight:var(--pf-global--spacer--xs);--pf-c-form__helper-text--m-success--Color:var(--pf-global--success-color--200);--pf-c-form__helper-text--m-warning--Color:var(--pf-global--warning-color--200);--pf-c-form__helper-text--m-error--Color:var(--pf-global--danger-color--100);--pf-c-form__section--MarginTop:var(--pf-global--spacer--xl);--pf-c-form__section--Gap:var(--pf-global--gutter--md);--pf-c-form__section-title--FontSize:var(--pf-global--FontSize--lg);--pf-c-form__section-title--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-form__section-title--MarginBottom:calc(var(--pf-global--spacer--sm)*-1);--pf-c-form__field-group--border-width-base:var(--pf-global--BorderWidth--sm);--pf-c-form__field-group--BorderTopWidth:var(--pf-c-form__field-group--border-width-base);--pf-c-form__field-group--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-form__field-group--BorderBottomWidth:var(--pf-c-form__field-group--border-width-base);--pf-c-form__field-group--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-form__field-group--field-group--MarginTop:calc(var(--pf-c-form--GridGap)*-1);--pf-c-form__field-group--GridTemplateColumns--toggle:calc(var(--pf-global--spacer--md)*2 + var(--pf-c-form__field-group-toggle-icon--MinWidth) + var(--pf-global--spacer--xs));--pf-c-form__field-group-toggle--PaddingTop:var(--pf-global--spacer--md);--pf-c-form__field-group-toggle--PaddingRight:var(--pf-global--spacer--xs);--pf-c-form__field-group__field-group__field-group-toggle--PaddingTop:var(--pf-global--spacer--lg);--pf-c-form__field-group-header-toggle--BorderWidth--base:var(--pf-global--BorderWidth--sm);--pf-c-form__field-group__field-group--field-group__field-group-toggle--after--BorderTopWidth:var(--pf-c-form__field-group-header-toggle--BorderWidth--base);--pf-c-form__field-group-toggle-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-form__field-group-toggle-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-form__field-group-toggle-icon--Transition:var(--pf-global--Transition);--pf-c-form__field-group-toggle-icon--MinWidth:var(--pf-global--FontSize--md);--pf-c-form__field-group-toggle-icon--Rotate:0;--pf-c-form__field-group--m-expanded__toggle-icon--Rotate:90deg;--pf-c-form__field-group-header--PaddingTop:var(--pf-global--spacer--md);--pf-c-form__field-group-header--PaddingBottom:var(--pf-global--spacer--md);--pf-c-form__field-group-header--GridColumn:1/3;--pf-c-form__field-group__field-group__field-group-header--PaddingTop:var(--pf-global--spacer--lg);--pf-c-form__field-group__field-group__field-group-header--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-form__field-group-toggle--field-group-header--GridColumn:2/3;--pf-c-form__field-group__field-group--field-group__field-group-header--after--BorderTopWidth:var(--pf-c-form__field-group-header-toggle--BorderWidth--base);--pf-c-form__field-group-header-description--MarginTop:var(--pf-global--spacer--xs);--pf-c-form__field-group-header-description--Color:var(--pf-global--Color--200);--pf-c-form__field-group-header-actions--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-form__field-group-header-actions--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-form__field-group-header-actions--MarginLeft:var(--pf-global--spacer--sm);--pf-c-form__field-group-body--PaddingTop:var(--pf-global--spacer--lg);--pf-c-form__field-group-body--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-form__field-group-body--Gap:var(--pf-c-form--GridGap);--pf-c-form__field-group-body--GridColumn:2/3;--pf-c-form__field-group__field-group__field-group-body--GridColumn:1/3;--pf-c-form__field-group__field-group__field-group-toggle--field-group-body--GridColumn:2/3;--pf-c-form__field-group-body__field-group--last-child--MarginBottom:calc(var(--pf-c-form__field-group-body--PaddingBottom)*-1);display:grid;gap:var(--pf-c-form--GridGap)}.pf-c-form.pf-m-horizontal.pf-m-align-right .pf-c-form__label{text-align:right}@media screen and (min-width:768px){.pf-c-form.pf-m-horizontal{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal .pf-c-form__group-control{grid-column:2}}@media screen and (min-width:0){.pf-c-form.pf-m-horizontal-on-xs{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal-on-xs .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal-on-xs .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal-on-xs .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal-on-xs .pf-c-form__group-control{grid-column:2}}@media (min-width:576px){.pf-c-form.pf-m-horizontal-on-sm{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal-on-sm .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal-on-sm .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal-on-sm .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal-on-sm .pf-c-form__group-control{grid-column:2}}@media (min-width:768px){.pf-c-form.pf-m-horizontal-on-md{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal-on-md .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal-on-md .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal-on-md .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal-on-md .pf-c-form__group-control{grid-column:2}}@media (min-width:992px){.pf-c-form.pf-m-horizontal-on-lg{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal-on-lg .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal-on-lg .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal-on-lg .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal-on-lg .pf-c-form__group-control{grid-column:2}}@media (min-width:1200px){.pf-c-form.pf-m-horizontal-on-xl{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal-on-xl .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal-on-xl .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal-on-xl .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal-on-xl .pf-c-form__group-control{grid-column:2}}@media (min-width:1450px){.pf-c-form.pf-m-horizontal-on-2xl{--pf-c-form__group-label--PaddingBottom:0}.pf-c-form.pf-m-horizontal-on-2xl .pf-c-form__group{grid-column-gap:var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);display:grid;grid-template-columns:var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth)}.pf-c-form.pf-m-horizontal-on-2xl .pf-c-form__group-label{padding-top:var(--pf-c-form--m-horizontal__group-label--md--PaddingTop)}.pf-c-form.pf-m-horizontal-on-2xl .pf-c-form__group-label.pf-m-no-padding-top{--pf-c-form--m-horizontal__group-label--md--PaddingTop:var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--PaddingTop);transform:translateY(var(--pf-c-form--m-horizontal__group-label--m-no-padding--md--TranslateY))}.pf-c-form.pf-m-horizontal-on-2xl .pf-c-form__group-control{grid-column:2}}.pf-c-form.pf-m-limit-width{max-width:var(--pf-c-form--m-limit-width--MaxWidth)}.pf-c-form__group.pf-m-action{margin-top:var(--pf-c-form__group--m-action--MarginTop);overflow:hidden}.pf-c-form__section{display:grid;gap:var(--pf-c-form__section--Gap)}.pf-c-form__section+.pf-c-form__group:not(.pf-m-action),.pf-c-form__section:not(:first-child){margin-top:var(--pf-c-form__section--MarginTop)}.pf-c-form__section-title{font-size:var(--pf-c-form__section-title--FontSize);font-weight:var(--pf-c-form__section-title--FontWeight);margin-bottom:var(--pf-c-form__section-title--MarginBottom)}.pf-c-form__group-label{--pf-c-form__helper-text--MarginTop:0;padding-bottom:var(--pf-c-form__group-label--PaddingBottom)}.pf-c-form__group-label.pf-m-info{align-items:flex-end;display:flex}.pf-c-form__group-label-main{flex-grow:1}.pf-c-form__group-label-info{font-size:var(--pf-c-form__group-label-info--FontSize);margin-left:var(--pf-c-form__group-label-info--MarginLeft)}.pf-c-form__label{font-size:var(--pf-c-form__label--FontSize);line-height:var(--pf-c-form__label--LineHeight)}.pf-c-form__label::selection{background-color:none}.pf-c-form__label:not(.pf-m-disabled):hover{cursor:var(--pf-c-form__label--hover--Cursor)}.pf-c-form__label.pf-m-disabled{color:var(--pf-c-form__label--m-disabled--Color)}.pf-c-form__label.pf-m-disabled:hover{cursor:var(--pf-c-form__label--m-disabled--hover--Cursor)}.pf-c-form__label-text{font-weight:var(--pf-c-form__label-text--FontWeight)}.pf-c-form__label-required{color:var(--pf-c-form__label-required--Color);font-size:var(--pf-c-form__label-required--FontSize);margin-left:var(--pf-c-form__label-required--MarginLeft)}.pf-c-form__group-label-help{border:0;color:var(--pf-c-form__group-label-help--Color);cursor:pointer;font-size:var(--pf-c-form__group-label-help--FontSize);line-height:1;margin-bottom:var(--pf-c-form__group-label-help--MarginBottom);margin-left:var(--pf-c-form__group-label-help--MarginLeft);margin-right:var(--pf-c-form__group-label-help--MarginRight);margin-top:var(--pf-c-form__group-label-help--MarginTop);padding-bottom:var(--pf-c-form__group-label-help--PaddingBottom);padding-left:var(--pf-c-form__group-label-help--PaddingLeft);padding-right:var(--pf-c-form__group-label-help--PaddingRight);padding-top:var(--pf-c-form__group-label-help--PaddingTop);transform:translateY(var(--pf-c-form__group-label-help--TranslateY))}.pf-c-form__group-label-help:hover{--pf-c-form__group-label-help--Color:var(--pf-c-form__group-label-help--hover--Color)}.pf-c-form__group-label-help:focus-within{--pf-c-form__group-label-help--Color:var(--pf-c-form__group-label-help--focus--Color)}.pf-c-form__group-control.pf-m-inline{display:flex;flex-flow:row wrap}.pf-c-form__group-control.pf-m-inline>*{margin-right:var(--pf-c-form__group-control--m-inline--child--MarginRight)}.pf-c-form__group-control.pf-m-inline>:last-child{--pf-c-form__group-control--m-inline--child--MarginRight:0}.pf-c-form__group-control.pf-m-stack{--pf-c-form__helper-text--MarginTop:var(--pf-c-grid__group-control--m-stack__helper-text--MarginTop);display:grid;gap:var(--pf-c-grid__group-control--m-stack--Gap)}.pf-c-form__group-control .pf-c-form__helper-text:first-child{--pf-c-form__helper-text--MarginTop:0;margin-bottom:var(--pf-c-form__group-control__helper-text--MarginBottom)}.pf-c-form__helper-text{color:var(--pf-c-form__helper-text--Color);font-size:var(--pf-c-form__helper-text--FontSize);margin-top:var(--pf-c-form__helper-text--MarginTop)}.pf-c-form__helper-text.pf-m-error{--pf-c-form__helper-text--Color:var(--pf-c-form__helper-text--m-error--Color)}.pf-c-form__helper-text.pf-m-success{--pf-c-form__helper-text--Color:var(--pf-c-form__helper-text--m-success--Color)}.pf-c-form__helper-text.pf-m-warning{--pf-c-form__helper-text--Color:var(--pf-c-form__helper-text--m-warning--Color)}.pf-c-form__helper-text.pf-m-inactive{display:none;visibility:hidden}.pf-c-form__helper-text.pf-m-hidden{opacity:0;visibility:hidden}.pf-c-form__helper-text-icon{font-size:var(--pf-c-form__helper-text-icon--FontSize);margin-right:var(--pf-c-form__helper-text-icon--MarginRight)}.pf-c-form__fieldset{border:0}.pf-c-form__actions{display:flex;flex-wrap:wrap;margin-bottom:var(--pf-c-form__actions--MarginBottom);margin-left:var(--pf-c-form__actions--MarginLeft);margin-right:var(--pf-c-form__actions--MarginRight);margin-top:var(--pf-c-form__actions--MarginTop)}.pf-c-form__actions>*{margin-bottom:var(--pf-c-form__actions--child--MarginBottom);margin-left:var(--pf-c-form__actions--child--MarginLeft);margin-right:var(--pf-c-form__actions--child--MarginRight);margin-top:var(--pf-c-form__actions--child--MarginTop)}.pf-c-form__field-group{--pf-c-form__field-group--BorderTopWidth:var(--pf-c-form__field-group--border-width-base);border-bottom:var(--pf-c-form__field-group--BorderBottomWidth) solid var(--pf-c-form__field-group--BorderBottomColor);border-top:var(--pf-c-form__field-group--BorderTopWidth) solid var(--pf-c-form__field-group--BorderTopColor);display:grid;grid-template-columns:minmax(var(--pf-c-form__field-group--GridTemplateColumns--toggle),max-content) 1fr}.pf-c-form__field-group:last-child{--pf-c-form__field-group--BorderBottomWidth:0}.pf-c-form__field-group+.pf-c-form__field-group,.pf-c-form__field-group:first-child{--pf-c-form__field-group--BorderTopWidth:0}.pf-c-form__field-group+.pf-c-form__field-group{margin-top:var(--pf-c-form__field-group--field-group--MarginTop)}.pf-c-form__field-group .pf-c-form__field-group{--pf-c-form__field-group-body--GridColumn:var(--pf-c-form__field-group__field-group__field-group-body--GridColumn);--pf-c-form__field-group-toggle--PaddingTop:var(--pf-c-form__field-group__field-group__field-group-toggle--PaddingTop);--pf-c-form__field-group-header--PaddingTop:var(--pf-c-form__field-group__field-group__field-group-header--PaddingTop);--pf-c-form__field-group-header--PaddingBottom:var(--pf-c-form__field-group__field-group__field-group-header--PaddingBottom);--pf-c-form__field-group-body--PaddingTop:0}.pf-c-form__field-group .pf-c-form__field-group .pf-c-form__field-group-toggle~.pf-c-form__field-group-body{--pf-c-form__field-group-body--GridColumn:var(--pf-c-form__field-group__field-group__field-group-toggle--field-group-body--GridColumn)}.pf-c-form__field-group.pf-m-expanded>.pf-c-form__field-group-toggle{--pf-c-form__field-group-toggle-icon--Rotate:var(--pf-c-form__field-group--m-expanded__toggle-icon--Rotate)}.pf-c-form__field-group-toggle{grid-column:1/2;grid-row:1/2;padding-right:var(--pf-c-form__field-group-toggle--PaddingRight);padding-top:var(--pf-c-form__field-group-toggle--PaddingTop)}.pf-c-form__field-group-toggle+.pf-c-form__field-group-header{--pf-c-form__field-group-header--GridColumn:var(--pf-c-form__field-group-toggle--field-group-header--GridColumn)}.pf-c-form__field-group-toggle-button{margin-bottom:var(--pf-c-form__field-group-toggle-button--MarginBottom);margin-top:var(--pf-c-form__field-group-toggle-button--MarginTop)}.pf-c-form__field-group-toggle-icon{display:inline-block;min-width:var(--pf-c-form__field-group-toggle-icon--MinWidth);text-align:center;transform:rotate(var(--pf-c-form__field-group-toggle-icon--Rotate));transition:var(--pf-c-form__field-group-toggle-icon--Transition)}.pf-c-form__field-group-header{align-items:flex-start;display:flex;grid-column:var(--pf-c-form__field-group-header--GridColumn);grid-row:1/2;padding-bottom:var(--pf-c-form__field-group-header--PaddingBottom);padding-top:var(--pf-c-form__field-group-header--PaddingTop)}.pf-c-form__field-group-header-main{display:flex;flex-direction:column;flex-grow:1}.pf-c-form__field-group-header-title{display:flex}.pf-c-form__field-group-header-title-text{flex-grow:1}.pf-c-form__field-group-header-description{color:var(--pf-c-form__field-group-header-description--Color);margin-top:var(--pf-c-form__field-group-header-description--MarginTop)}.pf-c-form__field-group-header-actions{margin-bottom:var(--pf-c-form__field-group-header-actions--MarginBottom);margin-left:var(--pf-c-form__field-group-header-actions--MarginLeft);margin-top:var(--pf-c-form__field-group-header-actions--MarginTop);white-space:nowrap}.pf-c-form__field-group-body{display:grid;gap:var(--pf-c-form__field-group-body--Gap);grid-column:var(--pf-c-form__field-group-body--GridColumn);padding-bottom:var(--pf-c-form__field-group-body--PaddingBottom);padding-top:var(--pf-c-form__field-group-body--PaddingTop)}.pf-c-form__field-group-body>.pf-c-form__field-group:first-child{--pf-c-form__field-group-toggle--PaddingTop:0;--pf-c-form__field-group-header--PaddingTop:0}.pf-c-form__field-group-body>.pf-c-form__field-group:last-child{margin-bottom:var(--pf-c-form__field-group-body__field-group--last-child--MarginBottom)}:where(.pf-theme-dark) .pf-c-form{--pf-c-form__helper-text--m-success--Color:var(--pf-global--success-color--100)}.pf-c-content{--pf-c-content--MarginBottom:var(--pf-global--spacer--md);--pf-c-content--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--FontSize:var(--pf-global--FontSize--md);--pf-c-content--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--Color:var(--pf-global--Color--100);--pf-c-content--heading--FontFamily:var(--pf-global--FontFamily--heading--sans-serif);--pf-c-content--h1--MarginTop:var(--pf-global--spacer--lg);--pf-c-content--h1--MarginBottom:var(--pf-global--spacer--sm);--pf-c-content--h1--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-content--h1--FontSize:var(--pf-global--FontSize--2xl);--pf-c-content--h1--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--h2--MarginTop:var(--pf-global--spacer--lg);--pf-c-content--h2--MarginBottom:var(--pf-global--spacer--sm);--pf-c-content--h2--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--h2--FontSize:var(--pf-global--FontSize--xl);--pf-c-content--h2--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--h3--MarginTop:var(--pf-global--spacer--lg);--pf-c-content--h3--MarginBottom:var(--pf-global--spacer--sm);--pf-c-content--h3--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--h3--FontSize:var(--pf-global--FontSize--lg);--pf-c-content--h3--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--h4--MarginTop:var(--pf-global--spacer--lg);--pf-c-content--h4--MarginBottom:var(--pf-global--spacer--sm);--pf-c-content--h4--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--h4--FontSize:var(--pf-global--FontSize--md);--pf-c-content--h4--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--h5--MarginTop:var(--pf-global--spacer--lg);--pf-c-content--h5--MarginBottom:var(--pf-global--spacer--sm);--pf-c-content--h5--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--h5--FontSize:var(--pf-global--FontSize--md);--pf-c-content--h5--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--h6--MarginTop:var(--pf-global--spacer--lg);--pf-c-content--h6--MarginBottom:var(--pf-global--spacer--sm);--pf-c-content--h6--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--h6--FontSize:var(--pf-global--FontSize--md);--pf-c-content--h6--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-content--small--MarginBottom:var(--pf-global--spacer--md);--pf-c-content--small--LineHeight:var(--pf-global--LineHeight--md);--pf-c-content--small--FontSize:var(--pf-global--FontSize--sm);--pf-c-content--small--Color:var(--pf-global--Color--200);--pf-c-content--a--Color:var(--pf-global--link--Color);--pf-c-content--a--TextDecoration:var(--pf-global--link--TextDecoration);--pf-c-content--a--hover--Color:var(--pf-global--link--Color--hover);--pf-c-content--a--hover--TextDecoration:var(--pf-global--link--TextDecoration--hover);--pf-c-content--a--visited--Color:var(--pf-global--link--Color--visited);--pf-c-content--blockquote--PaddingTop:var(--pf-global--spacer--md);--pf-c-content--blockquote--PaddingRight:var(--pf-global--spacer--md);--pf-c-content--blockquote--PaddingBottom:var(--pf-global--spacer--md);--pf-c-content--blockquote--PaddingLeft:var(--pf-global--spacer--md);--pf-c-content--blockquote--Color:var(--pf-global--Color--200);--pf-c-content--blockquote--BorderLeftColor:var(--pf-global--BorderColor--100);--pf-c-content--blockquote--BorderLeftWidth:var(--pf-global--BorderWidth--lg);--pf-c-content--ol--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-content--ol--MarginLeft:var(--pf-global--spacer--lg);--pf-c-content--ol--nested--MarginTop:var(--pf-global--spacer--sm);--pf-c-content--ol--nested--MarginLeft:var(--pf-global--spacer--sm);--pf-c-content--ul--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-content--ul--MarginLeft:var(--pf-global--spacer--lg);--pf-c-content--ul--nested--MarginTop:var(--pf-global--spacer--sm);--pf-c-content--ul--nested--MarginLeft:var(--pf-global--spacer--sm);--pf-c-content--ul--ListStyle:var(--pf-global--ListStyle);--pf-c-content--li--MarginTop:var(--pf-global--spacer--sm);--pf-c-content--dl--ColumnGap:var(--pf-global--spacer--2xl);--pf-c-content--dl--RowGap:var(--pf-global--spacer--md);--pf-c-content--dt--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-content--dt--MarginTop:var(--pf-global--spacer--md);--pf-c-content--dt--sm--MarginTop:0;--pf-c-content--hr--Height:var(--pf-global--BorderWidth--sm);--pf-c-content--hr--BackgroundColor:var(--pf-global--BorderColor--100);color:var(--pf-c-content--Color);font-size:var(--pf-c-content--FontSize);line-height:var(--pf-c-content--LineHeight)}.pf-c-content a{color:var(--pf-c-content--a--Color);text-decoration:var(--pf-c-content--a--TextDecoration)}.pf-c-content a:hover{--pf-c-content--a--Color:var(--pf-c-content--a--hover--Color);--pf-c-content--a--TextDecoration:var(--pf-c-content--a--hover--TextDecoration)}.pf-c-content a.pf-m-visited:visited,.pf-c-content.pf-m-visited a:visited{color:var(--pf-c-content--a--visited--Color)}.pf-c-content li+li{margin-top:var(--pf-c-content--li--MarginTop)}.pf-c-content blockquote:not(:last-child),.pf-c-content dl:not(:last-child),.pf-c-content hr:not(:last-child),.pf-c-content ol:not(:last-child),.pf-c-content p:not(:last-child),.pf-c-content pre:not(:last-child),.pf-c-content small:not(:last-child),.pf-c-content table:not(:last-child),.pf-c-content ul:not(:last-child){margin-bottom:var(--pf-c-content--MarginBottom)}.pf-c-content h1,.pf-c-content h2,.pf-c-content h3,.pf-c-content h4,.pf-c-content h5,.pf-c-content h6{font-family:var(--pf-c-content--heading--FontFamily);margin:0}.pf-c-content h1:first-child,.pf-c-content h2:first-child,.pf-c-content h3:first-child,.pf-c-content h4:first-child,.pf-c-content h5:first-child,.pf-c-content h6:first-child{margin-top:0}.pf-c-content h1:last-child,.pf-c-content h2:last-child,.pf-c-content h3:last-child,.pf-c-content h4:last-child,.pf-c-content h5:last-child,.pf-c-content h6:last-child{margin-bottom:0}.pf-c-content ol,.pf-c-content ul{margin:0}.pf-c-content ol.pf-m-plain,.pf-c-content ul.pf-m-plain{list-style:none;margin-left:0;padding-left:0}.pf-c-content h1{font-size:var(--pf-c-content--h1--FontSize);font-weight:var(--pf-c-content--h1--FontWeight);line-height:var(--pf-c-content--h1--LineHeight);margin-bottom:var(--pf-c-content--h1--MarginBottom);margin-top:var(--pf-c-content--h1--MarginTop)}.pf-c-content h2{font-size:var(--pf-c-content--h2--FontSize);font-weight:var(--pf-c-content--h2--FontWeight);line-height:var(--pf-c-content--h2--LineHeight);margin-bottom:var(--pf-c-content--h2--MarginBottom);margin-top:var(--pf-c-content--h2--MarginTop)}.pf-c-content h3{font-size:var(--pf-c-content--h3--FontSize);font-weight:var(--pf-c-content--h3--FontWeight);line-height:var(--pf-c-content--h3--LineHeight);margin-bottom:var(--pf-c-content--h3--MarginBottom);margin-top:var(--pf-c-content--h3--MarginTop)}.pf-c-content h4{font-size:var(--pf-c-content--h4--FontSize);font-weight:var(--pf-c-content--h4--FontWeight);line-height:var(--pf-c-content--h4--LineHeight);margin-bottom:var(--pf-c-content--h4--MarginBottom);margin-top:var(--pf-c-content--h4--MarginTop)}.pf-c-content h5{font-size:var(--pf-c-content--h5--FontSize);font-weight:var(--pf-c-content--h5--FontWeight);line-height:var(--pf-c-content--h5--LineHeight);margin-bottom:var(--pf-c-content--h5--MarginBottom);margin-top:var(--pf-c-content--h5--MarginTop)}.pf-c-content h6{font-size:var(--pf-c-content--h6--FontSize);font-weight:var(--pf-c-content--h6--FontWeight);line-height:var(--pf-c-content--h6--LineHeight);margin-bottom:var(--pf-c-content--h6--MarginBottom);margin-top:var(--pf-c-content--h6--MarginTop)}.pf-c-content small{color:var(--pf-c-content--small--Color);display:block;font-size:var(--pf-c-content--small--FontSize);line-height:var(--pf-c-content--small--LineHeight)}.pf-c-content small:not(:last-child){margin-bottom:var(--pf-c-content--small--MarginBottom)}.pf-c-content blockquote{border-left:var(--pf-c-content--blockquote--BorderLeftWidth) solid var(--pf-c-content--blockquote--BorderLeftColor);color:var(--pf-c-content--blockquote--Color);padding:var(--pf-c-content--blockquote--PaddingTop) var(--pf-c-content--blockquote--PaddingRight) var(--pf-c-content--blockquote--PaddingBottom) var(--pf-c-content--blockquote--PaddingLeft)}.pf-c-content hr{background-color:var(--pf-c-content--hr--BackgroundColor);border:none;height:var(--pf-c-content--hr--Height)}.pf-c-content ol{margin-left:var(--pf-c-content--ol--MarginLeft);padding-left:var(--pf-c-content--ol--PaddingLeft)}.pf-c-content ol ul{--pf-c-content--ul--MarginLeft:var(--pf-c-content--ul--nested--MarginLeft);margin-top:var(--pf-c-content--ul--nested--MarginTop)}.pf-c-content ol ol{--pf-c-content--ol--MarginLeft:var(--pf-c-content--ol--nested--MarginLeft);margin-top:var(--pf-c-content--ol--nested--MarginTop)}.pf-c-content ul{list-style:var(--pf-c-content--ul--ListStyle);margin-left:var(--pf-c-content--ul--MarginLeft);padding-left:var(--pf-c-content--ul--PaddingLeft)}.pf-c-content ul ul{--pf-c-content--ul--MarginLeft:var(--pf-c-content--ul--nested--MarginLeft);margin-top:var(--pf-c-content--ul--nested--MarginTop)}.pf-c-content ul ol{--pf-c-content--ol--MarginLeft:var(--pf-c-content--ol--nested--MarginLeft);margin-top:var(--pf-c-content--ol--nested--MarginTop)}.pf-c-content dl{display:grid;grid-template-columns:1fr}@media screen and (min-width:576px){.pf-c-content dl{grid-column-gap:var(--pf-c-content--dl--ColumnGap);grid-row-gap:var(--pf-c-content--dl--RowGap);grid-template:auto/auto 1fr}}.pf-c-content dt{font-weight:var(--pf-c-content--dt--FontWeight)}.pf-c-content dt:not(:first-child){margin-top:var(--pf-c-content--dt--MarginTop)}@media screen and (min-width:576px){.pf-c-content dt:not(:first-child){--pf-c-content--dt--MarginTop:var(--pf-c-content--dt--sm--MarginTop)}.pf-c-content dt{grid-column:1}.pf-c-content dd{grid-column:2}}.pf-m-overpass-font .pf-c-content{--pf-c-content--h2--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-content--h4--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-content--h5--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-content--h6--FontWeight:var(--pf-global--FontWeight--semi-bold)}.pf-m-overpass-font .pf-c-content blockquote{font-weight:var(--pf-global--FontWeight--light)}.pf-c-backdrop{--pf-c-backdrop--Position:fixed;--pf-c-backdrop--ZIndex:var(--pf-global--ZIndex--lg);--pf-c-backdrop--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-100);background-color:var(--pf-c-backdrop--BackgroundColor);height:100%;left:0;position:var(--pf-c-backdrop--Position);top:0;width:100%;z-index:var(--pf-c-backdrop--ZIndex)}.pf-c-backdrop__open{overflow:hidden}.pf-l-bullseye{--pf-l-bullseye--Padding:0;align-items:center;display:flex;height:100%;justify-content:center;margin:0;padding:var(--pf-l-bullseye--Padding)}.pf-c-about-modal-box{--pf-global--Color--100:var(--pf-global--Color--light-100);--pf-global--Color--200:var(--pf-global--Color--light-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--light-100);--pf-global--primary-color--100:var(--pf-global--primary-color--light-100);--pf-global--link--Color:var(--pf-global--link--Color--light);--pf-global--link--Color--hover:var(--pf-global--link--Color--light);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--dark-100)}.pf-c-about-modal-box .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-200)}.pf-c-about-modal-box .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--active--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-secondary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--BorderColor:var(--pf-global--Color--light-100)}.pf-c-about-modal-box{--pf-c-about-modal-box--BackgroundColor:var(--pf-global--palette--black-1000);--pf-c-about-modal-box--BoxShadow:0 0 100px 0 hsla(0,0%,100%,.05);--pf-c-about-modal-box--ZIndex:var(--pf-global--ZIndex--xl);--pf-c-about-modal-box--Height:100%;--pf-c-about-modal-box--lg--Height:47.625rem;--pf-c-about-modal-box--lg--MaxHeight:calc(100% - var(--pf-global--spacer--xl));--pf-c-about-modal-box--Width:100vw;--pf-c-about-modal-box--lg--Width:calc(100% - var(--pf-global--spacer--3xl)*2);--pf-c-about-modal-box--lg--MaxWidth:77rem;--pf-c-about-modal-box--PaddingTop:var(--pf-global--spacer--xl);--pf-c-about-modal-box--PaddingRight:var(--pf-global--spacer--xl);--pf-c-about-modal-box--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-about-modal-box--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-about-modal-box--sm--PaddingTop:var(--pf-global--spacer--3xl);--pf-c-about-modal-box--sm--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-about-modal-box--sm--PaddingBottom:var(--pf-global--spacer--3xl);--pf-c-about-modal-box--sm--PaddingLeft:var(--pf-global--spacer--3xl);--pf-c-about-modal-box--sm--grid-template-columns:5fr 1fr;--pf-c-about-modal-box--lg--grid-template-columns:1fr .6fr;--pf-c-about-modal-box__brand--PaddingTop:var(--pf-global--spacer--2xl);--pf-c-about-modal-box__brand--PaddingRight:var(--pf-global--spacer--xl);--pf-c-about-modal-box__brand--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-about-modal-box__brand--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-about-modal-box__brand--sm--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__brand--sm--PaddingLeft:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__brand--sm--PaddingBottom:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__close--ZIndex:var(--pf-global--ZIndex--2xl);--pf-c-about-modal-box__close--PaddingTop:var(--pf-global--spacer--2xl);--pf-c-about-modal-box__close--PaddingRight:var(--pf-global--spacer--xl);--pf-c-about-modal-box__close--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-about-modal-box__close--sm--PaddingBottom:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__close--sm--PaddingRight:0;--pf-c-about-modal-box__close--lg--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__close--c-button--Color:var(--pf-global--Color--100);--pf-c-about-modal-box__close--c-button--FontSize:var(--pf-global--FontSize--xl);--pf-c-about-modal-box__close--c-button--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-about-modal-box__close--c-button--Width:calc(var(--pf-c-about-modal-box__close--c-button--FontSize)*2);--pf-c-about-modal-box__close--c-button--Height:calc(var(--pf-c-about-modal-box__close--c-button--FontSize)*2);--pf-c-about-modal-box__close--c-button--BackgroundColor:var(--pf-global--palette--black-1000);--pf-c-about-modal-box__close--c-button--hover--BackgroundColor:rgba(3,3,3,.4);--pf-c-about-modal-box__hero--sm--BackgroundImage:url(/assets/demo/site/images/pfbg_992@2x.jpg);--pf-c-about-modal-box__hero--sm--BackgroundPosition:top left;--pf-c-about-modal-box__hero--sm--BackgroundSize:cover;--pf-c-about-modal-box__brand-image--Height:2.5rem;--pf-c-about-modal-box__header--PaddingRight:var(--pf-global--spacer--xl);--pf-c-about-modal-box__header--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-about-modal-box__header--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-about-modal-box__header--sm--PaddingRight:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__header--sm--PaddingLeft:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__strapline--PaddingTop:var(--pf-global--spacer--xl);--pf-c-about-modal-box__strapline--FontSize:var(--pf-global--FontSize--sm);--pf-c-about-modal-box__strapline--sm--PaddingTop:var(--pf-global--spacer--2xl);--pf-c-about-modal-box__content--MarginTop:var(--pf-global--spacer--xl);--pf-c-about-modal-box__content--MarginRight:var(--pf-global--spacer--xl);--pf-c-about-modal-box__content--MarginBottom:var(--pf-global--spacer--xl);--pf-c-about-modal-box__content--MarginLeft:var(--pf-global--spacer--xl);--pf-c-about-modal-box__content--sm--MarginTop:var(--pf-global--spacer--2xl);--pf-c-about-modal-box__content--sm--MarginRight:var(--pf-global--spacer--3xl);--pf-c-about-modal-box__content--sm--MarginBottom:var(--pf-global--spacer--2xl);--pf-c-about-modal-box__content--sm--MarginLeft:var(--pf-global--spacer--3xl);background-color:var(--pf-c-about-modal-box--BackgroundColor);box-shadow:var(--pf-c-about-modal-box--BoxShadow);color:var(--pf-global--Color--100);display:grid;grid-template-areas:"brand close" "header header" "content content";grid-template-rows:max-content max-content auto;height:var(--pf-c-about-modal-box--Height);overflow-x:hidden;overflow-y:auto;position:relative;width:var(--pf-c-about-modal-box--Width);z-index:var(--pf-c-about-modal-box--ZIndex)}@media screen and (min-width:576px){.pf-c-about-modal-box{--pf-c-about-modal-box--PaddingTop:var(--pf-c-about-modal-box--sm--PaddingTop);--pf-c-about-modal-box--PaddingRight:var(--pf-c-about-modal-box--sm--PaddingRight);--pf-c-about-modal-box--PaddingBottom:var(--pf-c-about-modal-box--sm--PaddingBottom);--pf-c-about-modal-box--PaddingLeft:var(--pf-c-about-modal-box--sm--PaddingLeft);--pf-c-about-modal-box__brand--PaddingRight:var(--pf-c-about-modal-box__brand--sm--PaddingRight);--pf-c-about-modal-box__brand--PaddingLeft:var(--pf-c-about-modal-box__brand--sm--PaddingLeft);--pf-c-about-modal-box__brand--PaddingBottom:var(--pf-c-about-modal-box__brand--sm--PaddingBottom)}}@media only screen and (min-width:576px){.pf-c-about-modal-box{--pf-c-about-modal-box__close--PaddingRight:var(--pf-c-about-modal-box__close--sm--PaddingRight);--pf-c-about-modal-box__close--PaddingBottom:var(--pf-c-about-modal-box__close--sm--PaddingBottom)}}@media only screen and (min-width:992px){.pf-c-about-modal-box{--pf-c-about-modal-box__close--PaddingRight:var(--pf-c-about-modal-box__close--lg--PaddingRight)}}@media only screen and (min-width:576px){.pf-c-about-modal-box{--pf-c-about-modal-box__header--PaddingRight:var(--pf-c-about-modal-box__header--sm--PaddingRight);--pf-c-about-modal-box__header--PaddingLeft:var(--pf-c-about-modal-box__header--sm--PaddingLeft);--pf-c-about-modal-box__strapline--PaddingTop:var(--pf-c-about-modal-box__strapline--sm--PaddingTop);--pf-c-about-modal-box__content--MarginTop:var(--pf-c-about-modal-box__content--sm--MarginTop);--pf-c-about-modal-box__content--MarginRight:var(--pf-c-about-modal-box__content--sm--MarginRight);--pf-c-about-modal-box__content--MarginBottom:var(--pf-c-about-modal-box__content--sm--MarginBottom);--pf-c-about-modal-box__content--MarginLeft:var(--pf-c-about-modal-box__content--sm--MarginLeft);grid-template-areas:"brand hero" "header hero" "content hero";grid-template-columns:var(--pf-c-about-modal-box--sm--grid-template-columns)}}@media only screen and (min-width:992px){.pf-c-about-modal-box{--pf-c-about-modal-box--Height:var(--pf-c-about-modal-box--lg--Height);--pf-c-about-modal-box--Width:var(--pf-c-about-modal-box--lg--Width);grid-template-columns:var(--pf-c-about-modal-box--lg--grid-template-columns);grid-template-rows:max-content max-content auto;max-height:var(--pf-c-about-modal-box--lg--MaxHeight);max-width:var(--pf-c-about-modal-box--lg--MaxWidth)}}.pf-c-about-modal-box__brand{display:flex;grid-area:brand;padding:var(--pf-c-about-modal-box__brand--PaddingTop) var(--pf-c-about-modal-box__brand--PaddingRight) var(--pf-c-about-modal-box__brand--PaddingBottom) var(--pf-c-about-modal-box__brand--PaddingLeft)}.pf-c-about-modal-box__brand-image{height:var(--pf-c-about-modal-box__brand-image--Height)}.pf-c-about-modal-box__header{display:flex;flex-direction:column;grid-area:header;padding-bottom:var(--pf-c-about-modal-box__header--PaddingBottom);padding-left:var(--pf-c-about-modal-box__header--PaddingLeft);padding-right:var(--pf-c-about-modal-box__header--PaddingRight)}.pf-c-about-modal-box__strapline{font-size:var(--pf-c-about-modal-box__strapline--FontSize);margin-top:auto;padding-top:var(--pf-c-about-modal-box__strapline--PaddingTop)}.pf-c-about-modal-box__content{-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;grid-area:content;margin:var(--pf-c-about-modal-box__content--MarginTop) var(--pf-c-about-modal-box__content--MarginRight) var(--pf-c-about-modal-box__content--MarginBottom) var(--pf-c-about-modal-box__content--MarginLeft);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;word-break:break-word}@media screen and (min-width:576px){.pf-c-about-modal-box__content{overflow:visible;overscroll-behavior:auto}}.pf-c-about-modal-box__close{align-items:flex-start;display:flex;grid-area:close;justify-content:flex-end;padding-bottom:var(--pf-c-about-modal-box__close--PaddingBottom);padding-right:var(--pf-c-about-modal-box__close--PaddingRight);padding-top:var(--pf-c-about-modal-box__close--PaddingTop);position:sticky;top:0}@media only screen and (min-width:576px){.pf-c-about-modal-box__close{grid-area:1/2;justify-content:center}}@media only screen and (min-width:992px){.pf-c-about-modal-box__close{justify-content:flex-end}}.pf-c-about-modal-box__close .pf-c-button.pf-m-plain{align-items:center;background-color:var(--pf-c-about-modal-box__close--c-button--BackgroundColor);border-radius:var(--pf-c-about-modal-box__close--c-button--BorderRadius);color:var(--pf-c-about-modal-box__close--c-button--Color);display:flex;font-size:var(--pf-c-about-modal-box__close--c-button--FontSize);height:var(--pf-c-about-modal-box__close--c-button--Height);justify-content:center;width:var(--pf-c-about-modal-box__close--c-button--Width)}.pf-c-about-modal-box__close .pf-c-button.pf-m-plain:hover{--pf-c-about-modal-box__close--c-button--BackgroundColor:var(--pf-c-about-modal-box__close--c-button--hover--BackgroundColor)}.pf-c-about-modal-box__hero{display:none;visibility:hidden}@media only screen and (min-width:576px){.pf-c-about-modal-box__hero{background-attachment:fixed;background-image:var(--pf-c-about-modal-box__hero--sm--BackgroundImage);background-position:var(--pf-c-about-modal-box__hero--sm--BackgroundPosition);background-repeat:no-repeat;background-size:var(--pf-c-about-modal-box__hero--sm--BackgroundSize);display:block;grid-area:hero;visibility:visible}}:where(.pf-theme-dark) .pf-c-about-modal-box{--pf-global--Color--100:#e0e0e0;--pf-global--Color--200:#aaabac;--pf-global--BorderColor--100:#444548;--pf-global--primary-color--100:#1fa7f8;--pf-global--link--Color:#1fa7f8;--pf-global--link--Color--hover:#73bcf7;--pf-global--BackgroundColor--100:#1b1d21}:where(.pf-theme-dark) .pf-c-about-modal-box .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--100)}:where(.pf-theme-dark) .pf-c-about-modal-box .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--active--Color:var(--pf-global--primary-color--100)}:where(.pf-theme-dark) .pf-c-about-modal-box{color:var(--pf-global--Color--100)}.pf-c-title{--pf-c-title--FontFamily:var(--pf-global--FontFamily--heading--sans-serif);--pf-c-title--m-4xl--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-title--m-4xl--FontSize:var(--pf-global--FontSize--4xl);--pf-c-title--m-4xl--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-title--m-3xl--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-title--m-3xl--FontSize:var(--pf-global--FontSize--3xl);--pf-c-title--m-3xl--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-title--m-2xl--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-title--m-2xl--FontSize:var(--pf-global--FontSize--2xl);--pf-c-title--m-2xl--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-title--m-xl--LineHeight:var(--pf-global--LineHeight--md);--pf-c-title--m-xl--FontSize:var(--pf-global--FontSize--xl);--pf-c-title--m-xl--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-title--m-lg--LineHeight:var(--pf-global--LineHeight--md);--pf-c-title--m-lg--FontSize:var(--pf-global--FontSize--lg);--pf-c-title--m-lg--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-title--m-md--LineHeight:var(--pf-global--LineHeight--md);--pf-c-title--m-md--FontSize:var(--pf-global--FontSize--md);--pf-c-title--m-md--FontWeight:var(--pf-global--FontWeight--normal);font-family:var(--pf-c-title--FontFamily);word-break:break-word}.pf-c-title.pf-m-4xl{font-size:var(--pf-c-title--m-4xl--FontSize);font-weight:var(--pf-c-title--m-4xl--FontWeight);line-height:var(--pf-c-title--m-4xl--LineHeight)}.pf-c-title.pf-m-3xl{font-size:var(--pf-c-title--m-3xl--FontSize);font-weight:var(--pf-c-title--m-3xl--FontWeight);line-height:var(--pf-c-title--m-3xl--LineHeight)}.pf-c-title.pf-m-2xl{font-size:var(--pf-c-title--m-2xl--FontSize);font-weight:var(--pf-c-title--m-2xl--FontWeight);line-height:var(--pf-c-title--m-2xl--LineHeight)}.pf-c-title.pf-m-xl{font-size:var(--pf-c-title--m-xl--FontSize);font-weight:var(--pf-c-title--m-xl--FontWeight);line-height:var(--pf-c-title--m-xl--LineHeight)}.pf-c-title.pf-m-lg{font-size:var(--pf-c-title--m-lg--FontSize);font-weight:var(--pf-c-title--m-lg--FontWeight);line-height:var(--pf-c-title--m-lg--LineHeight)}.pf-c-title.pf-m-md{font-size:var(--pf-c-title--m-md--FontSize);font-weight:var(--pf-c-title--m-md--FontWeight);line-height:var(--pf-c-title--m-md--LineHeight)}.pf-m-overpass-font .pf-c-title{--pf-c-title--m-md--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-title--m-lg--FontWeight:var(--pf-global--FontWeight--semi-bold)}.pf-c-notification-drawer{--pf-c-notification-drawer--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-notification-drawer__header--PaddingTop:var(--pf-global--spacer--md);--pf-c-notification-drawer__header--PaddingRight:var(--pf-global--spacer--md);--pf-c-notification-drawer__header--PaddingBottom:var(--pf-global--spacer--md);--pf-c-notification-drawer__header--PaddingLeft:var(--pf-global--spacer--md);--pf-c-notification-drawer__header--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-notification-drawer__header--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-notification-drawer__header--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-notification-drawer__header-title--FontSize:var(--pf-global--FontSize--xl);--pf-c-notification-drawer__header-status--MarginLeft:var(--pf-global--spacer--md);--pf-c-notification-drawer__body--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-notification-drawer__list-item--PaddingTop:var(--pf-global--spacer--md);--pf-c-notification-drawer__list-item--PaddingRight:var(--pf-global--spacer--md);--pf-c-notification-drawer__list-item--PaddingBottom:var(--pf-global--spacer--md);--pf-c-notification-drawer__list-item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-notification-drawer__list-item--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-notification-drawer__list-item--BoxShadow:inset var(--pf-global--BoxShadow--sm-bottom);--pf-c-notification-drawer__list-item--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-notification-drawer__list-item--BorderBottomColor:transparent;--pf-c-notification-drawer__list-item--OutlineOffset:-0.25rem;--pf-c-notification-drawer__list-item--before--Width:var(--pf-global--BorderWidth--lg);--pf-c-notification-drawer__list-item--before--Top:0;--pf-c-notification-drawer__list-item--before--Bottom:calc(var(--pf-c-notification-drawer__list-item--BorderBottomWidth)*-1);--pf-c-notification-drawer__list-item--m-info__list-item-header-icon--Color:var(--pf-global--info-color--100);--pf-c-notification-drawer__list-item--m-info__list-item--before--BackgroundColor:var(--pf-global--info-color--100);--pf-c-notification-drawer__list-item--m-warning__list-item-header-icon--Color:var(--pf-global--warning-color--100);--pf-c-notification-drawer__list-item--m-warning__list-item--before--BackgroundColor:var(--pf-global--warning-color--100);--pf-c-notification-drawer__list-item--m-danger__list-item-header-icon--Color:var(--pf-global--danger-color--100);--pf-c-notification-drawer__list-item--m-danger__list-item--before--BackgroundColor:var(--pf-global--danger-color--100);--pf-c-notification-drawer__list-item--m-success__list-item-header-icon--Color:var(--pf-global--success-color--100);--pf-c-notification-drawer__list-item--m-success__list-item--before--BackgroundColor:var(--pf-global--success-color--100);--pf-c-notification-drawer__list-item--m-default__list-item-header-icon--Color:var(--pf-global--default-color--200);--pf-c-notification-drawer__list-item--m-default__list-item--before--BackgroundColor:var(--pf-global--default-color--200);--pf-c-notification-drawer__list-item--m-read--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-notification-drawer__list-item--m-read--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-notification-drawer__list-item--m-read--before--Top:calc(var(--pf-c-notification-drawer__list-item--BorderBottomWidth)*-1);--pf-c-notification-drawer__list-item--m-read--before--Bottom:0;--pf-c-notification-drawer__list-item--m-read--before--BackgroundColor:transparent;--pf-c-notification-drawer__list-item--list-item--m-read--before--Top:0;--pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow:inset var(--pf-global--BoxShadow--sm-bottom);--pf-c-notification-drawer__list-item--m-hoverable--hover--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-notification-drawer__list-item--m-hoverable--hover--BoxShadow:var(--pf-global--BoxShadow--md-top),var(--pf-global--BoxShadow--md-bottom);--pf-c-notification-drawer__list-item-header--MarginBottom:var(--pf-global--spacer--xs);--pf-c-notification-drawer__list-item-header-icon--Color:inherit;--pf-c-notification-drawer__list-item-header-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-notification-drawer__list-item-header-title--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-notification-drawer__list-item-header-title--max-lines:1;--pf-c-notification-drawer__list-item--m-read__list-item-header-title--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-notification-drawer__list-item-description--MarginBottom:var(--pf-global--spacer--sm);--pf-c-notification-drawer__list-item-timestamp--Color:var(--pf-global--Color--200);--pf-c-notification-drawer__list-item-timestamp--FontSize:var(--pf-global--FontSize--sm);--pf-c-notification-drawer__group--m-expanded--group--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-notification-drawer__group--m-expanded--group--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-notification-drawer__group--m-expanded--MinHeight:0;--pf-c-notification-drawer__group-toggle--PaddingTop:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle--PaddingBottom:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle--PaddingLeft:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-notification-drawer__group-toggle--BorderColor:var(--pf-global--BorderColor--100);--pf-c-notification-drawer__group-toggle--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-notification-drawer__group-toggle--OutlineOffset:-0.25rem;--pf-c-notification-drawer__group-toggle-title--MarginRight:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle-title--max-lines:1;--pf-c-notification-drawer__group-toggle-count--MarginRight:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle-icon--MarginRight:var(--pf-global--spacer--md);--pf-c-notification-drawer__group-toggle-icon--Color:var(--pf-global--Color--200);--pf-c-notification-drawer__group-toggle-icon--Transition:.2s ease-in 0s;--pf-c-notification-drawer__group--m-expanded__group-toggle-icon--Rotate:90deg;background-color:var(--pf-c-notification-drawer--BackgroundColor);display:flex;flex-direction:column;height:100%}.pf-c-notification-drawer__header{align-items:baseline;background-color:var(--pf-c-notification-drawer__header--BackgroundColor);box-shadow:var(--pf-c-notification-drawer__header--BoxShadow);display:flex;flex-shrink:0;padding:var(--pf-c-notification-drawer__header--PaddingTop) var(--pf-c-notification-drawer__header--PaddingRight) var(--pf-c-notification-drawer__header--PaddingBottom) var(--pf-c-notification-drawer__header--PaddingLeft);position:relative;z-index:var(--pf-c-notification-drawer__header--ZIndex)}.pf-c-notification-drawer__header-title{font-size:var(--pf-c-notification-drawer__header-title--FontSize)}.pf-c-notification-drawer__header-status{margin-left:var(--pf-c-notification-drawer__header-status--MarginLeft)}.pf-c-notification-drawer__header-action{align-items:center;display:flex;margin-left:auto}.pf-c-notification-drawer__body{box-shadow:var(--pf-c-notification-drawer__body--ZIndex);overflow-y:auto}.pf-c-notification-drawer__list-item{background-color:var(--pf-c-notification-drawer__list-item--BackgroundColor);border-bottom:var(--pf-c-notification-drawer__list-item--BorderBottomWidth) solid var(--pf-c-notification-drawer__list-item--BorderBottomColor);box-shadow:var(--pf-c-notification-drawer__list-item--BoxShadow);display:grid;grid-template-columns:1fr auto;outline-offset:var(--pf-c-notification-drawer__list-item--OutlineOffset);padding:var(--pf-c-notification-drawer__list-item--PaddingTop) var(--pf-c-notification-drawer__list-item--PaddingRight) var(--pf-c-notification-drawer__list-item--PaddingBottom) var(--pf-c-notification-drawer__list-item--PaddingLeft);position:relative}.pf-c-notification-drawer__list-item.pf-m-read,.pf-c-notification-drawer__list-item:first-child{--pf-c-notification-drawer__list-item--BoxShadow:none}.pf-c-notification-drawer__list-item:not(.pf-m-read)+.pf-c-notification-drawer__list-item.pf-m-read{--pf-c-notification-drawer__list-item--BoxShadow:var(--pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow);--pf-c-notification-drawer__list-item--before--Top:var(--pf-c-notification-drawer__list-item--list-item--m-read--before--Top)}.pf-c-notification-drawer__list-item:before{background-color:var(--pf-c-notification-drawer__list-item--before--BackgroundColor);bottom:var(--pf-c-notification-drawer__list-item--before--Bottom);content:"";position:absolute;top:var(--pf-c-notification-drawer__list-item--before--Top);width:var(--pf-c-notification-drawer__list-item--before--Width)}.pf-c-notification-drawer__list-item.pf-m-info{--pf-c-notification-drawer__list-item--before--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-info__list-item--before--BackgroundColor);--pf-c-notification-drawer__list-item-header-icon--Color:var(--pf-c-notification-drawer__list-item--m-info__list-item-header-icon--Color)}.pf-c-notification-drawer__list-item.pf-m-warning{--pf-c-notification-drawer__list-item--before--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-warning__list-item--before--BackgroundColor);--pf-c-notification-drawer__list-item-header-icon--Color:var(--pf-c-notification-drawer__list-item--m-warning__list-item-header-icon--Color)}.pf-c-notification-drawer__list-item.pf-m-danger{--pf-c-notification-drawer__list-item--before--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-danger__list-item--before--BackgroundColor);--pf-c-notification-drawer__list-item-header-icon--Color:var(--pf-c-notification-drawer__list-item--m-danger__list-item-header-icon--Color)}.pf-c-notification-drawer__list-item.pf-m-success{--pf-c-notification-drawer__list-item--before--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-success__list-item--before--BackgroundColor);--pf-c-notification-drawer__list-item-header-icon--Color:var(--pf-c-notification-drawer__list-item--m-success__list-item-header-icon--Color)}.pf-c-notification-drawer__list-item.pf-m-default{--pf-c-notification-drawer__list-item--before--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-default__list-item--before--BackgroundColor);--pf-c-notification-drawer__list-item-header-icon--Color:var(--pf-c-notification-drawer__list-item--m-default__list-item-header-icon--Color)}.pf-c-notification-drawer__list-item.pf-m-read{--pf-c-notification-drawer__list-item--BorderBottomColor:var(--pf-c-notification-drawer__list-item--m-read--BorderBottomColor);--pf-c-notification-drawer__list-item--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-read--BackgroundColor);--pf-c-notification-drawer__list-item--before--Top:var(--pf-c-notification-drawer__list-item--m-read--before--Top);--pf-c-notification-drawer__list-item--before--Bottom:var(--pf-c-notification-drawer__list-item--m-read--before--Bottom);--pf-c-notification-drawer__list-item--before--BackgroundColor:var(--pf-c-notification-drawer__list-item--m-read--before--BackgroundColor);--pf-c-notification-drawer__list-item-header-title--FontWeight:var(--pf-c-notification-drawer__list-item--m-read__list-item-header-title--FontWeight);position:relative}.pf-c-notification-drawer__list-item.pf-m-hoverable{cursor:pointer}.pf-c-notification-drawer__list-item.pf-m-hoverable:hover{box-shadow:var(--pf-c-notification-drawer__list-item--m-hoverable--hover--BoxShadow);z-index:var(--pf-c-notification-drawer__list-item--m-hoverable--hover--ZIndex)}.pf-c-notification-drawer__list-item-header{align-items:baseline;display:flex;grid-column:1/2;grid-row:1/2;margin-bottom:var(--pf-c-notification-drawer__list-item-header--MarginBottom)}.pf-c-notification-drawer__list-item-header-icon{color:var(--pf-c-notification-drawer__list-item-header-icon--Color);margin-right:var(--pf-c-notification-drawer__list-item-header-icon--MarginRight)}.pf-c-notification-drawer__list-item-header-title{font-weight:var(--pf-c-notification-drawer__list-item-header-title--FontWeight);word-break:break-word}.pf-c-notification-drawer__list-item-header-title.pf-m-truncate{-webkit-box-orient:vertical;-webkit-line-clamp:var(--pf-c-notification-drawer__list-item-header-title--max-lines);display:-webkit-box;overflow:hidden}.pf-c-notification-drawer__list-item-action{grid-column:2/3;grid-row:1/3}.pf-c-notification-drawer__list-item-description{grid-column:1/2;grid-row:2/3;margin-bottom:var(--pf-c-notification-drawer__list-item-description--MarginBottom);word-break:break-word}.pf-c-notification-drawer__list-item-timestamp{color:var(--pf-c-notification-drawer__list-item-timestamp--Color);font-size:var(--pf-c-notification-drawer__list-item-timestamp--FontSize);grid-column:1/2;grid-row:3/4}.pf-c-notification-drawer__group-list{display:flex;flex-direction:column}.pf-c-notification-drawer__group.pf-m-expanded{min-height:var(--pf-c-notification-drawer__group--m-expanded--MinHeight)}.pf-c-notification-drawer__group.pf-m-expanded+.pf-c-notification-drawer__group{border-top:var(--pf-c-notification-drawer__group--m-expanded--group--BorderTopWidth) solid var(--pf-c-notification-drawer__group--m-expanded--group--BorderTopColor)}.pf-c-notification-drawer__group .pf-c-notification-drawer__list-item:last-child{--pf-c-notification-drawer__list-item--BorderBottomWidth:0;--pf-c-notification-drawer__list-item--before--Bottom:0}.pf-c-notification-drawer__group-toggle{align-items:baseline;background-color:var(--pf-c-notification-drawer__group-toggle--BackgroundColor);border:solid var(--pf-c-notification-drawer__group-toggle--BorderColor);border-width:0 0 var(--pf-c-notification-drawer__group-toggle--BorderBottomWidth) 0;display:flex;outline-offset:var(--pf-c-notification-drawer__group-toggle--OutlineOffset);padding:var(--pf-c-notification-drawer__group-toggle--PaddingTop) var(--pf-c-notification-drawer__group-toggle--PaddingRight) var(--pf-c-notification-drawer__group-toggle--PaddingBottom) var(--pf-c-notification-drawer__group-toggle--PaddingLeft);width:100%}.pf-c-notification-drawer__group-toggle-title{-webkit-box-orient:vertical;-webkit-line-clamp:var(--pf-c-notification-drawer__group-toggle-title--max-lines);display:-webkit-box;flex:1;margin-right:var(--pf-c-notification-drawer__group-toggle-title--MarginRight);overflow:hidden;text-align:left;word-break:break-word}.pf-c-notification-drawer__group-toggle-count{margin-left:auto;margin-right:var(--pf-c-notification-drawer__group-toggle-count--MarginRight)}.pf-c-notification-drawer__group-toggle-icon{color:var(--pf-c-notification-drawer__group-toggle-icon--Color);margin-right:var(--pf-c-notification-drawer__group-toggle-icon--MarginRight);transition:var(--pf-c-notification-drawer__group-toggle-icon--Transition)}.pf-c-notification-drawer__group.pf-m-expanded .pf-c-notification-drawer__group-toggle-icon{transform:rotate(var(--pf-c-notification-drawer__group--m-expanded__group-toggle-icon--Rotate))}:where(.pf-theme-dark) .pf-c-notification-drawer{--pf-c-notification-drawer--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-notification-drawer__header--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-notification-drawer__list-item--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-notification-drawer__list-item--BoxShadow:none;--pf-c-notification-drawer__list-item--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-notification-drawer__list-item--m-read--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow:none;--pf-c-notification-drawer__group-toggle--BackgroundColor:var(--pf-global--BackgroundColor--300)}.pf-c-page__sidebar.pf-m-light{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100)}.pf-c-page__header,.pf-c-page__main-section[class*=pf-m-dark-],.pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector{--pf-global--Color--100:var(--pf-global--Color--light-100);--pf-global--Color--200:var(--pf-global--Color--light-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--light-100);--pf-global--primary-color--100:var(--pf-global--primary-color--light-100);--pf-global--link--Color:var(--pf-global--link--Color--light);--pf-global--link--Color--hover:var(--pf-global--link--Color--light);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--dark-100)}.pf-c-page__header .pf-c-card,.pf-c-page__main-section[class*=pf-m-dark-] .pf-c-card,.pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-200)}.pf-c-page__header .pf-c-button,.pf-c-page__main-section[class*=pf-m-dark-] .pf-c-button,.pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--active--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-secondary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--BorderColor:var(--pf-global--Color--light-100)}.pf-c-page__header-tools-group,.pf-c-page__header-tools-item{--pf-hidden-visible--visible--Visibility:visible;--pf-hidden-visible--hidden--Display:none;--pf-hidden-visible--hidden--Visibility:hidden;--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility);display:var(--pf-hidden-visible--Display);visibility:var(--pf-hidden-visible--Visibility)}.pf-m-hidden.pf-c-page__header-tools-group,.pf-m-hidden.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}@media screen and (min-width:576px){.pf-m-hidden-on-sm.pf-c-page__header-tools-group,.pf-m-hidden-on-sm.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-sm.pf-c-page__header-tools-group,.pf-m-visible-on-sm.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-m-hidden-on-md.pf-c-page__header-tools-group,.pf-m-hidden-on-md.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-md.pf-c-page__header-tools-group,.pf-m-visible-on-md.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:992px){.pf-m-hidden-on-lg.pf-c-page__header-tools-group,.pf-m-hidden-on-lg.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-lg.pf-c-page__header-tools-group,.pf-m-visible-on-lg.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1200px){.pf-m-hidden-on-xl.pf-c-page__header-tools-group,.pf-m-hidden-on-xl.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-xl.pf-c-page__header-tools-group,.pf-m-visible-on-xl.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1450px){.pf-m-hidden-on-2xl.pf-c-page__header-tools-group,.pf-m-hidden-on-2xl.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-2xl.pf-c-page__header-tools-group,.pf-m-visible-on-2xl.pf-c-page__header-tools-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}.pf-c-page{--pf-c-page--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-page__header--BackgroundColor:var(--pf-global--BackgroundColor--dark-100);--pf-c-page__header--ZIndex:var(--pf-global--ZIndex--md);--pf-c-page__header--MinHeight:4.75rem;--pf-c-page__header-brand--PaddingLeft:var(--pf-global--spacer--md);--pf-c-page__header-brand--xl--PaddingRight:var(--pf-global--spacer--xl);--pf-c-page__header-brand--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-page__header-sidebar-toggle__c-button--PaddingTop:var(--pf-global--spacer--sm);--pf-c-page__header-sidebar-toggle__c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-page__header-sidebar-toggle__c-button--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-page__header-sidebar-toggle__c-button--MarginRight:var(--pf-global--spacer--md);--pf-c-page__header-sidebar-toggle__c-button--MarginLeft:calc(var(--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft)*-1);--pf-c-page__header-sidebar-toggle__c-button--FontSize:var(--pf-global--FontSize--2xl);--pf-c-page__header-brand-link--c-brand--MaxHeight:3.75rem;--pf-c-page__header-nav--BackgroundColor:var(--pf-global--BackgroundColor--dark-300);--pf-c-page__header-nav--xl--BackgroundColor:transparent;--pf-c-page__header-nav--xl--PaddingRight:var(--pf-global--spacer--xl);--pf-c-page__header-nav--xl--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-page__header-tools--MarginRight:var(--pf-global--spacer--md);--pf-c-page__header-tools--xl--MarginRight:var(--pf-global--spacer--lg);--pf-c-page__header-tools--c-avatar--MarginLeft:var(--pf-global--spacer--md);--pf-c-page__header-tools-group--MarginLeft:var(--pf-global--spacer--xl);--pf-c-page__header-tools-group--Display:flex;--pf-c-page__header-tools-item--Display:block;--pf-c-page__header-tools-item--c-notification-badge--hover--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-page__header-tools--c-button--notification-badge--m-unread--after--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-page__header-tools--c-button--notification-badge--m-attention--after--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-page__header-tools--c-button--m-selected--notification-badge--m-unread--after--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-page__header-tools--c-button--m-selected--notification-badge--m-attention--after--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-page__header-tools--c-button--m-selected--before--Width:auto;--pf-c-page__header-tools--c-button--m-selected--before--Height:auto;--pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-page__header-tools--c-button--m-selected--before--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-page__header-tools--c-button--m-selected--c-notification-badge--m-unread--after--BorderColor:transparent;--pf-c-page__sidebar--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-page__sidebar--Width:18.125rem;--pf-c-page__sidebar--BackgroundColor:var(--pf-global--BackgroundColor--dark-300);--pf-c-page__sidebar--m-light--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-page__sidebar--m-light--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-page__sidebar--m-light--BorderRightColor:var(--pf-global--BorderColor--100);--pf-c-page__sidebar--BoxShadow:var(--pf-global--BoxShadow--lg-right);--pf-c-page__sidebar--Transition:var(--pf-global--Transition);--pf-c-page__sidebar--TranslateX:-100%;--pf-c-page__sidebar--TranslateZ:0;--pf-c-page__sidebar--m-expanded--TranslateX:0;--pf-c-page__sidebar--xl--TranslateX:0;--pf-c-page__sidebar-body--PaddingTop:var(--pf-global--spacer--sm);--pf-c-page__sidebar-body--PaddingBottom:var(--pf-global--spacer--md);--pf-c-page__sidebar-body--m-menu--PaddingTop:0;--pf-c-page__sidebar-body--m-menu--PaddingBottom:0;--pf-c-page__sidebar-body--m-menu--BorderTopColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-page__sidebar-body--m-menu--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-page__sidebar-body--m-menu--c-context-selector--BorderBottomColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-page__main--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-page__main-section--PaddingTop:var(--pf-global--spacer--md);--pf-c-page__main-section--PaddingRight:var(--pf-global--spacer--md);--pf-c-page__main-section--PaddingBottom:var(--pf-global--spacer--md);--pf-c-page__main-section--PaddingLeft:var(--pf-global--spacer--md);--pf-c-page__main-section--xl--PaddingTop:var(--pf-global--spacer--lg);--pf-c-page__main-section--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-page__main-section--xl--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-page__main-section--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-page__main-breadcrumb--main-section--PaddingTop:var(--pf-global--spacer--md);--pf-c-page__main-section--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-page__main-section--m-light--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-page__main-section--m-light-100--BackgroundColor:var(--pf-global--BackgroundColor--150);--pf-c-page__main-section--m-dark-100--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-100);--pf-c-page__main-section--m-dark-200--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-200);--pf-c-page__main-breadcrumb--page__main-tabs--PaddingTop:var(--pf-global--spacer--md);--pf-c-page__main-nav--page__main-tabs--PaddingTop:var(--pf-global--spacer--md);--pf-c-page--section--m-limit-width--MaxWidth:calc(125rem - var(--pf-c-page__sidebar--Width));--pf-c-page--section--m-sticky-top--ZIndex:var(--pf-global--ZIndex--md);--pf-c-page--section--m-sticky-top--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-page--section--m-sticky-bottom--ZIndex:var(--pf-global--ZIndex--md);--pf-c-page--section--m-sticky-bottom--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-page--section--m-shadow-bottom--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-page--section--m-shadow-bottom--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-page--section--m-shadow-top--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-page--section--m-shadow-top--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-page__main-nav--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-page__main-nav--PaddingTop:var(--pf-global--spacer--md);--pf-c-page__main-nav--PaddingRight:0;--pf-c-page__main-nav--PaddingLeft:0;--pf-c-page__main-nav--m-sticky-top--PaddingBottom:var(--pf-global--spacer--md);--pf-c-page__main-nav--xl--PaddingRight:var(--pf-global--spacer--sm);--pf-c-page__main-nav--xl--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-page__main-subnav--BackgroundColor:var(--pf-global--BackgroundColor--dark-300);--pf-c-page__main-subnav--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-page__main-subnav--BorderTopColor:var(--pf-global--palette--black-800);--pf-c-page__main-subnav--BorderLeftWidth:0;--pf-c-page__main-subnav--BorderLeftColor:var(--pf-global--palette--black-800);--pf-c-page__sidebar--main__main-subnav--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-page__sidebar--m-collapsed--main__main-subnav--BorderLeftWidth:0;--pf-c-page__main-breadcrumb--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-page__main-breadcrumb--PaddingTop:var(--pf-global--spacer--md);--pf-c-page__main-breadcrumb--PaddingRight:var(--pf-global--spacer--md);--pf-c-page__main-breadcrumb--PaddingBottom:0;--pf-c-page__main-breadcrumb--PaddingLeft:var(--pf-global--spacer--md);--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom:var(--pf-global--spacer--md);--pf-c-page__main-breadcrumb--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-page__main-breadcrumb--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-page__main-tabs--PaddingTop:0;--pf-c-page__main-tabs--PaddingRight:0;--pf-c-page__main-tabs--PaddingBottom:0;--pf-c-page__main-tabs--PaddingLeft:0;--pf-c-page__main-tabs--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-page__main-wizard--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-page__main-wizard--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-page__main-wizard--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-page__main-wizard--m-light-200--BackgroundColor:var(--pf-global--BackgroundColor--200);background-color:var(--pf-c-page--BackgroundColor);display:grid;grid-template-areas:"header" "main";grid-template-columns:1fr;grid-template-rows:max-content 1fr;height:100%}@media (min-width:1200px){.pf-c-page{--pf-c-page__header-brand--PaddingLeft:var(--pf-c-page__header-brand--xl--PaddingLeft)}}@media screen and (min-width:1200px){.pf-c-page{--pf-c-page__header-nav--BackgroundColor:var(--pf-c-page__header-nav--xl--BackgroundColor);--pf-c-page__header-nav--PaddingRight:var(--pf-c-page__header-nav--xl--PaddingRight);--pf-c-page__header-nav--PaddingLeft:var(--pf-c-page__header-nav--xl--PaddingLeft);--pf-c-page__header-tools--MarginRight:var(--pf-c-page__header-tools--xl--MarginRight);--pf-c-page__sidebar--TranslateX:var(--pf-c-page__sidebar--xl--TranslateX);--pf-c-page__main-section--PaddingTop:var(--pf-c-page__main-section--xl--PaddingTop);--pf-c-page__main-section--PaddingRight:var(--pf-c-page__main-section--xl--PaddingRight);--pf-c-page__main-section--PaddingBottom:var(--pf-c-page__main-section--xl--PaddingBottom);--pf-c-page__main-section--PaddingLeft:var(--pf-c-page__main-section--xl--PaddingLeft);--pf-c-page__main-nav--PaddingRight:var(--pf-c-page__main-nav--xl--PaddingRight);--pf-c-page__main-nav--PaddingLeft:var(--pf-c-page__main-nav--xl--PaddingLeft);--pf-c-page__main-breadcrumb--PaddingRight:var(--pf-c-page__main-breadcrumb--xl--PaddingRight);--pf-c-page__main-breadcrumb--PaddingLeft:var(--pf-c-page__main-breadcrumb--xl--PaddingLeft)}}@media (min-width:1200px){.pf-c-page{grid-template-areas:"header header" "nav main";grid-template-columns:max-content 1fr}}.pf-c-page.pf-m-full-height{height:100vh;height:100dvh;max-height:100%}.pf-c-page>.pf-c-masthead,.pf-c-page__header{grid-area:header;z-index:var(--pf-c-page__header--ZIndex)}.pf-c-page__header{align-items:center;background-color:var(--pf-c-page__header--BackgroundColor);color:var(--pf-global--Color--100);display:grid;grid-template-columns:auto auto;min-height:var(--pf-c-page__header--MinHeight);min-width:0}.pf-c-page__header>*{align-items:center;display:flex}@media screen and (min-width:992px){.pf-c-page__header{grid-template-columns:auto 1fr auto}}.pf-c-page__header .pf-c-masthead{align-self:stretch;grid-column:span 2}.pf-c-page__header-brand{grid-column:1/2;padding-left:var(--pf-c-page__header-brand--PaddingLeft)}@media (min-width:1200px){.pf-c-page__header-brand{padding-right:var(--pf-c-page__header-brand--xl--PaddingRight)}}.pf-c-page__header-brand-link{align-items:center;display:flex;flex:1}.pf-c-page__header-brand-link .pf-c-brand{max-height:var(--pf-c-page__header-brand-link--c-brand--MaxHeight)}.pf-c-page__header-brand-toggle .pf-c-button{font-size:var(--pf-c-page__header-sidebar-toggle__c-button--FontSize);line-height:1;margin-left:var(--pf-c-page__header-sidebar-toggle__c-button--MarginLeft);margin-right:var(--pf-c-page__header-sidebar-toggle__c-button--MarginRight);padding:var(--pf-c-page__header-sidebar-toggle__c-button--PaddingTop) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingRight) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingBottom) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft)}.pf-c-page__header-nav{align-self:stretch;background-color:var(--pf-c-page__header-nav--BackgroundColor);grid-column:1/-1;grid-row:2/3;min-width:0;padding-left:var(--pf-c-page__header-nav--PaddingLeft);padding-right:var(--pf-c-page__header-nav--PaddingRight)}@media screen and (min-width:1200px){.pf-c-page__header-nav{grid-column:2/3;grid-row:1/2}}.pf-c-page__header-nav .pf-c-nav{align-self:stretch}.pf-c-page__header-tools{grid-column:2/3;margin-left:auto;margin-right:var(--pf-c-page__header-tools--MarginRight)}.pf-c-page__header-tools .pf-c-avatar{margin-left:var(--pf-c-page__header-tools--c-avatar--MarginLeft)}@media screen and (min-width:992px){.pf-c-page__header-tools{grid-column:3/4}}.pf-c-page__header-tools-group{--pf-hidden-visible--visible--Display:var(--pf-c-page__header-tools-group--Display);align-items:center}.pf-c-page__header-tools-group+.pf-c-page__header-tools-group{margin-left:var(--pf-c-page__header-tools-group--MarginLeft)}.pf-c-page__header-tools-item{--pf-hidden-visible--visible--Display:var(--pf-c-page__header-tools-item--Display)}.pf-c-page__header-tools-item .pf-c-notification-badge.pf-m-read:hover{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-page__header-tools-item--c-notification-badge--hover--BackgroundColor)}.pf-c-page__header-tools-item.pf-m-selected .pf-c-button{background-color:var(--pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor);border-radius:var(--pf-c-page__header-tools--c-button--m-selected--before--BorderRadius)}.pf-c-page__header-tools-item.pf-m-selected .pf-c-button:before{bottom:0;content:"";height:var(--pf-c-page__header-tools--c-button--m-selected--before--Height);left:0;position:absolute;right:0;top:0;width:var(--pf-c-page__header-tools--c-button--m-selected--before--Width)}.pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-unread{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-page__header-tools--c-button--m-selected--notification-badge--m-unread--after--BackgroundColor)}.pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-unread:after{border-color:var(--pf-c-page__header-tools--c-button--m-selected--c-notification-badge--m-unread--after--BorderColor)}.pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-attention{--pf-c-notification-badge--after--BackgroundColor:var(--pf-global--danger-color--200)}.pf-c-page__header-tools-item .pf-c-button:focus .pf-c-notification-badge.pf-m-unread{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-page__header-tools--c-button--notification-badge--m-unread--after--BackgroundColor)}.pf-c-page__header-tools-item .pf-c-button:focus .pf-c-notification-badge.pf-m-attention{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-page__header-tools--c-button--notification-badge--m-attention--after--BackgroundColor)}.pf-c-page__sidebar{-webkit-overflow-scrolling:touch;background-color:var(--pf-c-page__sidebar--BackgroundColor);grid-area:nav;grid-column-start:1;grid-row-start:2;overflow-x:hidden;overflow-y:auto;transform:translateX(var(--pf-c-page__sidebar--TranslateX)) translateZ(var(--pf-c-page__sidebar--TranslateZ));transition:var(--pf-c-page__sidebar--Transition);width:var(--pf-c-page__sidebar--Width);z-index:var(--pf-c-page__sidebar--ZIndex)}.pf-c-page__sidebar.pf-m-expanded{--pf-c-page__sidebar--TranslateX:var(--pf-c-page__sidebar--m-expanded--TranslateX);box-shadow:var(--pf-c-page__sidebar--BoxShadow)}@media screen and (min-width:1200px){.pf-c-page__sidebar.pf-m-expanded{--pf-c-page__sidebar--BoxShadow:none}}.pf-c-page__sidebar.pf-m-collapsed{max-width:0;overflow:hidden}.pf-c-page__sidebar.pf-m-light{--pf-c-page__sidebar--BackgroundColor:var(--pf-c-page__sidebar--m-light--BackgroundColor);border-right:var(--pf-c-page__sidebar--m-light--BorderRightWidth) solid var(--pf-c-page__sidebar--m-light--BorderRightColor);color:var(--pf-global--Color--100)}.pf-c-page__sidebar-body{padding-bottom:var(--pf-c-page__sidebar-body--PaddingBottom);padding-top:var(--pf-c-page__sidebar-body--PaddingTop)}.pf-c-page__sidebar-body.pf-m-menu{--pf-c-page__sidebar-body--PaddingTop:var(--pf-c-page__sidebar-body--m-menu--PaddingTop);--pf-c-page__sidebar-body--PaddingBottom:var(--pf-c-page__sidebar-body--m-menu--PaddingBottom);background-color:var(--pf-global--palette--black-900);border-top:var(--pf-c-page__sidebar-body--m-menu--BorderTopWidth) solid var(--pf-c-page__sidebar-body--m-menu--BorderTopColor)}.pf-c-page__sidebar-body.pf-m-menu+.pf-c-page__sidebar-body.pf-m-menu{--pf-c-page__sidebar-body--m-menu--BorderTopWidth:0}.pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector{--pf-c-context-selector__toggle--BorderTopColor:transparent;--pf-c-context-selector__toggle--BorderRightColor:transparent;--pf-c-context-selector__toggle--BorderBottomColor:var(--pf-c-page__sidebar-body--m-menu--c-context-selector--BorderBottomColor);--pf-c-context-selector__toggle--BorderLeftColor:transparent;--pf-c-context-selector__menu--Top:100%;color:var(--pf-global--Color--100);width:100%}.pf-c-page__main-breadcrumb.pf-m-limit-width,.pf-c-page__main-nav.pf-m-limit-width,.pf-c-page__main-section.pf-m-limit-width,.pf-c-page__main-tabs.pf-m-limit-width,.pf-c-page__main-wizard.pf-m-limit-width{display:flex;flex-direction:column;padding:0}.pf-c-page__main-breadcrumb.pf-m-limit-width>.pf-c-page__main-body,.pf-c-page__main-nav.pf-m-limit-width>.pf-c-page__main-body,.pf-c-page__main-section.pf-m-limit-width>.pf-c-page__main-body,.pf-c-page__main-tabs.pf-m-limit-width>.pf-c-page__main-body,.pf-c-page__main-wizard.pf-m-limit-width>.pf-c-page__main-body{flex:1;max-width:var(--pf-c-page--section--m-limit-width--MaxWidth)}.pf-c-page__main-breadcrumb.pf-m-limit-width.pf-m-align-center,.pf-c-page__main-nav.pf-m-limit-width.pf-m-align-center,.pf-c-page__main-section.pf-m-limit-width.pf-m-align-center,.pf-c-page__main-tabs.pf-m-limit-width.pf-m-align-center,.pf-c-page__main-wizard.pf-m-limit-width.pf-m-align-center{align-items:center}.pf-c-page__main-breadcrumb.pf-m-limit-width.pf-m-align-center>.pf-c-page__main-body,.pf-c-page__main-nav.pf-m-limit-width.pf-m-align-center>.pf-c-page__main-body,.pf-c-page__main-section.pf-m-limit-width.pf-m-align-center>.pf-c-page__main-body,.pf-c-page__main-tabs.pf-m-limit-width.pf-m-align-center>.pf-c-page__main-body,.pf-c-page__main-wizard.pf-m-limit-width.pf-m-align-center>.pf-c-page__main-body{width:100%}.pf-c-page__main-breadcrumb,.pf-c-page__main-group,.pf-c-page__main-nav,.pf-c-page__main-section,.pf-c-page__main-subnav,.pf-c-page__main-tabs,.pf-c-page__main-wizard{flex-shrink:0}.pf-c-page__main-breadcrumb.pf-m-overflow-scroll,.pf-c-page__main-group.pf-m-overflow-scroll,.pf-c-page__main-nav.pf-m-overflow-scroll,.pf-c-page__main-section.pf-m-overflow-scroll,.pf-c-page__main-subnav.pf-m-overflow-scroll,.pf-c-page__main-tabs.pf-m-overflow-scroll,.pf-c-page__main-wizard.pf-m-overflow-scroll{flex-shrink:1;overflow:auto;position:relative}.pf-c-page__main-breadcrumb.pf-m-shadow-bottom,.pf-c-page__main-group.pf-m-shadow-bottom,.pf-c-page__main-nav.pf-m-shadow-bottom,.pf-c-page__main-section.pf-m-shadow-bottom,.pf-c-page__main-subnav.pf-m-shadow-bottom,.pf-c-page__main-tabs.pf-m-shadow-bottom,.pf-c-page__main-wizard.pf-m-shadow-bottom{box-shadow:var(--pf-c-page--section--m-shadow-bottom--BoxShadow);z-index:var(--pf-c-page--section--m-shadow-bottom--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-shadow-top,.pf-c-page__main-group.pf-m-shadow-top,.pf-c-page__main-nav.pf-m-shadow-top,.pf-c-page__main-section.pf-m-shadow-top,.pf-c-page__main-subnav.pf-m-shadow-top,.pf-c-page__main-tabs.pf-m-shadow-top,.pf-c-page__main-wizard.pf-m-shadow-top{box-shadow:var(--pf-c-page--section--m-shadow-top--BoxShadow);z-index:var(--pf-c-page--section--m-shadow-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-top,.pf-c-page__main-group.pf-m-sticky-top,.pf-c-page__main-nav.pf-m-sticky-top,.pf-c-page__main-section.pf-m-sticky-top,.pf-c-page__main-subnav.pf-m-sticky-top,.pf-c-page__main-tabs.pf-m-sticky-top,.pf-c-page__main-wizard.pf-m-sticky-top{box-shadow:var(--pf-c-page--section--m-sticky-top--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-page--section--m-sticky-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-bottom,.pf-c-page__main-group.pf-m-sticky-bottom,.pf-c-page__main-nav.pf-m-sticky-bottom,.pf-c-page__main-section.pf-m-sticky-bottom,.pf-c-page__main-subnav.pf-m-sticky-bottom,.pf-c-page__main-tabs.pf-m-sticky-bottom,.pf-c-page__main-wizard.pf-m-sticky-bottom{bottom:0;box-shadow:var(--pf-c-page--section--m-sticky-bottom--BoxShadow);position:sticky;z-index:var(--pf-c-page--section--m-sticky-bottom--ZIndex)}@media (min-height:0){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-sm-height,.pf-c-page__main-group.pf-m-sticky-top-on-sm-height,.pf-c-page__main-nav.pf-m-sticky-top-on-sm-height,.pf-c-page__main-section.pf-m-sticky-top-on-sm-height,.pf-c-page__main-subnav.pf-m-sticky-top-on-sm-height,.pf-c-page__main-tabs.pf-m-sticky-top-on-sm-height,.pf-c-page__main-wizard.pf-m-sticky-top-on-sm-height{box-shadow:var(--pf-c-page--section--m-sticky-top--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-page--section--m-sticky-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-bottom-on-sm-height,.pf-c-page__main-group.pf-m-sticky-bottom-on-sm-height,.pf-c-page__main-nav.pf-m-sticky-bottom-on-sm-height,.pf-c-page__main-section.pf-m-sticky-bottom-on-sm-height,.pf-c-page__main-subnav.pf-m-sticky-bottom-on-sm-height,.pf-c-page__main-tabs.pf-m-sticky-bottom-on-sm-height,.pf-c-page__main-wizard.pf-m-sticky-bottom-on-sm-height{bottom:0;box-shadow:var(--pf-c-page--section--m-sticky-bottom--BoxShadow);position:sticky;z-index:var(--pf-c-page--section--m-sticky-bottom--ZIndex)}}@media (min-height:40rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-md-height,.pf-c-page__main-group.pf-m-sticky-top-on-md-height,.pf-c-page__main-nav.pf-m-sticky-top-on-md-height,.pf-c-page__main-section.pf-m-sticky-top-on-md-height,.pf-c-page__main-subnav.pf-m-sticky-top-on-md-height,.pf-c-page__main-tabs.pf-m-sticky-top-on-md-height,.pf-c-page__main-wizard.pf-m-sticky-top-on-md-height{box-shadow:var(--pf-c-page--section--m-sticky-top--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-page--section--m-sticky-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-bottom-on-md-height,.pf-c-page__main-group.pf-m-sticky-bottom-on-md-height,.pf-c-page__main-nav.pf-m-sticky-bottom-on-md-height,.pf-c-page__main-section.pf-m-sticky-bottom-on-md-height,.pf-c-page__main-subnav.pf-m-sticky-bottom-on-md-height,.pf-c-page__main-tabs.pf-m-sticky-bottom-on-md-height,.pf-c-page__main-wizard.pf-m-sticky-bottom-on-md-height{bottom:0;box-shadow:var(--pf-c-page--section--m-sticky-bottom--BoxShadow);position:sticky;z-index:var(--pf-c-page--section--m-sticky-bottom--ZIndex)}}@media (min-height:48rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-lg-height,.pf-c-page__main-group.pf-m-sticky-top-on-lg-height,.pf-c-page__main-nav.pf-m-sticky-top-on-lg-height,.pf-c-page__main-section.pf-m-sticky-top-on-lg-height,.pf-c-page__main-subnav.pf-m-sticky-top-on-lg-height,.pf-c-page__main-tabs.pf-m-sticky-top-on-lg-height,.pf-c-page__main-wizard.pf-m-sticky-top-on-lg-height{box-shadow:var(--pf-c-page--section--m-sticky-top--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-page--section--m-sticky-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-bottom-on-lg-height,.pf-c-page__main-group.pf-m-sticky-bottom-on-lg-height,.pf-c-page__main-nav.pf-m-sticky-bottom-on-lg-height,.pf-c-page__main-section.pf-m-sticky-bottom-on-lg-height,.pf-c-page__main-subnav.pf-m-sticky-bottom-on-lg-height,.pf-c-page__main-tabs.pf-m-sticky-bottom-on-lg-height,.pf-c-page__main-wizard.pf-m-sticky-bottom-on-lg-height{bottom:0;box-shadow:var(--pf-c-page--section--m-sticky-bottom--BoxShadow);position:sticky;z-index:var(--pf-c-page--section--m-sticky-bottom--ZIndex)}}@media (min-height:60rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-xl-height,.pf-c-page__main-group.pf-m-sticky-top-on-xl-height,.pf-c-page__main-nav.pf-m-sticky-top-on-xl-height,.pf-c-page__main-section.pf-m-sticky-top-on-xl-height,.pf-c-page__main-subnav.pf-m-sticky-top-on-xl-height,.pf-c-page__main-tabs.pf-m-sticky-top-on-xl-height,.pf-c-page__main-wizard.pf-m-sticky-top-on-xl-height{box-shadow:var(--pf-c-page--section--m-sticky-top--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-page--section--m-sticky-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-bottom-on-xl-height,.pf-c-page__main-group.pf-m-sticky-bottom-on-xl-height,.pf-c-page__main-nav.pf-m-sticky-bottom-on-xl-height,.pf-c-page__main-section.pf-m-sticky-bottom-on-xl-height,.pf-c-page__main-subnav.pf-m-sticky-bottom-on-xl-height,.pf-c-page__main-tabs.pf-m-sticky-bottom-on-xl-height,.pf-c-page__main-wizard.pf-m-sticky-bottom-on-xl-height{bottom:0;box-shadow:var(--pf-c-page--section--m-sticky-bottom--BoxShadow);position:sticky;z-index:var(--pf-c-page--section--m-sticky-bottom--ZIndex)}}@media (min-height:80rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-group.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-nav.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-section.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-subnav.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-tabs.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-wizard.pf-m-sticky-top-on-2xl-height{box-shadow:var(--pf-c-page--section--m-sticky-top--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-page--section--m-sticky-top--ZIndex)}.pf-c-page__main-breadcrumb.pf-m-sticky-bottom-on-2xl-height,.pf-c-page__main-group.pf-m-sticky-bottom-on-2xl-height,.pf-c-page__main-nav.pf-m-sticky-bottom-on-2xl-height,.pf-c-page__main-section.pf-m-sticky-bottom-on-2xl-height,.pf-c-page__main-subnav.pf-m-sticky-bottom-on-2xl-height,.pf-c-page__main-tabs.pf-m-sticky-bottom-on-2xl-height,.pf-c-page__main-wizard.pf-m-sticky-bottom-on-2xl-height{bottom:0;box-shadow:var(--pf-c-page--section--m-sticky-bottom--BoxShadow);position:sticky;z-index:var(--pf-c-page--section--m-sticky-bottom--ZIndex)}}.pf-c-page__drawer,.pf-c-page__main{-webkit-overflow-scrolling:touch;grid-area:main;overflow-x:hidden;overflow-y:auto;z-index:var(--pf-c-page__main--ZIndex)}.pf-c-page__drawer:focus,.pf-c-page__main:focus{outline:0}.pf-c-page__main,.pf-c-page__main-drawer,.pf-c-page__main-group{display:flex;flex-direction:column}.pf-c-page__main-nav{background-color:var(--pf-c-page__main-nav--BackgroundColor);padding-left:var(--pf-c-page__main-nav--PaddingLeft);padding-right:var(--pf-c-page__main-nav--PaddingRight);padding-top:var(--pf-c-page__main-nav--PaddingTop)}.pf-c-page__main-group.pf-m-sticky-top .pf-c-page__main-nav:last-child,.pf-c-page__main-nav.pf-m-sticky-top{padding-bottom:var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom)}@media (min-height:0){.pf-c-page__main-group.pf-m-sticky-top-on-sm-height .pf-c-page__main-nav:last-child,.pf-c-page__main-nav.pf-m-sticky-top-on-sm-height{padding-bottom:var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom)}}@media (min-height:40rem){.pf-c-page__main-group.pf-m-sticky-top-on-md-height .pf-c-page__main-nav:last-child,.pf-c-page__main-nav.pf-m-sticky-top-on-md-height{padding-bottom:var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom)}}@media (min-height:48rem){.pf-c-page__main-group.pf-m-sticky-top-on-lg-height .pf-c-page__main-nav:last-child,.pf-c-page__main-nav.pf-m-sticky-top-on-lg-height{padding-bottom:var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom)}}@media (min-height:60rem){.pf-c-page__main-group.pf-m-sticky-top-on-xl-height .pf-c-page__main-nav:last-child,.pf-c-page__main-nav.pf-m-sticky-top-on-xl-height{padding-bottom:var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom)}}@media (min-height:80rem){.pf-c-page__main-group.pf-m-sticky-top-on-2xl-height .pf-c-page__main-nav:last-child,.pf-c-page__main-nav.pf-m-sticky-top-on-2xl-height{padding-bottom:var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom)}}.pf-c-page__main-subnav{background-color:var(--pf-c-page__main-subnav--BackgroundColor);border-left:var(--pf-c-page__main-subnav--BorderLeftWidth) solid var(--pf-c-page__main-subnav--BorderLeftColor);border-top:var(--pf-c-page__main-subnav--BorderTopWidth) solid var(--pf-c-page__main-subnav--BorderTopColor)}@media screen and (min-width:1200px){.pf-c-page__sidebar~.pf-c-page__main{--pf-c-page__main-subnav--BorderLeftWidth:var(--pf-c-page__sidebar--main__main-subnav--BorderLeftWidth)}}.pf-c-page__sidebar.pf-m-collapsed~.pf-c-page__main{--pf-c-page__main-subnav--BorderLeftWidth:var(--pf-c-page__sidebar--m-collapsed--main__main-subnav--BorderLeftWidth)}.pf-c-page__main-breadcrumb{background-color:var(--pf-c-page__main-breadcrumb--BackgroundColor);padding:var(--pf-c-page__main-breadcrumb--PaddingTop) var(--pf-c-page__main-breadcrumb--PaddingRight) var(--pf-c-page__main-breadcrumb--PaddingBottom) var(--pf-c-page__main-breadcrumb--PaddingLeft)}.pf-c-page__main-breadcrumb+.pf-c-page__main-section{--pf-c-page__main-section--PaddingTop:var(--pf-c-page__main-breadcrumb--main-section--PaddingTop)}.pf-c-page__main-breadcrumb.pf-m-sticky-top,.pf-c-page__main-group.pf-m-sticky-top .pf-c-page__main-breadcrumb:last-child{--pf-c-page__main-breadcrumb--PaddingBottom:var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom)}@media (min-height:0){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-sm-height,.pf-c-page__main-group.pf-m-sticky-top-on-sm-height .pf-c-page__main-breadcrumb:last-child{--pf-c-page__main-breadcrumb--PaddingBottom:var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom)}}@media (min-height:40rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-md-height,.pf-c-page__main-group.pf-m-sticky-top-on-md-height .pf-c-page__main-breadcrumb:last-child{--pf-c-page__main-breadcrumb--PaddingBottom:var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom)}}@media (min-height:48rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-lg-height,.pf-c-page__main-group.pf-m-sticky-top-on-lg-height .pf-c-page__main-breadcrumb:last-child{--pf-c-page__main-breadcrumb--PaddingBottom:var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom)}}@media (min-height:60rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-xl-height,.pf-c-page__main-group.pf-m-sticky-top-on-xl-height .pf-c-page__main-breadcrumb:last-child{--pf-c-page__main-breadcrumb--PaddingBottom:var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom)}}@media (min-height:80rem){.pf-c-page__main-breadcrumb.pf-m-sticky-top-on-2xl-height,.pf-c-page__main-group.pf-m-sticky-top-on-2xl-height .pf-c-page__main-breadcrumb:last-child{--pf-c-page__main-breadcrumb--PaddingBottom:var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom)}}.pf-c-page__main-tabs{background-color:var(--pf-c-page__main-tabs--BackgroundColor);padding:var(--pf-c-page__main-tabs--PaddingTop) var(--pf-c-page__main-tabs--PaddingRight) var(--pf-c-page__main-tabs--PaddingBottom) var(--pf-c-page__main-tabs--PaddingLeft)}.pf-c-page__main-nav+.pf-c-page__main-tabs{--pf-c-page__main-tabs--PaddingTop:var(--pf-c-page__main-nav--page__main-tabs--PaddingTop)}.pf-c-page__main-breadcrumb+.pf-c-page__main-tabs{--pf-c-page__main-tabs--PaddingTop:var(--pf-c-page__main-breadcrumb--page__main-tabs--PaddingTop)}.pf-c-page__main-group.pf-m-fill,.pf-c-page__main-group:last-child,.pf-c-page__main-group:only-child,.pf-c-page__main-section.pf-m-fill,.pf-c-page__main-section:last-child,.pf-c-page__main-section:only-child,.pf-c-page__main-wizard.pf-m-fill,.pf-c-page__main-wizard:last-child,.pf-c-page__main-wizard:only-child{flex-grow:1}.pf-c-page__main-group.pf-m-no-fill,.pf-c-page__main-section.pf-m-no-fill,.pf-c-page__main-wizard.pf-m-no-fill{flex-grow:0}.pf-c-page__main-section{background-color:var(--pf-c-page__main-section--BackgroundColor);padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-light{--pf-c-page__main-section--BackgroundColor:var(--pf-c-page__main-section--m-light--BackgroundColor)}.pf-c-page__main-section.pf-m-light-100{--pf-c-page__main-section--BackgroundColor:var(--pf-c-page__main-section--m-light-100--BackgroundColor)}.pf-c-page__main-section[class*=pf-m-dark-]{color:var(--pf-global--Color--100)}.pf-c-page__main-section.pf-m-dark-100{--pf-c-page__main-section--BackgroundColor:var(--pf-c-page__main-section--m-dark-100--BackgroundColor)}.pf-c-page__main-section.pf-m-dark-200{--pf-c-page__main-section--BackgroundColor:var(--pf-c-page__main-section--m-dark-200--BackgroundColor)}.pf-c-page__main-section.pf-m-padding{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-padding.pf-m-limit-width{padding:0}.pf-c-page__main-section.pf-m-padding.pf-m-limit-width .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-no-padding,.pf-c-page__main-section.pf-m-no-padding.pf-m-limit-width .pf-c-page__main-body{padding:0}@media (min-width:576px){.pf-c-page__main-section.pf-m-padding-on-sm{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-padding-on-sm.pf-m-limit-width{padding:0}.pf-c-page__main-section.pf-m-padding-on-sm.pf-m-limit-width .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-no-padding-on-sm,.pf-c-page__main-section.pf-m-no-padding-on-sm.pf-m-limit-width .pf-c-page__main-body{padding:0}}@media (min-width:768px){.pf-c-page__main-section.pf-m-padding-on-md{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-padding-on-md.pf-m-limit-width{padding:0}.pf-c-page__main-section.pf-m-padding-on-md.pf-m-limit-width .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-no-padding-on-md,.pf-c-page__main-section.pf-m-no-padding-on-md.pf-m-limit-width .pf-c-page__main-body{padding:0}}@media (min-width:992px){.pf-c-page__main-section.pf-m-padding-on-lg{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-padding-on-lg.pf-m-limit-width{padding:0}.pf-c-page__main-section.pf-m-padding-on-lg.pf-m-limit-width .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-no-padding-on-lg,.pf-c-page__main-section.pf-m-no-padding-on-lg.pf-m-limit-width .pf-c-page__main-body{padding:0}}@media (min-width:1200px){.pf-c-page__main-section.pf-m-padding-on-xl{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-padding-on-xl.pf-m-limit-width{padding:0}.pf-c-page__main-section.pf-m-padding-on-xl.pf-m-limit-width .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-no-padding-on-xl,.pf-c-page__main-section.pf-m-no-padding-on-xl.pf-m-limit-width .pf-c-page__main-body{padding:0}}@media (min-width:1450px){.pf-c-page__main-section.pf-m-padding-on-2xl{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-padding-on-2xl.pf-m-limit-width{padding:0}.pf-c-page__main-section.pf-m-padding-on-2xl.pf-m-limit-width .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-section.pf-m-no-padding-on-2xl,.pf-c-page__main-section.pf-m-no-padding-on-2xl.pf-m-limit-width .pf-c-page__main-body{padding:0}}.pf-c-page__main-wizard{background-color:var(--pf-c-page__main-wizard--BackgroundColor);border-top:var(--pf-c-page__main-wizard--BorderTopWidth) solid var(--pf-c-page__main-wizard--BorderTopColor);flex:1 1;min-height:0}.pf-c-page__main-wizard:first-child{--pf-c-page__main-wizard--BorderTopWidth:0}.pf-c-page__main-wizard.pf-m-light-200{--pf-c-page__main-wizard--BackgroundColor:var(--pf-c-page__main-wizard--m-light-200--BackgroundColor)}.pf-c-page__main-wizard .pf-c-page__main-body{min-height:0}.pf-c-page__main-group{flex-shrink:0}.pf-c-page__main-nav .pf-c-page__main-body{padding-left:var(--pf-c-page__main-nav--PaddingLeft);padding-right:var(--pf-c-page__main-nav--PaddingRight);padding-top:var(--pf-c-page__main-nav--PaddingTop)}.pf-c-page__main-breadcrumb .pf-c-page__main-body{padding:var(--pf-c-page__main-breadcrumb--PaddingTop) var(--pf-c-page__main-breadcrumb--PaddingRight) var(--pf-c-page__main-breadcrumb--PaddingBottom) var(--pf-c-page__main-breadcrumb--PaddingLeft)}.pf-c-page__main-section .pf-c-page__main-body{padding:var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft)}.pf-c-page__main-tabs .pf-c-page__main-body{padding:var(--pf-c-page__main-tabs--PaddingTop) var(--pf-c-page__main-tabs--PaddingRight) var(--pf-c-page__main-tabs--PaddingBottom) var(--pf-c-page__main-tabs--PaddingLeft)}.pf-c-page__drawer{grid-area:main}.pf-c-page__drawer>.pf-c-drawer{flex:1 0 auto}:where(.pf-theme-dark) .pf-c-page__header,:where(.pf-theme-dark) .pf-c-page__main-section[class*=pf-m-dark-],:where(.pf-theme-dark) .pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector{--pf-global--Color--100:#e0e0e0;--pf-global--Color--200:#aaabac;--pf-global--BorderColor--100:#444548;--pf-global--primary-color--100:#1fa7f8;--pf-global--link--Color:#1fa7f8;--pf-global--link--Color--hover:#73bcf7;--pf-global--BackgroundColor--100:#1b1d21}:where(.pf-theme-dark) .pf-c-page__header .pf-c-card,:where(.pf-theme-dark) .pf-c-page__main-section[class*=pf-m-dark-] .pf-c-card,:where(.pf-theme-dark) .pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--100)}:where(.pf-theme-dark) .pf-c-page__header .pf-c-button,:where(.pf-theme-dark) .pf-c-page__main-section[class*=pf-m-dark-] .pf-c-button,:where(.pf-theme-dark) .pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--active--Color:var(--pf-global--primary-color--100)}:where(.pf-theme-dark) .pf-c-page{--pf-c-page__main-section--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-page__sidebar--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-page__header--BackgroundColor:var(--pf-global--palette--black-1000)}:where(.pf-theme-dark) .pf-c-page__header-tools-item.pf-m-selected .pf-c-button{color:var(--pf-global--Color--100)}:where(.pf-theme-dark) .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge:hover:before{background-color:var(--pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor)}:where(.pf-theme-dark) .pf-c-page__sidebar{border-right:var(--pf-global--BorderWidth--sm) solid var(--pf-global--BorderColor--100)}:where(.pf-theme-dark) .pf-c-page__main-nav.pf-m-sticky-bottom,:where(.pf-theme-dark) .pf-c-page__main-nav.pf-m-sticky-top{--pf-c-page__main-nav--BackgroundColor:var(--pf-global--BackgroundColor--300)}:where(.pf-theme-dark) .pf-c-page__main-breadcrumb.pf-m-sticky-bottom,:where(.pf-theme-dark) .pf-c-page__main-breadcrumb.pf-m-sticky-top{--pf-c-page__main-breadcrumb--BackgroundColor:var(--pf-global--BackgroundColor--300)}:where(.pf-theme-dark) .pf-c-page__main-group.pf-m-sticky-bottom,:where(.pf-theme-dark) .pf-c-page__main-group.pf-m-sticky-top{--pf-c-page__main-section--m-light--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-page__main-section--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-page__main-breadcrumb--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-page__main-nav--BackgroundColor:var(--pf-global--BackgroundColor--300)}:where(.pf-theme-dark) .pf-c-page__main-section.pf-m-sticky-bottom,:where(.pf-theme-dark) .pf-c-page__main-section.pf-m-sticky-top{--pf-c-page__main-section--BackgroundColor:var(--pf-global--BackgroundColor--300)}:where(.pf-theme-dark) .pf-c-page__header,:where(.pf-theme-dark) .pf-c-page__main-section[class*=pf-m-dark-],:where(.pf-theme-dark) .pf-c-page__sidebar-body.pf-m-menu .pf-c-context-selector{color:var(--pf-global--Color--100)}.pf-c-breadcrumb{--pf-c-breadcrumb__item--FontSize:var(--pf-global--FontSize--sm);--pf-c-breadcrumb__item--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-breadcrumb__item--MarginRight:var(--pf-global--spacer--sm);--pf-c-breadcrumb__item-divider--Color:var(--pf-global--BorderColor--200);--pf-c-breadcrumb__item-divider--MarginRight:var(--pf-global--spacer--sm);--pf-c-breadcrumb__item-divider--FontSize:var(--pf-global--FontSize--sm);--pf-c-breadcrumb__link--Color:var(--pf-global--link--Color);--pf-c-breadcrumb__link--TextDecoration:var(--pf-global--link--TextDecoration);--pf-c-breadcrumb__link--hover--Color:var(--pf-global--link--Color--hover);--pf-c-breadcrumb__link--hover--TextDecoration:var(--pf-global--link--TextDecoration--hover);--pf-c-breadcrumb__link--m-current--Color:var(--pf-global--Color--100);--pf-c-breadcrumb__heading--FontSize:var(--pf-global--FontSize--sm);--pf-c-breadcrumb__dropdown--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-breadcrumb__dropdown--MarginRight:calc(var(--pf-c-breadcrumb__item--MarginRight)*-1);--pf-c-breadcrumb__dropdown--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-breadcrumb__dropdown--MarginLeft:calc(var(--pf-c-breadcrumb__item-divider--MarginRight)*-1);--pf-c-breadcrumb__dropdown--c-dropdown__toggle--LineHeight:var(--pf-global--LineHeight--sm);display:inline-flex}.pf-c-breadcrumb__list{align-items:center;display:flex;flex-wrap:wrap}.pf-c-breadcrumb__item{align-items:baseline;display:flex;font-size:var(--pf-c-breadcrumb__item--FontSize);font-weight:var(--pf-c-breadcrumb__item--FontWeight);line-height:var(--pf-c-breadcrumb__item--LineHeight);list-style:none;white-space:nowrap}.pf-c-breadcrumb__item:not(:last-child){margin-right:var(--pf-c-breadcrumb__item--MarginRight)}.pf-c-breadcrumb__item-divider{color:var(--pf-c-breadcrumb__item-divider--Color);font-size:var(--pf-c-breadcrumb__item-divider--FontSize);line-height:1;margin-right:var(--pf-c-breadcrumb__item-divider--MarginRight)}.pf-c-breadcrumb__link{color:var(--pf-c-breadcrumb__link--Color);font-size:inherit;font-weight:var(--pf-c-breadcrumb__link--FontWeight);line-height:inherit;text-decoration:var(--pf-c-breadcrumb__link--TextDecoration);word-break:break-word}.pf-c-breadcrumb__link:hover{--pf-c-breadcrumb__link--Color:var(--pf-c-breadcrumb__link--hover--Color);--pf-c-breadcrumb__link--TextDecoration:var(--pf-c-breadcrumb__link--hover--TextDecoration)}.pf-c-breadcrumb__link.pf-m-current{cursor:default}.pf-c-breadcrumb__link.pf-m-current,.pf-c-breadcrumb__link.pf-m-current:hover{color:var(--pf-c-breadcrumb__link--m-current--Color);text-decoration:none}button.pf-c-breadcrumb__link{border:none}.pf-c-breadcrumb__dropdown{margin:var(--pf-c-breadcrumb__dropdown--MarginTop) var(--pf-c-breadcrumb__dropdown--MarginRight) var(--pf-c-breadcrumb__dropdown--MarginBottom) var(--pf-c-breadcrumb__dropdown--MarginLeft)}.pf-c-breadcrumb__dropdown .pf-c-dropdown__toggle{line-height:var(--pf-c-breadcrumb__dropdown--c-dropdown__toggle--LineHeight)}.pf-c-breadcrumb__heading{display:inline;font-size:var(--pf-c-breadcrumb__heading--FontSize)}.pf-c-breadcrumb__heading,.pf-c-breadcrumb__link{white-space:normal}.pf-m-overpass-font .pf-c-breadcrumb__item,.pf-m-overpass-font .pf-c-breadcrumb__link{font-weight:var(--pf-global--FontWeight--semi-bold)}.pf-c-breadcrumb__list>:first-child .pf-c-breadcrumb__item-divider{display:none;visibility:hidden}:where(.pf-theme-dark) .pf-c-breadcrumb{--pf-c-breadcrumb__item-divider--Color:var(--pf-global--BorderColor--100)}.pf-l-stack{--pf-l-stack--m-gutter--MarginBottom:var(--pf-global--gutter);display:flex;flex-direction:column;height:100%}.pf-l-stack__item.pf-m-fill{flex-grow:1}.pf-l-stack.pf-m-gutter>:not(:last-child){margin-bottom:var(--pf-l-stack--m-gutter--MarginBottom)}.pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-card--BoxShadow:var(--pf-global--BoxShadow--sm);--pf-c-card--first-child--PaddingTop:var(--pf-global--spacer--lg);--pf-c-card--child--PaddingRight:var(--pf-global--spacer--lg);--pf-c-card--child--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-card--child--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-card--c-divider--child--PaddingTop:var(--pf-global--spacer--lg);--pf-c-card__title--FontFamily:var(--pf-global--FontFamily--heading--sans-serif);--pf-c-card__title--FontSize:var(--pf-global--FontSize--md);--pf-c-card__title--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-card__title--not--last-child--PaddingBottom:var(--pf-global--spacer--md);--pf-c-card__body--FontSize:var(--pf-global--FontSize--md);--pf-c-card__footer--FontSize:var(--pf-global--FontSize--md);--pf-c-card__actions--PaddingLeft:var(--pf-global--spacer--md);--pf-c-card__actions--child--MarginLeft:var(--pf-global--spacer--sm);--pf-c-card__header-toggle--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-card__header-toggle--MarginRight:var(--pf-global--spacer--xs);--pf-c-card__header-toggle--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-card__header-toggle--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-card__header-toggle-icon--Transition:var(--pf-global--Transition);--pf-c-card--m-expanded__header-toggle-icon--Rotate:90deg;--pf-c-card--m-hoverable--hover--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable--hover--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable--focus--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable--active--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable--m-selected--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable--m-selected--before--Height:var(--pf-global--BorderWidth--lg);--pf-c-card--m-selectable--m-selected--before--BackgroundColor:var(--pf-global--active-color--100);--pf-c-card--m-hoverable-raised--hover--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-card--m-hoverable-raised--hover--before--BackgroundColor:var(--pf-global--active-color--400);--pf-c-card--m-selectable-raised--before--Right:0;--pf-c-card--m-selectable-raised--before--Bottom:0;--pf-c-card--m-selectable-raised--before--Left:0;--pf-c-card--m-flat--m-selectable-raised--before--Right:calc(var(--pf-c-card--m-flat--BorderWidth)*-1);--pf-c-card--m-flat--m-selectable-raised--before--Bottom:calc(var(--pf-c-card--m-flat--BorderWidth)*-1);--pf-c-card--m-flat--m-selectable-raised--before--Left:calc(var(--pf-c-card--m-flat--BorderWidth)*-1);--pf-c-card--m-selectable-raised--before--Height:var(--pf-global--BorderWidth--xl);--pf-c-card--m-selectable-raised--before--BackgroundColor:transparent;--pf-c-card--m-selectable-raised--before--Transition:none;--pf-c-card--m-selectable-raised--before--ScaleY:1;--pf-c-card--m-selectable-raised--before--TranslateY:0;--pf-c-card--m-selectable-raised--hover--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-card--m-selectable-raised--hover--before--BackgroundColor:var(--pf-global--active-color--400);--pf-c-card--m-selectable-raised--focus--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-card--m-selectable-raised--focus--before--BackgroundColor:var(--pf-global--active-color--400);--pf-c-card--m-selectable-raised--active--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-card--m-selectable-raised--active--before--BackgroundColor:var(--pf-global--active-color--400);--pf-c-card--m-selectable-raised--m-selected-raised--before--BackgroundColor:var(--pf-global--active-color--100);--pf-c-card--m-selectable-raised--m-selected-raised--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY--base:-0.5rem;--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY:var(--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY--base);--pf-c-card--m-flat--m-selectable-raised--m-selected-raised--TranslateY:calc(var(--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY--base) + var(--pf-c-card--m-flat--BorderWidth));--pf-c-card--m-rounded--m-selectable-raised--m-selected-raised--TranslateY:calc(var(--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY--base) + var(--pf-c-card--m-rounded--BorderRadius));--pf-c-card--m-selectable-raised--m-selected-raised--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-card--m-selectable-raised--m-selected-raised--Transition:transform .25s linear,box-shadow .25s linear;--pf-c-card--m-selectable-raised--m-selected-raised--before--Transition:transform .25s linear;--pf-c-card--m-selectable-raised--m-selected-raised--before--TranslateY:calc(var(--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY)*-1);--pf-c-card--m-selectable-raised--m-selected-raised--before--ScaleY:2;--pf-c-card--m-non-selectable-raised--BackgroundColor:var(--pf-global--BackgroundColor--light-200);--pf-c-card--m-non-selectable-raised--before--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-card--m-non-selectable-raised--before--ScaleY:2;--pf-c-card--m-flat--m-non-selectable-raised--before--BorderColor:var(--pf-global--disabled-color--200);--pf-c-card--m-compact__body--FontSize:var(--pf-global--FontSize--sm);--pf-c-card--m-compact__footer--FontSize:var(--pf-global--FontSize--sm);--pf-c-card--m-compact--first-child--PaddingTop:var(--pf-global--spacer--md);--pf-c-card--m-compact--child--PaddingRight:var(--pf-global--spacer--md);--pf-c-card--m-compact--child--PaddingBottom:var(--pf-global--spacer--md);--pf-c-card--m-compact--child--PaddingLeft:var(--pf-global--spacer--md);--pf-c-card--m-compact--c-divider--child--PaddingTop:var(--pf-global--spacer--md);--pf-c-card--m-compact__title--not--last-child--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-card--m-display-lg__title--FontSize:var(--pf-global--FontSize--xl);--pf-c-card--m-display-lg--first-child--PaddingTop:var(--pf-global--spacer--xl);--pf-c-card--m-display-lg--child--PaddingRight:var(--pf-global--spacer--xl);--pf-c-card--m-display-lg--child--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-card--m-display-lg--child--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-card--m-display-lg--c-divider--child--PaddingTop:var(--pf-global--spacer--xl);--pf-c-card--m-display-lg__title--not--last-child--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-card--m-flat--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-card--m-flat--BorderColor:var(--pf-global--BorderColor--100);--pf-c-card--m-rounded--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-card--m-full-height--Height:100%;--pf-c-card--m-plain--BoxShadow:none;--pf-c-card--m-plain--BackgroundColor:transparent;--pf-c-card__header--m-toggle-right--toggle--MarginRight:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-card__header--m-toggle-right--toggle--MarginLeft:var(--pf-global--spacer--xs);--pf-c-card__header--m-toggle-right--actions--MarginRight:0;--pf-c-card__input--focus--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-card__input--focus--BorderColor:var(--pf-global--primary-color--100);background-color:var(--pf-c-card--BackgroundColor);box-shadow:var(--pf-c-card--BoxShadow);display:flex;flex-direction:column}.pf-c-card.pf-m-hoverable:hover{box-shadow:var(--pf-c-card--m-hoverable--hover--BoxShadow)}.pf-c-card.pf-m-selectable{cursor:pointer;position:relative}.pf-c-card.pf-m-selectable:hover{box-shadow:var(--pf-c-card--m-selectable--hover--BoxShadow)}.pf-c-card.pf-m-selectable:focus{box-shadow:var(--pf-c-card--m-selectable--focus--BoxShadow)}.pf-c-card.pf-m-selectable:active{box-shadow:var(--pf-c-card--m-selectable--active--BoxShadow)}.pf-c-card.pf-m-selectable.pf-m-selected{box-shadow:var(--pf-c-card--m-selectable--m-selected--BoxShadow)}.pf-c-card.pf-m-selectable.pf-m-selected:before{background-color:var(--pf-c-card--m-selectable--m-selected--before--BackgroundColor);content:"";height:var(--pf-c-card--m-selectable--m-selected--before--Height);left:0;position:absolute;right:0;top:0}.pf-c-card.pf-m-hoverable-raised,.pf-c-card.pf-m-non-selectable-raised,.pf-c-card.pf-m-selectable-raised{position:relative}.pf-c-card.pf-m-hoverable-raised:before,.pf-c-card.pf-m-non-selectable-raised:before,.pf-c-card.pf-m-selectable-raised:before{background-color:var(--pf-c-card--m-selectable-raised--before--BackgroundColor);bottom:var(--pf-c-card--m-selectable-raised--before--Bottom);content:"";height:var(--pf-c-card--m-selectable-raised--before--Height);left:var(--pf-c-card--m-selectable-raised--before--Left);position:absolute;right:var(--pf-c-card--m-selectable-raised--before--Right);transform:translateY(var(--pf-c-card--m-selectable-raised--before--TranslateY)) scaleY(var(--pf-c-card--m-selectable-raised--before--ScaleY));transform-origin:center bottom;transition:var(--pf-c-card--m-selectable-raised--before--Transition)}.pf-c-card.pf-m-hoverable-raised:hover{--pf-c-card--BoxShadow:var(--pf-c-card--m-hoverable-raised--hover--BoxShadow);--pf-c-card--m-selectable-raised--before--BackgroundColor:var(--pf-c-card--m-hoverable-raised--hover--before--BackgroundColor)}.pf-c-card.pf-m-selectable-raised{cursor:pointer}.pf-c-card.pf-m-selectable-raised:hover{--pf-c-card--BoxShadow:var(--pf-c-card--m-selectable-raised--hover--BoxShadow);--pf-c-card--m-selectable-raised--before--BackgroundColor:var(--pf-c-card--m-selectable-raised--hover--before--BackgroundColor)}.pf-c-card.pf-m-selectable-raised:focus{--pf-c-card--BoxShadow:var(--pf-c-card--m-selectable-raised--focus--BoxShadow);--pf-c-card--m-selectable-raised--before--BackgroundColor:var(--pf-c-card--m-selectable-raised--focus--before--BackgroundColor)}.pf-c-card.pf-m-selectable-raised:active{--pf-c-card--BoxShadow:var(--pf-c-card--m-selectable-raised--active--BoxShadow);--pf-c-card--m-selectable-raised--before--BackgroundColor:var(--pf-c-card--m-selectable-raised--active--before--BackgroundColor)}.pf-c-card.pf-m-selectable-raised.pf-m-selected-raised{--pf-c-card--m-selectable-raised--before--BackgroundColor:var(--pf-c-card--m-selectable-raised--m-selected-raised--before--BackgroundColor);--pf-c-card--m-selectable-raised--before--Transition:var(--pf-c-card--m-selectable-raised--m-selected-raised--before--Transition);--pf-c-card--m-selectable-raised--before--TranslateY:var(--pf-c-card--m-selectable-raised--m-selected-raised--before--TranslateY);--pf-c-card--m-selectable-raised--before--ScaleY:var(--pf-c-card--m-selectable-raised--m-selected-raised--before--ScaleY);box-shadow:var(--pf-c-card--m-selectable-raised--m-selected-raised--BoxShadow);transform:translateY(var(--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY));transition:var(--pf-c-card--m-selectable-raised--m-selected-raised--Transition);z-index:var(--pf-c-card--m-selectable-raised--m-selected-raised--ZIndex)}.pf-c-card.pf-m-non-selectable-raised{--pf-c-card--BackgroundColor:var(--pf-c-card--m-non-selectable-raised--BackgroundColor);--pf-c-card--BoxShadow:none;--pf-c-card--m-flat--BorderColor:var(--pf-c-card--m-flat--m-non-selectable-raised--before--BorderColor);--pf-c-card--m-selectable-raised--before--BackgroundColor:var(--pf-c-card--m-non-selectable-raised--before--BackgroundColor);--pf-c-card--m-selectable-raised--before--ScaleY:var(--pf-c-card--m-non-selectable-raised--before--ScaleY)}.pf-c-card.pf-m-compact{--pf-c-card__body--FontSize:var(--pf-c-card--m-compact__body--FontSize);--pf-c-card__footer--FontSize:var(--pf-c-card--m-compact__footer--FontSize);--pf-c-card--first-child--PaddingTop:var(--pf-c-card--m-compact--first-child--PaddingTop);--pf-c-card--child--PaddingRight:var(--pf-c-card--m-compact--child--PaddingRight);--pf-c-card--child--PaddingBottom:var(--pf-c-card--m-compact--child--PaddingBottom);--pf-c-card--child--PaddingLeft:var(--pf-c-card--m-compact--child--PaddingLeft);--pf-c-card--c-divider--child--PaddingTop:var(--pf-c-card--m-compact--c-divider--child--PaddingTop);--pf-c-card__title--not--last-child--PaddingBottom:var(--pf-c-card--m-compact__title--not--last-child--PaddingBottom)}.pf-c-card.pf-m-display-lg{--pf-c-card__title--FontSize:var(--pf-c-card--m-display-lg__title--FontSize);--pf-c-card--first-child--PaddingTop:var(--pf-c-card--m-display-lg--first-child--PaddingTop);--pf-c-card--child--PaddingRight:var(--pf-c-card--m-display-lg--child--PaddingRight);--pf-c-card--child--PaddingBottom:var(--pf-c-card--m-display-lg--child--PaddingBottom);--pf-c-card--child--PaddingLeft:var(--pf-c-card--m-display-lg--child--PaddingLeft);--pf-c-card--c-divider--child--PaddingTop:var(--pf-c-card--m-display-lg--c-divider--child--PaddingTop);--pf-c-card__title--not--last-child--PaddingBottom:var(--pf-c-card--m-display-lg__title--not--last-child--PaddingBottom)}.pf-c-card.pf-m-flat{--pf-c-card--BoxShadow:none;--pf-c-card--m-selectable-raised--before--Right:var(--pf-c-card--m-flat--m-selectable-raised--before--Right);--pf-c-card--m-selectable-raised--before--Bottom:var(--pf-c-card--m-flat--m-selectable-raised--before--Bottom);--pf-c-card--m-selectable-raised--before--Left:var(--pf-c-card--m-flat--m-selectable-raised--before--Left);--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY:var(--pf-c-card--m-flat--m-selectable-raised--m-selected-raised--TranslateY);border:var(--pf-c-card--m-flat--BorderWidth) solid var(--pf-c-card--m-flat--BorderColor)}.pf-c-card.pf-m-plain{--pf-c-card--BoxShadow:var(--pf-c-card--m-plain--BoxShadow);--pf-c-card--BackgroundColor:var(--pf-c-card--m-plain--BackgroundColor)}.pf-c-card.pf-m-rounded{--pf-c-card--m-selectable-raised--m-selected-raised--TranslateY:var(--pf-c-card--m-rounded--m-selectable-raised--m-selected-raised--TranslateY);border-radius:var(--pf-c-card--m-rounded--BorderRadius)}.pf-c-card.pf-m-expanded .pf-c-card__header-toggle-icon{transform:rotate(var(--pf-c-card--m-expanded__header-toggle-icon--Rotate))}.pf-c-card.pf-m-full-height{height:var(--pf-c-card--m-full-height--Height)}.pf-c-card>.pf-c-divider+.pf-c-card__body,.pf-c-card>.pf-c-divider+.pf-c-card__footer,.pf-c-card>.pf-c-divider+.pf-c-card__header,.pf-c-card>.pf-c-divider+.pf-c-card__title{padding-top:var(--pf-c-card--c-divider--child--PaddingTop)}.pf-c-card__header{align-items:center;display:flex;flex-direction:row}.pf-c-card__header .pf-c-card__title{--pf-c-card--first-child--PaddingTop:0;--pf-c-card__title--not--last-child--PaddingBottom:0;padding:0}.pf-c-card__header.pf-m-toggle-right{--pf-c-card__header-toggle--MarginRight:var(--pf-c-card__header--m-toggle-right--toggle--MarginRight);--pf-c-card__header-toggle--MarginLeft:var(--pf-c-card__header--m-toggle-right--toggle--MarginLeft)}.pf-c-card__header.pf-m-toggle-right .pf-c-card__actions{--pf-c-card__header-toggle--MarginRight:var(--pf-c-card__header--m-toggle-right--actions--MarginRight)}.pf-c-card__header.pf-m-toggle-right .pf-c-card__header-toggle{order:2}.pf-c-card__header.pf-m-toggle-right .pf-c-card__title{flex:1}.pf-c-card__header-toggle{align-self:flex-start;margin:var(--pf-c-card__header-toggle--MarginTop) var(--pf-c-card__header-toggle--MarginRight) var(--pf-c-card__header-toggle--MarginBottom) var(--pf-c-card__header-toggle--MarginLeft)}.pf-c-card__header-toggle-icon{display:inline-block;transition:var(--pf-c-card__header-toggle-icon--Transition)}.pf-c-card__title{font-family:var(--pf-c-card__title--FontFamily);font-size:var(--pf-c-card__title--FontSize);font-weight:var(--pf-c-card__title--FontWeight)}.pf-c-card__actions{align-items:center;align-self:flex-start;display:flex;margin:var(--pf-c-card__header-toggle--MarginTop) var(--pf-c-card__header-toggle--MarginRight) var(--pf-c-card__header-toggle--MarginBottom) auto;order:1;padding-left:var(--pf-c-card__actions--PaddingLeft)}.pf-c-card__actions>*+*{margin-left:var(--pf-c-card__actions--child--MarginLeft)}.pf-c-card__actions+.pf-c-card__body,.pf-c-card__actions+.pf-c-card__footer,.pf-c-card__actions+.pf-c-card__title{padding:0}.pf-c-card__actions.pf-m-no-offset{--pf-c-card__header-toggle--MarginTop:0;--pf-c-card__header-toggle--MarginBottom:0}.pf-c-card__body,.pf-c-card__footer,.pf-c-card__header,.pf-c-card__title{padding-bottom:var(--pf-c-card--child--PaddingBottom);padding-left:var(--pf-c-card--child--PaddingLeft);padding-right:var(--pf-c-card--child--PaddingRight)}.pf-c-card__body:first-child,.pf-c-card__footer:first-child,.pf-c-card__header:first-child,.pf-c-card__title:first-child{padding-top:var(--pf-c-card--first-child--PaddingTop)}.pf-c-card__header:not(:last-child),.pf-c-card__title:not(:last-child){padding-bottom:var(--pf-c-card__title--not--last-child--PaddingBottom)}.pf-c-card__expandable-content{--pf-c-card--first-child--PaddingTop:0}.pf-c-card__body:not(.pf-m-no-fill){flex:1 1 auto}.pf-c-card__body{font-size:var(--pf-c-card__body--FontSize)}.pf-c-card__footer{font-size:var(--pf-c-card__footer--FontSize)}.pf-c-card__sr-input:focus+.pf-c-card:after{border:var(--pf-c-card__input--focus--BorderWidth) solid var(--pf-c-card__input--focus--BorderColor);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-m-overpass-font .pf-c-card .pf-c-card__title{font-weight:var(--pf-global--FontWeight--normal)}:where(.pf-theme-dark) .pf-c-card,:where(.pf-theme-dark) .pf-c-card.pf-m-non-selectable-raised{--pf-c-card--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-card--m-hoverable-raised--hover--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable-raised--hover--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable-raised--focus--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-card--m-selectable-raised--active--BoxShadow:var(--pf-global--BoxShadow--lg)}.pf-c-brand{--pf-c-brand--Width:auto;--pf-c-brand--Height:auto;--pf-c-brand--Width--base:var(--pf-c-brand--Width);--pf-c-brand--Height--base:var(--pf-c-brand--Height);height:var(--pf-c-brand--Height--base);width:var(--pf-c-brand--Width--base)}@media (min-width:576px){.pf-c-brand{--pf-c-brand--Width--base:var(--pf-c-brand--Width-on-sm,var(--pf-c-brand--Width))}}@media (min-width:768px){.pf-c-brand{--pf-c-brand--Width--base:var(--pf-c-brand--Width-on-md,var(--pf-c-brand--Width-on-sm,var(--pf-c-brand--Width)))}}@media (min-width:992px){.pf-c-brand{--pf-c-brand--Width--base:var(--pf-c-brand--Width-on-lg,var(--pf-c-brand--Width-on-md,var(--pf-c-brand--Width-on-sm,var(--pf-c-brand--Width))))}}@media (min-width:1200px){.pf-c-brand{--pf-c-brand--Width--base:var(--pf-c-brand--Width-on-xl,var(--pf-c-brand--Width-on-lg,var(--pf-c-brand--Width-on-md,var(--pf-c-brand--Width-on-sm,var(--pf-c-brand--Width)))))}}@media (min-width:1450px){.pf-c-brand{--pf-c-brand--Width--base:var(--pf-c-brand--Width-on-2xl,var(--pf-c-brand--Width-on-xl,var(--pf-c-brand--Width-on-lg,var(--pf-c-brand--Width-on-md,var(--pf-c-brand--Width-on-sm,var(--pf-c-brand--Width))))))}}@media (min-width:576px){.pf-c-brand{--pf-c-brand--Height--base:var(--pf-c-brand--Height-on-sm,var(--pf-c-brand--Height))}}@media (min-width:768px){.pf-c-brand{--pf-c-brand--Height--base:var(--pf-c-brand--Height-on-md,var(--pf-c-brand--Height-on-sm,var(--pf-c-brand--Height)))}}@media (min-width:992px){.pf-c-brand{--pf-c-brand--Height--base:var(--pf-c-brand--Height-on-lg,var(--pf-c-brand--Height-on-md,var(--pf-c-brand--Height-on-sm,var(--pf-c-brand--Height))))}}@media (min-width:1200px){.pf-c-brand{--pf-c-brand--Height--base:var(--pf-c-brand--Height-on-xl,var(--pf-c-brand--Height-on-lg,var(--pf-c-brand--Height-on-md,var(--pf-c-brand--Height-on-sm,var(--pf-c-brand--Height)))))}}@media (min-width:1450px){.pf-c-brand{--pf-c-brand--Height--base:var(--pf-c-brand--Height-on-2xl,var(--pf-c-brand--Height-on-xl,var(--pf-c-brand--Height-on-lg,var(--pf-c-brand--Height-on-md,var(--pf-c-brand--Height-on-sm,var(--pf-c-brand--Height))))))}}.pf-c-brand.pf-m-picture{display:inline-flex;max-width:100%}.pf-c-empty-state{--pf-c-empty-state--PaddingTop:var(--pf-global--spacer--xl);--pf-c-empty-state--PaddingRight:var(--pf-global--spacer--xl);--pf-c-empty-state--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-empty-state--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-empty-state__content--MaxWidth:none;--pf-c-empty-state__icon--MarginBottom:var(--pf-global--spacer--lg);--pf-c-empty-state__icon--FontSize:var(--pf-global--icon--FontSize--xl);--pf-c-empty-state__icon--Color:var(--pf-global--icon--Color--light);--pf-c-empty-state__content--c-title--m-lg--FontSize:var(--pf-global--FontSize--xl);--pf-c-empty-state__body--MarginTop:var(--pf-global--spacer--md);--pf-c-empty-state__body--Color:var(--pf-global--Color--200);--pf-c-empty-state__primary--MarginTop:var(--pf-global--spacer--xl);--pf-c-empty-state__primary--secondary--MarginTop:var(--pf-global--spacer--sm);--pf-c-empty-state__secondary--MarginTop:var(--pf-global--spacer--xl);--pf-c-empty-state__secondary--MarginBottom:calc(var(--pf-global--spacer--xs)*-1);--pf-c-empty-state__secondary--child--MarginRight:calc(var(--pf-global--spacer--xs)/2);--pf-c-empty-state__secondary--child--MarginBottom:var(--pf-global--spacer--xs);--pf-c-empty-state__secondary--child--MarginLeft:calc(var(--pf-global--spacer--xs)/2);--pf-c-empty-state--m-xs__content--MaxWidth:21.875rem;--pf-c-empty-state--m-xs__body--FontSize:var(--pf-global--FontSize--sm);--pf-c-empty-state--m-xs--button--FontSize:var(--pf-global--FontSize--sm);--pf-c-empty-state--m-xs--PaddingTop:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs--PaddingRight:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs--PaddingBottom:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs--PaddingLeft:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs__icon--MarginBottom:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs__body--MarginTop:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs__primary--MarginTop:var(--pf-global--spacer--md);--pf-c-empty-state--m-xs__secondary--MarginTop:var(--pf-global--spacer--md);--pf-c-empty-state--m-sm__content--MaxWidth:25rem;--pf-c-empty-state--m-lg__content--MaxWidth:37.5rem;--pf-c-empty-state--m-xl__body--FontSize:var(--pf-global--FontSize--xl);--pf-c-empty-state--m-xl__body--MarginTop:var(--pf-global--spacer--lg);--pf-c-empty-state--m-xl__icon--MarginBottom:var(--pf-global--spacer--xl);--pf-c-empty-state--m-xl__icon--FontSize:6.25rem;--pf-c-empty-state--m-xl--c-button__secondary--MarginTop:var(--pf-global--spacer--md);align-items:center;display:flex;justify-content:center;padding:var(--pf-c-empty-state--PaddingTop) var(--pf-c-empty-state--PaddingRight) var(--pf-c-empty-state--PaddingBottom) var(--pf-c-empty-state--PaddingLeft);text-align:center}.pf-c-empty-state.pf-m-xs{--pf-c-empty-state--PaddingTop:var(--pf-c-empty-state--m-xs--PaddingTop);--pf-c-empty-state--PaddingRight:var(--pf-c-empty-state--m-xs--PaddingRight);--pf-c-empty-state--PaddingBottom:var(--pf-c-empty-state--m-xs--PaddingBottom);--pf-c-empty-state--PaddingLeft:var(--pf-c-empty-state--m-xs--PaddingLeft);--pf-c-empty-state__content--MaxWidth:var(--pf-c-empty-state--m-xs__content--MaxWidth);--pf-c-empty-state__icon--MarginBottom:var(--pf-c-empty-state--m-xs__icon--MarginBottom);--pf-c-empty-state__body--MarginTop:var(--pf-c-empty-state--m-xs__body--MarginTop);--pf-c-empty-state__primary--MarginTop:var(--pf-c-empty-state--m-xs__primary--MarginTop);--pf-c-empty-state__secondary--MarginTop:var(--pf-c-empty-state--m-xs__secondary--MarginTop)}.pf-c-empty-state.pf-m-xs .pf-c-empty-state__body{font-size:var(--pf-c-empty-state--m-xs__body--FontSize)}.pf-c-empty-state.pf-m-xs .pf-c-button{--pf-c-button--FontSize:var(--pf-c-empty-state--m-xs--button--FontSize)}.pf-c-empty-state.pf-m-sm{--pf-c-empty-state__content--MaxWidth:var(--pf-c-empty-state--m-sm__content--MaxWidth)}.pf-c-empty-state.pf-m-lg{--pf-c-empty-state__content--MaxWidth:var(--pf-c-empty-state--m-lg__content--MaxWidth)}.pf-c-empty-state.pf-m-xl{--pf-c-empty-state__body--MarginTop:var(--pf-c-empty-state--m-xl__body--MarginTop);--pf-c-empty-state__icon--MarginBottom:var(--pf-c-empty-state--m-xl__icon--MarginBottom);--pf-c-empty-state__icon--FontSize:var(--pf-c-empty-state--m-xl__icon--FontSize);--pf-c-empty-state--c-button__secondary--MarginTop:var(--pf-c-empty-state--m-xl--c-button__secondary--MarginTop)}.pf-c-empty-state.pf-m-xl .pf-c-empty-state__body{font-size:var(--pf-c-empty-state--m-xl__body--FontSize)}.pf-c-empty-state.pf-m-full-height{height:100%}.pf-c-empty-state__content{max-width:var(--pf-c-empty-state__content--MaxWidth)}.pf-c-empty-state__content>.pf-c-title.pf-m-lg{font-size:var(--pf-c-empty-state__content--c-title--m-lg--FontSize)}.pf-c-empty-state__icon{color:var(--pf-c-empty-state__icon--Color);font-size:var(--pf-c-empty-state__icon--FontSize);margin-bottom:var(--pf-c-empty-state__icon--MarginBottom)}.pf-c-empty-state__body{color:var(--pf-c-empty-state__body--Color);margin-top:var(--pf-c-empty-state__body--MarginTop)}.pf-c-empty-state__content>.pf-c-button.pf-m-primary,.pf-c-empty-state__primary{margin-top:var(--pf-c-empty-state__primary--MarginTop)}.pf-c-empty-state__content>.pf-c-button.pf-m-primary+.pf-c-empty-state__secondary,.pf-c-empty-state__primary+.pf-c-empty-state__secondary{margin-top:var(--pf-c-empty-state__primary--secondary--MarginTop)}.pf-c-empty-state__secondary{display:flex;flex-wrap:wrap;justify-content:center;margin-bottom:var(--pf-c-empty-state__secondary--MarginBottom);margin-top:var(--pf-c-empty-state__secondary--MarginTop)}.pf-c-empty-state__secondary>*{margin-bottom:var(--pf-c-empty-state__secondary--child--MarginBottom);margin-left:var(--pf-c-empty-state__secondary--child--MarginLeft);margin-right:var(--pf-c-empty-state__secondary--child--MarginRight)}.pf-m-overpass-font .pf-c-empty-state .pf-c-empty-state__content>.pf-c-title.pf-m-lg{font-size:var(--pf-global--FontSize--lg)}.pf-c-popover{--pf-c-popover--FontSize:var(--pf-global--FontSize--sm);--pf-c-popover--MinWidth:calc(var(--pf-c-popover__content--PaddingLeft) + var(--pf-c-popover__content--PaddingRight) + 18.75rem);--pf-c-popover--MaxWidth:calc(var(--pf-c-popover__content--PaddingLeft) + var(--pf-c-popover__content--PaddingRight) + 18.75rem);--pf-c-popover--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-popover--m-danger__title-icon--Color:var(--pf-global--danger-color--100);--pf-c-popover--m-warning__title-icon--Color:var(--pf-global--warning-color--100);--pf-c-popover--m-success__title-icon--Color:var(--pf-global--success-color--100);--pf-c-popover--m-info__title-icon--Color:var(--pf-global--info-color--100);--pf-c-popover--m-default__title-icon--Color:var(--pf-global--default-color--200);--pf-c-popover--m-danger__title-text--Color:var(--pf-global--danger-color--200);--pf-c-popover--m-warning__title-text--Color:var(--pf-global--warning-color--200);--pf-c-popover--m-success__title-text--Color:var(--pf-global--success-color--200);--pf-c-popover--m-info__title-text--Color:var(--pf-global--info-color--200);--pf-c-popover--m-default__title-text--Color:var(--pf-global--default-color--300);--pf-c-popover__content--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-popover__content--PaddingTop:var(--pf-global--spacer--md);--pf-c-popover__content--PaddingRight:var(--pf-global--spacer--md);--pf-c-popover__content--PaddingBottom:var(--pf-global--spacer--md);--pf-c-popover__content--PaddingLeft:var(--pf-global--spacer--md);--pf-c-popover__arrow--Width:var(--pf-global--arrow--width-lg);--pf-c-popover__arrow--Height:var(--pf-global--arrow--width-lg);--pf-c-popover__arrow--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-popover__arrow--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-popover__arrow--m-top--TranslateX:-50%;--pf-c-popover__arrow--m-top--TranslateY:50%;--pf-c-popover__arrow--m-top--Rotate:45deg;--pf-c-popover__arrow--m-right--TranslateX:-50%;--pf-c-popover__arrow--m-right--TranslateY:-50%;--pf-c-popover__arrow--m-right--Rotate:45deg;--pf-c-popover__arrow--m-bottom--TranslateX:-50%;--pf-c-popover__arrow--m-bottom--TranslateY:-50%;--pf-c-popover__arrow--m-bottom--Rotate:45deg;--pf-c-popover__arrow--m-left--TranslateX:50%;--pf-c-popover__arrow--m-left--TranslateY:-50%;--pf-c-popover__arrow--m-left--Rotate:45deg;--pf-c-popover--c-button--MarginLeft:var(--pf-global--spacer--sm);--pf-c-popover--c-button--Top:calc(var(--pf-c-popover__content--PaddingTop) - var(--pf-global--spacer--form-element));--pf-c-popover--c-button--Right:calc(var(--pf-c-popover__content--PaddingRight) - var(--pf-global--spacer--md));--pf-c-popover--c-button--sibling--PaddingRight:var(--pf-global--spacer--2xl);--pf-c-popover--c-title--MarginBottom:var(--pf-global--spacer--sm);--pf-c-popover__title--MarginBottom:var(--pf-global--spacer--sm);--pf-c-popover__title--LineHeight:var(--pf-global--LineHeight--md);--pf-c-popover__title--FontFamily:var(--pf-global--FontFamily--heading--sans-serif);--pf-c-popover__title--FontSize:var(--pf-global--FontSize--md);--pf-c-popover__title-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-popover__title-icon--Color:var(--pf-global--Color--100);--pf-c-popover__footer--MarginTop:var(--pf-global--spacer--md);box-shadow:var(--pf-c-popover--BoxShadow);font-size:var(--pf-c-popover--FontSize);max-width:var(--pf-c-popover--MaxWidth);min-width:var(--pf-c-popover--MinWidth);position:relative}.pf-c-popover.pf-m-no-padding{--pf-c-popover__content--PaddingTop:0px;--pf-c-popover__content--PaddingRight:0px;--pf-c-popover__content--PaddingBottom:0px;--pf-c-popover__content--PaddingLeft:0px}.pf-c-popover.pf-m-width-auto{--pf-c-popover--MinWidth:auto;--pf-c-popover--MaxWidth:none}.pf-c-popover.pf-m-top .pf-c-popover__arrow,.pf-c-popover.pf-m-top-left .pf-c-popover__arrow,.pf-c-popover.pf-m-top-right .pf-c-popover__arrow{bottom:0;left:50%;transform:translateX(var(--pf-c-popover__arrow--m-top--TranslateX)) translateY(var(--pf-c-popover__arrow--m-top--TranslateY)) rotate(var(--pf-c-popover__arrow--m-top--Rotate))}.pf-c-popover.pf-m-bottom .pf-c-popover__arrow,.pf-c-popover.pf-m-bottom-left .pf-c-popover__arrow,.pf-c-popover.pf-m-bottom-right .pf-c-popover__arrow{left:50%;top:0;transform:translateX(var(--pf-c-popover__arrow--m-bottom--TranslateX)) translateY(var(--pf-c-popover__arrow--m-bottom--TranslateY)) rotate(var(--pf-c-popover__arrow--m-bottom--Rotate))}.pf-c-popover.pf-m-left .pf-c-popover__arrow,.pf-c-popover.pf-m-left-bottom .pf-c-popover__arrow,.pf-c-popover.pf-m-left-top .pf-c-popover__arrow{right:0;top:50%;transform:translateX(var(--pf-c-popover__arrow--m-left--TranslateX)) translateY(var(--pf-c-popover__arrow--m-left--TranslateY)) rotate(var(--pf-c-popover__arrow--m-left--Rotate))}.pf-c-popover.pf-m-right .pf-c-popover__arrow,.pf-c-popover.pf-m-right-bottom .pf-c-popover__arrow,.pf-c-popover.pf-m-right-top .pf-c-popover__arrow{left:0;top:50%;transform:translateX(var(--pf-c-popover__arrow--m-right--TranslateX)) translateY(var(--pf-c-popover__arrow--m-right--TranslateY)) rotate(var(--pf-c-popover__arrow--m-right--Rotate))}.pf-c-popover.pf-m-left-top .pf-c-popover__arrow,.pf-c-popover.pf-m-right-top .pf-c-popover__arrow{top:var(--pf-c-popover__arrow--Height)}.pf-c-popover.pf-m-left-bottom .pf-c-popover__arrow,.pf-c-popover.pf-m-right-bottom .pf-c-popover__arrow{bottom:0;top:auto}.pf-c-popover.pf-m-bottom-left .pf-c-popover__arrow,.pf-c-popover.pf-m-top-left .pf-c-popover__arrow{left:var(--pf-c-popover__arrow--Width)}.pf-c-popover.pf-m-bottom-right .pf-c-popover__arrow,.pf-c-popover.pf-m-top-right .pf-c-popover__arrow{left:auto;right:0}.pf-c-popover.pf-m-danger{--pf-c-popover__title-icon--Color:var(--pf-c-popover--m-danger__title-icon--Color);--pf-c-popover__title-text--Color:var(--pf-c-popover--m-danger__title-text--Color)}.pf-c-popover.pf-m-warning{--pf-c-popover__title-icon--Color:var(--pf-c-popover--m-warning__title-icon--Color);--pf-c-popover__title-text--Color:var(--pf-c-popover--m-warning__title-text--Color)}.pf-c-popover.pf-m-success{--pf-c-popover__title-icon--Color:var(--pf-c-popover--m-success__title-icon--Color);--pf-c-popover__title-text--Color:var(--pf-c-popover--m-success__title-text--Color)}.pf-c-popover.pf-m-default{--pf-c-popover__title-icon--Color:var(--pf-c-popover--m-default__title-icon--Color);--pf-c-popover__title-text--Color:var(--pf-c-popover--m-default__title-text--Color)}.pf-c-popover.pf-m-info{--pf-c-popover__title-icon--Color:var(--pf-c-popover--m-info__title-icon--Color);--pf-c-popover__title-text--Color:var(--pf-c-popover--m-info__title-text--Color)}.pf-c-popover__content{background-color:var(--pf-c-popover__content--BackgroundColor);padding:var(--pf-c-popover__content--PaddingTop) var(--pf-c-popover__content--PaddingRight) var(--pf-c-popover__content--PaddingBottom) var(--pf-c-popover__content--PaddingLeft);position:relative}.pf-c-popover__content>.pf-c-title{margin-bottom:var(--pf-c-popover--c-title--MarginBottom)}.pf-c-popover__content>.pf-c-button{position:absolute;right:var(--pf-c-popover--c-button--Right);top:var(--pf-c-popover--c-button--Top)}.pf-c-popover__content>.pf-c-button+*{padding-right:var(--pf-c-popover--c-button--sibling--PaddingRight)}.pf-c-popover__arrow{background-color:var(--pf-c-popover__arrow--BackgroundColor);box-shadow:var(--pf-c-popover__arrow--BoxShadow);height:var(--pf-c-popover__arrow--Height);pointer-events:none;position:absolute;width:var(--pf-c-popover__arrow--Width)}.pf-c-popover__title{flex:0 0 auto;font-family:var(--pf-c-popover__title--FontFamily);font-size:var(--pf-c-popover__title--FontSize);line-height:var(--pf-c-popover__title--LineHeight);margin-bottom:var(--pf-c-popover__title--MarginBottom)}.pf-c-popover__title.pf-m-icon{display:flex}.pf-c-popover__title-icon{color:var(--pf-c-popover__title-icon--Color);margin-right:var(--pf-c-popover__title-icon--MarginRight)}.pf-c-popover__title-text{color:var(--pf-c-popover__title-text--Color,inherit)}.pf-c-popover__body{word-wrap:break-word}.pf-c-popover__footer{margin-top:var(--pf-c-popover__footer--MarginTop)}:where(.pf-theme-dark) .pf-c-popover{--pf-c-popover--BoxShadow:none;--pf-c-popover__arrow--BoxShadow:none;--pf-c-popover__arrow--BackgroundColor:var(--pf-c-popover__content--BackgroundColor);--pf-c-popover--m-default__title-text--Color:var(--pf-global--default-color--200);--pf-c-popover--m-info__title-text--Color:var(--pf-global--info-color--100);--pf-c-popover--m-success__title-text--Color:var(--pf-global--success-color--100)}:where(.pf-theme-dark) .pf-c-popover,:where(.pf-theme-dark) .pf-c-popover .pf-c-popover__arrow{border:4px solid var(--pf-global--BorderColor--400)}.pf-c-list{--pf-c-list--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-list--nested--MarginTop:var(--pf-global--spacer--sm);--pf-c-list--nested--MarginLeft:var(--pf-global--spacer--sm);--pf-c-list--ul--ListStyle:var(--pf-global--ListStyle);--pf-c-list--li--MarginTop:var(--pf-global--spacer--sm);--pf-c-list--m-inline--li--MarginRight:var(--pf-global--spacer--lg);--pf-c-list--m-bordered--li--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-list--m-bordered--li--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-list--m-bordered--li--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-list__item-icon--MinWidth:var(--pf-global--icon--FontSize--sm);--pf-c-list__item-icon--MarginTop:0.375rem;--pf-c-list__item-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-list__item-icon--Color:var(--pf-global--icon--Color--light);--pf-c-list__item-icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-list--m-icon-lg__item-icon--MinWidth:var(--pf-global--icon--FontSize--lg);--pf-c-list--m-icon-lg__item-icon--MarginRight:var(--pf-global--spacer--md);--pf-c-list--m-icon-lg__item-icon--FontSize:var(--pf-global--icon--FontSize--lg);padding-left:var(--pf-c-list--PaddingLeft)}.pf-c-list ol,.pf-c-list ul{margin-left:var(--pf-c-list--nested--MarginLeft);margin-top:var(--pf-c-list--nested--MarginTop)}.pf-c-list li+li{margin-top:var(--pf-c-list--li--MarginTop)}ul.pf-c-list{list-style:var(--pf-c-list--ul--ListStyle)}.pf-c-list .pf-c-list__item{display:flex}.pf-c-list .pf-c-list__item-icon{color:var(--pf-c-list__item-icon--Color);flex-shrink:0;font-size:var(--pf-c-list__item-icon--FontSize);line-height:1;margin-right:var(--pf-c-list__item-icon--MarginRight);margin-top:var(--pf-c-list__item-icon--MarginTop);min-width:var(--pf-c-list__item-icon--MinWidth)}.pf-c-list.pf-m-icon-lg{--pf-c-list__item-icon--MinWidth:var(--pf-c-list--m-icon-lg__item-icon--MinWidth);--pf-c-list__item-icon--MarginTop:0;--pf-c-list__item-icon--MarginRight:var(--pf-c-list--m-icon-lg__item-icon--MarginRight);--pf-c-list__item-icon--FontSize:var(--pf-c-list--m-icon-lg__item-icon--FontSize)}.pf-c-list.pf-m-inline,.pf-c-list.pf-m-plain{--pf-c-list--PaddingLeft:0;list-style:none}.pf-c-list.pf-m-inline{display:flex;flex-wrap:wrap}.pf-c-list.pf-m-inline li{--pf-c-list--li--MarginTop:0}.pf-c-list.pf-m-inline li:not(:last-child){margin-right:var(--pf-c-list--m-inline--li--MarginRight)}.pf-c-list.pf-m-bordered>*{border-bottom:var(--pf-c-list--m-bordered--li--BorderBottomWidth) solid var(--pf-c-list--m-bordered--li--BorderBottomColor);padding-bottom:var(--pf-c-list--m-bordered--li--PaddingBottom)}.pf-c-list.pf-m-bordered>:last-child{--pf-c-list--m-bordered--li--PaddingBottom:0;--pf-c-list--m-bordered--li--BorderBottomWidth:0}.pf-l-split{--pf-l-split--m-gutter--MarginRight:var(--pf-global--gutter);display:flex;margin:0;padding:0}.pf-l-split.pf-m-wrap{flex-wrap:wrap}.pf-l-split__item.pf-m-fill{flex-grow:1}.pf-l-split.pf-m-gutter>:not(:last-child){margin-right:var(--pf-l-split--m-gutter--MarginRight)}.pf-c-helper-text{--pf-c-helper-text--Gap:var(--pf-global--spacer--xs);--pf-c-helper-text--FontSize:var(--pf-global--FontSize--sm);--pf-c-helper-text__item-icon--Color:var(--pf-global--Color--100);--pf-c-helper-text__item-text--Color:var(--pf-global--Color--100);--pf-c-helper-text__item-icon--m-indeterminate--Color:var(--pf-global--Color--200);--pf-c-helper-text__item-text--m-indeterminate--Color:var(--pf-global--Color--200);--pf-c-helper-text__item-icon--m-warning--Color:var(--pf-global--warning-color--100);--pf-c-helper-text__item-text--m-warning--Color:var(--pf-global--warning-color--200);--pf-c-helper-text__item-icon--m-success--Color:var(--pf-global--success-color--100);--pf-c-helper-text__item-text--m-success--Color:var(--pf-global--success-color--200);--pf-c-helper-text__item-icon--m-error--Color:var(--pf-global--danger-color--100);--pf-c-helper-text__item-text--m-error--Color:var(--pf-global--danger-color--200);--pf-c-helper-text--m-dynamic__item-icon--Color:var(--pf-global--Color--100);--pf-c-helper-text--m-dynamic__item-text--Color:var(--pf-global--Color--100);--pf-c-helper-text--m-dynamic--m-indeterminate__item-icon--Color:var(--pf-global--Color--200);--pf-c-helper-text--m-dynamic--m-indeterminate__item-text--Color:var(--pf-global--Color--200);--pf-c-helper-text--m-dynamic--m-warning__item-icon--Color:var(--pf-global--warning-color--100);--pf-c-helper-text--m-dynamic--m-warning__item-text--Color:var(--pf-global--Color--200);--pf-c-helper-text--m-dynamic--m-success__item-icon--Color:var(--pf-global--success-color--100);--pf-c-helper-text--m-dynamic--m-success__item-text--Color:var(--pf-global--Color--200);--pf-c-helper-text--m-dynamic--m-error__item-icon--Color:var(--pf-global--danger-color--100);--pf-c-helper-text--m-dynamic--m-error__item-text--Color:var(--pf-global--Color--100);--pf-c-helper-text__item-icon--MarginRight:var(--pf-global--spacer--xs);display:grid;font-size:var(--pf-c-helper-text--FontSize);gap:var(--pf-c-helper-text--Gap)}.pf-c-helper-text__item{display:flex}.pf-c-helper-text__item.pf-m-indeterminate{--pf-c-helper-text__item-icon--Color:var(--pf-c-helper-text__item-icon--m-indeterminate--Color);--pf-c-helper-text__item-text--Color:var(--pf-c-helper-text__item-text--m-indeterminate--Color);--pf-c-helper-text--m-dynamic__item-icon--Color:var(--pf-c-helper-text--m-dynamic--m-indeterminate__item-icon--Color);--pf-c-helper-text--m-dynamic__item-text--Color:var(--pf-c-helper-text--m-dynamic--m-indeterminate__item-text--Color)}.pf-c-helper-text__item.pf-m-warning{--pf-c-helper-text__item-icon--Color:var(--pf-c-helper-text__item-icon--m-warning--Color);--pf-c-helper-text__item-text--Color:var(--pf-c-helper-text__item-text--m-warning--Color);--pf-c-helper-text--m-dynamic__item-icon--Color:var(--pf-c-helper-text--m-dynamic--m-warning__item-icon--Color);--pf-c-helper-text--m-dynamic__item-text--Color:var(--pf-c-helper-text--m-dynamic--m-warning__item-text--Color)}.pf-c-helper-text__item.pf-m-success{--pf-c-helper-text__item-icon--Color:var(--pf-c-helper-text__item-icon--m-success--Color);--pf-c-helper-text__item-text--Color:var(--pf-c-helper-text__item-text--m-success--Color);--pf-c-helper-text--m-dynamic__item-icon--Color:var(--pf-c-helper-text--m-dynamic--m-success__item-icon--Color);--pf-c-helper-text--m-dynamic__item-text--Color:var(--pf-c-helper-text--m-dynamic--m-success__item-text--Color)}.pf-c-helper-text__item.pf-m-error{--pf-c-helper-text__item-icon--Color:var(--pf-c-helper-text__item-icon--m-error--Color);--pf-c-helper-text__item-text--Color:var(--pf-c-helper-text__item-text--m-error--Color);--pf-c-helper-text--m-dynamic__item-icon--Color:var(--pf-c-helper-text--m-dynamic--m-error__item-icon--Color);--pf-c-helper-text--m-dynamic__item-text--Color:var(--pf-c-helper-text--m-dynamic--m-error__item-text--Color)}.pf-c-helper-text__item.pf-m-dynamic{--pf-c-helper-text__item-text--Color:var(--pf-c-helper-text--m-dynamic__item-text--Color);--pf-c-helper-text__item-icon--Color:var(--pf-c-helper-text--m-dynamic__item-icon--Color)}.pf-c-helper-text__item-icon{color:var(--pf-c-helper-text__item-icon--Color);margin-right:var(--pf-c-helper-text__item-icon--MarginRight)}.pf-c-helper-text__item-text{color:var(--pf-c-helper-text__item-text--Color)}:where(.pf-theme-dark) .pf-c-helper-text{--pf-c-helper-text__item-text--m-success--Color:var(--pf-global--success-color--100)}.pf-c-modal-box{--pf-c-modal-box--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-modal-box--BoxShadow:var(--pf-global--BoxShadow--xl);--pf-c-modal-box--ZIndex:var(--pf-global--ZIndex--xl);--pf-c-modal-box--Width:100%;--pf-c-modal-box--MaxWidth:calc(100% - var(--pf-global--spacer--xl));--pf-c-modal-box--m-sm--sm--MaxWidth:35rem;--pf-c-modal-box--m-md--Width:52.5rem;--pf-c-modal-box--m-lg--lg--MaxWidth:70rem;--pf-c-modal-box--MaxHeight:calc(100% - var(--pf-global--spacer--2xl));--pf-c-modal-box--m-align-top--spacer:var(--pf-global--spacer--sm);--pf-c-modal-box--m-align-top--xl--spacer:var(--pf-global--spacer--xl);--pf-c-modal-box--m-align-top--MarginTop:var(--pf-c-modal-box--m-align-top--spacer);--pf-c-modal-box--m-align-top--MaxHeight:calc(100% - min(var(--pf-c-modal-box--m-align-top--spacer), var(--pf-global--spacer--2xl)) - var(--pf-c-modal-box--m-align-top--spacer));--pf-c-modal-box--m-align-top--MaxWidth:calc(100% - min(var(--pf-c-modal-box--m-align-top--spacer) * 2, var(--pf-global--spacer--xl)));--pf-c-modal-box--m-danger__title-icon--Color:var(--pf-global--danger-color--100);--pf-c-modal-box--m-warning__title-icon--Color:var(--pf-global--warning-color--100);--pf-c-modal-box--m-success__title-icon--Color:var(--pf-global--success-color--100);--pf-c-modal-box--m-info__title-icon--Color:var(--pf-global--info-color--100);--pf-c-modal-box--m-default__title-icon--Color:var(--pf-global--default-color--200);--pf-c-modal-box__header--PaddingTop:var(--pf-global--spacer--lg);--pf-c-modal-box__header--PaddingRight:var(--pf-global--spacer--lg);--pf-c-modal-box__header--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-modal-box__header--last-child--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-modal-box__title--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-modal-box__title--FontFamily:var(--pf-global--FontFamily--heading--sans-serif);--pf-c-modal-box__title--FontSize:var(--pf-global--FontSize--2xl);--pf-c-modal-box__title-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-modal-box__title-icon--Color:var(--pf-global--Color--100);--pf-c-modal-box__description--PaddingTop:var(--pf-global--spacer--xs);--pf-c-modal-box__body--MinHeight:calc(var(--pf-global--FontSize--md)*var(--pf-global--LineHeight--md));--pf-c-modal-box__body--PaddingTop:var(--pf-global--spacer--lg);--pf-c-modal-box__body--PaddingRight:var(--pf-global--spacer--lg);--pf-c-modal-box__body--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-modal-box__body--last-child--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-modal-box__header--body--PaddingTop:var(--pf-global--spacer--md);--pf-c-modal-box--c-button--Top:calc(var(--pf-global--spacer--lg));--pf-c-modal-box--c-button--Right:var(--pf-global--spacer--md);--pf-c-modal-box--c-button--sibling--MarginRight:calc(var(--pf-global--spacer--xl) + var(--pf-global--spacer--sm));--pf-c-modal-box__footer--PaddingTop:var(--pf-global--spacer--lg);--pf-c-modal-box__footer--PaddingRight:var(--pf-global--spacer--lg);--pf-c-modal-box__footer--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-modal-box__footer--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-modal-box__footer--c-button--MarginRight:var(--pf-global--spacer--md);--pf-c-modal-box__footer--c-button--sm--MarginRight:calc(var(--pf-c-modal-box__footer--c-button--MarginRight)/2);background-color:var(--pf-c-modal-box--BackgroundColor);box-shadow:var(--pf-c-modal-box--BoxShadow);display:flex;flex-direction:column;max-height:var(--pf-c-modal-box--MaxHeight);max-width:var(--pf-c-modal-box--MaxWidth);position:relative;width:var(--pf-c-modal-box--Width);z-index:var(--pf-c-modal-box--ZIndex)}@media (min-width:1200px){.pf-c-modal-box{--pf-c-modal-box--m-align-top--spacer:var(--pf-c-modal-box--m-align-top--xl--spacer)}}.pf-c-modal-box.pf-m-sm{--pf-c-modal-box--Width:var(--pf-c-modal-box--m-sm--sm--MaxWidth)}.pf-c-modal-box.pf-m-md{--pf-c-modal-box--Width:var(--pf-c-modal-box--m-md--Width)}.pf-c-modal-box.pf-m-lg{--pf-c-modal-box--Width:var(--pf-c-modal-box--m-lg--lg--MaxWidth)}.pf-c-modal-box.pf-m-align-top{align-self:flex-start;max-height:var(--pf-c-modal-box--m-align-top--MaxHeight);max-width:var(--pf-c-modal-box--m-align-top--MaxWidth);top:var(--pf-c-modal-box--m-align-top--MarginTop)}.pf-c-modal-box.pf-m-danger{--pf-c-modal-box__title-icon--Color:var(--pf-c-modal-box--m-danger__title-icon--Color)}.pf-c-modal-box.pf-m-warning{--pf-c-modal-box__title-icon--Color:var(--pf-c-modal-box--m-warning__title-icon--Color)}.pf-c-modal-box.pf-m-success{--pf-c-modal-box__title-icon--Color:var(--pf-c-modal-box--m-success__title-icon--Color)}.pf-c-modal-box.pf-m-default{--pf-c-modal-box__title-icon--Color:var(--pf-c-modal-box--m-default__title-icon--Color)}.pf-c-modal-box.pf-m-info{--pf-c-modal-box__title-icon--Color:var(--pf-c-modal-box--m-info__title-icon--Color)}.pf-c-modal-box>.pf-c-button{position:absolute;right:var(--pf-c-modal-box--c-button--Right);top:var(--pf-c-modal-box--c-button--Top)}.pf-c-modal-box>.pf-c-button+*{margin-right:var(--pf-c-modal-box--c-button--sibling--MarginRight)}.pf-c-modal-box__header{display:flex;flex-direction:column;flex-shrink:0;padding-left:var(--pf-c-modal-box__header--PaddingLeft);padding-right:var(--pf-c-modal-box__header--PaddingRight);padding-top:var(--pf-c-modal-box__header--PaddingTop)}.pf-c-modal-box__header.pf-m-help{display:flex;flex-direction:row}.pf-c-modal-box__header:last-child{padding-bottom:var(--pf-c-modal-box__header--last-child--PaddingBottom)}.pf-c-modal-box__header+.pf-c-modal-box__body{--pf-c-modal-box__body--PaddingTop:var(--pf-c-modal-box__header--body--PaddingTop)}.pf-c-modal-box__header-main{flex-grow:1;min-width:0}.pf-c-modal-box__title,.pf-c-modal-box__title-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-modal-box__title{flex:0 0 auto;font-family:var(--pf-c-modal-box__title--FontFamily);font-size:var(--pf-c-modal-box__title--FontSize);line-height:var(--pf-c-modal-box__title--LineHeight)}.pf-c-modal-box__title.pf-m-icon{display:flex}.pf-c-modal-box__title-icon{color:var(--pf-c-modal-box__title-icon--Color);margin-right:var(--pf-c-modal-box__title-icon--MarginRight)}.pf-c-modal-box__description{padding-top:var(--pf-c-modal-box__description--PaddingTop)}.pf-c-modal-box__body{-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:var(--pf-c-modal-box__body--MinHeight);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding-left:var(--pf-c-modal-box__body--PaddingLeft);padding-right:var(--pf-c-modal-box__body--PaddingRight);padding-top:var(--pf-c-modal-box__body--PaddingTop);word-break:break-word}.pf-c-modal-box__body:last-child{padding-bottom:var(--pf-c-modal-box__body--last-child--PaddingBottom)}.pf-c-modal-box__footer{align-items:center;display:flex;flex:0 0 auto;padding-bottom:var(--pf-c-modal-box__footer--PaddingBottom);padding-left:var(--pf-c-modal-box__footer--PaddingLeft);padding-right:var(--pf-c-modal-box__footer--PaddingRight);padding-top:var(--pf-c-modal-box__footer--PaddingTop)}.pf-c-modal-box__footer>.pf-c-button:not(:last-child){margin-right:var(--pf-c-modal-box__footer--c-button--MarginRight)}@media screen and (min-width:576px){.pf-c-modal-box__footer>.pf-c-button:not(:last-child){--pf-c-modal-box__footer--c-button--MarginRight:var(--pf-c-modal-box__footer--c-button--sm--MarginRight)}}:where(.pf-theme-dark) .pf-c-modal-box{--pf-c-modal-box--BackgroundColor:var(--pf-global--BackgroundColor--300)}.pf-c-multiple-file-upload{--pf-c-multiple-file-upload--GridTemplateColumns:1fr;--pf-c-multiple-file-upload--Gap:var(--pf-global--spacer--lg);--pf-c-multiple-file-upload__main--TextAlign:center;--pf-c-multiple-file-upload__main--GridTemplateColumns:auto;--pf-c-multiple-file-upload__main--GridTemplateRows:auto;--pf-c-multiple-file-upload__main--GridTemplateAreas:"title" "upload" "info";--pf-c-multiple-file-upload__main--Gap:var(--pf-global--spacer--md);--pf-c-multiple-file-upload__main--PaddingTop:var(--pf-global--spacer--lg);--pf-c-multiple-file-upload__main--PaddingRight:var(--pf-global--spacer--lg);--pf-c-multiple-file-upload__main--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-multiple-file-upload__main--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-multiple-file-upload__main--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-multiple-file-upload__main--BorderStyle:dashed;--pf-c-multiple-file-upload__main--BorderColor:var(--pf-global--BorderColor--100);--pf-c-multiple-file-upload__main--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-multiple-file-upload__title--Display:grid;--pf-c-multiple-file-upload__title--GridTemplateColumns:auto;--pf-c-multiple-file-upload__title--Gap:var(--pf-global--spacer--sm);--pf-c-multiple-file-upload__title-icon--Color:var(--pf-global--Color--200);--pf-c-multiple-file-upload__title-text-separator--Display:block;--pf-c-multiple-file-upload__title-text-separator--MarginTop:var(--pf-global--spacer--sm);--pf-c-multiple-file-upload__info--FontSize:var(--pf-global--FontSize--sm);--pf-c-multiple-file-upload__info--Color:var(--pf-global--Color--200);--pf-c-multiple-file-upload__info--MarginTop:var(--pf-global--spacer--sm);--pf-c-multiple-file-upload--m-drag-over__main--BorderStyle:solid;--pf-c-multiple-file-upload--m-drag-over__main--BorderColor:var(--pf-global--active-color--100);--pf-c-multiple-file-upload--m-drag-over__main--BackgroundColor:var(--pf-global--palette--blue-50);--pf-c-multiple-file-upload--m-drag-over__main__title-icon--Color:var(--pf-global--active-color--100);--pf-c-multiple-file-upload--m-drag-over__main__title-text--Color:var(--pf-global--active-color--100);--pf-c-multiple-file-upload--m-drag-over__main__info--Color:var(--pf-global--active-color--100);--pf-c-multiple-file-upload--m-horizontal--GridTemplateColumns:fit-content(100%);--pf-c-multiple-file-upload--m-horizontal__main--TextAlign:left;--pf-c-multiple-file-upload--m-horizontal__main--GridTemplateColumns:1fr auto;--pf-c-multiple-file-upload--m-horizontal__main--GridTemplateAreas:"title upload" "info upload";--pf-c-multiple-file-upload--m-horizontal__main--Gap:var(--pf-global--spacer--sm) var(--pf-global--spacer--2xl);--pf-c-multiple-file-upload--m-horizontal__main--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-multiple-file-upload--m-horizontal__title--GridTemplateColumns:auto 1fr;--pf-c-multiple-file-upload--m-horizontal__title--Gap:var(--pf-global--spacer--xs);--pf-c-multiple-file-upload--m-horizontal__title-text-separator--Display:inline;--pf-c-multiple-file-upload--m-horizontal__title-text-separator--MarginTop:0;--pf-c-multiple-file-upload--m-horizontal__info--MarginTop:0;--pf-c-multiple-file-upload__status-progress--GridTemplateColumns:auto 1fr;--pf-c-multiple-file-upload__status-progress--Gap:var(--pf-global--spacer--sm);--pf-c-multiple-file-upload__status-progress-icon--Color:var(--pf-global--Color--200);--pf-c-multiple-file-upload__status-item--PaddingTop:var(--pf-global--spacer--md);--pf-c-multiple-file-upload__status-item--PaddingBottom:var(--pf-global--spacer--md);--pf-c-multiple-file-upload__status-item--first-child--PaddingTop:0;--pf-c-multiple-file-upload__status-item--GridTemplateColumns:auto 1fr auto;--pf-c-multiple-file-upload__status-item--Gap:var(--pf-global--spacer--sm);--pf-c-multiple-file-upload__status-item--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-multiple-file-upload__status-item--BorderColor:var(--pf-global--BorderColor--100);--pf-c-multiple-file-upload__status-item-icon--Color:var(--pf-global--Color--200);--pf-c-multiple-file-upload__status-item-close--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-multiple-file-upload__status-item-progress--GridTemplateColumns:fit-content(100%) max-content;--pf-c-multiple-file-upload__status-item-progress--Gap:var(--pf-global--spacer--sm);--pf-c-multiple-file-upload__status-item-progress-text--Color:var(--pf-global--primary-color--100);--pf-c-multiple-file-upload__status-item-progress-size--Color:var(--pf-global--Color--200);display:grid;gap:var(--pf-c-multiple-file-upload--Gap);grid-template-columns:var(--pf-c-multiple-file-upload--GridTemplateColumns)}.pf-c-multiple-file-upload.pf-m-horizontal{--pf-c-multiple-file-upload--GridTemplateColumns:var(--pf-c-multiple-file-upload--m-horizontal--GridTemplateColumns);--pf-c-multiple-file-upload__main--TextAlign:var(--pf-c-multiple-file-upload--m-horizontal__main--TextAlign);--pf-c-multiple-file-upload__main--GridTemplateColumns:var(--pf-c-multiple-file-upload--m-horizontal__main--GridTemplateColumns);--pf-c-multiple-file-upload__main--GridTemplateAreas:var(--pf-c-multiple-file-upload--m-horizontal__main--GridTemplateAreas);--pf-c-multiple-file-upload__main--Gap:var(--pf-c-multiple-file-upload--m-horizontal__main--Gap);--pf-c-multiple-file-upload__main--PaddingBottom:var(--pf-c-multiple-file-upload--m-horizontal__main--PaddingBottom);--pf-c-multiple-file-upload__title--GridTemplateColumns:var(--pf-c-multiple-file-upload--m-horizontal__title--GridTemplateColumns);--pf-c-multiple-file-upload__title--Gap:var(--pf-c-multiple-file-upload--m-horizontal__title--Gap);--pf-c-multiple-file-upload__title-text-separator--Display:var(--pf-c-multiple-file-upload--m-horizontal__title-text-separator--Display);--pf-c-multiple-file-upload__title-text-separator--MarginTop:var(--pf-c-multiple-file-upload--m-horizontal__title-text-separator--MarginTop);--pf-c-multiple-file-upload__info--MarginTop:var(--pf-c-multiple-file-upload--m-horizontal__info--MarginTop)}.pf-c-multiple-file-upload.pf-m-drag-over{--pf-c-multiple-file-upload__main--BorderStyle:var(--pf-c-multiple-file-upload--m-drag-over__main--BorderStyle);--pf-c-multiple-file-upload__main--BorderColor:var(--pf-c-multiple-file-upload--m-drag-over__main--BorderColor);--pf-c-multiple-file-upload__main--BackgroundColor:var(--pf-c-multiple-file-upload--m-drag-over__main--BackgroundColor);--pf-c-multiple-file-upload__title-icon--Color:var(--pf-c-multiple-file-upload--m-drag-over__main__title-icon--Color);--pf-c-multiple-file-upload__title-text--Color:var(--pf-c-multiple-file-upload--m-drag-over__main__title-text--Color);--pf-c-multiple-file-upload__info--Color:var(--pf-c-multiple-file-upload--m-drag-over__main__info--Color)}.pf-c-multiple-file-upload__main{background-color:var(--pf-c-multiple-file-upload__main--BackgroundColor);border:var(--pf-c-multiple-file-upload__main--BorderWidth) var(--pf-c-multiple-file-upload__main--BorderStyle) var(--pf-c-multiple-file-upload__main--BorderColor);display:grid;gap:var(--pf-c-multiple-file-upload__main--Gap);grid-template-areas:var(--pf-c-multiple-file-upload__main--GridTemplateAreas);grid-template-columns:var(--pf-c-multiple-file-upload__main--GridTemplateColumns);grid-template-rows:var(--pf-c-multiple-file-upload__main--GridTemplateRows);padding:var(--pf-c-multiple-file-upload__main--PaddingTop) var(--pf-c-multiple-file-upload__main--PaddingRight) var(--pf-c-multiple-file-upload__main--PaddingBottom) var(--pf-c-multiple-file-upload__main--PaddingLeft);text-align:var(--pf-c-multiple-file-upload__main--TextAlign)}.pf-c-multiple-file-upload__title{display:var(--pf-c-multiple-file-upload__title--Display);gap:var(--pf-c-multiple-file-upload__title--Gap);grid-area:title;grid-template-columns:var(--pf-c-multiple-file-upload__title--GridTemplateColumns)}.pf-c-multiple-file-upload__title-icon{color:var(--pf-c-multiple-file-upload__title-icon--Color)}.pf-c-multiple-file-upload__title-text{color:var(--pf-c-multiple-file-upload__title-text--Color,inherit)}.pf-c-multiple-file-upload__title-text-separator{display:var(--pf-c-multiple-file-upload__title-text-separator--Display);margin-top:var(--pf-c-multiple-file-upload__title-text-separator--MarginTop)}.pf-c-multiple-file-upload__upload{grid-area:upload}.pf-c-multiple-file-upload__info{color:var(--pf-c-multiple-file-upload__info--Color);font-size:var(--pf-c-multiple-file-upload__info--FontSize);grid-area:info;margin-top:var(--pf-c-multiple-file-upload__info--MarginTop)}.pf-c-multiple-file-upload__status,.pf-c-multiple-file-upload__status-item-main{min-width:0}.pf-c-multiple-file-upload__status-progress{display:grid;gap:var(--pf-c-multiple-file-upload__status-progress--Gap);grid-template-columns:var(--pf-c-multiple-file-upload__status-progress--GridTemplateColumns)}.pf-c-multiple-file-upload__status-progress-icon{color:var(--pf-c-multiple-file-upload__status-progress-icon--Color)}.pf-c-multiple-file-upload__status-item{border-bottom:var(--pf-c-multiple-file-upload__status-item--BorderWidth) solid var(--pf-c-multiple-file-upload__status-item--BorderColor);display:grid;gap:var(--pf-c-multiple-file-upload__status-item--Gap);grid-template-columns:var(--pf-c-multiple-file-upload__status-item--GridTemplateColumns);padding-bottom:var(--pf-c-multiple-file-upload__status-item--PaddingBottom);padding-top:var(--pf-c-multiple-file-upload__status-item--PaddingTop)}.pf-c-multiple-file-upload__status-item:first-child{--pf-c-multiple-file-upload__status-item--PaddingTop:var(--pf-c-multiple-file-upload__status-item--first-child--PaddingTop)}.pf-c-multiple-file-upload__status-item-icon{color:var(--pf-c-multiple-file-upload__status-item-icon--Color)}.pf-c-multiple-file-upload__status-item-close{margin-top:var(--pf-c-multiple-file-upload__status-item-close--MarginTop)}.pf-c-multiple-file-upload__status-item-progress{display:grid;gap:var(--pf-c-multiple-file-upload__status-item-progress--Gap);grid-template-columns:var(--pf-c-multiple-file-upload__status-item-progress--GridTemplateColumns)}.pf-c-multiple-file-upload__status-item-progress-text{color:var(--pf-c-multiple-file-upload__status-item-progress-text--Color)}.pf-c-multiple-file-upload__status-item-progress-size{color:var(--pf-c-multiple-file-upload__status-item-progress-size--Color)}.pf-c-expandable-section{--pf-c-expandable-section__toggle--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-expandable-section__toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-expandable-section__toggle--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-expandable-section__toggle--PaddingLeft:0;--pf-c-expandable-section__toggle--MarginTop:0;--pf-c-expandable-section__toggle--Color:var(--pf-global--link--Color);--pf-c-expandable-section__toggle--hover--Color:var(--pf-global--link--Color--hover);--pf-c-expandable-section__toggle--active--Color:var(--pf-global--link--Color--hover);--pf-c-expandable-section__toggle--focus--Color:var(--pf-global--link--Color--hover);--pf-c-expandable-section__toggle--m-expanded--Color:var(--pf-global--link--Color--hover);--pf-c-expandable-section__toggle-icon--MinWidth:1em;--pf-c-expandable-section__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-expandable-section__toggle-icon--Transition:.2s ease-in 0s;--pf-c-expandable-section__toggle-icon--Rotate:0;--pf-c-expandable-section__toggle-icon--m-expand-top--Rotate:0;--pf-c-expandable-section--m-expanded__toggle-icon--Rotate:90deg;--pf-c-expandable-section--m-expanded__toggle-icon--m-expand-top--Rotate:-90deg;--pf-c-expandable-section__toggle-text--MarginLeft:calc(var(--pf-global--spacer--xs) + var(--pf-global--spacer--sm));--pf-c-expandable-section__content--MarginTop:var(--pf-global--spacer--md);--pf-c-expandable-section__content--MaxWidth:auto;--pf-c-expandable-section--m-limit-width__content--MaxWidth:46.875rem;--pf-c-expandable-section--m-display-lg--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-expandable-section--m-display-lg__toggle--PaddingTop:var(--pf-global--spacer--md);--pf-c-expandable-section--m-display-lg__toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-expandable-section--m-display-lg__toggle--PaddingBottom:var(--pf-global--spacer--md);--pf-c-expandable-section--m-display-lg__toggle--PaddingLeft:var(--pf-global--spacer--md);--pf-c-expandable-section--m-display-lg__content--MarginTop:0;--pf-c-expandable-section--m-display-lg__content--PaddingRight:var(--pf-global--spacer--lg);--pf-c-expandable-section--m-display-lg__content--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-expandable-section--m-display-lg__content--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-expandable-section--m-display-lg--after--BackgroundColor:transparent;--pf-c-expandable-section--m-display-lg--after--Width:var(--pf-global--BorderWidth--lg);--pf-c-expandable-section--m-display-lg--m-expanded--after--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-expandable-section--m-indented__content--PaddingLeft:calc(var(--pf-c-expandable-section__toggle-text--MarginLeft) + var(--pf-c-expandable-section__toggle-icon--MinWidth));--pf-c-expandable-section--m-truncate__content--LineClamp:3;--pf-c-expandable-section--m-truncate__toggle--MarginTop:var(--pf-global--spacer--xs)}.pf-c-expandable-section.pf-m-expanded{--pf-c-expandable-section__toggle--Color:var(--pf-c-expandable-section__toggle--m-expanded--Color);--pf-c-expandable-section__toggle-icon--Rotate:var(--pf-c-expandable-section--m-expanded__toggle-icon--Rotate);--pf-c-expandable-section__toggle-icon--m-expand-top--Rotate:var(--pf-c-expandable-section--m-expanded__toggle-icon--m-expand-top--Rotate);--pf-c-expandable-section--m-display-lg--after--BackgroundColor:var(--pf-c-expandable-section--m-display-lg--m-expanded--after--BackgroundColor)}.pf-c-expandable-section.pf-m-detached,.pf-c-expandable-section.pf-m-truncate{--pf-c-expandable-section__content--MarginTop:0}.pf-c-expandable-section.pf-m-limit-width{--pf-c-expandable-section__content--MaxWidth:var(--pf-c-expandable-section--m-limit-width__content--MaxWidth)}.pf-c-expandable-section.pf-m-display-lg{--pf-c-expandable-section__toggle--PaddingTop:var(--pf-c-expandable-section--m-display-lg__toggle--PaddingTop);--pf-c-expandable-section__toggle--PaddingRight:var(--pf-c-expandable-section--m-display-lg__toggle--PaddingRight);--pf-c-expandable-section__toggle--PaddingBottom:var(--pf-c-expandable-section--m-display-lg__toggle--PaddingBottom);--pf-c-expandable-section__toggle--PaddingLeft:var(--pf-c-expandable-section--m-display-lg__toggle--PaddingLeft);--pf-c-expandable-section__content--PaddingRight:var(--pf-c-expandable-section--m-display-lg__content--PaddingRight);--pf-c-expandable-section__content--PaddingBottom:var(--pf-c-expandable-section--m-display-lg__content--PaddingBottom);--pf-c-expandable-section__content--PaddingLeft:var(--pf-c-expandable-section--m-display-lg__content--PaddingLeft);--pf-c-expandable-section__content--MarginTop:var(--pf-c-expandable-section--m-display-lg__content--MarginTop);box-shadow:var(--pf-c-expandable-section--m-display-lg--BoxShadow);position:relative}.pf-c-expandable-section.pf-m-display-lg:after{background-color:var(--pf-c-expandable-section--m-display-lg--after--BackgroundColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-expandable-section--m-display-lg--after--Width)}.pf-c-expandable-section.pf-m-indented{--pf-c-expandable-section__content--PaddingLeft:var(--pf-c-expandable-section--m-indented__content--PaddingLeft)}.pf-c-expandable-section.pf-m-truncate{--pf-c-expandable-section__toggle--MarginTop:var(--pf-c-expandable-section--m-truncate__toggle--MarginTop);--pf-c-expandable-section__toggle--PaddingTop:0;--pf-c-expandable-section__toggle--PaddingRight:0;--pf-c-expandable-section__toggle--PaddingBottom:0;--pf-c-expandable-section__toggle-text--MarginLeft:0}.pf-c-expandable-section.pf-m-truncate:not(.pf-m-expanded) .pf-c-expandable-section__content{-webkit-box-orient:vertical;-webkit-line-clamp:var(--pf-c-expandable-section--m-truncate__content--LineClamp);display:-webkit-box;overflow:hidden}.pf-c-expandable-section.pf-m-detached{--pf-c-expandable-section--m-truncate__toggle--MarginTop:0}.pf-c-expandable-section__toggle{border:none;color:var(--pf-c-expandable-section__toggle--Color);display:flex;margin-top:var(--pf-c-expandable-section__toggle--MarginTop);padding:var(--pf-c-expandable-section__toggle--PaddingTop) var(--pf-c-expandable-section__toggle--PaddingRight) var(--pf-c-expandable-section__toggle--PaddingBottom) var(--pf-c-expandable-section__toggle--PaddingLeft)}.pf-c-expandable-section__toggle:hover{--pf-c-expandable-section__toggle--Color:var(--pf-c-expandable-section__toggle--hover--Color)}.pf-c-expandable-section__toggle.pf-m-active,.pf-c-expandable-section__toggle:active{--pf-c-expandable-section__toggle--Color:var(--pf-c-expandable-section__toggle--active--Color)}.pf-c-expandable-section__toggle:focus{--pf-c-expandable-section__toggle--Color:var(--pf-c-expandable-section__toggle--focus--Color)}.pf-c-expandable-section__toggle-icon{color:var(--pf-c-expandable-section__toggle-icon--Color);min-width:var(--pf-c-expandable-section__toggle-icon--MinWidth);transform:rotate(var(--pf-c-expandable-section__toggle-icon--Rotate));transition:var(--pf-c-expandable-section__toggle-icon--Transition)}.pf-c-expandable-section__toggle-icon.pf-m-expand-top{--pf-c-expandable-section__toggle-icon--Rotate:var(--pf-c-expandable-section__toggle-icon--m-expand-top--Rotate)}.pf-c-expandable-section__toggle-text{margin-left:var(--pf-c-expandable-section__toggle-text--MarginLeft)}.pf-c-expandable-section__content{margin-top:var(--pf-c-expandable-section__content--MarginTop);max-width:var(--pf-c-expandable-section__content--MaxWidth);padding-bottom:var(--pf-c-expandable-section__content--PaddingBottom);padding-left:var(--pf-c-expandable-section__content--PaddingLeft);padding-right:var(--pf-c-expandable-section__content--PaddingRight)}.pf-m-overpass-font .pf-c-expandable-section__toggle{font-weight:var(--pf-global--FontWeight--semi-bold)}.pf-c-progress{--pf-c-progress--GridGap:var(--pf-global--spacer--md);--pf-c-progress__bar--before--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-progress__bar--Height:var(--pf-global--spacer--md);--pf-c-progress__bar--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-progress__measure--m-static-width--MinWidth:4.5ch;--pf-c-progress__status-icon--Color:var(--pf-global--Color--100);--pf-c-progress__status-icon--MarginLeft:var(--pf-global--spacer--sm);--pf-c-progress__bar--before--Opacity:.2;--pf-c-progress__indicator--Height:var(--pf-c-progress__bar--Height);--pf-c-progress__indicator--BackgroundColor:var(--pf-c-progress__bar--before--BackgroundColor);--pf-c-progress__helper-text--MarginTop:calc(var(--pf-global--spacer--xs) - var(--pf-c-progress--GridGap));--pf-c-progress--m-success__bar--BackgroundColor:var(--pf-global--success-color--100);--pf-c-progress--m-warning__bar--BackgroundColor:var(--pf-global--warning-color--100);--pf-c-progress--m-danger__bar--BackgroundColor:var(--pf-global--danger-color--100);--pf-c-progress--m-success__status-icon--Color:var(--pf-global--success-color--100);--pf-c-progress--m-warning__status-icon--Color:var(--pf-global--warning-color--100);--pf-c-progress--m-danger__status-icon--Color:var(--pf-global--danger-color--100);--pf-c-progress--m-inside__indicator--MinWidth:var(--pf-global--spacer--xl);--pf-c-progress--m-inside__measure--Color:var(--pf-global--Color--light-100);--pf-c-progress--m-success--m-inside__measure--Color:var(--pf-global--Color--light-100);--pf-c-progress--m-warning--m-inside__measure--Color:var(--pf-global--Color--dark-100);--pf-c-progress--m-inside__measure--FontSize:var(--pf-global--FontSize--sm);--pf-c-progress--m-outside__measure--FontSize:var(--pf-global--FontSize--sm);--pf-c-progress--m-sm__bar--Height:var(--pf-global--spacer--sm);--pf-c-progress--m-sm__description--FontSize:var(--pf-global--FontSize--sm);--pf-c-progress--m-sm__measure--FontSize:var(--pf-global--FontSize--sm);--pf-c-progress--m-lg__bar--Height:var(--pf-global--spacer--lg);grid-gap:var(--pf-c-progress--GridGap);align-items:end;display:grid;grid-template-columns:auto auto;grid-template-rows:1fr auto}.pf-c-progress.pf-m-sm{--pf-c-progress__bar--Height:var(--pf-c-progress--m-sm__bar--Height)}.pf-c-progress.pf-m-sm .pf-c-progress__description{font-size:var(--pf-c-progress--m-sm__description--FontSize)}.pf-c-progress.pf-m-sm .pf-c-progress__measure{font-size:var(--pf-c-progress--m-sm__measure--FontSize)}.pf-c-progress.pf-m-lg{--pf-c-progress__bar--Height:var(--pf-c-progress--m-lg__bar--Height)}.pf-c-progress.pf-m-inside .pf-c-progress__indicator{align-items:center;display:flex;justify-content:center;min-width:var(--pf-c-progress--m-inside__indicator--MinWidth)}.pf-c-progress.pf-m-inside .pf-c-progress__measure{color:var(--pf-c-progress--m-inside__measure--Color);font-size:var(--pf-c-progress--m-inside__measure--FontSize);text-align:center}.pf-c-progress.pf-m-outside .pf-c-progress__description{grid-column:1/3}.pf-c-progress.pf-m-outside .pf-c-progress__status{align-self:center;grid-column:2/3;grid-row:2/3}.pf-c-progress.pf-m-outside .pf-c-progress__measure{display:inline-block;font-size:var(--pf-c-progress--m-outside__measure--FontSize)}.pf-c-progress.pf-m-outside .pf-c-progress__measure.pf-m-static-width{min-width:var(--pf-c-progress__measure--m-static-width--MinWidth);text-align:left}.pf-c-progress.pf-m-outside .pf-c-progress__bar,.pf-c-progress.pf-m-outside .pf-c-progress__indicator{grid-column:1/2}.pf-c-progress.pf-m-singleline{grid-template-rows:1fr}.pf-c-progress.pf-m-singleline .pf-c-progress__description{display:none;visibility:hidden}.pf-c-progress.pf-m-singleline .pf-c-progress__bar{grid-column:1/2;grid-row:1/2}.pf-c-progress.pf-m-singleline .pf-c-progress__status{grid-column:2/3;grid-row:1/2}.pf-c-progress.pf-m-outside,.pf-c-progress.pf-m-singleline{grid-template-columns:1fr fit-content(50%)}.pf-c-progress.pf-m-success{--pf-c-progress__bar--before--BackgroundColor:var(--pf-c-progress--m-success__bar--BackgroundColor);--pf-c-progress__status-icon--Color:var(--pf-c-progress--m-success__status-icon--Color);--pf-c-progress--m-inside__measure--Color:var(--pf-c-progress--m-success--m-inside__measure--Color)}.pf-c-progress.pf-m-warning{--pf-c-progress__bar--before--BackgroundColor:var(--pf-c-progress--m-warning__bar--BackgroundColor);--pf-c-progress__status-icon--Color:var(--pf-c-progress--m-warning__status-icon--Color);--pf-c-progress--m-inside__measure--Color:var(--pf-c-progress--m-warning--m-inside__measure--Color)}.pf-c-progress.pf-m-danger{--pf-c-progress__bar--before--BackgroundColor:var(--pf-c-progress--m-danger__bar--BackgroundColor);--pf-c-progress__status-icon--Color:var(--pf-c-progress--m-danger__status-icon--Color)}.pf-c-progress__description{grid-column:1/2;word-break:break-word}.pf-c-progress__description.pf-m-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-progress__status{grid-column:2/3;grid-row:1/2;text-align:right;word-break:break-word}.pf-c-progress__status-icon{color:var(--pf-c-progress__status-icon--Color);margin-left:var(--pf-c-progress__status-icon--MarginLeft)}.pf-c-progress__bar{align-self:center;background-color:var(--pf-c-progress__bar--BackgroundColor);grid-column:1/3;grid-row:2/3;height:var(--pf-c-progress__bar--Height);position:relative}.pf-c-progress__bar:before{background-color:var(--pf-c-progress__bar--before--BackgroundColor);content:"";height:100%;left:0;opacity:var(--pf-c-progress__bar--before--Opacity);position:absolute;top:0;width:100%}.pf-c-progress__indicator{background-color:var(--pf-c-progress__indicator--BackgroundColor);height:var(--pf-c-progress__indicator--Height);left:0;position:absolute;top:0}.pf-c-progress__helper-text{grid-column:1/3;grid-row:3/4;margin-top:var(--pf-c-progress__helper-text--MarginTop)}:where(.pf-theme-dark) .pf-c-progress{--pf-c-progress--m-inside__measure--Color:var(--pf-global--palette--black-900);--pf-c-progress--m-success--m-inside__measure--Color:var(--pf-global--palette--black-900);--pf-c-progress--m-warning--m-inside__measure--Color:var(--pf-global--palette--black-900)}.pf-c-table{--pf-c-table__sticky-column--cell-min-width--base:12.5rem;--pf-c-table__sticky-column--MinWidth:var(--pf-c-table__sticky-column--cell-min-width--base);--pf-c-table__sticky-column--Left:0;--pf-c-table__sticky-column--ZIndex:var(--pf-global--ZIndex--md);--pf-c-table__sticky-column--Top:0;--pf-c-table__sticky-column--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table__sticky-column--m-border-right--before--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-table__sticky-column--m-border-right--before--BorderRightColor:var(--pf-global--BorderColor--100);--pf-c-table__sticky-column--m-border-left--before--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-table__sticky-column--m-border-left--before--BorderLeftColor:var(--pf-global--BorderColor--100);--pf-c-table--m-sticky-header--thead__sticky-column--ZIndex:calc(var(--pf-c-table__sticky-column--ZIndex) + 1)}.pf-c-table .pf-c-table__sticky-column{background-clip:padding-box;background-color:var(--pf-c-table__sticky-column--BackgroundColor);left:var(--pf-c-table__sticky-column--Left);min-width:var(--pf-c-table__sticky-column--MinWidth);position:sticky;z-index:var(--pf-c-table__sticky-column--ZIndex)}.pf-c-table .pf-c-table__sticky-column.pf-m-border-right:before{--pf-c-table--cell--m-border-right--before--BorderRightWidth:var(--pf-c-table__sticky-column--m-border-right--before--BorderRightWidth);--pf-c-table--cell--m-border-right--before--BorderRightColor:var(--pf-c-table__sticky-column--m-border-right--before--BorderRightColor)}.pf-c-table .pf-c-table__sticky-column.pf-m-border-left:before{--pf-c-table--cell--m-border-left--before--BorderLeftWidth:var(--pf-c-table__sticky-column--m-border-left--before--BorderLeftWidth);--pf-c-table--cell--m-border-left--before--BorderLeftColor:var(--pf-c-table__sticky-column--m-border-left--before--BorderLeftColor)}.pf-c-table.pf-m-sticky-header{--pf-c-table--cell--Overflow:visible}.pf-c-table.pf-m-sticky-header thead .pf-c-table__sticky-column{z-index:var(--pf-c-table--m-sticky-header--thead__sticky-column--ZIndex)}.pf-c-scroll-outer-wrapper{--pf-c-scroll-outer-wrapper--MinHeight:25rem;--pf-c-scroll-outer-wrapper--MaxHeight:100%;display:flex;flex-direction:column;max-height:var(--pf-c-scroll-outer-wrapper--MaxHeight);max-width:100%;min-height:var(--pf-c-scroll-outer-wrapper--MinHeight);overflow:hidden}.pf-c-scroll-inner-wrapper{display:flex;flex-direction:column;max-height:100%;max-width:100%;overflow:auto}.pf-c-table[class*=pf-m-grid]{--pf-c-table--responsive--BorderColor:var(--pf-global--BorderColor--300);--pf-c-table--tbody--responsive--border-width--base:var(--pf-global--spacer--sm);--pf-c-table--tbody--after--border-width--base:var(--pf-global--BorderWidth--lg);--pf-c-table--tbody--after--BorderLeftWidth:0;--pf-c-table--tbody--after--BorderColor:var(--pf-global--active-color--100);--pf-c-table-tr--responsive--border-width--base:var(--pf-global--spacer--sm);--pf-c-table-tr--responsive--last-child--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-table-tr--responsive--GridColumnGap:var(--pf-global--spacer--md);--pf-c-table-tr--responsive--MarginTop:var(--pf-global--spacer--sm);--pf-c-table-tr--responsive--PaddingTop:var(--pf-global--spacer--md);--pf-c-table-tr--responsive--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table-tr--responsive--xl--PaddingRight:var(--pf-global--spacer--md);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table-tr--responsive--xl--PaddingLeft:var(--pf-global--spacer--md);--pf-c-table-tr--responsive--nested-table--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table-tr--responsive--nested-table--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table-tr--responsive--nested-table--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-table-tr--responsive--nested-table--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table--tbody--after--tr--BorderLeftWidth:0;--pf-c-table--tbody--after--tr--BorderLeftColor:transparent;--pf-c-table--tbody--m-expanded--after--tr--BorderLeftWidth:var(--pf-c-table__expandable-row--after--border-width--base);--pf-c-table--tbody--m-expanded--after--tr--BorderLeftColor:var(--pf-global--active-color--400);--pf-c-table--tbody--m-selected--after--tr--BorderLeftWidth:var(--pf-c-table__expandable-row--after--border-width--base);--pf-c-table--tbody--m-selected--after--tr--BorderLeftColor:var(--pf-global--active-color--100);--pf-c-table--m-grid--cell--hidden-visible--Display:grid;--pf-c-table--m-grid--cell--PaddingTop:0;--pf-c-table--m-grid--cell--PaddingRight:0;--pf-c-table--m-grid--cell--PaddingBottom:0;--pf-c-table--m-grid--cell--PaddingLeft:0;--pf-c-table-td--responsive--GridColumnGap:var(--pf-global--spacer--md);--pf-c-table--cell--responsive--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--cell--responsive--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-table--cell--first-child--responsive--PaddingTop:var(--pf-global--spacer--sm);--pf-c-table--cell--responsive--PaddingRight:0;--pf-c-table--cell--responsive--PaddingLeft:0;--pf-c-table--m-compact-tr--responsive--PaddingTop:var(--pf-global--spacer--sm);--pf-c-table--m-compact-tr--responsive--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-table--m-compact-tr-td--responsive--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--m-compact-tr-td--responsive--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table--m-compact__action--responsive--MarginTop:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-compact__action--responsive--MarginBottom:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom:-0.375rem;--pf-c-table__expandable-row-content--responsive--PaddingRight:var(--pf-global--spacer--lg);--pf-c-table__expandable-row-content--responsive--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-table__expandable-row-content--responsive--xl--PaddingRight:var(--pf-global--spacer--md);--pf-c-table__expandable-row-content--responsive--xl--PaddingLeft:var(--pf-global--spacer--md);--pf-c-table__expandable-row-content--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-table__check--responsive--MarginLeft:var(--pf-global--spacer--sm);--pf-c-table__check--responsive--MarginTop:0.875rem;--pf-c-table--m-grid__favorite--MarginTop:0.5rem;--pf-c-table--m-grid__check--favorite--MarginLeft:var(--pf-global--spacer--xl);--pf-c-table--m-grid__action--MarginTop:0.375rem;--pf-c-table__action--responsive--MarginLeft:var(--pf-global--spacer--xl);--pf-c-table--m-grid__favorite--action--MarginLeft:var(--pf-global--spacer--2xl);--pf-c-table--m-grid__check--favorite--action--MarginLeft:calc(var(--pf-c-table--m-grid__check--favorite--MarginLeft) + var(--pf-c-table--m-grid__favorite--action--MarginLeft));--pf-c-table__toggle__icon--Transition:.2s ease-in 0s;--pf-c-table__toggle--m-expanded__icon--Rotate:180deg}@media screen and (max-width:1200px){.pf-c-table[class*=pf-m-grid]{--pf-c-table-tr--responsive--PaddingRight:var(--pf-c-table-tr--responsive--xl--PaddingRight);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-c-table-tr--responsive--xl--PaddingLeft);--pf-c-table__expandable-row-content--responsive--PaddingRight:var(--pf-c-table__expandable-row-content--responsive--xl--PaddingRight);--pf-c-table__expandable-row-content--responsive--PaddingLeft:var(--pf-c-table__expandable-row-content--responsive--xl--PaddingLeft)}}.pf-m-grid.pf-c-table{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft);--pf-c-table__favorite--c-button--MarginTop:auto;--pf-c-table__favorite--c-button--MarginRight:auto;--pf-c-table__favorite--c-button--MarginBottom:auto;--pf-c-table__favorite--c-button--MarginLeft:auto;border:none;display:grid}.pf-m-grid.pf-c-table tr>*{max-width:none;min-width:0;overflow:visible;text-overflow:clip;white-space:normal;width:auto}.pf-m-grid.pf-c-table .pf-c-table__text{max-width:none;min-width:0;overflow:var(--pf-c-table--cell--Overflow);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:auto}.pf-m-grid.pf-c-table thead{display:none;visibility:hidden}.pf-m-grid.pf-c-table tbody{display:block}.pf-m-grid.pf-c-table tbody:first-of-type{border-top:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid.pf-c-table table.pf-m-compact>tbody{border-top:0}.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row){border-bottom:var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid.pf-c-table tbody:last-of-type:not(:only-of-type)>tr,.pf-m-grid.pf-c-table tr:last-child{border-bottom-width:var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth)}.pf-m-grid.pf-c-table tbody.pf-m-expanded{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-m-grid.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row){border-bottom:0}.pf-m-grid.pf-c-table tbody.pf-m-expanded:not(:last-of-type){border-bottom:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid.pf-c-table tr.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:0;--pf-c-table__expandable-row--after--BorderColor:transparent}.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row){grid-column-gap:var(--pf-c-table-tr--responsive--GridColumnGap);display:grid;grid-auto-columns:max-content;grid-template-columns:1fr;height:auto;padding:var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft)}.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row)>*{padding:var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft)}.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row)>:first-child{--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--cell--first-child--responsive--PaddingTop)}.pf-m-grid.pf-c-table.pf-m-compact{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table--m-compact-tr--responsive--PaddingTop);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);--pf-c-table--cell--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);--pf-c-table__check--input--MarginTop:0}.pf-m-grid.pf-c-table.pf-m-compact .pf-c-table__action{margin-bottom:var(--pf-c-table--m-compact__action--responsive--MarginTop);margin-top:var(--pf-c-table--m-compact__action--responsive--MarginTop)}.pf-m-grid.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button{margin-bottom:var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom)}.pf-m-grid.pf-c-table .pf-c-table__icon>*{text-align:left}.pf-m-grid.pf-c-table [data-label]{--pf-c-table--cell--hidden-visible--Display:var(--pf-c-table--m-grid--cell--hidden-visible--Display);grid-column-gap:var(--pf-c-table-td--responsive--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:1fr minmax(0,1.5fr)}.pf-m-grid.pf-c-table [data-label]>*{grid-column:2}.pf-m-grid.pf-c-table [data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-grid.pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:0}.pf-m-grid.pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:0}.pf-m-grid.pf-c-table .pf-c-table{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table-tr--responsive--nested-table--PaddingTop);--pf-c-table-tr--responsive--PaddingRight:var(--pf-c-table-tr--responsive--nested-table--PaddingRight);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);border:0}.pf-m-grid.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row)+tr:not(.pf-c-table__expandable-row){--pf-c-table-tr--responsive--PaddingTop:0}.pf-m-grid.pf-c-table .pf-c-table__compound-expansion-toggle{--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:0;--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0;--pf-c-table__compound-expansion-toggle__button--after--Top:100%}.pf-m-grid.pf-c-table tbody{position:relative}.pf-m-grid.pf-c-table tbody:after{border:0;border-left:var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor);bottom:0;content:"";left:0;position:absolute;top:0}.pf-m-grid.pf-c-table tbody.pf-m-expanded{--pf-c-table--tbody--after--BorderLeftWidth:var(--pf-c-table--tbody--after--border-width--base)}.pf-m-grid.pf-c-table tbody.pf-m-expanded tbody{--pf-c-table--tbody--after--BorderLeftWidth:0}.pf-m-grid.pf-c-table tbody>tr>:first-child:not(.pf-c-table__check):after{--pf-c-table__expandable-row--after--BorderLeftWidth:0;background-color:transparent;position:static;width:auto}.pf-m-grid.pf-c-table .pf-c-table__expandable-row{--pf-c-table--cell--responsive--PaddingTop:0;--pf-c-table--cell--responsive--PaddingRight:0;--pf-c-table--cell--responsive--PaddingBottom:0;--pf-c-table--cell--responsive--PaddingLeft:0;--pf-c-table--cell--PaddingRight:0;--pf-c-table--cell--PaddingLeft:0;border-bottom:none;box-shadow:none;display:block;max-height:var(--pf-c-table__expandable-row--MaxHeight);overflow-y:auto}.pf-m-grid.pf-c-table .pf-c-table__expandable-row>*{display:block;position:static}.pf-m-grid.pf-c-table .pf-c-table__expandable-row.pf-m-expanded{border-top-color:var(--pf-c-table--BorderColor)}.pf-m-grid.pf-c-table .pf-c-table__expandable-row>:first-child:not(.pf-c-table__check):after{content:none}.pf-m-grid.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,.pf-m-grid.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content{padding:0}.pf-m-grid.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded){display:none;visibility:hidden}.pf-m-grid.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content{padding-left:var(--pf-c-table__expandable-row-content--responsive--PaddingLeft);padding-right:var(--pf-c-table__expandable-row-content--responsive--PaddingRight)}.pf-m-grid.pf-c-table tbody.pf-m-hoverable{--pf-c-table--tbody--after--BorderLeftWidth:0;--pf-c-table--tbody--after--BorderLeftColor:transparent}.pf-m-grid.pf-c-table tbody.pf-m-hoverable,.pf-m-grid.pf-c-table tbody.pf-m-hoverable>tr{position:relative}.pf-m-grid.pf-c-table tbody.pf-m-hoverable>tr:after{background-color:var(--pf-c-table--tbody--after--tr--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tbody--after--tr--BorderLeftWidth)}.pf-m-grid.pf-c-table tbody.pf-m-hoverable.pf-m-expanded{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftColor)}.pf-m-grid.pf-c-table tbody.pf-m-hoverable.pf-m-selected{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftColor)}.pf-m-grid.pf-c-table tr.pf-m-selected:after{background-color:var(--pf-c-table--tr--m-selected--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tr--m-selected--after--BorderLeftWidth)}.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action,.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,.pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle{padding:0;width:auto}.pf-m-grid.pf-c-table .pf-c-table__toggle{grid-column:-1;grid-row-start:20;justify-self:end;padding-right:0}.pf-m-grid.pf-c-table .pf-c-table__toggle:after{content:none}.pf-m-grid.pf-c-table .pf-c-table__button{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft)}.pf-m-grid.pf-c-table .pf-c-table__action,.pf-m-grid.pf-c-table .pf-c-table__check,.pf-m-grid.pf-c-table .pf-c-table__favorite{grid-column-start:2;grid-row-start:1}.pf-m-grid.pf-c-table .pf-c-table__check{margin-left:var(--pf-c-table__check--responsive--MarginLeft);margin-top:var(--pf-c-table__check--responsive--MarginTop)}.pf-m-grid.pf-c-table .pf-c-table__check~.pf-c-table__favorite{margin-left:var(--pf-c-table--m-grid__check--favorite--MarginLeft)}.pf-m-grid.pf-c-table .pf-c-table__check~.pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__check--favorite--action--MarginLeft)}.pf-m-grid.pf-c-table .pf-c-table__check~.pf-c-table__action{margin-left:var(--pf-c-table__action--responsive--MarginLeft)}.pf-m-grid.pf-c-table .pf-c-table__favorite{margin-top:var(--pf-c-table--m-grid__favorite--MarginTop)}.pf-m-grid.pf-c-table .pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__favorite--action--MarginLeft)}.pf-m-grid.pf-c-table .pf-c-table__action{margin-top:var(--pf-c-table--m-grid__action--MarginTop);text-align:right}@media screen and (max-width:576px){.pf-m-grid.pf-c-table .pf-c-table__action{grid-column-start:2;grid-row-start:1;margin-left:0}}.pf-m-grid.pf-c-table .pf-c-table__inline-edit-action{grid-column:2;grid-row:2}.pf-m-grid.pf-c-table .pf-c-table__toggle-icon{transition:var(--pf-c-table__toggle__icon--Transition)}.pf-c-button.pf-m-expanded>.pf-m-grid.pf-c-table .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate))}.pf-m-grid.pf-c-table .pf-m-nowrap{--pf-c-table--cell--Overflow:auto}.pf-m-grid.pf-c-table .pf-m-fit-content{white-space:normal;width:auto}.pf-m-grid.pf-c-table .pf-m-truncate{--pf-c-table--cell--MaxWidth:100%}.pf-m-grid.pf-c-table [class*=pf-m-width]{--pf-c-table--cell--Width:auto}@media screen and (max-width:768px){.pf-m-grid-md.pf-c-table{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft);--pf-c-table__favorite--c-button--MarginTop:auto;--pf-c-table__favorite--c-button--MarginRight:auto;--pf-c-table__favorite--c-button--MarginBottom:auto;--pf-c-table__favorite--c-button--MarginLeft:auto;border:none;display:grid}.pf-m-grid-md.pf-c-table tr>*{max-width:none;min-width:0;overflow:visible;text-overflow:clip;white-space:normal;width:auto}.pf-m-grid-md.pf-c-table .pf-c-table__text{max-width:none;min-width:0;overflow:var(--pf-c-table--cell--Overflow);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:auto}.pf-m-grid-md.pf-c-table thead{display:none;visibility:hidden}.pf-m-grid-md.pf-c-table tbody{display:block}.pf-m-grid-md.pf-c-table tbody:first-of-type{border-top:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-md.pf-c-table table.pf-m-compact>tbody{border-top:0}.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row){border-bottom:var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-md.pf-c-table tbody:last-of-type:not(:only-of-type)>tr,.pf-m-grid-md.pf-c-table tr:last-child{border-bottom-width:var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth)}.pf-m-grid-md.pf-c-table tbody.pf-m-expanded{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-m-grid-md.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row){border-bottom:0}.pf-m-grid-md.pf-c-table tbody.pf-m-expanded:not(:last-of-type){border-bottom:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-md.pf-c-table tr.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:0;--pf-c-table__expandable-row--after--BorderColor:transparent}.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row){grid-column-gap:var(--pf-c-table-tr--responsive--GridColumnGap);display:grid;grid-auto-columns:max-content;grid-template-columns:1fr;height:auto;padding:var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft)}.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row)>*{padding:var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft)}.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row)>:first-child{--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--cell--first-child--responsive--PaddingTop)}.pf-m-grid-md.pf-c-table.pf-m-compact{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table--m-compact-tr--responsive--PaddingTop);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);--pf-c-table--cell--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);--pf-c-table__check--input--MarginTop:0}.pf-m-grid-md.pf-c-table.pf-m-compact .pf-c-table__action{margin-bottom:var(--pf-c-table--m-compact__action--responsive--MarginTop);margin-top:var(--pf-c-table--m-compact__action--responsive--MarginTop)}.pf-m-grid-md.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button{margin-bottom:var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom)}.pf-m-grid-md.pf-c-table .pf-c-table__icon>*{text-align:left}.pf-m-grid-md.pf-c-table [data-label]{--pf-c-table--cell--hidden-visible--Display:var(--pf-c-table--m-grid--cell--hidden-visible--Display);grid-column-gap:var(--pf-c-table-td--responsive--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:1fr minmax(0,1.5fr)}.pf-m-grid-md.pf-c-table [data-label]>*{grid-column:2}.pf-m-grid-md.pf-c-table [data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-grid-md.pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:0}.pf-m-grid-md.pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:0}.pf-m-grid-md.pf-c-table .pf-c-table{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table-tr--responsive--nested-table--PaddingTop);--pf-c-table-tr--responsive--PaddingRight:var(--pf-c-table-tr--responsive--nested-table--PaddingRight);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);border:0}.pf-m-grid-md.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row)+tr:not(.pf-c-table__expandable-row){--pf-c-table-tr--responsive--PaddingTop:0}.pf-m-grid-md.pf-c-table .pf-c-table__compound-expansion-toggle{--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:0;--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0;--pf-c-table__compound-expansion-toggle__button--after--Top:100%}.pf-m-grid-md.pf-c-table tbody{position:relative}.pf-m-grid-md.pf-c-table tbody:after{border:0;border-left:var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor);bottom:0;content:"";left:0;position:absolute;top:0}.pf-m-grid-md.pf-c-table tbody.pf-m-expanded{--pf-c-table--tbody--after--BorderLeftWidth:var(--pf-c-table--tbody--after--border-width--base)}.pf-m-grid-md.pf-c-table tbody.pf-m-expanded tbody{--pf-c-table--tbody--after--BorderLeftWidth:0}.pf-m-grid-md.pf-c-table tbody>tr>:first-child:not(.pf-c-table__check):after{--pf-c-table__expandable-row--after--BorderLeftWidth:0;background-color:transparent;position:static;width:auto}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row{--pf-c-table--cell--responsive--PaddingTop:0;--pf-c-table--cell--responsive--PaddingRight:0;--pf-c-table--cell--responsive--PaddingBottom:0;--pf-c-table--cell--responsive--PaddingLeft:0;--pf-c-table--cell--PaddingRight:0;--pf-c-table--cell--PaddingLeft:0;border-bottom:none;box-shadow:none;display:block;max-height:var(--pf-c-table__expandable-row--MaxHeight);overflow-y:auto}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row>*{display:block;position:static}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row.pf-m-expanded{border-top-color:var(--pf-c-table--BorderColor)}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row>:first-child:not(.pf-c-table__check):after{content:none}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content{padding:0}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded){display:none;visibility:hidden}.pf-m-grid-md.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content{padding-left:var(--pf-c-table__expandable-row-content--responsive--PaddingLeft);padding-right:var(--pf-c-table__expandable-row-content--responsive--PaddingRight)}.pf-m-grid-md.pf-c-table tbody.pf-m-hoverable{--pf-c-table--tbody--after--BorderLeftWidth:0;--pf-c-table--tbody--after--BorderLeftColor:transparent}.pf-m-grid-md.pf-c-table tbody.pf-m-hoverable,.pf-m-grid-md.pf-c-table tbody.pf-m-hoverable>tr{position:relative}.pf-m-grid-md.pf-c-table tbody.pf-m-hoverable>tr:after{background-color:var(--pf-c-table--tbody--after--tr--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tbody--after--tr--BorderLeftWidth)}.pf-m-grid-md.pf-c-table tbody.pf-m-hoverable.pf-m-expanded{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftColor)}.pf-m-grid-md.pf-c-table tbody.pf-m-hoverable.pf-m-selected{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftColor)}.pf-m-grid-md.pf-c-table tr.pf-m-selected:after{background-color:var(--pf-c-table--tr--m-selected--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tr--m-selected--after--BorderLeftWidth)}.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action,.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,.pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle{padding:0;width:auto}.pf-m-grid-md.pf-c-table .pf-c-table__toggle{grid-column:-1;grid-row-start:20;justify-self:end;padding-right:0}.pf-m-grid-md.pf-c-table .pf-c-table__toggle:after{content:none}.pf-m-grid-md.pf-c-table .pf-c-table__button{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft)}.pf-m-grid-md.pf-c-table .pf-c-table__action,.pf-m-grid-md.pf-c-table .pf-c-table__check,.pf-m-grid-md.pf-c-table .pf-c-table__favorite{grid-column-start:2;grid-row-start:1}.pf-m-grid-md.pf-c-table .pf-c-table__check{margin-left:var(--pf-c-table__check--responsive--MarginLeft);margin-top:var(--pf-c-table__check--responsive--MarginTop)}.pf-m-grid-md.pf-c-table .pf-c-table__check~.pf-c-table__favorite{margin-left:var(--pf-c-table--m-grid__check--favorite--MarginLeft)}.pf-m-grid-md.pf-c-table .pf-c-table__check~.pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__check--favorite--action--MarginLeft)}.pf-m-grid-md.pf-c-table .pf-c-table__check~.pf-c-table__action{margin-left:var(--pf-c-table__action--responsive--MarginLeft)}.pf-m-grid-md.pf-c-table .pf-c-table__favorite{margin-top:var(--pf-c-table--m-grid__favorite--MarginTop)}.pf-m-grid-md.pf-c-table .pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__favorite--action--MarginLeft)}.pf-m-grid-md.pf-c-table .pf-c-table__action{margin-top:var(--pf-c-table--m-grid__action--MarginTop);text-align:right}}@media screen and (max-width:768px) and (max-width:576px){.pf-m-grid-md.pf-c-table .pf-c-table__action{grid-column-start:2;grid-row-start:1;margin-left:0}}@media screen and (max-width:768px){.pf-m-grid-md.pf-c-table .pf-c-table__inline-edit-action{grid-column:2;grid-row:2}.pf-m-grid-md.pf-c-table .pf-c-table__toggle-icon{transition:var(--pf-c-table__toggle__icon--Transition)}.pf-c-button.pf-m-expanded>.pf-m-grid-md.pf-c-table .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate))}.pf-m-grid-md.pf-c-table .pf-m-nowrap{--pf-c-table--cell--Overflow:auto}.pf-m-grid-md.pf-c-table .pf-m-fit-content{white-space:normal;width:auto}.pf-m-grid-md.pf-c-table .pf-m-truncate{--pf-c-table--cell--MaxWidth:100%}.pf-m-grid-md.pf-c-table [class*=pf-m-width]{--pf-c-table--cell--Width:auto}}@media screen and (max-width:992px){.pf-m-grid-lg.pf-c-table{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft);--pf-c-table__favorite--c-button--MarginTop:auto;--pf-c-table__favorite--c-button--MarginRight:auto;--pf-c-table__favorite--c-button--MarginBottom:auto;--pf-c-table__favorite--c-button--MarginLeft:auto;border:none;display:grid}.pf-m-grid-lg.pf-c-table tr>*{max-width:none;min-width:0;overflow:visible;text-overflow:clip;white-space:normal;width:auto}.pf-m-grid-lg.pf-c-table .pf-c-table__text{max-width:none;min-width:0;overflow:var(--pf-c-table--cell--Overflow);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:auto}.pf-m-grid-lg.pf-c-table thead{display:none;visibility:hidden}.pf-m-grid-lg.pf-c-table tbody{display:block}.pf-m-grid-lg.pf-c-table tbody:first-of-type{border-top:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-lg.pf-c-table table.pf-m-compact>tbody{border-top:0}.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row){border-bottom:var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-lg.pf-c-table tbody:last-of-type:not(:only-of-type)>tr,.pf-m-grid-lg.pf-c-table tr:last-child{border-bottom-width:var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth)}.pf-m-grid-lg.pf-c-table tbody.pf-m-expanded{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-m-grid-lg.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row){border-bottom:0}.pf-m-grid-lg.pf-c-table tbody.pf-m-expanded:not(:last-of-type){border-bottom:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-lg.pf-c-table tr.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:0;--pf-c-table__expandable-row--after--BorderColor:transparent}.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row){grid-column-gap:var(--pf-c-table-tr--responsive--GridColumnGap);display:grid;grid-auto-columns:max-content;grid-template-columns:1fr;height:auto;padding:var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft)}.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row)>*{padding:var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft)}.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row)>:first-child{--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--cell--first-child--responsive--PaddingTop)}.pf-m-grid-lg.pf-c-table.pf-m-compact{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table--m-compact-tr--responsive--PaddingTop);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);--pf-c-table--cell--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);--pf-c-table__check--input--MarginTop:0}.pf-m-grid-lg.pf-c-table.pf-m-compact .pf-c-table__action{margin-bottom:var(--pf-c-table--m-compact__action--responsive--MarginTop);margin-top:var(--pf-c-table--m-compact__action--responsive--MarginTop)}.pf-m-grid-lg.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button{margin-bottom:var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom)}.pf-m-grid-lg.pf-c-table .pf-c-table__icon>*{text-align:left}.pf-m-grid-lg.pf-c-table [data-label]{--pf-c-table--cell--hidden-visible--Display:var(--pf-c-table--m-grid--cell--hidden-visible--Display);grid-column-gap:var(--pf-c-table-td--responsive--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:1fr minmax(0,1.5fr)}.pf-m-grid-lg.pf-c-table [data-label]>*{grid-column:2}.pf-m-grid-lg.pf-c-table [data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-grid-lg.pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:0}.pf-m-grid-lg.pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:0}.pf-m-grid-lg.pf-c-table .pf-c-table{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table-tr--responsive--nested-table--PaddingTop);--pf-c-table-tr--responsive--PaddingRight:var(--pf-c-table-tr--responsive--nested-table--PaddingRight);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);border:0}.pf-m-grid-lg.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row)+tr:not(.pf-c-table__expandable-row){--pf-c-table-tr--responsive--PaddingTop:0}.pf-m-grid-lg.pf-c-table .pf-c-table__compound-expansion-toggle{--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:0;--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0;--pf-c-table__compound-expansion-toggle__button--after--Top:100%}.pf-m-grid-lg.pf-c-table tbody{position:relative}.pf-m-grid-lg.pf-c-table tbody:after{border:0;border-left:var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor);bottom:0;content:"";left:0;position:absolute;top:0}.pf-m-grid-lg.pf-c-table tbody.pf-m-expanded{--pf-c-table--tbody--after--BorderLeftWidth:var(--pf-c-table--tbody--after--border-width--base)}.pf-m-grid-lg.pf-c-table tbody.pf-m-expanded tbody{--pf-c-table--tbody--after--BorderLeftWidth:0}.pf-m-grid-lg.pf-c-table tbody>tr>:first-child:not(.pf-c-table__check):after{--pf-c-table__expandable-row--after--BorderLeftWidth:0;background-color:transparent;position:static;width:auto}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row{--pf-c-table--cell--responsive--PaddingTop:0;--pf-c-table--cell--responsive--PaddingRight:0;--pf-c-table--cell--responsive--PaddingBottom:0;--pf-c-table--cell--responsive--PaddingLeft:0;--pf-c-table--cell--PaddingRight:0;--pf-c-table--cell--PaddingLeft:0;border-bottom:none;box-shadow:none;display:block;max-height:var(--pf-c-table__expandable-row--MaxHeight);overflow-y:auto}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row>*{display:block;position:static}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row.pf-m-expanded{border-top-color:var(--pf-c-table--BorderColor)}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row>:first-child:not(.pf-c-table__check):after{content:none}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content{padding:0}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded){display:none;visibility:hidden}.pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content{padding-left:var(--pf-c-table__expandable-row-content--responsive--PaddingLeft);padding-right:var(--pf-c-table__expandable-row-content--responsive--PaddingRight)}.pf-m-grid-lg.pf-c-table tbody.pf-m-hoverable{--pf-c-table--tbody--after--BorderLeftWidth:0;--pf-c-table--tbody--after--BorderLeftColor:transparent}.pf-m-grid-lg.pf-c-table tbody.pf-m-hoverable,.pf-m-grid-lg.pf-c-table tbody.pf-m-hoverable>tr{position:relative}.pf-m-grid-lg.pf-c-table tbody.pf-m-hoverable>tr:after{background-color:var(--pf-c-table--tbody--after--tr--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tbody--after--tr--BorderLeftWidth)}.pf-m-grid-lg.pf-c-table tbody.pf-m-hoverable.pf-m-expanded{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftColor)}.pf-m-grid-lg.pf-c-table tbody.pf-m-hoverable.pf-m-selected{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftColor)}.pf-m-grid-lg.pf-c-table tr.pf-m-selected:after{background-color:var(--pf-c-table--tr--m-selected--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tr--m-selected--after--BorderLeftWidth)}.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action,.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,.pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle{padding:0;width:auto}.pf-m-grid-lg.pf-c-table .pf-c-table__toggle{grid-column:-1;grid-row-start:20;justify-self:end;padding-right:0}.pf-m-grid-lg.pf-c-table .pf-c-table__toggle:after{content:none}.pf-m-grid-lg.pf-c-table .pf-c-table__button{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft)}.pf-m-grid-lg.pf-c-table .pf-c-table__action,.pf-m-grid-lg.pf-c-table .pf-c-table__check,.pf-m-grid-lg.pf-c-table .pf-c-table__favorite{grid-column-start:2;grid-row-start:1}.pf-m-grid-lg.pf-c-table .pf-c-table__check{margin-left:var(--pf-c-table__check--responsive--MarginLeft);margin-top:var(--pf-c-table__check--responsive--MarginTop)}.pf-m-grid-lg.pf-c-table .pf-c-table__check~.pf-c-table__favorite{margin-left:var(--pf-c-table--m-grid__check--favorite--MarginLeft)}.pf-m-grid-lg.pf-c-table .pf-c-table__check~.pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__check--favorite--action--MarginLeft)}.pf-m-grid-lg.pf-c-table .pf-c-table__check~.pf-c-table__action{margin-left:var(--pf-c-table__action--responsive--MarginLeft)}.pf-m-grid-lg.pf-c-table .pf-c-table__favorite{margin-top:var(--pf-c-table--m-grid__favorite--MarginTop)}.pf-m-grid-lg.pf-c-table .pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__favorite--action--MarginLeft)}.pf-m-grid-lg.pf-c-table .pf-c-table__action{margin-top:var(--pf-c-table--m-grid__action--MarginTop);text-align:right}}@media screen and (max-width:992px) and (max-width:576px){.pf-m-grid-lg.pf-c-table .pf-c-table__action{grid-column-start:2;grid-row-start:1;margin-left:0}}@media screen and (max-width:992px){.pf-m-grid-lg.pf-c-table .pf-c-table__inline-edit-action{grid-column:2;grid-row:2}.pf-m-grid-lg.pf-c-table .pf-c-table__toggle-icon{transition:var(--pf-c-table__toggle__icon--Transition)}.pf-c-button.pf-m-expanded>.pf-m-grid-lg.pf-c-table .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate))}.pf-m-grid-lg.pf-c-table .pf-m-nowrap{--pf-c-table--cell--Overflow:auto}.pf-m-grid-lg.pf-c-table .pf-m-fit-content{white-space:normal;width:auto}.pf-m-grid-lg.pf-c-table .pf-m-truncate{--pf-c-table--cell--MaxWidth:100%}.pf-m-grid-lg.pf-c-table [class*=pf-m-width]{--pf-c-table--cell--Width:auto}}@media screen and (max-width:1200px){.pf-m-grid-xl.pf-c-table{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft);--pf-c-table__favorite--c-button--MarginTop:auto;--pf-c-table__favorite--c-button--MarginRight:auto;--pf-c-table__favorite--c-button--MarginBottom:auto;--pf-c-table__favorite--c-button--MarginLeft:auto;border:none;display:grid}.pf-m-grid-xl.pf-c-table tr>*{max-width:none;min-width:0;overflow:visible;text-overflow:clip;white-space:normal;width:auto}.pf-m-grid-xl.pf-c-table .pf-c-table__text{max-width:none;min-width:0;overflow:var(--pf-c-table--cell--Overflow);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:auto}.pf-m-grid-xl.pf-c-table thead{display:none;visibility:hidden}.pf-m-grid-xl.pf-c-table tbody{display:block}.pf-m-grid-xl.pf-c-table tbody:first-of-type{border-top:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-xl.pf-c-table table.pf-m-compact>tbody{border-top:0}.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row){border-bottom:var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-xl.pf-c-table tbody:last-of-type:not(:only-of-type)>tr,.pf-m-grid-xl.pf-c-table tr:last-child{border-bottom-width:var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth)}.pf-m-grid-xl.pf-c-table tbody.pf-m-expanded{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-m-grid-xl.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row){border-bottom:0}.pf-m-grid-xl.pf-c-table tbody.pf-m-expanded:not(:last-of-type){border-bottom:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-xl.pf-c-table tr.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:0;--pf-c-table__expandable-row--after--BorderColor:transparent}.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row){grid-column-gap:var(--pf-c-table-tr--responsive--GridColumnGap);display:grid;grid-auto-columns:max-content;grid-template-columns:1fr;height:auto;padding:var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft)}.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row)>*{padding:var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft)}.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row)>:first-child{--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--cell--first-child--responsive--PaddingTop)}.pf-m-grid-xl.pf-c-table.pf-m-compact{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table--m-compact-tr--responsive--PaddingTop);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);--pf-c-table--cell--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);--pf-c-table__check--input--MarginTop:0}.pf-m-grid-xl.pf-c-table.pf-m-compact .pf-c-table__action{margin-bottom:var(--pf-c-table--m-compact__action--responsive--MarginTop);margin-top:var(--pf-c-table--m-compact__action--responsive--MarginTop)}.pf-m-grid-xl.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button{margin-bottom:var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom)}.pf-m-grid-xl.pf-c-table .pf-c-table__icon>*{text-align:left}.pf-m-grid-xl.pf-c-table [data-label]{--pf-c-table--cell--hidden-visible--Display:var(--pf-c-table--m-grid--cell--hidden-visible--Display);grid-column-gap:var(--pf-c-table-td--responsive--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:1fr minmax(0,1.5fr)}.pf-m-grid-xl.pf-c-table [data-label]>*{grid-column:2}.pf-m-grid-xl.pf-c-table [data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-grid-xl.pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:0}.pf-m-grid-xl.pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:0}.pf-m-grid-xl.pf-c-table .pf-c-table{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table-tr--responsive--nested-table--PaddingTop);--pf-c-table-tr--responsive--PaddingRight:var(--pf-c-table-tr--responsive--nested-table--PaddingRight);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);border:0}.pf-m-grid-xl.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row)+tr:not(.pf-c-table__expandable-row){--pf-c-table-tr--responsive--PaddingTop:0}.pf-m-grid-xl.pf-c-table .pf-c-table__compound-expansion-toggle{--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:0;--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0;--pf-c-table__compound-expansion-toggle__button--after--Top:100%}.pf-m-grid-xl.pf-c-table tbody{position:relative}.pf-m-grid-xl.pf-c-table tbody:after{border:0;border-left:var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor);bottom:0;content:"";left:0;position:absolute;top:0}.pf-m-grid-xl.pf-c-table tbody.pf-m-expanded{--pf-c-table--tbody--after--BorderLeftWidth:var(--pf-c-table--tbody--after--border-width--base)}.pf-m-grid-xl.pf-c-table tbody.pf-m-expanded tbody{--pf-c-table--tbody--after--BorderLeftWidth:0}.pf-m-grid-xl.pf-c-table tbody>tr>:first-child:not(.pf-c-table__check):after{--pf-c-table__expandable-row--after--BorderLeftWidth:0;background-color:transparent;position:static;width:auto}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row{--pf-c-table--cell--responsive--PaddingTop:0;--pf-c-table--cell--responsive--PaddingRight:0;--pf-c-table--cell--responsive--PaddingBottom:0;--pf-c-table--cell--responsive--PaddingLeft:0;--pf-c-table--cell--PaddingRight:0;--pf-c-table--cell--PaddingLeft:0;border-bottom:none;box-shadow:none;display:block;max-height:var(--pf-c-table__expandable-row--MaxHeight);overflow-y:auto}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row>*{display:block;position:static}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row.pf-m-expanded{border-top-color:var(--pf-c-table--BorderColor)}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row>:first-child:not(.pf-c-table__check):after{content:none}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content{padding:0}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded){display:none;visibility:hidden}.pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content{padding-left:var(--pf-c-table__expandable-row-content--responsive--PaddingLeft);padding-right:var(--pf-c-table__expandable-row-content--responsive--PaddingRight)}.pf-m-grid-xl.pf-c-table tbody.pf-m-hoverable{--pf-c-table--tbody--after--BorderLeftWidth:0;--pf-c-table--tbody--after--BorderLeftColor:transparent}.pf-m-grid-xl.pf-c-table tbody.pf-m-hoverable,.pf-m-grid-xl.pf-c-table tbody.pf-m-hoverable>tr{position:relative}.pf-m-grid-xl.pf-c-table tbody.pf-m-hoverable>tr:after{background-color:var(--pf-c-table--tbody--after--tr--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tbody--after--tr--BorderLeftWidth)}.pf-m-grid-xl.pf-c-table tbody.pf-m-hoverable.pf-m-expanded{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftColor)}.pf-m-grid-xl.pf-c-table tbody.pf-m-hoverable.pf-m-selected{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftColor)}.pf-m-grid-xl.pf-c-table tr.pf-m-selected:after{background-color:var(--pf-c-table--tr--m-selected--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tr--m-selected--after--BorderLeftWidth)}.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action,.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,.pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle{padding:0;width:auto}.pf-m-grid-xl.pf-c-table .pf-c-table__toggle{grid-column:-1;grid-row-start:20;justify-self:end;padding-right:0}.pf-m-grid-xl.pf-c-table .pf-c-table__toggle:after{content:none}.pf-m-grid-xl.pf-c-table .pf-c-table__button{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft)}.pf-m-grid-xl.pf-c-table .pf-c-table__action,.pf-m-grid-xl.pf-c-table .pf-c-table__check,.pf-m-grid-xl.pf-c-table .pf-c-table__favorite{grid-column-start:2;grid-row-start:1}.pf-m-grid-xl.pf-c-table .pf-c-table__check{margin-left:var(--pf-c-table__check--responsive--MarginLeft);margin-top:var(--pf-c-table__check--responsive--MarginTop)}.pf-m-grid-xl.pf-c-table .pf-c-table__check~.pf-c-table__favorite{margin-left:var(--pf-c-table--m-grid__check--favorite--MarginLeft)}.pf-m-grid-xl.pf-c-table .pf-c-table__check~.pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__check--favorite--action--MarginLeft)}.pf-m-grid-xl.pf-c-table .pf-c-table__check~.pf-c-table__action{margin-left:var(--pf-c-table__action--responsive--MarginLeft)}.pf-m-grid-xl.pf-c-table .pf-c-table__favorite{margin-top:var(--pf-c-table--m-grid__favorite--MarginTop)}.pf-m-grid-xl.pf-c-table .pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__favorite--action--MarginLeft)}.pf-m-grid-xl.pf-c-table .pf-c-table__action{margin-top:var(--pf-c-table--m-grid__action--MarginTop);text-align:right}}@media screen and (max-width:1200px) and (max-width:576px){.pf-m-grid-xl.pf-c-table .pf-c-table__action{grid-column-start:2;grid-row-start:1;margin-left:0}}@media screen and (max-width:1200px){.pf-m-grid-xl.pf-c-table .pf-c-table__inline-edit-action{grid-column:2;grid-row:2}.pf-m-grid-xl.pf-c-table .pf-c-table__toggle-icon{transition:var(--pf-c-table__toggle__icon--Transition)}.pf-c-button.pf-m-expanded>.pf-m-grid-xl.pf-c-table .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate))}.pf-m-grid-xl.pf-c-table .pf-m-nowrap{--pf-c-table--cell--Overflow:auto}.pf-m-grid-xl.pf-c-table .pf-m-fit-content{white-space:normal;width:auto}.pf-m-grid-xl.pf-c-table .pf-m-truncate{--pf-c-table--cell--MaxWidth:100%}.pf-m-grid-xl.pf-c-table [class*=pf-m-width]{--pf-c-table--cell--Width:auto}}@media screen and (max-width:1450px){.pf-m-grid-2xl.pf-c-table{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft);--pf-c-table__favorite--c-button--MarginTop:auto;--pf-c-table__favorite--c-button--MarginRight:auto;--pf-c-table__favorite--c-button--MarginBottom:auto;--pf-c-table__favorite--c-button--MarginLeft:auto;border:none;display:grid}.pf-m-grid-2xl.pf-c-table tr>*{max-width:none;min-width:0;overflow:visible;text-overflow:clip;white-space:normal;width:auto}.pf-m-grid-2xl.pf-c-table .pf-c-table__text{max-width:none;min-width:0;overflow:var(--pf-c-table--cell--Overflow);position:relative;text-overflow:var(--pf-c-table--cell--TextOverflow);white-space:var(--pf-c-table--cell--WhiteSpace);width:auto}.pf-m-grid-2xl.pf-c-table thead{display:none;visibility:hidden}.pf-m-grid-2xl.pf-c-table tbody{display:block}.pf-m-grid-2xl.pf-c-table tbody:first-of-type{border-top:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-2xl.pf-c-table table.pf-m-compact>tbody{border-top:0}.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row){border-bottom:var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-2xl.pf-c-table tbody:last-of-type:not(:only-of-type)>tr,.pf-m-grid-2xl.pf-c-table tr:last-child{border-bottom-width:var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth)}.pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor)}.pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row){border-bottom:0}.pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded:not(:last-of-type){border-bottom:var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor)}.pf-m-grid-2xl.pf-c-table tr.pf-m-selected{--pf-c-table__expandable-row--after--BorderLeftWidth:0;--pf-c-table__expandable-row--after--BorderColor:transparent}.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row){grid-column-gap:var(--pf-c-table-tr--responsive--GridColumnGap);display:grid;grid-auto-columns:max-content;grid-template-columns:1fr;height:auto;padding:var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft)}.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row)>*{padding:var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft)}.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row)>:first-child{--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--cell--first-child--responsive--PaddingTop)}.pf-m-grid-2xl.pf-c-table.pf-m-compact{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table--m-compact-tr--responsive--PaddingTop);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);--pf-c-table--cell--responsive--PaddingTop:var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);--pf-c-table--cell--responsive--PaddingBottom:var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);--pf-c-table__check--input--MarginTop:0}.pf-m-grid-2xl.pf-c-table.pf-m-compact .pf-c-table__action{margin-bottom:var(--pf-c-table--m-compact__action--responsive--MarginTop);margin-top:var(--pf-c-table--m-compact__action--responsive--MarginTop)}.pf-m-grid-2xl.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button{margin-bottom:var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom)}.pf-m-grid-2xl.pf-c-table .pf-c-table__icon>*{text-align:left}.pf-m-grid-2xl.pf-c-table [data-label]{--pf-c-table--cell--hidden-visible--Display:var(--pf-c-table--m-grid--cell--hidden-visible--Display);grid-column-gap:var(--pf-c-table-td--responsive--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:1fr minmax(0,1.5fr)}.pf-m-grid-2xl.pf-c-table [data-label]>*{grid-column:2}.pf-m-grid-2xl.pf-c-table [data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-grid-2xl.pf-c-table tr>:first-child{--pf-c-table--cell--PaddingLeft:0}.pf-m-grid-2xl.pf-c-table tr>:last-child{--pf-c-table--cell--PaddingRight:0}.pf-m-grid-2xl.pf-c-table .pf-c-table{--pf-c-table-tr--responsive--PaddingTop:var(--pf-c-table-tr--responsive--nested-table--PaddingTop);--pf-c-table-tr--responsive--PaddingRight:var(--pf-c-table-tr--responsive--nested-table--PaddingRight);--pf-c-table-tr--responsive--PaddingBottom:var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);--pf-c-table-tr--responsive--PaddingLeft:var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);border:0}.pf-m-grid-2xl.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row)+tr:not(.pf-c-table__expandable-row){--pf-c-table-tr--responsive--PaddingTop:0}.pf-m-grid-2xl.pf-c-table .pf-c-table__compound-expansion-toggle{--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth:0;--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth:0;--pf-c-table__compound-expansion-toggle__button--after--Top:100%}.pf-m-grid-2xl.pf-c-table tbody{position:relative}.pf-m-grid-2xl.pf-c-table tbody:after{border:0;border-left:var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor);bottom:0;content:"";left:0;position:absolute;top:0}.pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded{--pf-c-table--tbody--after--BorderLeftWidth:var(--pf-c-table--tbody--after--border-width--base)}.pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded tbody{--pf-c-table--tbody--after--BorderLeftWidth:0}.pf-m-grid-2xl.pf-c-table tbody>tr>:first-child:not(.pf-c-table__check):after{--pf-c-table__expandable-row--after--BorderLeftWidth:0;background-color:transparent;position:static;width:auto}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row{--pf-c-table--cell--responsive--PaddingTop:0;--pf-c-table--cell--responsive--PaddingRight:0;--pf-c-table--cell--responsive--PaddingBottom:0;--pf-c-table--cell--responsive--PaddingLeft:0;--pf-c-table--cell--PaddingRight:0;--pf-c-table--cell--PaddingLeft:0;border-bottom:none;box-shadow:none;display:block;max-height:var(--pf-c-table__expandable-row--MaxHeight);overflow-y:auto}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row>*{display:block;position:static}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row.pf-m-expanded{border-top-color:var(--pf-c-table--BorderColor)}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row>:first-child:not(.pf-c-table__check):after{content:none}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content{padding:0}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded){display:none;visibility:hidden}.pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content{padding-left:var(--pf-c-table__expandable-row-content--responsive--PaddingLeft);padding-right:var(--pf-c-table__expandable-row-content--responsive--PaddingRight)}.pf-m-grid-2xl.pf-c-table tbody.pf-m-hoverable{--pf-c-table--tbody--after--BorderLeftWidth:0;--pf-c-table--tbody--after--BorderLeftColor:transparent}.pf-m-grid-2xl.pf-c-table tbody.pf-m-hoverable,.pf-m-grid-2xl.pf-c-table tbody.pf-m-hoverable>tr{position:relative}.pf-m-grid-2xl.pf-c-table tbody.pf-m-hoverable>tr:after{background-color:var(--pf-c-table--tbody--after--tr--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tbody--after--tr--BorderLeftWidth)}.pf-m-grid-2xl.pf-c-table tbody.pf-m-hoverable.pf-m-expanded{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-expanded--after--tr--BorderLeftColor)}.pf-m-grid-2xl.pf-c-table tbody.pf-m-hoverable.pf-m-selected{--pf-c-table--tbody--after--tr--BorderLeftWidth:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftWidth);--pf-c-table--tbody--after--tr--BorderLeftColor:var(--pf-c-table--tbody--m-selected--after--tr--BorderLeftColor)}.pf-m-grid-2xl.pf-c-table tr.pf-m-selected:after{background-color:var(--pf-c-table--tr--m-selected--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-table--tr--m-selected--after--BorderLeftWidth)}.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action,.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,.pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle{padding:0;width:auto}.pf-m-grid-2xl.pf-c-table .pf-c-table__toggle{grid-column:-1;grid-row-start:20;justify-self:end;padding-right:0}.pf-m-grid-2xl.pf-c-table .pf-c-table__toggle:after{content:none}.pf-m-grid-2xl.pf-c-table .pf-c-table__button{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-grid--cell--PaddingTop);--pf-c-table--cell--PaddingRight:var(--pf-c-table--m-grid--cell--PaddingRight);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-grid--cell--PaddingBottom);--pf-c-table--cell--PaddingLeft:var(--pf-c-table--m-grid--cell--PaddingLeft)}.pf-m-grid-2xl.pf-c-table .pf-c-table__action,.pf-m-grid-2xl.pf-c-table .pf-c-table__check,.pf-m-grid-2xl.pf-c-table .pf-c-table__favorite{grid-column-start:2;grid-row-start:1}.pf-m-grid-2xl.pf-c-table .pf-c-table__check{margin-left:var(--pf-c-table__check--responsive--MarginLeft);margin-top:var(--pf-c-table__check--responsive--MarginTop)}.pf-m-grid-2xl.pf-c-table .pf-c-table__check~.pf-c-table__favorite{margin-left:var(--pf-c-table--m-grid__check--favorite--MarginLeft)}.pf-m-grid-2xl.pf-c-table .pf-c-table__check~.pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__check--favorite--action--MarginLeft)}.pf-m-grid-2xl.pf-c-table .pf-c-table__check~.pf-c-table__action{margin-left:var(--pf-c-table__action--responsive--MarginLeft)}.pf-m-grid-2xl.pf-c-table .pf-c-table__favorite{margin-top:var(--pf-c-table--m-grid__favorite--MarginTop)}.pf-m-grid-2xl.pf-c-table .pf-c-table__favorite~.pf-c-table__action{margin-left:var(--pf-c-table--m-grid__favorite--action--MarginLeft)}.pf-m-grid-2xl.pf-c-table .pf-c-table__action{margin-top:var(--pf-c-table--m-grid__action--MarginTop);text-align:right}}@media screen and (max-width:1450px) and (max-width:576px){.pf-m-grid-2xl.pf-c-table .pf-c-table__action{grid-column-start:2;grid-row-start:1;margin-left:0}}@media screen and (max-width:1450px){.pf-m-grid-2xl.pf-c-table .pf-c-table__inline-edit-action{grid-column:2;grid-row:2}.pf-m-grid-2xl.pf-c-table .pf-c-table__toggle-icon{transition:var(--pf-c-table__toggle__icon--Transition)}.pf-c-button.pf-m-expanded>.pf-m-grid-2xl.pf-c-table .pf-c-table__toggle-icon{transform:rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate))}.pf-m-grid-2xl.pf-c-table .pf-m-nowrap{--pf-c-table--cell--Overflow:auto}.pf-m-grid-2xl.pf-c-table .pf-m-fit-content{white-space:normal;width:auto}.pf-m-grid-2xl.pf-c-table .pf-m-truncate{--pf-c-table--cell--MaxWidth:100%}.pf-m-grid-2xl.pf-c-table [class*=pf-m-width]{--pf-c-table--cell--Width:auto}}.pf-c-table{--pf-c-table__tree-view-main--indent--base:calc(var(--pf-global--spacer--md)*2 + var(--pf-c-table__tree-view-icon--MinWidth));--pf-c-table__tree-view-main--nested-indent--base:calc(var(--pf-c-table__tree-view-main--indent--base) - var(--pf-global--spacer--md));--pf-c-table__tree-view-main--PaddingLeft:var(--pf-c-table__tree-view-main--indent--base);--pf-c-table__tree-view-main--MarginLeft:calc(var(--pf-c-table--cell--PaddingLeft)*-1);--pf-c-table__tree-view-main--c-table__check--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table__tree-view-main--c-table__check--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-table__tree-view-main--c-table__check--MarginRight:var(--pf-global--spacer--sm);--pf-c-table__tree-view-icon--MinWidth:var(--pf-global--FontSize--md);--pf-c-table__tree-view-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-table--m-tree-view__toggle--Position:absolute;--pf-c-table--m-tree-view__toggle--Left:var(--pf-c-table__tree-view-main--PaddingLeft);--pf-c-table--m-tree-view__toggle--TranslateX:-100%;--pf-c-table--m-tree-view__toggle__toggle-icon--MinWidth:var(--pf-global--FontSize--md)}.pf-c-table.pf-m-tree-view>tbody>tr{--pf-c-table--m-tree-view__toggle--Left:var(--pf-c-table__tree-view-main--PaddingLeft)}.pf-c-table.pf-m-tree-view tr[aria-level="2"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*1 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="3"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*2 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="4"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*3 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="5"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*4 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="6"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*5 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="7"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*6 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="8"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*7 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="9"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*8 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table.pf-m-tree-view tr[aria-level="10"]{--pf-c-table__tree-view-main--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*9 + var(--pf-c-table__tree-view-main--indent--base))}.pf-c-table__tree-view-main{align-items:baseline;cursor:pointer;display:flex;margin-left:var(--pf-c-table__tree-view-main--MarginLeft);min-width:0;padding-left:var(--pf-c-table__tree-view-main--PaddingLeft);position:relative;text-align:left}.pf-c-table__tree-view-main>.pf-c-table__toggle{left:var(--pf-c-table--m-tree-view__toggle--Left);position:var(--pf-c-table--m-tree-view__toggle--Position);transform:translateX(var(--pf-c-table--m-tree-view__toggle--TranslateX))}.pf-c-table__tree-view-main>.pf-c-table__toggle .pf-c-table__toggle-icon{min-width:var(--pf-c-table--m-tree-view__toggle__toggle-icon--MinWidth)}.pf-c-table__tree-view-main>.pf-c-table__check{margin-right:var(--pf-c-table__tree-view-main--c-table__check--MarginRight)}.pf-c-table__tree-view-main>.pf-c-table__check label{margin:0 calc(var(--pf-c-table__tree-view-main--c-table__check--MarginRight)*-1) 0 0;padding-left:var(--pf-c-table__tree-view-main--c-table__check--PaddingLeft);padding-right:var(--pf-c-table__tree-view-main--c-table__check--PaddingRight)}.pf-c-table__tree-view-text{display:flex}.pf-c-table__tree-view-icon{margin-right:var(--pf-c-table__tree-view-icon--MarginRight);min-width:var(--pf-c-table__tree-view-icon--MinWidth)}.pf-c-table__tree-view-details-toggle{display:none;visibility:hidden}.pf-m-tree-view-grid.pf-c-table{--pf-c-table--m-tree-view-grid--tr--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table__tree-view-main--indent--base);--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap:var(--pf-global--spacer--sm);--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft:0;--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns:repeat(auto-fit,minmax(150px,1fr));--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight:0;--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order:4;--pf-c-table__tree-view-text--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table--tbody--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop);--pf-c-table--tbody--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom);--pf-c-table__tree-view-details-toggle--MarginTop:-0.375rem;--pf-c-table__tree-view-details-toggle--MarginBottom:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom:-0.375rem}.pf-m-tree-view-grid.pf-c-table tbody tr{border:none;outline-offset:var(--pf-c-table--m-tree-view-grid--tr--OutlineOffset);position:relative}.pf-m-tree-view-grid.pf-c-table tbody tr:before{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor);bottom:0;content:"";left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft);position:absolute;right:0;top:0}.pf-m-tree-view-grid.pf-c-table tr:not([hidden]){display:grid;grid-template-columns:1fr max-content}.pf-m-tree-view-grid.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop)}.pf-m-tree-view-grid.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell~.pf-c-table__action{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop)}.pf-m-tree-view-grid.pf-c-table td:not(.pf-c-table__tree-view-title-cell){--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom);padding-left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft)}.pf-m-tree-view-grid.pf-c-table .pf-c-table__tree-view-text{padding-right:var(--pf-c-table__tree-view-text--PaddingRight)}.pf-m-tree-view-grid.pf-c-table thead th{display:none;visibility:none}.pf-m-tree-view-grid.pf-c-table td{display:none}.pf-m-tree-view-grid.pf-c-table td[data-label]{grid-column-gap:var(--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:var(--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns)}.pf-m-tree-view-grid.pf-c-table td[data-label]>*{grid-column:2}.pf-m-tree-view-grid.pf-c-table td[data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-tree-view-grid.pf-c-table tr.pf-m-tree-view-details-expanded{padding-bottom:var(--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom)}.pf-m-tree-view-grid.pf-c-table tr.pf-m-tree-view-details-expanded td[data-label]{display:grid}.pf-m-tree-view-grid.pf-c-table .pf-c-table__tree-view-title-header-cell{display:block;visibility:visible}.pf-m-tree-view-grid.pf-c-table .pf-c-table__action,.pf-m-tree-view-grid.pf-c-table .pf-c-table__tree-view-details-toggle{display:inline-block;visibility:visible}.pf-m-tree-view-grid.pf-c-table .pf-c-table__action{--pf-c-table--cell--Width:auto;--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom);grid-column:2;grid-row:1}.pf-m-tree-view-grid.pf-c-table .pf-c-table__action>.pf-c-dropdown{margin-bottom:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom);margin-top:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop)}.pf-m-tree-view-grid.pf-c-table .pf-c-table__tree-view-main>.pf-c-table__check{margin-left:auto;margin-right:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight);order:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order)}.pf-m-tree-view-grid.pf-c-table .pf-c-table__tree-view-details-toggle{margin-bottom:var(--pf-c-table__tree-view-details-toggle--MarginBottom);margin-top:var(--pf-c-table__tree-view-details-toggle--MarginTop)}.pf-m-tree-view-grid.pf-c-table tr[aria-level="2"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*1 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="3"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*2 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="4"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*3 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="5"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*4 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="6"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*5 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="7"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*6 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="8"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*7 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="9"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*8 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid.pf-c-table tr[aria-level="10"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*9 + var(--pf-c-table__tree-view-main--indent--base))}@media screen and (max-width:768px){.pf-m-tree-view-grid-md.pf-c-table{--pf-c-table--m-tree-view-grid--tr--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table__tree-view-main--indent--base);--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap:var(--pf-global--spacer--sm);--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft:0;--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns:repeat(auto-fit,minmax(150px,1fr));--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight:0;--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order:4;--pf-c-table__tree-view-text--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table--tbody--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop);--pf-c-table--tbody--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom);--pf-c-table__tree-view-details-toggle--MarginTop:-0.375rem;--pf-c-table__tree-view-details-toggle--MarginBottom:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom:-0.375rem}.pf-m-tree-view-grid-md.pf-c-table tbody tr{border:none;outline-offset:var(--pf-c-table--m-tree-view-grid--tr--OutlineOffset);position:relative}.pf-m-tree-view-grid-md.pf-c-table tbody tr:before{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor);bottom:0;content:"";left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft);position:absolute;right:0;top:0}.pf-m-tree-view-grid-md.pf-c-table tr:not([hidden]){display:grid;grid-template-columns:1fr max-content}.pf-m-tree-view-grid-md.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop)}.pf-m-tree-view-grid-md.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell~.pf-c-table__action{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop)}.pf-m-tree-view-grid-md.pf-c-table td:not(.pf-c-table__tree-view-title-cell){--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom);padding-left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft)}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__tree-view-text{padding-right:var(--pf-c-table__tree-view-text--PaddingRight)}.pf-m-tree-view-grid-md.pf-c-table thead th{display:none;visibility:none}.pf-m-tree-view-grid-md.pf-c-table td{display:none}.pf-m-tree-view-grid-md.pf-c-table td[data-label]{grid-column-gap:var(--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:var(--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns)}.pf-m-tree-view-grid-md.pf-c-table td[data-label]>*{grid-column:2}.pf-m-tree-view-grid-md.pf-c-table td[data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-tree-view-grid-md.pf-c-table tr.pf-m-tree-view-details-expanded{padding-bottom:var(--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom)}.pf-m-tree-view-grid-md.pf-c-table tr.pf-m-tree-view-details-expanded td[data-label]{display:grid}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__tree-view-title-header-cell{display:block;visibility:visible}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__action,.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__tree-view-details-toggle{display:inline-block;visibility:visible}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__action{--pf-c-table--cell--Width:auto;--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom);grid-column:2;grid-row:1}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__action>.pf-c-dropdown{margin-bottom:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom);margin-top:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop)}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__tree-view-main>.pf-c-table__check{margin-left:auto;margin-right:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight);order:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order)}.pf-m-tree-view-grid-md.pf-c-table .pf-c-table__tree-view-details-toggle{margin-bottom:var(--pf-c-table__tree-view-details-toggle--MarginBottom);margin-top:var(--pf-c-table__tree-view-details-toggle--MarginTop)}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="2"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*1 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="3"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*2 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="4"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*3 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="5"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*4 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="6"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*5 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="7"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*6 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="8"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*7 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="9"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*8 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-md.pf-c-table tr[aria-level="10"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*9 + var(--pf-c-table__tree-view-main--indent--base))}}@media screen and (max-width:992px){.pf-m-tree-view-grid-lg.pf-c-table{--pf-c-table--m-tree-view-grid--tr--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table__tree-view-main--indent--base);--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap:var(--pf-global--spacer--sm);--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft:0;--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns:repeat(auto-fit,minmax(150px,1fr));--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight:0;--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order:4;--pf-c-table__tree-view-text--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table--tbody--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop);--pf-c-table--tbody--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom);--pf-c-table__tree-view-details-toggle--MarginTop:-0.375rem;--pf-c-table__tree-view-details-toggle--MarginBottom:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom:-0.375rem}.pf-m-tree-view-grid-lg.pf-c-table tbody tr{border:none;outline-offset:var(--pf-c-table--m-tree-view-grid--tr--OutlineOffset);position:relative}.pf-m-tree-view-grid-lg.pf-c-table tbody tr:before{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor);bottom:0;content:"";left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft);position:absolute;right:0;top:0}.pf-m-tree-view-grid-lg.pf-c-table tr:not([hidden]){display:grid;grid-template-columns:1fr max-content}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop)}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell~.pf-c-table__action{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop)}.pf-m-tree-view-grid-lg.pf-c-table td:not(.pf-c-table__tree-view-title-cell){--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom);padding-left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft)}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__tree-view-text{padding-right:var(--pf-c-table__tree-view-text--PaddingRight)}.pf-m-tree-view-grid-lg.pf-c-table thead th{display:none;visibility:none}.pf-m-tree-view-grid-lg.pf-c-table td{display:none}.pf-m-tree-view-grid-lg.pf-c-table td[data-label]{grid-column-gap:var(--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:var(--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns)}.pf-m-tree-view-grid-lg.pf-c-table td[data-label]>*{grid-column:2}.pf-m-tree-view-grid-lg.pf-c-table td[data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-tree-view-grid-lg.pf-c-table tr.pf-m-tree-view-details-expanded{padding-bottom:var(--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom)}.pf-m-tree-view-grid-lg.pf-c-table tr.pf-m-tree-view-details-expanded td[data-label]{display:grid}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__tree-view-title-header-cell{display:block;visibility:visible}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__action,.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__tree-view-details-toggle{display:inline-block;visibility:visible}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__action{--pf-c-table--cell--Width:auto;--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom);grid-column:2;grid-row:1}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__action>.pf-c-dropdown{margin-bottom:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom);margin-top:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop)}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__tree-view-main>.pf-c-table__check{margin-left:auto;margin-right:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight);order:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order)}.pf-m-tree-view-grid-lg.pf-c-table .pf-c-table__tree-view-details-toggle{margin-bottom:var(--pf-c-table__tree-view-details-toggle--MarginBottom);margin-top:var(--pf-c-table__tree-view-details-toggle--MarginTop)}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="2"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*1 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="3"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*2 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="4"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*3 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="5"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*4 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="6"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*5 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="7"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*6 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="8"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*7 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="9"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*8 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-lg.pf-c-table tr[aria-level="10"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*9 + var(--pf-c-table__tree-view-main--indent--base))}}@media screen and (max-width:1200px){.pf-m-tree-view-grid-xl.pf-c-table{--pf-c-table--m-tree-view-grid--tr--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table__tree-view-main--indent--base);--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap:var(--pf-global--spacer--sm);--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft:0;--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns:repeat(auto-fit,minmax(150px,1fr));--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight:0;--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order:4;--pf-c-table__tree-view-text--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table--tbody--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop);--pf-c-table--tbody--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom);--pf-c-table__tree-view-details-toggle--MarginTop:-0.375rem;--pf-c-table__tree-view-details-toggle--MarginBottom:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom:-0.375rem}.pf-m-tree-view-grid-xl.pf-c-table tbody tr{border:none;outline-offset:var(--pf-c-table--m-tree-view-grid--tr--OutlineOffset);position:relative}.pf-m-tree-view-grid-xl.pf-c-table tbody tr:before{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor);bottom:0;content:"";left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft);position:absolute;right:0;top:0}.pf-m-tree-view-grid-xl.pf-c-table tr:not([hidden]){display:grid;grid-template-columns:1fr max-content}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop)}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell~.pf-c-table__action{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop)}.pf-m-tree-view-grid-xl.pf-c-table td:not(.pf-c-table__tree-view-title-cell){--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom);padding-left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft)}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__tree-view-text{padding-right:var(--pf-c-table__tree-view-text--PaddingRight)}.pf-m-tree-view-grid-xl.pf-c-table thead th{display:none;visibility:none}.pf-m-tree-view-grid-xl.pf-c-table td{display:none}.pf-m-tree-view-grid-xl.pf-c-table td[data-label]{grid-column-gap:var(--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:var(--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns)}.pf-m-tree-view-grid-xl.pf-c-table td[data-label]>*{grid-column:2}.pf-m-tree-view-grid-xl.pf-c-table td[data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-tree-view-grid-xl.pf-c-table tr.pf-m-tree-view-details-expanded{padding-bottom:var(--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom)}.pf-m-tree-view-grid-xl.pf-c-table tr.pf-m-tree-view-details-expanded td[data-label]{display:grid}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__tree-view-title-header-cell{display:block;visibility:visible}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__action,.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__tree-view-details-toggle{display:inline-block;visibility:visible}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__action{--pf-c-table--cell--Width:auto;--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom);grid-column:2;grid-row:1}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__action>.pf-c-dropdown{margin-bottom:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom);margin-top:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop)}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__tree-view-main>.pf-c-table__check{margin-left:auto;margin-right:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight);order:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order)}.pf-m-tree-view-grid-xl.pf-c-table .pf-c-table__tree-view-details-toggle{margin-bottom:var(--pf-c-table__tree-view-details-toggle--MarginBottom);margin-top:var(--pf-c-table__tree-view-details-toggle--MarginTop)}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="2"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*1 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="3"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*2 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="4"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*3 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="5"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*4 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="6"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*5 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="7"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*6 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="8"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*7 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="9"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*8 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-xl.pf-c-table tr[aria-level="10"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*9 + var(--pf-c-table__tree-view-main--indent--base))}}@media screen and (max-width:1450px){.pf-m-tree-view-grid-2xl.pf-c-table{--pf-c-table--m-tree-view-grid--tr--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table__tree-view-main--indent--base);--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap:var(--pf-global--spacer--sm);--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom:var(--pf-global--spacer--md);--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft:0;--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xl);--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns:repeat(auto-fit,minmax(150px,1fr));--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight:0;--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order:4;--pf-c-table__tree-view-text--PaddingRight:var(--pf-global--spacer--sm);--pf-c-table--tbody--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingTop);--pf-c-table--tbody--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingBottom);--pf-c-table__tree-view-details-toggle--MarginTop:-0.375rem;--pf-c-table__tree-view-details-toggle--MarginBottom:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop:-0.375rem;--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom:-0.375rem}.pf-m-tree-view-grid-2xl.pf-c-table tbody tr{border:none;outline-offset:var(--pf-c-table--m-tree-view-grid--tr--OutlineOffset);position:relative}.pf-m-tree-view-grid-2xl.pf-c-table tbody tr:before{border-bottom:var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor);bottom:0;content:"";left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft);position:absolute;right:0;top:0}.pf-m-tree-view-grid-2xl.pf-c-table tr:not([hidden]){display:grid;grid-template-columns:1fr max-content}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--PaddingTop)}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-expanded] .pf-c-table__tree-view-title-cell~.pf-c-table__action{--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid__tr--expanded__tree-view-title-cell--action--PaddingTop)}.pf-m-tree-view-grid-2xl.pf-c-table td:not(.pf-c-table__tree-view-title-cell){--pf-c-table--cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop);--pf-c-table--cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom);padding-left:var(--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft)}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__tree-view-text{padding-right:var(--pf-c-table__tree-view-text--PaddingRight)}.pf-m-tree-view-grid-2xl.pf-c-table thead th{display:none;visibility:none}.pf-m-tree-view-grid-2xl.pf-c-table td{display:none}.pf-m-tree-view-grid-2xl.pf-c-table td[data-label]{grid-column-gap:var(--pf-c-table--m-tree-view-grid--tbody--cell--GridColumnGap);align-items:start;grid-column:1;grid-template-columns:var(--pf-c-table--m-tree-view-grid--td--data-label--GridTemplateColumns)}.pf-m-tree-view-grid-2xl.pf-c-table td[data-label]>*{grid-column:2}.pf-m-tree-view-grid-2xl.pf-c-table td[data-label]:before{content:attr(data-label);font-weight:700;text-align:left}.pf-m-tree-view-grid-2xl.pf-c-table tr.pf-m-tree-view-details-expanded{padding-bottom:var(--pf-c-table--m-tree-view-grid--m-tree-view-details-expanded--PaddingBottom)}.pf-m-tree-view-grid-2xl.pf-c-table tr.pf-m-tree-view-details-expanded td[data-label]{display:grid}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__tree-view-title-header-cell{display:block;visibility:visible}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__action,.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__tree-view-details-toggle{display:inline-block;visibility:visible}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__action{--pf-c-table--cell--Width:auto;--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingLeft);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingTop:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingTop);--pf-c-table--m-tree-view-grid--td--not--c-table__tree-view-title-cell--PaddingBottom:var(--pf-c-table--m-tree-view-grid--c-table__action--PaddingBottom);grid-column:2;grid-row:1}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__action>.pf-c-dropdown{margin-bottom:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginBottom);margin-top:var(--pf-c-table--m-tree-view-grid--c-dropdown--MarginTop)}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__tree-view-main>.pf-c-table__check{margin-left:auto;margin-right:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--MarginRight);order:var(--pf-c-table--m-tree-view-mobile__tree-view-main--c-table__check--Order)}.pf-m-tree-view-grid-2xl.pf-c-table .pf-c-table__tree-view-details-toggle{margin-bottom:var(--pf-c-table__tree-view-details-toggle--MarginBottom);margin-top:var(--pf-c-table__tree-view-details-toggle--MarginTop)}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="2"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*1 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="3"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*2 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="4"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*3 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="5"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*4 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="6"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*5 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="7"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*6 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="8"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*7 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="9"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*8 + var(--pf-c-table__tree-view-main--indent--base))}.pf-m-tree-view-grid-2xl.pf-c-table tr[aria-level="10"]{--pf-c-table--m-tree-view-grid--tbody--cell--PaddingLeft:calc(var(--pf-c-table__tree-view-main--nested-indent--base)*9 + var(--pf-c-table__tree-view-main--indent--base))}}.pf-c-inline-edit{--pf-c-inline-edit__group--item--MarginRight:var(--pf-global--spacer--sm);--pf-c-inline-edit__action--c-button--m-valid--m-plain--Color:var(--pf-global--link--Color);--pf-c-inline-edit__action--c-button--m-valid--m-plain--hover--Color:var(--pf-global--link--Color--hover);--pf-c-inline-edit__action--m-icon-group--item--MarginRight:0;--pf-c-inline-edit__group--m-footer--MarginTop:var(--pf-global--spacer--xl);--pf-c-inline-edit__label--m-bold--FontWeight:var(--pf-global--FontWeight--semi-bold)}.pf-c-inline-edit__group{align-items:baseline;display:flex}.pf-c-inline-edit__group>*{margin-right:var(--pf-c-inline-edit__group--item--MarginRight)}.pf-c-inline-edit__group.pf-m-icon-group{--pf-c-inline-edit__group--item--MarginRight:var(--pf-c-inline-edit__action--m-icon-group--item--MarginRight)}.pf-c-inline-edit__group.pf-m-footer{margin-top:var(--pf-c-inline-edit__group--m-footer--MarginTop)}.pf-c-inline-edit__group.pf-m-column{flex-direction:column}.pf-c-inline-edit__group.pf-m-column,.pf-c-inline-edit__group>:last-child{--pf-c-inline-edit__group--item--MarginRight:0}.pf-c-inline-edit__input{flex:1}.pf-c-inline-edit__action.pf-m-valid .pf-c-button.pf-m-plain{--pf-c-button--m-plain--Color:var(--pf-c-inline-edit__action--c-button--m-valid--m-plain--Color)}.pf-c-inline-edit__action.pf-m-valid .pf-c-button.pf-m-plain:hover{--pf-c-button--m-plain--Color:var(--pf-c-inline-edit__action--c-button--m-valid--m-plain--hover--Color)}.pf-c-inline-edit__action,.pf-c-inline-edit__group.pf-m-action-group,.pf-c-inline-edit__input{display:none;visibility:hidden}.pf-c-inline-edit__action.pf-m-enable-editable{display:inline-block;visibility:visible}.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action,.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__input,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__input{visibility:visible}.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__input,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__input{display:block}.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action{display:inline-block}.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group{display:inline-flex}.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action.pf-m-enable-editable,.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__value,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action.pf-m-enable-editable,.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__value{display:none;visibility:hidden}.pf-c-inline-edit__label+.pf-c-inline-edit__action.pf-m-enable>.pf-c-button{margin-bottom:calc(var(--pf-c-button--PaddingBottom)*-1);margin-top:calc(var(--pf-c-button--PaddingTop)*-1)}.pf-c-inline-edit__label.pf-m-bold{font-weight:var(--pf-c-inline-edit__label--m-bold--FontWeight)}.pf-c-inline-edit__editable-text br{display:none}.pf-l-flex{--pf-l-flex--Display:flex;--pf-l-flex--FlexWrap:wrap;--pf-l-flex--AlignItems:baseline;--pf-l-flex--m-row--AlignItems:baseline;--pf-l-flex--m-row-reverse--AlignItems:baseline;--pf-l-flex--item--Order:0;--pf-l-flex--spacer-base:var(--pf-global--spacer--md);--pf-l-flex--spacer:var(--pf-l-flex--spacer-base);--pf-l-flex--spacer--none:0;--pf-l-flex--spacer--xs:var(--pf-global--spacer--xs);--pf-l-flex--spacer--sm:var(--pf-global--spacer--sm);--pf-l-flex--spacer--md:var(--pf-global--spacer--md);--pf-l-flex--spacer--lg:var(--pf-global--spacer--lg);--pf-l-flex--spacer--xl:var(--pf-global--spacer--xl);--pf-l-flex--spacer--2xl:var(--pf-global--spacer--2xl);--pf-l-flex--spacer--3xl:var(--pf-global--spacer--3xl);--pf-l-flex--spacer--4xl:var(--pf-global--spacer--4xl);align-items:var(--pf-l-flex--AlignItems);display:var(--pf-l-flex--Display);flex-wrap:var(--pf-l-flex--FlexWrap)}.pf-l-flex:last-child{--pf-l-flex--spacer:0}.pf-l-flex>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer-base);margin-right:var(--pf-l-flex--spacer);max-width:100%;order:var(--pf-l-flex--item--Order)}@media screen and (min-width:576px){.pf-l-flex>*{order:var(--pf-l-flex--item--Order-on-sm,var(--pf-l-flex--item--Order))}}@media screen and (min-width:768px){.pf-l-flex>*{order:var(--pf-l-flex--item--Order-on-md,var(--pf-l-flex--item--Order-on-sm,var(--pf-l-flex--item--Order)))}}@media screen and (min-width:992px){.pf-l-flex>*{order:var(--pf-l-flex--item--Order-on-lg,var(--pf-l-flex--item--Order-on-md,var(--pf-l-flex--item--Order-on-sm,var(--pf-l-flex--item--Order))))}}@media screen and (min-width:1200px){.pf-l-flex>*{order:var(--pf-l-flex--item--Order-on-xl,var(--pf-l-flex--item--Order-on-lg,var(--pf-l-flex--item--Order-on-md,var(--pf-l-flex--item--Order-on-sm,var(--pf-l-flex--item--Order)))))}}@media screen and (min-width:1450px){.pf-l-flex>*{order:var(--pf-l-flex--item--Order-on-2xl,var(--pf-l-flex--item--Order-on-xl,var(--pf-l-flex--item--Order-on-lg,var(--pf-l-flex--item--Order-on-md,var(--pf-l-flex--item--Order-on-sm,var(--pf-l-flex--item--Order))))))}}.pf-l-flex>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-flex{display:var(--pf-l-flex--Display)}.pf-l-flex.pf-m-inline-flex{--pf-l-flex--Display:inline-flex}.pf-l-flex.pf-m-column{align-items:normal;flex-direction:column}.pf-l-flex.pf-m-column>*{margin:0 0 var(--pf-l-flex--spacer) 0}.pf-l-flex.pf-m-column-reverse{align-items:normal;flex-direction:column-reverse}.pf-l-flex.pf-m-column-reverse>*{margin:var(--pf-l-flex--spacer) 0 0 0}.pf-l-flex.pf-m-row{align-items:var(--pf-l-flex--m-row--AlignItems);flex-direction:row}.pf-l-flex.pf-m-row>*{margin:0 var(--pf-l-flex--spacer) 0 0}.pf-l-flex.pf-m-row-reverse{align-items:var(--pf-l-flex--m-row-reverse--AlignItems);flex-direction:row-reverse}.pf-l-flex.pf-m-row-reverse>*{margin:0 0 0 var(--pf-l-flex--spacer)}.pf-l-flex.pf-m-wrap{flex-wrap:wrap}.pf-l-flex.pf-m-wrap-reverse{flex-wrap:wrap-reverse}.pf-l-flex.pf-m-nowrap{flex-wrap:nowrap}.pf-l-flex.pf-m-justify-content-flex-start{justify-content:flex-start}.pf-l-flex.pf-m-justify-content-flex-end{justify-content:flex-end}.pf-l-flex.pf-m-justify-content-center{justify-content:center}.pf-l-flex.pf-m-justify-content-space-between{justify-content:space-between}.pf-l-flex.pf-m-justify-content-space-around{justify-content:space-around}.pf-l-flex.pf-m-justify-content-space-evenly{justify-content:space-evenly}.pf-l-flex.pf-m-align-items-flex-start{align-items:flex-start}.pf-l-flex.pf-m-align-items-flex-end{align-items:flex-end}.pf-l-flex.pf-m-align-items-center{align-items:center}.pf-l-flex.pf-m-align-items-stretch{align-items:stretch}.pf-l-flex.pf-m-align-items-baseline{align-items:baseline}.pf-l-flex.pf-m-align-content-flex-start{align-content:flex-start}.pf-l-flex.pf-m-align-content-flex-end{align-content:flex-end}.pf-l-flex.pf-m-align-content-center{align-content:center}.pf-l-flex.pf-m-align-content-stretch{align-content:stretch}.pf-l-flex.pf-m-align-content-space-between{align-content:space-between}.pf-l-flex.pf-m-align-content-space-around{align-content:space-around}.pf-l-flex>.pf-m-align-right{margin-left:auto}.pf-l-flex>.pf-m-align-left{margin-left:0}.pf-l-flex>.pf-m-grow{flex-grow:1}.pf-l-flex>.pf-m-shrink{flex-shrink:1}.pf-l-flex>.pf-m-full-width{margin-right:0;width:100%}.pf-l-flex>.pf-m-flex-1{flex:1 0 0}.pf-l-flex>.pf-m-flex-2{flex:2 0 0}.pf-l-flex>.pf-m-flex-3{flex:3 0 0}.pf-l-flex>.pf-m-flex-4{flex:4 0 0}.pf-l-flex>.pf-m-flex-default{flex:0 1 auto}.pf-l-flex>.pf-m-flex-none{flex:none}.pf-l-flex>.pf-m-align-self-flex-start{align-self:flex-start}.pf-l-flex>.pf-m-align-self-flex-end{align-self:flex-end}.pf-l-flex>.pf-m-align-self-center{align-self:center}.pf-l-flex>.pf-m-align-self-baseline{align-self:baseline}.pf-l-flex>.pf-m-align-self-stretch{align-self:stretch}@media (min-width:576px){.pf-l-flex.pf-m-flex-on-sm{display:var(--pf-l-flex--Display)}.pf-l-flex.pf-m-inline-flex-on-sm{--pf-l-flex--Display:inline-flex}.pf-l-flex.pf-m-column-on-sm{align-items:normal;flex-direction:column}.pf-l-flex.pf-m-column-on-sm>*{margin:0 0 var(--pf-l-flex--spacer) 0}.pf-l-flex.pf-m-column-reverse-on-sm{align-items:normal;flex-direction:column-reverse}.pf-l-flex.pf-m-column-reverse-on-sm>*{margin:var(--pf-l-flex--spacer) 0 0 0}.pf-l-flex.pf-m-row-on-sm{align-items:var(--pf-l-flex--m-row--AlignItems);flex-direction:row}.pf-l-flex.pf-m-row-on-sm>*{margin:0 var(--pf-l-flex--spacer) 0 0}.pf-l-flex.pf-m-row-reverse-on-sm{align-items:var(--pf-l-flex--m-row-reverse--AlignItems);flex-direction:row-reverse}.pf-l-flex.pf-m-row-reverse-on-sm>*{margin:0 0 0 var(--pf-l-flex--spacer)}.pf-l-flex.pf-m-wrap-on-sm{flex-wrap:wrap}.pf-l-flex.pf-m-wrap-reverse-on-sm{flex-wrap:wrap-reverse}.pf-l-flex.pf-m-nowrap-on-sm{flex-wrap:nowrap}.pf-l-flex.pf-m-justify-content-flex-start-on-sm{justify-content:flex-start}.pf-l-flex.pf-m-justify-content-flex-end-on-sm{justify-content:flex-end}.pf-l-flex.pf-m-justify-content-center-on-sm{justify-content:center}.pf-l-flex.pf-m-justify-content-space-between-on-sm{justify-content:space-between}.pf-l-flex.pf-m-justify-content-space-around-on-sm{justify-content:space-around}.pf-l-flex.pf-m-justify-content-space-evenly-on-sm{justify-content:space-evenly}.pf-l-flex.pf-m-align-items-flex-start-on-sm{align-items:flex-start}.pf-l-flex.pf-m-align-items-flex-end-on-sm{align-items:flex-end}.pf-l-flex.pf-m-align-items-center-on-sm{align-items:center}.pf-l-flex.pf-m-align-items-stretch-on-sm{align-items:stretch}.pf-l-flex.pf-m-align-items-baseline-on-sm{align-items:baseline}.pf-l-flex.pf-m-align-content-flex-start-on-sm{align-content:flex-start}.pf-l-flex.pf-m-align-content-flex-end-on-sm{align-content:flex-end}.pf-l-flex.pf-m-align-content-center-on-sm{align-content:center}.pf-l-flex.pf-m-align-content-stretch-on-sm{align-content:stretch}.pf-l-flex.pf-m-align-content-space-between-on-sm{align-content:space-between}.pf-l-flex.pf-m-align-content-space-around-on-sm{align-content:space-around}.pf-l-flex>.pf-m-align-right-on-sm{margin-left:auto}.pf-l-flex>.pf-m-align-left-on-sm{margin-left:0}.pf-l-flex>.pf-m-grow-on-sm{flex-grow:1}.pf-l-flex>.pf-m-shrink-on-sm{flex-shrink:1}.pf-l-flex>.pf-m-full-width-on-sm{margin-right:0;width:100%}.pf-l-flex>.pf-m-flex-1-on-sm{flex:1 0 0}.pf-l-flex>.pf-m-flex-2-on-sm{flex:2 0 0}.pf-l-flex>.pf-m-flex-3-on-sm{flex:3 0 0}.pf-l-flex>.pf-m-flex-4-on-sm{flex:4 0 0}.pf-l-flex>.pf-m-flex-default-on-sm{flex:0 1 auto}.pf-l-flex>.pf-m-flex-none-on-sm{flex:none}.pf-l-flex>.pf-m-align-self-flex-start-on-sm{align-self:flex-start}.pf-l-flex>.pf-m-align-self-flex-end-on-sm{align-self:flex-end}.pf-l-flex>.pf-m-align-self-center-on-sm{align-self:center}.pf-l-flex>.pf-m-align-self-baseline-on-sm{align-self:baseline}.pf-l-flex>.pf-m-align-self-stretch-on-sm{align-self:stretch}}@media (min-width:768px){.pf-l-flex.pf-m-flex-on-md{display:var(--pf-l-flex--Display)}.pf-l-flex.pf-m-inline-flex-on-md{--pf-l-flex--Display:inline-flex}.pf-l-flex.pf-m-column-on-md{align-items:normal;flex-direction:column}.pf-l-flex.pf-m-column-on-md>*{margin:0 0 var(--pf-l-flex--spacer) 0}.pf-l-flex.pf-m-column-reverse-on-md{align-items:normal;flex-direction:column-reverse}.pf-l-flex.pf-m-column-reverse-on-md>*{margin:var(--pf-l-flex--spacer) 0 0 0}.pf-l-flex.pf-m-row-on-md{align-items:var(--pf-l-flex--m-row--AlignItems);flex-direction:row}.pf-l-flex.pf-m-row-on-md>*{margin:0 var(--pf-l-flex--spacer) 0 0}.pf-l-flex.pf-m-row-reverse-on-md{align-items:var(--pf-l-flex--m-row-reverse--AlignItems);flex-direction:row-reverse}.pf-l-flex.pf-m-row-reverse-on-md>*{margin:0 0 0 var(--pf-l-flex--spacer)}.pf-l-flex.pf-m-wrap-on-md{flex-wrap:wrap}.pf-l-flex.pf-m-wrap-reverse-on-md{flex-wrap:wrap-reverse}.pf-l-flex.pf-m-nowrap-on-md{flex-wrap:nowrap}.pf-l-flex.pf-m-justify-content-flex-start-on-md{justify-content:flex-start}.pf-l-flex.pf-m-justify-content-flex-end-on-md{justify-content:flex-end}.pf-l-flex.pf-m-justify-content-center-on-md{justify-content:center}.pf-l-flex.pf-m-justify-content-space-between-on-md{justify-content:space-between}.pf-l-flex.pf-m-justify-content-space-around-on-md{justify-content:space-around}.pf-l-flex.pf-m-justify-content-space-evenly-on-md{justify-content:space-evenly}.pf-l-flex.pf-m-align-items-flex-start-on-md{align-items:flex-start}.pf-l-flex.pf-m-align-items-flex-end-on-md{align-items:flex-end}.pf-l-flex.pf-m-align-items-center-on-md{align-items:center}.pf-l-flex.pf-m-align-items-stretch-on-md{align-items:stretch}.pf-l-flex.pf-m-align-items-baseline-on-md{align-items:baseline}.pf-l-flex.pf-m-align-content-flex-start-on-md{align-content:flex-start}.pf-l-flex.pf-m-align-content-flex-end-on-md{align-content:flex-end}.pf-l-flex.pf-m-align-content-center-on-md{align-content:center}.pf-l-flex.pf-m-align-content-stretch-on-md{align-content:stretch}.pf-l-flex.pf-m-align-content-space-between-on-md{align-content:space-between}.pf-l-flex.pf-m-align-content-space-around-on-md{align-content:space-around}.pf-l-flex>.pf-m-align-right-on-md{margin-left:auto}.pf-l-flex>.pf-m-align-left-on-md{margin-left:0}.pf-l-flex>.pf-m-grow-on-md{flex-grow:1}.pf-l-flex>.pf-m-shrink-on-md{flex-shrink:1}.pf-l-flex>.pf-m-full-width-on-md{margin-right:0;width:100%}.pf-l-flex>.pf-m-flex-1-on-md{flex:1 0 0}.pf-l-flex>.pf-m-flex-2-on-md{flex:2 0 0}.pf-l-flex>.pf-m-flex-3-on-md{flex:3 0 0}.pf-l-flex>.pf-m-flex-4-on-md{flex:4 0 0}.pf-l-flex>.pf-m-flex-default-on-md{flex:0 1 auto}.pf-l-flex>.pf-m-flex-none-on-md{flex:none}.pf-l-flex>.pf-m-align-self-flex-start-on-md{align-self:flex-start}.pf-l-flex>.pf-m-align-self-flex-end-on-md{align-self:flex-end}.pf-l-flex>.pf-m-align-self-center-on-md{align-self:center}.pf-l-flex>.pf-m-align-self-baseline-on-md{align-self:baseline}.pf-l-flex>.pf-m-align-self-stretch-on-md{align-self:stretch}}@media (min-width:992px){.pf-l-flex.pf-m-flex-on-lg{display:var(--pf-l-flex--Display)}.pf-l-flex.pf-m-inline-flex-on-lg{--pf-l-flex--Display:inline-flex}.pf-l-flex.pf-m-column-on-lg{align-items:normal;flex-direction:column}.pf-l-flex.pf-m-column-on-lg>*{margin:0 0 var(--pf-l-flex--spacer) 0}.pf-l-flex.pf-m-column-reverse-on-lg{align-items:normal;flex-direction:column-reverse}.pf-l-flex.pf-m-column-reverse-on-lg>*{margin:var(--pf-l-flex--spacer) 0 0 0}.pf-l-flex.pf-m-row-on-lg{align-items:var(--pf-l-flex--m-row--AlignItems);flex-direction:row}.pf-l-flex.pf-m-row-on-lg>*{margin:0 var(--pf-l-flex--spacer) 0 0}.pf-l-flex.pf-m-row-reverse-on-lg{align-items:var(--pf-l-flex--m-row-reverse--AlignItems);flex-direction:row-reverse}.pf-l-flex.pf-m-row-reverse-on-lg>*{margin:0 0 0 var(--pf-l-flex--spacer)}.pf-l-flex.pf-m-wrap-on-lg{flex-wrap:wrap}.pf-l-flex.pf-m-wrap-reverse-on-lg{flex-wrap:wrap-reverse}.pf-l-flex.pf-m-nowrap-on-lg{flex-wrap:nowrap}.pf-l-flex.pf-m-justify-content-flex-start-on-lg{justify-content:flex-start}.pf-l-flex.pf-m-justify-content-flex-end-on-lg{justify-content:flex-end}.pf-l-flex.pf-m-justify-content-center-on-lg{justify-content:center}.pf-l-flex.pf-m-justify-content-space-between-on-lg{justify-content:space-between}.pf-l-flex.pf-m-justify-content-space-around-on-lg{justify-content:space-around}.pf-l-flex.pf-m-justify-content-space-evenly-on-lg{justify-content:space-evenly}.pf-l-flex.pf-m-align-items-flex-start-on-lg{align-items:flex-start}.pf-l-flex.pf-m-align-items-flex-end-on-lg{align-items:flex-end}.pf-l-flex.pf-m-align-items-center-on-lg{align-items:center}.pf-l-flex.pf-m-align-items-stretch-on-lg{align-items:stretch}.pf-l-flex.pf-m-align-items-baseline-on-lg{align-items:baseline}.pf-l-flex.pf-m-align-content-flex-start-on-lg{align-content:flex-start}.pf-l-flex.pf-m-align-content-flex-end-on-lg{align-content:flex-end}.pf-l-flex.pf-m-align-content-center-on-lg{align-content:center}.pf-l-flex.pf-m-align-content-stretch-on-lg{align-content:stretch}.pf-l-flex.pf-m-align-content-space-between-on-lg{align-content:space-between}.pf-l-flex.pf-m-align-content-space-around-on-lg{align-content:space-around}.pf-l-flex>.pf-m-align-right-on-lg{margin-left:auto}.pf-l-flex>.pf-m-align-left-on-lg{margin-left:0}.pf-l-flex>.pf-m-grow-on-lg{flex-grow:1}.pf-l-flex>.pf-m-shrink-on-lg{flex-shrink:1}.pf-l-flex>.pf-m-full-width-on-lg{margin-right:0;width:100%}.pf-l-flex>.pf-m-flex-1-on-lg{flex:1 0 0}.pf-l-flex>.pf-m-flex-2-on-lg{flex:2 0 0}.pf-l-flex>.pf-m-flex-3-on-lg{flex:3 0 0}.pf-l-flex>.pf-m-flex-4-on-lg{flex:4 0 0}.pf-l-flex>.pf-m-flex-default-on-lg{flex:0 1 auto}.pf-l-flex>.pf-m-flex-none-on-lg{flex:none}.pf-l-flex>.pf-m-align-self-flex-start-on-lg{align-self:flex-start}.pf-l-flex>.pf-m-align-self-flex-end-on-lg{align-self:flex-end}.pf-l-flex>.pf-m-align-self-center-on-lg{align-self:center}.pf-l-flex>.pf-m-align-self-baseline-on-lg{align-self:baseline}.pf-l-flex>.pf-m-align-self-stretch-on-lg{align-self:stretch}}@media (min-width:1200px){.pf-l-flex.pf-m-flex-on-xl{display:var(--pf-l-flex--Display)}.pf-l-flex.pf-m-inline-flex-on-xl{--pf-l-flex--Display:inline-flex}.pf-l-flex.pf-m-column-on-xl{align-items:normal;flex-direction:column}.pf-l-flex.pf-m-column-on-xl>*{margin:0 0 var(--pf-l-flex--spacer) 0}.pf-l-flex.pf-m-column-reverse-on-xl{align-items:normal;flex-direction:column-reverse}.pf-l-flex.pf-m-column-reverse-on-xl>*{margin:var(--pf-l-flex--spacer) 0 0 0}.pf-l-flex.pf-m-row-on-xl{align-items:var(--pf-l-flex--m-row--AlignItems);flex-direction:row}.pf-l-flex.pf-m-row-on-xl>*{margin:0 var(--pf-l-flex--spacer) 0 0}.pf-l-flex.pf-m-row-reverse-on-xl{align-items:var(--pf-l-flex--m-row-reverse--AlignItems);flex-direction:row-reverse}.pf-l-flex.pf-m-row-reverse-on-xl>*{margin:0 0 0 var(--pf-l-flex--spacer)}.pf-l-flex.pf-m-wrap-on-xl{flex-wrap:wrap}.pf-l-flex.pf-m-wrap-reverse-on-xl{flex-wrap:wrap-reverse}.pf-l-flex.pf-m-nowrap-on-xl{flex-wrap:nowrap}.pf-l-flex.pf-m-justify-content-flex-start-on-xl{justify-content:flex-start}.pf-l-flex.pf-m-justify-content-flex-end-on-xl{justify-content:flex-end}.pf-l-flex.pf-m-justify-content-center-on-xl{justify-content:center}.pf-l-flex.pf-m-justify-content-space-between-on-xl{justify-content:space-between}.pf-l-flex.pf-m-justify-content-space-around-on-xl{justify-content:space-around}.pf-l-flex.pf-m-justify-content-space-evenly-on-xl{justify-content:space-evenly}.pf-l-flex.pf-m-align-items-flex-start-on-xl{align-items:flex-start}.pf-l-flex.pf-m-align-items-flex-end-on-xl{align-items:flex-end}.pf-l-flex.pf-m-align-items-center-on-xl{align-items:center}.pf-l-flex.pf-m-align-items-stretch-on-xl{align-items:stretch}.pf-l-flex.pf-m-align-items-baseline-on-xl{align-items:baseline}.pf-l-flex.pf-m-align-content-flex-start-on-xl{align-content:flex-start}.pf-l-flex.pf-m-align-content-flex-end-on-xl{align-content:flex-end}.pf-l-flex.pf-m-align-content-center-on-xl{align-content:center}.pf-l-flex.pf-m-align-content-stretch-on-xl{align-content:stretch}.pf-l-flex.pf-m-align-content-space-between-on-xl{align-content:space-between}.pf-l-flex.pf-m-align-content-space-around-on-xl{align-content:space-around}.pf-l-flex>.pf-m-align-right-on-xl{margin-left:auto}.pf-l-flex>.pf-m-align-left-on-xl{margin-left:0}.pf-l-flex>.pf-m-grow-on-xl{flex-grow:1}.pf-l-flex>.pf-m-shrink-on-xl{flex-shrink:1}.pf-l-flex>.pf-m-full-width-on-xl{margin-right:0;width:100%}.pf-l-flex>.pf-m-flex-1-on-xl{flex:1 0 0}.pf-l-flex>.pf-m-flex-2-on-xl{flex:2 0 0}.pf-l-flex>.pf-m-flex-3-on-xl{flex:3 0 0}.pf-l-flex>.pf-m-flex-4-on-xl{flex:4 0 0}.pf-l-flex>.pf-m-flex-default-on-xl{flex:0 1 auto}.pf-l-flex>.pf-m-flex-none-on-xl{flex:none}.pf-l-flex>.pf-m-align-self-flex-start-on-xl{align-self:flex-start}.pf-l-flex>.pf-m-align-self-flex-end-on-xl{align-self:flex-end}.pf-l-flex>.pf-m-align-self-center-on-xl{align-self:center}.pf-l-flex>.pf-m-align-self-baseline-on-xl{align-self:baseline}.pf-l-flex>.pf-m-align-self-stretch-on-xl{align-self:stretch}}@media (min-width:1450px){.pf-l-flex.pf-m-flex-on-2xl{display:var(--pf-l-flex--Display)}.pf-l-flex.pf-m-inline-flex-on-2xl{--pf-l-flex--Display:inline-flex}.pf-l-flex.pf-m-column-on-2xl{align-items:normal;flex-direction:column}.pf-l-flex.pf-m-column-on-2xl>*{margin:0 0 var(--pf-l-flex--spacer) 0}.pf-l-flex.pf-m-column-reverse-on-2xl{align-items:normal;flex-direction:column-reverse}.pf-l-flex.pf-m-column-reverse-on-2xl>*{margin:var(--pf-l-flex--spacer) 0 0 0}.pf-l-flex.pf-m-row-on-2xl{align-items:var(--pf-l-flex--m-row--AlignItems);flex-direction:row}.pf-l-flex.pf-m-row-on-2xl>*{margin:0 var(--pf-l-flex--spacer) 0 0}.pf-l-flex.pf-m-row-reverse-on-2xl{align-items:var(--pf-l-flex--m-row-reverse--AlignItems);flex-direction:row-reverse}.pf-l-flex.pf-m-row-reverse-on-2xl>*{margin:0 0 0 var(--pf-l-flex--spacer)}.pf-l-flex.pf-m-wrap-on-2xl{flex-wrap:wrap}.pf-l-flex.pf-m-wrap-reverse-on-2xl{flex-wrap:wrap-reverse}.pf-l-flex.pf-m-nowrap-on-2xl{flex-wrap:nowrap}.pf-l-flex.pf-m-justify-content-flex-start-on-2xl{justify-content:flex-start}.pf-l-flex.pf-m-justify-content-flex-end-on-2xl{justify-content:flex-end}.pf-l-flex.pf-m-justify-content-center-on-2xl{justify-content:center}.pf-l-flex.pf-m-justify-content-space-between-on-2xl{justify-content:space-between}.pf-l-flex.pf-m-justify-content-space-around-on-2xl{justify-content:space-around}.pf-l-flex.pf-m-justify-content-space-evenly-on-2xl{justify-content:space-evenly}.pf-l-flex.pf-m-align-items-flex-start-on-2xl{align-items:flex-start}.pf-l-flex.pf-m-align-items-flex-end-on-2xl{align-items:flex-end}.pf-l-flex.pf-m-align-items-center-on-2xl{align-items:center}.pf-l-flex.pf-m-align-items-stretch-on-2xl{align-items:stretch}.pf-l-flex.pf-m-align-items-baseline-on-2xl{align-items:baseline}.pf-l-flex.pf-m-align-content-flex-start-on-2xl{align-content:flex-start}.pf-l-flex.pf-m-align-content-flex-end-on-2xl{align-content:flex-end}.pf-l-flex.pf-m-align-content-center-on-2xl{align-content:center}.pf-l-flex.pf-m-align-content-stretch-on-2xl{align-content:stretch}.pf-l-flex.pf-m-align-content-space-between-on-2xl{align-content:space-between}.pf-l-flex.pf-m-align-content-space-around-on-2xl{align-content:space-around}.pf-l-flex>.pf-m-align-right-on-2xl{margin-left:auto}.pf-l-flex>.pf-m-align-left-on-2xl{margin-left:0}.pf-l-flex>.pf-m-grow-on-2xl{flex-grow:1}.pf-l-flex>.pf-m-shrink-on-2xl{flex-shrink:1}.pf-l-flex>.pf-m-full-width-on-2xl{margin-right:0;width:100%}.pf-l-flex>.pf-m-flex-1-on-2xl{flex:1 0 0}.pf-l-flex>.pf-m-flex-2-on-2xl{flex:2 0 0}.pf-l-flex>.pf-m-flex-3-on-2xl{flex:3 0 0}.pf-l-flex>.pf-m-flex-4-on-2xl{flex:4 0 0}.pf-l-flex>.pf-m-flex-default-on-2xl{flex:0 1 auto}.pf-l-flex>.pf-m-flex-none-on-2xl{flex:none}.pf-l-flex>.pf-m-align-self-flex-start-on-2xl{align-self:flex-start}.pf-l-flex>.pf-m-align-self-flex-end-on-2xl{align-self:flex-end}.pf-l-flex>.pf-m-align-self-center-on-2xl{align-self:center}.pf-l-flex>.pf-m-align-self-baseline-on-2xl{align-self:baseline}.pf-l-flex>.pf-m-align-self-stretch-on-2xl{align-self:stretch}}.pf-l-flex.pf-m-space-items-none>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex.pf-m-space-items-none>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xs>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex.pf-m-space-items-xs>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex.pf-m-space-items-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex.pf-m-space-items-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex.pf-m-space-items-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex.pf-m-space-items-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex.pf-m-space-items-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-3xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex.pf-m-space-items-3xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-4xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}.pf-l-flex.pf-m-space-items-4xl>:last-child{--pf-l-flex--spacer:0}@media (min-width:576px){.pf-l-flex.pf-m-space-items-none-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex.pf-m-space-items-none-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xs-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex.pf-m-space-items-xs-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-sm-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex.pf-m-space-items-sm-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-md-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex.pf-m-space-items-md-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-lg-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex.pf-m-space-items-lg-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xl-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex.pf-m-space-items-xl-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-2xl-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex.pf-m-space-items-2xl-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-3xl-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex.pf-m-space-items-3xl-on-sm>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-4xl-on-sm>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}.pf-l-flex.pf-m-space-items-4xl-on-sm>:last-child{--pf-l-flex--spacer:0}}@media (min-width:768px){.pf-l-flex.pf-m-space-items-none-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex.pf-m-space-items-none-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xs-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex.pf-m-space-items-xs-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-sm-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex.pf-m-space-items-sm-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-md-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex.pf-m-space-items-md-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-lg-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex.pf-m-space-items-lg-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xl-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex.pf-m-space-items-xl-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-2xl-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex.pf-m-space-items-2xl-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-3xl-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex.pf-m-space-items-3xl-on-md>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-4xl-on-md>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}.pf-l-flex.pf-m-space-items-4xl-on-md>:last-child{--pf-l-flex--spacer:0}}@media (min-width:992px){.pf-l-flex.pf-m-space-items-none-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex.pf-m-space-items-none-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xs-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex.pf-m-space-items-xs-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-sm-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex.pf-m-space-items-sm-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-md-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex.pf-m-space-items-md-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-lg-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex.pf-m-space-items-lg-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xl-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex.pf-m-space-items-xl-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-2xl-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex.pf-m-space-items-2xl-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-3xl-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex.pf-m-space-items-3xl-on-lg>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-4xl-on-lg>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}.pf-l-flex.pf-m-space-items-4xl-on-lg>:last-child{--pf-l-flex--spacer:0}}@media (min-width:1200px){.pf-l-flex.pf-m-space-items-none-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex.pf-m-space-items-none-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xs-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex.pf-m-space-items-xs-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-sm-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex.pf-m-space-items-sm-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-md-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex.pf-m-space-items-md-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-lg-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex.pf-m-space-items-lg-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xl-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex.pf-m-space-items-xl-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-2xl-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex.pf-m-space-items-2xl-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-3xl-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex.pf-m-space-items-3xl-on-xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-4xl-on-xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}.pf-l-flex.pf-m-space-items-4xl-on-xl>:last-child{--pf-l-flex--spacer:0}}@media (min-width:1450px){.pf-l-flex.pf-m-space-items-none-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex.pf-m-space-items-none-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xs-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex.pf-m-space-items-xs-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-sm-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex.pf-m-space-items-sm-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-md-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex.pf-m-space-items-md-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-lg-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex.pf-m-space-items-lg-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-xl-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex.pf-m-space-items-xl-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-2xl-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex.pf-m-space-items-2xl-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-3xl-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex.pf-m-space-items-3xl-on-2xl>:last-child{--pf-l-flex--spacer:0}.pf-l-flex.pf-m-space-items-4xl-on-2xl>*{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}.pf-l-flex.pf-m-space-items-4xl-on-2xl>:last-child{--pf-l-flex--spacer:0}}.pf-l-flex .pf-m-spacer-none,.pf-l-flex .pf-m-spacer-none:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex .pf-m-spacer-xs,.pf-l-flex .pf-m-spacer-xs:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex .pf-m-spacer-sm,.pf-l-flex .pf-m-spacer-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex .pf-m-spacer-md,.pf-l-flex .pf-m-spacer-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex .pf-m-spacer-lg,.pf-l-flex .pf-m-spacer-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex .pf-m-spacer-xl,.pf-l-flex .pf-m-spacer-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex .pf-m-spacer-2xl,.pf-l-flex .pf-m-spacer-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex .pf-m-spacer-3xl,.pf-l-flex .pf-m-spacer-3xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex .pf-m-spacer-4xl,.pf-l-flex .pf-m-spacer-4xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}@media (min-width:576px){.pf-l-flex .pf-m-spacer-none-on-sm,.pf-l-flex .pf-m-spacer-none-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex .pf-m-spacer-xs-on-sm,.pf-l-flex .pf-m-spacer-xs-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex .pf-m-spacer-sm-on-sm,.pf-l-flex .pf-m-spacer-sm-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex .pf-m-spacer-md-on-sm,.pf-l-flex .pf-m-spacer-md-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex .pf-m-spacer-lg-on-sm,.pf-l-flex .pf-m-spacer-lg-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex .pf-m-spacer-xl-on-sm,.pf-l-flex .pf-m-spacer-xl-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex .pf-m-spacer-2xl-on-sm,.pf-l-flex .pf-m-spacer-2xl-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex .pf-m-spacer-3xl-on-sm,.pf-l-flex .pf-m-spacer-3xl-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex .pf-m-spacer-4xl-on-sm,.pf-l-flex .pf-m-spacer-4xl-on-sm:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}}@media (min-width:768px){.pf-l-flex .pf-m-spacer-none-on-md,.pf-l-flex .pf-m-spacer-none-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex .pf-m-spacer-xs-on-md,.pf-l-flex .pf-m-spacer-xs-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex .pf-m-spacer-sm-on-md,.pf-l-flex .pf-m-spacer-sm-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex .pf-m-spacer-md-on-md,.pf-l-flex .pf-m-spacer-md-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex .pf-m-spacer-lg-on-md,.pf-l-flex .pf-m-spacer-lg-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex .pf-m-spacer-xl-on-md,.pf-l-flex .pf-m-spacer-xl-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex .pf-m-spacer-2xl-on-md,.pf-l-flex .pf-m-spacer-2xl-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex .pf-m-spacer-3xl-on-md,.pf-l-flex .pf-m-spacer-3xl-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex .pf-m-spacer-4xl-on-md,.pf-l-flex .pf-m-spacer-4xl-on-md:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}}@media (min-width:992px){.pf-l-flex .pf-m-spacer-none-on-lg,.pf-l-flex .pf-m-spacer-none-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex .pf-m-spacer-xs-on-lg,.pf-l-flex .pf-m-spacer-xs-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex .pf-m-spacer-sm-on-lg,.pf-l-flex .pf-m-spacer-sm-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex .pf-m-spacer-md-on-lg,.pf-l-flex .pf-m-spacer-md-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex .pf-m-spacer-lg-on-lg,.pf-l-flex .pf-m-spacer-lg-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex .pf-m-spacer-xl-on-lg,.pf-l-flex .pf-m-spacer-xl-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex .pf-m-spacer-2xl-on-lg,.pf-l-flex .pf-m-spacer-2xl-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex .pf-m-spacer-3xl-on-lg,.pf-l-flex .pf-m-spacer-3xl-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex .pf-m-spacer-4xl-on-lg,.pf-l-flex .pf-m-spacer-4xl-on-lg:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}}@media (min-width:1200px){.pf-l-flex .pf-m-spacer-none-on-xl,.pf-l-flex .pf-m-spacer-none-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex .pf-m-spacer-xs-on-xl,.pf-l-flex .pf-m-spacer-xs-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex .pf-m-spacer-sm-on-xl,.pf-l-flex .pf-m-spacer-sm-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex .pf-m-spacer-md-on-xl,.pf-l-flex .pf-m-spacer-md-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex .pf-m-spacer-lg-on-xl,.pf-l-flex .pf-m-spacer-lg-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex .pf-m-spacer-xl-on-xl,.pf-l-flex .pf-m-spacer-xl-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex .pf-m-spacer-2xl-on-xl,.pf-l-flex .pf-m-spacer-2xl-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex .pf-m-spacer-3xl-on-xl,.pf-l-flex .pf-m-spacer-3xl-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex .pf-m-spacer-4xl-on-xl,.pf-l-flex .pf-m-spacer-4xl-on-xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}}@media (min-width:1450px){.pf-l-flex .pf-m-spacer-none-on-2xl,.pf-l-flex .pf-m-spacer-none-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--none)}.pf-l-flex .pf-m-spacer-xs-on-2xl,.pf-l-flex .pf-m-spacer-xs-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xs)}.pf-l-flex .pf-m-spacer-sm-on-2xl,.pf-l-flex .pf-m-spacer-sm-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--sm)}.pf-l-flex .pf-m-spacer-md-on-2xl,.pf-l-flex .pf-m-spacer-md-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--md)}.pf-l-flex .pf-m-spacer-lg-on-2xl,.pf-l-flex .pf-m-spacer-lg-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--lg)}.pf-l-flex .pf-m-spacer-xl-on-2xl,.pf-l-flex .pf-m-spacer-xl-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--xl)}.pf-l-flex .pf-m-spacer-2xl-on-2xl,.pf-l-flex .pf-m-spacer-2xl-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--2xl)}.pf-l-flex .pf-m-spacer-3xl-on-2xl,.pf-l-flex .pf-m-spacer-3xl-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--3xl)}.pf-l-flex .pf-m-spacer-4xl-on-2xl,.pf-l-flex .pf-m-spacer-4xl-on-2xl:last-child{--pf-l-flex--spacer:var(--pf-l-flex--spacer--4xl)}}.pf-c-code-block{--pf-c-code-block--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-code-block__header--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-code-block__header--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-code-block__content--PaddingTop:var(--pf-global--spacer--md);--pf-c-code-block__content--PaddingRight:var(--pf-global--spacer--md);--pf-c-code-block__content--PaddingBottom:var(--pf-global--spacer--md);--pf-c-code-block__content--PaddingLeft:var(--pf-global--spacer--md);--pf-c-code-block__pre--FontFamily:var(--pf-global--FontFamily--monospace);--pf-c-code-block__pre--FontSize:var(--pf-global--FontSize--sm);background-color:var(--pf-c-code-block--BackgroundColor)}.pf-c-code-block__header{border-bottom:var(--pf-c-code-block__header--BorderBottomWidth) solid var(--pf-c-code-block__header--BorderBottomColor);display:flex}.pf-c-code-block__actions{display:flex;margin-left:auto}.pf-c-code-block__content{padding:var(--pf-c-code-block__content--PaddingTop) var(--pf-c-code-block__content--PaddingRight) var(--pf-c-code-block__content--PaddingBottom) var(--pf-c-code-block__content--PaddingLeft)}.pf-c-code-block__pre{font-family:var(--pf-c-code-block__pre--FontFamily);font-size:var(--pf-c-code-block__pre--FontSize);overflow-wrap:break-word;white-space:pre-wrap}.pf-c-code-block__code{font-family:var(--pf-c-code-block__code--FontFamily,inherit)}.pf-l-grid{--pf-l-grid--m-gutter--GridGap:var(--pf-global--gutter);--pf-l-grid__item--GridColumnStart:auto;--pf-l-grid__item--GridColumnEnd:span 12;--pf-l-grid--item--Order:0;display:grid;grid-template-columns:repeat(12,[col-start] 1fr)}.pf-l-grid .pf-l-grid__item,.pf-l-grid>*{grid-column-end:var(--pf-l-grid__item--GridColumnEnd);grid-column-start:var(--pf-l-grid__item--GridColumnStart);min-height:0;min-width:0;order:var(--pf-l-grid--item--Order)}@media (min-width:576px){.pf-l-grid .pf-l-grid__item,.pf-l-grid>*{order:var(--pf-l-grid--item--Order-on-sm,var(--pf-l-grid--item--Order))}}@media (min-width:768px){.pf-l-grid .pf-l-grid__item,.pf-l-grid>*{order:var(--pf-l-grid--item--Order-on-md,var(--pf-l-grid--item--Order-on-sm,var(--pf-l-grid--item--Order)))}}@media (min-width:992px){.pf-l-grid .pf-l-grid__item,.pf-l-grid>*{order:var(--pf-l-grid--item--Order-on-lg,var(--pf-l-grid--item--Order-on-md,var(--pf-l-grid--item--Order-on-sm,var(--pf-l-grid--item--Order))))}}@media (min-width:1200px){.pf-l-grid .pf-l-grid__item,.pf-l-grid>*{order:var(--pf-l-grid--item--Order-on-xl,var(--pf-l-grid--item--Order-on-lg,var(--pf-l-grid--item--Order-on-md,var(--pf-l-grid--item--Order-on-sm,var(--pf-l-grid--item--Order)))))}}@media (min-width:1450px){.pf-l-grid .pf-l-grid__item,.pf-l-grid>*{order:var(--pf-l-grid--item--Order-on-2xl,var(--pf-l-grid--item--Order-on-xl,var(--pf-l-grid--item--Order-on-lg,var(--pf-l-grid--item--Order-on-md,var(--pf-l-grid--item--Order-on-sm,var(--pf-l-grid--item--Order))))))}}.pf-l-grid.pf-m-all-1-col>*{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid.pf-m-all-2-col>*{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid.pf-m-all-3-col>*{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid.pf-m-all-4-col>*{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid.pf-m-all-5-col>*{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid.pf-m-all-6-col>*{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid.pf-m-all-7-col>*{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid.pf-m-all-8-col>*{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid.pf-m-all-9-col>*{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid.pf-m-all-10-col>*{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid.pf-m-all-11-col>*{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid.pf-m-all-12-col>*{--pf-l-grid__item--GridColumnEnd:span 12}@media screen and (min-width:576px){.pf-l-grid.pf-m-all-1-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid.pf-m-all-2-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid.pf-m-all-3-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid.pf-m-all-4-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid.pf-m-all-5-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid.pf-m-all-6-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid.pf-m-all-7-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid.pf-m-all-8-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid.pf-m-all-9-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid.pf-m-all-10-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid.pf-m-all-11-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid.pf-m-all-12-col-on-sm>*{--pf-l-grid__item--GridColumnEnd:span 12}}@media screen and (min-width:768px){.pf-l-grid.pf-m-all-1-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid.pf-m-all-2-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid.pf-m-all-3-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid.pf-m-all-4-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid.pf-m-all-5-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid.pf-m-all-6-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid.pf-m-all-7-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid.pf-m-all-8-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid.pf-m-all-9-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid.pf-m-all-10-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid.pf-m-all-11-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid.pf-m-all-12-col-on-md>*{--pf-l-grid__item--GridColumnEnd:span 12}}@media screen and (min-width:992px){.pf-l-grid.pf-m-all-1-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid.pf-m-all-2-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid.pf-m-all-3-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid.pf-m-all-4-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid.pf-m-all-5-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid.pf-m-all-6-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid.pf-m-all-7-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid.pf-m-all-8-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid.pf-m-all-9-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid.pf-m-all-10-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid.pf-m-all-11-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid.pf-m-all-12-col-on-lg>*{--pf-l-grid__item--GridColumnEnd:span 12}}@media screen and (min-width:1200px){.pf-l-grid.pf-m-all-1-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid.pf-m-all-2-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid.pf-m-all-3-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid.pf-m-all-4-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid.pf-m-all-5-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid.pf-m-all-6-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid.pf-m-all-7-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid.pf-m-all-8-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid.pf-m-all-9-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid.pf-m-all-10-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid.pf-m-all-11-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid.pf-m-all-12-col-on-xl>*{--pf-l-grid__item--GridColumnEnd:span 12}}@media screen and (min-width:1450px){.pf-l-grid.pf-m-all-1-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid.pf-m-all-2-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid.pf-m-all-3-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid.pf-m-all-4-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid.pf-m-all-5-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid.pf-m-all-6-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid.pf-m-all-7-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid.pf-m-all-8-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid.pf-m-all-9-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid.pf-m-all-10-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid.pf-m-all-11-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid.pf-m-all-12-col-on-2xl>*{--pf-l-grid__item--GridColumnEnd:span 12}}.pf-l-grid>.pf-m-1-col{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid>.pf-m-2-col{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid>.pf-m-3-col{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid>.pf-m-4-col{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid>.pf-m-5-col{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid>.pf-m-6-col{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid>.pf-m-7-col{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid>.pf-m-8-col{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid>.pf-m-9-col{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid>.pf-m-10-col{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid>.pf-m-11-col{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid>.pf-m-12-col{--pf-l-grid__item--GridColumnEnd:span 12}.pf-l-grid>.pf-m-offset-1-col{--pf-l-grid__item--GridColumnStart:col-start 2}.pf-l-grid>.pf-m-offset-2-col{--pf-l-grid__item--GridColumnStart:col-start 3}.pf-l-grid>.pf-m-offset-3-col{--pf-l-grid__item--GridColumnStart:col-start 4}.pf-l-grid>.pf-m-offset-4-col{--pf-l-grid__item--GridColumnStart:col-start 5}.pf-l-grid>.pf-m-offset-5-col{--pf-l-grid__item--GridColumnStart:col-start 6}.pf-l-grid>.pf-m-offset-6-col{--pf-l-grid__item--GridColumnStart:col-start 7}.pf-l-grid>.pf-m-offset-7-col{--pf-l-grid__item--GridColumnStart:col-start 8}.pf-l-grid>.pf-m-offset-8-col{--pf-l-grid__item--GridColumnStart:col-start 9}.pf-l-grid>.pf-m-offset-9-col{--pf-l-grid__item--GridColumnStart:col-start 10}.pf-l-grid>.pf-m-offset-10-col{--pf-l-grid__item--GridColumnStart:col-start 11}.pf-l-grid>.pf-m-offset-11-col{--pf-l-grid__item--GridColumnStart:col-start 12}.pf-l-grid>.pf-m-offset-12-col{--pf-l-grid__item--GridColumnStart:col-start 13}.pf-l-grid>.pf-m-1-row{grid-row:span 1}.pf-l-grid>.pf-m-2-row{grid-row:span 2}.pf-l-grid>.pf-m-3-row{grid-row:span 3}.pf-l-grid>.pf-m-4-row{grid-row:span 4}.pf-l-grid>.pf-m-5-row{grid-row:span 5}.pf-l-grid>.pf-m-6-row{grid-row:span 6}.pf-l-grid>.pf-m-7-row{grid-row:span 7}.pf-l-grid>.pf-m-8-row{grid-row:span 8}.pf-l-grid>.pf-m-9-row{grid-row:span 9}.pf-l-grid>.pf-m-10-row{grid-row:span 10}.pf-l-grid>.pf-m-11-row{grid-row:span 11}.pf-l-grid>.pf-m-12-row{grid-row:span 12}@media screen and (min-width:576px){.pf-l-grid>.pf-m-1-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid>.pf-m-2-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid>.pf-m-3-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid>.pf-m-4-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid>.pf-m-5-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid>.pf-m-6-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid>.pf-m-7-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid>.pf-m-8-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid>.pf-m-9-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid>.pf-m-10-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid>.pf-m-11-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid>.pf-m-12-col-on-sm{--pf-l-grid__item--GridColumnEnd:span 12}.pf-l-grid>.pf-m-offset-1-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 2}.pf-l-grid>.pf-m-offset-2-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 3}.pf-l-grid>.pf-m-offset-3-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 4}.pf-l-grid>.pf-m-offset-4-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 5}.pf-l-grid>.pf-m-offset-5-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 6}.pf-l-grid>.pf-m-offset-6-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 7}.pf-l-grid>.pf-m-offset-7-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 8}.pf-l-grid>.pf-m-offset-8-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 9}.pf-l-grid>.pf-m-offset-9-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 10}.pf-l-grid>.pf-m-offset-10-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 11}.pf-l-grid>.pf-m-offset-11-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 12}.pf-l-grid>.pf-m-offset-12-col-on-sm{--pf-l-grid__item--GridColumnStart:col-start 13}.pf-l-grid>.pf-m-1-row-on-sm{grid-row:span 1}.pf-l-grid>.pf-m-2-row-on-sm{grid-row:span 2}.pf-l-grid>.pf-m-3-row-on-sm{grid-row:span 3}.pf-l-grid>.pf-m-4-row-on-sm{grid-row:span 4}.pf-l-grid>.pf-m-5-row-on-sm{grid-row:span 5}.pf-l-grid>.pf-m-6-row-on-sm{grid-row:span 6}.pf-l-grid>.pf-m-7-row-on-sm{grid-row:span 7}.pf-l-grid>.pf-m-8-row-on-sm{grid-row:span 8}.pf-l-grid>.pf-m-9-row-on-sm{grid-row:span 9}.pf-l-grid>.pf-m-10-row-on-sm{grid-row:span 10}.pf-l-grid>.pf-m-11-row-on-sm{grid-row:span 11}.pf-l-grid>.pf-m-12-row-on-sm{grid-row:span 12}}@media screen and (min-width:768px){.pf-l-grid>.pf-m-1-col-on-md{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid>.pf-m-2-col-on-md{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid>.pf-m-3-col-on-md{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid>.pf-m-4-col-on-md{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid>.pf-m-5-col-on-md{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid>.pf-m-6-col-on-md{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid>.pf-m-7-col-on-md{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid>.pf-m-8-col-on-md{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid>.pf-m-9-col-on-md{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid>.pf-m-10-col-on-md{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid>.pf-m-11-col-on-md{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid>.pf-m-12-col-on-md{--pf-l-grid__item--GridColumnEnd:span 12}.pf-l-grid>.pf-m-offset-1-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 2}.pf-l-grid>.pf-m-offset-2-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 3}.pf-l-grid>.pf-m-offset-3-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 4}.pf-l-grid>.pf-m-offset-4-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 5}.pf-l-grid>.pf-m-offset-5-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 6}.pf-l-grid>.pf-m-offset-6-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 7}.pf-l-grid>.pf-m-offset-7-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 8}.pf-l-grid>.pf-m-offset-8-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 9}.pf-l-grid>.pf-m-offset-9-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 10}.pf-l-grid>.pf-m-offset-10-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 11}.pf-l-grid>.pf-m-offset-11-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 12}.pf-l-grid>.pf-m-offset-12-col-on-md{--pf-l-grid__item--GridColumnStart:col-start 13}.pf-l-grid>.pf-m-1-row-on-md{grid-row:span 1}.pf-l-grid>.pf-m-2-row-on-md{grid-row:span 2}.pf-l-grid>.pf-m-3-row-on-md{grid-row:span 3}.pf-l-grid>.pf-m-4-row-on-md{grid-row:span 4}.pf-l-grid>.pf-m-5-row-on-md{grid-row:span 5}.pf-l-grid>.pf-m-6-row-on-md{grid-row:span 6}.pf-l-grid>.pf-m-7-row-on-md{grid-row:span 7}.pf-l-grid>.pf-m-8-row-on-md{grid-row:span 8}.pf-l-grid>.pf-m-9-row-on-md{grid-row:span 9}.pf-l-grid>.pf-m-10-row-on-md{grid-row:span 10}.pf-l-grid>.pf-m-11-row-on-md{grid-row:span 11}.pf-l-grid>.pf-m-12-row-on-md{grid-row:span 12}}@media screen and (min-width:992px){.pf-l-grid>.pf-m-1-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid>.pf-m-2-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid>.pf-m-3-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid>.pf-m-4-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid>.pf-m-5-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid>.pf-m-6-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid>.pf-m-7-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid>.pf-m-8-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid>.pf-m-9-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid>.pf-m-10-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid>.pf-m-11-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid>.pf-m-12-col-on-lg{--pf-l-grid__item--GridColumnEnd:span 12}.pf-l-grid>.pf-m-offset-1-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 2}.pf-l-grid>.pf-m-offset-2-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 3}.pf-l-grid>.pf-m-offset-3-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 4}.pf-l-grid>.pf-m-offset-4-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 5}.pf-l-grid>.pf-m-offset-5-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 6}.pf-l-grid>.pf-m-offset-6-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 7}.pf-l-grid>.pf-m-offset-7-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 8}.pf-l-grid>.pf-m-offset-8-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 9}.pf-l-grid>.pf-m-offset-9-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 10}.pf-l-grid>.pf-m-offset-10-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 11}.pf-l-grid>.pf-m-offset-11-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 12}.pf-l-grid>.pf-m-offset-12-col-on-lg{--pf-l-grid__item--GridColumnStart:col-start 13}.pf-l-grid>.pf-m-1-row-on-lg{grid-row:span 1}.pf-l-grid>.pf-m-2-row-on-lg{grid-row:span 2}.pf-l-grid>.pf-m-3-row-on-lg{grid-row:span 3}.pf-l-grid>.pf-m-4-row-on-lg{grid-row:span 4}.pf-l-grid>.pf-m-5-row-on-lg{grid-row:span 5}.pf-l-grid>.pf-m-6-row-on-lg{grid-row:span 6}.pf-l-grid>.pf-m-7-row-on-lg{grid-row:span 7}.pf-l-grid>.pf-m-8-row-on-lg{grid-row:span 8}.pf-l-grid>.pf-m-9-row-on-lg{grid-row:span 9}.pf-l-grid>.pf-m-10-row-on-lg{grid-row:span 10}.pf-l-grid>.pf-m-11-row-on-lg{grid-row:span 11}.pf-l-grid>.pf-m-12-row-on-lg{grid-row:span 12}}@media screen and (min-width:1200px){.pf-l-grid>.pf-m-1-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid>.pf-m-2-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid>.pf-m-3-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid>.pf-m-4-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid>.pf-m-5-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid>.pf-m-6-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid>.pf-m-7-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid>.pf-m-8-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid>.pf-m-9-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid>.pf-m-10-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid>.pf-m-11-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid>.pf-m-12-col-on-xl{--pf-l-grid__item--GridColumnEnd:span 12}.pf-l-grid>.pf-m-offset-1-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 2}.pf-l-grid>.pf-m-offset-2-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 3}.pf-l-grid>.pf-m-offset-3-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 4}.pf-l-grid>.pf-m-offset-4-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 5}.pf-l-grid>.pf-m-offset-5-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 6}.pf-l-grid>.pf-m-offset-6-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 7}.pf-l-grid>.pf-m-offset-7-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 8}.pf-l-grid>.pf-m-offset-8-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 9}.pf-l-grid>.pf-m-offset-9-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 10}.pf-l-grid>.pf-m-offset-10-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 11}.pf-l-grid>.pf-m-offset-11-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 12}.pf-l-grid>.pf-m-offset-12-col-on-xl{--pf-l-grid__item--GridColumnStart:col-start 13}.pf-l-grid>.pf-m-1-row-on-xl{grid-row:span 1}.pf-l-grid>.pf-m-2-row-on-xl{grid-row:span 2}.pf-l-grid>.pf-m-3-row-on-xl{grid-row:span 3}.pf-l-grid>.pf-m-4-row-on-xl{grid-row:span 4}.pf-l-grid>.pf-m-5-row-on-xl{grid-row:span 5}.pf-l-grid>.pf-m-6-row-on-xl{grid-row:span 6}.pf-l-grid>.pf-m-7-row-on-xl{grid-row:span 7}.pf-l-grid>.pf-m-8-row-on-xl{grid-row:span 8}.pf-l-grid>.pf-m-9-row-on-xl{grid-row:span 9}.pf-l-grid>.pf-m-10-row-on-xl{grid-row:span 10}.pf-l-grid>.pf-m-11-row-on-xl{grid-row:span 11}.pf-l-grid>.pf-m-12-row-on-xl{grid-row:span 12}}@media screen and (min-width:1450px){.pf-l-grid>.pf-m-1-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 1}.pf-l-grid>.pf-m-2-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 2}.pf-l-grid>.pf-m-3-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 3}.pf-l-grid>.pf-m-4-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 4}.pf-l-grid>.pf-m-5-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 5}.pf-l-grid>.pf-m-6-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 6}.pf-l-grid>.pf-m-7-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 7}.pf-l-grid>.pf-m-8-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 8}.pf-l-grid>.pf-m-9-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 9}.pf-l-grid>.pf-m-10-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 10}.pf-l-grid>.pf-m-11-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 11}.pf-l-grid>.pf-m-12-col-on-2xl{--pf-l-grid__item--GridColumnEnd:span 12}.pf-l-grid>.pf-m-offset-1-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 2}.pf-l-grid>.pf-m-offset-2-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 3}.pf-l-grid>.pf-m-offset-3-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 4}.pf-l-grid>.pf-m-offset-4-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 5}.pf-l-grid>.pf-m-offset-5-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 6}.pf-l-grid>.pf-m-offset-6-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 7}.pf-l-grid>.pf-m-offset-7-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 8}.pf-l-grid>.pf-m-offset-8-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 9}.pf-l-grid>.pf-m-offset-9-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 10}.pf-l-grid>.pf-m-offset-10-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 11}.pf-l-grid>.pf-m-offset-11-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 12}.pf-l-grid>.pf-m-offset-12-col-on-2xl{--pf-l-grid__item--GridColumnStart:col-start 13}.pf-l-grid>.pf-m-1-row-on-2xl{grid-row:span 1}.pf-l-grid>.pf-m-2-row-on-2xl{grid-row:span 2}.pf-l-grid>.pf-m-3-row-on-2xl{grid-row:span 3}.pf-l-grid>.pf-m-4-row-on-2xl{grid-row:span 4}.pf-l-grid>.pf-m-5-row-on-2xl{grid-row:span 5}.pf-l-grid>.pf-m-6-row-on-2xl{grid-row:span 6}.pf-l-grid>.pf-m-7-row-on-2xl{grid-row:span 7}.pf-l-grid>.pf-m-8-row-on-2xl{grid-row:span 8}.pf-l-grid>.pf-m-9-row-on-2xl{grid-row:span 9}.pf-l-grid>.pf-m-10-row-on-2xl{grid-row:span 10}.pf-l-grid>.pf-m-11-row-on-2xl{grid-row:span 11}.pf-l-grid>.pf-m-12-row-on-2xl{grid-row:span 12}}.pf-l-grid.pf-m-gutter{grid-gap:var(--pf-l-grid--m-gutter--GridGap)}.pf-c-description-list{--pf-c-description-list--RowGap:var(--pf-global--gutter--md);--pf-c-description-list--ColumnGap:var(--pf-global--spacer--lg);--pf-c-description-list--GridTemplateColumns--count:1;--pf-c-description-list--GridTemplateColumns--width:1fr;--pf-c-description-list--GridTemplateColumns--min:0;--pf-c-description-list--GridTemplateColumns:repeat(var(--pf-c-description-list--GridTemplateColumns--count),var(--pf-c-description-list--GridTemplateColumns--width));--pf-c-description-list__group--RowGap:var(--pf-global--spacer--sm);--pf-c-description-list__group--ColumnGap:var(--pf-global--spacer--sm);--pf-c-description-list__group--GridTemplateColumns:auto;--pf-c-description-list__group--GridTemplateRows:auto 1fr;--pf-c-description-list__group--GridColumn:auto;--pf-c-description-list--m-compact--RowGap:var(--pf-global--gutter);--pf-c-description-list--m-compact--ColumnGap:var(--pf-global--spacer--sm);--pf-c-description-list__term--Display:inline;--pf-c-description-list__term--sm--Display:flex;--pf-c-description-list__term--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-description-list__term--FontSize:var(--pf-global--FontSize--sm);--pf-c-description-list__term--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-description-list__term-icon--MinWidth:var(--pf-global--icon--FontSize--sm);--pf-c-description-list__term-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-description-list__term-icon--Color:var(--pf-global--icon--Color--light);--pf-c-description-list--m-vertical__group--GridTemplateColumns:repeat(var(--pf-c-description-list--GridTemplateColumns--count));--pf-c-description-list--m-vertical__group--GridTemplateRows:auto 1fr;--pf-c-description-list--m-horizontal__term--width:12ch;--pf-c-description-list--m-horizontal__description--width:minmax(10ch,auto);--pf-c-description-list--m-horizontal__group--GridTemplateColumns:var(--pf-c-description-list__term--width) var(--pf-c-description-list--m-horizontal__description--width);--pf-c-description-list--m-horizontal__group--GridTemplateRows:auto;--pf-c-description-list--m-1-col--GridTemplateColumns--count:1;--pf-c-description-list--m-2-col--GridTemplateColumns--count:2;--pf-c-description-list--m-3-col--GridTemplateColumns--count:3;--pf-c-description-list--m-auto-fit--GridTemplateColumns--min:15.625rem;--pf-c-description-list--m-auto-fit--GridTemplateColumns--minmax--min:var(--pf-c-description-list--m-auto-fit--GridTemplateColumns--min);--pf-c-description-list__text--m-help-text--TextDecorationColor:var(--pf-global--BorderColor--200);--pf-c-description-list__text--m-help-text--TextDecorationThickness:var(--pf-global--BorderWidth--sm);--pf-c-description-list__text--m-help-text--TextDecorationOffset:0.25rem;--pf-c-description-list__text--m-help-text--hover--TextDecorationColor:var(--pf-global--Color--100);--pf-c-description-list__text--m-help-text--focus--TextDecorationColor:var(--pf-global--Color--100);--pf-c-description-list--m-display-lg__description--FontSize:var(--pf-global--FontSize--lg);--pf-c-description-list--m-display-2xl__description--FontSize:var(--pf-global--FontSize--2xl);align-items:baseline;column-gap:var(--pf-c-description-list--ColumnGap);display:grid;grid-template-columns:var(--pf-c-description-list--GridTemplateColumns);row-gap:var(--pf-c-description-list--RowGap)}@media screen and (min-width:576px){.pf-c-description-list{--pf-c-description-list__term--Display:var(--pf-c-description-list__term--sm--Display)}}.pf-c-description-list[class*=pf-m-horizontal]{--pf-c-description-list__term--width:var(--pf-c-description-list--m-horizontal__term--width)}@media (min-width:576px){.pf-c-description-list[class*=pf-m-horizontal]{--pf-c-description-list__term--width:var(--pf-c-description-list--m-horizontal__term--width-on-sm,var(--pf-c-description-list--m-horizontal__term--width))}}@media (min-width:768px){.pf-c-description-list[class*=pf-m-horizontal]{--pf-c-description-list__term--width:var(--pf-c-description-list--m-horizontal__term--width-on-md,var(--pf-c-description-list--m-horizontal__term--width-on-sm,var(--pf-c-description-list--m-horizontal__term--width)))}}@media (min-width:992px){.pf-c-description-list[class*=pf-m-horizontal]{--pf-c-description-list__term--width:var(--pf-c-description-list--m-horizontal__term--width-on-lg,var(--pf-c-description-list--m-horizontal__term--width-on-md,var(--pf-c-description-list--m-horizontal__term--width-on-sm,var(--pf-c-description-list--m-horizontal__term--width))))}}@media (min-width:1200px){.pf-c-description-list[class*=pf-m-horizontal]{--pf-c-description-list__term--width:var(--pf-c-description-list--m-horizontal__term--width-on-xl,var(--pf-c-description-list--m-horizontal__term--width-on-lg,var(--pf-c-description-list--m-horizontal__term--width-on-md,var(--pf-c-description-list--m-horizontal__term--width-on-sm,var(--pf-c-description-list--m-horizontal__term--width)))))}}@media (min-width:1450px){.pf-c-description-list[class*=pf-m-horizontal]{--pf-c-description-list__term--width:var(--pf-c-description-list--m-horizontal__term--width-on-2xl,var(--pf-c-description-list--m-horizontal__term--width-on-xl,var(--pf-c-description-list--m-horizontal__term--width-on-lg,var(--pf-c-description-list--m-horizontal__term--width-on-md,var(--pf-c-description-list--m-horizontal__term--width-on-sm,var(--pf-c-description-list--m-horizontal__term--width))))))}}.pf-c-description-list.pf-m-inline-grid{display:inline-grid}.pf-c-description-list.pf-m-auto-column-widths{--pf-c-description-list--GridTemplateColumns--width:minmax(8ch,max-content)}.pf-c-description-list.pf-m-auto-fit{--pf-c-description-list--GridTemplateColumns--minmax--min:var(--pf-c-description-list--GridTemplateColumns--min);grid-template-columns:repeat(auto-fit,minmax(var(--pf-c-description-list--m-auto-fit--GridTemplateColumns--minmax--min),1fr))}@media (min-width:576px){.pf-c-description-list.pf-m-auto-fit{--pf-c-description-list--GridTemplateColumns--minmax--min:var(--pf-c-description-list--GridTemplateColumns--min-on-sm,var(--pf-c-description-list--GridTemplateColumns--min))}}@media (min-width:768px){.pf-c-description-list.pf-m-auto-fit{--pf-c-description-list--GridTemplateColumns--minmax--min:var(--pf-c-description-list--GridTemplateColumns--min-on-md,var(--pf-c-description-list--GridTemplateColumns--min-on-sm,var(--pf-c-description-list--GridTemplateColumns--min)))}}@media (min-width:992px){.pf-c-description-list.pf-m-auto-fit{--pf-c-description-list--GridTemplateColumns--minmax--min:var(--pf-c-description-list--GridTemplateColumns--min-on-lg,var(--pf-c-description-list--GridTemplateColumns--min-on-md,var(--pf-c-description-list--GridTemplateColumns--min-on-sm,var(--pf-c-description-list--GridTemplateColumns--min))))}}@media (min-width:1200px){.pf-c-description-list.pf-m-auto-fit{--pf-c-description-list--GridTemplateColumns--minmax--min:var(--pf-c-description-list--GridTemplateColumns--min-on-xl,var(--pf-c-description-list--GridTemplateColumns--min-on-lg,var(--pf-c-description-list--GridTemplateColumns--min-on-md,var(--pf-c-description-list--GridTemplateColumns--min-on-sm,var(--pf-c-description-list--GridTemplateColumns--min)))))}}@media (min-width:1450px){.pf-c-description-list.pf-m-auto-fit{--pf-c-description-list--GridTemplateColumns--minmax--min:var(--pf-c-description-list--GridTemplateColumns--min-on-2xl,var(--pf-c-description-list--GridTemplateColumns--min-on-xl,var(--pf-c-description-list--GridTemplateColumns--min-on-lg,var(--pf-c-description-list--GridTemplateColumns--min-on-md,var(--pf-c-description-list--GridTemplateColumns--min-on-sm,var(--pf-c-description-list--GridTemplateColumns--min))))))}}.pf-c-description-list.pf-m-compact{--pf-c-description-list--RowGap:var(--pf-c-description-list--m-compact--RowGap);--pf-c-description-list--ColumnGap:var(--pf-c-description-list--m-compact--ColumnGap)}.pf-c-description-list.pf-m-fluid{--pf-c-description-list--m-horizontal__term--width:fit-content(20ch)}.pf-c-description-list.pf-m-fill-columns{column-count:var(--pf-c-description-list--GridTemplateColumns--count);display:block;margin-bottom:calc(var(--pf-c-description-list--RowGap)*-1)}.pf-c-description-list.pf-m-fill-columns .pf-c-description-list__group,.pf-c-description-list.pf-m-fill-columns>.pf-c-card{-webkit-column-break-inside:avoid;-moz-column-break-inside:avoid;break-inside:avoid;display:inline-grid;margin-bottom:var(--pf-c-description-list--RowGap);page-break-inside:avoid;width:100%}.pf-c-description-list.pf-m-display-lg{--pf-c-description-list__description--FontSize:var(--pf-c-description-list--m-display-lg__description--FontSize)}.pf-c-description-list.pf-m-display-2xl{--pf-c-description-list__description--FontSize:var(--pf-c-description-list--m-display-2xl__description--FontSize)}.pf-c-description-list>.pf-c-card{align-self:stretch;padding:var(--pf-c-card--first-child--PaddingTop) var(--pf-c-card--child--PaddingRight) var(--pf-c-card--child--PaddingBottom) var(--pf-c-card--child--PaddingLeft)}.pf-c-description-list>.pf-c-card,.pf-c-description-list__group{align-items:baseline;column-gap:var(--pf-c-description-list__group--ColumnGap);display:grid;grid-column:var(--pf-c-description-list__group--GridColumn);grid-template-columns:var(--pf-c-description-list__group--GridTemplateColumns);grid-template-rows:var(--pf-c-description-list__group--GridTemplateRows);row-gap:var(--pf-c-description-list__group--RowGap)}.pf-c-description-list__description,.pf-c-description-list__term{min-width:0;overflow-wrap:break-word;text-align:left}.pf-c-description-list__term{display:var(--pf-c-description-list__term--Display);font-size:var(--pf-c-description-list__term--FontSize);font-weight:var(--pf-c-description-list__term--FontWeight);line-height:var(--pf-c-description-list__term--LineHeight)}.pf-c-description-list__term .pf-c-description-list__text{display:inline}.pf-c-description-list__term-icon{color:var(--pf-c-description-list__term-icon--Color);flex-shrink:0;margin-right:var(--pf-c-description-list__term-icon--MarginRight);min-width:var(--pf-c-description-list__term-icon--MinWidth)}.pf-c-description-list__description{font-size:var(--pf-c-description-list__description--FontSize,inherit)}.pf-c-description-list__text{min-width:0}.pf-c-description-list__text.pf-m-help-text{cursor:pointer;text-decoration:underline;text-decoration-color:var(--pf-c-description-list__text--m-help-text--TextDecorationColor);text-decoration-style:dashed;text-decoration-thickness:var(--pf-c-description-list__text--m-help-text--TextDecorationThickness);text-underline-offset:var(--pf-c-description-list__text--m-help-text--TextDecorationOffset)}.pf-c-description-list__text.pf-m-help-text:hover{--pf-c-description-list__text--m-help-text--TextDecorationColor:var(--pf-c-description-list__text--m-help-text--hover--TextDecorationColor)}.pf-c-description-list__text.pf-m-help-text:focus{--pf-c-description-list__text--m-help-text--TextDecorationColor:var(--pf-c-description-list__text--m-help-text--focus--TextDecorationColor)}.pf-c-description-list.pf-m-1-col{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-1-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-2-col{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-2-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-3-col{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-3-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-horizontal{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-horizontal__group--GridTemplateRows)}.pf-c-description-list.pf-m-vertical{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-vertical__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-vertical__group--GridTemplateRows)}@media (min-width:576px){.pf-c-description-list.pf-m-1-col-on-sm{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-1-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-2-col-on-sm{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-2-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-3-col-on-sm{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-3-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-horizontal-on-sm{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-horizontal__group--GridTemplateRows)}.pf-c-description-list.pf-m-vertical-on-sm{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-vertical__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-vertical__group--GridTemplateRows)}}@media (min-width:768px){.pf-c-description-list.pf-m-1-col-on-md{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-1-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-2-col-on-md{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-2-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-3-col-on-md{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-3-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-horizontal-on-md{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-horizontal__group--GridTemplateRows)}.pf-c-description-list.pf-m-vertical-on-md{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-vertical__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-vertical__group--GridTemplateRows)}}@media (min-width:992px){.pf-c-description-list.pf-m-1-col-on-lg{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-1-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-2-col-on-lg{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-2-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-3-col-on-lg{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-3-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-horizontal-on-lg{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-horizontal__group--GridTemplateRows)}.pf-c-description-list.pf-m-vertical-on-lg{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-vertical__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-vertical__group--GridTemplateRows)}}@media (min-width:1200px){.pf-c-description-list.pf-m-1-col-on-xl{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-1-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-2-col-on-xl{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-2-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-3-col-on-xl{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-3-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-horizontal-on-xl{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-horizontal__group--GridTemplateRows)}.pf-c-description-list.pf-m-vertical-on-xl{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-vertical__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-vertical__group--GridTemplateRows)}}@media (min-width:1450px){.pf-c-description-list.pf-m-1-col-on-2xl{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-1-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-2-col-on-2xl{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-2-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-3-col-on-2xl{--pf-c-description-list--GridTemplateColumns--count:var(--pf-c-description-list--m-3-col--GridTemplateColumns--count)}.pf-c-description-list.pf-m-horizontal-on-2xl{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-horizontal__group--GridTemplateRows)}.pf-c-description-list.pf-m-vertical-on-2xl{--pf-c-description-list__group--GridTemplateColumns:var(--pf-c-description-list--m-vertical__group--GridTemplateColumns);--pf-c-description-list__group--GridTemplateRows:var(--pf-c-description-list--m-vertical__group--GridTemplateRows)}}.pf-c-drawer{--pf-c-drawer__section--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-drawer__section--m-light-200--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-drawer__content--FlexBasis:100%;--pf-c-drawer__content--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-drawer__content--m-light-200--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-drawer__content--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-drawer__panel--MinWidth:50%;--pf-c-drawer__panel--MaxHeight:auto;--pf-c-drawer__panel--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-drawer__panel--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-drawer__panel--m-light-200--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-drawer__panel--TransitionDuration:var(--pf-global--TransitionDuration);--pf-c-drawer__panel--TransitionProperty:margin,transform,box-shadow,flex-basis;--pf-c-drawer__panel--FlexBasis:100%;--pf-c-drawer__panel--md--FlexBasis--min:1.5rem;--pf-c-drawer__panel--md--FlexBasis:50%;--pf-c-drawer__panel--md--FlexBasis--max:100%;--pf-c-drawer__panel--xl--MinWidth:28.125rem;--pf-c-drawer__panel--xl--FlexBasis:28.125rem;--pf-c-drawer--m-panel-bottom__panel--md--MinHeight:50%;--pf-c-drawer--m-panel-bottom__panel--xl--MinHeight:18.75rem;--pf-c-drawer--m-panel-bottom__panel--xl--FlexBasis:18.75rem;--pf-c-drawer__panel--m-resizable--FlexDirection:row;--pf-c-drawer__panel--m-resizable--md--FlexBasis--min:var(--pf-c-drawer__splitter--m-vertical--Width);--pf-c-drawer__panel--m-resizable--MinWidth:1.5rem;--pf-c-drawer--m-panel-bottom__panel--m-resizable--FlexDirection:column;--pf-c-drawer--m-panel-bottom__panel--m-resizable--md--FlexBasis--min:1.5rem;--pf-c-drawer--m-panel-bottom__panel--m-resizable--MinHeight:1.5rem;--pf-c-drawer--child--PaddingTop:var(--pf-global--spacer--md);--pf-c-drawer--child--PaddingRight:var(--pf-global--spacer--md);--pf-c-drawer--child--PaddingBottom:var(--pf-global--spacer--md);--pf-c-drawer--child--PaddingLeft:var(--pf-global--spacer--md);--pf-c-drawer--child--md--PaddingTop:var(--pf-global--spacer--lg);--pf-c-drawer--child--md--PaddingRight:var(--pf-global--spacer--lg);--pf-c-drawer--child--md--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-drawer--child--md--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-drawer--child--m-padding--PaddingTop:var(--pf-global--spacer--md);--pf-c-drawer--child--m-padding--PaddingRight:var(--pf-global--spacer--md);--pf-c-drawer--child--m-padding--PaddingBottom:var(--pf-global--spacer--md);--pf-c-drawer--child--m-padding--PaddingLeft:var(--pf-global--spacer--md);--pf-c-drawer--child--m-padding--md--PaddingTop:var(--pf-global--spacer--lg);--pf-c-drawer--child--m-padding--md--PaddingRight:var(--pf-global--spacer--lg);--pf-c-drawer--child--m-padding--md--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-drawer--child--m-padding--md--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-drawer__content--child--PaddingTop:0;--pf-c-drawer__content--child--PaddingRight:0;--pf-c-drawer__content--child--PaddingBottom:0;--pf-c-drawer__content--child--PaddingLeft:0;--pf-c-drawer__splitter--Height:0.5625rem;--pf-c-drawer__splitter--Width:100%;--pf-c-drawer__splitter--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-drawer__splitter--Cursor:row-resize;--pf-c-drawer__splitter--m-vertical--Height:100%;--pf-c-drawer__splitter--m-vertical--Width:0.5625rem;--pf-c-drawer__splitter--m-vertical--Cursor:col-resize;--pf-c-drawer--m-inline__splitter--focus--OutlineOffset:-0.0625rem;--pf-c-drawer__splitter--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-drawer__splitter--after--border-width--base:var(--pf-global--BorderWidth--sm);--pf-c-drawer__splitter--after--BorderTopWidth:0;--pf-c-drawer__splitter--after--BorderRightWidth:var(--pf-c-drawer__splitter--after--border-width--base);--pf-c-drawer__splitter--after--BorderBottomWidth:0;--pf-c-drawer__splitter--after--BorderLeftWidth:0;--pf-c-drawer--m-panel-left__splitter--after--BorderLeftWidth:var(--pf-c-drawer__splitter--after--border-width--base);--pf-c-drawer--m-panel-bottom__splitter--after--BorderBottomWidth:var(--pf-c-drawer__splitter--after--border-width--base);--pf-c-drawer--m-inline__splitter--m-vertical--Width:0.625rem;--pf-c-drawer--m-inline__splitter-handle--Left:50%;--pf-c-drawer--m-inline__splitter--after--BorderRightWidth:var(--pf-c-drawer__splitter--after--border-width--base);--pf-c-drawer--m-inline__splitter--after--BorderLeftWidth:var(--pf-c-drawer__splitter--after--border-width--base);--pf-c-drawer--m-inline--m-panel-bottom__splitter--Height:0.625rem;--pf-c-drawer--m-inline--m-panel-bottom__splitter-handle--Top:50%;--pf-c-drawer--m-inline--m-panel-bottom__splitter--after--BorderTopWidth:var(--pf-c-drawer__splitter--after--border-width--base);--pf-c-drawer__splitter-handle--Top:50%;--pf-c-drawer__splitter-handle--Left:calc(50% - var(--pf-c-drawer__splitter--after--border-width--base));--pf-c-drawer--m-panel-left__splitter-handle--Left:50%;--pf-c-drawer--m-panel-bottom__splitter-handle--Top:calc(50% - var(--pf-c-drawer__splitter--after--border-width--base));--pf-c-drawer__splitter-handle--after--BorderColor:var(--pf-global--Color--200);--pf-c-drawer__splitter-handle--after--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-drawer__splitter-handle--after--BorderRightWidth:0;--pf-c-drawer__splitter-handle--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-drawer__splitter-handle--after--BorderLeftWidth:0;--pf-c-drawer__splitter--hover__splitter-handle--after--BorderColor:var(--pf-global--Color--100);--pf-c-drawer__splitter--focus__splitter-handle--after--BorderColor:var(--pf-global--Color--100);--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderTopWidth:0;--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderBottomWidth:0;--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-drawer__splitter-handle--after--Width:0.75rem;--pf-c-drawer__splitter-handle--after--Height:0.25rem;--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Width:0.25rem;--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Height:0.75rem;--pf-c-drawer__actions--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-drawer__actions--MarginRight:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-drawer__panel--BoxShadow:none;--pf-c-drawer--m-expanded__panel--BoxShadow:var(--pf-global--BoxShadow--lg-left);--pf-c-drawer--m-expanded--m-panel-left__panel--BoxShadow:var(--pf-global--BoxShadow--lg-right);--pf-c-drawer--m-expanded--m-panel-bottom__panel--BoxShadow:var(--pf-global--BoxShadow--lg-top);--pf-c-drawer__panel--after--Width:var(--pf-global--BorderWidth--sm);--pf-c-drawer--m-panel-bottom__panel--after--Height:var(--pf-global--BorderWidth--sm);--pf-c-drawer__panel--after--BackgroundColor:transparent;--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor:var(--pf-global--BorderColor--100);--pf-c-drawer--m-inline__panel--PaddingLeft:var(--pf-c-drawer__panel--after--Width);--pf-c-drawer--m-panel-left--m-inline__panel--PaddingRight:var(--pf-c-drawer__panel--after--Width);--pf-c-drawer--m-panel-bottom--m-inline__panel--PaddingTop:var(--pf-c-drawer__panel--after--Width);display:flex;flex-direction:column;height:100%;overflow-x:hidden}@media screen and (min-width:768px){.pf-c-drawer{--pf-c-drawer--child--PaddingTop:var(--pf-c-drawer--child--md--PaddingTop);--pf-c-drawer--child--PaddingRight:var(--pf-c-drawer--child--md--PaddingRight);--pf-c-drawer--child--PaddingBottom:var(--pf-c-drawer--child--md--PaddingBottom);--pf-c-drawer--child--PaddingLeft:var(--pf-c-drawer--child--md--PaddingLeft);--pf-c-drawer--child--m-padding--PaddingTop:var(--pf-c-drawer--child--m-padding--md--PaddingTop);--pf-c-drawer--child--m-padding--PaddingRight:var(--pf-c-drawer--child--m-padding--md--PaddingRight);--pf-c-drawer--child--m-padding--PaddingBottom:var(--pf-c-drawer--child--m-padding--md--PaddingBottom);--pf-c-drawer--child--m-padding--PaddingLeft:var(--pf-c-drawer--child--m-padding--md--PaddingLeft)}}@media screen and (min-width:1200px){.pf-c-drawer{--pf-c-drawer__panel--MinWidth:var(--pf-c-drawer__panel--xl--MinWidth)}.pf-c-drawer.pf-m-panel-bottom{--pf-c-drawer__panel--MinWidth:auto;--pf-c-drawer__panel--MinHeight:var(--pf-c-drawer--m-panel-bottom__panel--xl--MinHeight)}}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border,.pf-m-resizable),.pf-c-drawer.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border,.pf-m-resizable){padding-left:var(--pf-c-drawer--m-inline__panel--PaddingLeft)}.pf-c-drawer.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);order:0;transform:translateX(-100%)}.pf-c-drawer.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__content{order:1}.pf-c-drawer.pf-m-panel-bottom>.pf-c-drawer__main{flex-direction:column}.pf-c-drawer.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(-100%)}.pf-c-drawer.pf-m-expanded.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-expanded.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateY(-100%)}.pf-c-drawer.pf-m-resizing{--pf-c-drawer__panel--TransitionProperty:none;pointer-events:none}.pf-c-drawer.pf-m-resizing .pf-c-drawer__splitter{pointer-events:auto}.pf-c-drawer__section{background-color:var(--pf-c-drawer__section--BackgroundColor);flex-grow:0}.pf-c-drawer__section.pf-m-no-background{--pf-c-drawer__section--BackgroundColor:transparent}.pf-c-drawer__section.pf-m-light-200{--pf-c-drawer__section--BackgroundColor:var(--pf-c-drawer__section--m-light-200--BackgroundColor)}.pf-c-drawer__main{display:flex;flex:1;overflow:hidden}.pf-c-drawer__content,.pf-c-drawer__panel,.pf-c-drawer__panel-main{display:flex;flex-direction:column;flex-shrink:0;overflow:auto}.pf-c-drawer__content{background-color:var(--pf-c-drawer__content--BackgroundColor);flex-basis:var(--pf-c-drawer__content--FlexBasis);order:0;z-index:var(--pf-c-drawer__content--ZIndex)}.pf-c-drawer__content.pf-m-no-background{--pf-c-drawer__content--BackgroundColor:transparent}.pf-c-drawer__content.pf-m-light-200{--pf-c-drawer__content--BackgroundColor:var(--pf-c-drawer__content--m-light-200--BackgroundColor)}.pf-c-drawer__content>.pf-c-drawer__body{padding:var(--pf-c-drawer__content--child--PaddingTop) var(--pf-c-drawer__content--child--PaddingRight) var(--pf-c-drawer__content--child--PaddingBottom) var(--pf-c-drawer__content--child--PaddingLeft)}.pf-c-drawer__panel{-webkit-overflow-scrolling:touch;background-color:var(--pf-c-drawer__panel--BackgroundColor);box-shadow:var(--pf-c-drawer__panel--BoxShadow);flex-basis:var(--pf-c-drawer__panel--FlexBasis);max-height:var(--pf-c-drawer__panel--MaxHeight);order:1;overflow:auto;position:relative;transition-duration:var(--pf-c-drawer__panel--TransitionDuration);transition-property:var(--pf-c-drawer__panel--TransitionProperty);z-index:var(--pf-c-drawer__panel--ZIndex)}.pf-c-drawer__panel:after{background-color:var(--pf-c-drawer__panel--after--BackgroundColor);content:"";height:100%;left:0;position:absolute;top:0;width:var(--pf-c-drawer__panel--after--Width)}.pf-c-drawer__panel.pf-m-no-background{--pf-c-drawer__panel--BackgroundColor:transparent}.pf-c-drawer__panel.pf-m-light-200{--pf-c-drawer__panel--BackgroundColor:var(--pf-c-drawer__panel--m-light-200--BackgroundColor)}@media screen and (min-width:768px){.pf-c-drawer__panel{--pf-c-drawer__panel--FlexBasis:max(var(--pf-c-drawer__panel--md--FlexBasis--min),min(var(--pf-c-drawer__panel--md--FlexBasis),var(--pf-c-drawer__panel--md--FlexBasis--max)))}}@media screen and (min-width:1200px){.pf-c-drawer__panel{--pf-c-drawer__panel--md--FlexBasis:var(--pf-c-drawer__panel--xl--FlexBasis)}.pf-c-drawer.pf-m-panel-bottom .pf-c-drawer__panel{--pf-c-drawer__panel--md--FlexBasis:var(--pf-c-drawer--m-panel-bottom__panel--xl--FlexBasis)}}.pf-c-drawer__panel-main{flex-grow:1}@keyframes pf-remove-tab-focus{to{visibility:hidden}}.pf-c-drawer__panel[hidden]{animation-delay:var(--pf-c-drawer__panel--TransitionDuration);animation-fill-mode:forwards;animation-name:pf-remove-tab-focus}.pf-c-drawer__head{display:grid;grid-auto-columns:max-content;grid-template-columns:auto}.pf-c-drawer__head>*{grid-column:1}.pf-c-drawer__actions{align-self:baseline;display:flex;grid-column:2;grid-row:1;margin-right:var(--pf-c-drawer__actions--MarginRight);margin-top:var(--pf-c-drawer__actions--MarginTop)}.pf-c-drawer__body{min-height:0;padding:var(--pf-c-drawer--child--PaddingTop) var(--pf-c-drawer--child--PaddingRight) var(--pf-c-drawer--child--PaddingBottom) var(--pf-c-drawer--child--PaddingLeft)}.pf-c-drawer__body.pf-m-no-padding{padding:0}.pf-c-drawer__body.pf-m-no-padding>.pf-c-drawer__actions,.pf-c-drawer__body.pf-m-no-padding>.pf-c-drawer__head>.pf-c-drawer__actions{margin-right:0;margin-top:0}.pf-c-drawer__body.pf-m-padding{padding:var(--pf-c-drawer--child--m-padding--PaddingTop) var(--pf-c-drawer--child--m-padding--PaddingRight) var(--pf-c-drawer--child--m-padding--PaddingBottom) var(--pf-c-drawer--child--m-padding--PaddingLeft)}.pf-c-drawer__body:not(.pf-m-no-padding)+*{padding-top:0}.pf-c-drawer__body:last-child{flex:1 1}.pf-c-drawer__body>.pf-c-page__main{height:100%}.pf-c-drawer__splitter{background-color:var(--pf-c-drawer__splitter--BackgroundColor);cursor:var(--pf-c-drawer__splitter--Cursor);display:none;height:var(--pf-c-drawer__splitter--Height);position:relative;visibility:hidden;width:var(--pf-c-drawer__splitter--Width)}.pf-c-drawer__splitter.pf-m-vertical{--pf-c-drawer__splitter--Height:var(--pf-c-drawer__splitter--m-vertical--Height);--pf-c-drawer__splitter--Width:var(--pf-c-drawer__splitter--m-vertical--Width);--pf-c-drawer__splitter--Cursor:var(--pf-c-drawer__splitter--m-vertical--Cursor);--pf-c-drawer__splitter-handle--after--Width:var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Width);--pf-c-drawer__splitter-handle--after--Height:var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Height);--pf-c-drawer__splitter-handle--after--BorderTopWidth:var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderTopWidth);--pf-c-drawer__splitter-handle--after--BorderRightWidth:var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderRightWidth);--pf-c-drawer__splitter-handle--after--BorderBottomWidth:var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderBottomWidth);--pf-c-drawer__splitter-handle--after--BorderLeftWidth:var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderLeftWidth)}.pf-c-drawer__splitter:hover{--pf-c-drawer__splitter-handle--after--BorderColor:var(--pf-c-drawer__splitter--hover__splitter-handle--after--BorderColor)}.pf-c-drawer__splitter:focus{--pf-c-drawer__splitter-handle--after--BorderColor:var(--pf-c-drawer__splitter--focus__splitter-handle--after--BorderColor)}.pf-c-drawer__splitter:after{border:solid var(--pf-c-drawer__splitter--after--BorderColor);border-width:var(--pf-c-drawer__splitter--after--BorderTopWidth) var(--pf-c-drawer__splitter--after--BorderRightWidth) var(--pf-c-drawer__splitter--after--BorderBottomWidth) var(--pf-c-drawer__splitter--after--BorderLeftWidth);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-drawer__splitter-handle{left:var(--pf-c-drawer__splitter-handle--Left);position:absolute;top:var(--pf-c-drawer__splitter-handle--Top);transform:translate(-50%,-50%)}.pf-c-drawer__splitter-handle:after{border-color:var(--pf-c-drawer__splitter-handle--after--BorderColor);border-style:solid;border-width:var(--pf-c-drawer__splitter-handle--after--BorderTopWidth) var(--pf-c-drawer__splitter-handle--after--BorderRightWidth) var(--pf-c-drawer__splitter-handle--after--BorderBottomWidth) var(--pf-c-drawer__splitter-handle--after--BorderLeftWidth);content:"";display:block;height:var(--pf-c-drawer__splitter-handle--after--Height);width:var(--pf-c-drawer__splitter-handle--after--Width)}@media screen and (min-width:768px){.pf-c-drawer{min-width:var(--pf-c-drawer__panel--MinWidth)}.pf-c-drawer.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{box-shadow:var(--pf-c-drawer--m-expanded__panel--BoxShadow)}.pf-c-drawer>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable{--pf-c-drawer__panel--md--FlexBasis--min:var(--pf-c-drawer__panel--m-resizable--md--FlexBasis--min);flex-direction:var(--pf-c-drawer__panel--m-resizable--FlexDirection);min-width:var(--pf-c-drawer__panel--m-resizable--MinWidth)}.pf-c-drawer>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable:after{height:0;width:0}.pf-c-drawer>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable>.pf-c-drawer__splitter{flex-shrink:0}.pf-c-drawer>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable>.pf-c-drawer__panel-main{flex-shrink:1}.pf-c-drawer.pf-m-panel-left{--pf-c-drawer--m-expanded__panel--BoxShadow:var(--pf-c-drawer--m-expanded--m-panel-left__panel--BoxShadow)}.pf-c-drawer.pf-m-panel-left.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border,.pf-m-resizable),.pf-c-drawer.pf-m-panel-left.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border,.pf-m-resizable){padding-left:0;padding-right:var(--pf-c-drawer--m-panel-left--m-inline__panel--PaddingRight)}.pf-c-drawer.pf-m-panel-left.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel:after{left:auto;right:0}.pf-c-drawer.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable>.pf-c-drawer__splitter{--pf-c-drawer__splitter-handle--Left:var(--pf-c-drawer--m-panel-left__splitter-handle--Left);--pf-c-drawer__splitter--after--BorderRightWidth:0;--pf-c-drawer__splitter--after--BorderLeftWidth:var(--pf-c-drawer--m-panel-left__splitter--after--BorderLeftWidth);order:1}.pf-c-drawer.pf-m-panel-bottom{--pf-c-drawer--m-expanded__panel--BoxShadow:var(--pf-c-drawer--m-expanded--m-panel-bottom__panel--BoxShadow);--pf-c-drawer__panel--MaxHeight:100%;--pf-c-drawer__panel--FlexBasis--min:var(--pf-c-drawer--m-panel-bottom__panel--FlexBasis--min);min-height:var(--pf-c-drawer--m-panel-bottom__panel--md--MinHeight);min-width:auto}.pf-c-drawer.pf-m-panel-bottom.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border,.pf-m-resizable),.pf-c-drawer.pf-m-panel-bottom.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border,.pf-m-resizable){padding-left:0;padding-top:var(--pf-c-drawer--m-panel-bottom--m-inline__panel--PaddingTop)}.pf-c-drawer.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel:after{height:var(--pf-c-drawer--m-panel-bottom__panel--after--Height);left:auto;top:0;width:100%}.pf-c-drawer.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable{--pf-c-drawer__panel--md--FlexBasis--min:var(--pf-c-drawer--m-panel-bottom__panel--m-resizable--md--FlexBasis--min);--pf-c-drawer__panel--m-resizable--FlexDirection:var(--pf-c-drawer--m-panel-bottom__panel--m-resizable--FlexDirection);--pf-c-drawer__panel--m-resizable--MinWidth:0;min-height:var(--pf-c-drawer--m-panel-bottom__panel--m-resizable--MinHeight)}.pf-c-drawer.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable>.pf-c-drawer__splitter{--pf-c-drawer__splitter-handle--Top:var(--pf-c-drawer--m-panel-bottom__splitter-handle--Top);--pf-c-drawer__splitter--after--BorderRightWidth:0;--pf-c-drawer__splitter--after--BorderBottomWidth:var(--pf-c-drawer--m-panel-bottom__splitter--after--BorderBottomWidth)}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable>.pf-c-drawer__splitter{--pf-c-drawer__splitter--m-vertical--Width:var(--pf-c-drawer--m-inline__splitter--m-vertical--Width);--pf-c-drawer__splitter-handle--Left:var(--pf-c-drawer--m-inline__splitter-handle--Left);--pf-c-drawer__splitter--after--BorderRightWidth:var(--pf-c-drawer--m-inline__splitter--after--BorderRightWidth);--pf-c-drawer__splitter--after--BorderLeftWidth:var(--pf-c-drawer--m-inline__splitter--after--BorderLeftWidth);outline-offset:var(--pf-c-drawer--m-inline__splitter--focus--OutlineOffset)}.pf-c-drawer.pf-m-inline.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-resizable>.pf-c-drawer__splitter{--pf-c-drawer__splitter--Height:var(--pf-c-drawer--m-inline--m-panel-bottom__splitter--Height);--pf-c-drawer__splitter-handle--Top:var(--pf-c-drawer--m-inline--m-panel-bottom__splitter-handle--Top);--pf-c-drawer__splitter--after--BorderTopWidth:var(--pf-c-drawer--m-inline--m-panel-bottom__splitter--after--BorderTopWidth);--pf-c-drawer__splitter--after--BorderRightWidth:0;--pf-c-drawer__splitter--after--BorderLeftWidth:0}.pf-c-drawer.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-no-border,.pf-c-drawer>.pf-c-drawer__main>.pf-c-drawer__panel.pf-m-no-border{--pf-c-drawer--m-expanded__panel--BoxShadow:none}.pf-c-drawer__splitter{display:block;visibility:visible}}@media (min-width:768px){.pf-c-drawer__panel.pf-m-width-25{--pf-c-drawer__panel--md--FlexBasis:25%}.pf-c-drawer__panel.pf-m-width-33{--pf-c-drawer__panel--md--FlexBasis:33%}.pf-c-drawer__panel.pf-m-width-50{--pf-c-drawer__panel--md--FlexBasis:50%}.pf-c-drawer__panel.pf-m-width-66{--pf-c-drawer__panel--md--FlexBasis:66%}.pf-c-drawer__panel.pf-m-width-75{--pf-c-drawer__panel--md--FlexBasis:75%}.pf-c-drawer__panel.pf-m-width-100{--pf-c-drawer__panel--md--FlexBasis:100%}}@media (min-width:992px){.pf-c-drawer__panel.pf-m-width-25-on-lg{--pf-c-drawer__panel--md--FlexBasis:25%}.pf-c-drawer__panel.pf-m-width-33-on-lg{--pf-c-drawer__panel--md--FlexBasis:33%}.pf-c-drawer__panel.pf-m-width-50-on-lg{--pf-c-drawer__panel--md--FlexBasis:50%}.pf-c-drawer__panel.pf-m-width-66-on-lg{--pf-c-drawer__panel--md--FlexBasis:66%}.pf-c-drawer__panel.pf-m-width-75-on-lg{--pf-c-drawer__panel--md--FlexBasis:75%}.pf-c-drawer__panel.pf-m-width-100-on-lg{--pf-c-drawer__panel--md--FlexBasis:100%}}@media (min-width:1200px){.pf-c-drawer__panel.pf-m-width-25-on-xl{--pf-c-drawer__panel--md--FlexBasis:25%}.pf-c-drawer__panel.pf-m-width-33-on-xl{--pf-c-drawer__panel--md--FlexBasis:33%}.pf-c-drawer__panel.pf-m-width-50-on-xl{--pf-c-drawer__panel--md--FlexBasis:50%}.pf-c-drawer__panel.pf-m-width-66-on-xl{--pf-c-drawer__panel--md--FlexBasis:66%}.pf-c-drawer__panel.pf-m-width-75-on-xl{--pf-c-drawer__panel--md--FlexBasis:75%}.pf-c-drawer__panel.pf-m-width-100-on-xl{--pf-c-drawer__panel--md--FlexBasis:100%}}@media (min-width:1450px){.pf-c-drawer__panel.pf-m-width-25-on-2xl{--pf-c-drawer__panel--md--FlexBasis:25%}.pf-c-drawer__panel.pf-m-width-33-on-2xl{--pf-c-drawer__panel--md--FlexBasis:33%}.pf-c-drawer__panel.pf-m-width-50-on-2xl{--pf-c-drawer__panel--md--FlexBasis:50%}.pf-c-drawer__panel.pf-m-width-66-on-2xl{--pf-c-drawer__panel--md--FlexBasis:66%}.pf-c-drawer__panel.pf-m-width-75-on-2xl{--pf-c-drawer__panel--md--FlexBasis:75%}.pf-c-drawer__panel.pf-m-width-100-on-2xl{--pf-c-drawer__panel--md--FlexBasis:100%}}@media (min-width:768px){.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__content,.pf-c-drawer.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__content{flex-shrink:1}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel,.pf-c-drawer.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel{--pf-c-drawer--m-expanded__panel--BoxShadow:none}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after,.pf-c-drawer.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after{background-color:var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor)}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__content{overflow-x:auto}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(100%)}.pf-c-drawer.pf-m-inline.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;margin-right:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(-100%)}.pf-c-drawer.pf-m-inline.pf-m-panel-left.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateY(100%)}.pf-c-drawer.pf-m-inline.pf-m-panel-bottom.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:0;transform:translateY(0)}.pf-c-drawer.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-static.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:none;visibility:hidden}}@media (min-width:992px){.pf-c-drawer.pf-m-inline-on-lg>.pf-c-drawer__main>.pf-c-drawer__content,.pf-c-drawer.pf-m-static-on-lg>.pf-c-drawer__main>.pf-c-drawer__content{flex-shrink:1}.pf-c-drawer.pf-m-inline-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel,.pf-c-drawer.pf-m-static-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel{--pf-c-drawer--m-expanded__panel--BoxShadow:none}.pf-c-drawer.pf-m-inline-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after,.pf-c-drawer.pf-m-static-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after{background-color:var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor)}.pf-c-drawer.pf-m-inline-on-lg>.pf-c-drawer__main>.pf-c-drawer__content{overflow-x:auto}.pf-c-drawer.pf-m-inline-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(100%)}.pf-c-drawer.pf-m-inline-on-lg.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;margin-right:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(-100%)}.pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateY(100%)}.pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-bottom.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:0;transform:translateY(0)}.pf-c-drawer.pf-m-static-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static-on-lg.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-static-on-lg.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static-on-lg>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:none;visibility:hidden}}@media (min-width:1200px){.pf-c-drawer.pf-m-inline-on-xl>.pf-c-drawer__main>.pf-c-drawer__content,.pf-c-drawer.pf-m-static-on-xl>.pf-c-drawer__main>.pf-c-drawer__content{flex-shrink:1}.pf-c-drawer.pf-m-inline-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel,.pf-c-drawer.pf-m-static-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel{--pf-c-drawer--m-expanded__panel--BoxShadow:none}.pf-c-drawer.pf-m-inline-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after,.pf-c-drawer.pf-m-static-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after{background-color:var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor)}.pf-c-drawer.pf-m-inline-on-xl>.pf-c-drawer__main>.pf-c-drawer__content{overflow-x:auto}.pf-c-drawer.pf-m-inline-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(100%)}.pf-c-drawer.pf-m-inline-on-xl.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;margin-right:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(-100%)}.pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateY(100%)}.pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-bottom.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:0;transform:translateY(0)}.pf-c-drawer.pf-m-static-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static-on-xl.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-static-on-xl.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static-on-xl>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:none;visibility:hidden}}@media (min-width:1450px){.pf-c-drawer.pf-m-inline-on-2xl>.pf-c-drawer__main>.pf-c-drawer__content,.pf-c-drawer.pf-m-static-on-2xl>.pf-c-drawer__main>.pf-c-drawer__content{flex-shrink:1}.pf-c-drawer.pf-m-inline-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel,.pf-c-drawer.pf-m-static-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel{--pf-c-drawer--m-expanded__panel--BoxShadow:none}.pf-c-drawer.pf-m-inline-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after,.pf-c-drawer.pf-m-static-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel:not(.pf-m-no-border):after{background-color:var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor)}.pf-c-drawer.pf-m-inline-on-2xl>.pf-c-drawer__main>.pf-c-drawer__content{overflow-x:auto}.pf-c-drawer.pf-m-inline-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(100%)}.pf-c-drawer.pf-m-inline-on-2xl.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-left:0;margin-right:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateX(-100%)}.pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:unset;visibility:visible}.pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:calc(var(--pf-c-drawer__panel--FlexBasis)*-1);transform:translateY(100%)}.pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-bottom.pf-m-expanded>.pf-c-drawer__main>.pf-c-drawer__panel{margin-bottom:0;transform:translateY(0)}.pf-c-drawer.pf-m-static-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static-on-2xl.pf-m-panel-left>.pf-c-drawer__main>.pf-c-drawer__panel{margin-right:0;transform:translateX(0)}.pf-c-drawer.pf-m-static-on-2xl.pf-m-panel-bottom>.pf-c-drawer__main>.pf-c-drawer__panel{transform:translateX(0)}.pf-c-drawer.pf-m-static-on-2xl>.pf-c-drawer__main>.pf-c-drawer__panel>.pf-c-drawer__body>.pf-c-drawer__head .pf-c-drawer__close{display:none;visibility:hidden}}:where(.pf-theme-dark) .pf-c-drawer{--pf-c-drawer__panel--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-drawer__splitter--BackgroundColor:transparent}:where(.pf-theme-dark) .pf-c-drawer.pf-m-inline,:where(.pf-theme-dark) .pf-c-drawer.pf-m-static{--pf-c-drawer__panel--BackgroundColor:var(--pf-global--BackgroundColor--100)}.pf-c-input-group{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-input-group--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-input-group--child--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-input-group__text--FontSize:var(--pf-global--FontSize--md);--pf-c-input-group__text--PaddingRight:var(--pf-global--spacer--sm);--pf-c-input-group__text--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-input-group__text--Color:var(--pf-global--Color--dark-200);--pf-c-input-group__text--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-input-group__text--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-input-group__text--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-input-group__text--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-input-group__text--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-input-group__text--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-input-group__textarea--MinHeight:var(--pf-global--spacer--xl);--pf-c-input-group__text--m-disabled--Color:var(--pf-global--disabled-color--100);--pf-c-input-group__text--m-disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-input-group__text--m-disabled--BorderBottomColor:transparent;--pf-c-input-group--c-form-control--invalid--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-input-group--c-form-control--MarginRight:0;background-color:var(--pf-c-input-group--BackgroundColor);color:var(--pf-global--Color--100);display:flex;width:100%}.pf-c-input-group.pf-m-plain{--pf-c-input-group--BackgroundColor:transparent}.pf-c-input-group>*+*{margin-left:-1px}.pf-c-input-group>:focus,.pf-c-input-group>:focus-within{z-index:var(--pf-c-input-group--child--ZIndex)}.pf-c-input-group .pf-c-form-control[aria-invalid=true]:not(:last-child){margin-right:var(--pf-c-input-group--c-form-control--MarginRight)}.pf-c-input-group input:not([type=checkbox]):not([type=radio]),.pf-c-input-group textarea{flex:2;min-width:0}.pf-c-input-group textarea{min-height:var(--pf-c-input-group__textarea--MinHeight)}.pf-c-input-group__text{align-items:center;background-color:var(--pf-c-input-group__text--BackgroundColor);border:var(--pf-c-input-group__text--BorderWidth) solid;border-color:var(--pf-c-input-group__text--BorderTopColor) var(--pf-c-input-group__text--BorderRightColor) var(--pf-c-input-group__text--BorderBottomColor) var(--pf-c-input-group__text--BorderLeftColor);color:var(--pf-c-input-group__text--Color);display:flex;font-size:var(--pf-c-input-group__text--FontSize);padding-left:var(--pf-c-input-group__text--PaddingLeft);padding-right:var(--pf-c-input-group__text--PaddingRight);text-align:center}label.pf-c-input-group__text{cursor:pointer}.pf-c-input-group__text.pf-m-plain{--pf-c-input-group__text--BorderWidth:0;margin-left:0}.pf-c-input-group__text.pf-m-disabled{--pf-c-input-group__text--Color:var(--pf-c-input-group__text--m-disabled--Color);--pf-c-input-group__text--BackgroundColor:var(--pf-c-input-group__text--m-disabled--BackgroundColor);--pf-c-input-group__text--BorderBottomColor:var(--pf-c-input-group__text--m-disabled--BorderBottomColor)}:where(.pf-theme-dark) .pf-c-input-group{--pf-c-input-group--BackgroundColor:transparent;--pf-c-input-group__text--BorderTopColor:transparent;--pf-c-input-group__text--BorderRightColor:transparent;--pf-c-input-group__text--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-input-group__text--BorderLeftColor:transparent;--pf-c-input-group__text--BackgroundColor:var(--pf-global--palette--black-600);--pf-c-input-group__text--m-disabled--Color:var(--pf-global--palette--black-100);--pf-c-input-group__text--m-disabled--BackgroundColor:var(--pf-global--disabled-color--200)}:where(.pf-theme-dark) .pf-c-input-group>*+*{border-left:1px solid var(--pf-global--palette--black-700);margin-left:0}:where(.pf-theme-dark) .pf-c-input-group__text{--pf-c-input-group__text--BorderTopColor:transparent;--pf-c-input-group__text--BorderRightColor:transparent;--pf-c-input-group__text--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-input-group__text--BorderLeftColor:transparent}:where(.pf-theme-dark) .pf-c-input-group__text.pf-m-plain{--pf-c-input-group__text--BackgroundColor:transparent}:where(.pf-theme-dark) .pf-c-input-group__text.pf-m-disabled{--pf-c-input-group__text--BackgroundColor:var(--pf-c-input-group__text--m-disabled--BackgroundColor);color:var(--pf-c-input-group__text--m-disabled--Color)}.pf-c-toolbar__content,.pf-c-toolbar__content-section,.pf-c-toolbar__group,.pf-c-toolbar__item{--pf-hidden-visible--visible--Visibility:visible;--pf-hidden-visible--hidden--Display:none;--pf-hidden-visible--hidden--Visibility:hidden;--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility);display:var(--pf-hidden-visible--Display);visibility:var(--pf-hidden-visible--Visibility)}.pf-m-hidden.pf-c-toolbar__content,.pf-m-hidden.pf-c-toolbar__content-section,.pf-m-hidden.pf-c-toolbar__group,.pf-m-hidden.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}@media screen and (min-width:576px){.pf-m-hidden-on-sm.pf-c-toolbar__content,.pf-m-hidden-on-sm.pf-c-toolbar__content-section,.pf-m-hidden-on-sm.pf-c-toolbar__group,.pf-m-hidden-on-sm.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-sm.pf-c-toolbar__content,.pf-m-visible-on-sm.pf-c-toolbar__content-section,.pf-m-visible-on-sm.pf-c-toolbar__group,.pf-m-visible-on-sm.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-m-hidden-on-md.pf-c-toolbar__content,.pf-m-hidden-on-md.pf-c-toolbar__content-section,.pf-m-hidden-on-md.pf-c-toolbar__group,.pf-m-hidden-on-md.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-md.pf-c-toolbar__content,.pf-m-visible-on-md.pf-c-toolbar__content-section,.pf-m-visible-on-md.pf-c-toolbar__group,.pf-m-visible-on-md.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:992px){.pf-m-hidden-on-lg.pf-c-toolbar__content,.pf-m-hidden-on-lg.pf-c-toolbar__content-section,.pf-m-hidden-on-lg.pf-c-toolbar__group,.pf-m-hidden-on-lg.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-lg.pf-c-toolbar__content,.pf-m-visible-on-lg.pf-c-toolbar__content-section,.pf-m-visible-on-lg.pf-c-toolbar__group,.pf-m-visible-on-lg.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1200px){.pf-m-hidden-on-xl.pf-c-toolbar__content,.pf-m-hidden-on-xl.pf-c-toolbar__content-section,.pf-m-hidden-on-xl.pf-c-toolbar__group,.pf-m-hidden-on-xl.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-xl.pf-c-toolbar__content,.pf-m-visible-on-xl.pf-c-toolbar__content-section,.pf-m-visible-on-xl.pf-c-toolbar__group,.pf-m-visible-on-xl.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1450px){.pf-m-hidden-on-2xl.pf-c-toolbar__content,.pf-m-hidden-on-2xl.pf-c-toolbar__content-section,.pf-m-hidden-on-2xl.pf-c-toolbar__group,.pf-m-hidden-on-2xl.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-2xl.pf-c-toolbar__content,.pf-m-visible-on-2xl.pf-c-toolbar__content-section,.pf-m-visible-on-2xl.pf-c-toolbar__group,.pf-m-visible-on-2xl.pf-c-toolbar__item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}.pf-c-toolbar{--pf-c-toolbar--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-toolbar--RowGap:var(--pf-global--spacer--lg);--pf-c-toolbar--PaddingTop:var(--pf-global--spacer--md);--pf-c-toolbar--PaddingBottom:var(--pf-global--spacer--md);--pf-c-toolbar__item--Display:block;--pf-c-toolbar__item--MinWidth--base:auto;--pf-c-toolbar__group--Display:flex;--pf-c-toolbar--m-sticky--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-toolbar--m-sticky--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-toolbar__content--Display:flex;--pf-c-toolbar__content--PaddingRight:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingLeft:var(--pf-global--spacer--md);--pf-c-toolbar__content-section--Display:flex;--pf-c-toolbar--m-page-insets--inset:var(--pf-global--spacer--md);--pf-c-toolbar--m-page-insets--xl--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__expandable-content--Display:grid;--pf-c-toolbar__expandable-content--PaddingTop:var(--pf-c-toolbar--RowGap);--pf-c-toolbar__expandable-content--PaddingRight:var(--pf-c-toolbar__content--PaddingRight);--pf-c-toolbar__expandable-content--PaddingBottom:var(--pf-global--spacer--md);--pf-c-toolbar__expandable-content--PaddingLeft:var(--pf-c-toolbar__content--PaddingLeft);--pf-c-toolbar__expandable-content--lg--PaddingRight:0;--pf-c-toolbar__expandable-content--lg--PaddingBottom:0;--pf-c-toolbar__expandable-content--lg--PaddingLeft:0;--pf-c-toolbar__expandable-content--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-toolbar__expandable-content--BoxShadow:var(--pf-global--BoxShadow--md-bottom);--pf-c-toolbar__expandable-content--BackgroundColor:var(--pf-c-toolbar--BackgroundColor);--pf-c-toolbar__expandable-content--m-expanded--GridRowGap:var(--pf-global--gutter--md);--pf-c-toolbar__group--m-chip-container--MarginTop:calc(var(--pf-global--spacer--md)*-1);--pf-c-toolbar__group--m-chip-container__item--MarginTop:var(--pf-global--spacer--md);--pf-c-toolbar--spacer--base:var(--pf-global--spacer--md);--pf-c-toolbar__item--spacer:var(--pf-c-toolbar--spacer--base);--pf-c-toolbar__group--spacer:var(--pf-c-toolbar--spacer--base);--pf-c-toolbar__item--Width:auto;--pf-c-toolbar__group--m-toggle-group--spacer:var(--pf-global--spacer--sm);--pf-c-toolbar__group--m-toggle-group--m-show--spacer:var(--pf-c-toolbar__group--spacer);--pf-c-toolbar__group--m-icon-button-group--spacer:var(--pf-c-toolbar__group--spacer);--pf-c-toolbar__group--m-icon-button-group--space-items:0;--pf-c-toolbar__group--m-button-group--spacer:var(--pf-c-toolbar__group--spacer);--pf-c-toolbar__group--m-button-group--space-items:var(--pf-global--spacer--sm);--pf-c-toolbar__group--m-filter-group--spacer:var(--pf-c-toolbar__group--spacer);--pf-c-toolbar__group--m-filter-group--space-items:0;--pf-c-toolbar__item--m-overflow-menu--spacer:var(--pf-c-toolbar__item--spacer);--pf-c-toolbar__item--m-bulk-select--spacer:var(--pf-global--spacer--lg);--pf-c-toolbar__expand-all-icon--Rotate:0;--pf-c-toolbar__expand-all-icon--Transition:var(--pf-global--Transition);--pf-c-toolbar__item--m-expand-all--m-expanded__expand-all-icon--Rotate:90deg;--pf-c-toolbar__item--m-search-filter--spacer:var(--pf-global--spacer--sm);--pf-c-toolbar__item--m-chip-group--spacer:var(--pf-global--spacer--sm);--pf-c-toolbar__item--m-label--spacer:var(--pf-c-toolbar__item--spacer);--pf-c-toolbar__item--m-label--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-toolbar__expandable-content__item--m-label--MarginBottom:calc(var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap)*-1 + var(--pf-global--spacer--sm));--pf-c-toolbar__expandable-content__item--m-label--FontSize:var(--pf-global--FontSize--sm);--pf-c-toolbar__toggle--m-expanded__c-button--m-plain--Color:var(--pf-global--Color--100);--pf-c-toolbar--c-divider--m-vertical--spacer:var(--pf-c-toolbar--spacer--base);--pf-c-toolbar--m-full-height--PaddingTop:0;--pf-c-toolbar--m-full-height--PaddingBottom:0;--pf-c-toolbar--m-full-height__item--Display:flex;--pf-c-toolbar--m-full-height__item--AlignItems:center;background-color:var(--pf-c-toolbar--BackgroundColor);display:grid;padding-bottom:var(--pf-c-toolbar--PaddingBottom);padding-top:var(--pf-c-toolbar--PaddingTop);position:relative;row-gap:var(--pf-c-toolbar--RowGap)}@media screen and (min-width:992px){.pf-c-toolbar{--pf-c-toolbar__expandable-content--PaddingRight:var(--pf-c-toolbar__expandable-content--lg--PaddingRight);--pf-c-toolbar__expandable-content--PaddingBottom:var(--pf-c-toolbar__expandable-content--lg--PaddingBottom);--pf-c-toolbar__expandable-content--PaddingLeft:var(--pf-c-toolbar__expandable-content--lg--PaddingLeft)}}@media screen and (min-width:1200px){.pf-c-toolbar{--pf-c-toolbar--m-page-insets--inset:var(--pf-c-toolbar--m-page-insets--xl--inset)}}.pf-c-toolbar.pf-m-page-insets{--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--m-page-insets--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--m-page-insets--inset)}.pf-c-toolbar.pf-m-sticky{box-shadow:var(--pf-c-toolbar--m-sticky--BoxShadow);position:sticky;top:0;z-index:var(--pf-c-toolbar--m-sticky--ZIndex)}.pf-c-toolbar.pf-m-full-height{--pf-c-toolbar--PaddingTop:var(--pf-c-toolbar--m-full-height--PaddingTop);--pf-c-toolbar--PaddingBottom:var(--pf-c-toolbar--m-full-height--PaddingTop);--pf-c-toolbar__item--Display:var(--pf-c-toolbar--m-full-height__item--Display);height:100%}.pf-c-toolbar.pf-m-full-height,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__content,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__content-section,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__expandable-content,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__group{min-width:0}.pf-c-toolbar.pf-m-full-height,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__content,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__content-section,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__group,.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__item{align-self:stretch}.pf-c-toolbar.pf-m-full-height .pf-c-toolbar__item{align-items:var(--pf-c-toolbar--m-full-height__item--AlignItems)}.pf-c-toolbar.pf-m-static,.pf-c-toolbar.pf-m-static .pf-c-toolbar__content{position:static}.pf-c-toolbar.pf-m-static .pf-c-toolbar__expandable-content{position:absolute}.pf-c-toolbar__content-section>.pf-c-divider,.pf-c-toolbar__group>.pf-c-divider{--pf-c-toolbar--spacer:var(--pf-c-toolbar--c-divider--m-vertical--spacer)}.pf-c-toolbar__content-section>.pf-c-divider.pf-m-vertical,.pf-c-toolbar__group>.pf-c-divider.pf-m-vertical{margin-right:var(--pf-c-toolbar--spacer)}.pf-c-toolbar__content-section>.pf-c-divider.pf-m-vertical:last-child,.pf-c-toolbar__group>.pf-c-divider.pf-m-vertical:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar__group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--spacer);--pf-hidden-visible--visible--Display:var(--pf-c-toolbar__group--Display);align-items:center;margin-right:var(--pf-c-toolbar--spacer)}.pf-c-toolbar__group.pf-m-button-group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-button-group--spacer)}.pf-c-toolbar__group.pf-m-button-group>*{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-button-group--space-items)}.pf-c-toolbar__group.pf-m-icon-button-group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-icon-button-group--spacer)}.pf-c-toolbar__group.pf-m-icon-button-group>*{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-icon-button-group--space-items)}.pf-c-toolbar__group.pf-m-filter-group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-filter-group--spacer)}.pf-c-toolbar__group.pf-m-filter-group>*{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-filter-group--space-items)}.pf-c-toolbar__group.pf-m-filter-group>*+*{margin-left:-1px}.pf-c-toolbar__group.pf-m-toggle-group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--spacer)}.pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__group,.pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__item{display:none;visibility:hidden}.pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__toggle{display:inline-block;visibility:visible}.pf-c-toolbar__group:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar__item{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--spacer);--pf-c-toolbar__item--Width--base:var(--pf-c-toolbar__item--Width);--pf-c-toolbar__item--MinWidth--base:var(--pf-c-toolbar__item--MinWidth);--pf-hidden-visible--visible--Display:var(--pf-c-toolbar__item--Display);margin-right:var(--pf-c-toolbar--spacer);min-width:var(--pf-c-toolbar__item--MinWidth--base);width:var(--pf-c-toolbar__item--Width--base)}@media (min-width:576px){.pf-c-toolbar__item{--pf-c-toolbar__item--Width--base:var(--pf-c-toolbar__item--Width-on-sm,var(--pf-c-toolbar__item--Width))}}@media (min-width:768px){.pf-c-toolbar__item{--pf-c-toolbar__item--Width--base:var(--pf-c-toolbar__item--Width-on-md,var(--pf-c-toolbar__item--Width-on-sm,var(--pf-c-toolbar__item--Width)))}}@media (min-width:992px){.pf-c-toolbar__item{--pf-c-toolbar__item--Width--base:var(--pf-c-toolbar__item--Width-on-lg,var(--pf-c-toolbar__item--Width-on-md,var(--pf-c-toolbar__item--Width-on-sm,var(--pf-c-toolbar__item--Width))))}}@media (min-width:1200px){.pf-c-toolbar__item{--pf-c-toolbar__item--Width--base:var(--pf-c-toolbar__item--Width-on-xl,var(--pf-c-toolbar__item--Width-on-lg,var(--pf-c-toolbar__item--Width-on-md,var(--pf-c-toolbar__item--Width-on-sm,var(--pf-c-toolbar__item--Width)))))}}@media (min-width:1450px){.pf-c-toolbar__item{--pf-c-toolbar__item--Width--base:var(--pf-c-toolbar__item--Width-on-2xl,var(--pf-c-toolbar__item--Width-on-xl,var(--pf-c-toolbar__item--Width-on-lg,var(--pf-c-toolbar__item--Width-on-md,var(--pf-c-toolbar__item--Width-on-sm,var(--pf-c-toolbar__item--Width))))))}}@media (min-width:576px){.pf-c-toolbar__item{--pf-c-toolbar__item--MinWidth--base:var(--pf-c-toolbar__item--MinWidth-on-sm,var(--pf-c-toolbar__item--MinWidth))}}@media (min-width:768px){.pf-c-toolbar__item{--pf-c-toolbar__item--MinWidth--base:var(--pf-c-toolbar__item--MinWidth-on-md,var(--pf-c-toolbar__item--MinWidth-on-sm,var(--pf-c-toolbar__item--MinWidth)))}}@media (min-width:992px){.pf-c-toolbar__item{--pf-c-toolbar__item--MinWidth--base:var(--pf-c-toolbar__item--MinWidth-on-lg,var(--pf-c-toolbar__item--MinWidth-on-md,var(--pf-c-toolbar__item--MinWidth-on-sm,var(--pf-c-toolbar__item--MinWidth))))}}@media (min-width:1200px){.pf-c-toolbar__item{--pf-c-toolbar__item--MinWidth--base:var(--pf-c-toolbar__item--MinWidth-on-xl,var(--pf-c-toolbar__item--MinWidth-on-lg,var(--pf-c-toolbar__item--MinWidth-on-md,var(--pf-c-toolbar__item--MinWidth-on-sm,var(--pf-c-toolbar__item--MinWidth)))))}}@media (min-width:1450px){.pf-c-toolbar__item{--pf-c-toolbar__item--MinWidth--base:var(--pf-c-toolbar__item--MinWidth-on-2xl,var(--pf-c-toolbar__item--MinWidth-on-xl,var(--pf-c-toolbar__item--MinWidth-on-lg,var(--pf-c-toolbar__item--MinWidth-on-md,var(--pf-c-toolbar__item--MinWidth-on-sm,var(--pf-c-toolbar__item--MinWidth))))))}}.pf-c-toolbar__item.pf-m-overflow-menu{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--m-overflow-menu--spacer)}.pf-c-toolbar__item.pf-m-bulk-select{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--m-bulk-select--spacer)}.pf-c-toolbar__item.pf-m-expand-all.pf-m-expanded{--pf-c-toolbar__expand-all-icon--Rotate:var(--pf-c-toolbar__item--m-expand-all--m-expanded__expand-all-icon--Rotate)}.pf-c-toolbar__item.pf-m-search-filter{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--m-search-filter--spacer)}.pf-c-toolbar__item.pf-m-chip-group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--m-chip-group--spacer)}.pf-c-toolbar__item.pf-m-label{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--m-label--spacer);font-weight:var(--pf-c-toolbar__item--m-label--FontWeight)}.pf-c-toolbar__item.pf-m-pagination{margin-left:auto}.pf-c-toolbar__item.pf-m-pagination .pf-c-pagination{flex-wrap:nowrap}.pf-c-toolbar__item:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar__group.pf-m-overflow-container,.pf-c-toolbar__item.pf-m-overflow-container{flex:1;overflow:hidden}.pf-c-toolbar__expand-all-icon{display:inline-block;transform:rotate(var(--pf-c-toolbar__expand-all-icon--Rotate));transition:var(--pf-c-toolbar__expand-all-icon--Transition)}.pf-c-toolbar__content,.pf-c-toolbar__content-section{align-items:center;flex-wrap:wrap}.pf-c-toolbar__content{--pf-hidden-visible--visible--Display:var(--pf-c-toolbar__content--Display);padding-left:var(--pf-c-toolbar__content--PaddingLeft);padding-right:var(--pf-c-toolbar__content--PaddingRight);position:relative}.pf-c-toolbar__content-section{--pf-hidden-visible--visible--Display:var(--pf-c-toolbar__content-section--Display);width:100%}.pf-c-toolbar__expandable-content{background-color:var(--pf-c-toolbar__expandable-content--BackgroundColor);box-shadow:var(--pf-c-toolbar__expandable-content--BoxShadow);display:none;left:0;padding:var(--pf-c-toolbar__expandable-content--PaddingTop) var(--pf-c-toolbar__expandable-content--PaddingRight) var(--pf-c-toolbar__expandable-content--PaddingBottom) var(--pf-c-toolbar__expandable-content--PaddingLeft);position:absolute;right:0;top:100%;visibility:hidden;width:100%;z-index:var(--pf-c-toolbar__expandable-content--ZIndex)}@media screen and (min-width:992px){.pf-c-toolbar__expandable-content{box-shadow:none;position:static}}.pf-c-toolbar__expandable-content.pf-m-expanded{grid-row-gap:var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap);display:grid;visibility:visible}.pf-c-toolbar__expandable-content .pf-c-toolbar__group,.pf-c-toolbar__expandable-content .pf-c-toolbar__item{--pf-c-toolbar--spacer:0}.pf-c-toolbar__expandable-content .pf-c-toolbar__group{grid-row-gap:var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap);display:grid}.pf-c-toolbar__expandable-content .pf-m-label{font-size:var(--pf-c-toolbar__expandable-content__item--m-label--FontSize);margin-bottom:var(--pf-c-toolbar__expandable-content__item--m-label--MarginBottom)}.pf-c-toolbar__content.pf-m-chip-container,.pf-c-toolbar__group.pf-m-chip-container{grid-row-gap:0;align-items:baseline;display:flex;flex-wrap:wrap;margin-top:var(--pf-c-toolbar__group--m-chip-container--MarginTop)}.pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__item,.pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__item{--pf-c-toolbar--spacer:var(--pf-c-toolbar__item--spacer);margin-top:var(--pf-c-toolbar__group--m-chip-container__item--MarginTop)}.pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__group,.pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__group{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--spacer);grid-row-gap:0;display:flex;flex-wrap:wrap}.pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__group:last-child,.pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__item:last-child,.pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__group:last-child,.pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__item:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-c-chip-group:last-child{--pf-c-chip-group--MarginRight:0}.pf-c-toolbar .pf-c-chip-group li:last-child{--pf-c-chip-group__li--m-toolbar--MarginRight:0}.pf-c-toolbar__toggle.pf-m-expanded .pf-c-button.pf-m-plain{color:var(--pf-c-toolbar__toggle--m-expanded__c-button--m-plain--Color)}.pf-m-toggle-group.pf-m-show{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer)}.pf-m-toggle-group.pf-m-show .pf-c-toolbar__group,.pf-m-toggle-group.pf-m-show .pf-c-toolbar__item{display:flex;flex:0 1 auto;visibility:visible}.pf-m-toggle-group.pf-m-show .pf-c-toolbar__toggle{display:none;visibility:hidden}@media (min-width:576px){.pf-m-toggle-group.pf-m-show-on-sm{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer)}.pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__group,.pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__item{display:flex;flex:0 1 auto;visibility:visible}.pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__toggle{display:none;visibility:hidden}}@media (min-width:768px){.pf-m-toggle-group.pf-m-show-on-md{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer)}.pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__group,.pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__item{display:flex;flex:0 1 auto;visibility:visible}.pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__toggle{display:none;visibility:hidden}}@media (min-width:992px){.pf-m-toggle-group.pf-m-show-on-lg{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer)}.pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__group,.pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__item{display:flex;flex:0 1 auto;visibility:visible}.pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__toggle{display:none;visibility:hidden}}@media (min-width:1200px){.pf-m-toggle-group.pf-m-show-on-xl{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer)}.pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__group,.pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__item{display:flex;flex:0 1 auto;visibility:visible}.pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__toggle{display:none;visibility:hidden}}@media (min-width:1450px){.pf-m-toggle-group.pf-m-show-on-2xl{--pf-c-toolbar--spacer:var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer)}.pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__group,.pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__item{display:flex;flex:0 1 auto;visibility:visible}.pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__toggle{display:none;visibility:hidden}}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left,.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right~.pf-m-pagination{margin-left:0}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left~.pf-m-pagination{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap,.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap{flex-wrap:nowrap}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap,.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap{flex-wrap:wrap}@media (min-width:576px){.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-sm,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-sm{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-sm,.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-sm~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-sm,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-sm~.pf-m-pagination{margin-left:0}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-sm~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-sm~.pf-m-pagination{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-sm,.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-sm{flex-wrap:nowrap}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-sm,.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-sm{flex-wrap:wrap}}@media (min-width:768px){.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-md,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-md{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-md,.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-md~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-md,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-md~.pf-m-pagination{margin-left:0}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-md~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-md~.pf-m-pagination{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-md,.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-md{flex-wrap:nowrap}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-md,.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-md{flex-wrap:wrap}}@media (min-width:992px){.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-lg,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-lg{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-lg,.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-lg~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-lg,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-lg~.pf-m-pagination{margin-left:0}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-lg~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-lg~.pf-m-pagination{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-lg,.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-lg{flex-wrap:nowrap}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-lg,.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-lg{flex-wrap:wrap}}@media (min-width:1200px){.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-xl,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-xl{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-xl,.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-xl~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-xl,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-xl~.pf-m-pagination{margin-left:0}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-xl~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-xl~.pf-m-pagination{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-xl,.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-xl{flex-wrap:nowrap}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-xl,.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-xl{flex-wrap:wrap}}@media (min-width:1450px){.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-2xl,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-2xl{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-2xl,.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-2xl~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-2xl,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-2xl~.pf-m-pagination{margin-left:0}.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-2xl~.pf-m-pagination,.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-2xl~.pf-m-pagination{margin-left:auto}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-2xl,.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-2xl{flex-wrap:nowrap}.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-2xl,.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-2xl{flex-wrap:wrap}}.pf-c-toolbar .pf-m-space-items-none>*,.pf-c-toolbar .pf-m-space-items-none>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-sm>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-space-items-sm>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-md>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-space-items-md>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-lg>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}.pf-c-toolbar .pf-m-space-items-lg>:last-child{--pf-c-toolbar--spacer:0}@media (min-width:576px){.pf-c-toolbar .pf-m-space-items-none-on-sm>*,.pf-c-toolbar .pf-m-space-items-none-on-sm>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-sm-on-sm>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-space-items-sm-on-sm>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-md-on-sm>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-space-items-md-on-sm>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-lg-on-sm>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}.pf-c-toolbar .pf-m-space-items-lg-on-sm>:last-child{--pf-c-toolbar--spacer:0}}@media (min-width:768px){.pf-c-toolbar .pf-m-space-items-none-on-md>*,.pf-c-toolbar .pf-m-space-items-none-on-md>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-sm-on-md>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-space-items-sm-on-md>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-md-on-md>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-space-items-md-on-md>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-lg-on-md>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}.pf-c-toolbar .pf-m-space-items-lg-on-md>:last-child{--pf-c-toolbar--spacer:0}}@media (min-width:992px){.pf-c-toolbar .pf-m-space-items-none-on-lg>*,.pf-c-toolbar .pf-m-space-items-none-on-lg>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-sm-on-lg>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-space-items-sm-on-lg>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-md-on-lg>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-space-items-md-on-lg>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-lg-on-lg>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}.pf-c-toolbar .pf-m-space-items-lg-on-lg>:last-child{--pf-c-toolbar--spacer:0}}@media (min-width:1200px){.pf-c-toolbar .pf-m-space-items-none-on-xl>*,.pf-c-toolbar .pf-m-space-items-none-on-xl>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-sm-on-xl>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-space-items-sm-on-xl>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-md-on-xl>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-space-items-md-on-xl>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-lg-on-xl>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}.pf-c-toolbar .pf-m-space-items-lg-on-xl>:last-child{--pf-c-toolbar--spacer:0}}@media (min-width:1450px){.pf-c-toolbar .pf-m-space-items-none-on-2xl>*,.pf-c-toolbar .pf-m-space-items-none-on-2xl>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-sm-on-2xl>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-space-items-sm-on-2xl>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-md-on-2xl>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-space-items-md-on-2xl>:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-space-items-lg-on-2xl>*{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}.pf-c-toolbar .pf-m-space-items-lg-on-2xl>:last-child{--pf-c-toolbar--spacer:0}}.pf-c-toolbar .pf-m-spacer-none,.pf-c-toolbar .pf-m-spacer-none:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-spacer-sm,.pf-c-toolbar .pf-m-spacer-sm:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-spacer-md,.pf-c-toolbar .pf-m-spacer-md:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-spacer-lg,.pf-c-toolbar .pf-m-spacer-lg:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}@media (min-width:576px){.pf-c-toolbar .pf-m-spacer-none-on-sm,.pf-c-toolbar .pf-m-spacer-none-on-sm:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-spacer-sm-on-sm,.pf-c-toolbar .pf-m-spacer-sm-on-sm:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-spacer-md-on-sm,.pf-c-toolbar .pf-m-spacer-md-on-sm:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-spacer-lg-on-sm,.pf-c-toolbar .pf-m-spacer-lg-on-sm:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}}@media (min-width:768px){.pf-c-toolbar .pf-m-spacer-none-on-md,.pf-c-toolbar .pf-m-spacer-none-on-md:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-spacer-sm-on-md,.pf-c-toolbar .pf-m-spacer-sm-on-md:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-spacer-md-on-md,.pf-c-toolbar .pf-m-spacer-md-on-md:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-spacer-lg-on-md,.pf-c-toolbar .pf-m-spacer-lg-on-md:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}}@media (min-width:992px){.pf-c-toolbar .pf-m-spacer-none-on-lg,.pf-c-toolbar .pf-m-spacer-none-on-lg:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-spacer-sm-on-lg,.pf-c-toolbar .pf-m-spacer-sm-on-lg:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-spacer-md-on-lg,.pf-c-toolbar .pf-m-spacer-md-on-lg:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-spacer-lg-on-lg,.pf-c-toolbar .pf-m-spacer-lg-on-lg:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}}@media (min-width:1200px){.pf-c-toolbar .pf-m-spacer-none-on-xl,.pf-c-toolbar .pf-m-spacer-none-on-xl:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-spacer-sm-on-xl,.pf-c-toolbar .pf-m-spacer-sm-on-xl:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-spacer-md-on-xl,.pf-c-toolbar .pf-m-spacer-md-on-xl:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-spacer-lg-on-xl,.pf-c-toolbar .pf-m-spacer-lg-on-xl:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}}@media (min-width:1450px){.pf-c-toolbar .pf-m-spacer-none-on-2xl,.pf-c-toolbar .pf-m-spacer-none-on-2xl:last-child{--pf-c-toolbar--spacer:0}.pf-c-toolbar .pf-m-spacer-sm-on-2xl,.pf-c-toolbar .pf-m-spacer-sm-on-2xl:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--sm)}.pf-c-toolbar .pf-m-spacer-md-on-2xl,.pf-c-toolbar .pf-m-spacer-md-on-2xl:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--md)}.pf-c-toolbar .pf-m-spacer-lg-on-2xl,.pf-c-toolbar .pf-m-spacer-lg-on-2xl:last-child{--pf-c-toolbar--spacer:var(--pf-global--spacer--lg)}}.pf-c-toolbar.pf-m-inset-none{--pf-c-toolbar--inset:0;--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-sm{--pf-c-toolbar--inset:var(--pf-global--spacer--sm);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-md{--pf-c-toolbar--inset:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-lg{--pf-c-toolbar--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-xl{--pf-c-toolbar--inset:var(--pf-global--spacer--xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-2xl{--pf-c-toolbar--inset:var(--pf-global--spacer--2xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}@media (min-width:576px){.pf-c-toolbar.pf-m-inset-none-on-sm{--pf-c-toolbar--inset:0;--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-sm-on-sm{--pf-c-toolbar--inset:var(--pf-global--spacer--sm);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-md-on-sm{--pf-c-toolbar--inset:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-lg-on-sm{--pf-c-toolbar--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-xl-on-sm{--pf-c-toolbar--inset:var(--pf-global--spacer--xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-2xl-on-sm{--pf-c-toolbar--inset:var(--pf-global--spacer--2xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}}@media (min-width:768px){.pf-c-toolbar.pf-m-inset-none-on-md{--pf-c-toolbar--inset:0;--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-sm-on-md{--pf-c-toolbar--inset:var(--pf-global--spacer--sm);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-md-on-md{--pf-c-toolbar--inset:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-lg-on-md{--pf-c-toolbar--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-xl-on-md{--pf-c-toolbar--inset:var(--pf-global--spacer--xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-2xl-on-md{--pf-c-toolbar--inset:var(--pf-global--spacer--2xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}}@media (min-width:992px){.pf-c-toolbar.pf-m-inset-none-on-lg{--pf-c-toolbar--inset:0;--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-sm-on-lg{--pf-c-toolbar--inset:var(--pf-global--spacer--sm);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-md-on-lg{--pf-c-toolbar--inset:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-lg-on-lg{--pf-c-toolbar--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-xl-on-lg{--pf-c-toolbar--inset:var(--pf-global--spacer--xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-2xl-on-lg{--pf-c-toolbar--inset:var(--pf-global--spacer--2xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}}@media (min-width:1200px){.pf-c-toolbar.pf-m-inset-none-on-xl{--pf-c-toolbar--inset:0;--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-sm-on-xl{--pf-c-toolbar--inset:var(--pf-global--spacer--sm);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-md-on-xl{--pf-c-toolbar--inset:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-lg-on-xl{--pf-c-toolbar--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-xl-on-xl{--pf-c-toolbar--inset:var(--pf-global--spacer--xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-2xl-on-xl{--pf-c-toolbar--inset:var(--pf-global--spacer--2xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}}@media (min-width:1450px){.pf-c-toolbar.pf-m-inset-none-on-2xl{--pf-c-toolbar--inset:0;--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-sm-on-2xl{--pf-c-toolbar--inset:var(--pf-global--spacer--sm);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-md-on-2xl{--pf-c-toolbar--inset:var(--pf-global--spacer--md);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-lg-on-2xl{--pf-c-toolbar--inset:var(--pf-global--spacer--lg);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-xl-on-2xl{--pf-c-toolbar--inset:var(--pf-global--spacer--xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}.pf-c-toolbar.pf-m-inset-2xl-on-2xl{--pf-c-toolbar--inset:var(--pf-global--spacer--2xl);--pf-c-toolbar__content--PaddingRight:var(--pf-c-toolbar--inset);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-toolbar--inset)}}.pf-c-toolbar__content-section>:last-child{--pf-c-toolbar--spacer:0}.pf-c-label{--pf-c-label--PaddingTop:var(--pf-global--spacer--xs);--pf-c-label--PaddingRight:var(--pf-global--spacer--sm);--pf-c-label--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-label--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-label--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-label--BackgroundColor:var(--pf-global--palette--black-150);--pf-c-label--Color:var(--pf-global--Color--100);--pf-c-label--FontSize:var(--pf-global--FontSize--sm);--pf-c-label__content--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-label--m-outline__content--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label__content--link--hover--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-label__content--link--focus--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--200);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--200);--pf-c-label--m-outline__content--link--hover--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-label--m-outline__content--link--focus--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-blue--BackgroundColor:var(--pf-global--palette--blue-50);--pf-c-label--m-blue__icon--Color:var(--pf-global--primary-color--100);--pf-c-label--m-blue__content--Color:var(--pf-global--info-color--200);--pf-c-label--m-blue__content--before--BorderColor:var(--pf-global--palette--blue-100);--pf-c-label--m-blue__content--link--hover--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-label--m-blue__content--link--focus--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-label--m-outline--m-blue__content--Color:var(--pf-global--primary-color--100);--pf-c-label--m-outline--m-blue__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-green--BackgroundColor:var(--pf-global--palette--green-50);--pf-c-label--m-green__icon--Color:var(--pf-global--success-color--100);--pf-c-label--m-green__content--Color:var(--pf-global--success-color--200);--pf-c-label--m-green__content--before--BorderColor:var(--pf-global--palette--green-100);--pf-c-label--m-green__content--link--hover--before--BorderColor:var(--pf-global--success-color--100);--pf-c-label--m-green__content--link--focus--before--BorderColor:var(--pf-global--success-color--100);--pf-c-label--m-outline--m-green__content--Color:var(--pf-global--success-color--100);--pf-c-label--m-outline--m-green__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-orange--BackgroundColor:var(--pf-global--palette--orange-50);--pf-c-label--m-orange__icon--Color:var(--pf-global--palette--orange-300);--pf-c-label--m-orange__content--Color:var(--pf-global--palette--orange-700);--pf-c-label--m-orange__content--before--BorderColor:var(--pf-global--palette--orange-100);--pf-c-label--m-orange__content--link--hover--before--BorderColor:var(--pf-global--palette--orange-300);--pf-c-label--m-orange__content--link--focus--before--BorderColor:var(--pf-global--palette--orange-300);--pf-c-label--m-outline--m-orange__content--Color:var(--pf-global--palette--orange-500);--pf-c-label--m-outline--m-orange__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-red--BackgroundColor:var(--pf-global--palette--red-50);--pf-c-label--m-red__icon--Color:var(--pf-global--danger-color--100);--pf-c-label--m-red__content--Color:var(--pf-global--palette--red-300);--pf-c-label--m-red__content--before--BorderColor:var(--pf-global--palette--red-100);--pf-c-label--m-red__content--link--hover--before--BorderColor:var(--pf-global--danger-color--100);--pf-c-label--m-red__content--link--focus--before--BorderColor:var(--pf-global--danger-color--100);--pf-c-label--m-outline--m-red__content--Color:var(--pf-global--danger-color--100);--pf-c-label--m-outline--m-red__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-purple--BackgroundColor:var(--pf-global--palette--purple-50);--pf-c-label--m-purple__icon--Color:var(--pf-global--palette--purple-500);--pf-c-label--m-purple__content--Color:var(--pf-global--palette--purple-700);--pf-c-label--m-purple__content--before--BorderColor:var(--pf-global--palette--purple-100);--pf-c-label--m-purple__content--link--hover--before--BorderColor:var(--pf-global--palette--purple-500);--pf-c-label--m-purple__content--link--focus--before--BorderColor:var(--pf-global--palette--purple-500);--pf-c-label--m-outline--m-purple__content--Color:var(--pf-global--palette--purple-500);--pf-c-label--m-outline--m-purple__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-cyan--BackgroundColor:var(--pf-global--palette--cyan-50);--pf-c-label--m-cyan__icon--Color:var(--pf-global--default-color--200);--pf-c-label--m-cyan__content--Color:var(--pf-global--default-color--300);--pf-c-label--m-cyan__content--before--BorderColor:var(--pf-global--palette--cyan-100);--pf-c-label--m-cyan__content--link--hover--before--BorderColor:var(--pf-global--default-color--200);--pf-c-label--m-cyan__content--link--focus--before--BorderColor:var(--pf-global--default-color--200);--pf-c-label--m-outline--m-cyan__content--Color:var(--pf-global--palette--cyan-400);--pf-c-label--m-outline--m-cyan__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-gold--BackgroundColor:var(--pf-global--palette--gold-50);--pf-c-label--m-gold__icon--Color:var(--pf-global--palette--gold-400);--pf-c-label--m-gold__content--Color:var(--pf-global--palette--gold-700);--pf-c-label--m-gold__content--before--BorderColor:var(--pf-global--palette--gold-100);--pf-c-label--m-gold__content--link--hover--before--BorderColor:var(--pf-global--palette--gold-300);--pf-c-label--m-gold__content--link--focus--before--BorderColor:var(--pf-global--palette--gold-300);--pf-c-label--m-outline--m-gold__content--Color:var(--pf-global--palette--gold-600);--pf-c-label--m-outline--m-gold__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-gold__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-outline--m-gold__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-overflow__content--Color:var(--pf-global--link--Color);--pf-c-label--m-overflow__content--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-label--m-overflow__content--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label--m-overflow__content--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-label--m-overflow__content--link--hover--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-label--m-overflow__content--link--hover--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-label--m-overflow__content--link--focus--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-label--m-overflow__content--link--focus--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-label--m-compact--PaddingTop:0;--pf-c-label--m-compact--PaddingRight:var(--pf-global--spacer--sm);--pf-c-label--m-compact--PaddingBottom:0;--pf-c-label--m-compact--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-label--m-compact--FontSize:var(--pf-global--FontSize--xs);--pf-c-label--m-compact--m-editable--TextDecorationOffset:0.0625rem;--pf-c-label__content--Color:var(--pf-global--Color--100);--pf-c-label__content--MaxWidth:100%;--pf-c-label--m-outline__content--Color:var(--pf-global--Color--100);--pf-c-label--m-editable__content--MaxWidth:16ch;--pf-c-label__text--MaxWidth:16ch;--pf-c-label__icon--Color:var(--pf-global--Color--100);--pf-c-label__icon--MarginRight:var(--pf-global--spacer--xs);--pf-c-label__c-button--FontSize:var(--pf-global--FontSize--xs);--pf-c-label__c-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-label__c-button--MarginRight:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-label__c-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-label__c-button--MarginLeft:var(--pf-global--spacer--xs);--pf-c-label__c-button--PaddingTop:var(--pf-global--spacer--xs);--pf-c-label__c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-label__c-button--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-label__c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-label--m-editable--Cursor:pointer;--pf-c-label--m-editable--TextDecoration:underline;--pf-c-label--m-editable--TextDecorationStyle:dashed;--pf-c-label--m-editable--TextDecorationThickness:var(--pf-global--BorderWidth--sm);--pf-c-label--m-editable--TextDecorationOffset:0.25rem;--pf-c-label--m-editable--TextDecorationColor:var(--pf-global--BorderColor--200);--pf-c-label--m-editable--hover--TextDecorationColor:var(--pf-global--Color--100);--pf-c-label--m-editable--focus--TextDecorationColor:var(--pf-global--Color--100);--pf-c-label--m-editable__content--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-editable__content--hover--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-editable__content--focus--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-label--m-editable--m-editable-active--Cursor:auto;--pf-c-label--m-editable--m-editable-active--TextDecoration:none;--pf-c-label--m-editable--m-editable-active--BackgroundColor:transparent;--pf-c-label--m-editable--m-editable-active__content--before--BorderWidth:0;--pf-c-label--m-editable--m-editable-active__content--before--BorderColor:transparent;background-color:var(--pf-c-label--BackgroundColor);border:0;border-radius:var(--pf-c-label--BorderRadius);color:var(--pf-c-label--Color);font-size:var(--pf-c-label--FontSize);padding:var(--pf-c-label--PaddingTop) var(--pf-c-label--PaddingRight) var(--pf-c-label--PaddingBottom) var(--pf-c-label--PaddingLeft);position:relative;white-space:nowrap}.pf-c-label.pf-m-compact{--pf-c-label--PaddingTop:var(--pf-c-label--m-compact--PaddingTop);--pf-c-label--PaddingRight:var(--pf-c-label--m-compact--PaddingRight);--pf-c-label--PaddingBottom:var(--pf-c-label--m-compact--PaddingBottom);--pf-c-label--PaddingLeft:var(--pf-c-label--m-compact--PaddingLeft);--pf-c-label--FontSize:var(--pf-c-label--m-compact--FontSize);--pf-c-label--m-editable--TextDecorationOffset:var(--pf-c-label--m-compact--m-editable--TextDecorationOffset)}.pf-c-label.pf-m-blue{--pf-c-label--BackgroundColor:var(--pf-c-label--m-blue--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-blue__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-blue__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-blue__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-blue__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-blue__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-blue__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-blue__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-blue__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-blue__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-blue__content--before--BorderColor)}.pf-c-label.pf-m-green{--pf-c-label--BackgroundColor:var(--pf-c-label--m-green--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-green__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-green__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-green__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-green__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-green__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-green__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-green__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-green__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-green__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-green__content--before--BorderColor)}.pf-c-label.pf-m-orange{--pf-c-label--BackgroundColor:var(--pf-c-label--m-orange--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-orange__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-orange__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-orange__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-orange__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-orange__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-orange__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-orange__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-orange__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-orange__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-orange__content--before--BorderColor)}.pf-c-label.pf-m-red{--pf-c-label--BackgroundColor:var(--pf-c-label--m-red--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-red__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-red__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-red__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-red__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-red__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-red__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-red__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-red__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-red__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-red__content--before--BorderColor)}.pf-c-label.pf-m-purple{--pf-c-label--BackgroundColor:var(--pf-c-label--m-purple--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-purple__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-purple__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-purple__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-purple__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-purple__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-purple__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-purple__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-purple__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-purple__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-purple__content--before--BorderColor)}.pf-c-label.pf-m-cyan{--pf-c-label--BackgroundColor:var(--pf-c-label--m-cyan--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-cyan__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-cyan__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-cyan__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-cyan__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-cyan__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-cyan__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-cyan__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-cyan__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-cyan__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-cyan__content--before--BorderColor)}.pf-c-label.pf-m-gold{--pf-c-label--BackgroundColor:var(--pf-c-label--m-gold--BackgroundColor);--pf-c-label__icon--Color:var(--pf-c-label--m-gold__icon--Color);--pf-c-label__content--Color:var(--pf-c-label--m-gold__content--Color);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-gold__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-gold__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-gold__content--link--focus--before--BorderColor);--pf-c-label--m-outline__content--Color:var(--pf-c-label--m-outline--m-gold__content--Color);--pf-c-label--m-outline__content--before--BorderColor:var(--pf-c-label--m-outline--m-gold__content--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderColor:var(--pf-c-label--m-outline--m-gold__content--link--hover--before--BorderColor);--pf-c-label--m-outline__content--link--focus--before--BorderColor:var(--pf-c-label--m-outline--m-gold__content--link--focus--before--BorderColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-gold__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-gold__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-gold__content--before--BorderColor)}.pf-c-label.pf-m-outline{--pf-c-label__content--Color:var(--pf-c-label--m-outline__content--Color);--pf-c-label__content--before--BorderWidth:var(--pf-c-label--m-outline__content--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-outline__content--before--BorderColor);--pf-c-label--BackgroundColor:var(--pf-c-label--m-outline--BackgroundColor);--pf-c-label--m-editable__content--before--BorderColor:var(--pf-c-label--m-outline__content--before--BorderColor);--pf-c-label--m-editable__content--hover--before--BorderColor:var(--pf-c-label--m-outline__content--before--BorderColor);--pf-c-label--m-editable__content--focus--before--BorderColor:var(--pf-c-label--m-outline__content--before--BorderColor)}.pf-c-label.pf-m-add:hover,.pf-c-label.pf-m-outline a.pf-c-label__content:hover,.pf-c-label.pf-m-outline button.pf-c-label__content:hover,.pf-c-label.pf-m-overflow:hover{--pf-c-label__content--before--BorderWidth:var(--pf-c-label--m-outline__content--link--hover--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-outline__content--link--hover--before--BorderColor)}.pf-c-label.pf-m-add:focus,.pf-c-label.pf-m-outline a.pf-c-label__content:focus,.pf-c-label.pf-m-outline button.pf-c-label__content:focus,.pf-c-label.pf-m-overflow:focus{--pf-c-label__content--before--BorderWidth:var(--pf-c-label--m-outline__content--link--focus--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-outline__content--link--focus--before--BorderColor)}.pf-c-label.pf-m-editable{--pf-c-label__content--MaxWidth:var(--pf-c-label--m-editable__content--MaxWidth);--pf-c-label__content--before--BorderWidth:var(--pf-c-label--m-editable__content--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-editable__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderWidth:var(--pf-c-label--m-editable__content--hover--before--BorderWidth);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-editable__content--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderWidth:var(--pf-c-label--m-editable__content--focus--before--BorderWidth);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-editable__content--focus--before--BorderColor);--pf-c-label--m-outline__content--link--hover--before--BorderWidth:var(--pf-c-label--m-editable__content--before--BorderWidth);--pf-c-label--m-outline__content--link--focus--before--BorderWidth:var(--pf-c-label--m-editable__content--before--BorderWidth);cursor:var(--pf-c-label--m-editable--Cursor);text-decoration:var(--pf-c-label--m-editable--TextDecoration);text-decoration-color:var(--pf-c-label--m-editable--TextDecorationColor);text-decoration-style:var(--pf-c-label--m-editable--TextDecorationStyle);text-decoration-thickness:var(--pf-c-label--m-editable--TextDecorationThickness);text-underline-offset:var(--pf-c-label--m-editable--TextDecorationOffset)}.pf-c-label.pf-m-editable:hover{--pf-c-label--m-editable--TextDecorationColor:var(--pf-c-label--m-editable--hover--TextDecorationColor)}.pf-c-label.pf-m-editable:focus{--pf-c-label--m-editable--TextDecorationColor:var(--pf-c-label--m-editable--focus--TextDecorationColor)}.pf-c-label.pf-m-editable-active{--pf-c-label--m-editable--Cursor:var(--pf-c-label--m-editable--m-editable-active--Cursor);--pf-c-label--m-editable--TextDecoration:var(--pf-c-label--m-editable--m-editable-active--TextDecoration);--pf-c-label--BackgroundColor:var(--pf-c-label--m-editable--m-editable-active--BackgroundColor)}.pf-c-label.pf-m-editable-active .pf-c-button{visibility:hidden}.pf-c-label .pf-c-button{--pf-c-button--FontSize:var(--pf-c-label__c-button--FontSize);--pf-c-button--PaddingTop:var(--pf-c-label__c-button--PaddingTop);--pf-c-button--PaddingRight:var(--pf-c-label__c-button--PaddingRight);--pf-c-button--PaddingBottom:var(--pf-c-label__c-button--PaddingBottom);--pf-c-button--PaddingLeft:var(--pf-c-label__c-button--PaddingLeft);margin-bottom:var(--pf-c-label__c-button--MarginBottom);margin-left:var(--pf-c-label__c-button--MarginLeft);margin-right:var(--pf-c-label__c-button--MarginRight);margin-top:var(--pf-c-label__c-button--MarginTop)}.pf-c-label.pf-m-add,.pf-c-label.pf-m-overflow{--pf-c-label__content--Color:var(--pf-c-label--m-overflow__content--Color);--pf-c-label--BackgroundColor:var(--pf-c-label--m-overflow__content--BackgroundColor);--pf-c-label__content--before--BorderWidth:var(--pf-c-label--m-overflow__content--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label--m-overflow__content--before--BorderColor);--pf-c-label__content--link--hover--before--BorderWidth:var(--pf-c-label--m-overflow__content--link--hover--before--BorderWidth);--pf-c-label__content--link--hover--before--BorderColor:var(--pf-c-label--m-overflow__content--link--hover--before--BorderColor);--pf-c-label__content--link--focus--before--BorderWidth:var(--pf-c-label--m-overflow__content--link--focus--before--BorderWidth);--pf-c-label__content--link--focus--before--BorderColor:var(--pf-c-label--m-overflow__content--link--focus--before--BorderColor)}.pf-c-label,.pf-c-label__content{align-items:center;display:inline-flex}.pf-c-label__text{max-width:var(--pf-c-label__text--MaxWidth)}.pf-c-label__content,.pf-c-label__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-label__content{border-width:0;color:var(--pf-c-label__content--Color);max-width:var(--pf-c-label__content--MaxWidth)}.pf-c-label__content:before{border:var(--pf-c-label__content--before--BorderWidth) solid var(--pf-c-label__content--before--BorderColor);border-radius:var(--pf-c-label--BorderRadius);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}a.pf-c-label__content,button.pf-c-label__content{border:none;cursor:pointer}a.pf-c-label__content,a.pf-c-label__content:focus,a.pf-c-label__content:hover,button.pf-c-label__content,button.pf-c-label__content:focus,button.pf-c-label__content:hover{text-decoration:none}a.pf-c-label__content:hover,button.pf-c-label__content:hover{--pf-c-label__content--before--BorderWidth:var(--pf-c-label__content--link--hover--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label__content--link--hover--before--BorderColor)}a.pf-c-label__content:focus,button.pf-c-label__content:focus{--pf-c-label__content--before--BorderWidth:var(--pf-c-label__content--link--focus--before--BorderWidth);--pf-c-label__content--before--BorderColor:var(--pf-c-label__content--link--focus--before--BorderColor)}.pf-c-label__icon{color:var(--pf-c-label__icon--Color);margin-right:var(--pf-c-label__icon--MarginRight)}:where(.pf-theme-dark) .pf-c-label{--pf-c-label--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label--m-blue--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label--m-green--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label--m-orange--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label--m-red--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label--m-purple--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label--m-cyan--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-label__content--before--BorderWidth:0;--pf-c-label__content--before--BorderColor:transparent;--pf-c-label__content--link--hover--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label__content--link--focus--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label--m-blue__content--Color:var(--pf-global--primary-color--100);--pf-c-label--m-outline--m-blue__content--before--BorderColor:var(--pf-global--active-color--200);--pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor:var(--pf-global--active-color--200);--pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor:var(--pf-global--active-color--200);--pf-c-label--m-green__content--Color:var(--pf-global--success-color--100);--pf-c-label--m-outline--m-green__content--before--BorderColor:var(--pf-global--palette--green-100);--pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor:var(--pf-global--palette--green-100);--pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor:var(--pf-global--palette--green-100);--pf-c-label--m-orange__content--Color:var(--pf-global--palette--orange-300);--pf-c-label--m-outline--m-orange__content--Color:var(--pf-global--palette--orange-300);--pf-c-label--m-outline--m-orange__content--before--BorderColor:var(--pf-global--palette--gold-100);--pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor:var(--pf-global--palette--gold-100);--pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor:var(--pf-global--palette--gold-100);--pf-c-label--m-red__content--Color:var(--pf-global--danger-color--100);--pf-c-label--m-outline--m-red__content--before--BorderColor:var(--pf-global--danger-color--100);--pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor:var(--pf-global--danger-color--100);--pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor:var(--pf-global--danger-color--100);--pf-c-label--m-purple__content--Color:var(--pf-global--palette--purple-300);--pf-c-label--m-purple__icon--Color:var(--pf-global--palette--purple-300);--pf-c-label--m-purple__content--link--hover--before--BorderColor:var(--pf-global--palette--purple-300);--pf-c-label--m-purple__content--link--focus--before--BorderColor:var(--pf-global--palette--purple-300);--pf-c-label--m-outline--m-purple__content--before--BorderColor:var(--pf-global--palette--purple-100);--pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor:var(--pf-global--palette--purple-100);--pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor:var(--pf-global--palette--purple-100);--pf-c-label--m-outline--m-purple__content--Color:var(--pf-global--palette--purple-300);--pf-c-label--m-cyan__content--Color:var(--pf-global--default-color--200);--pf-c-label--m-outline--m-cyan__content--Color:var(--pf-global--default-color--200);--pf-c-label--m-outline--m-cyan__content--before--BorderColor:var(--pf-global--palette--cyan-100);--pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor:var(--pf-global--palette--cyan-100);--pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor:var(--pf-global--palette--cyan-100)}.pf-c-label-group{--pf-c-label-group__list--MarginBottom:calc(var(--pf-global--spacer--xs)*-1);--pf-c-label-group__list--MarginRight:calc(var(--pf-global--spacer--xs)*-1);--pf-c-label-group--m-category--PaddingTop:var(--pf-global--spacer--xs);--pf-c-label-group--m-category--PaddingRight:var(--pf-global--spacer--xs);--pf-c-label-group--m-category--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-label-group--m-category--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-label-group--m-vertical--m-category--PaddingRight:var(--pf-global--spacer--sm);--pf-c-label-group--m-category--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-label-group--m-category--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-label-group--m-category--BorderColor:var(--pf-global--BorderColor--300);--pf-c-label-group--m-category--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-label-group__label--MarginRight:var(--pf-global--spacer--sm);--pf-c-label-group__label--MarginBottom:0;--pf-c-label-group--m-vertical__label--MarginBottom:var(--pf-global--spacer--sm);--pf-c-label-group__label--FontSize:var(--pf-global--FontSize--sm);--pf-c-label-group__label--MaxWidth:18ch;--pf-c-label-group__close--MarginTop:calc(var(--pf-global--spacer--xs)*-1);--pf-c-label-group__close--MarginBottom:calc(var(--pf-global--spacer--xs)*-1);--pf-c-label-group--m-vertical__close--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-label-group--m-vertical__close--MarginRight:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-label-group--m-vertical__close--MarginLeft:var(--pf-global--spacer--sm);--pf-c-label-group--m-vertical__close--c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-label-group--m-vertical__close--c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-label-group__list-item--MarginRight:var(--pf-global--spacer--xs);--pf-c-label-group__list-item--MarginBottom:var(--pf-global--spacer--xs);--pf-c-label-group__textarea--MinWidth:12.5rem;--pf-c-label-group__textarea--PaddingTop:0.125rem;--pf-c-label-group__textarea--PaddingRight:var(--pf-global--spacer--xs);--pf-c-label-group__textarea--PaddingBottom:0;--pf-c-label-group__textarea--PaddingLeft:var(--pf-global--spacer--xs);align-items:center;display:inline-flex}.pf-c-label-group.pf-m-category{background-color:var(--pf-c-label-group--m-category--BackgroundColor);border:var(--pf-c-label-group--m-category--BorderWidth) solid var(--pf-c-label-group--m-category--BorderColor);border-radius:var(--pf-c-label-group--m-category--BorderRadius);padding-bottom:var(--pf-c-label-group--m-category--PaddingBottom);padding-left:var(--pf-c-label-group--m-category--PaddingLeft);padding-right:var(--pf-c-label-group--m-category--PaddingRight);padding-top:var(--pf-c-label-group--m-category--PaddingTop)}.pf-c-label-group.pf-m-vertical{--pf-c-label-group__list--MarginRight:0;--pf-c-label-group__list--MarginBottom:0;--pf-c-label-group__list-item--MarginRight:0;--pf-c-label-group__label--MarginRight:0;--pf-c-label-group__label--MarginBottom:var(--pf-c-label-group--m-vertical__label--MarginBottom);--pf-c-label-group__close--MarginTop:var(--pf-c-label-group--m-vertical__close--MarginTop);--pf-c-label-group__close--MarginLeft:var(--pf-c-label-group--m-vertical__close--MarginLeft);--pf-c-label-group__close--MarginBottom:0;--pf-c-label-group__close--MarginRight:var(--pf-c-label-group--m-vertical__close--MarginRight);--pf-c-label-group--m-category--PaddingRight:var(--pf-c-label-group--m-vertical--m-category--PaddingRight)}.pf-c-label-group.pf-m-vertical.pf-c-label-group{align-items:flex-start}.pf-c-label-group.pf-m-vertical .pf-c-label-group__list{align-items:flex-start;flex-direction:column}.pf-c-label-group.pf-m-vertical .pf-c-label-group__main{flex-direction:column}.pf-c-label-group.pf-m-vertical .pf-c-label-group__list-item:last-child{--pf-c-label-group__list-item--MarginBottom:0}.pf-c-label-group.pf-m-vertical .pf-c-label-group__close .pf-c-button{--pf-c-button--PaddingLeft:var(--pf-c-label-group--m-vertical__close--c-button--PaddingLeft);--pf-c-button--PaddingRight:var(--pf-c-label-group--m-vertical__close--c-button--PaddingRight)}.pf-c-label-group.pf-m-editable,.pf-c-label-group.pf-m-editable .pf-c-label-group__list,.pf-c-label-group.pf-m-editable .pf-c-label-group__main{display:flex}.pf-c-label-group.pf-m-editable .pf-c-label-group__list,.pf-c-label-group.pf-m-editable .pf-c-label-group__list-item.pf-m-textarea,.pf-c-label-group.pf-m-editable .pf-c-label-group__main,.pf-c-label-group.pf-m-editable .pf-c-label-group__textarea{flex:1}.pf-c-label-group__main{align-items:baseline;display:flex;flex:1;flex-wrap:wrap}.pf-c-label-group__list{display:inline-flex;flex-wrap:wrap;margin-bottom:var(--pf-c-label-group__list--MarginBottom);margin-right:var(--pf-c-label-group__list--MarginRight)}.pf-c-label-group__list-item{display:inline-flex;margin-bottom:var(--pf-c-label-group__list-item--MarginBottom);margin-right:var(--pf-c-label-group__list-item--MarginRight)}.pf-c-label-group__label{font-size:var(--pf-c-label-group__label--FontSize);margin-bottom:var(--pf-c-label-group__label--MarginBottom);margin-right:var(--pf-c-label-group__label--MarginRight);max-width:var(--pf-c-label-group__label--MaxWidth);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-label-group__close{margin-bottom:var(--pf-c-label-group__close--MarginBottom);margin-left:var(--pf-c-label-group__close--MarginLeft);margin-right:var(--pf-c-label-group__close--MarginRight);margin-top:var(--pf-c-label-group__close--MarginTop)}.pf-c-label-group__textarea{-ms-overflow-style:none;border:0;min-width:var(--pf-c-label-group__textarea--MinWidth);padding:var(--pf-c-label-group__textarea--PaddingTop) var(--pf-c-label-group__textarea--PaddingRight) var(--pf-c-label-group__textarea--PaddingBottom) var(--pf-c-label-group__textarea--PaddingLeft);resize:none;scrollbar-width:none;white-space:nowrap}.pf-c-label-group__textarea::-webkit-scrollbar{display:none}.pf-c-slider{--pf-c-slider--value:0;--pf-c-slider__rail--PaddingTop:var(--pf-global--spacer--md);--pf-c-slider__rail--PaddingBottom:var(--pf-global--spacer--md);--pf-c-slider__rail-track--Height:0.25rem;--pf-c-slider__rail-track--before--base--BackgroundColor:var(--pf-global--BorderColor--100);--pf-c-slider__rail-track--before--fill--BackgroundColor:var(--pf-global--active-color--300);--pf-c-slider__rail-track--before--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-slider__rail-track--before--fill--BackgroundColor--gradient-stop:var(--pf-c-slider--value);--pf-c-slider__steps--FontSize:var(--pf-global--FontSize--sm);--pf-c-slider__steps--Height:var(--pf-c-slider__steps--FontSize);--pf-c-slider__step-tick--Top:var(--pf-global--spacer--md);--pf-c-slider__step-tick--Width:0.25rem;--pf-c-slider__step-tick--Height:0.25rem;--pf-c-slider__step-tick--BackgroundColor:var(--pf-global--BorderColor--200);--pf-c-slider__step-tick--TranslateX:-50%;--pf-c-slider__step-tick--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-slider__step--m-active__slider-tick--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-slider__step--first-child__step-tick--TranslateX:0;--pf-c-slider__step--last-child__step-tick--TranslateX:-100%;--pf-c-slider__step-label--TranslateX:-50%;--pf-c-slider__step-label--Top:calc(var(--pf-global--spacer--xl) + var(--pf-c-slider__rail-track--Height));--pf-c-slider__step--first-child__step-label--TranslateX:0;--pf-c-slider__step--last-child__step-label--TranslateX:-100%;--pf-c-slider__thumb--Top:calc(var(--pf-c-slider__rail-track--Height)/2 + var(--pf-global--spacer--md));--pf-c-slider__thumb--Width:1rem;--pf-c-slider__thumb--Height:1rem;--pf-c-slider__thumb--Left:var(--pf-c-slider--value);--pf-c-slider__thumb--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-slider__thumb--TranslateX:-50%;--pf-c-slider__thumb--TranslateY:-50%;--pf-c-slider__thumb--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-slider__thumb--BoxShadow--base:0 0 0 2px var(--pf-global--BackgroundColor--100),0 0 0 3px var(--pf-global--primary-color--100);--pf-c-slider__thumb--hover--BoxShadow:var(--pf-c-slider__thumb--BoxShadow--base);--pf-c-slider__thumb--focus--BoxShadow:var(--pf-c-slider__thumb--BoxShadow--base);--pf-c-slider__thumb--active--BoxShadow:var(--pf-c-slider__thumb--BoxShadow--base),0 0 2px 5px var(--pf-global--active-color--200);--pf-c-slider__thumb--before--Width:var(--pf-global--target-size--MinWidth);--pf-c-slider__thumb--before--Height:var(--pf-global--target-size--MinHeight);--pf-c-slider__thumb--before--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-slider__thumb--before--TranslateX:-50%;--pf-c-slider__thumb--before--TranslateY:-50%;--pf-c-slider__value--MarginLeft:var(--pf-global--spacer--md);--pf-c-slider__value--c-form-control--width-base:3.5ch;--pf-c-slider__value--c-form-control--width-chars:3;--pf-c-slider__value--c-form-control--Width:calc(var(--pf-c-slider__value--c-form-control--width-base) + var(--pf-c-slider__value--c-form-control--width-chars)*1ch);--pf-c-slider__value--m-floating--TranslateX:-50%;--pf-c-slider__value--m-floating--TranslateY:-100%;--pf-c-slider__value--m-floating--Left:var(--pf-c-slider--value);--pf-c-slider__value--m-floating--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-slider__actions--MarginRight:var(--pf-global--spacer--sm);--pf-c-slider__main--actions--MarginLeft:var(--pf-global--spacer--sm);--pf-c-slider--m-disabled__rail-track--before--fill--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-slider--m-disabled__step--m-active__slider-tick--BackgroundColor:var(--pf-global--palette--black-700);--pf-c-slider--m-disabled__thumb--BackgroundColor:var(--pf-global--palette--black-700);display:flex}.pf-c-slider.pf-m-disabled{--pf-c-slider__rail-track--before--fill--BackgroundColor:var(--pf-c-slider--m-disabled__rail-track--before--fill--BackgroundColor);--pf-c-slider__step--m-active__slider-tick--BackgroundColor:var(--pf-c-slider--m-disabled__step--m-active__slider-tick--BackgroundColor);--pf-c-slider__thumb--BackgroundColor:var(--pf-c-slider--m-disabled__thumb--BackgroundColor)}.pf-c-slider.pf-m-disabled .pf-c-slider__rail,.pf-c-slider.pf-m-disabled .pf-c-slider__thumb{cursor:not-allowed}.pf-c-slider.pf-m-disabled .pf-c-slider__thumb{--pf-c-slider__thumb--BoxShadow:none}.pf-c-slider__main{flex-grow:1;position:relative}.pf-c-slider__rail{padding-bottom:var(--pf-c-slider__rail--PaddingBottom);padding-top:var(--pf-c-slider__rail--PaddingTop)}.pf-c-slider__rail-track{height:var(--pf-c-slider__rail-track--Height);position:relative}.pf-c-slider__rail-track:before{background:linear-gradient(to right,var(--pf-c-slider__rail-track--before--fill--BackgroundColor),var(--pf-c-slider__rail-track--before--fill--BackgroundColor) var(--pf-c-slider__rail-track--before--fill--BackgroundColor--gradient-stop),var(--pf-c-slider__rail-track--before--base--BackgroundColor) var(--pf-c-slider__rail-track--before--fill--BackgroundColor--gradient-stop));border-radius:var(--pf-c-slider__rail-track--before--BorderRadius);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-slider__steps{font-size:var(--pf-c-slider__steps--FontSize);height:var(--pf-c-slider__steps--Height);line-height:1}.pf-c-slider__step{content:"";left:var(--pf-c-slider__step--Left);position:absolute;top:0}.pf-c-slider__step.pf-m-active{--pf-c-slider__step-tick--BackgroundColor:var(--pf-c-slider__step--m-active__slider-tick--BackgroundColor)}.pf-c-slider__step:first-child{--pf-c-slider__step-tick--TranslateX:var(--pf-c-slider__step--first-child__step-tick--TranslateX);--pf-c-slider__step-label--TranslateX:var(--pf-c-slider__step--first-child__step-label--TranslateX)}.pf-c-slider__step:last-child{--pf-c-slider__step-tick--TranslateX:var(--pf-c-slider__step--last-child__step-tick--TranslateX);--pf-c-slider__step-label--TranslateX:var(--pf-c-slider__step--last-child__step-label--TranslateX)}.pf-c-slider__step-tick{background-color:var(--pf-c-slider__step-tick--BackgroundColor);border-radius:var(--pf-c-slider__step-tick--BorderRadius);height:var(--pf-c-slider__step-tick--Height);left:0;position:absolute;top:var(--pf-c-slider__step-tick--Top);transform:translateX(var(--pf-c-slider__step-tick--TranslateX));width:var(--pf-c-slider__step-tick--Width)}.pf-c-slider__step-label{position:absolute;top:var(--pf-c-slider__step-label--Top);transform:translateX(var(--pf-c-slider__step-label--TranslateX));word-break:normal}.pf-c-slider__thumb{background-color:var(--pf-c-slider__thumb--BackgroundColor);border-radius:var(--pf-c-slider__thumb--BorderRadius);box-shadow:var(--pf-c-slider__thumb--BoxShadow);cursor:pointer;height:var(--pf-c-slider__thumb--Height);left:var(--pf-c-slider__thumb--Left);position:absolute;top:var(--pf-c-slider__thumb--Top);transform:translate(var(--pf-c-slider__thumb--TranslateX),var(--pf-c-slider__thumb--TranslateY));width:var(--pf-c-slider__thumb--Width)}.pf-c-slider__thumb:before{border-radius:var(--pf-c-slider__thumb--before--BorderRadius);content:"";height:var(--pf-c-slider__thumb--before--Height);left:50%;position:absolute;top:50%;transform:translate(var(--pf-c-slider__thumb--before--TranslateX),var(--pf-c-slider__thumb--before--TranslateY));width:var(--pf-c-slider__thumb--before--Width)}.pf-c-slider__thumb:hover{--pf-c-slider__thumb--BoxShadow:var(--pf-c-slider__thumb--hover--BoxShadow)}.pf-c-slider__thumb:focus{--pf-c-slider__thumb--BoxShadow:var(--pf-c-slider__thumb--focus--BoxShadow);outline:0}.pf-c-slider__thumb:active{--pf-c-slider__thumb--BoxShadow:var(--pf-c-slider__thumb--active--BoxShadow)}.pf-c-slider__value{margin-left:var(--pf-c-slider__value--MarginLeft)}.pf-c-slider__value.pf-m-floating{--pf-c-slider__value--MarginLeft:0;left:var(--pf-c-slider__value--m-floating--Left);position:absolute;top:0;transform:translate(var(--pf-c-slider__value--m-floating--TranslateX),var(--pf-c-slider__value--m-floating--TranslateY));z-index:var(--pf-c-slider__value--m-floating--ZIndex)}.pf-c-slider__value .pf-c-form-control{width:var(--pf-c-slider__value--c-form-control--Width)}.pf-c-slider__actions{display:flex;margin-right:var(--pf-c-slider__actions--MarginRight)}.pf-c-slider__main~.pf-c-slider__actions{--pf-c-slider__actions--MarginRight:0;margin-left:var(--pf-c-slider__main--actions--MarginLeft)}.pf-l-level{--pf-l-level--m-gutter--MarginRight:var(--pf-global--gutter);align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.pf-l-level.pf-m-gutter>:not(:last-child){margin-right:var(--pf-l-level--m-gutter--MarginRight)}.pf-c-switch{--pf-c-switch--FontSize:var(--pf-global--FontSize--md);--pf-c-switch__label--PaddingLeft:var(--pf-global--spacer--md);--pf-c-switch--ColumnGap:var(--pf-c-switch__label--PaddingLeft);--pf-c-switch__toggle-icon--FontSize:calc(var(--pf-c-switch--FontSize)*0.625);--pf-c-switch__toggle-icon--Color:var(--pf-global--Color--light-100);--pf-c-switch__toggle-icon--Left:calc(var(--pf-c-switch--FontSize)*0.4);--pf-c-switch__toggle-icon--Offset:0.125rem;--pf-c-switch--LineHeight:var(--pf-global--LineHeight--md);--pf-c-switch--Height:auto;--pf-c-switch__input--checked__toggle--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-switch__input--checked__toggle--before--TranslateX:calc(100% + var(--pf-c-switch__toggle-icon--Offset));--pf-c-switch__input--checked__label--Color:var(--pf-global--Color--dark-100);--pf-c-switch__input--not-checked__label--Color:var(--pf-global--disabled-color--100);--pf-c-switch__input--disabled__label--Color:var(--pf-global--disabled-color--100);--pf-c-switch__input--disabled__toggle--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-switch__input--disabled__toggle--before--BackgroundColor:var(--pf-global--palette--black-150);--pf-c-switch__input--focus__toggle--OutlineWidth:var(--pf-global--BorderWidth--md);--pf-c-switch__input--focus__toggle--OutlineOffset:var(--pf-global--spacer--sm);--pf-c-switch__input--focus__toggle--OutlineColor:var(--pf-global--primary-color--100);--pf-c-switch__toggle--Height:calc(var(--pf-c-switch--FontSize)*var(--pf-c-switch--LineHeight));--pf-c-switch__toggle--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-switch__toggle--BorderRadius:var(--pf-c-switch__toggle--Height);--pf-c-switch__toggle--before--Width:calc(var(--pf-c-switch--FontSize) - var(--pf-c-switch__toggle-icon--Offset));--pf-c-switch__toggle--before--Height:var(--pf-c-switch__toggle--before--Width);--pf-c-switch__toggle--before--Top:calc((var(--pf-c-switch__toggle--Height) - var(--pf-c-switch__toggle--before--Height))/2);--pf-c-switch__toggle--before--Left:var(--pf-c-switch__toggle--before--Top);--pf-c-switch__toggle--before--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-switch__toggle--before--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-switch__toggle--before--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-switch__toggle--before--Transition:transform .25s ease 0s;--pf-c-switch__toggle--Width:calc(var(--pf-c-switch__toggle--Height) + var(--pf-c-switch__toggle-icon--Offset) + var(--pf-c-switch__toggle--before--Width));--pf-c-switch__label--Color:var(--pf-global--Color--dark-100);column-gap:var(--pf-c-switch--ColumnGap);cursor:pointer;display:inline-grid;font-size:var(--pf-c-switch--FontSize);grid-auto-columns:1fr;grid-template-columns:auto;height:var(--pf-c-switch--Height);line-height:var(--pf-c-switch--LineHeight);position:relative;vertical-align:middle}.pf-c-switch.pf-m-reverse .pf-c-switch__label,.pf-c-switch.pf-m-reverse .pf-c-switch__toggle{grid-row:1}.pf-c-switch.pf-m-reverse .pf-c-switch__label{grid-column:1}.pf-c-switch__input{cursor:pointer;opacity:0;position:absolute}.pf-c-switch__input:focus~.pf-c-switch__toggle{outline:var(--pf-c-switch__input--focus__toggle--OutlineWidth) solid var(--pf-c-switch__input--focus__toggle--OutlineColor);outline-offset:var(--pf-c-switch__input--focus__toggle--OutlineOffset)}.pf-c-switch__input:checked~.pf-c-switch__label{color:var(--pf-c-switch__input--checked__label--Color)}.pf-c-switch__input:checked~.pf-c-switch__toggle{background-color:var(--pf-c-switch__input--checked__toggle--BackgroundColor)}.pf-c-switch__input:checked~.pf-c-switch__toggle:before{transform:translateX(var(--pf-c-switch__input--checked__toggle--before--TranslateX))}.pf-c-switch__input:checked~.pf-m-off{display:none}.pf-c-switch__input:not(:checked)~.pf-c-switch__label{color:var(--pf-c-switch__input--not-checked__label--Color)}.pf-c-switch__input:not(:checked)~.pf-c-switch__toggle .pf-c-switch__toggle-icon{display:none;visibility:hidden}.pf-c-switch__input:not(:checked)~.pf-m-on{display:none}.pf-c-switch__input:disabled{cursor:not-allowed}.pf-c-switch__input:disabled~.pf-c-switch__label{color:var(--pf-c-switch__input--disabled__label--Color);cursor:not-allowed}.pf-c-switch__input:disabled~.pf-c-switch__toggle{background-color:var(--pf-c-switch__input--disabled__toggle--BackgroundColor);cursor:not-allowed}.pf-c-switch__input:disabled~.pf-c-switch__toggle:before{background-color:var(--pf-c-switch__input--disabled__toggle--before--BackgroundColor)}.pf-c-switch__toggle{background-color:var(--pf-c-switch__toggle--BackgroundColor);border-radius:var(--pf-c-switch__toggle--BorderRadius);display:inline-block;height:var(--pf-c-switch__toggle--Height);position:relative;width:var(--pf-c-switch__toggle--Width)}.pf-c-switch__toggle:before{background-color:var(--pf-c-switch__toggle--before--BackgroundColor);border-radius:var(--pf-c-switch__toggle--before--BorderRadius);box-shadow:var(--pf-c-switch__toggle--before--BoxShadow);content:"";display:block;height:var(--pf-c-switch__toggle--before--Height);left:var(--pf-c-switch__toggle--before--Left);position:absolute;top:var(--pf-c-switch__toggle--before--Top);transition:var(--pf-c-switch__toggle--before--Transition);width:var(--pf-c-switch__toggle--before--Width)}.pf-c-switch__toggle-icon{align-items:center;bottom:0;color:var(--pf-c-switch__toggle-icon--Color);display:flex;font-size:var(--pf-c-switch__toggle-icon--FontSize);left:var(--pf-c-switch__toggle-icon--Left);position:absolute;top:0}.pf-c-switch__label{color:var(--pf-c-switch__label--Color);display:inline-block;grid-column:2;vertical-align:top}:where(.pf-theme-dark) .pf-c-switch{--pf-c-switch__toggle-icon--Color:var(--pf-global--BackgroundColor--100);--pf-c-switch__input--not-checked__label--Color:var(--pf-global--Color--100);--pf-c-switch__input--disabled__toggle--before--BackgroundColor:var(--pf-global--disabled-color--100);--pf-c-switch__toggle--before--BoxShadow:none}.pf-topology-content{align-items:center;background-color:var(--pf-global--Color--light-200);display:flex;height:100%;justify-content:center;position:relative;width:100%}.pf-topology-container{flex:1}.pf-topology-container__with-sidebar{position:relative}.pf-topology-side-bar{background-color:var(--pf-global--BackgroundColor--100);height:100%;max-width:100%;opacity:0;overflow-x:hidden;position:absolute;right:0;top:0;-webkit-transition:opacity .15s linear,transform .15s linear;-o-transition:opacity .15s linear,transform .15s linear;transition:opacity .15s linear,transform .15s linear;width:0;z-index:5}.pf-topology-side-bar.in{opacity:1}.pf-topology-side-bar.shown{width:100%}.pf-topology-side-bar__dismiss.pf-c-button{position:absolute;right:1rem;top:1.6875rem}.pf-topology-side-bar:not(.in){-webkit-transform:translate3d(-25%,0,0);transform:translate3d(25%,0,0)}.pf-topology-resizable-side-bar{background-color:var(--pf-global--BackgroundColor--100);height:100%;overflow-x:hidden;width:100%}.pf-topology-side-bar>.pf-topology-side-bar__dismiss+*{margin-right:2rem}.pf-topology-side-bar>.pf-topology-side-bar__header+*{margin-top:1.5rem}@media (min-width:768px){.pf-topology-container__with-sidebar{background-color:var(--pf-global--Color--light-200)!important;overflow-x:hidden}.pf-topology-container__with-sidebar .pf-topology-content{left:0;min-width:100%;position:absolute;-webkit-transition:width .15s linear;-o-transition:width .15s linear;transition:width .15s linear}.pf-topology-container__with-sidebar.pf-topology-container__with-sidebar--open .pf-topology-content{min-width:calc(100% - 550px);width:180px}.pf-topology-side-bar.shown{box-shadow:var(--pf-global--BoxShadow--md);max-width:550px;width:calc(100% - 180px)}}.pf-topology-control-bar{bottom:var(--pf-global--spacer--md);left:var(--pf-global--spacer--xl);position:absolute}.pf-topology-control-bar__button.pf-c-button.pf-m-tertiary{border:none;border-radius:var(--pf-global--BorderRadius--sm);box-shadow:var(--pf-global--BoxShadow--sm);margin-right:var(--pf-global--spacer--xs);margin-top:var(--pf-global--spacer--xs)}.pf-topology-control-bar__button.pf-c-button.pf-m-tertiary:not(.pf-m-disabled){background-color:var(--pf-global--BackgroundColor--100)}.pf-topology-control-bar__button.pf-c-button.pf-m-tertiary:after{display:none}.pf-topology-control-bar__button.pf-c-button.pf-m-tertiary:hover{border:none;box-shadow:var(--pf-global--BoxShadow--md)}:root{--pf-topology-visualization-surface--BackgroundColor:transparent;--pf-topology__node--Color:#393f44;--pf-topology-create-connector-color:var(--pf-global--secondary-color--100);--pf-topology__create-connector-color--Stroke:var(--pf-topology-create-connector-color,var(--pf-global--secondary-color--100));--pf-topology__create-connector-color--Fill:var(--pf-topology-create-connector-color,var(--pf-global--secondary-color--100));--pf-topology__node__background--Fill:var(--pf-global--BackgroundColor--100);--pf-topology__node__background--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node__background--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node--m-dragging--background--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node--m-hover--background--Stroke:unset;--pf-topology__node--m-hover--label__background--Stroke:unset;--pf-topology__node--m-disabled--Background--Fill:var(--pf-global--BackgroundColor--200);--pf-topology__node--m-disabled--Background--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node--m-info--Background--Fill:var(--pf-global--primary-color--light-100);--pf-topology__node--m-success--Background--Fill:var(--pf-global--success-color--100);--pf-topology__node--m-warning--Background--Fill:var(--pf-global--warning-color--100);--pf-topology__node--m-danger--Background--Fill:var(--pf-global--danger-color--100);--pf-topology__node--m-selected--Background--Fill:var(--pf-global--active-color--100);--pf-topology__node--m-selected--node__background--Stroke:var(--pf-global--active-color--100);--pf-topology__node--m-info--node__background--Stroke:var(--pf-global--primary-color--light-100);--pf-topology__node--m-success--node__background--Stroke:var(--pf-global--success-color--100);--pf-topology__node--m-warning--node__background--Stroke:var(--pf-global--warning-color--100);--pf-topology__node--m-danger--node__background--Stroke:var(--pf-global--danger-color--100);--pf-topology__node_decorator--Color:var(--pf-global--Color--200);--pf-topology__node__decorator__bg--Fill:var(--pf-global--BackgroundColor--light-100);--pf-topology__node__decorator__bg--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node__decorator__bg--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node__decorator__status--m-info--Color:var(--pf-global--primary-color--light-100);--pf-topology__node__decorator__status--m-danger--Color:var(--pf-global--danger-color--100);--pf-topology__node__decorator__status--m-warning--Color:var(--pf-global--warning-color--100);--pf-topology__node__decorator__status--m-success--Color:var(--pf-global--success-color--100);--pf-topology__node__label__text--Fill:var(--pf-global--palette--black-1000);--pf-topology__node__label__text--m-secondary--Fill:var(--pf-global--Color--200);--pf-topology__node--m-selected--node__label__text--Fill:var(--pf-global--Color--light-100);--pf-topology__node--m-selected--node__label__text--m-secondary--Fill:var(--pf-global--Color--light-100);--pf-topology__node--m-selected--m-info--node__label__text--Fill:var(--pf-global--Color--light-100);--pf-topology__node--m-selected--m-danger--node__label__text--Fill:var(--pf-global--Color--light-100);--pf-topology__node--m-selected--m-warning--node__label__text--Fill:var(--pf-global--Color--light-100);--pf-topology__node--m-selected--m-success--node__label__text--Fill:var(--pf-global--Color--light-100);--pf-topology__node__label__background--Fill:var(--pf-global--BackgroundColor--100);--pf-topology__node__label__background--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node--m-selected--node__label__background--Stroke:var(--pf-global--active-color--100);--pf-topology__node--m-info--node__label__background--Stroke:var(--pf-global--primary-color--light-100);--pf-topology__node--m-success--node__label__background--Stroke:var(--pf-global--success-color--100);--pf-topology__node--m-warning--node__label__background--Stroke:var(--pf-global--warning-color--100);--pf-topology__node--m-danger--node__label__background--Stroke:var(--pf-global--danger-color--100);--pf-topology__node__label__background--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node__label--m-dragging--background--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node--m-selected--node__label__background--Fill:var(--pf-global--active-color--100);--pf-topology__node--m-selected--m-info--node__label__background--Fill:var(--pf-global--primary-color--light-100);--pf-topology__node--m-selected--m-danger--node__label__background--Fill:var(--pf-global--danger-color--100);--pf-topology__node--m-selected--m-warning--node__label__background--Fill:var(--pf-global--warning-color--100);--pf-topology__node--m-selected--m-success--node__label__background--Fill:var(--pf-global--success-color--100);--pf-topology__node__label__icon--Color:var(--pf-global--Color--200);--pf-topology__node__label__icon__background--Fill:var(--pf-global--palette--white);--pf-topology__node__label__icon__background--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node__label__icon__background--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node--m-selected--label__icon__background--Stroke:var(--pf-global--active-color--100);--pf-topology__node--m-info--label__icon__background--Stroke:var(--pf-global--primary-color--light-100);--pf-topology__node--m-success--label__icon__background--Stroke:var(--pf-global--success-color--100);--pf-topology__node--m-warning--label__icon__background--Stroke:var(--pf-global--warning-color--100);--pf-topology__node--m-danger--label__icon__background--Stroke:var(--pf-global--danger-color--100);--pf-topology__node__label__badge__rect--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__node__separator--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node--m-selected--separator--Stroke:var(--pf-global--BorderColor--100);--pf-topology__node__action-icon__icon--Color:var(--pf-global--palette--black-1000);--pf-topology__node--m-selected--action-icon__icon--Color:var(--pf-global--Color--light-100);--pf-topology__group--m-selected--topology__node__action-icon__icon--Color:var(--pf-global--palette--white);--pf-topology__group__background--Fill:var(--pf-global--BackgroundColor--light-300);--pf-topology__group__background--Stroke:var(--pf-global--palette--white);--pf-topology__group--m-alt-group--topology__group__background--Fill:var(--pf-global--palette--white);--pf-topology__group--m-selected--topology__group__background--Fill:var(--pf-global--palette--blue-50);--pf-topology__group--m-selected--topology__group__background--Stroke:var(--pf-global--active-color--100);--pf-topology__group--m-hover--topology__group__background--Stroke:var(--pf-global--BackgroundColor--dark-400);--pf-topology__group--m-drop-target--topology__group__background--Fill:var(--pf-global--palette--blue-50);--pf-topology__group--m-drop-target--topology__group__background--Stroke:var(--pf-global--active-color--100);--pf-topology__group__collapsed-badge__node__label__badge__rect--Fill:var(--pf-global--palette--white);--pf-topology__group__collapsed-badge__node__label__badge__rect--Stroke:var(--pf-global--BorderColor--100);--pf-topology__group__collapsed-badge__node__label__badge__text--Fill:var(--pf-global--palette--black-800);--pf-topology__group__label__node__label__background--Fill:var(--pf-global--BackgroundColor--dark-300);--pf-topology__group__label__node__label__background--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__group__label__text--Fill:var(--pf-global--palette--white);--pf-topology__group__label__node__action-icon__icon--Color:var(--pf-global--palette--white);--pf-topology__group--m-selected--group__label__node__label__background--Fill:var(--pf-global--active-color--100);--pf-topology__edge--Stroke:var(--pf-global--secondary-color--100);--pf-topology__edge--StrokeWidth:var(--pf-global--BorderWidth--sm);--pf-topology__edge--HoverStroke:var(--pf-global--Color--100);--pf-topology__edge--ActiveStroke:var(--pf-global--active-color--100);--pf-topology__edge--ActiveStrokeWidth:2px;--pf-topology__edge--InteractiveStroke:var(--pf-global--active-color--100);--pf-topology__edge--m-info--EdgeStroke:var(--pf-global--primary-color--light-100);--pf-topology__edge--m-success--EdgeStroke:var(--pf-global--success-color--100);--pf-topology__edge--m-warning--EdgeStroke:var(--pf-global--warning-color--100);--pf-topology__edge--m-danger--EdgeStroke:var(--pf-global--danger-color--100);--pf-topology__edge--m-selected--background--Stroke:var(--pf-global--active-color--200);--pf-topology__edge--m-hover--background--Stroke:var(--pf-global--BorderColor--100);--pf-topology__edge__tag__text--Fill:var(--pf-global--palette--white);--pf-topology__edge__tag__text--Stroke:var(--pf-global--palette--white);--pf-topology__edge__tag__background--Fill:var(--pf-global--secondary-color--100);--pf-topology__edge__tag--m-info--background--Fill:var(--pf-global--primary-color--light-100);--pf-topology__edge__tag--m-success--background--Fill:var(--pf-global--success-color--100);--pf-topology__edge__tag--m-warning--background--Fill:var(--pf-global--warning-color--100);--pf-topology__edge__tag--m-warning--text--Fill:var(--pf-global--palette--black-1000);--pf-topology__edge__tag--m-warning--text--Stroke:var(--pf-global--palette--black-1000);--pf-topology__edge__tag--m-danger--background--Fill:var(--pf-global--danger-color--100);--pf-topology-connector-arrow--m-alt-connector-arrow--Fill:var(--pf-global--palette--white);--pf-topology__connector-square--m-source--Fill:var(--pf-global--BackgroundColor--100);--pf-topology-default-create-connector__arrow--Fill:var(--pf-global--Color--light-200);--pf-topology-default-create-connector--m-hover--line--Stroke:var(--pf-global--Color--100);--pf-topology-default-create-connector--m-hover--arrow--Fill:var(--pf-global--Color--100);--pf-topology-default-create-connector--m-hover--arrow--Stroke:var(--pf-global--Color--100)}:root:where(.pf-theme-dark){--pf-topology-visualization-surface--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-topology__node--Color:var(--pf-global--Color--100);--pf-topology__create-connector-color--Stroke:var(--pf-global--palette--black-300);--pf-topology__create-connector-color--Fill:var(--pf-global--palette--black-100);--pf-topology-default-create-connector__arrow--Fill:var(--pf-global--BackgroundColor--100);--pf-topology-default-create-connector--m-hover--line--Stroke:var(--pf-global--palette--black-100);--pf-topology-default-create-connector--m-hover--arrow--Fill:var(--pf-global--palette--black-100);--pf-topology-default-create-connector--m-hover--arrow--Stroke:var(--pf-global--palette--black-100);--pf-topology__node__background--Fill:var(--pf-global--BackgroundColor--300);--pf-topology__node__background--Stroke:var(--pf-global--palette--black-300);--pf-topology__node--m-disabled--Background--Fill:var(--pf-topology__node__background--Fill);--pf-topology__node--m-disabled--Background--Stroke:var(--pf-global--palette--black-500);--pf-topology__node--m-dragging--background--StrokeWidth:2px;--pf-topology__node--m-hover--background--Stroke:var(--pf-global--palette--black-100);--pf-topology__node--m-hover--label__background--Stroke:var(--pf-global--palette--black-100);--pf-topology__node__label__background--Fill:var(--pf-global--BackgroundColor--300);--pf-topology__node__label__background--Stroke:var(--pf-global--BorderColor--300);--pf-topology__node__label--m-dragging--background--StrokeWidth:2px;--pf-topology__node__label__text--Fill:var(--pf-global--Color--100);--pf-topology__node--m-selected--node__background--Stroke:var(--pf-global--palette--blue-300);--pf-topology__node--m-selected--node__label__background--Stroke:var(--pf-global--palette--blue-400);--pf-topology__node--m-selected--node__label__background--Fill:var(--pf-global--palette--blue-400);--pf-topology__node--m-selected--separator--Stroke:var(--pf-global--palette--blue-300);--pf-topology__node--m-selected--node__label__text--Fill:var(--pf-global--Color--100);--pf-topology__node--m-selected--m-info--node__label__text--Fill:var(--pf-global--palette--black-900);--pf-topology__node--m-selected--m-danger--node__label__text--Fill:var(--pf-global--palette--black-900);--pf-topology__node--m-selected--m-warning--node__label__text--Fill:var(--pf-global--palette--black-900);--pf-topology__node--m-selected--m-success--node__label__text--Fill:var(--pf-global--palette--black-900);--pf-topology__node__label__icon--Color:var(--pf-global--palette--black-600);--pf-topology__node__action-icon__icon--Color:var(--pf-global--Color--100);--pf-topology__group__background--Fill:var(--pf-global--BackgroundColor--300);--pf-topology__group__background--Stroke:var(--pf-global--palette--black-300);--pf-topology__group--m-alt-group--topology__group__background--Fill:var(--pf-global--palette--black-500);--pf-topology__group--m-alt-group--topology__group__background--Stroke:var(--pf-global--BorderColor--100);--pf-topology__group--m-selected--topology__group__background--Fill:var(--pf-global--primary-color--300);--pf-topology__group--m-selected--topology__group__background--Stroke:var(--pf-global--active-color--300);--pf-topology__group--m-hover--topology__group__background--Stroke:var(--pf-global--palette--black-100);--pf-topology__group--m-drop-target--topology__group__background--Stroke:var(--pf-global--palette--blue-300);--pf-topology__group__label__node__label__background--StrokeWidth:2px;--pf-topology__group__label__node__label__background--Stroke:var(--pf-global--palette--black-300);--pf-topology__group--m-hover--label__node__label__background--Stroke:var(--pf-global--palette--black-100);--pf-topology__group--m-selected--label__node__label__background--Stroke:var(--pf-global--primary-color--300);--pf-topology__group--m-selected--group__label__node__label__background--Fill:var(--pf-global--primary-color--300);--pf-topology__edge--HoverStroke:var(--pf-global--palette--black-300);--pf-topology__edge--m-hover--background--Stroke:var(--pf-global--palette--black-600);--pf-topology__edge--ActiveStroke:var(--pf-global--palette--blue-300);--pf-topology__edge--m-selected--background--Stroke:var(--pf-global--palette--black-600);--pf-topology__edge__tag__background--Fill:var(--pf-global--palette--black-300);--pf-topology__edge__tag__text--Fill:var(--pf-global--palette--black-900);--pf-topology__edge__tag__text--Stroke:var(--pf-global--palette--black-900)}:root:where(.pf-theme-dark) .pfext-catalog-item-icon__img--large{filter:brightness(1.5) invert(1) hue-rotate(180deg) saturate(4)}.pf-topology-visualization-surface{background-color:var(--pf-topology-visualization-surface--BackgroundColor);flex-grow:1;flex-shrink:1;height:100%;overflow:hidden;position:relative}.pf-topology-visualization-surface__svg{display:block;height:100%;width:100%}.pf-topology-visualization-surface__svg g:focus{outline:none}.pf-topology-context-menu__c-dropdown__menu{position:static!important}.pf-topology-context-sub-menu{padding-right:var(--pf-global--spacer--lg)!important;position:relative}.pf-topology-context-sub-menu__arrow{position:absolute;right:var(--pf-global--spacer--xs);top:50%;transform:translateY(-50%)}.pf-topology__node{color:var(--pf-topology__node--Color);outline:none}.pf-topology__group svg,.pf-topology__node svg{fill:var(--pf-topology__node--Color)}.pf-topology__node.pf-m-hover{--pf-topology__node__background--Stroke:var(--pf-topology__node--m-hover--background--Stroke);--pf-topology__node__label__background--Stroke:var(--pf-topology__node--m-hover--label__background--Stroke)}.pf-topology__node__background{fill:var(--pf-topology__node__background--Fill);stroke-width:var(--pf-topology__node__background--StrokeWidth);stroke:var(--pf-topology__node__background--Stroke)}.pf-topology__node__background.pf-m-disabled{--pf-topology__node__background--Fill:var(--pf-topology__node--m-disabled--Background--Fill);--pf-topology__node__background--Stroke:var(--pf-topology__node--m-disabled--Background--Stroke)}.pf-topology__node__background.pf-m-info{--pf-topology__node__background--Fill:var(--pf-topology__node--m-info--Background--Fill)}.pf-topology__node__background.pf-m-success{--pf-topology__node__background--Fill:var(--pf-topology__node--m-success--Background--Fill)}.pf-topology__node__background.pf-m-warning{--pf-topology__node__background--Fill:var(--pf-topology__node--m-warning--Background--Fill)}.pf-topology__node__background.pf-m-danger{--pf-topology__node__background--Fill:var(--pf-topology__node--m-danger--Background--Fill)}.pf-topology__node__background.pf-m-selected{--pf-topology__node__background--Fill:var(--pf-topology__node--m-selected--Background--Fill)}.pf-topology__node.pf-m-dragging{--pf-topology__node__background--StrokeWidth:var(--pf-topology__node--m-dragging--background--StrokeWidth);--pf-topology__node__label__background--StrokeWidth:var(--pf-topology__node__label--m-dragging--background--StrokeWidth)}.pf-topology__node.pf-m-dragging .pf-topology__node__background{cursor:grab}.pf-topology__node.pf-m-selected .pf-topology__node__background{stroke-width:2px;--pf-topology__node__background--Stroke:var(--pf-topology__node--m-selected--node__background--Stroke)}.pf-topology__node.pf-m-info .pf-topology__node__background{--pf-topology__node__background--Stroke:var(--pf-topology__node--m-info--node__background--Stroke)}.pf-topology__node.pf-m-success .pf-topology__node__background{--pf-topology__node__background--Stroke:var(--pf-topology__node--m-success--node__background--Stroke)}.pf-topology__node.pf-m-warning .pf-topology__node__background{--pf-topology__node__background--Stroke:var(--pf-topology__node--m-warning--node__background--Stroke)}.pf-topology__node.pf-m-danger .pf-topology__node__background{--pf-topology__node__background--Stroke:var(--pf-topology__node--m-danger--node__background--Stroke)}.pf-topology__node__decorator{--pf-topology__node--Color:var(--pf-topology__node_decorator--Color);outline:none;transition:color .2s ease}.pf-topology__node__decorator svg{fill:var(--pf-topology__node_decorator--Color)}.pf-topology__node__decorator__bg{fill:var(--pf-topology__node__decorator__bg--Fill);stroke:var(--pf-topology__node__decorator__bg--Stroke);stroke-width:var(--pf-topology__node__decorator__bg--StrokeWidth)}.pf-topology__node__decorator__icon{font-size:var(--pf-global--icon--FontSize--sm)}.pf-topology__node__decorator__icon,.pf-topology__node__decorator__status{color:var(--pf-topology__node_decorator--Color)}.pf-topology__node__decorator__status .pf-m-info{--pf-topology__node_decorator--Color:var(--pf-topology__node__decorator__status--m-info--Color)}.pf-topology__node__decorator__status .pf-m-danger{--pf-topology__node_decorator--Color:var(--pf-topology__node__decorator__status--m-danger--Color)}.pf-topology__node__decorator__status .pf-m-warning{--pf-topology__node_decorator--Color:var(--pf-topology__node__decorator__status--m-warning--Color)}.pf-topology__node__decorator__status .pf-m-success{--pf-topology__node_decorator--Color:var(--pf-topology__node__decorator__status--m-success--Color)}.pf-topology__node__label>text{fill:var(--pf-topology__node__label__text--Fill);font-size:var(--pf-global--FontSize--sm);pointer-events:none}.pf-topology__node__label>text.pf-m-secondary{fill:var(--pf-topology__node__label__text--m-secondary--Fill);font-size:var(--pf-global--FontSize--xs)}.pf-topology__node.pf-m-selected .pf-topology__node__label>text{--pf-topology__node__label__text--Fill:var(--pf-topology__node--m-selected--node__label__text--Fill);--pf-topology__node__label__text--m-secondary--Fill:var(--pf-topology__node--m-selected--node__label__text--m-secondary--Fill)}.pf-topology__node__label__background{fill:var(--pf-topology__node__label__background--Fill);stroke-width:var(--pf-topology__node__label__background--StrokeWidth);stroke:var(--pf-topology__node__label__background--Stroke)}.pf-topology__node.pf-m-selected{stroke-width:2px;--pf-topology__node__label__background--Stroke:var(--pf-topology__node--m-selected--node__label__background--Stroke);--pf-topology__node__label__background--Fill:var(--pf-topology__node--m-selected--node__label__background--Fill);--pf-topology__node__separator--Stroke:var(--pf-topology__node--m-selected--separator--Stroke);--pf-topology__node__action-icon__icon--Color:var(--pf-topology__node--m-selected--action-icon__icon--Color)}.pf-topology__node.pf-m-info{--pf-topology__node__label__background--Stroke:var(--pf-topology__node--m-info--node__label__background--Stroke)}.pf-topology__node.pf-m-success{--pf-topology__node__label__background--Stroke:var(--pf-topology__node--m-success--node__label__background--Stroke)}.pf-topology__node.pf-m-warning{--pf-topology__node__label__background--Stroke:var(--pf-topology__node--m-warning--node__label__background--Stroke)}.pf-topology__node.pf-m-danger{--pf-topology__node__label__background--Stroke:var(--pf-topology__node--m-danger--node__label__background--Stroke)}.pf-topology__node.pf-m-selected.pf-m-info{--pf-topology__node__label__background--Fill:var(--pf-topology__node--m-selected--m-info--node__label__background--Fill);--pf-topology__node--m-selected--node__label__text--Fill:var(--pf-topology__node--m-selected--m-info--node__label__text--Fill)}.pf-topology__node.pf-m-selected.pf-m-danger{--pf-topology__node__label__background--Fill:var(--pf-topology__node--m-selected--m-danger--node__label__background--Fill);--pf-topology__node--m-selected--node__label__text--Fill:var(--pf-topology__node--m-selected--m-danger--node__label__text--Fill)}.pf-topology__node.pf-m-selected.pf-m-warning{--pf-topology__node__label__background--Fill:var(--pf-topology__node--m-selected--m-warning--node__label__background--Fill);--pf-topology__node--m-selected--node__label__text--Fill:var(--pf-topology__node--m-selected--m-warning--node__label__text--Fill)}.pf-topology__node.pf-m-selected.pf-m-success{--pf-topology__node__label__background--Fill:var(--pf-topology__node--m-selected--m-success--node__label__background--Fill);--pf-topology__node--m-selected--node__label__text--Fill:var(--pf-topology__node--m-selected--m-success--node__label__text--Fill)}.pf-topology__node__label__badge>rect{stroke-width:var(--pf-topology__node__label__badge__rect--StrokeWidth)}.pf-topology__node__label__badge>text{font-size:var(--pf-global--FontSize--xs);pointer-events:none}.pf-topology__node__label__icon{color:var(--pf-topology__node__label__icon--Color)}.pf-topology__node__label__icon>svg{fill:currentColor;height:100%;width:100%}.pf-topology__node__label__icon__background{fill:var(--pf-topology__node__label__icon__background--Fill);stroke-width:var(--pf-topology__node__label__icon__background--StrokeWidth);stroke:var(--pf-topology__node__label__icon__background--Stroke)}.pf-topology__node.pf-m-selected .pf-topology__node__label__icon__background{stroke-width:2px;stroke:var(--pf-topology__node--m-selected--label__icon__background--Stroke)}.pf-topology__node.pf-m-info .pf-topology__node__label__icon__background{stroke:var(--pf-topology__node--m-info--label__icon__background--Stroke)}.pf-topology__node.pf-m-success .pf-topology__node__label__icon__background{stroke:var(--pf-topology__node--m-success--label__icon__background--Stroke)}.pf-topology__node.pf-m-warning .pf-topology__node__label__icon__background{stroke:var(--pf-topology__node--m-warning--label__icon__background--Stroke)}.pf-topology__node.pf-m-danger .pf-topology__node__label__icon__background{stroke:var(--pf-topology__node--m-danger--label__icon__background--Stroke)}.pf-topology__node__separator{stroke:var(--pf-topology__node__separator--Stroke);stroke-width:1}.pf-topology__node__action-icon{cursor:pointer}.pf-topology__node__action-icon__background{stroke-width:0;fill:transparent}.pf-topology__node__action-icon__icon{color:var(--pf-topology__node__action-icon__icon--Color)}.pf-topology__node__action-icon__icon svg{fill:currentColor}.pf-topology__group.pf-m-selected .pf-topology__node__action-icon__icon{color:var(--pf-topology__group--m-selected--topology__node__action-icon__icon--Color)}.pf-topology__group{outline:none}.pf-topology__group__background{fill:var(--pf-topology__group__background--Fill);stroke:var(--pf-topology__group__background--Stroke);stroke-width:5px}.pf-topology__group.pf-m-alt-group .pf-topology__group__background{--pf-topology__group__background--Fill:var(--pf-topology__group--m-alt-group--topology__group__background--Fill);--pf-topology__group__background--Stroke:var(--pf-topology__group--m-alt-group--topology__group__background--Stroke)}.pf-topology__group.pf-m-selected .pf-topology__group__background{--pf-topology__group__background--Fill:var(--pf-topology__group--m-selected--topology__group__background--Fill);--pf-topology__group__background--Stroke:var(--pf-topology__group--m-selected--topology__group__background--Stroke)}.pf-topology__group.pf-m-hover .pf-topology__group__background{--pf-topology__group__background--Stroke:var(--pf-topology__group--m-hover--topology__group__background--Stroke);--pf-topology__group__label__node__label__background--Stroke:var(--pf-topology__group--m-hover--label__node__label__background--Stroke)}.pf-topology__group.pf-m-hover.pf-m-selected .pf-topology__group__background{--pf-topology__group__background--Fill:var(--pf-topology__group--m-selected--topology__group__background--Fill);--pf-topology__group__background--Stroke:var(--pf-topology__group--m-hover--topology__group__background--Stroke);--pf-topology__group__label__node__label__background--Stroke:var(--pf-topology__group--m-hover--label__node__label__background--Stroke)}.pf-topology__group.pf-m-drop-target .pf-topology__group__background{--pf-topology__group__background--Stroke:var(--pf-topology__group--m-drop-target--topology__group__background--Stroke);stroke-dasharray:12}.pf-topology__group__collapsed-badge.pf-topology__node__label__badge>rect{fill:var(--pf-topology__group__collapsed-badge__node__label__badge__rect--Fill);stroke:var(--pf-topology__group__collapsed-badge__node__label__badge__rect--Stroke)}.pf-topology__group__collapsed-badge.pf-topology__node__label__badge>text{fill:var(--pf-topology__group__collapsed-badge__node__label__badge__text--Fill);font-size:var(--pf-global--FontSize--xs);pointer-events:none}.pf-topology__group__label .pf-topology__node__label__background{fill:var(--pf-topology__group__label__node__label__background--Fill);--pf-topology__node__label__background--Stroke:var(--pf-topology__group__label__node__label__background--Stroke);--pf-topology__node__label__background--StrokeWidth:var(--pf-topology__group__label__node__label__background--StrokeWidth)}.pf-topology__group__label>text{fill:var(--pf-topology__group__label__text--Fill);font-size:var(--pf-global--FontSize--sm);pointer-events:none}.pf-topology__group__label .pf-topology__node__action-icon__icon{color:var(--pf-topology__group__label__node__action-icon__icon--Color)}.pf-topology__group.pf-m-selected .pf-topology__group__label .pf-topology__node__label__background{fill:var(--pf-topology__group--m-selected--group__label__node__label__background--Fill);--pf-topology__group__label__node__label__background--Stroke:var(--pf-topology__group--m-selected--label__node__label__background--Stroke)}.pf-topology__edge{--edge--stroke-width:var(--pf-topology__edge--StrokeWidth);--edge--stroke-dasharray:0;--edge--stroke:var(--pf-topology__edge--Stroke);--edge--fill:var(--edge--stroke);--edge--opacity:1;--edge--cursor:pointer;--edge--hover--stroke:var(--pf-topology__edge--HoverStroke);--edge--hover--fill:var(--edge--hover--stroke);--edge--active--stroke:var(--pf-topology__edge--ActiveStroke);--edge--active--stroke-width:var(--pf-topology__edge--ActiveStrokeWidth);--edge--active--fill:var(--edge--active--stroke);--edge--drag-active--opacity:0.4;--edge__arrow--cursor:default;--edge--interactive--stroke:var(--pf-topology__edge--InteractiveStroke);--edge--interactive--fill:var(--edge--interactive--stroke);stroke:var(--edge--stroke);fill:var(--edge--fill);cursor:var(--edge--cursor);opacity:var(--edge--opacity)}.pf-topology__edge.pf-m-info{--edge--stroke:var(--pf-topology__edge--m-info--EdgeStroke)}.pf-topology__edge.pf-m-success{--edge--stroke:var(--pf-topology__edge--m-success--EdgeStroke)}.pf-topology__edge.pf-m-warning{--edge--stroke:var(--pf-topology__edge--m-warning--EdgeStroke)}.pf-topology__edge.pf-m-danger{--edge--stroke:var(--pf-topology__edge--m-danger--EdgeStroke)}.pf-topology__edge__background{stroke-width:10px;stroke:transparent;fill:none}.pf-topology__edge.pf-m-selected .pf-topology__edge__background{stroke:var(--pf-topology__edge--m-selected--background--Stroke)}.pf-topology__edge.pf-m-hover .pf-topology__edge__background{stroke:var(--pf-topology__edge--m-hover--background--Stroke)}.pf-topology__edge__link{stroke-width:var(--edge--stroke-width);stroke-dasharray:var(--edge--stroke-dasharray);fill-opacity:0;animation:pf-topology__edge__dash 0s linear infinite forwards}.pf-topology__edge__link.pf-m-dotted{stroke-dasharray:2;stroke-dashoffset:2}.pf-topology__edge__link.pf-m-dashed{stroke-dasharray:4 2;stroke-dashoffset:6}.pf-topology__edge__link.pf-m-dashed-md{stroke-dasharray:8 2;stroke-dashoffset:10}.pf-topology__edge__link.pf-m-dashed-lg{stroke-dasharray:16 2;stroke-dashoffset:18}.pf-topology__edge__link.pf-m-dashed-xl{stroke-dasharray:32 2;stroke-dashoffset:34}@keyframes pf-topology__edge__dash{to{stroke-dashoffset:0}}.pf-topology__edge.pf-m-selected .pf-topology-connector-arrow,.pf-topology__edge.pf-m-selected .pf-topology__edge__link{fill:var(--edge--active--fill);stroke:var(--edge--active--stroke);stroke-width:var(--edge--active--stroke-width)}.pf-topology__edge.pf-m-selected.pf-m-hover .pf-topology-connector-arrow,.pf-topology__edge.pf-m-selected.pf-m-hover .pf-topology__edge__link{fill:var(--edge--active--fill);stroke:var(--edge--active--stroke)}.pf-topology__edge.pf-m-dragging{pointer-events:none}.pf-topology__edge.pf-m-hover .pf-topology-connector-arrow,.pf-topology__edge.pf-m-hover .pf-topology__edge__link{fill:var(--edge--hover--fill);stroke:var(--edge--hover--stroke)}.pf-topology__edge.pf-m-dragging .pf-topology-connector-arrow,.pf-topology__edge.pf-m-dragging .pf-topology__edge__link{fill:var(--edge--interactive--fill);stroke:var(--edge--interactive--stroke)}.pf-topology__edge .pf-topology-connector-arrow{stroke:var(--edge--stroke);cursor:var(--edge__arrow--cursor)}.pf-topology__edge .pf-topology-connector-arrow.pf-m-draggable{cursor:pointer}.pf-topology__edge__tag__background{fill:var(--pf-topology__edge__tag__background--Fill);stroke-width:0}.pf-topology__edge__tag>text{fill:var(--pf-topology__edge__tag__text--Fill);stroke:var(--pf-topology__edge__tag__text--Stroke);stroke-width:.5;font-size:10px;pointer-events:none}.pf-topology__edge__tag.pf-m-info .pf-topology__edge__tag__background{fill:var(--pf-topology__edge__tag--m-info--background--Fill)}.pf-topology__edge__tag.pf-m-success .pf-topology__edge__tag__background{fill:var(--pf-topology__edge__tag--m-success--background--Fill)}.pf-topology__edge__tag.pf-m-warning .pf-topology__edge__tag__background{fill:var(--pf-topology__edge__tag--m-warning--background--Fill)}.pf-topology__edge__tag.pf-m-warning>text{fill:var(--pf-topology__edge__tag--m-warning--text--Fill);stroke:var(--pf-topology__edge__tag--m-warning--text--Stroke)}.pf-topology__edge__tag.pf-m-danger .pf-topology__edge__tag__background{fill:var(--pf-topology__edge__tag--m-danger--background--Fill)}.pf-topology-connector-arrow{stroke-width:1;stroke:var(--edge--stroke)}.pf-topology-connector-arrow.pf-m-alt-connector-arrow{fill:var(--pf-topology-connector-arrow--m-alt-connector-arrow--Fill)}.pf-topology__connector-cross{stroke-width:1;stroke:var(--edge--stroke)}.pf-topology__connector-cross.pf-m-source{fill:var(--edge--stroke)}.pf-topology__connector-circle,.pf-topology__connector-square{stroke-width:1;stroke:var(--edge--stroke);fill:var(--edge--stroke)}.pf-topology__connector-circle.pf-m-source,.pf-topology__connector-square.pf-m-source{fill:var(--pf-topology__connector-square--m-source--Fill)}.pf-topology__connector-x{stroke-width:1;stroke:var(--edge--stroke)}.pf-topology-default-create-connector{cursor:pointer}.pf-topology-default-create-connector__line{stroke:var(--pf-topology__create-connector-color--Stroke);stroke-width:2px;stroke-dasharray:3px,3px}.pf-topology-default-create-connector__arrow{fill:var(--pf-topology-default-create-connector__arrow--Fill);stroke:var(--pf-topology__create-connector-color--Stroke)}.pf-topology-default-create-connector.pf-m-hover .pf-topology-default-create-connector__line{stroke:var(--pf-topology-default-create-connector--m-hover--line--Stroke)}.pf-topology-default-create-connector.pf-m-hover .pf-topology-default-create-connector__arrow{fill:var(--pf-topology-default-create-connector--m-hover--arrow--Fill);stroke:var(--pf-topology-default-create-connector--m-hover--arrow--Stroke)}.pf-topology-default-create-connector__create__bg{stroke-width:10px;stroke:transparent;fill-opacity:0}.pf-topology-default-create-connector__create__cursor{fill:var(--pf-topology__create-connector-color--Fill)}:root{--pf-topology-pipelines__pill--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-text--FontSize:var(--pf-global--FontSize--sm);--pf-topology-pipelines__pill-text--FontFamily:var(--pf-global--FontFamily--sans-serif);--pf-topology-pipelines__pill-background--Fill:var(--pf-global--BackgroundColor--100);--pf-topology-pipelines__pill-background--Stroke:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--StrokeWidth:1px;--pf-topology-pipelines__pill-background--m-danger--Fill:var(--pf-global--danger-color--100);--pf-topology-pipelines__pill-background--m-success--Fill:var(--pf-global--success-color--100);--pf-topology-pipelines__pill-background--m-warning--Fill:var(--pf-global--warning-color--100);--pf-topology-pipelines__pill-background--m-skipped--Fill:var(--pf-global--secondary-color--100);--pf-topology-pipelines__pill-background--m-in-progress--Fill:var(--pf-global--info-color--100);--pf-topology-pipelines__pill-background--m-pending--Fill:var(--pf-global--BackgroundColor--100);--pf-topology-pipelines__pill-background--m-running--Fill:var(--pf-global--BackgroundColor--100);--pf-topology-pipelines__pill-background--m-idle--Fill:var(--pf-global--BackgroundColor--100);--pf-topology-pipelines__pill-background--m-danger--Stroke:var(--pf-global--danger-color--100);--pf-topology-pipelines__pill-background--m-success--Stroke:var(--pf-global--success-color--100);--pf-topology-pipelines__pill-background--m-warning--Stroke:var(--pf-global--warning-color--100);--pf-topology-pipelines__pill-background--m-skipped--Stroke:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--m-in-progress--Stroke:var(--pf-global--info-color--100);--pf-topology-pipelines__pill-background--m-pending--Stroke:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--m-running--Stroke:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--m-idle--Stroke:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--m-selected--Fill:var(--pf-global--active-color--100);--pf-topology-pipelines__pill-background--m-selected--Stroke:var(--pf-global--active-color--100);--pf-topology-pipelines__pill-background--m-selected__text--Color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-background--m-selected--m-danger--Fill:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-background--m-selected--m-success--Fill:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-background--m-selected--m-warning--Fill:var(--pf-global--Color--100);--pf-topology-pipelines__pill-background--m-selected--m-skipped--Fill:var(--pf-global--secondary-color--100);--pf-topology-pipelines__pill-background--m-selected--m-in-progress--Fill:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-background--m-selected--m-pending--Fill:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--m-selected--m-running--Fill:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-background--m-selected--m-idle--Fill:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill--Color);--pf-topology-pipelines__pill-text--m-selected--Color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-text--m-selected--m-danger--Color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-text--m-selected--m-success--Color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-text--m-selected--m-warning--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-text--m-selected--m-skipped--Color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-text--m-selected--m-in-progress--Color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-text--m-selected--m-pending--Color:var(--pf-global--palette--black-1000);--pf-topology-pipelines__pill-text--m-selected--m-running--Color:var(--pf-global--palette--black-1000);--pf-topology-pipelines__pill-text--m-selected--m-idle--Color:var(--pf-global--palette--black-1000);--pf-topology-pipelines__pill-status--color:var(--pf-global--BorderColor--100);--pf-topology-pipelines__pill-status--m-danger--color:var(--pf-global--danger-color--100);--pf-topology-pipelines__pill-status--m-success--color:var(--pf-global--success-color--100);--pf-topology-pipelines__pill-status--m-warning--color:var(--pf-global--warning-color--100);--pf-topology-pipelines__pill-status--m-skipped--color:var(--pf-global--secondary-color--100);--pf-topology-pipelines__pill-status--m-in-progress--color:var(--pf-global--info-color--100);--pf-topology-pipelines__pill-status--m-pending--color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-status--m-running--color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-status--m-idle--color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-status--m-selected--color:var(--pf-global--active-color--100);--pf-topology-pipelines__pill-status--m-selected--m-danger--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-status--m-selected--m-success--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-status--m-selected--m-warning--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-status--m-selected--m-skipped--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-status--m-selected--m-in-progress--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__pill-status--m-selected--m-pending--color:var(--pf-global--palette--black-1000);--pf-topology-pipelines__pill-status--m-selected--m-running--color:var(--pf-global--palette--black-1000);--pf-topology-pipelines__pill-status--m-selected--m-idle--color:var(--pf-global--palette--black-1000);--pf-topology-pipelines__pill-badge--fill:var(--pf-global--palette--black-200);--pf-topology-pipelines__pill-badge--text--fill:var(--pf-global--palette--black-1000);--pf-topology-pipelines__status-icon--color:var(--pf-global--BorderColor--100);--pf-topology-pipelines__status-icon--fill:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-danger--color:var(--pf-global--danger-color--100);--pf-topology-pipelines__status-icon--m-success--color:var(--pf-global--success-color--100);--pf-topology-pipelines__status-icon--m-warning--color:var(--pf-global--warning-color--100);--pf-topology-pipelines__status-icon--m-skipped--color:var(--pf-global--secondary-color--100);--pf-topology-pipelines__status-icon--m-in-progress--color:var(--pf-global--info-color--100);--pf-topology-pipelines__status-icon--m-pending--color:var(--pf-global--Color--100);--pf-topology-pipelines__status-icon--m-running--color:var(--pf-global--Color--100);--pf-topology-pipelines__status-icon--m-idle--color:var(--pf-global--Color--100);--pf-topology-pipelines__status-icon--m-selected--color:var(--pf-global--active-color--100);--pf-topology-pipelines__status-icon--m-selected--m-danger--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-success--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-warning--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-skipped--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-in-progress--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-pending--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-running--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__status-icon--m-selected--m-idle--color:var(--pf-global--Color--light-100);--pf-topology-pipelines__when-expression-background--Stroke:var(--pf-global--BorderColor--200);--pf-topology-pipelines__when-expression-background--Fill:var(--pf-global--BorderColor--200);--pf-topology-pipelines__when-expression--connector--Stroke:var(--pf-global--BorderColor--100);--pf-topology-pipelines__when-expression--m-danger--color:var(--pf-global--danger-color--100);--pf-topology-pipelines__when-expression--m-success--color:var(--pf-global--success-color--100);--pf-topology-pipelines__when-expression--m-warning--color:var(--pf-global--BorderColor--200);--pf-topology-pipelines__when-expression--m-skipped--color:var(--pf-global--secondary-color--100);--pf-topology-pipelines__when-expression--m-in-progress--color:var(--pf-global--info-color--100);--pf-topology-pipelines__when-expression--m-selected--color:var(--pf-global--active-color--100)}:root:where(.pf-theme-dark){--pf-topology-pipelines__pill--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-background--Fill:var(--pf-global--BackgroundColor--300);--pf-topology-pipelines__pill-background--Stroke:var(--pf-global--palette--black-300);--pf-topology-pipelines__pill-text--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-text--m-selected--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-text--m-selected--m-danger--Color:var(--pf-global--palette--black-900);--pf-topology-pipelines__pill-text--m-selected--m-success--Color:var(--pf-global--palette--black-900);--pf-topology-pipelines__pill-text--m-selected--m-warning--Color:var(--pf-global--palette--black-900);--pf-topology-pipelines__pill-text--m-selected--m-skipped--Color:var(--pf-global--BackgroundColor--150);--pf-topology-pipelines__pill-text--m-selected--m-in-progress--Color:var(--pf-global--palette--black-900);--pf-topology-pipelines__pill-text--m-selected--m-pending--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-text--m-selected--m-running--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill-text--m-selected--m-idle--Color:var(--pf-global--Color--100);--pf-topology-pipelines__pill__label__icon--Color:var(--pf-global--palette--black-600);--pf-topology-pipelines__pill__action-icon__icon--Color:var(--pf-global--Color--100)}.pf-topology-pipelines__pill{fill:var(--pf-topology-pipelines__pill--Color)}.pf-topology-pipelines__pill-background{fill:var(--pf-topology-pipelines__pill-background--Fill);stroke-width:var(--pf-topology-pipelines__pill-background--StrokeWidth);stroke:var(--pf-topology-pipelines__pill-background--Stroke)}.pf-topology-pipelines__pill.pf-m-danger .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-danger--Fill)}.pf-topology-pipelines__pill.pf-m-success .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-success--Fill)}.pf-topology-pipelines__pill.pf-m-warning .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-warning--Fill)}.pf-topology-pipelines__pill.pf-m-skipped .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-skipped--Fill)}.pf-topology-pipelines__pill.pf-m-in-progress .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-in-progress--Fill)}.pf-topology-pipelines__pill.pf-m-idle .pf-topology-pipelines__pill-background,.pf-topology-pipelines__pill.pf-m-pending .pf-topology-pipelines__pill-background,.pf-topology-pipelines__pill.pf-m-running .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Stroke:var(--pf-global--BorderColor--100)}.pf-topology-pipelines__pill.pf-m-selected .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-selected--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-selected--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-danger .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-danger--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-danger--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-success .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-success--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-success--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-warning .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-warning--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-warning--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-skipped .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-selected--m-skipped--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-skipped--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-in-progress .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-in-progress--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-in-progress--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-pending .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-selected--m-pending--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-pending--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-running .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-selected--m-running--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-running--Stroke)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-idle .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-selected--m-idle--Fill);--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-idle--Stroke)}.pf-topology-pipelines__pill.pf-m-hover.pf-m-danger .pf-topology-pipelines__pill-background,.pf-topology-pipelines__pill.pf-m-hover.pf-m-in-progress .pf-topology-pipelines__pill-background,.pf-topology-pipelines__pill.pf-m-hover.pf-m-skipped .pf-topology-pipelines__pill-background,.pf-topology-pipelines__pill.pf-m-hover.pf-m-success .pf-topology-pipelines__pill-background,.pf-topology-pipelines__pill.pf-m-hover.pf-m-warning .pf-topology-pipelines__pill-background{--pf-topology-pipelines__pill-background--StrokeWidth:var(--pf-global--BorderWidth--md)}.pf-topology-pipelines__pill-text{fill:var(--pf-topology-pipelines__pill-text--Color);font-family:var(--pf-topology-pipelines__pill-text--FontFamily);font-size:var(--pf-topology-pipelines__pill-text--FontSize)}.pf-topology-pipelines__pill.pf-m-selected .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-danger .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-danger--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-success .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-success--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-warning .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-warning--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-skipped .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-skipped--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-in-progress .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-in-progress--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-pending .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-pending--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-running .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-running--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-idle .pf-topology-pipelines__pill-text{--pf-topology-pipelines__pill-text--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-idle--Color)}.pf-topology-pipelines__pill-status{color:var(--pf-topology-pipelines__pill-status--color)}.pf-topology-pipelines__pill-status.pf-m-selected{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--color)}.pf-topology-pipelines__pill-status.pf-m-danger{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-danger--color)}.pf-topology-pipelines__pill-status.pf-m-success{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-success--color)}.pf-topology-pipelines__pill-status.pf-m-warning{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-warning--color)}.pf-topology-pipelines__pill-status.pf-m-skipped{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-skipped--color)}.pf-topology-pipelines__pill-status.pf-m-in-progress{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-in-progress--color)}.pf-topology-pipelines__pill-status.pf-m-pending{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-pending--color)}.pf-topology-pipelines__pill-status.pf-m-running{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-running--color)}.pf-topology-pipelines__pill-status.pf-m-idle{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-idle--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-danger{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-danger--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-success{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-success--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-warning{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-warning--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-skipped{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-skipped--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-in-progress{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-in-progress--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-pending{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-pending--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-running{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-running--color)}.pf-topology-pipelines__pill-status.pf-m-selected.pf-m-idle{--pf-topology-pipelines__pill-status--color:var(--pf-topology-pipelines__pill-status--m-selected--m-idle--color)}.pf-topology-pipelines__pill-status.pf-m-spin{animation:status-spin 2s linear infinite;filter:blur(0);-webkit-filter:blur(0);transform-box:fill-box;transform-origin:center}@keyframes status-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.pf-topology-pipelines__pill-badge{fill:var(--pf-topology-pipelines__pill-badge--fill);stroke-width:0}.pf-topology-pipelines__pill-badge text{fill:var(--pf-topology-pipelines__pill-badge--text--fill);color:var(--pf-topology__node--Color)}.pf-topology-pipelines__pill.pf-m-selectable{cursor:pointer}.pf-topology-pipelines__pill.pf-m-selected .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-danger .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-danger--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-success .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-success--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-warning .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-warning--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-skipped .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-skipped--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-in-progress .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-in-progress--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-pending .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-pending--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-running .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-running--Color)}.pf-topology-pipelines__pill.pf-m-selected.pf-m-idle .pf-topology__node__action-icon__icon{--pf-topology__node__action-icon__icon--Color:var(--pf-topology-pipelines__pill-text--m-selected--m-idle--Color)}.pf-topology-pipelines__when-expression-background{stroke:var(--pf-topology-pipelines__when-expression-background--Stroke);fill:var(--pf-topology-pipelines__when-expression-background--Fill)}.pf-topology-pipelines__pill.pf-m-selected .pf-topology-pipelines__when-expression-background{--pf-topology-pipelines__when-expression-background--Stroke:var(--pf-topology-pipelines__when-expression--m-selected--color)}.pf-topology-pipelines__when-expression-background.pf-m-success{--pf-topology-pipelines__when-expression-background--Stroke:var(--pf-topology-pipelines__when-expression--m-success--color);--pf-topology-pipelines__when-expression-background--Fill:var(--pf-topology-pipelines__when-expression--m-success--color)}.pf-topology-pipelines__when-expression-background.pf-m-unmet{--pf-topology-pipelines__when-expression-background--Stroke:var(--pf-topology-pipelines__when-expression--m-warning--color);--pf-topology-pipelines__when-expression-background--Fill:var(--pf-topology-pipelines__when-expression--m-warning--color)}.pf-topology-pipelines__when-expression-background.pf-m-skipped{--pf-topology-pipelines__when-expression-background--Stroke:var(--pf-topology-pipelines__when-expression--m-skipped--color);--pf-topology-pipelines__when-expression-background--Fill:var(--pf-topology-pipelines__when-expression--m-skipped--color)}.pf-topology-pipelines__when-expression-background.pf-m-in-progress{--pf-topology-pipelines__when-expression-background--Stroke:var(--pf-topology-pipelines__when-expression--m-in-progress--color);--pf-topology-pipelines__when-expression-background--Fill:var(--pf-topology-pipelines__when-expression--m-in-progress--color)}.pf-topology-pipelines__pill.pf-m-selected .pf-topology-pipelines__when-expression-edge{stroke:var(--pf-topology-pipelines__when-expression--m-selected--color)}.pf-topology-pipelines__status-icon{color:var(--pf-topology-pipelines__status-icon--color)}.pf-topology-pipelines__status-icon.pf-m-selected{fill:var(--pf-topology-pipelines__status-icon--fill);--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--color)}.pf-topology-pipelines__status-icon.pf-m-danger{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-danger--color)}.pf-topology-pipelines__status-icon.pf-m-success{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-success--color)}.pf-topology-pipelines__status-icon.pf-m-warning{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-warning--color)}.pf-topology-pipelines__status-icon.pf-m-skipped{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-skipped--color)}.pf-topology-pipelines__status-icon.pf-m-in-progress{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-in-progress--color)}.pf-topology-pipelines__status-icon.pf-m-pending{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-pending--color)}.pf-topology-pipelines__status-icon.pf-m-running{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-running--color)}.pf-topology-pipelines__status-icon.pf-m-idle{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-idle--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-danger{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-danger--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-success{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-success--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-warning{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-warning--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-skipped{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-skipped--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-in-progress{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-in-progress--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-pending{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-pending--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-running{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-running--color)}.pf-topology-pipelines__status-icon.pf-m-selected.pf-m-idle{--pf-topology-pipelines__status-icon--color:var(--pf-topology-pipelines__status-icon--m-selected--m-idle--color)}.pf-topology-pipelines__status-icon-background{fill:var(--pf-topology-pipelines__pill-background--Fill);stroke:var(--pf-topology-pipelines__pill-background--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-danger{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-danger--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-success{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-success--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-warning{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-warning--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-skipped{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-skipped--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-in-progress{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-in-progress--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-pending{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-pending--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-running{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-running--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-idle{--pf-topology-pipelines__pill-background--Stroke:var(--pf-topology-pipelines__pill-background--m-idle--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__status-icon--m-selected--color)}.pf-topology-pipelines__status-icon-background.pf-m-danger.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-danger--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-success.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-success--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-warning.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-warning--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-skipped.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-skipped--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-in-progress.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-in-progress--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-pending.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-pending--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-running.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-running--Stroke)}.pf-topology-pipelines__status-icon-background.pf-m-idle.pf-m-selected{--pf-topology-pipelines__pill-background--Fill:var(--pf-topology-pipelines__pill-background--m-idle--Stroke)}.pf-c-tabs{--pf-c-tabs--inset:0;--pf-c-tabs--Width:auto;--pf-c-tabs--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-tabs--before--border-width--base:var(--pf-global--BorderWidth--sm);--pf-c-tabs--before--BorderTopWidth:0;--pf-c-tabs--before--BorderRightWidth:0;--pf-c-tabs--before--BorderBottomWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs--before--BorderLeftWidth:0;--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-page-insets--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-page-insets--xl--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--Width:100%;--pf-c-tabs--m-vertical--MaxWidth:15.625rem;--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical__list--before--BorderColor:var(--pf-c-tabs--before--BorderColor);--pf-c-tabs--m-vertical__list--before--BorderTopWidth:0;--pf-c-tabs--m-vertical__list--before--BorderRightWidth:0;--pf-c-tabs--m-vertical__list--before--BorderBottomWidth:0;--pf-c-tabs--m-vertical__list--before--BorderLeftWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth:var(--pf-c-tabs__link--before--border-width--base);--pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor:transparent;--pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-tabs--m-color-scheme--light-300__link--disabled--BackgroundColor:var(--pf-global--palette--black-150);--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__item--m-action--before--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-tabs__link--Color:var(--pf-global--Color--200);--pf-c-tabs__link--FontSize:var(--pf-global--FontSize--md);--pf-c-tabs__link--BackgroundColor:transparent;--pf-c-tabs__link--OutlineOffset:-0.375rem;--pf-c-tabs__link--PaddingTop:var(--pf-global--spacer--sm);--pf-c-tabs__link--PaddingRight:var(--pf-global--spacer--md);--pf-c-tabs__link--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tabs__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-tabs__link--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-tabs__link--disabled--BackgroundColor:var(--pf-global--palette--black-150);--pf-c-tabs__item--m-current__link--Color:var(--pf-global--Color--100);--pf-c-tabs__item--m-current__link--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-tabs--m-vertical__link--PaddingTop:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical__link--PaddingBottom:var(--pf-global--spacer--md);--pf-c-tabs--m-box__link--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-tabs--m-box__link--disabled--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-tabs--m-box__item-action--c-button--disabled--BackgroundColor:var(--pf-global--palette--black-400);--pf-c-tabs--m-secondary__link--FontSize:var(--pf-global--FontSize--sm);--pf-c-tabs__item--m-action__link--PaddingRight:var(--pf-global--spacer--xs);--pf-c-tabs__link--before--border-color--base:var(--pf-global--BorderColor--100);--pf-c-tabs__link--before--border-width--base:var(--pf-global--BorderWidth--sm);--pf-c-tabs__link--before--BorderTopColor:var(--pf-c-tabs__link--before--border-color--base);--pf-c-tabs__link--before--BorderRightColor:var(--pf-c-tabs__link--before--border-color--base);--pf-c-tabs__link--before--BorderBottomColor:var(--pf-c-tabs__link--before--border-color--base);--pf-c-tabs__link--before--BorderLeftColor:var(--pf-c-tabs__link--before--border-color--base);--pf-c-tabs__link--before--BorderTopWidth:0;--pf-c-tabs__link--before--BorderRightWidth:0;--pf-c-tabs__link--before--BorderBottomWidth:0;--pf-c-tabs__link--before--BorderLeftWidth:0;--pf-c-tabs__link--before--Left:calc(var(--pf-c-tabs__link--before--border-width--base)*-1);--pf-c-tabs__link--disabled--before--BorderRightWidth:0;--pf-c-tabs__link--disabled--before--BorderBottomWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs__link--disabled--before--BorderLeftWidth:0;--pf-c-tabs__link--after--Top:auto;--pf-c-tabs__link--after--Right:0;--pf-c-tabs__link--after--Bottom:0;--pf-c-tabs__link--after--BorderColor:var(--pf-global--BorderColor--light-100);--pf-c-tabs__link--after--BorderWidth:0;--pf-c-tabs__link--after--BorderTopWidth:0;--pf-c-tabs__link--after--BorderRightWidth:0;--pf-c-tabs__link--after--BorderLeftWidth:0;--pf-c-tabs__link--hover--after--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-tabs__link--focus--after--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-tabs__link--active--after--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-tabs__item--m-current__link--after--BorderColor:var(--pf-global--active-color--100);--pf-c-tabs__item--m-current__link--after--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-tabs__link--child--MarginRight:var(--pf-global--spacer--md);--pf-c-tabs__scroll-button--Color:var(--pf-global--Color--100);--pf-c-tabs__scroll-button--hover--Color:var(--pf-global--active-color--100);--pf-c-tabs__scroll-button--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-tabs__scroll-button--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-tabs__scroll-button--Width:var(--pf-global--spacer--2xl);--pf-c-tabs__scroll-button--xl--Width:var(--pf-global--spacer--3xl);--pf-c-tabs__scroll-button--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-tabs__scroll-button--TransitionDuration--margin:.125s;--pf-c-tabs__scroll-button--TransitionDuration--transform:.125s;--pf-c-tabs__scroll-button--TransitionDuration--opacity:.125s;--pf-c-tabs__scroll-button--before--BorderColor:var(--pf-c-tabs--before--BorderColor);--pf-c-tabs__scroll-button--before--border-width--base:var(--pf-global--BorderWidth--sm);--pf-c-tabs__scroll-button--before--BorderRightWidth:0;--pf-c-tabs__scroll-button--before--BorderBottomWidth:var(--pf-c-tabs__scroll-button--before--border-width--base);--pf-c-tabs__scroll-button--before--BorderLeftWidth:0;--pf-c-tabs__list--ScrollSnapTypeAxis:x;--pf-c-tabs__list--ScrollSnapTypeStrictness:proximity;--pf-c-tabs__list--ScrollSnapType:var(--pf-c-tabs__list--ScrollSnapTypeAxis) var(--pf-c-tabs__list--ScrollSnapTypeStrictness);--pf-c-tabs__item--ScrollSnapAlign:end;--pf-c-tabs--m-vertical__list--ScrollSnapTypeAxis:y;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:hidden;--pf-c-tabs__toggle--MarginBottom:0;--pf-c-tabs--m-expanded__toggle--MarginBottom:var(--pf-global--spacer--md);--pf-c-tabs__toggle-icon--Color:currentcolor;--pf-c-tabs__toggle-icon--Transition:var(--pf-global--Transition);--pf-c-tabs__toggle-icon--Rotate:0;--pf-c-tabs__toggle-text--MarginLeft:0;--pf-c-tabs__toggle-button__toggle-text--MarginLeft:var(--pf-global--spacer--md);--pf-c-tabs__toggle-button__toggle-text--Color:var(--pf-global--Color--100);--pf-c-tabs__toggle-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-tabs__toggle-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-tabs__toggle-button--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-tabs--m-expanded__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-tabs--m-expanded__toggle-icon--Rotate:90deg;--pf-c-tabs__item-action--c-button--FontSize:var(--pf-global--FontSize--xs);--pf-c-tabs--m-secondary__item-action--c-button--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-tabs__item-action--c-button--PaddingTop:var(--pf-global--spacer--sm);--pf-c-tabs__item-action--c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-tabs__item-action--c-button--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tabs__item-action--c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-tabs__item-action--last-child--c-button--PaddingRight:var(--pf-global--spacer--md);--pf-c-tabs__item-action--c-button--OutlineOffset:-0.1875rem;--pf-c-tabs__item-action-icon--MarginTop:0.125rem;--pf-c-tabs__add--before--BorderColor:var(--pf-c-tabs__link--before--border-color--base);--pf-c-tabs__add--before--BorderLeftWidth:var(--pf-c-tabs__link--before--border-width--base);--pf-c-tabs__add--c-button--FontSize:var(--pf-global--FontSize--sm);--pf-c-tabs--m-secondary__add--c-button--FontSize:var(--pf-global--FontSize--xs);--pf-c-tabs__add--c-button--PaddingTop:var(--pf-c-tabs__link--PaddingTop);--pf-c-tabs__add--c-button--PaddingBottom:var(--pf-c-tabs__link--PaddingBottom);--pf-c-tabs__add--c-button--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-tabs__link-toggle-icon--Color:var(--pf-global--Color--200);--pf-c-tabs__link-toggle-icon--Transition:.2s ease-in 0s;--pf-c-tabs__link-toggle-icon--Rotate:0;--pf-c-tabs__link-toggle-icon--FontSize:var(--pf-global--FontSize--sm);--pf-c-tabs__link--m-expanded__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-tabs__link--m-expanded__toggle-icon--Rotate:90deg;--pf-c-tabs__link--hover__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-tabs__link--active__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-tabs__link--focus__toggle-icon--Color:var(--pf-global--Color--100);display:flex;overflow:hidden;padding-left:var(--pf-c-tabs--inset);padding-right:var(--pf-c-tabs--inset);position:relative;width:var(--pf-c-tabs--Width)}@media screen and (min-width:1200px){.pf-c-tabs{--pf-c-tabs__scroll-button--Width:var(--pf-c-tabs__scroll-button--xl--Width);--pf-c-tabs--m-page-insets--inset:var(--pf-c-tabs--m-page-insets--xl--inset)}}.pf-c-tabs:before{border:solid var(--pf-c-tabs--before--BorderColor);border-width:var(--pf-c-tabs--before--BorderTopWidth) var(--pf-c-tabs--before--BorderRightWidth) var(--pf-c-tabs--before--BorderBottomWidth) var(--pf-c-tabs--before--BorderLeftWidth);bottom:0;left:0;position:absolute;right:0}.pf-c-tabs.pf-m-fill .pf-c-tabs__list{flex-basis:100%}.pf-c-tabs.pf-m-fill .pf-c-tabs__item{flex-grow:1}.pf-c-tabs.pf-m-fill .pf-c-tabs__item:first-child{--pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth:0}.pf-c-tabs.pf-m-fill .pf-c-tabs__item:last-child{--pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth:0}.pf-c-tabs.pf-m-fill .pf-c-tabs__link{flex-basis:100%;justify-content:center}.pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button{opacity:1}.pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button:first-of-type{margin-right:0;transform:translateX(0)}.pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2){margin-left:0;transform:translateX(0)}.pf-c-tabs.pf-m-no-border-bottom,.pf-c-tabs.pf-m-secondary{--pf-c-tabs--before--BorderBottomWidth:0;--pf-c-tabs__link--disabled--before--BorderBottomWidth:0}.pf-c-tabs.pf-m-border-bottom{--pf-c-tabs--before--BorderBottomWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs__link--disabled--before--BorderBottomWidth:var(--pf-c-tabs--before--border-width--base)}.pf-c-tabs.pf-m-box .pf-c-tabs__link,.pf-c-tabs.pf-m-vertical .pf-c-tabs__link{--pf-c-tabs__link--after--BorderBottomWidth:0}.pf-c-tabs.pf-m-box{--pf-c-tabs__link--BackgroundColor:var(--pf-c-tabs--m-box__link--BackgroundColor);--pf-c-tabs__link--disabled--BackgroundColor:var(--pf-c-tabs--m-box__link--disabled--BackgroundColor);--pf-c-tabs__link--before--BorderBottomWidth:var(--pf-c-tabs__link--before--border-width--base);--pf-c-tabs__link--before--BorderRightWidth:var(--pf-c-tabs__link--before--border-width--base);--pf-c-tabs__link--disabled--before--BorderRightWidth:var(--pf-c-tabs__link--before--border-width--base);--pf-c-tabs__link--after--Top:0;--pf-c-tabs__link--after--Bottom:auto}.pf-c-tabs.pf-m-box .pf-c-tabs__link{--pf-c-tabs__link--after--BorderTopWidth:var(--pf-c-tabs__link--after--BorderWidth)}.pf-c-tabs.pf-m-box .pf-c-tabs__item:last-child{--pf-c-tabs__link--before--BorderRightWidth:0}.pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current{--pf-c-tabs__link--BackgroundColor:var(--pf-c-tabs__item--m-current__link--BackgroundColor);--pf-c-tabs__link--before--BorderBottomColor:var(--pf-c-tabs__link--BackgroundColor)}.pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link:before{border-left-width:var(--pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth)}.pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current:last-child .pf-c-tabs__link:before{border-right-width:var(--pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth)}.pf-c-tabs.pf-m-box.pf-m-scrollable .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link:before,.pf-c-tabs.pf-m-box.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2):before{left:calc(var(--pf-c-tabs__link--before--border-width--base)*-1)}.pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current+.pf-c-tabs__item{--pf-c-tabs__link--before--Left:0}.pf-c-tabs.pf-m-box.pf-m-color-scheme--light-300{--pf-c-tabs__link--BackgroundColor:var(--pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor);--pf-c-tabs__item--m-current__link--BackgroundColor:var(--pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor);--pf-c-tabs__link--disabled--BackgroundColor:var(--pf-c-tabs--m-color-scheme--light-300__link--disabled--BackgroundColor)}.pf-c-tabs.pf-m-box .pf-c-tabs__item-action .pf-c-button{--pf-c-button--m-plain--disabled--Color:var(--pf-c-tabs--m-box__item-action--c-button--disabled--BackgroundColor)}.pf-c-tabs.pf-m-vertical{--pf-c-tabs--Width:var(--pf-c-tabs--m-vertical--Width);--pf-c-tabs--inset:var(--pf-c-tabs--m-vertical--inset);--pf-c-tabs--before--BorderBottomWidth:0;--pf-c-tabs__link--PaddingTop:var(--pf-c-tabs--m-vertical__link--PaddingTop);--pf-c-tabs__link--PaddingBottom:var(--pf-c-tabs--m-vertical__link--PaddingBottom);--pf-c-tabs__link--before--Left:0;--pf-c-tabs__link--disabled--before--BorderBottomWidth:0;--pf-c-tabs__link--disabled--before--BorderLeftWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs__link--after--Top:0;--pf-c-tabs__link--after--Bottom:0;--pf-c-tabs__link--after--Right:auto;--pf-c-tabs__list--ScrollSnapTypeAxis:var(--pf-c-tabs--m-vertical__list--ScrollSnapTypeAxis);display:inline-flex;flex-direction:column;height:100%;overflow:visible;padding:0}.pf-c-tabs.pf-m-vertical .pf-c-tabs__list{flex-direction:column;flex-grow:1;max-width:var(--pf-c-tabs--m-vertical--MaxWidth);position:relative}.pf-c-tabs.pf-m-vertical .pf-c-tabs__list:before{border:solid var(--pf-c-tabs--m-vertical__list--before--BorderColor);border-width:var(--pf-c-tabs--m-vertical__list--before--BorderTopWidth) var(--pf-c-tabs--m-vertical__list--before--BorderRightWidth) var(--pf-c-tabs--m-vertical__list--before--BorderBottomWidth) var(--pf-c-tabs--m-vertical__list--before--BorderLeftWidth);position:absolute;right:auto}.pf-c-tabs.pf-m-vertical .pf-c-tabs__item:first-child{margin-top:var(--pf-c-tabs--inset)}.pf-c-tabs.pf-m-vertical .pf-c-tabs__item:last-child{margin-bottom:var(--pf-c-tabs--inset)}.pf-c-tabs.pf-m-vertical .pf-c-tabs__link{--pf-c-tabs__link--after--BorderTopWidth:0;--pf-c-tabs__link--after--BorderLeftWidth:var(--pf-c-tabs__link--after--BorderWidth);max-width:100%;text-align:left}.pf-c-tabs.pf-m-vertical .pf-c-tabs__item-text{max-width:100%;overflow-wrap:break-word}.pf-c-tabs.pf-m-vertical.pf-m-expandable{--pf-c-tabs__list--Display:none;--pf-c-tabs__list--Visibility:hidden;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:visible}.pf-c-tabs.pf-m-vertical.pf-m-non-expandable{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--Display:none;--pf-c-tabs__toggle--Visibility:hidden}@media (min-width:576px){.pf-c-tabs.pf-m-vertical.pf-m-expandable-on-sm{--pf-c-tabs__list--Display:none;--pf-c-tabs__list--Visibility:hidden;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:visible}.pf-c-tabs.pf-m-vertical.pf-m-non-expandable-on-sm{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--Display:none;--pf-c-tabs__toggle--Visibility:hidden}}@media (min-width:768px){.pf-c-tabs.pf-m-vertical.pf-m-expandable-on-md{--pf-c-tabs__list--Display:none;--pf-c-tabs__list--Visibility:hidden;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:visible}.pf-c-tabs.pf-m-vertical.pf-m-non-expandable-on-md{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--Display:none;--pf-c-tabs__toggle--Visibility:hidden}}@media (min-width:992px){.pf-c-tabs.pf-m-vertical.pf-m-expandable-on-lg{--pf-c-tabs__list--Display:none;--pf-c-tabs__list--Visibility:hidden;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:visible}.pf-c-tabs.pf-m-vertical.pf-m-non-expandable-on-lg{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--Display:none;--pf-c-tabs__toggle--Visibility:hidden}}@media (min-width:1200px){.pf-c-tabs.pf-m-vertical.pf-m-expandable-on-xl{--pf-c-tabs__list--Display:none;--pf-c-tabs__list--Visibility:hidden;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:visible}.pf-c-tabs.pf-m-vertical.pf-m-non-expandable-on-xl{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--Display:none;--pf-c-tabs__toggle--Visibility:hidden}}@media (min-width:1450px){.pf-c-tabs.pf-m-vertical.pf-m-expandable-on-2xl{--pf-c-tabs__list--Display:none;--pf-c-tabs__list--Visibility:hidden;--pf-c-tabs__toggle--Display:flex;--pf-c-tabs__toggle--Visibility:visible}.pf-c-tabs.pf-m-vertical.pf-m-non-expandable-on-2xl{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--Display:none;--pf-c-tabs__toggle--Visibility:hidden}}.pf-c-tabs.pf-m-vertical.pf-m-expanded{--pf-c-tabs__list--Display:flex;--pf-c-tabs__list--Visibility:visible;--pf-c-tabs__toggle--MarginBottom:var(--pf-c-tabs--m-expanded__toggle--MarginBottom);--pf-c-tabs__toggle-icon--Color:var(--pf-c-tabs--m-expanded__toggle-icon--Color);--pf-c-tabs__toggle-icon--Rotate:var(--pf-c-tabs--m-expanded__toggle-icon--Rotate)}.pf-c-tabs.pf-m-box.pf-m-vertical{--pf-c-tabs--inset:var(--pf-c-tabs--m-vertical--m-box--inset);--pf-c-tabs--m-vertical__list--before--BorderLeftWidth:0;--pf-c-tabs--m-vertical__list--before--BorderRightWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs__link--disabled--before--BorderRightWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs__link--disabled--before--BorderBottomWidth:var(--pf-c-tabs--before--border-width--base);--pf-c-tabs__link--disabled--before--BorderLeftWidth:0}.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__list:before{left:auto;right:0}.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:last-child{--pf-c-tabs__link--before--BorderBottomWidth:0;--pf-c-tabs__link--before--BorderRightWidth:var(--pf-c-tabs__link--before--border-width--base)}.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current{--pf-c-tabs__link--before--BorderRightColor:var(--pf-c-tabs__item--m-current__link--BackgroundColor);--pf-c-tabs__link--before--BorderBottomColor:var(--pf-c-tabs__link--before--border-color--base);--pf-c-tabs__link--before--BorderBottomWidth:var(--pf-c-tabs__link--before--border-width--base)}.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current:first-child,.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:first-child.pf-m-current{--pf-c-tabs__link--before--BorderTopWidth:var(--pf-c-tabs__link--before--border-width--base)}.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__link:after{top:calc(var(--pf-c-tabs__link--before--border-width--base)*-1)}.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current+.pf-c-tabs__item .pf-c-tabs__link:after,.pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:first-child .pf-c-tabs__link:after{top:0}.pf-c-tabs.pf-m-secondary{--pf-c-tabs__link--FontSize:var(--pf-c-tabs--m-secondary__link--FontSize);--pf-c-tabs__item-action--c-button--FontSize:var(--pf-c-tabs--m-secondary__item-action--c-button--FontSize);--pf-c-tabs__add--c-button--FontSize:var(--pf-c-tabs--m-secondary__add--c-button--FontSize)}.pf-c-tabs.pf-m-page-insets{--pf-c-tabs--inset:var(--pf-c-tabs--m-page-insets--inset)}.pf-c-tabs.pf-m-overflow,.pf-c-tabs.pf-m-overflow .pf-c-tabs__list{overflow:visible}.pf-c-tabs__toggle{align-items:center;display:var(--pf-c-tabs__toggle--Display);margin-bottom:var(--pf-c-tabs__toggle--MarginBottom);visibility:var(--pf-c-tabs__toggle--Visibility)}.pf-c-tabs__toggle-button{--pf-c-tabs__toggle-text--MarginLeft:var(--pf-c-tabs__toggle-button__toggle-text--MarginLeft);--pf-c-tabs__toggle-text--Color:var(--pf-c-tabs__toggle-button__toggle-text--Color);margin-bottom:var(--pf-c-tabs__toggle-button--MarginBottom);margin-left:var(--pf-c-tabs__toggle-button--MarginLeft);margin-top:var(--pf-c-tabs__toggle-button--MarginTop)}.pf-c-tabs__toggle-button .pf-c-button{display:flex;text-align:left;white-space:normal}.pf-c-tabs__toggle-icon{color:var(--pf-c-tabs__toggle-icon--Color);display:inline-block;transform:rotate(var(--pf-c-tabs__toggle-icon--Rotate));transition:var(--pf-c-tabs__toggle-icon--Transition)}.pf-c-tabs__toggle-text{color:var(--pf-c-tabs__toggle-text--Color,inherit);margin-left:var(--pf-c-tabs__toggle-text--MarginLeft)}.pf-c-tabs__list{-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch;display:var(--pf-c-tabs__list--Display);max-width:100%;overflow-x:auto;position:relative;scroll-behavior:smooth;scroll-snap-type:var(--pf-c-tabs__list--ScrollSnapType);scrollbar-width:none;visibility:var(--pf-c-tabs__list--Visibility)}.pf-c-tabs__list::-webkit-scrollbar{display:none}.pf-c-tabs__item{display:flex;flex:none;scroll-snap-align:var(--pf-c-tabs__item--ScrollSnapAlign)}.pf-c-tabs__item.pf-m-current{--pf-c-tabs__link--Color:var(--pf-c-tabs__item--m-current__link--Color);--pf-c-tabs__link--after--BorderColor:var(--pf-c-tabs__item--m-current__link--after--BorderColor);--pf-c-tabs__link--after--BorderWidth:var(--pf-c-tabs__item--m-current__link--after--BorderWidth)}.pf-c-tabs__item.pf-m-action{--pf-c-tabs__link--PaddingRight:var(--pf-c-tabs__item--m-action__link--PaddingRight);position:relative}.pf-c-tabs__item.pf-m-action:before{z-index:var(--pf-c-tabs__item--m-action--before--ZIndex)}.pf-c-tabs__item.pf-m-action .pf-c-tabs__link:after,.pf-c-tabs__item.pf-m-action .pf-c-tabs__link:before{content:revert}.pf-c-tabs:before,.pf-c-tabs__add:before,.pf-c-tabs__item.pf-m-action:after,.pf-c-tabs__item.pf-m-action:before,.pf-c-tabs__link:after,.pf-c-tabs__link:before,.pf-c-tabs__list:before,.pf-c-tabs__scroll-button:before{border-style:solid;bottom:0;content:"";left:0;position:absolute;right:0}.pf-c-tabs__add:before,.pf-c-tabs__item.pf-m-action:after,.pf-c-tabs__item.pf-m-action:before,.pf-c-tabs__link:after,.pf-c-tabs__link:before,.pf-c-tabs__list:before,.pf-c-tabs__scroll-button:before{top:0}.pf-c-tabs__add:before,.pf-c-tabs__link,.pf-c-tabs__list:before,.pf-c-tabs__scroll-button{border:0}.pf-c-tabs__link{color:var(--pf-c-tabs__link--Color);display:flex;flex:1;font-size:var(--pf-c-tabs__link--FontSize);outline-offset:var(--pf-c-tabs__link--OutlineOffset);padding:var(--pf-c-tabs__link--PaddingTop) var(--pf-c-tabs__link--PaddingRight) var(--pf-c-tabs__link--PaddingBottom) var(--pf-c-tabs__link--PaddingLeft);position:relative;text-decoration:none}.pf-c-tabs__item.pf-m-action,.pf-c-tabs__link{--pf-c-tabs__link--after--BorderBottomWidth:var(--pf-c-tabs__link--after--BorderWidth);background-color:var(--pf-c-tabs__link--BackgroundColor)}.pf-c-tabs__item.pf-m-action:before,.pf-c-tabs__link:before{border-bottom-color:var(--pf-c-tabs__link--before--BorderBottomColor);border-left-color:var(--pf-c-tabs__link--before--BorderLeftColor);border-right-color:var(--pf-c-tabs__link--before--BorderRightColor);border-top-color:var(--pf-c-tabs__link--before--BorderTopColor);border-width:var(--pf-c-tabs__link--before--BorderTopWidth) var(--pf-c-tabs__link--before--BorderRightWidth) var(--pf-c-tabs__link--before--BorderBottomWidth) var(--pf-c-tabs__link--before--BorderLeftWidth);pointer-events:none}.pf-c-tabs__item.pf-m-action:after,.pf-c-tabs__link:after{border-color:var(--pf-c-tabs__link--after--BorderColor);border-width:var(--pf-c-tabs__link--after--BorderTopWidth) var(--pf-c-tabs__link--after--BorderRightWidth) var(--pf-c-tabs__link--after--BorderBottomWidth) var(--pf-c-tabs__link--after--BorderLeftWidth);bottom:var(--pf-c-tabs__link--after--Bottom);left:var(--pf-c-tabs__link--before--Left);right:var(--pf-c-tabs__link--after--Right);top:var(--pf-c-tabs__link--after--Top)}.pf-c-tabs__item.pf-m-action:hover,.pf-c-tabs__link:hover{--pf-c-tabs__link--after--BorderWidth:var(--pf-c-tabs__link--hover--after--BorderWidth)}.pf-c-tabs__item.pf-m-action:focus-within,.pf-c-tabs__link:focus{--pf-c-tabs__link--after--BorderWidth:var(--pf-c-tabs__link--focus--after--BorderWidth)}.pf-c-tabs__item.pf-m-action:active,.pf-c-tabs__link:active{--pf-c-tabs__link--after--BorderWidth:var(--pf-c-tabs__link--active--after--BorderWidth)}.pf-c-tabs__link:hover{--pf-c-tabs__link-toggle-icon--Color:var(--pf-c-tabs__link--hover__toggle-icon--Color)}.pf-c-tabs__link:focus{--pf-c-tabs__link-toggle-icon--Color:var(--pf-c-tabs__link--focus__toggle-icon--Color)}.pf-c-tabs__link.pf-m-active,.pf-c-tabs__link:active{--pf-c-tabs__link-toggle-icon--Color:var(--pf-c-tabs__link--active__toggle-icon--Color)}.pf-c-tabs__link.pf-m-disabled,.pf-c-tabs__link:disabled{pointer-events:none}.pf-c-tabs__item.pf-m-action.pf-m-disabled,.pf-c-tabs__link.pf-m-aria-disabled,.pf-c-tabs__link.pf-m-disabled,.pf-c-tabs__link:disabled{--pf-c-tabs__link--Color:var(--pf-c-tabs__link--disabled--Color);--pf-c-tabs__link--BackgroundColor:var(--pf-c-tabs__link--disabled--BackgroundColor);--pf-c-tabs__link--before--BorderRightWidth:var(--pf-c-tabs__link--disabled--before--BorderRightWidth);--pf-c-tabs__link--before--BorderBottomWidth:var(--pf-c-tabs__link--disabled--before--BorderBottomWidth);--pf-c-tabs__link--before--BorderLeftWidth:var(--pf-c-tabs__link--disabled--before--BorderLeftWidth);--pf-c-tabs__link--after--BorderWidth:0}.pf-c-tabs__link.pf-m-aria-disabled{cursor:default}.pf-c-tabs__link .pf-c-tabs__item-icon,.pf-c-tabs__link .pf-c-tabs__item-text{margin-right:var(--pf-c-tabs__link--child--MarginRight)}.pf-c-tabs__link .pf-c-tabs__item-icon:last-child,.pf-c-tabs__link .pf-c-tabs__item-text:last-child{--pf-c-tabs__link--child--MarginRight:0}.pf-c-tabs__link.pf-m-expanded{--pf-c-tabs__link-toggle-icon--Color:var(--pf-c-tabs__link--m-expanded__toggle-icon--Color);--pf-c-tabs__link-toggle-icon--Rotate:var(--pf-c-tabs__link--m-expanded__toggle-icon--Rotate)}.pf-c-tabs__link-toggle-icon{align-self:end;color:var(--pf-c-tabs__link-toggle-icon--Color);font-size:var(--pf-c-tabs__link-toggle-icon--FontSize);transform:rotate(var(--pf-c-tabs__link-toggle-icon--Rotate));transition:var(--pf-c-tabs__link-toggle-icon--Transition)}.pf-c-tabs__item-action{display:flex}.pf-c-tabs__item-action .pf-c-button{--pf-c-button--FontSize:var(--pf-c-tabs__item-action--c-button--FontSize);--pf-c-button--PaddingTop:var(--pf-c-tabs__item-action--c-button--PaddingTop);--pf-c-button--PaddingRight:var(--pf-c-tabs__item-action--c-button--PaddingRight);--pf-c-button--PaddingBottom:var(--pf-c-tabs__item-action--c-button--PaddingBottom);--pf-c-button--PaddingLeft:var(--pf-c-tabs__item-action--c-button--PaddingLeft);outline-offset:var(--pf-c-tabs__item-action--c-button--OutlineOffset)}.pf-c-tabs__item-action:last-child{--pf-c-tabs__item-action--c-button--PaddingRight:var(--pf-c-tabs__item-action--last-child--c-button--PaddingRight)}.pf-c-tabs__item-action-icon{display:inline-block;margin-top:var(--pf-c-tabs__item-action-icon--MarginTop)}.pf-c-tabs__scroll-button{background-color:var(--pf-c-tabs__scroll-button--BackgroundColor);color:var(--pf-c-tabs__scroll-button--Color);flex:none;line-height:1;opacity:0;outline-offset:var(--pf-c-tabs__scroll-button--OutlineOffset);transition:margin var(--pf-c-tabs__scroll-button--TransitionDuration--margin),transform var(--pf-c-tabs__scroll-button--TransitionDuration--transform),opacity var(--pf-c-tabs__scroll-button--TransitionDuration--opacity);width:var(--pf-c-tabs__scroll-button--Width)}.pf-c-tabs__scroll-button:active,.pf-c-tabs__scroll-button:focus,.pf-c-tabs__scroll-button:hover{--pf-c-tabs__scroll-button--Color:var(--pf-c-tabs__scroll-button--hover--Color)}.pf-c-tabs__scroll-button:before{border-color:var(--pf-c-tabs__scroll-button--before--BorderColor);border-width:0 var(--pf-c-tabs__scroll-button--before--BorderRightWidth) var(--pf-c-tabs__scroll-button--before--BorderBottomWidth) var(--pf-c-tabs__scroll-button--before--BorderLeftWidth)}.pf-c-tabs__scroll-button:first-of-type{--pf-c-tabs__scroll-button--before--BorderRightWidth:var(--pf-c-tabs__scroll-button--before--border-width--base);margin-right:calc(var(--pf-c-tabs__scroll-button--Width)*-1);transform:translateX(-100%)}.pf-c-tabs__scroll-button:nth-of-type(2){--pf-c-tabs__scroll-button--before--BorderLeftWidth:var(--pf-c-tabs__scroll-button--before--border-width--base);margin-left:calc(var(--pf-c-tabs__scroll-button--Width)*-1);transform:translateX(100%)}.pf-c-tabs__scroll-button:disabled{--pf-c-tabs__scroll-button--Color:var(--pf-c-tabs__scroll-button--disabled--Color);pointer-events:none}.pf-c-tabs__add{display:flex;position:relative}.pf-c-tabs__add:before{border-left:var(--pf-c-tabs__add--before--BorderLeftWidth) solid var(--pf-c-tabs__add--before--BorderColor)}.pf-c-tabs__add .pf-c-button{--pf-c-button--FontSize:var(--pf-c-tabs__add--c-button--FontSize);--pf-c-button--PaddingTop:var(--pf-c-tabs__add--c-button--PaddingTop);--pf-c-button--PaddingBottom:var(--pf-c-tabs__add--c-button--PaddingBottom);outline-offset:var(--pf-c-tabs__add--c-button--OutlineOffset)}.pf-c-tabs.pf-m-inset-none{--pf-c-tabs--inset:0;--pf-c-tabs--m-vertical--inset:0;--pf-c-tabs--m-vertical--m-box--inset:0}.pf-c-tabs.pf-m-inset-sm{--pf-c-tabs--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--sm)}.pf-c-tabs.pf-m-inset-md{--pf-c-tabs--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--md)}.pf-c-tabs.pf-m-inset-lg{--pf-c-tabs--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--lg)}.pf-c-tabs.pf-m-inset-xl{--pf-c-tabs--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl)}.pf-c-tabs.pf-m-inset-2xl{--pf-c-tabs--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--2xl)}@media (min-width:576px){.pf-c-tabs.pf-m-inset-none-on-sm{--pf-c-tabs--inset:0;--pf-c-tabs--m-vertical--inset:0;--pf-c-tabs--m-vertical--m-box--inset:0}.pf-c-tabs.pf-m-inset-sm-on-sm{--pf-c-tabs--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--sm)}.pf-c-tabs.pf-m-inset-md-on-sm{--pf-c-tabs--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--md)}.pf-c-tabs.pf-m-inset-lg-on-sm{--pf-c-tabs--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--lg)}.pf-c-tabs.pf-m-inset-xl-on-sm{--pf-c-tabs--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl)}.pf-c-tabs.pf-m-inset-2xl-on-sm{--pf-c-tabs--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--2xl)}}@media (min-width:768px){.pf-c-tabs.pf-m-inset-none-on-md{--pf-c-tabs--inset:0;--pf-c-tabs--m-vertical--inset:0;--pf-c-tabs--m-vertical--m-box--inset:0}.pf-c-tabs.pf-m-inset-sm-on-md{--pf-c-tabs--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--sm)}.pf-c-tabs.pf-m-inset-md-on-md{--pf-c-tabs--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--md)}.pf-c-tabs.pf-m-inset-lg-on-md{--pf-c-tabs--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--lg)}.pf-c-tabs.pf-m-inset-xl-on-md{--pf-c-tabs--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl)}.pf-c-tabs.pf-m-inset-2xl-on-md{--pf-c-tabs--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--2xl)}}@media (min-width:992px){.pf-c-tabs.pf-m-inset-none-on-lg{--pf-c-tabs--inset:0;--pf-c-tabs--m-vertical--inset:0;--pf-c-tabs--m-vertical--m-box--inset:0}.pf-c-tabs.pf-m-inset-sm-on-lg{--pf-c-tabs--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--sm)}.pf-c-tabs.pf-m-inset-md-on-lg{--pf-c-tabs--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--md)}.pf-c-tabs.pf-m-inset-lg-on-lg{--pf-c-tabs--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--lg)}.pf-c-tabs.pf-m-inset-xl-on-lg{--pf-c-tabs--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl)}.pf-c-tabs.pf-m-inset-2xl-on-lg{--pf-c-tabs--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--2xl)}}@media (min-width:1200px){.pf-c-tabs.pf-m-inset-none-on-xl{--pf-c-tabs--inset:0;--pf-c-tabs--m-vertical--inset:0;--pf-c-tabs--m-vertical--m-box--inset:0}.pf-c-tabs.pf-m-inset-sm-on-xl{--pf-c-tabs--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--sm)}.pf-c-tabs.pf-m-inset-md-on-xl{--pf-c-tabs--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--md)}.pf-c-tabs.pf-m-inset-lg-on-xl{--pf-c-tabs--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--lg)}.pf-c-tabs.pf-m-inset-xl-on-xl{--pf-c-tabs--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl)}.pf-c-tabs.pf-m-inset-2xl-on-xl{--pf-c-tabs--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--2xl)}}@media (min-width:1450px){.pf-c-tabs.pf-m-inset-none-on-2xl{--pf-c-tabs--inset:0;--pf-c-tabs--m-vertical--inset:0;--pf-c-tabs--m-vertical--m-box--inset:0}.pf-c-tabs.pf-m-inset-sm-on-2xl{--pf-c-tabs--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--sm);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--sm)}.pf-c-tabs.pf-m-inset-md-on-2xl{--pf-c-tabs--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--md);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--md)}.pf-c-tabs.pf-m-inset-lg-on-2xl{--pf-c-tabs--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--lg);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--lg)}.pf-c-tabs.pf-m-inset-xl-on-2xl{--pf-c-tabs--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--xl)}.pf-c-tabs.pf-m-inset-2xl-on-2xl{--pf-c-tabs--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--inset:var(--pf-global--spacer--2xl);--pf-c-tabs--m-vertical--m-box--inset:var(--pf-global--spacer--2xl)}}:where(.pf-theme-dark) .pf-c-tabs{--pf-c-tabs__scroll-button--BackgroundColor:transparent;--pf-c-tabs__link--disabled--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-tabs--m-color-scheme--light-300__link--disabled--BackgroundColor:var(--pf-global--disabled-color--200)}.pf-c-text-input-group{--pf-c-text-input-group--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-text-input-group__text--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-text-input-group__text--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-text-input-group__text--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-text-input-group__text--after--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-text-input-group--hover__text--after--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-text-input-group__text--focus-within--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-text-input-group__text--focus-within--after--BorderBottomColor:var(--pf-global--primary-color--100);--pf-c-text-input-group__main--first-child--not--text-input--MarginLeft:var(--pf-global--spacer--sm);--pf-c-text-input-group__main--m-icon__text-input--PaddingLeft:var(--pf-global--spacer--xl);--pf-c-text-input-group__main--RowGap:var(--pf-global--spacer--xs);--pf-c-text-input-group__main--ColumnGap:var(--pf-global--spacer--sm);--pf-c-text-input-group--c-chip-group__main--PaddingTop:var(--pf-global--spacer--xs);--pf-c-text-input-group--c-chip-group__main--PaddingRight:var(--pf-global--spacer--xs);--pf-c-text-input-group--c-chip-group__main--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-text-input-group__text-input--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-text-input-group__text-input--PaddingRight:var(--pf-global--spacer--sm);--pf-c-text-input-group__text-input--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-text-input-group__text-input--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-text-input-group__text-input--MinWidth:12ch;--pf-c-text-input-group__text-input--m-hint--Color:var(--pf-global--Color--dark-200);--pf-c-text-input-group--placeholder--Color:var(--pf-global--Color--dark-200);--pf-c-text-input-group__icon--Left:var(--pf-global--spacer--sm);--pf-c-text-input-group__icon--Color:var(--pf-global--Color--200);--pf-c-text-input-group__text--hover__icon--Color:var(--pf-global--Color--100);--pf-c-text-input-group__icon--TranslateY:-50%;--pf-c-text-input-group__utilities--MarginRight:var(--pf-global--spacer--sm);--pf-c-text-input-group__utilities--MarginLeft:var(--pf-global--spacer--xs);--pf-c-text-input-group__utilities--child--MarginLeft:var(--pf-global--spacer--xs);--pf-c-text-input-group__utilities--c-button--PaddingRight:var(--pf-global--spacer--xs);--pf-c-text-input-group__utilities--c-button--PaddingLeft:var(--pf-global--spacer--xs);--pf-c-text-input-group--m-disabled--Color:var(--pf-global--disabled-color--100);--pf-c-text-input-group--m-disabled--BackgroundColor:var(--pf-global--disabled-color--300);background-color:var(--pf-c-text-input-group--BackgroundColor);color:var(--pf-c-text-input-group--Color,inherit);display:flex;position:relative;width:100%}.pf-c-text-input-group:hover{--pf-c-text-input-group__text--after--BorderBottomColor:var(--pf-c-text-input-group--hover__text--after--BorderBottomColor)}.pf-c-text-input-group.pf-m-disabled{--pf-c-text-input-group__text--before--BorderWidth:0;--pf-c-text-input-group__text--after--BorderBottomWidth:0;--pf-c-text-input-group--Color:var(--pf-c-text-input-group--m-disabled--Color);--pf-c-text-input-group__icon--Color:var(--pf-c-text-input-group--m-disabled--Color);--pf-c-text-input-group--BackgroundColor:var(--pf-c-text-input-group--m-disabled--BackgroundColor);pointer-events:none}.pf-c-text-input-group.pf-m-plain{--pf-c-text-input-group--BackgroundColor:transparent}.pf-c-text-input-group.pf-m-plain .pf-c-text-input-group__text:after,.pf-c-text-input-group.pf-m-plain .pf-c-text-input-group__text:before{border:0}.pf-c-text-input-group__main{display:flex;flex:1;flex-wrap:wrap;gap:var(--pf-c-text-input-group__main--RowGap) var(--pf-c-text-input-group__main--ColumnGap);min-width:0}.pf-c-text-input-group__main.pf-m-icon{--pf-c-text-input-group__text-input--PaddingLeft:var(--pf-c-text-input-group__main--m-icon__text-input--PaddingLeft)}.pf-c-text-input-group__main>:first-child:not(.pf-c-text-input-group__text){margin-left:var(--pf-c-text-input-group__main--first-child--not--text-input--MarginLeft)}.pf-c-text-input-group__main .pf-c-chip-group__main{padding-bottom:var(--pf-c-text-input-group--c-chip-group__main--PaddingBottom);padding-right:var(--pf-c-text-input-group--c-chip-group__main--PaddingRight);padding-top:var(--pf-c-text-input-group--c-chip-group__main--PaddingTop)}.pf-c-text-input-group__text{display:inline-grid;flex:1;grid-template-areas:"text-input";grid-template-columns:1fr}.pf-c-text-input-group__text:after,.pf-c-text-input-group__text:before{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-text-input-group__text:before{border:var(--pf-c-text-input-group__text--before--BorderWidth) solid var(--pf-c-text-input-group__text--before--BorderColor)}.pf-c-text-input-group__text:after{border-bottom:var(--pf-c-text-input-group__text--after--BorderBottomWidth) solid var(--pf-c-text-input-group__text--after--BorderBottomColor)}.pf-c-text-input-group__text:focus-within,.pf-c-text-input-group__text:hover{--pf-c-text-input-group__icon--Color:var(--pf-c-text-input-group__text--hover__icon--Color)}.pf-c-text-input-group__text:focus-within{--pf-c-text-input-group__text--after--BorderBottomWidth:var(--pf-c-text-input-group__text--focus-within--after--BorderBottomWidth);--pf-c-text-input-group__text--after--BorderBottomColor:var(--pf-c-text-input-group__text--focus-within--after--BorderBottomColor)}.pf-c-text-input-group__icon{color:var(--pf-c-text-input-group__icon--Color);left:var(--pf-c-text-input-group__icon--Left);position:absolute;top:50%;transform:translateY(var(--pf-c-text-input-group__icon--TranslateY))}.pf-c-text-input-group__text-input{border:0;min-width:var(--pf-c-text-input-group__text-input--MinWidth);overflow:hidden;padding:var(--pf-c-text-input-group__text-input--PaddingTop) var(--pf-c-text-input-group__text-input--PaddingRight) var(--pf-c-text-input-group__text-input--PaddingBottom) var(--pf-c-text-input-group__text-input--PaddingLeft);position:relative;text-overflow:ellipsis;white-space:nowrap;width:100%}.pf-c-text-input-group__text-input,.pf-c-text-input-group__text-input.pf-m-hint{grid-area:text-input}.pf-c-text-input-group__text-input.pf-m-hint{color:var(--pf-c-text-input-group__text-input--m-hint--Color)}.pf-c-text-input-group__text-input::placeholder{color:var(--pf-c-text-input-group--placeholder--Color)}.pf-c-text-input-group__utilities{align-items:center;display:flex;margin-left:var(--pf-c-text-input-group__utilities--MarginLeft);margin-right:var(--pf-c-text-input-group__utilities--MarginRight)}.pf-c-text-input-group__utilities>*+*{margin-left:var(--pf-c-text-input-group__utilities--child--MarginLeft)}.pf-c-text-input-group__utilities .pf-c-button{--pf-c-button--PaddingRight:var(--pf-c-text-input-group__utilities--c-button--PaddingRight);--pf-c-button--PaddingLeft:var(--pf-c-text-input-group__utilities--c-button--PaddingLeft)}.pf-c-text-input-group__group{display:flex}.pf-c-panel{--pf-c-panel--Width:auto;--pf-c-panel--MinWidth:auto;--pf-c-panel--MaxWidth:none;--pf-c-panel--ZIndex:auto;--pf-c-panel--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-panel--BoxShadow:none;--pf-c-panel--before--BorderWidth:0;--pf-c-panel--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-panel--m-bordered--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-panel--m-raised--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-panel--m-raised--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-panel__header--PaddingTop:var(--pf-global--spacer--md);--pf-c-panel__header--PaddingRight:var(--pf-global--spacer--md);--pf-c-panel__header--PaddingBottom:var(--pf-global--spacer--md);--pf-c-panel__header--PaddingLeft:var(--pf-global--spacer--md);--pf-c-panel__main--MaxHeight:none;--pf-c-panel__main--Overflow:visible;--pf-c-panel__main-body--PaddingTop:var(--pf-global--spacer--md);--pf-c-panel__main-body--PaddingRight:var(--pf-global--spacer--md);--pf-c-panel__main-body--PaddingBottom:var(--pf-global--spacer--md);--pf-c-panel__main-body--PaddingLeft:var(--pf-global--spacer--md);--pf-c-panel__footer--PaddingTop:var(--pf-global--spacer--md);--pf-c-panel__footer--PaddingRight:var(--pf-global--spacer--md);--pf-c-panel__footer--PaddingBottom:var(--pf-global--spacer--md);--pf-c-panel__footer--PaddingLeft:var(--pf-global--spacer--md);--pf-c-panel__footer--BoxShadow:none;--pf-c-panel--m-scrollable__main--MaxHeight:18.75rem;--pf-c-panel--m-scrollable__main--Overflow:auto;--pf-c-panel--m-scrollable__footer--BoxShadow:0 -0.3125rem 0.25rem -0.25rem rgba(3,3,3,.16);background-color:var(--pf-c-panel--BackgroundColor);box-shadow:var(--pf-c-panel--BoxShadow);max-width:var(--pf-c-panel--MaxWidth);min-width:var(--pf-c-panel--MinWidth);position:relative;width:var(--pf-c-panel--Width);z-index:var(--pf-c-panel--ZIndex)}.pf-c-panel:before{border:var(--pf-c-panel--before--BorderWidth) solid var(--pf-c-panel--before--BorderColor);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-panel.pf-m-bordered{--pf-c-panel--before--BorderWidth:var(--pf-c-panel--m-bordered--before--BorderWidth)}.pf-c-panel.pf-m-raised{--pf-c-panel--BoxShadow:var(--pf-c-panel--m-raised--BoxShadow);--pf-c-panel--ZIndex:var(--pf-c-panel--m-raised--ZIndex)}.pf-c-panel.pf-m-scrollable{--pf-c-panel__main--MaxHeight:var(--pf-c-panel--m-scrollable__main--MaxHeight);--pf-c-panel__main--Overflow:var(--pf-c-panel--m-scrollable__main--Overflow);--pf-c-panel__footer--BoxShadow:var(--pf-c-panel--m-scrollable__footer--BoxShadow)}.pf-c-panel__header{padding:var(--pf-c-panel__header--PaddingTop) var(--pf-c-panel__header--PaddingRight) var(--pf-c-panel__header--PaddingBottom) var(--pf-c-panel__header--PaddingLeft)}.pf-c-panel__main{max-height:var(--pf-c-panel__main--MaxHeight);overflow:var(--pf-c-panel__main--Overflow)}.pf-c-panel__main-body{padding:var(--pf-c-panel__main-body--PaddingTop) var(--pf-c-panel__main-body--PaddingRight) var(--pf-c-panel__main-body--PaddingBottom) var(--pf-c-panel__main-body--PaddingLeft)}.pf-c-panel__footer{box-shadow:var(--pf-c-panel__footer--BoxShadow);padding:var(--pf-c-panel__footer--PaddingTop) var(--pf-c-panel__footer--PaddingRight) var(--pf-c-panel__footer--PaddingBottom) var(--pf-c-panel__footer--PaddingLeft)}.pf-c-sidebar{--pf-c-sidebar--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-sidebar__main--FlexDirection:column;--pf-c-sidebar__main--md--FlexDirection:row;--pf-c-sidebar__main--AlignItems:stretch;--pf-c-sidebar__main--md--AlignItems:start;--pf-c-sidebar__main--child--MarginTop:0;--pf-c-sidebar__main--child--MarginLeft:0;--pf-c-sidebar--m-gutter__main--Gap:var(--pf-global--spacer--md);--pf-c-sidebar--m-gutter__main--xl--Gap:var(--pf-global--spacer--lg);--pf-c-sidebar--m-panel-right__panel--Order:0;--pf-c-sidebar--m-panel-right__panel--md--Order:1;--pf-c-sidebar--m-stack__main--FlexDirection:column;--pf-c-sidebar--m-stack__main--AlignItems:stretch;--pf-c-sidebar--m-stack__panel--Position:sticky;--pf-c-sidebar--m-stack__panel--Top:0;--pf-c-sidebar--m-stack__panel--BoxShadow:var(--pf-c-sidebar__panel--BoxShadow--base);--pf-c-sidebar--m-stack--m-panel-right__panel--Order:0;--pf-c-sidebar--m-split__main--AlignItems:start;--pf-c-sidebar--m-split__main--FlexDirection:row;--pf-c-sidebar--m-split__panel--Position:static;--pf-c-sidebar--m-split__panel--Top:auto;--pf-c-sidebar--m-split--m-panel-right__panel--Order:1;--pf-c-sidebar__panel--FlexBasis--base:auto;--pf-c-sidebar__panel--BoxShadow--base:0 0.25rem 0.25rem -0.25rem rgba(3,3,3,.16);--pf-c-sidebar__panel--BoxShadow:var(--pf-c-sidebar__panel--BoxShadow--base);--pf-c-sidebar__panel--Top:0;--pf-c-sidebar__panel--md--Top:auto;--pf-c-sidebar__panel--Position:sticky;--pf-c-sidebar__panel--md--Position:static;--pf-c-sidebar__panel--FlexBasis-base:auto;--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis-base);--pf-c-sidebar__panel--md--FlexBasis:15.625rem;--pf-c-sidebar__panel--m-split--FlexBasis:15.625rem;--pf-c-sidebar__panel--m-stack--FlexBasis:auto;--pf-c-sidebar__panel--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-sidebar__panel--Order:0;--pf-c-sidebar__panel--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-sidebar__content--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-sidebar__panel--m-sticky--Top:0;--pf-c-sidebar__panel--m-sticky--Position:sticky;height:100%}@media (min-width:768px){.pf-c-sidebar{--pf-c-sidebar__main--FlexDirection:var(--pf-c-sidebar__main--md--FlexDirection);--pf-c-sidebar__panel--BoxShadow:none;--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--md--FlexBasis);--pf-c-sidebar__main--AlignItems:var(--pf-c-sidebar__main--md--AlignItems);--pf-c-sidebar__panel--Top:var(--pf-c-sidebar__panel--md--Top);--pf-c-sidebar__panel--Position:var(--pf-c-sidebar__panel--md--Position)}}@media (min-width:1200px){.pf-c-sidebar{--pf-c-sidebar--m-gutter__main--Gap:var(--pf-c-sidebar--m-gutter__main--xl--Gap)}}.pf-c-sidebar.pf-m-gutter{--pf-c-sidebar__main--child--MarginTop:var(--pf-c-sidebar--m-gutter__main--Gap);--pf-c-sidebar__main--child--MarginLeft:0}.pf-c-sidebar.pf-m-gutter>.pf-c-sidebar__main>*+*{margin-left:var(--pf-c-sidebar__main--child--MarginLeft);margin-top:var(--pf-c-sidebar__main--child--MarginTop)}@media (min-width:768px){.pf-c-sidebar.pf-m-gutter{--pf-c-sidebar__main--child--MarginTop:0;--pf-c-sidebar__main--child--MarginLeft:var(--pf-c-sidebar--m-gutter__main--Gap)}}.pf-c-sidebar.pf-m-panel-right{--pf-c-sidebar__panel--Order:var(--pf-c-sidebar--m-panel-right__panel--Order)}@media (min-width:768px){.pf-c-sidebar.pf-m-panel-right{--pf-c-sidebar--m-panel-right__panel--Order:var(--pf-c-sidebar--m-panel-right__panel--md--Order)}}.pf-c-sidebar.pf-m-stack{--pf-c-sidebar__main--FlexDirection:var(--pf-c-sidebar--m-stack__main--FlexDirection);--pf-c-sidebar__main--AlignItems:var(--pf-c-sidebar--m-stack__main--AlignItems);--pf-c-sidebar__main--child--MarginTop:var(--pf-c-sidebar--m-gutter__main--Gap);--pf-c-sidebar__main--child--MarginLeft:0;--pf-c-sidebar__panel--Position:var(--pf-c-sidebar--m-stack__panel--Position);--pf-c-sidebar__panel--Top:var(--pf-c-sidebar--m-stack__panel--Top);--pf-c-sidebar__panel--BoxShadow:var(--pf-c-sidebar--m-stack__panel--BoxShadow);--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--m-stack--FlexBasis);--pf-c-sidebar--m-panel-right__panel--Order:var(--pf-c-sidebar--m-stack--m-panel-right__panel--Order)}.pf-c-sidebar.pf-m-split{--pf-c-sidebar__main--FlexDirection:var(--pf-c-sidebar--m-split__main--FlexDirection);--pf-c-sidebar__main--AlignItems:var(--pf-c-sidebar--m-split__main--AlignItems);--pf-c-sidebar__main--child--MarginTop:0;--pf-c-sidebar__main--child--MarginLeft:var(--pf-c-sidebar--m-gutter__main--Gap);--pf-c-sidebar__panel--Position:var(--pf-c-sidebar--m-split__panel--Position);--pf-c-sidebar__panel--Top:var(--pf-c-sidebar--m-split__panel--Top);--pf-c-sidebar__panel--BoxShadow:none;--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--m-split--FlexBasis);--pf-c-sidebar--m-panel-right__panel--Order:var(--pf-c-sidebar--m-split--m-panel-right__panel--Order)}.pf-c-sidebar__main{align-items:var(--pf-c-sidebar__main--AlignItems);display:flex;flex-direction:var(--pf-c-sidebar__main--FlexDirection)}.pf-c-sidebar__panel{background-color:var(--pf-c-sidebar__panel--BackgroundColor);box-shadow:var(--pf-c-sidebar__panel--BoxShadow);flex-basis:var(--pf-c-sidebar__panel--FlexBasis);flex-shrink:0;order:var(--pf-c-sidebar__panel--Order);position:var(--pf-c-sidebar__panel--Position);top:var(--pf-c-sidebar__panel--Top);z-index:var(--pf-c-sidebar__panel--ZIndex)}.pf-c-sidebar__panel.pf-m-sticky{--pf-c-sidebar__panel--Position:var(--pf-c-sidebar__panel--m-sticky--Position);--pf-c-sidebar__panel--Top:var(--pf-c-sidebar__panel--m-sticky--Top)}.pf-c-sidebar__panel.pf-m-static{--pf-c-sidebar__panel--Position:static;--pf-c-sidebar__panel--Top:auto}.pf-c-sidebar__content{background-color:var(--pf-c-sidebar__content--BackgroundColor);flex-grow:1}.pf-c-sidebar__content.pf-m-no-background{--pf-c-sidebar__content--BackgroundColor:transparent}.pf-c-sidebar.pf-m-no-background,.pf-c-sidebar__content.pf-m-no-background,.pf-c-sidebar__panel.pf-m-no-background{background-color:transparent}.pf-c-sidebar__panel.pf-m-width-default{--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis--base)}.pf-c-sidebar__panel.pf-m-width-25{--pf-c-sidebar__panel--FlexBasis:25%}.pf-c-sidebar__panel.pf-m-width-33{--pf-c-sidebar__panel--FlexBasis:33%}.pf-c-sidebar__panel.pf-m-width-50{--pf-c-sidebar__panel--FlexBasis:50%}.pf-c-sidebar__panel.pf-m-width-66{--pf-c-sidebar__panel--FlexBasis:66%}.pf-c-sidebar__panel.pf-m-width-75{--pf-c-sidebar__panel--FlexBasis:75%}.pf-c-sidebar__panel.pf-m-width-100{--pf-c-sidebar__panel--FlexBasis:100%}@media (min-width:576px){.pf-c-sidebar__panel.pf-m-width-default-on-sm{--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis--base)}.pf-c-sidebar__panel.pf-m-width-25-on-sm{--pf-c-sidebar__panel--FlexBasis:25%}.pf-c-sidebar__panel.pf-m-width-33-on-sm{--pf-c-sidebar__panel--FlexBasis:33%}.pf-c-sidebar__panel.pf-m-width-50-on-sm{--pf-c-sidebar__panel--FlexBasis:50%}.pf-c-sidebar__panel.pf-m-width-66-on-sm{--pf-c-sidebar__panel--FlexBasis:66%}.pf-c-sidebar__panel.pf-m-width-75-on-sm{--pf-c-sidebar__panel--FlexBasis:75%}.pf-c-sidebar__panel.pf-m-width-100-on-sm{--pf-c-sidebar__panel--FlexBasis:100%}}@media (min-width:768px){.pf-c-sidebar__panel.pf-m-width-default-on-md{--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis--base)}.pf-c-sidebar__panel.pf-m-width-25-on-md{--pf-c-sidebar__panel--FlexBasis:25%}.pf-c-sidebar__panel.pf-m-width-33-on-md{--pf-c-sidebar__panel--FlexBasis:33%}.pf-c-sidebar__panel.pf-m-width-50-on-md{--pf-c-sidebar__panel--FlexBasis:50%}.pf-c-sidebar__panel.pf-m-width-66-on-md{--pf-c-sidebar__panel--FlexBasis:66%}.pf-c-sidebar__panel.pf-m-width-75-on-md{--pf-c-sidebar__panel--FlexBasis:75%}.pf-c-sidebar__panel.pf-m-width-100-on-md{--pf-c-sidebar__panel--FlexBasis:100%}}@media (min-width:992px){.pf-c-sidebar__panel.pf-m-width-default-on-lg{--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis--base)}.pf-c-sidebar__panel.pf-m-width-25-on-lg{--pf-c-sidebar__panel--FlexBasis:25%}.pf-c-sidebar__panel.pf-m-width-33-on-lg{--pf-c-sidebar__panel--FlexBasis:33%}.pf-c-sidebar__panel.pf-m-width-50-on-lg{--pf-c-sidebar__panel--FlexBasis:50%}.pf-c-sidebar__panel.pf-m-width-66-on-lg{--pf-c-sidebar__panel--FlexBasis:66%}.pf-c-sidebar__panel.pf-m-width-75-on-lg{--pf-c-sidebar__panel--FlexBasis:75%}.pf-c-sidebar__panel.pf-m-width-100-on-lg{--pf-c-sidebar__panel--FlexBasis:100%}}@media (min-width:1200px){.pf-c-sidebar__panel.pf-m-width-default-on-xl{--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis--base)}.pf-c-sidebar__panel.pf-m-width-25-on-xl{--pf-c-sidebar__panel--FlexBasis:25%}.pf-c-sidebar__panel.pf-m-width-33-on-xl{--pf-c-sidebar__panel--FlexBasis:33%}.pf-c-sidebar__panel.pf-m-width-50-on-xl{--pf-c-sidebar__panel--FlexBasis:50%}.pf-c-sidebar__panel.pf-m-width-66-on-xl{--pf-c-sidebar__panel--FlexBasis:66%}.pf-c-sidebar__panel.pf-m-width-75-on-xl{--pf-c-sidebar__panel--FlexBasis:75%}.pf-c-sidebar__panel.pf-m-width-100-on-xl{--pf-c-sidebar__panel--FlexBasis:100%}}@media (min-width:1450px){.pf-c-sidebar__panel.pf-m-width-default-on-2xl{--pf-c-sidebar__panel--FlexBasis:var(--pf-c-sidebar__panel--FlexBasis--base)}.pf-c-sidebar__panel.pf-m-width-25-on-2xl{--pf-c-sidebar__panel--FlexBasis:25%}.pf-c-sidebar__panel.pf-m-width-33-on-2xl{--pf-c-sidebar__panel--FlexBasis:33%}.pf-c-sidebar__panel.pf-m-width-50-on-2xl{--pf-c-sidebar__panel--FlexBasis:50%}.pf-c-sidebar__panel.pf-m-width-66-on-2xl{--pf-c-sidebar__panel--FlexBasis:66%}.pf-c-sidebar__panel.pf-m-width-75-on-2xl{--pf-c-sidebar__panel--FlexBasis:75%}.pf-c-sidebar__panel.pf-m-width-100-on-2xl{--pf-c-sidebar__panel--FlexBasis:100%}}.pf-c-menu{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100)}.pf-c-menu__group,.pf-c-menu__list,.pf-c-menu__list-item{--pf-hidden-visible--visible--Visibility:visible;--pf-hidden-visible--hidden--Display:none;--pf-hidden-visible--hidden--Visibility:hidden;--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility);display:var(--pf-hidden-visible--Display);visibility:var(--pf-hidden-visible--Visibility)}.pf-m-hidden.pf-c-menu__group,.pf-m-hidden.pf-c-menu__list,.pf-m-hidden.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}@media screen and (min-width:576px){.pf-m-hidden-on-sm.pf-c-menu__group,.pf-m-hidden-on-sm.pf-c-menu__list,.pf-m-hidden-on-sm.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-sm.pf-c-menu__group,.pf-m-visible-on-sm.pf-c-menu__list,.pf-m-visible-on-sm.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-m-hidden-on-md.pf-c-menu__group,.pf-m-hidden-on-md.pf-c-menu__list,.pf-m-hidden-on-md.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-md.pf-c-menu__group,.pf-m-visible-on-md.pf-c-menu__list,.pf-m-visible-on-md.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:992px){.pf-m-hidden-on-lg.pf-c-menu__group,.pf-m-hidden-on-lg.pf-c-menu__list,.pf-m-hidden-on-lg.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-lg.pf-c-menu__group,.pf-m-visible-on-lg.pf-c-menu__list,.pf-m-visible-on-lg.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1200px){.pf-m-hidden-on-xl.pf-c-menu__group,.pf-m-hidden-on-xl.pf-c-menu__list,.pf-m-hidden-on-xl.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-xl.pf-c-menu__group,.pf-m-visible-on-xl.pf-c-menu__list,.pf-m-visible-on-xl.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1450px){.pf-m-hidden-on-2xl.pf-c-menu__group,.pf-m-hidden-on-2xl.pf-c-menu__list,.pf-m-hidden-on-2xl.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-2xl.pf-c-menu__group,.pf-m-visible-on-2xl.pf-c-menu__list,.pf-m-visible-on-2xl.pf-c-menu__list-item{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}.pf-c-menu{--pf-c-menu--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-menu--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-menu--MinWidth:auto;--pf-c-menu--Width:auto;--pf-c-menu--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-menu--Top:auto;--pf-c-menu--m-flyout__menu--Top:calc(var(--pf-c-menu__list--PaddingTop)*-1 + var(--pf-c-menu--m-flyout__menu--top-offset));--pf-c-menu--m-flyout__menu--Right:auto;--pf-c-menu--m-flyout__menu--Bottom:auto;--pf-c-menu--m-flyout__menu--Left:calc(100% + var(--pf-c-menu--m-flyout__menu--left-offset));--pf-c-menu--m-flyout__menu--m-top--Bottom:calc(var(--pf-c-menu__list--PaddingTop)*-1);--pf-c-menu--m-flyout__menu--m-left--Right:calc(100% + var(--pf-c-menu--m-flyout__menu--m-left--right-offset));--pf-c-menu--m-plain--BoxShadow:none;--pf-c-menu--m-flyout__menu--top-offset:0px;--pf-c-menu--m-flyout__menu--left-offset:0px;--pf-c-menu--m-flyout__menu--m-left--right-offset:0px;--pf-c-menu__content--Height:auto;--pf-c-menu__content--MaxHeight:none;--pf-c-menu--m-scrollable__content--MaxHeight:18.75rem;--pf-c-menu--c-divider--MarginTop:0;--pf-c-menu--c-divider--MarginBottom:0;--pf-c-menu__list--c-divider--MarginTop:var(--pf-global--spacer--sm);--pf-c-menu__list--c-divider--MarginBottom:var(--pf-global--spacer--sm);--pf-c-menu__header--PaddingTop:var(--pf-global--spacer--md);--pf-c-menu__header--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__header--PaddingBottom:var(--pf-global--spacer--md);--pf-c-menu__header--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__header--c-menu__item--MarginTop:calc(var(--pf-c-menu__header--PaddingTop)*-1/2);--pf-c-menu__header--c-menu__item--MarginRight:calc(var(--pf-c-menu__header--PaddingRight)*-1/2);--pf-c-menu__header--c-menu__item--MarginBottom:calc(var(--pf-c-menu__header--PaddingBottom)*-1/2);--pf-c-menu__header--c-menu__item--MarginLeft:calc(var(--pf-c-menu__header--PaddingLeft)*-1/2);--pf-c-menu__header--c-menu__item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-menu__header--c-menu__item--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__header--c-menu__item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-menu__header--c-menu__item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__header--c-menu__item--BackgroundColor:transparent;--pf-c-menu__header--c-menu__item--hover--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-menu__header--c-menu__item--focus--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-menu__search--PaddingTop:var(--pf-global--spacer--md);--pf-c-menu__search--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__search--PaddingBottom:var(--pf-global--spacer--md);--pf-c-menu__search--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__header__search--PaddingTop:0;--pf-c-menu__list--Display:block;--pf-c-menu__list--PaddingTop:var(--pf-global--spacer--sm);--pf-c-menu__list--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-menu__list-item--Display:flex;--pf-c-menu__list-item--Color:var(--pf-global--Color--100);--pf-c-menu__list-item--BackgroundColor:transparent;--pf-c-menu__list-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-menu__list-item--focus-within--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-menu__list-item--m-loading--PaddingTop:var(--pf-global--spacer--sm);--pf-c-menu__item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-menu__item--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-menu__item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__item--OutlineOffset:-0.125rem;--pf-c-menu__item--FontSize:var(--pf-global--FontSize--md);--pf-c-menu__item--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-menu__item--LineHeight:var(--pf-global--LineHeight--md);--pf-c-menu__list-item--m-disabled__item--Color:var(--pf-global--disabled-color--100);--pf-c-menu__list-item--m-danger__item--Color:var(--pf-global--danger-color--100);--pf-c-menu__list-item--m-load__item--Color:var(--pf-global--link--Color);--pf-c-menu__group--Display:block;--pf-c-menu__group-title--PaddingTop:var(--pf-global--spacer--md);--pf-c-menu__group-title--PaddingRight:var(--pf-c-menu__item--PaddingRight);--pf-c-menu__group-title--PaddingLeft:var(--pf-c-menu__item--PaddingLeft);--pf-c-menu__group-title--FontSize:var(--pf-global--FontSize--xs);--pf-c-menu__group-title--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-menu__group-title--Color:var(--pf-global--Color--200);--pf-c-menu__item-description--FontSize:var(--pf-global--FontSize--xs);--pf-c-menu__item-description--Color:var(--pf-global--Color--200);--pf-c-menu__item-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-menu__item-check--MarginRight:var(--pf-global--spacer--sm);--pf-c-menu__item-toggle-icon--PaddingRight:var(--pf-global--spacer--sm);--pf-c-menu__item-toggle-icon--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-menu__list-item--m-disabled__item-toggle-icon--Color:var(--pf-global--disabled-color--200);--pf-c-menu__item-text--item-toggle-icon--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu__item-toggle-icon--item-text--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu__item-select-icon--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu__item-select-icon--Color:var(--pf-global--active-color--100);--pf-c-menu__item-select-icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-menu__item-external-icon--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu__item-external-icon--Color:var(--pf-global--link--Color);--pf-c-menu__item-external-icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-menu__item-external-icon--Opacity:0;--pf-c-menu__item-action--PaddingTop:var(--pf-global--spacer--sm);--pf-c-menu__item-action--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__item-action--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-menu__item-action--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__item-action--Color:var(--pf-global--Color--200);--pf-c-menu__item-action--hover--Color:var(--pf-global--Color--100);--pf-c-menu__item-action--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-menu__item-action--m-favorited--Color:var(--pf-global--palette--gold-400);--pf-c-menu__item-action--m-favorited--hover--Color:var(--pf-global--palette--gold-500);--pf-c-menu__item-action-icon--Height:calc(var(--pf-c-menu__item--FontSize)*var(--pf-c-menu__item--LineHeight));--pf-c-menu__item-action--m-favorite__icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-menu__breadcrumb--PaddingTop:var(--pf-global--spacer--md);--pf-c-menu__breadcrumb--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__breadcrumb--PaddingBottom:var(--pf-global--spacer--md);--pf-c-menu__breadcrumb--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__breadcrumb--c-breadcrumb__item--FontSize:var(--pf-global--FontSize--md);--pf-c-menu__breadcrumb--c-breadcrumb__heading--FontSize:var(--pf-global--FontSize--md);--pf-c-menu--m-drilldown--c-menu--Top:0;--pf-c-menu--m-drilldown--c-menu--TransitionDuration--transform:var(--pf-global--TransitionDuration);--pf-c-menu--m-drilldown--c-menu--Transition:transform var(--pf-c-menu--m-drilldown--c-menu--TransitionDuration--transform);--pf-c-menu--m-drilldown__content--TransitionDuration--height:var(--pf-global--TransitionDuration);--pf-c-menu--m-drilldown__content--TransitionDuration--transform:var(--pf-global--TransitionDuration);--pf-c-menu--m-drilldown__content--Transition:transform var(--pf-c-menu--m-drilldown__content--TransitionDuration--transform),height var(--pf-c-menu--m-drilldown__content--TransitionDuration--height);--pf-c-menu--m-drilldown__list--TransitionDuration--transform:var(--pf-global--TransitionDuration);--pf-c-menu--m-drilldown__list--Transition:transform var(--pf-c-menu--m-drilldown__list--TransitionDuration--transform);--pf-c-menu--m-drilled-in--c-menu__list-item--m-current-path--c-menu--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-menu__footer--PaddingTop:var(--pf-global--spacer--md);--pf-c-menu__footer--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu__footer--PaddingBottom:var(--pf-global--spacer--md);--pf-c-menu__footer--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu__footer--BoxShadow:none;--pf-c-menu__footer--after--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu__footer--after--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-menu--m-scrollable__footer--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-menu--m-scrollable__footer--after--BorderTopWidth:0;--pf-c-menu--m-scrollable__footer--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu--m-nav--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-menu--m-nav--BackgroundColor:var(--pf-global--BackgroundColor--dark-300);--pf-c-menu--m-nav__list--PaddingTop:0;--pf-c-menu--m-nav__list--PaddingBottom:0;--pf-c-menu--m-nav__list-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-menu--m-nav__list-item--focus-within--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-menu--m-nav__list-item--active--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-menu--m-nav__item--PaddingRight:var(--pf-global--spacer--lg);--pf-c-menu--m-nav__item--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-menu--m-nav__item--Color:var(--pf-global--Color--light-100);--pf-c-menu--m-nav__item--FontSize:var(--pf-global--FontSize--sm);--pf-c-menu--m-nav__item--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-menu--m-nav__item--before--BorderBottomColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-menu--m-nav__item--before--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu--m-nav__item--hover--after--BorderLeftColor:var(--pf-global--BorderColor--200);--pf-c-menu--m-nav__item--hover--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu--m-nav__item--hover--after--Top:calc(var(--pf-c-menu--m-nav__item--before--BorderBottomWidth)*-1);--pf-c-menu--m-nav__item__list-item--first-child__item--hover--after--Top:0;--pf-c-menu--m-nav__item-description--Color:var(--pf-global--Color--light-200);--pf-c-menu--m-nav--c-menu--left-offset:0.25rem;--pf-c-menu--m-nav--c-menu--m-top--bottom-offset:0;--pf-c-menu--m-nav--c-menu--m-left--right-offset:0.25rem;--pf-c-menu--m-nav--c-menu--Top:calc(var(--pf-c-menu--m-nav__item--before--BorderBottomWidth)*-1);--pf-c-menu--m-nav--c-menu--Left:calc(100% - var(--pf-c-menu--m-nav--c-menu--left-offset));--pf-c-menu--m-nav--c-menu--m-left--Right:calc(100% - var(--pf-c-menu--m-nav--c-menu--m-left--right-offset));--pf-c-menu--m-nav--c-menu--m-top--Bottom:calc(var(--pf-c-menu--m-nav--c-menu--m-top--bottom-offset));--pf-c-menu--m-nav__list-item--first-child--c-menu--Top:0;background-color:var(--pf-c-menu--BackgroundColor);box-shadow:var(--pf-c-menu--BoxShadow);color:var(--pf-global--Color--100);min-width:var(--pf-c-menu--MinWidth);top:var(--pf-c-menu--Top);width:var(--pf-c-menu--Width);z-index:var(--pf-c-menu--ZIndex)}.pf-c-menu .pf-c-menu__content .pf-c-menu .pf-c-menu__content{overflow:visible}.pf-c-menu .pf-c-divider{margin-bottom:var(--pf-c-menu--c-divider--MarginBottom);margin-top:var(--pf-c-menu--c-divider--MarginTop)}.pf-c-menu .pf-c-menu.pf-m-flyout,.pf-c-menu.pf-m-flyout .pf-c-menu{bottom:var(--pf-c-menu--m-flyout__menu--Bottom);left:var(--pf-c-menu--m-flyout__menu--Left);position:absolute;right:var(--pf-c-menu--m-flyout__menu--Right);top:var(--pf-c-menu--m-flyout__menu--Top)}.pf-c-menu .pf-c-menu.pf-m-flyout .pf-c-menu__content,.pf-c-menu.pf-m-flyout .pf-c-menu .pf-c-menu__content{overflow-y:visible}.pf-c-menu.pf-m-top{--pf-c-menu--m-flyout__menu--Top:auto;--pf-c-menu--m-flyout__menu--Bottom:var(--pf-c-menu--m-flyout__menu--m-top--Bottom)}.pf-c-menu.pf-m-left{--pf-c-menu--m-flyout__menu--Right:var(--pf-c-menu--m-flyout__menu--m-left--Right);--pf-c-menu--m-flyout__menu--Left:auto}.pf-c-menu.pf-m-drilldown{display:flex;flex-direction:column}.pf-c-menu.pf-m-drilldown[hidden]{display:none}.pf-c-menu.pf-m-drilldown>.pf-c-menu__content{flex-grow:1;overflow:hidden;transition:var(--pf-c-menu--m-drilldown__content--Transition)}.pf-c-menu.pf-m-drilldown.pf-m-drilled-in>.pf-c-menu__content>.pf-c-menu__list,.pf-c-menu.pf-m-drilldown.pf-m-drilled-in>.pf-c-menu__list{transform:translateX(-100%)}.pf-c-menu.pf-m-drilldown>.pf-c-menu__content .pf-c-menu{--pf-c-menu--BoxShadow:none;left:100%;position:absolute;top:var(--pf-c-menu--m-drilldown--c-menu--Top);transition:var(--pf-c-menu--m-drilldown--c-menu--Transition);width:100%}.pf-c-menu.pf-m-drilldown>.pf-c-menu__content .pf-c-menu.pf-m-drilled-in{transform:translateX(-100%)}.pf-c-menu.pf-m-drilldown .pf-c-menu__list{overflow:hidden;position:relative;transition:var(--pf-c-menu--m-drilldown__list--Transition)}.pf-c-menu.pf-m-drilldown .pf-c-menu__list .pf-c-menu__list{--pf-c-menu__list--PaddingTop:0;--pf-c-menu__list--PaddingBottom:0}.pf-c-menu.pf-m-drilldown .pf-c-menu__list-item.pf-m-current-path .pf-c-menu{z-index:var(--pf-c-menu--m-drilled-in--c-menu__list-item--m-current-path--c-menu--ZIndex)}.pf-c-menu.pf-m-drilldown .pf-c-menu__list-item.pf-m-current-path>.pf-c-menu{overflow:visible}.pf-c-menu.pf-m-drilldown .pf-c-menu__list-item.pf-m-static>.pf-c-menu{position:static}.pf-c-menu.pf-m-drilldown .pf-c-menu__list-item.pf-m-static:hover{background-color:transparent}.pf-c-menu.pf-m-drilldown .pf-c-menu__list-item:not(.pf-m-current-path) .pf-c-menu{display:none;visibility:hidden}.pf-c-menu.pf-m-drilldown .pf-c-menu__item{outline-offset:var(--pf-c-menu__item--OutlineOffset)}.pf-c-menu.pf-m-drilled-in>.pf-c-menu__content>.pf-c-menu__list{overflow:visible;visibility:hidden}.pf-c-menu.pf-m-drilled-in>.pf-c-menu__content>.pf-c-menu__list>.pf-c-divider,.pf-c-menu.pf-m-drilled-in>.pf-c-menu__content>.pf-c-menu__list>.pf-c-menu__list-item:not(.pf-m-current-path){display:none}.pf-c-menu.pf-m-drilled-in>.pf-c-menu__content>.pf-c-menu__list>.pf-c-menu__list-item.pf-m-current-path{visibility:hidden}.pf-c-menu.pf-m-plain{--pf-c-menu--BoxShadow:var(--pf-c-menu--m-plain--BoxShadow)}.pf-c-menu.pf-m-scrollable{--pf-c-menu__content--MaxHeight:var(--pf-c-menu--m-scrollable__content--MaxHeight);--pf-c-menu__footer--BoxShadow:var(--pf-c-menu--m-scrollable__footer--BoxShadow);--pf-c-menu__footer--after--BorderTopWidth:var(--pf-c-menu--m-scrollable__footer--after--BorderTopWidth)}.pf-c-menu.pf-m-scrollable .pf-c-menu__content{overflow-y:auto}.pf-c-menu.pf-m-nav,.pf-c-menu.pf-m-nav .pf-c-menu{--pf-c-menu--BackgroundColor:var(--pf-c-menu--m-nav--BackgroundColor);--pf-c-menu__list--PaddingTop:var(--pf-c-menu--m-nav__list--PaddingTop);--pf-c-menu__list--PaddingBottom:var(--pf-c-menu--m-nav__list--PaddingBottom);--pf-c-menu__list-item--hover--BackgroundColor:var(--pf-c-menu--m-nav__list-item--hover--BackgroundColor);--pf-c-menu__list-item--focus-within--BackgroundColor:var(--pf-c-menu--m-nav__list-item--focus-within--BackgroundColor);--pf-c-menu__list-item--active--BackgroundColor:var(--pf-c-menu--m-nav__list-item--active--BackgroundColor);--pf-c-menu__item--Color:var(--pf-c-menu--m-nav__item--Color);--pf-c-menu__item--FontSize:var(--pf-c-menu--m-nav__item--FontSize);--pf-c-menu__item--OutlineOffset:var(--pf-c-menu--m-nav__item--OutlineOffset);--pf-c-menu__item--PaddingRight:var(--pf-c-menu--m-nav__item--PaddingRight);--pf-c-menu__item--PaddingLeft:var(--pf-c-menu--m-nav__item--PaddingLeft);--pf-c-menu__item-description--Color:var(--pf-c-menu--m-nav__item-description--Color);box-shadow:var(--pf-c-menu--m-nav--BoxShadow)}.pf-c-menu.pf-m-nav .pf-c-menu .pf-c-menu__item,.pf-c-menu.pf-m-nav .pf-c-menu__item{outline-offset:var(--pf-c-nav__item--m-flyout--c-menu__item--OutlineOffset);position:relative}.pf-c-menu.pf-m-nav .pf-c-menu .pf-c-menu__item:before,.pf-c-menu.pf-m-nav .pf-c-menu__item:before{border-bottom:var(--pf-c-menu--m-nav__item--before--BorderBottomWidth) solid var(--pf-c-menu--m-nav__item--before--BorderBottomColor);bottom:0;content:"";left:0;position:absolute;right:0}.pf-c-menu.pf-m-nav .pf-c-menu .pf-c-menu__item:hover:after,.pf-c-menu.pf-m-nav .pf-c-menu__item:hover:after{border-left:var(--pf-c-menu--m-nav__item--hover--after--BorderLeftWidth) solid var(--pf-c-menu--m-nav__item--hover--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:var(--pf-c-menu--m-nav__item--hover--after--Top)}.pf-c-menu.pf-m-nav .pf-c-menu{width:100%}.pf-c-menu.pf-m-flyout.pf-m-nav,.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu{left:var(--pf-c-menu--m-nav--c-menu--Left);top:var(--pf-c-menu--m-nav--c-menu--Top)}.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu.pf-m-top,.pf-c-menu.pf-m-flyout.pf-m-nav.pf-m-top{--pf-c-menu--m-nav--c-menu--Top:auto;bottom:var(--pf-c-menu--m-nav--c-menu--m-top--Bottom)}.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu.pf-m-left,.pf-c-menu.pf-m-flyout.pf-m-nav.pf-m-left{--pf-c-menu--m-nav--c-menu--Left:auto;right:var(--pf-c-menu--m-nav--c-menu--m-left--Right)}.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu .pf-c-menu__list-item:first-child,.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu__list-item:first-child{--pf-c-menu--m-nav__item--hover--after--Top:var(--pf-c-menu--m-nav__item__list-item--first-child__item--hover--after--Top)}.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu .pf-c-menu__list-item:first-child .pf-c-menu,.pf-c-menu.pf-m-flyout.pf-m-nav .pf-c-menu__list-item:first-child .pf-c-menu{--pf-c-menu--m-nav--c-menu--Top:var(--pf-c-menu--m-nav__list-item--first-child--c-menu--Top)}.pf-c-menu__breadcrumb{align-items:center;display:flex;min-height:var(--pf-c-menu__breadcrumb--MinHeight);padding:var(--pf-c-menu__breadcrumb--PaddingTop) var(--pf-c-menu__breadcrumb--PaddingRight) var(--pf-c-menu__breadcrumb--PaddingBottom) var(--pf-c-menu__breadcrumb--PaddingLeft)}.pf-c-menu__breadcrumb .pf-c-breadcrumb{--pf-c-breadcrumb__item--FontSize:var(--pf-c-menu__breadcrumb--c-breadcrumb__item--FontSize);--pf-c-breadcrumb__heading--FontSize:var(--pf-c-menu__breadcrumb--c-breadcrumb__heading--FontSize)}.pf-c-menu__content{height:var(--pf-c-menu__content--Height);max-height:var(--pf-c-menu__content--MaxHeight)}.pf-c-menu__content .pf-c-menu__content{--pf-c-menu__content--Height:auto}.pf-c-menu__header{--pf-c-menu__item--PaddingTop:var(--pf-c-menu__header--c-menu__item--PaddingTop);--pf-c-menu__item--PaddingRight:var(--pf-c-menu__header--c-menu__item--PaddingRight);--pf-c-menu__item--PaddingBottom:var(--pf-c-menu__header--c-menu__item--PaddingBottom);--pf-c-menu__item--PaddingLeft:var(--pf-c-menu__header--c-menu__item--PaddingLeft);padding-bottom:var(--pf-c-menu__header--PaddingBottom);padding-left:var(--pf-c-menu__header--PaddingLeft);padding-right:var(--pf-c-menu__header--PaddingRight);padding-top:var(--pf-c-menu__header--PaddingTop)}.pf-c-menu__header>.pf-c-menu__item{--pf-c-menu__item--BackgroundColor:var(--pf-c-menu__header--c-menu__item--BackgroundColor);margin-bottom:var(--pf-c-menu__header--c-menu__item--MarginBottom);margin-left:var(--pf-c-menu__header--c-menu__item--MarginLeft);margin-right:var(--pf-c-menu__header--c-menu__item--MarginRight);margin-top:var(--pf-c-menu__header--c-menu__item--MarginTop)}.pf-c-menu__header>.pf-c-menu__item:hover{--pf-c-menu__item--BackgroundColor:var(--pf-c-menu__header--c-menu__item--hover--BackgroundColor)}.pf-c-menu__header>.pf-c-menu__item:focus{--pf-c-menu__item--BackgroundColor:var(--pf-c-menu__header--c-menu__item--focus--BackgroundColor)}.pf-c-menu__header+.pf-c-menu__search{--pf-c-menu__search--PaddingTop:var(--pf-c-menu__header__search--PaddingTop)}.pf-c-menu__search{padding-bottom:var(--pf-c-menu__search--PaddingBottom);padding-left:var(--pf-c-menu__search--PaddingLeft);padding-right:var(--pf-c-menu__search--PaddingRight);padding-top:var(--pf-c-menu__search--PaddingTop)}.pf-c-menu__list{--pf-hidden-visible--visible--Display:var(--pf-c-menu__list--Display);padding-bottom:var(--pf-c-menu__list--PaddingBottom);padding-top:var(--pf-c-menu__list--PaddingTop)}.pf-c-menu__list>.pf-c-divider{margin-bottom:var(--pf-c-menu__list--c-divider--MarginBottom);margin-top:var(--pf-c-menu__list--c-divider--MarginTop)}.pf-c-menu__list-item{--pf-hidden-visible--visible--Display:var(--pf-c-menu__list-item--Display);background-color:var(--pf-c-menu__list-item--BackgroundColor);color:var(--pf-c-menu__list-item--Color);position:relative}.pf-c-menu__list-item:hover{--pf-c-menu__list-item--BackgroundColor:var(--pf-c-menu__list-item--hover--BackgroundColor);--pf-c-menu__list-item--Color:var(--pf-c-menu__list-item--hover--Color,inherit)}.pf-c-menu__list-item.pf-m-focus,.pf-c-menu__list-item:focus-within{--pf-c-menu__list-item--BackgroundColor:var(--pf-c-menu__list-item--focus-within--BackgroundColor);--pf-c-menu__list-item--Color:var(--pf-c-menu__list-item--focus-within--Color,inherit)}.pf-c-menu__list-item.pf-m-disabled{--pf-c-menu__list-item--hover--BackgroundColor:transparent;--pf-c-menu__list-item--focus-within--BackgroundColor:transparent;--pf-c-menu__item--Color:var(--pf-c-menu__list-item--m-disabled__item--Color);--pf-c-menu__item-toggle-icon:var(--pf-c-menu__list-item--m-disabled__item-toggle-icon--Color);pointer-events:none}.pf-c-menu__list-item.pf-m-load{--pf-c-menu__list-item--hover--BackgroundColor:transparent;--pf-c-menu__list-item--focus-within--BackgroundColor:transparent;--pf-c-menu__item--Color:var(--pf-c-menu__list-item--m-load__item--Color)}.pf-c-menu__list-item.pf-m-loading{--pf-c-menu__list-item--hover--BackgroundColor:transparent;--pf-c-menu__list-item--focus-within--BackgroundColor:transparent;justify-content:center;overflow:hidden;padding-top:var(--pf-c-menu__list-item--m-loading--PaddingTop)}.pf-c-menu__list-item.pf-m-danger{--pf-c-menu__item--Color:var(--pf-c-menu__list-item--m-danger__item--Color,inherit)}.pf-c-menu__item{background-color:var(--pf-c-menu__item--BackgroundColor);border:none;color:var(--pf-c-menu__item--Color);display:flex;flex-basis:100%;flex-direction:column;font-size:var(--pf-c-menu__item--FontSize);font-weight:var(--pf-c-menu__item--FontWeight);line-height:var(--pf-c-menu__item--LineHeight);min-width:0;padding-bottom:var(--pf-c-menu__item--PaddingBottom);padding-left:var(--pf-c-menu__item--PaddingLeft);padding-right:var(--pf-c-menu__item--PaddingRight);padding-top:var(--pf-c-menu__item--PaddingTop);text-align:left}.pf-c-menu__item:hover{text-decoration:none}.pf-c-menu__item:focus,.pf-c-menu__item:hover{--pf-c-menu__item-external-icon--Opacity:1}.pf-c-menu__item.pf-m-selected .pf-c-menu__item-select-icon{opacity:1}label.pf-c-menu__item:where(:not([disabled],.pf-m-disabled)){cursor:pointer}.pf-c-menu__item-main{align-items:center;display:flex;width:100%}.pf-c-menu__item-external-icon{color:var(--pf-c-menu__item-external-icon--Color);font-size:var(--pf-c-menu__item-external-icon--FontSize);margin-left:var(--pf-c-menu__item-external-icon--MarginLeft);opacity:var(--pf-c-menu__item-external-icon--Opacity)}.pf-c-menu__item-text{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-menu__group{--pf-hidden-visible--visible--Display:var(--pf-c-menu__group--Display)}.pf-c-menu__group-title{color:var(--pf-c-menu__group-title--Color);font-size:var(--pf-c-menu__group-title--FontSize);font-weight:var(--pf-c-menu__group-title--FontWeight);padding-left:var(--pf-c-menu__group-title--PaddingLeft);padding-right:var(--pf-c-menu__group-title--PaddingRight);padding-top:var(--pf-c-menu__group-title--PaddingTop)}.pf-c-menu__item-description{color:var(--pf-c-menu__item-description--Color);font-size:var(--pf-c-menu__item-description--FontSize);word-break:break-all}.pf-c-menu__item-icon{margin-right:var(--pf-c-menu__item-icon--MarginRight)}.pf-c-menu__item-check{align-items:center;display:flex;margin-right:var(--pf-c-menu__item-check--MarginRight)}.pf-c-menu__item-toggle-icon{color:var(--pf-c-menu__item-toggle-icon,inherit);padding-left:var(--pf-c-menu__item-toggle-icon--PaddingLeft);padding-right:var(--pf-c-menu__item-toggle-icon--PaddingRight)}.pf-c-menu__item-text+.pf-c-menu__item-toggle-icon{margin-left:var(--pf-c-menu__item-text--item-toggle-icon--MarginLeft)}.pf-c-menu__item-toggle-icon+.pf-c-menu__item-text{margin-left:var(--pf-c-menu__item-toggle-icon--item-text--MarginLeft)}.pf-c-menu__item-select-icon{color:var(--pf-c-menu__item-select-icon--Color);font-size:var(--pf-c-menu__item-select-icon--FontSize);margin-left:var(--pf-c-menu__item-select-icon--MarginLeft);opacity:0}.pf-c-menu__item-action{border:none;color:var(--pf-c-menu__item-action--Color);display:flex;padding-bottom:var(--pf-c-menu__item-action--PaddingBottom);padding-left:var(--pf-c-menu__item-action--PaddingLeft);padding-right:var(--pf-c-menu__item-action--PaddingRight);padding-top:var(--pf-c-menu__item-action--PaddingTop)}.pf-c-menu__item-action.pf-m-favorite .pf-c-menu__item-action-icon{font-size:var(--pf-c-menu__item-action--m-favorite__icon--FontSize)}.pf-c-menu__item-action.pf-m-favorited{--pf-c-menu__item-action--Color:var(--pf-c-menu__item-action--m-favorited--Color);--pf-c-menu__item-action--hover--Color:var(--pf-c-menu__item-action--m-favorited--hover--Color)}.pf-c-menu__item-action:focus,.pf-c-menu__item-action:hover{--pf-c-menu__item-action--Color:var(--pf-c-menu__item-action--hover--Color)}.pf-c-menu__item-action:disabled{--pf-c-menu__item-action--Color:var(--pf-c-menu__item-action--disabled--Color)}.pf-c-menu__item-action-icon{align-items:center;display:flex;height:var(--pf-c-menu__item-action-icon--Height)}.pf-c-menu__footer{box-shadow:var(--pf-c-menu__footer--BoxShadow);padding:var(--pf-c-menu__footer--PaddingTop) var(--pf-c-menu__footer--PaddingRight) var(--pf-c-menu__footer--PaddingBottom) var(--pf-c-menu__footer--PaddingLeft);position:relative}.pf-c-menu__footer:after{border-top:var(--pf-c-menu__footer--after--BorderTopWidth) solid var(--pf-c-menu__footer--after--BorderTopColor);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}:where(.pf-theme-dark) .pf-c-menu{--pf-c-menu--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-menu__list-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu__list-item--focus-within--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu__list-item--m-disabled__item--Color:var(--pf-global--Color--200)}.pf-c-tab-content{--pf-c-tab-content__body--PaddingTop:0;--pf-c-tab-content__body--PaddingRight:0;--pf-c-tab-content__body--PaddingBottom:0;--pf-c-tab-content__body--PaddingLeft:0;--pf-c-tab-content__body--m-padding--PaddingTop:var(--pf-global--spacer--md);--pf-c-tab-content__body--m-padding--PaddingRight:var(--pf-global--spacer--md);--pf-c-tab-content__body--m-padding--PaddingBottom:var(--pf-global--spacer--md);--pf-c-tab-content__body--m-padding--PaddingLeft:var(--pf-global--spacer--md);--pf-c-tab-content__body--m-padding--xl--PaddingTop:var(--pf-global--spacer--lg);--pf-c-tab-content__body--m-padding--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-tab-content__body--m-padding--xl--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-tab-content__body--m-padding--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-tab-content--m-light-300:var(--pf-global--BackgroundColor--light-300)}@media screen and (min-width:1200px){.pf-c-tab-content{--pf-c-tab-content__body--m-padding--PaddingTop:var(--pf-c-tab-content__body--m-padding--xl--PaddingTop);--pf-c-tab-content__body--m-padding--PaddingRight:var(--pf-c-tab-content__body--m-padding--xl--PaddingRight);--pf-c-tab-content__body--m-padding--PaddingBottom:var(--pf-c-tab-content__body--m-padding--xl--PaddingBottom);--pf-c-tab-content__body--m-padding--PaddingLeft:var(--pf-c-tab-content__body--m-padding--xl--PaddingLeft)}}.pf-c-tab-content.pf-m-light-300{background-color:var(--pf-c-tab-content--m-light-300)}.pf-c-tab-content__body{padding:var(--pf-c-tab-content__body--PaddingTop) var(--pf-c-tab-content__body--PaddingRight) var(--pf-c-tab-content__body--PaddingBottom) var(--pf-c-tab-content__body--PaddingLeft)}.pf-c-tab-content__body.pf-m-padding{--pf-c-tab-content__body--PaddingTop:var(--pf-c-tab-content__body--m-padding--PaddingTop);--pf-c-tab-content__body--PaddingRight:var(--pf-c-tab-content__body--m-padding--PaddingRight);--pf-c-tab-content__body--PaddingBottom:var(--pf-c-tab-content__body--m-padding--PaddingBottom);--pf-c-tab-content__body--PaddingLeft:var(--pf-c-tab-content__body--m-padding--PaddingLeft)}.pf-c-icon{--pf-c-icon--Width:var(--pf-global--icon--FontSize--md);--pf-c-icon--Height:var(--pf-global--icon--FontSize--md);--pf-c-icon--m-inline--Width:1em;--pf-c-icon--m-inline--Height:1em;--pf-c-icon--m-sm--Width:var(--pf-global--icon--FontSize--sm);--pf-c-icon--m-md--Width:var(--pf-global--icon--FontSize--md);--pf-c-icon--m-lg--Width:var(--pf-global--icon--FontSize--lg);--pf-c-icon--m-xl--Width:var(--pf-global--icon--FontSize--xl);--pf-c-icon--m-sm--Height:var(--pf-global--icon--FontSize--sm);--pf-c-icon--m-md--Height:var(--pf-global--icon--FontSize--md);--pf-c-icon--m-lg--Height:var(--pf-global--icon--FontSize--lg);--pf-c-icon--m-xl--Height:var(--pf-global--icon--FontSize--xl);--pf-c-icon__content--Color:var(--pf-global--icon--Color--dark);--pf-c-icon__content--m-danger--Color:var(--pf-global--danger-color--100);--pf-c-icon__content--m-warning--Color:var(--pf-global--warning-color--100);--pf-c-icon__content--m-success--Color:var(--pf-global--success-color--100);--pf-c-icon__content--m-info--Color:var(--pf-global--info-color--100);--pf-c-icon__content--m-default--Color:var(--pf-global--default-color--100);--pf-c-icon__content--FontSize:var(--pf-global--icon--FontSize--md);--pf-c-icon--m-inline__content--FontSize:1em;--pf-c-icon__content--svg--VerticalAlign:-.125em;--pf-c-icon--m-sm--content--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-icon--m-md--content--FontSize:var(--pf-global--icon--FontSize--md);--pf-c-icon--m-lg--content--FontSize:var(--pf-global--icon--FontSize--lg);--pf-c-icon--m-xl--content--FontSize:var(--pf-global--icon--FontSize--xl);align-items:center;display:inline-flex;height:var(--pf-c-icon--Height);justify-content:center;position:relative;width:var(--pf-c-icon--Width)}.pf-c-icon.pf-m-inline{--pf-c-icon--Width:var(--pf-c-icon--m-inline--Width);--pf-c-icon--Height:var(--pf-c-icon--m-inline--Height);--pf-c-icon__content--FontSize:var(--pf-c-icon--m-inline__content--FontSize);--pf-c-icon__content--Color:currentcolor;line-height:1}.pf-c-icon.pf-m-inline .pf-c-spinner{--pf-c-spinner--diameter:1em}.pf-c-icon.pf-m-sm{--pf-c-icon--Width:var(--pf-c-icon--m-sm--Width);--pf-c-icon--Height:var(--pf-c-icon--m-sm--Height);--pf-c-icon__content--FontSize:var(--pf-c-icon--m-sm--content--FontSize)}.pf-c-icon.pf-m-md{--pf-c-icon--Width:var(--pf-c-icon--m-md--Width);--pf-c-icon--Height:var(--pf-c-icon--m-md--Height);--pf-c-icon__content--FontSize:var(--pf-c-icon--m-md--content--FontSize)}.pf-c-icon.pf-m-lg{--pf-c-icon--Width:var(--pf-c-icon--m-lg--Width);--pf-c-icon--Height:var(--pf-c-icon--m-lg--Height);--pf-c-icon__content--FontSize:var(--pf-c-icon--m-lg--content--FontSize)}.pf-c-icon.pf-m-xl{--pf-c-icon--Width:var(--pf-c-icon--m-xl--Width);--pf-c-icon--Height:var(--pf-c-icon--m-xl--Height);--pf-c-icon__content--FontSize:var(--pf-c-icon--m-xl--content--FontSize)}.pf-c-icon.pf-m-in-progress{--pf-c-icon__content--Opacity:0;--pf-c-icon__progress--Opacity:1}.pf-c-icon__content,.pf-c-icon__progress{font-size:var(--pf-c-icon__content--FontSize)}.pf-c-icon__content svg,.pf-c-icon__progress svg{vertical-align:var(--pf-c-icon__content--svg--VerticalAlign)}.pf-c-icon__content.pf-m-sm,.pf-c-icon__progress.pf-m-sm{--pf-c-icon__content--FontSize:var(--pf-c-icon--m-sm--content--FontSize)}.pf-c-icon__content.pf-m-md,.pf-c-icon__progress.pf-m-md{--pf-c-icon__content--FontSize:var(--pf-c-icon--m-md--content--FontSize)}.pf-c-icon__content.pf-m-lg,.pf-c-icon__progress.pf-m-lg{--pf-c-icon__content--FontSize:var(--pf-c-icon--m-lg--content--FontSize)}.pf-c-icon__content.pf-m-xl,.pf-c-icon__progress.pf-m-xl{--pf-c-icon__content--FontSize:var(--pf-c-icon--m-xl--content--FontSize)}.pf-c-icon__content{color:var(--pf-c-icon__content--Color);opacity:var(--pf-c-icon__content--Opacity,1)}.pf-c-icon__content.pf-m-danger{--pf-c-icon__content--Color:var(--pf-c-icon__content--m-danger--Color)}.pf-c-icon__content.pf-m-warning{--pf-c-icon__content--Color:var(--pf-c-icon__content--m-warning--Color)}.pf-c-icon__content.pf-m-success{--pf-c-icon__content--Color:var(--pf-c-icon__content--m-success--Color)}.pf-c-icon__content.pf-m-info{--pf-c-icon__content--Color:var(--pf-c-icon__content--m-info--Color)}.pf-c-icon__content.pf-m-default{--pf-c-icon__content--Color:var(--pf-c-icon__content--m-default--Color)}.pf-c-icon__progress{opacity:var(--pf-c-icon__progress--Opacity,0);position:absolute;top:calc(50% + var(--pf-c-icon__content--svg--VerticalAlign)*.5);transform:translateY(calc(-50% - var(--pf-c-icon__content--svg--VerticalAlign)*.5))}.pf-c-radio{--pf-c-radio--GridGap:var(--pf-global--spacer--xs) var(--pf-global--spacer--sm);--pf-c-radio__label--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-radio__label--Color:var(--pf-global--Color--100);--pf-c-radio__label--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-radio__label--FontSize:var(--pf-global--FontSize--md);--pf-c-radio__label--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-radio__input--Height:var(--pf-c-radio__label--FontSize);--pf-c-radio__input--MarginTop:calc(((var(--pf-c-radio__label--FontSize)*var(--pf-c-radio__label--LineHeight)) - var(--pf-c-radio__input--Height))/2);--pf-c-radio__input--first-child--MarginLeft:0.0625rem;--pf-c-radio__input--last-child--MarginRight:0.0625rem;--pf-c-radio__description--FontSize:var(--pf-global--FontSize--sm);--pf-c-radio__description--Color:var(--pf-global--Color--200);--pf-c-radio__body--MarginTop:var(--pf-global--spacer--sm);grid-gap:var(--pf-c-radio--GridGap);align-items:start;display:grid;grid-template-columns:auto 1fr;justify-items:start}.pf-c-radio.pf-m-standalone{--pf-c-radio--GridGap:0;--pf-c-radio__input--Height:auto;--pf-c-radio__input--MarginTop:0;display:inline-grid;line-height:1}.pf-c-radio__label{color:var(--pf-c-radio__label--Color);font-size:var(--pf-c-radio__label--FontSize);font-weight:var(--pf-c-radio__label--FontWeight);line-height:var(--pf-c-radio__label--LineHeight)}.pf-c-radio__input{height:var(--pf-c-radio__input--Height);margin-top:var(--pf-c-radio__input--MarginTop)}.pf-c-radio__input:first-child{margin-left:var(--pf-c-radio__input--first-child--MarginLeft)}.pf-c-radio__input:last-child{margin-right:var(--pf-c-radio__input--last-child--MarginRight)}.pf-c-radio__description{color:var(--pf-c-radio__description--Color);font-size:var(--pf-c-radio__description--FontSize);grid-column:2}.pf-c-radio__body{grid-column:2;margin-top:var(--pf-c-radio__body--MarginTop)}.pf-c-radio__input,.pf-c-radio__label,label.pf-c-radio{cursor:pointer}.pf-c-radio__input.pf-m-disabled,.pf-c-radio__input:disabled,.pf-c-radio__label.pf-m-disabled,.pf-c-radio__label:disabled{--pf-c-radio__label--Color:var(--pf-c-radio__label--disabled--Color);cursor:not-allowed}.pf-c-data-list{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100)}.pf-c-data-list__item-action{--pf-hidden-visible--visible--Visibility:visible;--pf-hidden-visible--hidden--Display:none;--pf-hidden-visible--hidden--Visibility:hidden;--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility);display:var(--pf-hidden-visible--Display);visibility:var(--pf-hidden-visible--Visibility)}.pf-m-hidden.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}@media screen and (min-width:576px){.pf-m-hidden-on-sm.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-sm.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-m-hidden-on-md.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-md.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:992px){.pf-m-hidden-on-lg.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-lg.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1200px){.pf-m-hidden-on-xl.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-xl.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:1450px){.pf-m-hidden-on-2xl.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--hidden--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--hidden--Visibility)}.pf-m-visible-on-2xl.pf-c-data-list__item-action{--pf-hidden-visible--Display:var(--pf-hidden-visible--visible--Display);--pf-hidden-visible--Visibility:var(--pf-hidden-visible--visible--Visibility)}}@media screen and (min-width:768px){.pf-c-data-list:not([class*=pf-m-grid]){--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:768px) and (min-width:1200px){.pf-c-data-list:not([class*=pf-m-grid]){--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:768px){.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list:not([class*=pf-m-grid]) .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}@media screen and (min-width:0){.pf-c-data-list.pf-m-grid-none{--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:0) and (min-width:1200px){.pf-c-data-list.pf-m-grid-none{--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:0){.pf-c-data-list.pf-m-grid-none .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list.pf-m-grid-none .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}@media screen and (min-width:576px){.pf-c-data-list.pf-m-grid-sm{--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:576px) and (min-width:1200px){.pf-c-data-list.pf-m-grid-sm{--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:576px){.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list.pf-m-grid-sm .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}@media screen and (min-width:768px){.pf-c-data-list.pf-m-grid-md{--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:768px) and (min-width:1200px){.pf-c-data-list.pf-m-grid-md{--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:768px){.pf-c-data-list.pf-m-grid-md .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list.pf-m-grid-md .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}@media screen and (min-width:992px){.pf-c-data-list.pf-m-grid-lg{--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:992px) and (min-width:1200px){.pf-c-data-list.pf-m-grid-lg{--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:992px){.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list.pf-m-grid-lg .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}@media screen and (min-width:1200px){.pf-c-data-list.pf-m-grid-xl{--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:1200px) and (min-width:1200px){.pf-c-data-list.pf-m-grid-xl{--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:1200px){.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list.pf-m-grid-xl .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}@media screen and (min-width:1450px){.pf-c-data-list.pf-m-grid-2xl{--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list__cell--cell--md--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list__cell--md--PaddingBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list__item-control--md--MarginRight);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list__item-action--md--MarginLeft);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-c-data-list__expandable-content-body--md--PaddingTop);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);--pf-c-data-list--m-compact__cell-cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop)}}@media screen and (min-width:1450px) and (min-width:1200px){.pf-c-data-list.pf-m-grid-2xl{--pf-c-data-list__item-row--PaddingRight:var(--pf-c-data-list__item-row--xl--PaddingRight);--pf-c-data-list__item-row--PaddingLeft:var(--pf-c-data-list__item-row--xl--PaddingLeft);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft)}}@media screen and (min-width:1450px){.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__item-content{display:flex;flex-grow:1;flex-wrap:wrap;padding-bottom:var(--pf-c-data-list__item-content--md--PaddingBottom)}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon){margin-right:var(--pf-c-data-list__cell--MarginRight)}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell+.pf-c-data-list__cell{flex:1;order:0}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-align-right{margin-left:auto}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-no-fill{flex:none}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-2{flex-grow:2}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-3{flex-grow:3}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-4{flex-grow:4}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-5{flex-grow:5}.pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__expandable-content{max-height:none;overflow-y:visible}}.pf-c-data-list{--pf-c-data-list--FontSize:1em;--pf-c-data-list--LineHeight:var(--pf-global--LineHeight--md);--pf-c-data-list--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-data-list--BorderTopWidth:var(--pf-global--spacer--sm);--pf-c-data-list--sm--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-data-list--sm--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-data-list__item--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-data-list__item--m-selected--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-data-list__item--m-expanded--before--BackgroundColor:var(--pf-global--active-color--100);--pf-c-data-list__item--m-selected--before--BackgroundColor:var(--pf-global--active-color--100);--pf-c-data-list__item--m-selected--BoxShadow:var(--pf-global--BoxShadow--sm-top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-data-list__item--m-selectable--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-data-list__item--m-selectable--hover--ZIndex:calc(var(--pf-c-data-list__item--m-selected--ZIndex) + 1);--pf-c-data-list__item--m-selectable--hover--BoxShadow:var(--pf-global--BoxShadow--sm-top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-data-list__item--m-selectable--focus--BoxShadow:var(--pf-global--BoxShadow--sm-top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-data-list__item--m-selectable--active--BoxShadow:var(--pf-global--BoxShadow--sm-top),var(--pf-global--BoxShadow--sm-bottom);--pf-c-data-list__item--m-expanded--m-selectable--before--BackgroundColor:var(--pf-global--active-color--300);--pf-c-data-list__item--BorderBottomColor:var(--pf-global--BorderColor--300);--pf-c-data-list__item--BorderBottomWidth:0.5rem;--pf-c-data-list__item--m-selectable--hover--item--BorderTopColor:var(--pf-c-data-list__item--BorderBottomColor);--pf-c-data-list__item--m-selectable--hover--item--BorderTopWidth:var(--pf-c-data-list__item--BorderBottomWidth);--pf-c-data-list__item--sm--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-data-list__item--sm--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-data-list__item--before--BackgroundColor:transparent;--pf-c-data-list__item--before--Width:var(--pf-global--BorderWidth--lg);--pf-c-data-list__item--before--Transition:var(--pf-global--Transition);--pf-c-data-list__item--before--Top:0;--pf-c-data-list__item--before--sm--Top:calc(var(--pf-c-data-list__item--BorderBottomWidth)*-1);--pf-c-data-list__item-row--PaddingRight:var(--pf-global--spacer--md);--pf-c-data-list__item-row--PaddingLeft:var(--pf-global--spacer--md);--pf-c-data-list__item-row--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-data-list__item-row--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-data-list__item-content--md--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-data-list__cell--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list__cell--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-data-list__cell--MarginRight:var(--pf-global--spacer--xl);--pf-c-data-list__cell--md--PaddingBottom:0;--pf-c-data-list__cell--m-icon--MarginRight:var(--pf-global--spacer--md);--pf-c-data-list__cell--cell--PaddingTop:0;--pf-c-data-list__cell--cell--md--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list__cell--m-icon--cell--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list--cell--MinWidth:initial;--pf-c-data-list--cell--Overflow:visible;--pf-c-data-list--cell--TextOverflow:clip;--pf-c-data-list--cell--WhiteSpace:normal;--pf-c-data-list--cell--WordBreak:normal;--pf-c-data-list--cell--m-truncate--MinWidth:5ch;--pf-c-data-list__toggle--MarginLeft:calc(var(--pf-global--spacer--sm)*-1);--pf-c-data-list__toggle--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-data-list__toggle--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-data-list__toggle-icon--Height:calc(var(--pf-c-data-list--FontSize)*var(--pf-c-data-list--LineHeight));--pf-c-data-list__toggle-icon--Transition:.2s ease-in 0s;--pf-c-data-list__toggle-icon--Rotate:0;--pf-c-data-list__item--m-expanded__toggle-icon--Rotate:90deg;--pf-c-data-list__item-draggable-button--PaddingLeft:var(--pf-global--spacer--md);--pf-c-data-list__item-draggable-button--PaddingRight:var(--pf-global--spacer--md);--pf-c-data-list__item-draggable-button--MarginTop:calc(var(--pf-global--spacer--lg)*-1);--pf-c-data-list__item-draggable-button--MarginBottom:calc(var(--pf-global--spacer--lg)*-1);--pf-c-data-list__item-draggable-button--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list__item-draggable-button--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-data-list__item-draggable-button--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-data-list__item-draggable-button-icon--Color:var(--pf-global--icon--Color--light);--pf-c-data-list__item-draggable-button--m-disabled__draggable-icon--Color:var(--pf-global--disabled-color--200);--pf-c-data-list__item-draggable-button--hover__draggable-icon--Color:var(--pf-global--icon--Color--dark);--pf-c-data-list__item-draggable-button--focus__draggable-icon--Color:var(--pf-global--icon--Color--dark);--pf-c-data-list__item--m-ghost-row--after--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-data-list__item--m-ghost-row--after--Opacity:.6;--pf-c-data-list__item-control--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list__item-control--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-data-list__item-control--MarginRight:var(--pf-global--spacer--md);--pf-c-data-list__item-control--md--MarginRight:var(--pf-global--spacer--xl);--pf-c-data-list__item-control--not-last-child--MarginRight:var(--pf-global--spacer--md);--pf-c-data-list__check--Height:calc(var(--pf-c-data-list--FontSize)*var(--pf-c-data-list--LineHeight));--pf-c-data-list__check--MarginTop:-0.0625rem;--pf-c-data-list__item-action--Display:flex;--pf-c-data-list__item-action--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list__item-action--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-data-list__item-action--MarginLeft:var(--pf-global--spacer--md);--pf-c-data-list__item-action--md--MarginLeft:var(--pf-global--spacer--xl);--pf-c-data-list__item-action--not-last-child--MarginRight:var(--pf-global--spacer--md);--pf-c-data-list__item-action__action--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-data-list__action--MarginTop:var(--pf-c-data-list__item-action__action--MarginTop);--pf-c-data-list__item-action__action--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-data-list__expandable-content--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-data-list__expandable-content--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-data-list__expandable-content--MarginRight:calc(var(--pf-c-data-list__expandable-content-body--PaddingRight)*-1);--pf-c-data-list__expandable-content--MarginLeft:calc(var(--pf-c-data-list__expandable-content-body--PaddingLeft)*-1);--pf-c-data-list__expandable-content--MaxHeight:37.5rem;--pf-c-data-list__expandable-content--before--Top:calc(var(--pf-c-data-list__item--BorderBottomWidth)*-1);--pf-c-data-list__expandable-content-body--PaddingTop:var(--pf-global--spacer--md);--pf-c-data-list__expandable-content-body--PaddingRight:var(--pf-global--spacer--md);--pf-c-data-list__expandable-content-body--PaddingBottom:var(--pf-global--spacer--md);--pf-c-data-list__expandable-content-body--PaddingLeft:var(--pf-global--spacer--md);--pf-c-data-list__expandable-content-body--md--PaddingTop:var(--pf-global--spacer--lg);--pf-c-data-list__expandable-content-body--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-data-list__expandable-content-body--md--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-data-list__expandable-content-body--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-data-list--m-compact--FontSize:var(--pf-global--FontSize--sm);--pf-c-data-list--m-compact--LineHeight:var(--pf-global--LineHeight--sm);--pf-c-data-list--m-compact__check--FontSize:var(--pf-global--FontSize--md);--pf-c-data-list--m-compact__cell--PaddingTop:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__cell--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__cell--md--PaddingBottom:0;--pf-c-data-list--m-compact__cell-cell--PaddingTop:0;--pf-c-data-list--m-compact__cell-cell--md--PaddingTop:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__cell--cell--MarginRight:var(--pf-global--spacer--md);--pf-c-data-list--m-compact__item-control--PaddingTop:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__item-control--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__item-control--MarginRight:var(--pf-global--spacer--md);--pf-c-data-list--m-compact__item-action--PaddingTop:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__item-action--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__item-action--MarginLeft:var(--pf-global--spacer--md);--pf-c-data-list--m-compact__item-action__action--MarginTop:calc(var(--pf-c-data-list--m-compact__item-action--PaddingTop)*-1);--pf-c-data-list--m-compact__item-action__action--MarginBottom:calc(var(--pf-c-data-list--m-compact__item-action--PaddingBottom)*-1);--pf-c-data-list--m-compact__action--MarginTop:var(--pf-c-data-list--m-compact__item-action__action--MarginTop);--pf-c-data-list--m-compact__item-content--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__item-draggable-button--MarginTop:calc(var(--pf-global--spacer--sm)*-1);--pf-c-data-list--m-compact__item-draggable-button--MarginBottom:calc(var(--pf-global--spacer--sm)*-1);--pf-c-data-list--m-compact__item-draggable-button--PaddingTop:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__item-draggable-button--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-data-list--m-compact__cell--m-icon--cell--PaddingTop:var(--pf-global--spacer--sm);border-top:var(--pf-c-data-list--BorderTopWidth) solid var(--pf-c-data-list--BorderTopColor);color:var(--pf-global--Color--100);font-size:var(--pf-c-data-list--FontSize);line-height:var(--pf-c-data-list--LineHeight);list-style-type:disc;overflow-wrap:break-word}@media screen and (min-width:576px){.pf-c-data-list{--pf-c-data-list--BorderTopColor:var(--pf-c-data-list--sm--BorderTopColor);--pf-c-data-list--BorderTopWidth:var(--pf-c-data-list--sm--BorderTopWidth);--pf-c-data-list__item--BorderBottomWidth:var(--pf-c-data-list__item--sm--BorderBottomWidth);--pf-c-data-list__item--BorderBottomColor:var(--pf-c-data-list__item--sm--BorderBottomColor)}}@media (min-width:576px){.pf-c-data-list{--pf-c-data-list__item--before--Top:var(--pf-c-data-list__item--before--sm--Top)}}.pf-c-data-list.pf-m-compact{--pf-c-data-list__check--FontSize:var(--pf-c-data-list--m-compact__check--FontSize);--pf-c-data-list__action--MarginTop:var(--pf-c-data-list--m-compact__action--MarginTop);--pf-c-data-list--FontSize:var(--pf-c-data-list--m-compact--FontSize);--pf-c-data-list__item-action--MarginLeft:var(--pf-c-data-list--m-compact__item-action--MarginLeft);--pf-c-data-list__item-action--PaddingTop:var(--pf-c-data-list--m-compact__item-action--PaddingTop);--pf-c-data-list__item-action--PaddingBottom:var(--pf-c-data-list--m-compact__item-action--PaddingBottom);--pf-c-data-list__item-action__action--MarginTop:var(--pf-c-data-list--m-compact__item-action__action--MarginTop);--pf-c-data-list__item-action__action--MarginBottom:var(--pf-c-data-list--m-compact__item-action__action--MarginBottom);--pf-c-data-list__item-control--MarginRight:var(--pf-c-data-list--m-compact__item-control--MarginRight);--pf-c-data-list__item-control--PaddingTop:var(--pf-c-data-list--m-compact__item-control--PaddingTop);--pf-c-data-list__item-control--PaddingBottom:var(--pf-c-data-list--m-compact__item-control--PaddingBottom);--pf-c-data-list__item-content--md--PaddingBottom:var(--pf-c-data-list--m-compact__item-content--PaddingBottom);--pf-c-data-list__item-draggable-button--MarginTop:var(--pf-c-data-list--m-compact__item-draggable-button--MarginTop);--pf-c-data-list__item-draggable-button--MarginBottom:var(--pf-c-data-list--m-compact__item-draggable-button--MarginBottom);--pf-c-data-list__item-draggable-button--PaddingTop:var(--pf-c-data-list--m-compact__item-draggable-button--PaddingTop);--pf-c-data-list__item-draggable-button--PaddingBottom:var(--pf-c-data-list--m-compact__item-draggable-button--PaddingBottom);--pf-c-data-list__cell--m-icon--cell--PaddingTop:var(--pf-c-data-list--m-compact__cell--m-icon--cell--PaddingTop);font-size:var(--pf-c-data-list--m-compact--FontSize)}.pf-c-data-list.pf-m-compact .pf-c-data-list__cell{--pf-c-data-list__cell--PaddingTop:var(--pf-c-data-list--m-compact__cell--PaddingTop);--pf-c-data-list__cell--PaddingBottom:var(--pf-c-data-list--m-compact__cell--PaddingBottom);--pf-c-data-list__cell--MarginRight:var(--pf-c-data-list--m-compact__cell--cell--MarginRight);--pf-c-data-list__cell--cell--PaddingTop:var(--pf-c-data-list--m-compact__cell-cell--PaddingTop)}.pf-c-data-list.pf-m-compact .pf-c-data-list__check{font-size:var(--pf-c-data-list--m-compact__check--FontSize)}.pf-c-data-list.pf-m-drag-over{overflow-anchor:none}.pf-c-data-list.pf-m-truncate,.pf-c-data-list__cell.pf-m-truncate,.pf-c-data-list__item-row.pf-m-truncate,.pf-c-data-list__text.pf-m-truncate{--pf-c-data-list--cell--MinWidth:var(--pf-c-data-list--cell--m-truncate--MinWidth);--pf-c-data-list--cell--Overflow:hidden;--pf-c-data-list--cell--TextOverflow:ellipsis;--pf-c-data-list--cell--WhiteSpace:nowrap}.pf-c-data-list.pf-m-break-word,.pf-c-data-list__cell.pf-m-break-word,.pf-c-data-list__item-row.pf-m-break-word,.pf-c-data-list__text.pf-m-break-word{--pf-c-data-list--cell--WordBreak:break-word}.pf-c-data-list.pf-m-nowrap,.pf-c-data-list__cell.pf-m-nowrap,.pf-c-data-list__item-row.pf-m-nowrap,.pf-c-data-list__text.pf-m-nowrap{--pf-c-data-list--cell--WhiteSpace:nowrap}.pf-c-data-list__item{background-color:var(--pf-c-data-list__item--BackgroundColor);border-bottom:var(--pf-c-data-list__item--BorderBottomWidth) solid var(--pf-c-data-list__item--BorderBottomColor);display:flex;flex-direction:column;position:relative}.pf-c-data-list__item:before{background-color:var(--pf-c-data-list__item--before--BackgroundColor);bottom:0;content:"";left:0;position:absolute;top:var(--pf-c-data-list__item--before--Top);transition:var(--pf-c-data-list__item--before--Transition);width:var(--pf-c-data-list__item--before--Width)}.pf-c-data-list__item.pf-m-selectable{cursor:pointer;outline-offset:var(--pf-c-data-list__item--m-selectable--OutlineOffset)}.pf-c-data-list__item.pf-m-selectable:focus,.pf-c-data-list__item.pf-m-selectable:hover{position:relative;z-index:var(--pf-c-data-list__item--m-selectable--hover--ZIndex)}.pf-c-data-list__item.pf-m-selectable:focus:not(.pf-m-selected):not(:last-child),.pf-c-data-list__item.pf-m-selectable:hover:not(.pf-m-selected):not(:last-child){--pf-c-data-list__item--BorderBottomWidth:0}.pf-c-data-list__item.pf-m-selectable:focus:not(.pf-m-selected):not(:last-child)+.pf-c-data-list__item,.pf-c-data-list__item.pf-m-selectable:hover:not(.pf-m-selected):not(:last-child)+.pf-c-data-list__item{border-top:var(--pf-c-data-list__item--m-selectable--hover--item--BorderTopWidth) solid var(--pf-c-data-list__item--m-selectable--hover--item--BorderTopColor)}.pf-c-data-list__item.pf-m-selectable:hover{box-shadow:var(--pf-c-data-list__item--m-selectable--hover--BoxShadow)}.pf-c-data-list__item.pf-m-selectable:focus{box-shadow:var(--pf-c-data-list__item--m-selectable--focus--BoxShadow)}.pf-c-data-list__item.pf-m-selectable:active{box-shadow:var(--pf-c-data-list__item--m-selectable--active--BoxShadow)}.pf-c-data-list__item.pf-m-selected{--pf-c-data-list__item--before--BackgroundColor:var(--pf-c-data-list__item--m-selected--before--BackgroundColor);box-shadow:var(--pf-c-data-list__item--m-selected--BoxShadow);position:relative;z-index:var(--pf-c-data-list__item--m-selected--ZIndex)}.pf-c-data-list__item.pf-m-ghost-row:after{background-color:var(--pf-c-data-list__item--m-ghost-row--after--BackgroundColor);bottom:0;content:"";left:0;opacity:var(--pf-c-data-list__item--m-ghost-row--after--Opacity);position:absolute;right:0;top:0}.pf-c-data-list__item.pf-m-expanded{--pf-c-data-list__toggle-icon--Rotate:var(--pf-c-data-list__item--m-expanded__toggle-icon--Rotate);--pf-c-data-list__item--before--BackgroundColor:var(--pf-c-data-list__item--m-expanded--before--BackgroundColor)}.pf-c-data-list__item.pf-m-expanded.pf-m-selectable:not(.pf-m-selected){--pf-c-data-list__item--before--BackgroundColor:var(--pf-c-data-list__item--m-expanded--m-selectable--before--BackgroundColor)}.pf-c-data-list__item-row{display:flex;flex-wrap:nowrap;padding-left:var(--pf-c-data-list__item-row--PaddingLeft);padding-right:var(--pf-c-data-list__item-row--PaddingRight)}.pf-c-data-list__item-control{display:flex;flex-wrap:nowrap;margin-right:var(--pf-c-data-list__item-control--MarginRight);padding-bottom:var(--pf-c-data-list__item-control--PaddingBottom);padding-top:var(--pf-c-data-list__item-control--PaddingTop)}.pf-c-data-list__item-control>:not(:last-child){margin-right:var(--pf-c-data-list__item-control--not-last-child--MarginRight)}.pf-c-data-list__check{align-items:center;align-self:flex-start;display:flex;height:var(--pf-c-data-list__check--Height);margin-top:var(--pf-c-data-list__check--MarginTop)}.pf-c-data-list__check>input{cursor:pointer}.pf-c-data-list__item-draggable-button{border:0;display:flex;flex-direction:column;margin:var(--pf-c-data-list__item-draggable-button--MarginTop) 0 var(--pf-c-data-list__item-draggable-button--MarginBottom) var(--pf-c-data-list__item-draggable-button--MarginLeft);padding:var(--pf-c-data-list__item-draggable-button--PaddingTop) var(--pf-c-data-list__item-draggable-button--PaddingRight) var(--pf-c-data-list__item-draggable-button--PaddingBottom) var(--pf-c-data-list__item-draggable-button--PaddingLeft)}.pf-c-data-list__item-draggable-button:hover{--pf-c-data-list__item-draggable-button-icon--Color:var(--pf-c-data-list__item-draggable-button--hover__draggable-icon--Color);cursor:grab}.pf-c-data-list__item-draggable-button:focus{--pf-c-data-list__item-draggable-button-icon--Color:var(--pf-c-data-list__item-draggable-button--focus__draggable-icon--Color)}.pf-c-data-list__item-draggable-button:active{cursor:grabbing}.pf-c-data-list__item-draggable-button.pf-m-disabled{--pf-c-data-list__item-draggable-button-icon--Color:var(--pf-c-data-list__item-draggable-button--m-disabled__draggable-icon--Color);pointer-events:none}.pf-c-data-list__item-draggable-button .pf-c-data-list__item-draggable-icon{color:var(--pf-c-data-list__item-draggable-button-icon--Color)}.pf-c-data-list__item-action{--pf-hidden-visible--visible--Display:var(--pf-c-data-list__item-action--Display);align-content:flex-start;align-items:flex-start;margin-left:var(--pf-c-data-list__item-action--MarginLeft);padding-bottom:var(--pf-c-data-list__item-action--PaddingBottom);padding-top:var(--pf-c-data-list__item-action--PaddingTop)}.pf-c-data-list__item-action>:not(:last-child){margin-right:var(--pf-c-data-list__item-action--not-last-child--MarginRight)}.pf-c-data-list__item-action .pf-c-data-list__action{margin-bottom:var(--pf-c-data-list__item-action__action--MarginBottom);margin-top:var(--pf-c-data-list__action--MarginTop)}.pf-c-data-list__toggle{margin:var(--pf-c-data-list__toggle--MarginTop) 0 var(--pf-c-data-list__toggle--MarginBottom) var(--pf-c-data-list__toggle--MarginLeft)}.pf-c-data-list__toggle-icon{height:var(--pf-c-data-list__toggle-icon--Height);pointer-events:none;transform:rotate(var(--pf-c-data-list__toggle-icon--Rotate));transition:var(--pf-c-data-list__toggle-icon--Transition)}.pf-c-data-list__item-content{display:grid;grid-template-columns:auto 1fr;width:100%}.pf-c-data-list__cell{flex:1;grid-column:1/-1;padding-bottom:var(--pf-c-data-list__cell--PaddingBottom);padding-top:var(--pf-c-data-list__cell--PaddingTop)}.pf-c-data-list__cell+.pf-c-data-list__cell{flex:1 0 100%;order:1;padding-top:var(--pf-c-data-list__cell--cell--PaddingTop)}.pf-c-data-list__cell.pf-m-icon{flex-grow:0;grid-column:1/2;margin-right:var(--pf-c-data-list__cell--m-icon--MarginRight)}.pf-c-data-list__cell.pf-m-icon+.pf-c-data-list__cell{grid-column:2/3;padding-top:var(--pf-c-data-list__cell--m-icon--cell--PaddingTop)}.pf-c-data-list__cell.pf-m-align-right{margin-left:0}.pf-c-data-list__text{display:inline-block}.pf-c-data-list__cell,.pf-c-data-list__text{max-width:100%;min-width:var(--pf-c-data-list--cell--MinWidth);overflow:var(--pf-c-data-list--cell--Overflow);text-overflow:var(--pf-c-data-list--cell--TextOverflow);white-space:var(--pf-c-data-list--cell--WhiteSpace);word-break:var(--pf-c-data-list--cell--WordBreak)}.pf-c-data-list__expandable-content{border-top:var(--pf-c-data-list__expandable-content--BorderTopWidth) solid var(--pf-c-data-list__expandable-content--BorderTopColor);max-height:var(--pf-c-data-list__expandable-content--MaxHeight);overflow-y:auto}.pf-c-data-list__expandable-content .pf-c-data-list__expandable-content-body{padding:var(--pf-c-data-list__expandable-content-body--PaddingTop) var(--pf-c-data-list__expandable-content-body--PaddingRight) var(--pf-c-data-list__expandable-content-body--PaddingBottom) var(--pf-c-data-list__expandable-content-body--PaddingLeft)}.pf-c-data-list__expandable-content .pf-c-data-list__expandable-content-body.pf-m-no-padding{padding:0}:where(.pf-theme-dark) .pf-c-data-list{--pf-c-data-list--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-data-list--sm--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-data-list__item--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-data-list__item--sm--BorderBottomColor:var(--pf-global--BorderColor--100)}.pf-c-calendar-month{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-calendar-month--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-calendar-month--PaddingTop:var(--pf-global--spacer--lg);--pf-c-calendar-month--PaddingRight:var(--pf-global--spacer--lg);--pf-c-calendar-month--PaddingBottom:var(--pf-global--spacer--md);--pf-c-calendar-month--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-calendar-month--FontSize:var(--pf-global--FontSize--sm);--pf-c-calendar-month__header--MarginBottom:var(--pf-global--spacer--md);--pf-c-calendar-month__header-year--Width:8.5ch;--pf-c-calendar-month__header-nav-control--MarginRight:0;--pf-c-calendar-month__header-nav-control--MarginLeft:0;--pf-c-calendar-month__header-nav-control--m-prev-month--MarginRight:0;--pf-c-calendar-month__header-nav-control--m-prev-month--MarginLeft:0;--pf-c-calendar-month__header-nav-control--m-next-month--MarginRight:0;--pf-c-calendar-month__header-nav-control--m-next-month--MarginLeft:0;--pf-c-calendar-month__days--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-calendar-month__days--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-calendar-month__day--PaddingBottom:var(--pf-global--spacer--md);--pf-c-calendar-month__day--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-calendar-month__dates-cell--PaddingTop:0.125rem;--pf-c-calendar-month__dates-cell--PaddingRight:0.125rem;--pf-c-calendar-month__dates-cell--PaddingBottom:0.125rem;--pf-c-calendar-month__dates-cell--PaddingLeft:0.125rem;--pf-c-calendar-month__dates-row--first-child__dates-cell--PaddingTop:var(--pf-global--spacer--sm);--pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor:var(--pf-global--active-color--100);--pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor:var(--pf-global--active-color--100);--pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-calendar-month__dates-cell--m-selected__date--focus--after--BorderColor:var(--pf-global--primary-color--200);--pf-c-calendar-month__dates-cell--m-selected__date--focus--BoxShadow:0 0 0.3125rem var(--pf-global--primary-color--100);--pf-c-calendar-month__dates-cell--m-selected__date--Color:var(--pf-global--Color--light-100);--pf-c-calendar-month__dates-cell--before--BackgroundColor:transparent;--pf-c-calendar-month__dates-cell--before--Top:0;--pf-c-calendar-month__dates-cell--before--Right:0;--pf-c-calendar-month__dates-cell--before--Bottom:var(--pf-c-calendar-month__dates-cell--PaddingBottom);--pf-c-calendar-month__dates-cell--before--Left:0;--pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor:var(--pf-global--palette--blue-50);--pf-c-calendar-month__dates-cell--m-in-range--m-start-range--before--Left:50%;--pf-c-calendar-month__dates-cell--m-in-range--m-end-range--before--Right:50%;--pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor:var(--pf-global--palette--blue-100);--pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor:var(--pf-global--palette--blue-100);--pf-c-calendar-month__dates-cell--m-adjacent-month__date--Color:var(--pf-global--disabled-color--100);--pf-c-calendar-month__date--Width:4ch;--pf-c-calendar-month__date--Height:4ch;--pf-c-calendar-month__date--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-calendar-month__date--Color:var(--pf-global--Color--100);--pf-c-calendar-month__date--BackgroundColor:transparent;--pf-c-calendar-month__date--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-calendar-month__date--after--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-calendar-month__date--after--BorderColor:transparent;--pf-c-calendar-month__date--hover--BackgroundColor:var(--pf-global--palette--blue-50);--pf-c-calendar-month__date--focus--BackgroundColor:var(--pf-global--palette--blue-50);--pf-c-calendar-month__date--focus--after--BorderColor:var(--pf-global--active-color--100);--pf-c-calendar-month__date--focus--BoxShadow:none;background-color:var(--pf-c-calendar-month--BackgroundColor);color:var(--pf-global--Color--100);display:inline-flex;flex-direction:column;font-size:var(--pf-c-calendar-month--FontSize);padding:var(--pf-c-calendar-month--PaddingTop) var(--pf-c-calendar-month--PaddingRight) var(--pf-c-calendar-month--PaddingBottom) var(--pf-c-calendar-month--PaddingLeft)}.pf-c-calendar-month__header{display:flex;margin-bottom:var(--pf-c-calendar-month__header--MarginBottom)}.pf-c-calendar-month__header-nav-control{margin-left:var(--pf-c-calendar-month__header-nav-control--MarginLeft);margin-right:var(--pf-c-calendar-month__header-nav-control--MarginRight)}.pf-c-calendar-month__header-nav-control.pf-m-prev-month{--pf-c-calendar-month__header-nav-control--MarginRight:var(--pf-c-calendar-month__header-nav-control--m-prev-month--MarginRight);--pf-c-calendar-month__header-nav-control--MarginLeft:var(--pf-c-calendar-month__header-nav-control--m-prev-month--MarginLeft)}.pf-c-calendar-month__header-nav-control.pf-m-next-month{--pf-c-calendar-month__header-nav-control--MarginRight:var(--pf-c-calendar-month__header-nav-control--m-next-month--MarginRight);--pf-c-calendar-month__header-nav-control--MarginLeft:var(--pf-c-calendar-month__header-nav-control--m-next-month--MarginLeft)}.pf-c-calendar-month__header-month{flex-grow:1}.pf-c-calendar-month__header-year{width:var(--pf-c-calendar-month__header-year--Width)}.pf-c-calendar-month__calendar{table-layout:fixed}.pf-c-calendar-month__days{border-bottom:var(--pf-c-calendar-month__days--BorderBottomWidth) solid var(--pf-c-calendar-month__days--BorderBottomColor)}.pf-c-calendar-month__day{font-weight:var(--pf-c-calendar-month__day--FontWeight);padding-bottom:var(--pf-c-calendar-month__day--PaddingBottom);text-align:center}.pf-c-calendar-month__dates-row:first-child{--pf-c-calendar-month__dates-cell--PaddingTop:var(--pf-c-calendar-month__dates-row--first-child__dates-cell--PaddingTop)}.pf-c-calendar-month__dates-cell{--pf-c-calendar-month__dates-cell--before--Top:var(--pf-c-calendar-month__dates-cell--PaddingTop);padding:var(--pf-c-calendar-month__dates-cell--PaddingTop) var(--pf-c-calendar-month__dates-cell--PaddingRight) var(--pf-c-calendar-month__dates-cell--PaddingBottom) var(--pf-c-calendar-month__dates-cell--PaddingLeft);position:relative;text-align:center}.pf-c-calendar-month__dates-cell:before{background-color:var(--pf-c-calendar-month__dates-cell--before--BackgroundColor);bottom:var(--pf-c-calendar-month__dates-cell--before--Bottom);content:"";left:var(--pf-c-calendar-month__dates-cell--before--Left);position:absolute;right:var(--pf-c-calendar-month__dates-cell--before--Right);top:var(--pf-c-calendar-month__dates-cell--before--Top)}.pf-c-calendar-month__dates-cell.pf-m-current{--pf-c-calendar-month__date--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor)}.pf-c-calendar-month__dates-cell.pf-m-in-range{--pf-c-calendar-month__dates-cell--before--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor);--pf-c-calendar-month__date--hover--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor);--pf-c-calendar-month__date--focus--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor)}.pf-c-calendar-month__dates-cell.pf-m-start-range{--pf-c-calendar-month__dates-cell--before--Left:var(--pf-c-calendar-month__dates-cell--m-in-range--m-start-range--before--Left)}.pf-c-calendar-month__dates-cell.pf-m-end-range{--pf-c-calendar-month__dates-cell--before--Right:var(--pf-c-calendar-month__dates-cell--m-in-range--m-end-range--before--Right)}.pf-c-calendar-month__dates-cell.pf-m-adjacent-month{--pf-c-calendar-month__date--Color:var(--pf-c-calendar-month__dates-cell--m-adjacent-month__date--Color)}.pf-c-calendar-month__dates-cell.pf-m-selected{--pf-c-calendar-month__date--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor);--pf-c-calendar-month__date--hover--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor);--pf-c-calendar-month__date--focus--BackgroundColor:var(--pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor);--pf-c-calendar-month__date--focus--after--BorderColor:var(--pf-c-calendar-month__dates-cell--m-selected__date--focus--after--BorderColor);--pf-c-calendar-month__date--focus--BoxShadow:var(--pf-c-calendar-month__dates-cell--m-selected__date--focus--BoxShadow);--pf-c-calendar-month__date--Color:var(--pf-c-calendar-month__dates-cell--m-selected__date--Color)}.pf-c-calendar-month__dates-cell.pf-m-disabled{--pf-c-calendar-month__dates-cell--before--BackgroundColor:transparent;--pf-c-calendar-month__date--BackgroundColor:transparent}.pf-c-calendar-month__date{align-items:center;background-color:var(--pf-c-calendar-month__date--BackgroundColor);border:0;color:var(--pf-c-calendar-month__date--Color);display:inline-flex;height:var(--pf-c-calendar-month__date--Height);justify-content:center;line-height:1;position:relative;width:var(--pf-c-calendar-month__date--Width)}.pf-c-calendar-month__date:after{border:var(--pf-c-calendar-month__date--after--BorderWidth) solid var(--pf-c-calendar-month__date--after--BorderColor);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-calendar-month__date,.pf-c-calendar-month__date:after{border-radius:var(--pf-c-calendar-month__date--BorderRadius)}.pf-c-calendar-month__date.pf-m-hover,.pf-c-calendar-month__date:hover{--pf-c-calendar-month__date--BackgroundColor:var(--pf-c-calendar-month__date--hover--BackgroundColor)}.pf-c-calendar-month__date.pf-m-focus,.pf-c-calendar-month__date:focus{--pf-c-calendar-month__date--BackgroundColor:var(--pf-c-calendar-month__date--focus--BackgroundColor);--pf-c-calendar-month__date--after--BorderColor:var(--pf-c-calendar-month__date--focus--after--BorderColor);box-shadow:var(--pf-c-calendar-month__date--focus--BoxShadow);outline:0}.pf-c-calendar-month__date:disabled{--pf-c-calendar-month__date--Color:var(--pf-c-calendar-month__date--disabled--Color);--pf-c-calendar-month__date--hover--focus--BorderColor:transparent;pointer-events:none}:where(.pf-theme-dark) .pf-c-calendar-month{--pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor:var(--pf-global--palette--black-900);--pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor:var(--pf-global--palette--blue-400);--pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-calendar-month__date--hover--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-calendar-month__date--focus--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-calendar-month__date--focus--after--BorderColor:transparent}:where(.pf-theme-dark) .pf-c-calendar-month__date.pf-m-hover,:where(.pf-theme-dark) .pf-c-calendar-month__date:hover{--pf-c-calendar-month__date--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-calendar-month__date--after--BorderWidth:var(--pf-global--BorderWidth--sm)}:where(.pf-theme-dark) .pf-c-calendar-month__date.pf-m-focus,:where(.pf-theme-dark) .pf-c-calendar-month__date:focus{--pf-c-calendar-month__date--after--BorderColor:var(--pf-global--active-color--100);--pf-c-calendar-month__date--after--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-calendar-month__date--BackgroundColor:var(--pf-global--primary-color--300)}.pf-c-overflow-menu{--pf-c-overflow-menu--spacer--base:var(--pf-global--spacer--md);--pf-c-overflow-menu--spacer:var(--pf-global--spacer--sm);--pf-c-overflow-menu__group--spacer:var(--pf-c-overflow-menu--spacer--base);--pf-c-overflow-menu__item--spacer:var(--pf-c-overflow-menu--spacer--base);--pf-c-overflow-menu--c-divider--m-vertical--spacer:var(--pf-c-overflow-menu--spacer--base);--pf-c-overflow-menu__group--m-button-group--spacer:var(--pf-c-overflow-menu--spacer--base);--pf-c-overflow-menu__group--m-button-group--space-items:var(--pf-global--spacer--sm);--pf-c-overflow-menu__group--m-icon-button-group--spacer:var(--pf-c-overflow-menu--spacer--base);--pf-c-overflow-menu__group--m-icon-button-group--space-items:0;align-items:center;display:inline-flex}.pf-c-overflow-menu__content,.pf-c-overflow-menu__group{align-items:center;display:flex}.pf-c-overflow-menu__group{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu__group--spacer)}.pf-c-overflow-menu__group.pf-m-button-group{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu__group--m-button-group--spacer)}.pf-c-overflow-menu__group.pf-m-button-group>*{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu__group--m-button-group--space-items)}.pf-c-overflow-menu__group.pf-m-icon-button-group{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu__group--m-icon-button-group--spacer)}.pf-c-overflow-menu__group.pf-m-icon-button-group>*{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu__group--m-icon-button-group--space-items)}.pf-c-overflow-menu__item{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu__item--spacer)}.pf-c-overflow-menu__content,.pf-c-overflow-menu__control,.pf-c-overflow-menu__group,.pf-c-overflow-menu__item{margin-right:var(--pf-c-overflow-menu--spacer)}.pf-c-overflow-menu__content:last-child,.pf-c-overflow-menu__control:last-child,.pf-c-overflow-menu__group:last-child,.pf-c-overflow-menu__item:last-child{--pf-c-overflow-menu--spacer:0}.pf-c-overflow-menu>.pf-c-divider,.pf-c-overflow-menu__group>.pf-c-divider{--pf-c-overflow-menu--spacer:var(--pf-c-overflow-menu--c-divider--m-vertical--spacer)}.pf-c-overflow-menu>.pf-c-divider.pf-m-vertical,.pf-c-overflow-menu__group>.pf-c-divider.pf-m-vertical{margin-right:var(--pf-c-overflow-menu--spacer)}.pf-c-overflow-menu>.pf-c-divider.pf-m-vertical:last-child,.pf-c-overflow-menu__group>.pf-c-divider.pf-m-vertical:last-child{--pf-c-overflow-menu--spacer:0}.pf-c-wizard__header{--pf-global--Color--100:var(--pf-global--Color--light-100);--pf-global--Color--200:var(--pf-global--Color--light-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--light-100);--pf-global--primary-color--100:var(--pf-global--primary-color--light-100);--pf-global--link--Color:var(--pf-global--link--Color--light);--pf-global--link--Color--hover:var(--pf-global--link--Color--light);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--dark-100)}.pf-c-wizard__header .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-200)}.pf-c-wizard__header .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--active--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-secondary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--BorderColor:var(--pf-global--Color--light-100)}.pf-c-wizard{--pf-c-wizard--Height:100%;--pf-c-modal-box--c-wizard--FlexBasis:47.625rem;--pf-c-wizard__header--BackgroundColor:var(--pf-global--BackgroundColor--dark-100);--pf-c-wizard__header--ZIndex:var(--pf-global--ZIndex--md);--pf-c-wizard__header--PaddingTop:var(--pf-global--spacer--lg);--pf-c-wizard__header--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__header--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-wizard__header--PaddingLeft:var(--pf-global--spacer--md);--pf-c-wizard__header--lg--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__header--lg--PaddingLeft:var(--pf-global--spacer--md);--pf-c-wizard__header--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-wizard__header--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-wizard__close--Top:calc(var(--pf-global--spacer--lg) - var(--pf-global--spacer--form-element));--pf-c-wizard__close--Right:0;--pf-c-wizard__close--xl--Right:var(--pf-global--spacer--lg);--pf-c-wizard__close--FontSize:var(--pf-global--FontSize--xl);--pf-c-wizard__title--PaddingRight:var(--pf-global--spacer--2xl);--pf-c-wizard__description--PaddingTop:var(--pf-global--spacer--sm);--pf-c-wizard__description--Color:var(--pf-global--Color--light-200);--pf-c-wizard__nav-link--Color:var(--pf-global--Color--100);--pf-c-wizard__nav-link--TextDecoration:var(--pf-global--link--TextDecoration);--pf-c-wizard__nav-link--hover--Color:var(--pf-global--link--Color);--pf-c-wizard__nav-link--focus--Color:var(--pf-global--link--Color);--pf-c-wizard__nav-link--m-current--Color:var(--pf-global--link--Color);--pf-c-wizard__nav-link--m-current--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-wizard__nav-link--m-disabled--Color:var(--pf-global--Color--dark-200);--pf-c-wizard__nav-list__nav-list__nav-link--m-current--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-wizard__nav-link-toggle--PaddingRight:var(--pf-global--spacer--sm);--pf-c-wizard__nav-link-toggle--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-wizard__nav-link-toggle--Color:var(--pf-global--Color--200);--pf-c-wizard__nav-link--hover__nav-link-toggle-icon--Color:var(--pf-global--Color--100);--pf-c-wizard__nav-link--focus__nav-link-toggle-icon--Color:var(--pf-global--Color--100);--pf-c-wizard__nav-link-toggle-icon--Transition:var(--pf-global--Transition);--pf-c-wizard__nav-link-toggle-icon--Rotate:0;--pf-c-wizard__nav-item--m-expanded__link-toggle-icon--Rotate:90deg;--pf-c-wizard__nav-link--before--Width:1.5rem;--pf-c-wizard__nav-link--before--Height:1.5rem;--pf-c-wizard__nav-link--before--Top:0;--pf-c-wizard__nav-link--before--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-wizard__nav-link--before--BorderRadius:var(--pf-global--BorderRadius--lg);--pf-c-wizard__nav-link--before--Color:var(--pf-global--Color--100);--pf-c-wizard__nav-link--before--FontSize:var(--pf-global--FontSize--sm);--pf-c-wizard__nav-link--before--TranslateX:calc(-100% - var(--pf-global--spacer--sm));--pf-c-wizard__nav-link--m-current--before--BackgroundColor:var(--pf-global--active-color--100);--pf-c-wizard__nav-link--m-current--before--Color:var(--pf-global--Color--light-100);--pf-c-wizard__nav-link--m-disabled--before--BackgroundColor:transparent;--pf-c-wizard__nav-link--m-disabled--before--Color:var(--pf-global--Color--dark-200);--pf-c-wizard__toggle--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-wizard__toggle--ZIndex:var(--pf-global--ZIndex--md);--pf-c-wizard__toggle--BoxShadow:var(--pf-global--BoxShadow--md-bottom);--pf-c-wizard__toggle--PaddingTop:var(--pf-global--spacer--lg);--pf-c-wizard__toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__toggle--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-wizard__toggle--PaddingLeft:calc(var(--pf-global--spacer--md) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));--pf-c-wizard__toggle--m-expanded--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-wizard__toggle--m-expanded--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-wizard--m-in-page__toggle--xl--PaddingLeft:calc(var(--pf-global--spacer--xl) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));--pf-c-wizard__toggle-num--before--Top:0;--pf-c-wizard__toggle-list-item--not-last-child--MarginRight:var(--pf-global--spacer--sm);--pf-c-wizard__toggle-list-item--MarginBottom:var(--pf-global--spacer--xs);--pf-c-wizard__toggle-list--MarginRight:var(--pf-global--spacer--sm);--pf-c-wizard__toggle-list--MarginBottom:calc(var(--pf-c-wizard__toggle-list-item--MarginBottom)*-1);--pf-c-wizard__toggle-separator--MarginLeft:var(--pf-global--spacer--sm);--pf-c-wizard__toggle-separator--Color:var(--pf-global--BorderColor--200);--pf-c-wizard__toggle-icon--LineHeight:var(--pf-global--LineHeight--md);--pf-c-wizard__toggle--m-expanded__toggle-icon--Rotate:180deg;--pf-c-wizard__nav--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-wizard__nav--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-wizard__nav--BoxShadow:var(--pf-global--BoxShadow--md-bottom);--pf-c-wizard__nav--Width:100%;--pf-c-wizard__nav--lg--Width:15.625rem;--pf-c-wizard__nav--lg--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-wizard__nav--lg--BorderRightColor:var(--pf-global--BorderColor--100);--pf-c-wizard__nav-list--PaddingTop:var(--pf-global--spacer--lg);--pf-c-wizard__nav-list--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__nav-list--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-wizard__nav-list--PaddingLeft:calc(var(--pf-global--spacer--md) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));--pf-c-wizard__nav-list--lg--PaddingTop:var(--pf-global--spacer--md);--pf-c-wizard__nav-list--lg--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__nav-list--lg--PaddingBottom:var(--pf-global--spacer--md);--pf-c-wizard__nav-list--xl--PaddingTop:var(--pf-global--spacer--lg);--pf-c-wizard__nav-list--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-wizard__nav-list--xl--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-wizard__nav-list--xl--PaddingLeft:calc(var(--pf-global--spacer--lg) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));--pf-c-wizard__nav-list--nested--MarginLeft:var(--pf-global--spacer--md);--pf-c-wizard__nav-list--nested--MarginTop:var(--pf-global--spacer--md);--pf-c-wizard__nav-item--MarginTop:var(--pf-global--spacer--md);--pf-c-wizard__outer-wrap--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-wizard__outer-wrap--lg--PaddingLeft:var(--pf-c-wizard__nav--Width);--pf-c-wizard__outer-wrap--MinHeight:15.625rem;--pf-c-wizard__main--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-wizard__main-body--PaddingTop:var(--pf-global--spacer--md);--pf-c-wizard__main-body--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__main-body--PaddingBottom:var(--pf-global--spacer--md);--pf-c-wizard__main-body--PaddingLeft:var(--pf-global--spacer--md);--pf-c-wizard__main-body--xl--PaddingTop:var(--pf-global--spacer--lg);--pf-c-wizard__main-body--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-wizard__main-body--xl--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-wizard__main-body--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-wizard__footer--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-wizard__footer--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-wizard__footer--PaddingTop:var(--pf-global--spacer--md);--pf-c-wizard__footer--PaddingRight:var(--pf-global--spacer--md);--pf-c-wizard__footer--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-wizard__footer--PaddingLeft:var(--pf-global--spacer--md);--pf-c-wizard__footer--xl--PaddingTop:var(--pf-global--spacer--lg);--pf-c-wizard__footer--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-wizard__footer--xl--PaddingBottom:var(--pf-global--spacer--md);--pf-c-wizard__footer--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-wizard__footer--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-wizard__footer--child--MarginRight:var(--pf-global--spacer--md);--pf-c-wizard__footer--child--MarginBottom:var(--pf-global--spacer--sm);--pf-c-wizard__footer-cancel--MarginLeft:calc(var(--pf-global--spacer--2xl) - var(--pf-c-wizard__footer--child--MarginRight));display:flex;flex-direction:column;height:var(--pf-c-wizard--Height);position:relative}@media screen and (min-width:992px){.pf-c-wizard{--pf-c-wizard__header--PaddingRight:var(--pf-c-wizard__header--lg--PaddingRight);--pf-c-wizard__header--PaddingLeft:var(--pf-c-wizard__header--lg--PaddingLeft)}}@media screen and (min-width:1200px){.pf-c-wizard{--pf-c-wizard__header--PaddingRight:var(--pf-c-wizard__header--xl--PaddingRight);--pf-c-wizard__header--PaddingLeft:var(--pf-c-wizard__header--xl--PaddingLeft);--pf-c-wizard__close--Right:var(--pf-c-wizard__close--xl--Right)}}@media screen and (min-width:992px){.pf-c-wizard{--pf-c-wizard__nav--Width:var(--pf-c-wizard__nav--lg--Width);--pf-c-wizard__nav--BoxShadow:none;--pf-c-wizard__nav-list--PaddingTop:var(--pf-c-wizard__nav-list--lg--PaddingTop);--pf-c-wizard__nav-list--PaddingRight:var(--pf-c-wizard__nav-list--lg--PaddingRight);--pf-c-wizard__nav-list--PaddingBottom:var(--pf-c-wizard__nav-list--lg--PaddingBottom)}}@media screen and (min-width:1200px){.pf-c-wizard{--pf-c-wizard__nav-list--PaddingTop:var(--pf-c-wizard__nav-list--xl--PaddingTop);--pf-c-wizard__nav-list--PaddingRight:var(--pf-c-wizard__nav-list--xl--PaddingRight);--pf-c-wizard__nav-list--PaddingBottom:var(--pf-c-wizard__nav-list--xl--PaddingBottom);--pf-c-wizard__nav-list--PaddingLeft:var(--pf-c-wizard__nav-list--xl--PaddingLeft);--pf-c-wizard__main-body--PaddingTop:var(--pf-c-wizard__main-body--xl--PaddingTop);--pf-c-wizard__main-body--PaddingRight:var(--pf-c-wizard__main-body--xl--PaddingRight);--pf-c-wizard__main-body--PaddingBottom:var(--pf-c-wizard__main-body--xl--PaddingBottom);--pf-c-wizard__main-body--PaddingLeft:var(--pf-c-wizard__main-body--xl--PaddingLeft);--pf-c-wizard__footer--PaddingTop:var(--pf-c-wizard__footer--xl--PaddingTop);--pf-c-wizard__footer--PaddingRight:var(--pf-c-wizard__footer--xl--PaddingRight);--pf-c-wizard__footer--PaddingBottom:var(--pf-c-wizard__footer--xl--PaddingBottom);--pf-c-wizard__footer--PaddingLeft:var(--pf-c-wizard__footer--xl--PaddingLeft)}}.pf-c-modal-box .pf-c-wizard{flex:1 1 var(--pf-c-modal-box--c-wizard--FlexBasis);min-height:0}.pf-c-wizard>:not(.pf-c-wizard__outer-wrap):not(.pf-c-drawer){flex-shrink:0}.pf-c-wizard.pf-m-finished{--pf-c-wizard__outer-wrap--lg--PaddingLeft:0}.pf-c-wizard.pf-m-finished .pf-c-wizard__footer,.pf-c-wizard.pf-m-finished .pf-c-wizard__nav,.pf-c-wizard.pf-m-finished .pf-c-wizard__toggle{display:none;visibility:hidden}.pf-c-wizard__header{background-color:var(--pf-c-wizard__header--BackgroundColor);color:var(--pf-global--Color--100);padding:var(--pf-c-wizard__header--PaddingTop) var(--pf-c-wizard__header--PaddingRight) var(--pf-c-wizard__header--PaddingBottom) var(--pf-c-wizard__header--PaddingLeft);position:relative;z-index:var(--pf-c-wizard__header--ZIndex)}.pf-c-wizard__header .pf-c-wizard__close{font-size:var(--pf-c-wizard__close--FontSize);position:absolute;right:var(--pf-c-wizard__close--Right);top:var(--pf-c-wizard__close--Top)}.pf-c-wizard__title{word-wrap:break-word;padding-right:var(--pf-c-wizard__title--PaddingRight)}.pf-c-wizard__description{color:var(--pf-c-wizard__description--Color);display:none;padding-top:var(--pf-c-wizard__description--PaddingTop);visibility:hidden}@media screen and (min-width:992px){.pf-c-wizard__description{display:block;visibility:visible}}.pf-c-wizard__toggle{background-color:var(--pf-c-wizard__toggle--BackgroundColor);border:0;box-shadow:var(--pf-c-wizard__toggle--BoxShadow);display:flex;justify-content:space-between;padding:var(--pf-c-wizard__toggle--PaddingTop) var(--pf-c-wizard__toggle--PaddingRight) var(--pf-c-wizard__toggle--PaddingBottom) var(--pf-c-wizard__toggle--PaddingLeft);position:relative;width:100%;z-index:var(--pf-c-wizard__toggle--ZIndex)}@media screen and (min-width:992px){.pf-c-wizard__toggle{display:none;visibility:hidden}}.pf-c-wizard__toggle.pf-m-expanded{--pf-c-wizard__toggle--BoxShadow:none;border-bottom:var(--pf-c-wizard__toggle--m-expanded--BorderBottomWidth) solid var(--pf-c-wizard__toggle--m-expanded--BorderBottomColor)}.pf-c-wizard__toggle.pf-m-expanded .pf-c-wizard__toggle-icon{transform:rotate(var(--pf-c-wizard__toggle--m-expanded__toggle-icon--Rotate))}.pf-c-wizard__toggle-list{align-items:baseline;display:flex;flex-wrap:wrap;list-style:none;margin-bottom:var(--pf-c-wizard__toggle-list--MarginBottom);margin-right:var(--pf-c-wizard__toggle-list--MarginRight);position:relative}.pf-c-wizard__toggle-list-item{margin-bottom:var(--pf-c-wizard__toggle-list-item--MarginBottom);text-align:left;word-break:break-word}.pf-c-wizard__toggle-list-item:not(:last-child){margin-right:var(--pf-c-wizard__toggle-list-item--not-last-child--MarginRight)}.pf-c-wizard__toggle-num{--pf-c-wizard__nav-link--before--Top:var(--pf-c-wizard__toggle-num--before--Top)}.pf-c-wizard__toggle-separator{color:var(--pf-c-wizard__toggle-separator--Color);margin-left:var(--pf-c-wizard__toggle-separator--MarginLeft)}.pf-c-wizard__toggle-icon{line-height:var(--pf-c-wizard__toggle-icon--LineHeight)}.pf-c-wizard__outer-wrap{background-color:var(--pf-c-wizard__outer-wrap--BackgroundColor);display:flex;flex-direction:column;flex-grow:1;min-height:var(--pf-c-wizard__outer-wrap--MinHeight);position:relative}@media screen and (min-width:992px){.pf-c-wizard__outer-wrap{padding-left:var(--pf-c-wizard__outer-wrap--lg--PaddingLeft)}}.pf-c-wizard__inner-wrap{display:flex;flex-direction:column;flex-grow:1;min-height:0;position:relative}@media screen and (min-width:992px){.pf-c-wizard__inner-wrap{position:static}}.pf-c-wizard__nav{-webkit-overflow-scrolling:touch;background-color:var(--pf-c-wizard__nav--BackgroundColor);box-shadow:var(--pf-c-wizard__nav--BoxShadow);display:none;left:0;max-height:100%;overflow-y:auto;position:absolute;top:0;visibility:hidden;width:var(--pf-c-wizard__nav--Width);z-index:var(--pf-c-wizard__nav--ZIndex)}.pf-c-wizard__nav.pf-m-expanded{display:block;visibility:visible}@media screen and (min-width:992px){.pf-c-wizard__nav{border-right:var(--pf-c-wizard__nav--lg--BorderRightWidth) solid var(--pf-c-wizard__nav--lg--BorderRightColor);display:block;height:100%;visibility:visible}}.pf-c-wizard__nav-list{counter-reset:wizard-nav-count;list-style:none;padding-bottom:var(--pf-c-wizard__nav-list--PaddingBottom);padding-left:var(--pf-c-wizard__nav-list--PaddingLeft);padding-right:var(--pf-c-wizard__nav-list--PaddingRight);padding-top:var(--pf-c-wizard__nav-list--PaddingTop)}.pf-c-wizard__nav-list .pf-c-wizard__nav-list{margin-left:var(--pf-c-wizard__nav-list--nested--MarginLeft);margin-top:var(--pf-c-wizard__nav-list--nested--MarginTop);padding:0}.pf-c-wizard__nav-list .pf-c-wizard__nav-list .pf-c-wizard__nav-link:before{content:none}.pf-c-wizard__nav-list .pf-c-wizard__nav-list .pf-c-wizard__nav-link.pf-m-current{font-weight:var(--pf-c-wizard__nav-list__nav-list__nav-link--m-current--FontWeight)}.pf-c-wizard__nav-item+.pf-c-wizard__nav-item{margin-top:var(--pf-c-wizard__nav-item--MarginTop)}.pf-c-wizard__nav-item.pf-m-expandable>.pf-c-wizard__nav-link{display:flex}.pf-c-wizard__nav-item.pf-m-expandable>.pf-c-wizard__nav-list{display:none;visibility:hidden}.pf-c-wizard__nav-item.pf-m-expanded>.pf-c-wizard__nav-list{display:block;visibility:visible}.pf-c-wizard__nav-item.pf-m-expanded>.pf-c-wizard__nav-link{--pf-c-wizard__nav-link-toggle-icon--Rotate:var(--pf-c-wizard__nav-item--m-expanded__link-toggle-icon--Rotate)}.pf-c-wizard__nav-link{border:0;color:var(--pf-c-wizard__nav-link--Color);display:inline-block;position:relative;text-align:left;text-decoration:var(--pf-c-wizard__nav-link--TextDecoration);width:100%;word-break:break-word}.pf-c-wizard__nav-link:before,.pf-c-wizard__toggle-num{align-items:center;background-color:var(--pf-c-wizard__nav-link--before--BackgroundColor);border-radius:var(--pf-c-wizard__nav-link--before--BorderRadius);color:var(--pf-c-wizard__nav-link--before--Color);display:inline-flex;font-size:var(--pf-c-wizard__nav-link--before--FontSize);height:var(--pf-c-wizard__nav-link--before--Height);justify-content:center;left:0;line-height:1;position:absolute;top:var(--pf-c-wizard__nav-link--before--Top);transform:translateX(var(--pf-c-wizard__nav-link--before--TranslateX));width:var(--pf-c-wizard__nav-link--before--Width)}.pf-c-wizard__nav-link:before{content:counter(wizard-nav-count);counter-increment:wizard-nav-count;top:0}.pf-c-wizard__nav-link:hover{--pf-c-wizard__nav-link--Color:var(--pf-c-wizard__nav-link--hover--Color);--pf-c-wizard__nav-link-toggle--Color:var(--pf-c-wizard__nav-link--hover__nav-link-toggle-icon--Color)}.pf-c-wizard__nav-link:focus{--pf-c-wizard__nav-link--Color:var(--pf-c-wizard__nav-link--focus--Color);--pf-c-wizard__nav-link-toggle--Color:var(--pf-c-wizard__nav-link--focus__nav-link-toggle-icon--Color)}.pf-c-wizard__nav-link.pf-m-current{--pf-c-wizard__nav-link--Color:var(--pf-c-wizard__nav-link--m-current--Color);font-weight:var(--pf-c-wizard__nav-link--m-current--FontWeight)}.pf-c-wizard__nav-link.pf-m-current:before,.pf-c-wizard__toggle-num{--pf-c-wizard__nav-link--before--BackgroundColor:var(--pf-c-wizard__nav-link--m-current--before--BackgroundColor);--pf-c-wizard__nav-link--before--Color:var(--pf-c-wizard__nav-link--m-current--before--Color)}.pf-c-wizard__nav-link.pf-m-disabled,.pf-c-wizard__nav-link:disabled{--pf-c-wizard__nav-link--Color:var(--pf-c-wizard__nav-link--m-disabled--Color);pointer-events:none}.pf-c-wizard__nav-link.pf-m-disabled:before,.pf-c-wizard__nav-link:disabled:before{--pf-c-wizard__nav-link--before--BackgroundColor:var(--pf-c-wizard__nav-link--m-disabled--before--BackgroundColor);--pf-c-wizard__nav-link--before--Color:var(--pf-c-wizard__nav-link--m-disabled--before--Color)}.pf-c-wizard__nav-link-text{flex-grow:1}.pf-c-wizard__nav-link-toggle{color:var(--pf-c-wizard__nav-link-toggle--Color);padding-left:var(--pf-c-wizard__nav-link-toggle--PaddingLeft);padding-right:var(--pf-c-wizard__nav-link-toggle--PaddingRight)}.pf-c-wizard__nav-link-toggle-icon{display:inline-block;transform:rotate(var(--pf-c-wizard__nav-link-toggle-icon--Rotate));transition:var(--pf-c-wizard__nav-link-toggle-icon--Transition)}.pf-c-wizard__main{flex:1 1 auto;overflow-x:hidden;overflow-y:auto;word-break:break-word;z-index:var(--pf-c-wizard__main--ZIndex)}.pf-c-wizard__main-body{padding:var(--pf-c-wizard__main-body--PaddingTop) var(--pf-c-wizard__main-body--PaddingRight) var(--pf-c-wizard__main-body--PaddingBottom) var(--pf-c-wizard__main-body--PaddingLeft)}.pf-c-wizard__main-body.pf-m-no-padding{padding:0}.pf-c-wizard__footer{background-color:var(--pf-c-wizard__footer--BackgroundColor);display:flex;flex-shrink:0;flex-wrap:wrap;padding:var(--pf-c-wizard__footer--PaddingTop) var(--pf-c-wizard__footer--PaddingRight) var(--pf-c-wizard__footer--PaddingBottom) var(--pf-c-wizard__footer--PaddingLeft);position:relative;z-index:var(--pf-c-wizard__footer--ZIndex)}.pf-c-wizard__footer>*{margin-bottom:var(--pf-c-wizard__footer--child--MarginBottom)}.pf-c-wizard__footer>:not(:last-child){margin-right:var(--pf-c-wizard__footer--child--MarginRight)}.pf-c-drawer>.pf-c-wizard__footer,.pf-c-modal-box .pf-c-wizard__footer,.pf-c-page__main-wizard .pf-c-wizard__footer{box-shadow:var(--pf-c-wizard__footer--BoxShadow)}.pf-c-wizard__footer-cancel{margin-left:var(--pf-c-wizard__footer-cancel--MarginLeft)}:where(.pf-theme-dark) .pf-c-wizard__header{--pf-global--Color--100:#e0e0e0;--pf-global--Color--200:#aaabac;--pf-global--BorderColor--100:#444548;--pf-global--primary-color--100:#1fa7f8;--pf-global--link--Color:#1fa7f8;--pf-global--link--Color--hover:#73bcf7;--pf-global--BackgroundColor--100:#1b1d21}:where(.pf-theme-dark) .pf-c-wizard__header .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--100)}:where(.pf-theme-dark) .pf-c-wizard__header .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--active--Color:var(--pf-global--primary-color--100)}:where(.pf-theme-dark) .pf-c-wizard{--pf-c-wizard__header--BackgroundColor:var(--pf-global--palette--black-1000);--pf-c-wizard__nav-link--before--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-wizard__nav-link--m-disabled--Color:var(--pf-global--disabled-color--300);--pf-c-wizard__nav-link--m-disabled--before--Color:var(--pf-global--disabled-color--300)}:where(.pf-theme-dark) .pf-c-wizard__header{color:var(--pf-global--Color--100)}.pf-c-number-input .pf-c-form-control{appearance:textfield}.pf-c-number-input .pf-c-form-control::-webkit-inner-spin-button,.pf-c-number-input .pf-c-form-control::-webkit-outer-spin-button{appearance:none;margin:0}.pf-c-number-input{--pf-c-number-input__unit--c-input-group--MarginLeft:var(--pf-global--spacer--sm);--pf-c-number-input__icon--FontSize:var(--pf-global--FontSize--xs);--pf-c-number-input--c-form-control--width-base:calc(var(--pf-global--spacer--sm)*2 + var(--pf-global--BorderWidth--sm)*2);--pf-c-number-input--c-form-control--width-icon:0px;--pf-c-number-input--m-status--c-form-control--width-icon:var(--pf-global--spacer--xl);--pf-c-number-input--c-form-control--width-chars:4;--pf-c-number-input--c-form-control--Width:calc(var(--pf-c-number-input--c-form-control--width-base) + var(--pf-c-number-input--c-form-control--width-chars)*1ch + var(--pf-c-number-input--c-form-control--width-icon));align-items:center;display:inline-flex}.pf-c-number-input.pf-m-status{--pf-c-number-input--c-form-control--width-icon:var(--pf-c-number-input--m-status--c-form-control--width-icon)}.pf-c-number-input .pf-c-form-control{display:inline-flex;text-align:right;width:var(--pf-c-number-input--c-form-control--Width)}.pf-c-input-group+.pf-c-number-input__unit,.pf-c-number-input__unit+.pf-c-input-group{margin-left:var(--pf-c-number-input__unit--c-input-group--MarginLeft)}.pf-c-number-input__icon{display:flex;font-size:var(--pf-c-number-input__icon--FontSize)}.pf-l-gallery{--pf-l-gallery--m-gutter--GridGap:var(--pf-global--gutter);--pf-l-gallery--GridTemplateColumns--min:250px;--pf-l-gallery--GridTemplateColumns--max:1fr;--pf-l-gallery--GridTemplateColumns:repeat(auto-fill,minmax(var(--pf-l-gallery--GridTemplateColumns--minmax--min),var(--pf-l-gallery--GridTemplateColumns--minmax--max)));--pf-l-gallery--GridTemplateRows:auto;--pf-l-gallery--GridTemplateColumns--minmax--min:var(--pf-l-gallery--GridTemplateColumns--min);--pf-l-gallery--GridTemplateColumns--minmax--max:var(--pf-l-gallery--GridTemplateColumns--max);display:grid;grid-template-columns:var(--pf-l-gallery--GridTemplateColumns);grid-template-rows:var(--pf-l-gallery--GridTemplateRows)}.pf-l-gallery.pf-m-gutter{grid-gap:var(--pf-l-gallery--m-gutter--GridGap)}@media (min-width:576px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--min:var(--pf-l-gallery--GridTemplateColumns--min-on-sm,var(--pf-l-gallery--GridTemplateColumns--min))}}@media (min-width:768px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--min:var(--pf-l-gallery--GridTemplateColumns--min-on-md,var(--pf-l-gallery--GridTemplateColumns--min-on-sm,var(--pf-l-gallery--GridTemplateColumns--min)))}}@media (min-width:992px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--min:var(--pf-l-gallery--GridTemplateColumns--min-on-lg,var(--pf-l-gallery--GridTemplateColumns--min-on-md,var(--pf-l-gallery--GridTemplateColumns--min-on-sm,var(--pf-l-gallery--GridTemplateColumns--min))))}}@media (min-width:1200px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--min:var(--pf-l-gallery--GridTemplateColumns--min-on-xl,var(--pf-l-gallery--GridTemplateColumns--min-on-lg,var(--pf-l-gallery--GridTemplateColumns--min-on-md,var(--pf-l-gallery--GridTemplateColumns--min-on-sm,var(--pf-l-gallery--GridTemplateColumns--min)))))}}@media (min-width:1450px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--min:var(--pf-l-gallery--GridTemplateColumns--min-on-2xl,var(--pf-l-gallery--GridTemplateColumns--min-on-xl,var(--pf-l-gallery--GridTemplateColumns--min-on-lg,var(--pf-l-gallery--GridTemplateColumns--min-on-md,var(--pf-l-gallery--GridTemplateColumns--min-on-sm,var(--pf-l-gallery--GridTemplateColumns--min))))))}}@media (min-width:576px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--max:var(--pf-l-gallery--GridTemplateColumns--max-on-sm,var(--pf-l-gallery--GridTemplateColumns--max))}}@media (min-width:768px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--max:var(--pf-l-gallery--GridTemplateColumns--max-on-md,var(--pf-l-gallery--GridTemplateColumns--max-on-sm,var(--pf-l-gallery--GridTemplateColumns--max)))}}@media (min-width:992px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--max:var(--pf-l-gallery--GridTemplateColumns--max-on-lg,var(--pf-l-gallery--GridTemplateColumns--max-on-md,var(--pf-l-gallery--GridTemplateColumns--max-on-sm,var(--pf-l-gallery--GridTemplateColumns--max))))}}@media (min-width:1200px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--max:var(--pf-l-gallery--GridTemplateColumns--max-on-xl,var(--pf-l-gallery--GridTemplateColumns--max-on-lg,var(--pf-l-gallery--GridTemplateColumns--max-on-md,var(--pf-l-gallery--GridTemplateColumns--max-on-sm,var(--pf-l-gallery--GridTemplateColumns--max)))))}}@media (min-width:1450px){.pf-l-gallery{--pf-l-gallery--GridTemplateColumns--minmax--max:var(--pf-l-gallery--GridTemplateColumns--max-on-2xl,var(--pf-l-gallery--GridTemplateColumns--max-on-xl,var(--pf-l-gallery--GridTemplateColumns--max-on-lg,var(--pf-l-gallery--GridTemplateColumns--max-on-md,var(--pf-l-gallery--GridTemplateColumns--max-on-sm,var(--pf-l-gallery--GridTemplateColumns--max))))))}}.pf-c-menu-toggle{--pf-c-menu-toggle--BorderRadius:0;--pf-c-menu-toggle--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-menu-toggle--PaddingRight:var(--pf-global--spacer--sm);--pf-c-menu-toggle--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-menu-toggle--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-menu-toggle--FontSize:var(--pf-global--FontSize--md);--pf-c-menu-toggle--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--LineHeight:var(--pf-global--LineHeight--md);--pf-c-menu-toggle--BackgroundColor:transparent;--pf-c-menu-toggle--before--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--before--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--before--BorderBottomWidth:0;--pf-c-menu-toggle--before--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--before--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-menu-toggle--before--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-menu-toggle--before--BorderBottomColor:transparent;--pf-c-menu-toggle--before--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-menu-toggle--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--after--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-menu-toggle--hover--BackgroundColor:transparent;--pf-c-menu-toggle--hover--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--hover--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--focus--BackgroundColor:transparent;--pf-c-menu-toggle--focus--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--focus--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--active--BackgroundColor:transparent;--pf-c-menu-toggle--active--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--active--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--m-expanded--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-expanded--BackgroundColor:transparent;--pf-c-menu-toggle--m-expanded--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-expanded--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-menu-toggle--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-menu-toggle--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-menu-toggle--m-primary--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-menu-toggle--m-primary--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-primary--m-expanded--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-primary--m-expanded--Color:var(--pf-global--Color--light-100);--pf-c-menu-toggle--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-secondary--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-menu-toggle--m-secondary--BackgroundColor:transparent;--pf-c-menu-toggle--m-secondary--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--m-secondary--hover--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-secondary--focus--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-secondary--active--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-secondary--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-secondary--hover--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-secondary--focus--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-secondary--active--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-secondary--m-expanded--Color:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-expanded__toggle--m-secondary--before--BorderColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-expanded__toggle--m-secondary--before--BorderWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-plain--Color:var(--pf-global--Color--200);--pf-c-menu-toggle--m-plain--PaddingRight:var(--pf-global--spacer--md);--pf-c-menu-toggle--m-plain--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu-toggle--m-plain--hover--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-plain--focus--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-plain--active--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-plain--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-menu-toggle--m-plain--m-expanded--Color:var(--pf-global--Color--100);--pf-c-menu-toggle__icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-menu-toggle__count--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu-toggle__controls--PaddingLeft:var(--pf-global--spacer--md);--pf-c-menu-toggle__controls--MarginLeft:auto;--pf-c-menu-toggle__controls--MarginRight:0;--pf-c-menu-toggle__toggle-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-menu-toggle--m-plain__toggle-icon--Color:var(--pf-global--Color--200);--pf-c-menu-toggle--m-plain--hover__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-plain--active__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-plain--focus__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-plain--m-expanded__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-menu-toggle--m-full-height--PaddingRight:var(--pf-global--spacer--lg);--pf-c-menu-toggle--m-full-height--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-menu-toggle--m-full-height__toggle--before--BorderTopWidth:0;--pf-c-menu-toggle--m-full-height--m-expanded--after--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-menu-toggle--m-full-height--hover--after--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-menu-toggle--m-full-height--focus--after--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-menu-toggle--m-full-height--active--after--BorderBottomWidth:var(--pf-global--BorderWidth--xl);--pf-c-menu-toggle--m-split-button--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-menu-toggle--m-split-button--child--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-menu-toggle--m-split-button--child--disabled--Color:var(--pf-global--Color--dark-200);--pf-c-menu-toggle--m-split-button--child--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-menu-toggle--m-split-button--first-child--PaddingRight:var(--pf-global--spacer--sm);--pf-c-menu-toggle--m-split-button--last-child--PaddingLeft:0;--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-menu-toggle--m-split-button--m-action--child--after--Left:0;--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-menu-toggle--m-split-button--m-action--child--hover--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-menu-toggle--m-split-button--m-action--child--hover--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--m-split-button--m-action--child--focus--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-split-button--m-action--child--focus--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--m-split-button--m-action--child--active--after--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-menu-toggle--m-split-button--m-action--child--active--after--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-menu-toggle--m-split-button--m-action--child--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BorderLeftColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-split-button--m-action--m-primary--m-expanded--child--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-menu-toggle--m-split-button--m-action--m-secondary--child--BorderLeftColor:var(--pf-global--primary-color--100);--pf-c-menu-toggle__button__controls--MarginRight:var(--pf-global--spacer--sm);--pf-c-menu-toggle__button__controls--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu-toggle--m-typeahead__controls--MarginRight:var(--pf-global--spacer--md);--pf-c-menu-toggle--m-typeahead__controls--MarginLeft:var(--pf-global--spacer--sm);--pf-c-menu-toggle--m-typeahead--c-text-input-group__utilities--c-button--PaddingRight:var(--pf-global--spacer--sm);align-items:center;background-color:var(--pf-c-menu-toggle--BackgroundColor);border:0;border-radius:var(--pf-c-menu-toggle--BorderRadius);color:var(--pf-c-menu-toggle--Color);cursor:pointer;display:inline-flex;font-size:var(--pf-c-menu-toggle--FontSize);line-height:var(--pf-c-menu-toggle--LineHeight);max-width:100%;padding:var(--pf-c-menu-toggle--PaddingTop) var(--pf-c-menu-toggle--PaddingRight) var(--pf-c-menu-toggle--PaddingBottom) var(--pf-c-menu-toggle--PaddingLeft);position:relative}.pf-c-menu-toggle:after,.pf-c-menu-toggle:before{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-menu-toggle:before{border-color:var(--pf-c-menu-toggle--before--BorderTopColor) var(--pf-c-menu-toggle--before--BorderRightColor) var(--pf-c-menu-toggle--before--BorderBottomColor) var(--pf-c-menu-toggle--before--BorderLeftColor);border-style:solid;border-width:var(--pf-c-menu-toggle--before--BorderTopWidth) var(--pf-c-menu-toggle--before--BorderRightWidth) var(--pf-c-menu-toggle--before--BorderBottomWidth) var(--pf-c-menu-toggle--before--BorderLeftWidth)}.pf-c-menu-toggle:after{border-bottom:var(--pf-c-menu-toggle--after--BorderBottomWidth) solid var(--pf-c-menu-toggle--after--BorderBottomColor)}.pf-c-menu-toggle.pf-m-primary{--pf-c-menu-toggle--BorderRadius:var(--pf-c-menu-toggle--m-primary--BorderRadius);--pf-c-menu-toggle--Color:var(--pf-c-menu-toggle--m-primary--Color);--pf-c-menu-toggle--BackgroundColor:var(--pf-c-menu-toggle--m-primary--BackgroundColor);--pf-c-menu-toggle--hover--BackgroundColor:var(--pf-c-menu-toggle--m-primary--hover--BackgroundColor);--pf-c-menu-toggle--focus--BackgroundColor:var(--pf-c-menu-toggle--m-primary--focus--BackgroundColor);--pf-c-menu-toggle--active--BackgroundColor:var(--pf-c-menu-toggle--m-primary--active--BackgroundColor);--pf-c-menu-toggle--m-expanded--Color:var(--pf-c-menu-toggle--m-primary--m-expanded--Color);--pf-c-menu-toggle--m-expanded--BackgroundColor:var(--pf-c-menu-toggle--m-primary--m-expanded--BackgroundColor)}.pf-c-menu-toggle.pf-m-primary,.pf-c-menu-toggle.pf-m-primary:before{border-radius:var(--pf-c-menu-toggle--m-primary--BorderRadius)}.pf-c-menu-toggle.pf-m-secondary{--pf-c-menu-toggle--Color:var(--pf-c-menu-toggle--m-secondary--Color);--pf-c-menu-toggle--m-expanded--Color:var(--pf-c-menu-toggle--m-secondary--m-expanded--Color)}.pf-c-menu-toggle.pf-m-secondary,.pf-c-menu-toggle.pf-m-secondary:before{border-radius:var(--pf-c-menu-toggle--m-secondary--BorderRadius)}.pf-c-menu-toggle.pf-m-secondary:before{border-color:var(--pf-c-menu-toggle--m-secondary--before--BorderColor);border-width:var(--pf-c-menu-toggle--m-secondary--before--BorderWidth)}.pf-c-menu-toggle.pf-m-secondary:after{border:0}.pf-c-menu-toggle.pf-m-secondary:hover{--pf-c-menu-toggle--m-secondary--before--BorderColor:var(--pf-c-menu-toggle--m-secondary--hover--before--BorderColor);--pf-c-menu-toggle--m-secondary--before--BorderWidth:var(--pf-c-menu-toggle--m-secondary--hover--before--BorderWidth)}.pf-c-menu-toggle.pf-m-secondary:focus{--pf-c-menu-toggle--m-secondary--before--BorderColor:var(--pf-c-menu-toggle--m-secondary--focus--before--BorderColor);--pf-c-menu-toggle--m-secondary--before--BorderWidth:var(--pf-c-menu-toggle--m-secondary--focus--before--BorderWidth)}.pf-c-menu-toggle.pf-m-secondary:active{--pf-c-menu-toggle--m-secondary--before--BorderColor:var(--pf-c-menu-toggle--m-secondary--active--before--BorderColor);--pf-c-menu-toggle--m-secondary--before--BorderWidth:var(--pf-c-menu-toggle--m-secondary--active--before--BorderWidth)}.pf-c-menu-toggle.pf-m-secondary.pf-m-expanded{--pf-c-menu-toggle--m-secondary--before--BorderColor:var(--pf-c-menu-toggle--m-expanded__toggle--m-secondary--before--BorderColor);--pf-c-menu-toggle--m-secondary--before--BorderWidth:var(--pf-c-menu-toggle--m-expanded__toggle--m-secondary--before--BorderWidth)}.pf-c-menu-toggle.pf-m-plain{--pf-c-menu-toggle__toggle-icon--Color:var(--pf-c-menu-toggle--m-plain__toggle-icon--Color)}.pf-c-menu-toggle.pf-m-plain:not(.pf-m-text){--pf-c-menu-toggle--PaddingRight:var(--pf-c-menu-toggle--m-plain--PaddingRight);--pf-c-menu-toggle--PaddingLeft:var(--pf-c-menu-toggle--m-plain--PaddingLeft);--pf-c-menu-toggle--disabled--BackgroundColor:transparent;color:var(--pf-c-menu-toggle--m-plain--Color);display:inline-block}.pf-c-menu-toggle:hover{--pf-c-menu-toggle--BackgroundColor:var(--pf-c-menu-toggle--hover--BackgroundColor);--pf-c-menu-toggle--after--BorderBottomWidth:var(--pf-c-menu-toggle--hover--after--BorderBottomWidth);--pf-c-menu-toggle--after--BorderBottomColor:var(--pf-c-menu-toggle--hover--after--BorderBottomColor);--pf-c-menu-toggle--m-plain__toggle-icon--Color:var(--pf-c-menu-toggle--m-plain--hover__toggle-icon--Color);--pf-c-menu-toggle--m-plain--Color:var(--pf-c-menu-toggle--m-plain--hover--Color)}.pf-c-menu-toggle:focus,.pf-c-menu-toggle:focus-within{--pf-c-menu-toggle--BackgroundColor:var(--pf-c-menu-toggle--focus--BackgroundColor);--pf-c-menu-toggle--after--BorderBottomWidth:var(--pf-c-menu-toggle--focus--after--BorderBottomWidth);--pf-c-menu-toggle--after--BorderBottomColor:var(--pf-c-menu-toggle--focus--after--BorderBottomColor);--pf-c-menu-toggle--m-plain__toggle-icon--Color:var(--pf-c-menu-toggle--m-plain--focus__toggle-icon--Color);--pf-c-menu-toggle--m-plain--Color:var(--pf-c-menu-toggle--m-plain--focus--Color)}.pf-c-menu-toggle:active{--pf-c-menu-toggle--BackgroundColor:var(--pf-c-menu-toggle--active--BackgroundColor);--pf-c-menu-toggle--after--BorderBottomWidth:var(--pf-c-menu-toggle--active--after--BorderBottomWidth);--pf-c-menu-toggle--after--BorderBottomColor:var(--pf-c-menu-toggle--active--after--BorderBottomColor);--pf-c-menu-toggle--m-plain__toggle-icon--Color:var(--pf-c-menu-toggle--m-plain--active__toggle-icon--Color);--pf-c-menu-toggle--m-plain--Color:var(--pf-c-menu-toggle--m-plain--active--Color)}.pf-c-menu-toggle.pf-m-expanded{--pf-c-menu-toggle--Color:var(--pf-c-menu-toggle--m-expanded--Color);--pf-c-menu-toggle--BackgroundColor:var(--pf-c-menu-toggle--m-expanded--BackgroundColor);--pf-c-menu-toggle--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-expanded--after--BorderBottomWidth);--pf-c-menu-toggle--after--BorderBottomColor:var(--pf-c-menu-toggle--m-expanded--after--BorderBottomColor);--pf-c-menu-toggle--m-plain__toggle-icon--Color:var(--pf-c-menu-toggle--m-plain--m-expanded__toggle-icon--Color);--pf-c-menu-toggle--m-plain--Color:var(--pf-c-menu-toggle--m-plain--m-expanded--Color)}.pf-c-menu-toggle.pf-m-disabled,.pf-c-menu-toggle:disabled{--pf-c-menu-toggle--Color:var(--pf-c-menu-toggle--disabled--Color);--pf-c-menu-toggle--BackgroundColor:var(--pf-c-menu-toggle--disabled--BackgroundColor);--pf-c-menu-toggle--m-plain--Color:var(--pf-c-menu-toggle--m-plain--disabled--Color);pointer-events:none}.pf-c-menu-toggle.pf-m-plain:after,.pf-c-menu-toggle.pf-m-plain:before,.pf-c-menu-toggle.pf-m-primary:after,.pf-c-menu-toggle.pf-m-primary:before,.pf-c-menu-toggle:disabled:after,.pf-c-menu-toggle:disabled:before{border:0}.pf-c-menu-toggle.pf-m-full-height{--pf-c-menu-toggle--PaddingRight:var(--pf-c-menu-toggle--m-full-height--PaddingRight);--pf-c-menu-toggle--PaddingLeft:var(--pf-c-menu-toggle--m-full-height--PaddingLeft);--pf-c-menu-toggle--before--BorderTopWidth:var(--pf-c-menu-toggle--m-full-height__toggle--before--BorderTopWidth);--pf-c-menu-toggle--m-expanded--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-full-height--m-expanded--after--BorderBottomWidth);--pf-c-menu-toggle--hover--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-full-height--hover--after--BorderBottomWidth);--pf-c-menu-toggle--focus--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-full-height--focus--after--BorderBottomWidth);--pf-c-menu-toggle--active--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-full-height--active--after--BorderBottomWidth);height:100%}.pf-c-menu-toggle.pf-m-typeahead{--pf-c-menu-toggle__button__controls--MarginRight:var(--pf-c-menu-toggle--m-typeahead__controls--MarginRight);--pf-c-menu-toggle__button__controls--MarginLeft:var(--pf-c-menu-toggle--m-typeahead__controls--MarginLeft);align-items:stretch;padding:0}.pf-c-menu-toggle.pf-m-typeahead .pf-c-text-input-group{--pf-c-text-input-group__utilities--c-button--PaddingRight:var(--pf-c-menu-toggle--m-typeahead--c-text-input-group__utilities--c-button--PaddingRight);--pf-c-text-input-group__utilities--MarginRight:0;flex:1}.pf-c-menu-toggle.pf-m-split-button{padding:0}.pf-c-menu-toggle.pf-m-split-button>*{padding:var(--pf-c-menu-toggle--PaddingTop) var(--pf-c-menu-toggle--PaddingRight) var(--pf-c-menu-toggle--PaddingBottom) var(--pf-c-menu-toggle--PaddingLeft);position:relative}.pf-c-menu-toggle.pf-m-split-button>:first-child{padding-right:var(--pf-c-menu-toggle--m-split-button--first-child--PaddingRight)}.pf-c-menu-toggle.pf-m-split-button:where(:not(.pf-m-action))>:last-child{padding-left:var(--pf-c-menu-toggle--m-split-button--last-child--PaddingLeft)}.pf-c-menu-toggle.pf-m-split-button>.pf-c-check{--pf-c-menu-toggle--PaddingRight:0;--pf-c-check__input--MarginTop:0;--pf-c-check__label--Color:currentcolor;align-items:center;align-self:stretch}.pf-c-menu-toggle.pf-m-split-button.pf-m-action:where(:not(.pf-m-primary,.pf-m-secondary,.pf-m-disabled))>:after{border-bottom:var(--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth) solid var(--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomColor);bottom:0;content:"";left:var(--pf-c-menu-toggle--m-split-button--m-action--child--after--Left);pointer-events:none;position:absolute;right:0;top:0}.pf-c-menu-toggle.pf-m-split-button.pf-m-action:where(:not(.pf-m-primary,.pf-m-secondary,.pf-m-disabled))>:hover{--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-split-button--m-action--child--hover--after--BorderBottomWidth);--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomColor:var(--pf-c-menu-toggle--m-split-button--m-action--child--hover--after--BorderBottomColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action:where(:not(.pf-m-primary,.pf-m-secondary,.pf-m-disabled))>:focus{--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-split-button--m-action--child--focus--after--BorderBottomWidth);--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomColor:var(--pf-c-menu-toggle--m-split-button--m-action--child--focus--after--BorderBottomColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action:where(:not(.pf-m-primary,.pf-m-secondary,.pf-m-disabled))>.pf-m-active,.pf-c-menu-toggle.pf-m-split-button.pf-m-action:where(:not(.pf-m-primary,.pf-m-secondary,.pf-m-disabled))>:active{--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth:var(--pf-c-menu-toggle--m-split-button--m-action--child--active--after--BorderBottomWidth);--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomColor:var(--pf-c-menu-toggle--m-split-button--m-action--child--active--after--BorderBottomColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary{--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftColor:var(--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BorderLeftColor);--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth:0}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:where(:not(.pf-m-disabled):not([disabled])){background-color:var(--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BackgroundColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:where(:not(.pf-m-disabled):not([disabled])):hover{--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BackgroundColor:var(--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--hover--BackgroundColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:where(:not(.pf-m-disabled):not([disabled])):focus{--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BackgroundColor:var(--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--focus--BackgroundColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:where(:not(.pf-m-disabled):not([disabled])).pf-m-active,.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:where(:not(.pf-m-disabled):not([disabled])):active{--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BackgroundColor:var(--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--active--BackgroundColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary.pf-m-expanded{--pf-c-menu-toggle--m-split-button--m-action--m-primary--child--BackgroundColor:var(--pf-c-menu-toggle--m-split-button--m-action--m-primary--m-expanded--child--BackgroundColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-secondary{--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftColor:var(--pf-c-menu-toggle--m-split-button--m-action--m-secondary--child--BorderLeftColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary,.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-secondary{--pf-c-menu-toggle--m-split-button--m-action--child--after--BorderBottomWidth:0}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:first-child,.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-secondary>:first-child{border-bottom-left-radius:var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderRadius);border-top-left-radius:var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderRadius)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-primary>:last-child,.pf-c-menu-toggle.pf-m-split-button.pf-m-action.pf-m-secondary>:last-child{border-bottom-right-radius:var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderRadius);border-top-right-radius:var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderRadius)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action>:not(:first-child){--pf-c-menu-toggle--m-split-button--m-action--child--after--Left:calc(var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftWidth)*-1);border-left:var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftWidth) solid var(--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftColor)}.pf-c-menu-toggle.pf-m-split-button.pf-m-action:not(.pf-m-expanded){--pf-c-menu-toggle--after--BorderBottomColor:transparent}.pf-c-menu-toggle.pf-m-split-button.pf-m-disabled,.pf-c-menu-toggle.pf-m-split-button:disabled{--pf-c-menu-toggle--m-split-button--child--BackgroundColor:var(--pf-c-menu-toggle--m-split-button--child--disabled--BackgroundColor);--pf-c-menu-toggle--m-split-button--child--Color:var(--pf-c-menu-toggle--m-split-button--child--disabled--Color);--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftColor:transparent}.pf-c-menu-toggle.pf-m-split-button.pf-m-disabled:after,.pf-c-menu-toggle.pf-m-split-button.pf-m-disabled:before,.pf-c-menu-toggle.pf-m-split-button:disabled:after,.pf-c-menu-toggle.pf-m-split-button:disabled:before{content:none}.pf-c-menu-toggle.pf-m-split-button>.pf-m-disabled,.pf-c-menu-toggle.pf-m-split-button>:disabled{--pf-c-menu-toggle--m-split-button--m-action--child--BorderLeftColor:transparent;background-color:var(--pf-c-menu-toggle--m-split-button--child--disabled--BackgroundColor);color:var(--pf-c-menu-toggle--m-split-button--child--disabled--Color)}.pf-c-menu-toggle.pf-m-split-button,.pf-c-menu-toggle.pf-m-typeahead{--pf-c-menu-toggle__toggle-icon--MarginRight:0}.pf-c-menu-toggle.pf-m-full-width{width:100%}.pf-c-menu-toggle__button{--pf-c-menu-toggle__controls--PaddingLeft:0;--pf-c-menu-toggle__controls--MarginRight:var(--pf-c-menu-toggle__button__controls--MarginRight);--pf-c-menu-toggle__controls--MarginLeft:var(--pf-c-menu-toggle__button__controls--MarginLeft);border:0;color:inherit}.pf-c-menu-toggle__icon{align-self:center;display:inline-flex;flex-shrink:0;line-height:1;margin-right:var(--pf-c-menu-toggle__icon--MarginRight)}.pf-c-menu-toggle__text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-menu-toggle__count{align-items:center;display:flex;margin-left:var(--pf-c-menu-toggle__count--MarginLeft)}.pf-c-menu-toggle__controls{margin-left:var(--pf-c-menu-toggle__controls--MarginLeft);margin-right:var(--pf-c-menu-toggle__controls--MarginRight);padding-left:var(--pf-c-menu-toggle__controls--PaddingLeft)}.pf-c-menu-toggle__toggle-icon{color:var(--pf-c-menu-toggle__toggle-icon--Color,inherit);margin-right:var(--pf-c-menu-toggle__toggle-icon--MarginRight)}:where(.pf-theme-dark) .pf-c-menu-toggle{--pf-c-menu-toggle--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu-toggle--hover--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu-toggle--active--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu-toggle--focus--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu-toggle--m-expanded--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-menu-toggle--before--BorderTopColor:transparent;--pf-c-menu-toggle--before--BorderRightColor:transparent;--pf-c-menu-toggle--before--BorderBottomColor:transparent;--pf-c-menu-toggle--before--BorderLeftColor:transparent;--pf-c-menu-toggle--after--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-menu-toggle--disabled--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-menu-toggle--disabled--Color:var(--pf-global--palette--black-100);--pf-c-menu-toggle--m-primary--BackgroundColor:var(--pf-global--primary-color--300)}:where(.pf-theme-dark) .pf-c-menu-toggle.pf-m-plain{background:transparent}.pf-c-pagination__nav-page-select .pf-c-form-control{appearance:textfield}.pf-c-pagination__nav-page-select .pf-c-form-control::-webkit-inner-spin-button,.pf-c-pagination__nav-page-select .pf-c-form-control::-webkit-outer-spin-button{appearance:none;margin:0}.pf-c-pagination{--pf-c-pagination--inset:0;--pf-c-pagination--PaddingRight:var(--pf-c-pagination--inset);--pf-c-pagination--PaddingLeft:var(--pf-c-pagination--inset);--pf-c-pagination--m-page-insets--inset:var(--pf-global--spacer--md);--pf-c-pagination--m-page-insets--xl--inset:var(--pf-global--spacer--lg);--pf-c-pagination--child--MarginRight:var(--pf-global--spacer--lg);--pf-c-pagination--m-bottom--child--MarginRight:0;--pf-c-pagination--m-bottom--child--md--MarginRight:var(--pf-global--spacer--lg);--pf-c-pagination--m-compact--child--MarginRight:var(--pf-global--spacer--sm);--pf-c-pagination--c-options-menu__toggle--FontSize:var(--pf-global--FontSize--sm);--pf-c-pagination__nav--Display:none;--pf-c-pagination__nav--Visibility:hidden;--pf-c-pagination--m-display-summary__nav--Display:none;--pf-c-pagination--m-display-summary__nav--Visibility:hidden;--pf-c-pagination--m-display-full__nav--Display:inline-flex;--pf-c-pagination--m-display-full__nav--Visibility:visible;--pf-c-pagination__nav-control--c-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-pagination__nav-control--c-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-pagination__nav-control--c-button--FontSize:var(--pf-global--FontSize--md);--pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingRight:var(--pf-global--spacer--sm);--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-pagination--m-compact__nav-control--nav-control--MarginLeft:var(--pf-global--spacer--md);--pf-c-pagination__nav-page-select--FontSize:var(--pf-global--FontSize--sm);--pf-c-pagination__nav-page-select--PaddingLeft:var(--pf-global--spacer--md);--pf-c-pagination__nav-page-select--PaddingRight:var(--pf-global--spacer--md);--pf-c-pagination__nav-page-select--child--MarginRight:var(--pf-global--spacer--xs);--pf-c-pagination__nav-page-select--c-form-control--width-base:calc(var(--pf-global--spacer--sm)*2 + var(--pf-global--BorderWidth--sm)*2);--pf-c-pagination__nav-page-select--c-form-control--width-chars:2;--pf-c-pagination__nav-page-select--c-form-control--Width:calc(var(--pf-c-pagination__nav-page-select--c-form-control--width-base) + var(--pf-c-pagination__nav-page-select--c-form-control--width-chars)*1ch);--pf-c-pagination__total-items--Display:block;--pf-c-pagination__total-items--Visibility:visible;--pf-c-pagination--m-display-summary__total-items--Display:block;--pf-c-pagination--m-display-summary__total-items--Visibility:visible;--pf-c-pagination--m-display-full__total-items--Display:none;--pf-c-pagination--m-display-full__total-items--Visibility:hidden;--pf-c-pagination--m-sticky--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-pagination--m-sticky--BoxShadow:var(--pf-global--BoxShadow--sm-bottom);--pf-c-pagination--m-sticky--md--PaddingTop:var(--pf-global--spacer--md);--pf-c-pagination--m-sticky--md--PaddingRight:var(--pf-global--spacer--md);--pf-c-pagination--m-sticky--md--PaddingBottom:var(--pf-global--spacer--md);--pf-c-pagination--m-sticky--md--PaddingLeft:var(--pf-global--spacer--md);--pf-c-pagination--m-sticky--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-pagination--m-sticky--Top:0;--pf-c-pagination--m-bottom--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-pagination--m-bottom--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-pagination--m-bottom--Bottom:0;--pf-c-pagination--m-bottom--md--PaddingTop:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom--md--PaddingRight:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom--md--PaddingBottom:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom--md--PaddingLeft:var(--pf-global--spacer--md);--pf-c-pagination--m-bottom--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-pagination--m-bottom--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-pagination--m-bottom--m-sticky--BoxShadow:var(--pf-global--BoxShadow--sm-top);--pf-c-pagination--c-options-menu--Display:none;--pf-c-pagination--c-options-menu--Visibility:hidden;--pf-c-pagination--m-display-summary--c-options-menu--Display:none;--pf-c-pagination--m-display-summary--c-options-menu--Visibility:hidden;--pf-c-pagination--m-display-full--c-options-menu--Display:inline-flex;--pf-c-pagination--m-display-full--c-options-menu--Visibility:visible;align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-left:var(--pf-c-pagination--PaddingLeft);padding-right:var(--pf-c-pagination--PaddingRight)}@media screen and (min-width:768px){.pf-c-pagination{--pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop:var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingTop);--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight:var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingRight);--pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom:var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingBottom);--pf-c-pagination--m-bottom__nav-control--c-button--PaddingLeft:var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingLeft);--pf-c-pagination--m-bottom--child--MarginRight:var(--pf-c-pagination--m-bottom--child--md--MarginRight);--pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset:0;--pf-c-pagination--m-bottom--BoxShadow:none;--pf-c-pagination--c-options-menu--Display:inline-flex;--pf-c-pagination--c-options-menu--Visibility:visible;--pf-c-pagination__nav--Display:inline-flex;--pf-c-pagination__nav--Visibility:visible;--pf-c-pagination__total-items--Display:none;--pf-c-pagination__total-items--Visibility:hidden}}@media screen and (min-width:1200px){.pf-c-pagination{--pf-c-pagination--m-bottom--md--PaddingRight:var(--pf-c-pagination--m-bottom--xl--PaddingRight);--pf-c-pagination--m-bottom--md--PaddingLeft:var(--pf-c-pagination--m-bottom--xl--PaddingLeft);--pf-c-pagination__scroll-button--Width:var(--pf-c-pagination__scroll-button--xl--Width);--pf-c-pagination--m-page-insets--inset:var(--pf-c-pagination--m-page-insets--xl--inset)}}.pf-c-pagination>:not(:last-child):not(.pf-c-pagination__total-items){margin-right:var(--pf-c-pagination--child--MarginRight)}.pf-c-pagination .pf-c-options-menu{display:var(--pf-c-pagination--c-options-menu--Display);visibility:var(--pf-c-pagination--c-options-menu--Visibility)}.pf-c-pagination.pf-m-bottom{--pf-c-pagination--child--MarginRight:var(--pf-c-pagination--m-bottom--child--MarginRight);--pf-c-pagination__nav-control--c-button--PaddingRight:var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight);--pf-c-pagination__nav-control--c-button--PaddingLeft:var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight);--pf-c-pagination--m-sticky--BoxShadow:var(--pf-c-pagination--m-bottom--m-sticky--BoxShadow);--pf-c-pagination--m-sticky--Top:auto;background-color:var(--pf-c-pagination--m-bottom--BackgroundColor);bottom:var(--pf-c-pagination--m-bottom--Bottom);box-shadow:var(--pf-c-pagination--m-bottom--BoxShadow);justify-content:center;position:sticky}.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control .pf-c-button{--pf-c-button--PaddingTop:var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop);--pf-c-button--PaddingBottom:var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom);outline-offset:var(--pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset)}.pf-c-pagination.pf-m-bottom.pf-m-static{--pf-c-pagination--m-bottom--MarginTop:0;--pf-c-pagination--m-bottom--BorderTopWidth:0;box-shadow:none;position:relative}.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-first,.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-last,.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-page-select{display:none;visibility:hidden}.pf-c-pagination.pf-m-bottom .pf-c-options-menu{display:block;position:absolute;visibility:visible}.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav{display:flex;flex-basis:100%;justify-content:space-between;visibility:visible}@media screen and (min-width:768px){.pf-c-pagination.pf-m-bottom{--pf-c-pagination--m-bottom--BorderTopWidth:0;--pf-c-pagination--m-bottom--MarginTop:0;--pf-c-pagination--m-bottom--Bottom:auto;justify-content:flex-end;padding:var(--pf-c-pagination--m-bottom--md--PaddingTop) var(--pf-c-pagination--m-bottom--md--PaddingRight) var(--pf-c-pagination--m-bottom--md--PaddingBottom) var(--pf-c-pagination--m-bottom--md--PaddingLeft);position:relative}.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-first,.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-last,.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-page-select{display:block;visibility:visible}.pf-c-pagination.pf-m-bottom .pf-c-options-menu{position:relative}.pf-c-pagination.pf-m-bottom .pf-c-pagination__nav{display:inline-flex;flex-basis:auto}}.pf-c-pagination.pf-m-sticky{--pf-c-pagination--m-bottom--Bottom:0;background-color:var(--pf-c-pagination--m-sticky--BackgroundColor);box-shadow:var(--pf-c-pagination--m-sticky--BoxShadow);padding-bottom:var(--pf-c-pagination--m-sticky--PaddingBottom);padding-left:var(--pf-c-pagination--m-sticky--PaddingLeft);padding-right:var(--pf-c-pagination--m-sticky--PaddingRight);padding-top:var(--pf-c-pagination--m-sticky--PaddingTop);position:sticky;top:var(--pf-c-pagination--m-sticky--Top);z-index:var(--pf-c-pagination--m-sticky--ZIndex)}@media screen and (min-width:768px){.pf-c-pagination.pf-m-sticky{padding:var(--pf-c-pagination--m-sticky--md--PaddingTop) var(--pf-c-pagination--m-sticky--md--PaddingRight) var(--pf-c-pagination--m-sticky--md--PaddingBottom) var(--pf-c-pagination--m-sticky--md--PaddingLeft)}}.pf-c-pagination .pf-c-options-menu__toggle{font-size:var(--pf-c-pagination--c-options-menu__toggle--FontSize)}.pf-c-pagination.pf-m-compact{--pf-c-pagination--child--MarginRight:var(--pf-c-pagination--m-compact--child--MarginRight)}.pf-c-pagination.pf-m-page-insets{--pf-c-pagination--inset:var(--pf-c-pagination--m-page-insets--inset)}.pf-c-pagination__nav{display:var(--pf-c-pagination__nav--Display);justify-content:flex-end;visibility:var(--pf-c-pagination__nav--Visibility)}.pf-c-pagination__nav-control .pf-c-button{font-size:var(--pf-c-pagination__nav-control--c-button--FontSize);padding-left:var(--pf-c-pagination__nav-control--c-button--PaddingLeft);padding-right:var(--pf-c-pagination__nav-control--c-button--PaddingRight)}.pf-c-pagination.pf-m-compact .pf-c-pagination__nav-control+.pf-c-pagination__nav-control{margin-left:var(--pf-c-pagination--m-compact__nav-control--nav-control--MarginLeft)}.pf-c-pagination__nav-page-select{align-items:center;display:flex;padding-left:var(--pf-c-pagination__nav-page-select--PaddingLeft);padding-right:var(--pf-c-pagination__nav-page-select--PaddingRight)}.pf-c-pagination__nav-page-select>*{font-size:var(--pf-c-pagination__nav-page-select--FontSize);white-space:nowrap}.pf-c-pagination__nav-page-select>:not(:last-child){margin-right:var(--pf-c-pagination__nav-page-select--child--MarginRight)}.pf-c-pagination__nav-page-select .pf-c-form-control{width:var(--pf-c-pagination__nav-page-select--c-form-control--Width)}.pf-c-pagination__total-items{display:var(--pf-c-pagination__total-items--Display);visibility:var(--pf-c-pagination__total-items--Visibility)}.pf-c-pagination.pf-m-display-summary{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-summary__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-summary__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-summary--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-summary--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-summary__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-summary__total-items--Visibility)}.pf-c-pagination.pf-m-display-full{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-full__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-full__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-full--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-full--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-full__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-full__total-items--Visibility)}.pf-c-pagination.pf-m-inset-none{--pf-c-pagination--inset:0}.pf-c-pagination.pf-m-inset-sm{--pf-c-pagination--inset:var(--pf-global--spacer--sm)}.pf-c-pagination.pf-m-inset-md{--pf-c-pagination--inset:var(--pf-global--spacer--md)}.pf-c-pagination.pf-m-inset-lg{--pf-c-pagination--inset:var(--pf-global--spacer--lg)}.pf-c-pagination.pf-m-inset-xl{--pf-c-pagination--inset:var(--pf-global--spacer--xl)}.pf-c-pagination.pf-m-inset-2xl{--pf-c-pagination--inset:var(--pf-global--spacer--2xl)}@media (min-width:576px){.pf-c-pagination.pf-m-display-summary-on-sm{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-summary__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-summary__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-summary--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-summary--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-summary__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-summary__total-items--Visibility)}.pf-c-pagination.pf-m-display-full-on-sm{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-full__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-full__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-full--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-full--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-full__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-full__total-items--Visibility)}.pf-c-pagination.pf-m-inset-none-on-sm{--pf-c-pagination--inset:0}.pf-c-pagination.pf-m-inset-sm-on-sm{--pf-c-pagination--inset:var(--pf-global--spacer--sm)}.pf-c-pagination.pf-m-inset-md-on-sm{--pf-c-pagination--inset:var(--pf-global--spacer--md)}.pf-c-pagination.pf-m-inset-lg-on-sm{--pf-c-pagination--inset:var(--pf-global--spacer--lg)}.pf-c-pagination.pf-m-inset-xl-on-sm{--pf-c-pagination--inset:var(--pf-global--spacer--xl)}.pf-c-pagination.pf-m-inset-2xl-on-sm{--pf-c-pagination--inset:var(--pf-global--spacer--2xl)}}@media (min-width:768px){.pf-c-pagination.pf-m-display-summary-on-md{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-summary__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-summary__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-summary--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-summary--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-summary__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-summary__total-items--Visibility)}.pf-c-pagination.pf-m-display-full-on-md{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-full__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-full__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-full--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-full--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-full__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-full__total-items--Visibility)}.pf-c-pagination.pf-m-inset-none-on-md{--pf-c-pagination--inset:0}.pf-c-pagination.pf-m-inset-sm-on-md{--pf-c-pagination--inset:var(--pf-global--spacer--sm)}.pf-c-pagination.pf-m-inset-md-on-md{--pf-c-pagination--inset:var(--pf-global--spacer--md)}.pf-c-pagination.pf-m-inset-lg-on-md{--pf-c-pagination--inset:var(--pf-global--spacer--lg)}.pf-c-pagination.pf-m-inset-xl-on-md{--pf-c-pagination--inset:var(--pf-global--spacer--xl)}.pf-c-pagination.pf-m-inset-2xl-on-md{--pf-c-pagination--inset:var(--pf-global--spacer--2xl)}}@media (min-width:992px){.pf-c-pagination.pf-m-display-summary-on-lg{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-summary__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-summary__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-summary--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-summary--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-summary__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-summary__total-items--Visibility)}.pf-c-pagination.pf-m-display-full-on-lg{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-full__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-full__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-full--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-full--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-full__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-full__total-items--Visibility)}.pf-c-pagination.pf-m-inset-none-on-lg{--pf-c-pagination--inset:0}.pf-c-pagination.pf-m-inset-sm-on-lg{--pf-c-pagination--inset:var(--pf-global--spacer--sm)}.pf-c-pagination.pf-m-inset-md-on-lg{--pf-c-pagination--inset:var(--pf-global--spacer--md)}.pf-c-pagination.pf-m-inset-lg-on-lg{--pf-c-pagination--inset:var(--pf-global--spacer--lg)}.pf-c-pagination.pf-m-inset-xl-on-lg{--pf-c-pagination--inset:var(--pf-global--spacer--xl)}.pf-c-pagination.pf-m-inset-2xl-on-lg{--pf-c-pagination--inset:var(--pf-global--spacer--2xl)}}@media (min-width:1200px){.pf-c-pagination.pf-m-display-summary-on-xl{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-summary__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-summary__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-summary--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-summary--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-summary__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-summary__total-items--Visibility)}.pf-c-pagination.pf-m-display-full-on-xl{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-full__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-full__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-full--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-full--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-full__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-full__total-items--Visibility)}.pf-c-pagination.pf-m-inset-none-on-xl{--pf-c-pagination--inset:0}.pf-c-pagination.pf-m-inset-sm-on-xl{--pf-c-pagination--inset:var(--pf-global--spacer--sm)}.pf-c-pagination.pf-m-inset-md-on-xl{--pf-c-pagination--inset:var(--pf-global--spacer--md)}.pf-c-pagination.pf-m-inset-lg-on-xl{--pf-c-pagination--inset:var(--pf-global--spacer--lg)}.pf-c-pagination.pf-m-inset-xl-on-xl{--pf-c-pagination--inset:var(--pf-global--spacer--xl)}.pf-c-pagination.pf-m-inset-2xl-on-xl{--pf-c-pagination--inset:var(--pf-global--spacer--2xl)}}@media (min-width:1450px){.pf-c-pagination.pf-m-display-summary-on-2xl{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-summary__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-summary__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-summary--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-summary--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-summary__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-summary__total-items--Visibility)}.pf-c-pagination.pf-m-display-full-on-2xl{--pf-c-pagination__nav--Display:var(--pf-c-pagination--m-display-full__nav--Display);--pf-c-pagination__nav--Visibility:var(--pf-c-pagination--m-display-full__nav--Visibility);--pf-c-pagination--c-options-menu--Display:var(--pf-c-pagination--m-display-full--c-options-menu--Display);--pf-c-pagination--c-options-menu--Visibility:var(--pf-c-pagination--m-display-full--c-options-menu--Visibility);--pf-c-pagination__total-items--Display:var(--pf-c-pagination--m-display-full__total-items--Display);--pf-c-pagination__total-items--Visibility:var(--pf-c-pagination--m-display-full__total-items--Visibility)}.pf-c-pagination.pf-m-inset-none-on-2xl{--pf-c-pagination--inset:0}.pf-c-pagination.pf-m-inset-sm-on-2xl{--pf-c-pagination--inset:var(--pf-global--spacer--sm)}.pf-c-pagination.pf-m-inset-md-on-2xl{--pf-c-pagination--inset:var(--pf-global--spacer--md)}.pf-c-pagination.pf-m-inset-lg-on-2xl{--pf-c-pagination--inset:var(--pf-global--spacer--lg)}.pf-c-pagination.pf-m-inset-xl-on-2xl{--pf-c-pagination--inset:var(--pf-global--spacer--xl)}.pf-c-pagination.pf-m-inset-2xl-on-2xl{--pf-c-pagination--inset:var(--pf-global--spacer--2xl)}}:where(.pf-theme-dark) .pf-c-pagination{--pf-c-pagination--m-sticky--BackgroundColor:var(--pf-global--BackgroundColor--300)}.pf-c-options-menu{--pf-c-options-menu__toggle--BackgroundColor:transparent;--pf-c-options-menu__toggle--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-options-menu__toggle--PaddingRight:var(--pf-global--spacer--sm);--pf-c-options-menu__toggle--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-options-menu__toggle--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-options-menu__toggle--MinWidth:0;--pf-c-options-menu__toggle--LineHeight:var(--pf-global--LineHeight--md);--pf-c-options-menu__toggle--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-options-menu__toggle--BorderTopColor:var(--pf-global--BorderColor--300);--pf-c-options-menu__toggle--BorderRightColor:var(--pf-global--BorderColor--300);--pf-c-options-menu__toggle--BorderBottomColor:var(--pf-global--BorderColor--200);--pf-c-options-menu__toggle--BorderLeftColor:var(--pf-global--BorderColor--300);--pf-c-options-menu__toggle--Color:var(--pf-global--Color--100);--pf-c-options-menu__toggle--hover--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-options-menu__toggle--active--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-options-menu__toggle--active--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-options-menu__toggle--focus--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-options-menu__toggle--focus--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-options-menu__toggle--expanded--BorderBottomWidth:var(--pf-global--BorderWidth--md);--pf-c-options-menu__toggle--expanded--BorderBottomColor:var(--pf-global--active-color--100);--pf-c-options-menu__toggle--disabled--BackgroundColor:var(--pf-global--disabled-color--300);--pf-c-options-menu__toggle--m-plain--Color:var(--pf-global--Color--200);--pf-c-options-menu__toggle--m-plain--hover--Color:var(--pf-global--Color--100);--pf-c-options-menu__toggle--m-plain--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-options-menu__toggle--m-plain--PaddingRight:var(--pf-global--spacer--md);--pf-c-options-menu__toggle--m-plain--PaddingLeft:var(--pf-global--spacer--md);--pf-c-options-menu__toggle-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-options-menu__toggle-icon--MarginLeft:var(--pf-global--spacer--md);--pf-c-options-menu--m-top--m-expanded__toggle-icon--Rotate:180deg;--pf-c-options-menu--m-plain__toggle-icon--Color:var(--pf-global--Color--200);--pf-c-options-menu--m-plain--hover__toggle-icon--Color:var(--pf-global--Color--100);--pf-c-options-menu__toggle-button--BackgroundColor:transparent;--pf-c-options-menu__toggle-button--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-options-menu__toggle-button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-options-menu__toggle-button--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-options-menu__toggle-button--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-options-menu__menu--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-options-menu__menu--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-options-menu__menu--PaddingTop:var(--pf-global--spacer--sm);--pf-c-options-menu__menu--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-options-menu__menu--Top:calc(100% + var(--pf-global--spacer--xs));--pf-c-options-menu__menu--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-options-menu--m-top__menu--Top:0;--pf-c-options-menu--m-top__menu--TranslateY:calc(-100% - var(--pf-global--spacer--xs));--pf-c-options-menu__menu-item--BackgroundColor:transparent;--pf-c-options-menu__menu-item--Color:var(--pf-global--Color--100);--pf-c-options-menu__menu-item--FontSize:var(--pf-global--FontSize--md);--pf-c-options-menu__menu-item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-options-menu__menu-item--PaddingRight:var(--pf-global--spacer--md);--pf-c-options-menu__menu-item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-options-menu__menu-item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-options-menu__menu-item--disabled--Color:var(--pf-global--Color--dark-200);--pf-c-options-menu__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-options-menu__menu-item--disabled--BackgroundColor:transparent;--pf-c-options-menu__menu-item-icon--Color:var(--pf-global--active-color--100);--pf-c-options-menu__menu-item-icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-options-menu__menu-item-icon--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-options-menu__group--group--PaddingTop:var(--pf-global--spacer--sm);--pf-c-options-menu__group-title--PaddingTop:var(--pf-global--spacer--sm);--pf-c-options-menu__group-title--PaddingRight:var(--pf-c-options-menu__menu-item--PaddingRight);--pf-c-options-menu__group-title--PaddingBottom:var(--pf-c-options-menu__menu-item--PaddingBottom);--pf-c-options-menu__group-title--PaddingLeft:var(--pf-c-options-menu__menu-item--PaddingLeft);--pf-c-options-menu__group-title--FontSize:var(--pf-global--FontSize--xs);--pf-c-options-menu__group-title--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-options-menu__group-title--Color:var(--pf-global--Color--dark-200);--pf-c-options-menu--c-divider--MarginTop:var(--pf-global--spacer--sm);--pf-c-options-menu--c-divider--MarginBottom:var(--pf-global--spacer--sm);display:inline-block;max-width:100%;position:relative}.pf-c-options-menu .pf-c-divider{margin-bottom:var(--pf-c-options-menu--c-divider--MarginBottom);margin-top:var(--pf-c-options-menu--c-divider--MarginTop)}.pf-c-options-menu .pf-c-divider:last-child{--pf-c-options-menu--c-divider--MarginBottom:0}.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:before,.pf-c-options-menu__toggle:not(.pf-m-plain):before{border:var(--pf-c-options-menu__toggle--BorderWidth) solid;border-color:var(--pf-c-options-menu__toggle--BorderTopColor) var(--pf-c-options-menu__toggle--BorderRightColor) var(--pf-c-options-menu__toggle--BorderBottomColor) var(--pf-c-options-menu__toggle--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:hover:before,.pf-c-options-menu__toggle:not(.pf-m-plain):hover:before{--pf-c-options-menu__toggle--BorderBottomColor:var(--pf-c-options-menu__toggle--hover--BorderBottomColor)}.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button.pf-m-active:before,.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:active:before,.pf-c-options-menu__toggle:not(.pf-m-plain).pf-m-active:before,.pf-c-options-menu__toggle:not(.pf-m-plain):active:before{--pf-c-options-menu__toggle--BorderBottomColor:var(--pf-c-options-menu__toggle--active--BorderBottomColor);border-bottom-width:var(--pf-c-options-menu__toggle--active--BorderBottomWidth)}.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:focus:before,.pf-c-options-menu__toggle:not(.pf-m-plain):focus:before{--pf-c-options-menu__toggle--BorderBottomColor:var(--pf-c-options-menu__toggle--focus--BorderBottomColor);border-bottom-width:var(--pf-c-options-menu__toggle--focus--BorderBottomWidth)}.pf-c-options-menu__toggle{align-items:center;background-color:var(--pf-c-options-menu__toggle--BackgroundColor);border:none;color:var(--pf-c-options-menu__toggle--Color);display:flex;justify-content:space-between;line-height:var(--pf-c-options-menu__toggle--LineHeight);max-width:100%;min-width:var(--pf-c-options-menu__toggle--MinWidth);padding:var(--pf-c-options-menu__toggle--PaddingTop) var(--pf-c-options-menu__toggle--PaddingRight) var(--pf-c-options-menu__toggle--PaddingBottom) var(--pf-c-options-menu__toggle--PaddingLeft);position:relative}.pf-c-options-menu.pf-m-expanded>.pf-c-options-menu__toggle:before{--pf-c-options-menu__toggle--BorderBottomColor:var(--pf-c-options-menu__toggle--expanded--BorderBottomColor);border-bottom-width:var(--pf-c-options-menu__toggle--expanded--BorderBottomWidth)}.pf-c-options-menu__toggle.pf-m-plain{--pf-c-options-menu__toggle-icon--Color:var(--pf-c-options-menu--m-plain__toggle-icon--Color)}.pf-c-options-menu__toggle.pf-m-plain:not(.pf-m-text){--pf-c-options-menu__toggle--PaddingRight:var(--pf-c-options-menu__toggle--m-plain--PaddingRight);--pf-c-options-menu__toggle--PaddingLeft:var(--pf-c-options-menu__toggle--m-plain--PaddingLeft);color:var(--pf-c-options-menu__toggle--m-plain--Color);display:inline-block}.pf-c-options-menu__toggle.pf-m-plain:not(.pf-m-text) .pf-c-options-menu__toggle-button-icon{line-height:var(--pf-c-options-menu__toggle--LineHeight)}.pf-c-options-menu.pf-m-expanded>.pf-c-options-menu__toggle.pf-m-plain,.pf-c-options-menu__toggle.pf-m-plain.pf-m-active,.pf-c-options-menu__toggle.pf-m-plain:active,.pf-c-options-menu__toggle.pf-m-plain:focus,.pf-c-options-menu__toggle.pf-m-plain:hover{--pf-c-options-menu__toggle--m-plain--Color:var(--pf-c-options-menu__toggle--m-plain--hover--Color);--pf-c-options-menu--m-plain__toggle-icon--Color:var(--pf-c-options-menu--m-plain--hover__toggle-icon--Color)}.pf-c-options-menu__toggle.pf-m-plain.pf-m-disabled,.pf-c-options-menu__toggle.pf-m-plain:disabled{--pf-c-options-menu__toggle--m-plain--Color:var(--pf-c-options-menu__toggle--m-plain--disabled--Color)}.pf-c-options-menu__toggle.pf-m-disabled,.pf-c-options-menu__toggle:disabled{pointer-events:none}.pf-c-options-menu__toggle.pf-m-disabled.pf-m-text,.pf-c-options-menu__toggle.pf-m-disabled:not(.pf-m-plain),.pf-c-options-menu__toggle:disabled.pf-m-text,.pf-c-options-menu__toggle:disabled:not(.pf-m-plain){--pf-c-options-menu__toggle--BackgroundColor:var(--pf-c-options-menu__toggle--disabled--BackgroundColor)}.pf-c-options-menu__toggle.pf-m-disabled:before,.pf-c-options-menu__toggle:disabled:before{border:0}.pf-c-options-menu__toggle-button-icon{position:relative}.pf-c-options-menu__toggle-button{background-color:var(--pf-c-options-menu__toggle-button--BackgroundColor);border:0;padding:var(--pf-c-options-menu__toggle-button--PaddingTop) var(--pf-c-options-menu__toggle-button--PaddingRight) var(--pf-c-options-menu__toggle-button--PaddingBottom) var(--pf-c-options-menu__toggle-button--PaddingLeft)}.pf-c-options-menu__toggle-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-options-menu__toggle-button-icon,.pf-c-options-menu__toggle-icon{color:var(--pf-c-options-menu__toggle-icon--Color,inherit)}.pf-c-options-menu__toggle-icon{margin-left:var(--pf-c-options-menu__toggle-icon--MarginLeft);margin-right:var(--pf-c-options-menu__toggle-icon--MarginRight)}.pf-c-options-menu.pf-m-top.pf-m-expanded .pf-c-options-menu__toggle-icon{transform:rotate(var(--pf-c-options-menu--m-top--m-expanded__toggle-icon--Rotate))}.pf-c-options-menu__menu{background-clip:padding-box;background-color:var(--pf-c-options-menu__menu--BackgroundColor);box-shadow:var(--pf-c-options-menu__menu--BoxShadow);min-width:100%;padding-bottom:var(--pf-c-options-menu__menu--PaddingBottom);padding-top:var(--pf-c-options-menu__menu--PaddingTop);position:absolute;top:var(--pf-c-options-menu__menu--Top);z-index:var(--pf-c-options-menu__menu--ZIndex)}.pf-c-options-menu__menu.pf-m-align-right{right:0}.pf-c-options-menu.pf-m-top .pf-c-options-menu__menu{--pf-c-options-menu__menu--Top:var(--pf-c-options-menu--m-top__menu--Top);transform:translateY(var(--pf-c-options-menu--m-top__menu--TranslateY))}.pf-c-options-menu__menu.pf-m-static{--pf-c-options-menu--m-top__menu--TranslateY:0;bottom:auto;left:auto;min-width:min-content;position:static;right:auto;top:auto;z-index:auto}.pf-c-options-menu__menu-item{align-items:baseline;background-color:var(--pf-c-options-menu__menu-item--BackgroundColor);border:none;color:var(--pf-c-options-menu__menu-item--Color);display:flex;font-size:var(--pf-c-options-menu__menu-item--FontSize);padding:var(--pf-c-options-menu__menu-item--PaddingTop) var(--pf-c-options-menu__menu-item--PaddingRight) var(--pf-c-options-menu__menu-item--PaddingBottom) var(--pf-c-options-menu__menu-item--PaddingLeft);white-space:nowrap;width:100%}.pf-c-options-menu__menu-item:focus,.pf-c-options-menu__menu-item:hover{background-color:var(--pf-c-options-menu__menu-item--hover--BackgroundColor);text-decoration:none}.pf-c-options-menu__menu-item.pf-m-disabled,.pf-c-options-menu__menu-item:disabled{background-color:var(--pf-c-options-menu__menu-item--disabled--BackgroundColor);color:var(--pf-c-options-menu__menu-item--disabled--Color);pointer-events:none}.pf-c-options-menu__menu-item-icon{align-self:center;color:var(--pf-c-options-menu__menu-item-icon--Color);font-size:var(--pf-c-options-menu__menu-item-icon--FontSize);margin-left:auto;padding-left:var(--pf-c-options-menu__menu-item-icon--PaddingLeft);width:auto}.pf-c-options-menu__group+.pf-c-options-menu__group{padding-top:var(--pf-c-options-menu__group--group--PaddingTop)}.pf-c-options-menu__group-title{color:var(--pf-c-options-menu__group-title--Color);font-size:var(--pf-c-options-menu__group-title--FontSize);font-weight:var(--pf-c-options-menu__group-title--FontWeight);padding-bottom:var(--pf-c-options-menu__group-title--PaddingBottom);padding-left:var(--pf-c-options-menu__group-title--PaddingLeft);padding-right:var(--pf-c-options-menu__group-title--PaddingRight);padding-top:var(--pf-c-options-menu__group-title--PaddingTop)}:where(.pf-theme-dark) .pf-c-options-menu{--pf-c-options-menu__toggle--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-options-menu__toggle--BorderTopColor:transparent;--pf-c-options-menu__toggle--BorderRightColor:transparent;--pf-c-options-menu__toggle--BorderBottomColor:var(--pf-global--BorderColor--400);--pf-c-options-menu__toggle--BorderLeftColor:transparent;--pf-c-options-menu__toggle--disabled--BackgroundColor:var(--pf-global--palette--black-500);--pf-c-options-menu__menu--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-options-menu__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-options-menu__menu--Top:100%}:where(.pf-theme-dark) .pf-c-options-menu__toggle.pf-m-plain{background:transparent}.pf-c-timestamp{--pf-c-timestamp--FontSize:var(--pf-global--FontSize--sm);--pf-c-timestamp--Color:var(--pf-global--Color--200);--pf-c-timestamp--OutlineOffset:0.1875rem;--pf-c-timestamp--m-help-text--TextDecorationLine:underline;--pf-c-timestamp--m-help-text--TextDecorationStyle:dashed;--pf-c-timestamp--m-help-text--TextDecorationThickness:var(--pf-global--BorderWidth--sm);--pf-c-timestamp--m-help-text--TextUnderlineOffset:0.25rem;--pf-c-timestamp--m-help-text--TextDecorationColor:var(--pf-global--BorderColor--200);--pf-c-timestamp--m-help-text--hover--Color:var(--pf-global--Color--100);--pf-c-timestamp--m-help-text--focus--Color:var(--pf-global--Color--100);--pf-c-timestamp--m-help-text--hover--TextDecorationColor:var(--pf-global--Color--100);--pf-c-timestamp--m-help-text--focus--TextDecorationColor:var(--pf-global--Color--100);color:var(--pf-c-timestamp--Color);display:inline-block;font-size:var(--pf-c-timestamp--FontSize);outline-offset:var(--pf-c-timestamp--OutlineOffset)}.pf-c-timestamp.pf-m-help-text{cursor:pointer;text-decoration-color:var(--pf-c-timestamp--m-help-text--TextDecorationColor);text-decoration-line:var(--pf-c-timestamp--m-help-text--TextDecorationLine);text-decoration-style:var(--pf-c-timestamp--m-help-text--TextDecorationStyle);text-decoration-thickness:var(--pf-c-timestamp--m-help-text--TextDecorationThickness);text-underline-offset:var(--pf-c-timestamp--m-help-text--TextUnderlineOffset)}.pf-c-timestamp.pf-m-help-text:hover{--pf-c-timestamp--Color:var(--pf-c-timestamp--m-help-text--hover--Color);--pf-c-timestamp--m-help-text--TextDecorationColor:var(--pf-c-timestamp--m-help-text--hover--TextDecorationColor)}.pf-c-timestamp.pf-m-help-text:focus{--pf-c-timestamp--Color:var(--pf-c-timestamp--m-help-text--focus--Color);--pf-c-timestamp--m-help-text--TextDecorationColor:var(--pf-c-timestamp--m-help-text--focus--TextDecorationColor)}.pf-c-clipboard-copy{--pf-c-clipboard-copy__toggle-icon--Transition:.2s ease-in 0s;--pf-c-clipboard-copy--m-expanded__toggle-icon--Rotate:90deg;--pf-c-clipboard-copy__expandable-content--PaddingTop:var(--pf-global--spacer--md);--pf-c-clipboard-copy__expandable-content--PaddingRight:var(--pf-global--spacer--md);--pf-c-clipboard-copy__expandable-content--PaddingBottom:var(--pf-global--spacer--md);--pf-c-clipboard-copy__expandable-content--PaddingLeft:var(--pf-global--spacer--md);--pf-c-clipboard-copy__expandable-content--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-clipboard-copy__expandable-content--BorderTopWidth:0;--pf-c-clipboard-copy__expandable-content--BorderRightWidth:var(--pf-global--BorderWidth--sm);--pf-c-clipboard-copy__expandable-content--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-clipboard-copy__expandable-content--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-clipboard-copy__expandable-content--BorderColor:var(--pf-global--BorderColor--100);--pf-c-clipboard-copy__expandable-content--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-clipboard-copy--m-inline--PaddingTop:0;--pf-c-clipboard-copy--m-inline--PaddingBottom:0;--pf-c-clipboard-copy--m-inline--PaddingLeft:var(--pf-global--spacer--xs);--pf-c-clipboard-copy--m-inline--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-clipboard-copy__text--m-code--FontFamily:var(--pf-global--FontFamily--monospace);--pf-c-clipboard-copy__text--m-code--FontSize:var(--pf-global--FontSize--sm);--pf-c-clipboard-copy__actions-item--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-clipboard-copy__actions-item--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-clipboard-copy__actions-item--button--PaddingTop:var(--pf-global--spacer--xs);--pf-c-clipboard-copy__actions-item--button--PaddingRight:var(--pf-global--spacer--sm);--pf-c-clipboard-copy__actions-item--button--PaddingBottom:var(--pf-global--spacer--xs);--pf-c-clipboard-copy__actions-item--button--PaddingLeft:var(--pf-global--spacer--sm)}.pf-c-clipboard-copy.pf-m-expanded .pf-c-clipboard-copy__toggle-icon{transform:rotate(var(--pf-c-clipboard-copy--m-expanded__toggle-icon--Rotate))}.pf-c-clipboard-copy.pf-m-inline{background-color:var(--pf-c-clipboard-copy--m-inline--BackgroundColor);display:inline;padding-bottom:var(--pf-c-clipboard-copy--m-inline--PaddingBottom);padding-left:var(--pf-c-clipboard-copy--m-inline--PaddingLeft);padding-top:var(--pf-c-clipboard-copy--m-inline--PaddingTop);white-space:nowrap}.pf-c-clipboard-copy.pf-m-inline.pf-m-block{display:block}.pf-c-clipboard-copy__group{display:flex}.pf-c-clipboard-copy__group>*+*{margin-left:-1px}.pf-c-clipboard-copy__toggle-icon{transition:var(--pf-c-clipboard-copy__toggle-icon--Transition)}.pf-c-clipboard-copy__expandable-content{word-wrap:break-word;background-clip:padding-box;background-color:var(--pf-c-clipboard-copy__expandable-content--BackgroundColor);border:solid var(--pf-c-clipboard-copy__expandable-content--BorderColor);border-width:var(--pf-c-clipboard-copy__expandable-content--BorderTopWidth) var(--pf-c-clipboard-copy__expandable-content--BorderRightWidth) var(--pf-c-clipboard-copy__expandable-content--BorderBottomWidth) var(--pf-c-clipboard-copy__expandable-content--BorderLeftWidth);box-shadow:var(--pf-c-clipboard-copy__expandable-content--BoxShadow);padding:var(--pf-c-clipboard-copy__expandable-content--PaddingTop) var(--pf-c-clipboard-copy__expandable-content--PaddingRight) var(--pf-c-clipboard-copy__expandable-content--PaddingBottom) var(--pf-c-clipboard-copy__expandable-content--PaddingLeft)}.pf-c-clipboard-copy__expandable-content pre{white-space:pre-wrap}.pf-c-clipboard-copy__text{white-space:normal;word-break:break-word}.pf-c-clipboard-copy__text.pf-m-code{font-family:var(--pf-c-clipboard-copy__text--m-code--FontFamily);font-size:var(--pf-c-clipboard-copy__text--m-code--FontSize)}.pf-c-clipboard-copy__actions{display:inline-flex}.pf-c-clipboard-copy__actions-item{margin-bottom:calc(var(--pf-c-clipboard-copy__actions-item--button--PaddingBottom)*-1);margin-top:calc(var(--pf-c-clipboard-copy__actions-item--button--PaddingTop)*-1)}.pf-c-clipboard-copy__actions-item .pf-c-button{--pf-c-button--PaddingTop:var(--pf-c-clipboard-copy__actions-item--button--PaddingTop);--pf-c-button--PaddingRight:var(--pf-c-clipboard-copy__actions-item--button--PaddingRight);--pf-c-button--PaddingBottom:var(--pf-c-clipboard-copy__actions-item--button--PaddingBottom);--pf-c-button--PaddingLeft:var(--pf-c-clipboard-copy__actions-item--button--PaddingLeft)}:where(.pf-theme-dark) .pf-c-clipboard-copy{--pf-c-clipboard-copy__expandable-content--BackgroundColor:var(--pf-global--BackgroundColor--400)}:where(.pf-theme-dark) .pf-c-clipboard-copy__group>*+*{border-left:1px solid var(--pf-global--palette--black-700)!important;margin-left:0}:where(.pf-theme-dark) .pf-c-clipboard-copy__expandable-content{border:0}.pf-c-accordion{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100);--pf-c-accordion--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-accordion__toggle--PaddingTop:var(--pf-global--spacer--sm);--pf-c-accordion__toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-accordion__toggle--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-accordion__toggle--PaddingLeft:var(--pf-global--spacer--md);--pf-c-accordion__toggle--before--BackgroundColor:transparent;--pf-c-accordion__toggle--before--Top:0;--pf-c-accordion__toggle--hover--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-accordion__toggle--focus--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-accordion__toggle--active--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-accordion__toggle--before--Width:var(--pf-global--BorderWidth--lg);--pf-c-accordion__toggle--m-expanded--before--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-accordion__toggle-text--MaxWidth:calc(100% - var(--pf-global--spacer--lg));--pf-c-accordion__toggle--hover__toggle-text--Color:var(--pf-global--link--Color);--pf-c-accordion__toggle--active__toggle-text--Color:var(--pf-global--link--Color);--pf-c-accordion__toggle--active__toggle-text--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-accordion__toggle--focus__toggle-text--Color:var(--pf-global--link--Color);--pf-c-accordion__toggle--focus__toggle-text--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-accordion__toggle--m-expanded__toggle-text--Color:var(--pf-global--link--Color);--pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight:var(--pf-global--FontWeight--semi-bold);--pf-c-accordion__toggle-icon--Transition:.2s ease-in 0s;--pf-c-accordion__toggle--m-expanded__toggle-icon--Rotate:90deg;--pf-c-accordion__expanded-content--Color:var(--pf-global--Color--200);--pf-c-accordion__expanded-content--FontSize:var(--pf-global--FontSize--sm);--pf-c-accordion__expanded-content--m-expanded__expanded-content-body--before--BackgroundColor:var(--pf-global--primary-color--100);--pf-c-accordion__expanded-content--m-fixed--MaxHeight:9.375rem;--pf-c-accordion__expanded-content-body--PaddingTop:var(--pf-global--spacer--sm);--pf-c-accordion__expanded-content-body--PaddingRight:var(--pf-global--spacer--md);--pf-c-accordion__expanded-content-body--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-accordion__expanded-content-body--PaddingLeft:var(--pf-global--spacer--md);--pf-c-accordion__expanded-content-body--expanded-content-body--PaddingTop:0;--pf-c-accordion__expanded-content-body--before--BackgroundColor:transparent;--pf-c-accordion__expanded-content-body--before--Width:var(--pf-global--BorderWidth--lg);--pf-c-accordion__expanded-content-body--before--Top:0;--pf-c-accordion--m-display-lg__toggle--PaddingTop:var(--pf-global--spacer--md);--pf-c-accordion--m-display-lg__toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-accordion--m-display-lg__toggle--PaddingBottom:var(--pf-global--spacer--md);--pf-c-accordion--m-display-lg__toggle--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-accordion--m-display-lg__toggle--FontFamily:var(--pf-global--FontFamily--heading--sans-serif);--pf-c-accordion--m-display-lg__toggle--FontSize:var(--pf-global--FontSize--xl);--pf-c-accordion--m-display-lg__toggle--hover__toggle-text--Color:var(--pf-global--Color--100);--pf-c-accordion--m-display-lg__toggle--active__toggle-text--Color:var(--pf-global--Color--100);--pf-c-accordion--m-display-lg__toggle--active__toggle-text--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-accordion--m-display-lg__toggle--focus__toggle-text--Color:var(--pf-global--Color--100);--pf-c-accordion--m-display-lg__toggle--focus__toggle-text--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-accordion--m-display-lg__toggle--m-expanded__toggle-text--Color:var(--pf-global--Color--100);--pf-c-accordion--m-display-lg__toggle--m-expanded__toggle-text--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-accordion--m-display-lg__expanded-content--FontSize:var(--pf-global--FontSize--md);--pf-c-accordion--m-display-lg__expanded-content--Color:var(--pf-global--Color--100);--pf-c-accordion--m-display-lg__expanded-content-body--PaddingTop:0;--pf-c-accordion--m-display-lg__expanded-content-body--PaddingRight:var(--pf-global--spacer--md);--pf-c-accordion--m-display-lg__expanded-content-body--PaddingBottom:var(--pf-global--spacer--md);--pf-c-accordion--m-display-lg__expanded-content-body--last-child--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-accordion--m-display-lg__expanded-content-body--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-accordion--m-bordered--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-accordion--m-bordered--BorderTopColor:var(--pf-global--BorderColor--100);--pf-c-accordion--m-bordered__toggle--before--Top:calc(var(--pf-global--BorderWidth--sm)*-1);--pf-c-accordion--m-bordered__toggle--after--BorderColor:var(--pf-global--BorderColor--100);--pf-c-accordion--m-bordered__toggle--after--BorderTopWidth:0;--pf-c-accordion--m-bordered__toggle--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-accordion--m-bordered__expanded-content--m-expanded__expanded-content-body--last-child--after--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-accordion--m-bordered__expanded-content--m-expanded__expanded-content-body--last-child--after--BorderBottomColor:var(--pf-global--BorderColor--100);background-color:var(--pf-c-accordion--BackgroundColor);color:var(--pf-global--Color--100)}.pf-c-accordion.pf-m-display-lg{--pf-c-accordion__toggle--PaddingTop:var(--pf-c-accordion--m-display-lg__toggle--PaddingTop);--pf-c-accordion__toggle--PaddingRight:var(--pf-c-accordion--m-display-lg__toggle--PaddingRight);--pf-c-accordion__toggle--PaddingBottom:var(--pf-c-accordion--m-display-lg__toggle--PaddingBottom);--pf-c-accordion__toggle--PaddingLeft:var(--pf-c-accordion--m-display-lg__toggle--PaddingLeft);--pf-c-accordion__toggle--FontFamily:var(--pf-c-accordion--m-display-lg__toggle--FontFamily);--pf-c-accordion__toggle--FontSize:var(--pf-c-accordion--m-display-lg__toggle--FontSize);--pf-c-accordion__toggle--hover__toggle-text--Color:var(--pf-c-accordion--m-display-lg__toggle--hover__toggle-text--Color);--pf-c-accordion__toggle--active__toggle-text--Color:var(--pf-c-accordion--m-display-lg__toggle--active__toggle-text--Color);--pf-c-accordion__toggle--active__toggle-text--FontWeight:var(--pf-c-accordion--m-display-lg__toggle--active__toggle-text--FontWeight);--pf-c-accordion__toggle--focus__toggle-text--Color:var(--pf-c-accordion--m-display-lg__toggle--focus__toggle-text--Color);--pf-c-accordion__toggle--focus__toggle-text--FontWeight:var(--pf-c-accordion--m-display-lg__toggle--focus__toggle-text--FontWeight);--pf-c-accordion__toggle--m-expanded__toggle-text--Color:var(--pf-c-accordion--m-display-lg__toggle--m-expanded__toggle-text--Color);--pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight:var(--pf-c-accordion--m-display-lg__toggle--m-expanded__toggle-text--FontWeight);--pf-c-accordion__expanded-content-body--PaddingTop:var(--pf-c-accordion--m-display-lg__expanded-content-body--PaddingTop);--pf-c-accordion__expanded-content-body--PaddingRight:var(--pf-c-accordion--m-display-lg__expanded-content-body--PaddingRight);--pf-c-accordion__expanded-content-body--PaddingBottom:var(--pf-c-accordion--m-display-lg__expanded-content-body--PaddingBottom);--pf-c-accordion__expanded-content-body--PaddingLeft:var(--pf-c-accordion--m-display-lg__expanded-content-body--PaddingLeft);--pf-c-accordion__expanded-content--FontSize:var(--pf-c-accordion--m-display-lg__expanded-content--FontSize);--pf-c-accordion__expanded-content--Color:var(--pf-c-accordion--m-display-lg__expanded-content--Color)}.pf-c-accordion.pf-m-display-lg .pf-c-accordion__expanded-content-body:last-child{--pf-c-accordion__expanded-content-body--PaddingBottom:var(--pf-c-accordion--m-display-lg__expanded-content-body--last-child--PaddingBottom)}.pf-c-accordion.pf-m-bordered{--pf-c-accordion__toggle--before--Top:var(--pf-c-accordion--m-bordered__toggle--before--Top);border-top:var(--pf-c-accordion--m-bordered--BorderTopWidth) solid var(--pf-c-accordion--m-bordered--BorderTopColor)}.pf-c-accordion.pf-m-bordered .pf-c-accordion__toggle:before{border:solid var(--pf-c-accordion--m-bordered__toggle--after--BorderColor);border-width:var(--pf-c-accordion--m-bordered__toggle--after--BorderTopWidth) 0 var(--pf-c-accordion--m-bordered__toggle--after--BorderBottomWidth);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.pf-c-accordion.pf-m-bordered .pf-c-accordion__toggle.pf-m-expanded{--pf-c-accordion--m-bordered__toggle--after--BorderBottomWidth:0}.pf-c-accordion.pf-m-bordered .pf-c-accordion__expanded-content.pf-m-expanded .pf-c-accordion__expanded-content-body:last-child:before{border-bottom:var(--pf-c-accordion--m-bordered__expanded-content--m-expanded__expanded-content-body--last-child--after--BorderBottomWidth) solid var(--pf-c-accordion--m-bordered__expanded-content--m-expanded__expanded-content-body--last-child--after--BorderBottomColor);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-accordion__toggle{align-items:center;border:0;display:flex;font-family:var(--pf-c-accordion__toggle--FontFamily,inherit);font-size:var(--pf-c-accordion__toggle--FontSize,inherit);justify-content:space-between;padding:var(--pf-c-accordion__toggle--PaddingTop) var(--pf-c-accordion__toggle--PaddingRight) var(--pf-c-accordion__toggle--PaddingBottom) var(--pf-c-accordion__toggle--PaddingLeft);position:relative;width:100%}.pf-c-accordion__toggle:after{background-color:var(--pf-c-accordion__toggle--before--BackgroundColor);bottom:0;content:"";left:0;position:absolute;top:var(--pf-c-accordion__toggle--before--Top);width:var(--pf-c-accordion__toggle--before--Width)}.pf-c-accordion__toggle.pf-m-expanded{--pf-c-accordion__toggle--before--BackgroundColor:var(--pf-c-accordion__toggle--m-expanded--before--BackgroundColor)}.pf-c-accordion__toggle.pf-m-expanded .pf-c-accordion__toggle-text{color:var(--pf-c-accordion__toggle--m-expanded__toggle-text--Color);font-weight:var(--pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight)}.pf-c-accordion__toggle.pf-m-expanded .pf-c-accordion__toggle-icon{transform:rotate(var(--pf-c-accordion__toggle--m-expanded__toggle-icon--Rotate))}.pf-c-accordion__toggle:hover{background-color:var(--pf-c-accordion__toggle--hover--BackgroundColor)}.pf-c-accordion__toggle:hover .pf-c-accordion__toggle-text{color:var(--pf-c-accordion__toggle--hover__toggle-text--Color)}.pf-c-accordion__toggle:focus{background-color:var(--pf-c-accordion__toggle--focus--BackgroundColor)}.pf-c-accordion__toggle:focus .pf-c-accordion__toggle-text{color:var(--pf-c-accordion__toggle--focus__toggle-text--Color);font-weight:var(--pf-c-accordion__toggle--focus__toggle-text--FontWeight)}.pf-c-accordion__toggle:active{background-color:var(--pf-c-accordion__toggle--active--BackgroundColor)}.pf-c-accordion__toggle:active .pf-c-accordion__toggle-text{color:var(--pf-c-accordion__toggle--active__toggle-text--Color);font-weight:var(--pf-c-accordion__toggle--active__toggle-text--FontWeight)}.pf-c-accordion__toggle-text{max-width:var(--pf-c-accordion__toggle-text--MaxWidth);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-accordion__toggle-icon{transition:var(--pf-c-accordion__toggle-icon--Transition)}.pf-c-accordion__expanded-content{color:var(--pf-c-accordion__expanded-content--Color);font-size:var(--pf-c-accordion__expanded-content--FontSize)}.pf-c-accordion__expanded-content.pf-m-fixed{max-height:var(--pf-c-accordion__expanded-content--m-fixed--MaxHeight);overflow-y:auto}.pf-c-accordion__expanded-content.pf-m-expanded{--pf-c-accordion__expanded-content-body--before--BackgroundColor:var(--pf-c-accordion__expanded-content--m-expanded__expanded-content-body--before--BackgroundColor)}.pf-c-accordion__expanded-content-body{padding:var(--pf-c-accordion__expanded-content-body--PaddingTop) var(--pf-c-accordion__expanded-content-body--PaddingRight) var(--pf-c-accordion__expanded-content-body--PaddingBottom) var(--pf-c-accordion__expanded-content-body--PaddingLeft);position:relative}.pf-c-accordion__expanded-content-body:after{background-color:var(--pf-c-accordion__expanded-content-body--before--BackgroundColor);bottom:0;content:"";left:0;position:absolute;top:0;width:var(--pf-c-accordion__expanded-content-body--before--Width)}.pf-c-accordion__expanded-content-body+.pf-c-accordion__expanded-content-body{--pf-c-accordion__expanded-content-body--PaddingTop:var(--pf-c-accordion__expanded-content-body--expanded-content-body--PaddingTop)}:where(.pf-theme-dark) .pf-c-accordion{--pf-c-accordion__toggle--hover--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-accordion__toggle--focus--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-accordion__toggle--active--BackgroundColor:var(--pf-global--BackgroundColor--300)}.pf-c-tree-view{--pf-c-tree-view--PaddingTop:var(--pf-global--spacer--sm);--pf-c-tree-view--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tree-view__node--indent--base:calc(var(--pf-global--spacer--md)*2 + var(--pf-c-tree-view__node-toggle-icon--MinWidth));--pf-c-tree-view__node--nested-indent--base:calc(var(--pf-c-tree-view__node--indent--base) - var(--pf-global--spacer--md));--pf-c-tree-view__node--PaddingTop--base:var(--pf-global--spacer--sm);--pf-c-tree-view__node--PaddingTop:var(--pf-c-tree-view__node--PaddingTop--base);--pf-c-tree-view__node--PaddingRight:var(--pf-global--spacer--sm);--pf-c-tree-view__node--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tree-view__node--PaddingLeft:var(--pf-c-tree-view__node--indent--base);--pf-c-tree-view__node--Color:var(--pf-global--Color--100);--pf-c-tree-view__node--m-current--Color:var(--pf-global--link--Color);--pf-c-tree-view__node--m-current--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-tree-view__node-container--Display:contents;--pf-c-tree-view__node-content--RowGap:var(--pf-global--spacer--sm);--pf-c-tree-view__node-content--Overflow:visible;--pf-c-tree-view__node--hover--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-tree-view__node--focus--BackgroundColor:var(--pf-global--palette--black-200);--pf-c-tree-view__list-item__list-item__node-toggle--Top:var(--pf-c-tree-view__node--PaddingTop--base);--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__list-item__list-item__node-toggle--TranslateX:-100%;--pf-c-tree-view__node-toggle--Position:absolute;--pf-c-tree-view__node-toggle--Color--base:var(--pf-global--Color--200);--pf-c-tree-view__node-toggle--Color:var(--pf-c-tree-view__node-toggle--Color--base);--pf-c-tree-view__node-toggle--hover--Color:var(--pf-global--Color--100);--pf-c-tree-view__node-toggle--focus--Color:var(--pf-global--Color--100);--pf-c-tree-view__node-toggle--active--Color:var(--pf-global--Color--100);--pf-c-tree-view__list-item--m-expanded__node-toggle--Color:var(--pf-global--Color--100);--pf-c-tree-view__node-toggle-icon--MinWidth:var(--pf-global--FontSize--md);--pf-c-tree-view__node-toggle-icon--Transition:transform var(--pf-global--TransitionDuration) var(--pf-global--TimingFunction);--pf-c-tree-view__node-toggle-button--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-tree-view__node-toggle-button--PaddingRight:var(--pf-global--spacer--md);--pf-c-tree-view__node-toggle-button--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-tree-view__node-toggle-button--PaddingLeft:var(--pf-global--spacer--md);--pf-c-tree-view__node-toggle-button--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-tree-view__node-toggle-button--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-tree-view__node-check--MarginRight:var(--pf-global--spacer--sm);--pf-c-tree-view__node-count--MarginLeft:var(--pf-global--spacer--sm);--pf-c-tree-view__node-count--c-badge--m-read--BackgroundColor:var(--pf-global--disabled-color--200);--pf-c-tree-view__search--PaddingTop:var(--pf-global--spacer--sm);--pf-c-tree-view__search--PaddingRight:var(--pf-global--spacer--sm);--pf-c-tree-view__search--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tree-view__search--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-tree-view__node-icon--PaddingRight:var(--pf-global--spacer--sm);--pf-c-tree-view__node-icon--Color:var(--pf-global--icon--Color--light);--pf-c-tree-view__node-toggle-icon--base--Rotate:0;--pf-c-tree-view__node-toggle-icon--Rotate:var(--pf-c-tree-view__node-toggle-icon--base--Rotate);--pf-c-tree-view__list-item--m-expanded__node-toggle-icon--Rotate:90deg;--pf-c-tree-view__node-text--max-lines:1;--pf-c-tree-view__node-title--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-tree-view__action--MarginLeft:var(--pf-global--spacer--md);--pf-c-tree-view__action--focus--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-tree-view__action--Color:var(--pf-global--icon--Color--light);--pf-c-tree-view__action--hover--Color:var(--pf-global--icon--Color--dark);--pf-c-tree-view__action--focus--Color:var(--pf-global--icon--Color--dark);--pf-c-tree-view--m-guides--guide--Left:var(--pf-c-tree-view--m-guides--guide-left--base);--pf-c-tree-view--m-guides--guide-color--base:var(--pf-global--BorderColor--100);--pf-c-tree-view--m-guides--guide-width--base:var(--pf-global--BorderWidth--sm);--pf-c-tree-view--m-guides--guide-left--base:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides__list-node--guide-width--base));--pf-c-tree-view--m-guides--guide-left--base--offset:calc(var(--pf-c-tree-view__list-item__list-item__node-toggle--Left) + var(--pf-c-tree-view__node-toggle-icon--MinWidth)/2);--pf-c-tree-view--m-guides__list-node--guide-width--base:var(--pf-global--spacer--lg);--pf-c-tree-view--m-guides__list-item--before--Top:0;--pf-c-tree-view--m-guides__list-item--before--Width:var(--pf-c-tree-view--m-guides--guide-width--base);--pf-c-tree-view--m-guides__list-item--before--Height:100%;--pf-c-tree-view--m-guides__list-item--before--BackgroundColor:var(--pf-c-tree-view--m-guides--guide-color--base);--pf-c-tree-view--m-guides__list-item--last-child--before--Top:var(--pf-c-tree-view--m-guides__node--before--Top);--pf-c-tree-view--m-guides__list-item--last-child--before--Height:var(--pf-c-tree-view--m-guides__list-item--last-child--before--Top);--pf-c-tree-view--m-guides__list-item--ZIndex:var(--pf-global--ZIndex--xs);--pf-c-tree-view--m-guides__node--before--Width:1rem;--pf-c-tree-view--m-guides__node--before--Height:var(--pf-c-tree-view--m-guides--guide-width--base);--pf-c-tree-view--m-guides__node--before--Top:1.125rem;--pf-c-tree-view--m-guides__node--before--BackgroundColor:var(--pf-c-tree-view--m-guides--guide-color--base);--pf-c-tree-view--m-compact--base-border--Left--offset:var(--pf-global--spacer--md);--pf-c-tree-view--m-compact--base-border--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact__node--indent--base:var(--pf-c-tree-view__node--indent--base);--pf-c-tree-view--m-compact__node--nested-indent--base:var(--pf-global--spacer--lg);--pf-c-tree-view--m-compact--border--Left:var(--pf-c-tree-view--m-compact--base-border--Left);--pf-c-tree-view--m-compact__node--PaddingTop:0;--pf-c-tree-view--m-compact__node--PaddingBottom:0;--pf-c-tree-view--m-compact__node--nested--PaddingTop:var(--pf-global--spacer--sm);--pf-c-tree-view--m-compact__node--nested--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-tree-view--m-compact__list-item__list-item__node-toggle--Top:calc(var(--pf-c-tree-view--m-compact__node-container--PaddingTop));--pf-c-tree-view--m-compact__list-item--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-tree-view--m-compact__list-item--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-tree-view--m-compact__list-item--before--Top:0;--pf-c-tree-view--m-compact__list-item--last-child--before--Height:var(--pf-c-tree-view--m-compact__node--before--Top);--pf-c-tree-view--m-compact__list-item--nested--before--Top:calc(var(--pf-c-tree-view__node--PaddingTop--base)*-1);--pf-c-tree-view--m-compact__list-item--nested--last-child--before--Height:calc(var(--pf-c-tree-view--m-compact__node--before--Top) + var(--pf-c-tree-view__node--PaddingTop--base));--pf-c-tree-view--m-compact__node--PaddingLeft:var(--pf-c-tree-view--m-compact__node--indent--base);--pf-c-tree-view--m-compact__node--before--Top:calc(var(--pf-c-tree-view--m-compact__node-container--PaddingTop) + var(--pf-c-tree-view--m-compact__node--nested--PaddingTop) + 0.25rem);--pf-c-tree-view--m-compact__node--level-2--PaddingLeft:var(--pf-c-tree-view--m-compact__node--indent--base);--pf-c-tree-view--m-compact__node-toggle--nested--MarginRight:calc(var(--pf-c-tree-view__node-toggle-button--PaddingLeft)*-0.5);--pf-c-tree-view--m-compact__node-toggle--nested--MarginLeft:calc(var(--pf-c-tree-view__node-toggle-button--PaddingLeft)*-1.5);--pf-c-tree-view--m-compact__node-container--Display:flex;--pf-c-tree-view--m-compact__node-container--PaddingBottom--base:var(--pf-global--spacer--lg);--pf-c-tree-view--m-compact__node-container--PaddingTop:var(--pf-global--spacer--lg);--pf-c-tree-view--m-compact__node-container--PaddingRight:var(--pf-global--spacer--lg);--pf-c-tree-view--m-compact__node-container--PaddingBottom:var(--pf-c-tree-view--m-compact__node-container--PaddingBottom--base);--pf-c-tree-view--m-compact__node-container--PaddingLeft:var(--pf-global--spacer--xs);--pf-c-tree-view--m-compact__node-container--nested--PaddingTop:var(--pf-global--spacer--md);--pf-c-tree-view--m-compact__node-container--nested--PaddingRight:var(--pf-global--spacer--lg);--pf-c-tree-view--m-compact__node-container--nested--PaddingBottom:var(--pf-global--spacer--md);--pf-c-tree-view--m-compact__node-container--nested--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-tree-view--m-compact__node-container--nested--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-tree-view--m-compact__list-item--m-expanded__node-container--PaddingBottom:0;--pf-c-tree-view--m-no-background__node-container--BackgroundColor:transparent;--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset:var(--pf-global--spacer--sm);--pf-c-tree-view--m-compact--m-no-background--base-border--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--indent--base:var(--pf-c-tree-view__node--indent--base);--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base:var(--pf-global--spacer--2xl);--pf-c-tree-view--m-compact--m-no-background__node--nested--PaddingTop:0;--pf-c-tree-view--m-compact--m-no-background__node--nested--PaddingBottom:0;--pf-c-tree-view--m-compact--m-no-background__node--before--Top:calc(var(--pf-c-tree-view--m-compact__node-container--nested--PaddingTop) + var(--pf-c-tree-view--m-compact__node--nested--PaddingTop) + 0.25rem);padding-bottom:var(--pf-c-tree-view--PaddingBottom);padding-top:var(--pf-c-tree-view--PaddingTop)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item{position:relative}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node:before,.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item:before,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node:before,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item .pf-c-tree-view__list-item:before{content:"";left:var(--pf-c-tree-view--m-guides--guide--Left);position:absolute}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item:before,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item .pf-c-tree-view__list-item:before{background-color:var(--pf-c-tree-view--m-guides__list-item--before--BackgroundColor);height:var(--pf-c-tree-view--m-guides__list-item--before--Height);top:var(--pf-c-tree-view--m-guides__list-item--before--Top);width:var(--pf-c-tree-view--m-guides__list-item--before--Width);z-index:var(--pf-c-tree-view--m-guides__list-item--ZIndex)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node:before,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node:before{background-color:var(--pf-c-tree-view--m-guides__node--before--BackgroundColor);height:var(--pf-c-tree-view--m-guides__node--before--Height);top:var(--pf-c-tree-view--m-guides__node--before--Top);width:var(--pf-c-tree-view--m-guides__node--before--Width)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item:last-child:before,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item .pf-c-tree-view__list-item:last-child:before{height:var(--pf-c-tree-view--m-guides__list-item--last-child--before--Height)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view--m-guides--guide--Left:var(--pf-c-tree-view--m-guides--border--nested--Left)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item:last-child,.pf-c-tree-view.pf-m-guides .pf-c-tree-view__list-item:last-child{--pf-c-tree-view--m-compact__list-item--BorderBottomWidth:0}.pf-c-tree-view.pf-m-compact{--pf-c-tree-view__node--PaddingTop:var(--pf-c-tree-view--m-compact__node--PaddingTop);--pf-c-tree-view__node--PaddingBottom:var(--pf-c-tree-view--m-compact__node--PaddingBottom);--pf-c-tree-view__node-container--Display:var(--pf-c-tree-view--m-compact__node-container--Display);--pf-c-tree-view__node--hover--BackgroundColor:transparent;--pf-c-tree-view__node--focus--BackgroundColor:transparent;--pf-c-tree-view__list-item__list-item__node-toggle--Top:var(--pf-c-tree-view--m-compact__list-item__list-item__node-toggle--Top)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item{border-bottom:var(--pf-c-tree-view--m-compact__list-item--BorderBottomWidth) solid var(--pf-c-tree-view--m-compact__list-item--BorderBottomColor)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item.pf-m-expanded{--pf-c-tree-view--m-compact__node-container--PaddingBottom:var(--pf-c-tree-view--m-compact__list-item--m-expanded__node-container--PaddingBottom)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__node--PaddingTop:var(--pf-c-tree-view--m-compact__node--nested--PaddingTop);--pf-c-tree-view__node--PaddingBottom:var(--pf-c-tree-view--m-compact__node--nested--PaddingBottom);--pf-c-tree-view__node-toggle--Position:static;--pf-c-tree-view__node--PaddingLeft:var(--pf-c-tree-view--m-compact__node--level-2--PaddingLeft);--pf-c-tree-view__list-item__list-item__node-toggle--TranslateX:0;--pf-c-tree-view--m-compact__list-item--BorderBottomWidth:0;--pf-c-tree-view--m-compact__node-container--PaddingBottom:var(--pf-c-tree-view--m-compact__node-container--PaddingBottom--base)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node:before,.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item:before{left:var(--pf-c-tree-view--m-compact--border--Left)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item:before{top:var(--pf-c-tree-view--m-compact__list-item--before--Top)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node:before{top:var(--pf-c-tree-view--m-compact__node--before--Top)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item:last-child:before{height:var(--pf-c-tree-view--m-compact__list-item--last-child--before--Height)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__node--PaddingLeft:var(--pf-c-tree-view--m-compact__node--PaddingLeft);--pf-c-tree-view--m-compact--border--Left:var(--pf-c-tree-view--m-compact--border--nested--Left);--pf-c-tree-view--m-compact__list-item--before--Top:var(--pf-c-tree-view--m-compact__list-item--nested--before--Top);--pf-c-tree-view--m-compact__list-item--last-child--before--Height:var(--pf-c-tree-view--m-compact__list-item--nested--last-child--before--Height)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node-container{background-color:var(--pf-c-tree-view--m-compact__node-container--nested--BackgroundColor);padding:var(--pf-c-tree-view--m-compact__node-container--nested--PaddingTop) var(--pf-c-tree-view--m-compact__node-container--nested--PaddingRight) var(--pf-c-tree-view--m-compact__node-container--nested--PaddingBottom) var(--pf-c-tree-view--m-compact__node-container--nested--PaddingLeft)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node-toggle{margin-left:var(--pf-c-tree-view--m-compact__node-toggle--nested--MarginLeft);margin-right:var(--pf-c-tree-view--m-compact__node-toggle--nested--MarginRight)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__node-container{padding:var(--pf-c-tree-view--m-compact__node-container--PaddingTop) var(--pf-c-tree-view--m-compact__node-container--PaddingRight) var(--pf-c-tree-view--m-compact__node-container--PaddingBottom) var(--pf-c-tree-view--m-compact__node-container--PaddingLeft)}.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item:not([aria-expanded])>.pf-c-tree-view__content>.pf-c-tree-view__node,.pf-c-tree-view.pf-m-compact .pf-c-tree-view__list-item:not([aria-expanded])>.pf-c-tree-view__content>.pf-c-tree-view__node>.pf-c-tree-view__node-container{cursor:default}.pf-c-tree-view.pf-m-compact.pf-m-no-background{--pf-c-tree-view--m-compact__node--before--Top:var(--pf-c-tree-view--m-compact--m-no-background__node--before--Top)}.pf-c-tree-view.pf-m-compact.pf-m-no-background .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__node--PaddingTop:var(--pf-c-tree-view--m-compact--m-no-background__node--nested--PaddingTop);--pf-c-tree-view__node--PaddingBottom:var(--pf-c-tree-view--m-compact--m-no-background__node--nested--PaddingBottom)}.pf-c-tree-view.pf-m-compact.pf-m-no-background .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view--m-compact--border--Left:var(--pf-c-tree-view--m-compact--m-no-background--border--nested--Left);--pf-c-tree-view__node--PaddingLeft:var(--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft)}.pf-c-tree-view.pf-m-no-background{--pf-c-tree-view--m-compact__node-container--nested--BackgroundColor:var(--pf-c-tree-view--m-no-background__node-container--BackgroundColor)}.pf-c-tree-view__node-toggle-icon{display:inline-block;min-width:var(--pf-c-tree-view__node-toggle-icon--MinWidth);text-align:center;transform:rotate(var(--pf-c-tree-view__node-toggle-icon--Rotate));transition:var(--pf-c-tree-view__node-toggle-icon--Transition)}.pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__node-toggle-icon--Rotate:var(--pf-c-tree-view__node-toggle-icon--base--Rotate);--pf-c-tree-view__node-toggle--Color:var(--pf-c-tree-view__node-toggle--Color--base)}.pf-c-tree-view__list-item.pf-m-expanded{--pf-c-tree-view__node-toggle--Color:var(--pf-c-tree-view__list-item--m-expanded__node-toggle--Color);--pf-c-tree-view__node-toggle-icon--Rotate:var(--pf-c-tree-view__list-item--m-expanded__node-toggle-icon--Rotate)}.pf-c-tree-view__node,.pf-c-tree-view__node-container{align-items:flex-start;border:0;cursor:pointer;flex:1 1;min-width:0;text-align:left}.pf-c-tree-view__node{color:var(--pf-c-tree-view__node--Color);display:flex;padding:var(--pf-c-tree-view__node--PaddingTop) var(--pf-c-tree-view__node--PaddingRight) var(--pf-c-tree-view__node--PaddingBottom) var(--pf-c-tree-view__node--PaddingLeft);position:relative}.pf-c-tree-view__node.pf-m-current{--pf-c-tree-view__node--Color:var(--pf-c-tree-view__node--m-current--Color);font-weight:var(--pf-c-tree-view__node--m-current--FontWeight)}.pf-c-tree-view__node:focus{background-color:var(--pf-c-tree-view__node--focus--BackgroundColor)}.pf-c-tree-view__node .pf-c-tree-view__node-count{margin-left:var(--pf-c-tree-view__node-count--MarginLeft)}.pf-c-tree-view__node .pf-c-tree-view__node-count .pf-c-badge.pf-m-read{--pf-c-badge--m-read--BackgroundColor:var(--pf-c-tree-view__node-count--c-badge--m-read--BackgroundColor)}.pf-c-tree-view__node.pf-m-selectable .pf-c-tree-view__node-toggle:hover,.pf-c-tree-view__node:not(.pf-m-selectable):hover{--pf-c-tree-view__node-toggle--Color:var(--pf-c-tree-view__node-toggle--hover--Color)}.pf-c-tree-view__node.pf-m-selectable .pf-c-tree-view__node-toggle:focus,.pf-c-tree-view__node:not(.pf-m-selectable):focus{--pf-c-tree-view__node-toggle--Color:var(--pf-c-tree-view__node-toggle--focus--Color)}.pf-c-tree-view__node.pf-m-selectable .pf-c-tree-view__node-toggle:active,.pf-c-tree-view__node:not(.pf-m-selectable):active{--pf-c-tree-view__node-toggle--Color:var(--pf-c-tree-view__node-toggle--active--Color)}.pf-c-tree-view__node-container{display:var(--pf-c-tree-view__node-container--Display);flex-grow:1}.pf-c-tree-view__node-content{display:flex;flex-direction:column;overflow:var(--pf-c-tree-view__node-content--Overflow)}.pf-c-tree-view__node-content>*+*{margin-top:var(--pf-c-tree-view__node-content--RowGap)}.pf-c-tree-view__node-check{margin-right:var(--pf-c-tree-view__node-check--MarginRight)}.pf-c-tree-view__node-toggle{align-items:center;border:0;color:var(--pf-c-tree-view__node-toggle--Color);display:inline-flex;justify-content:center;left:var(--pf-c-tree-view__list-item__list-item__node-toggle--Left);margin-bottom:var(--pf-c-tree-view__node-toggle-button--MarginBottom);margin-top:var(--pf-c-tree-view__node-toggle-button--MarginTop);padding:var(--pf-c-tree-view__node-toggle-button--PaddingTop) var(--pf-c-tree-view__node-toggle-button--PaddingRight) var(--pf-c-tree-view__node-toggle-button--PaddingBottom) var(--pf-c-tree-view__node-toggle-button--PaddingLeft);position:var(--pf-c-tree-view__node-toggle--Position);top:var(--pf-c-tree-view__list-item__list-item__node-toggle--Top);transform:translateX(var(--pf-c-tree-view__list-item__list-item__node-toggle--TranslateX))}.pf-c-tree-view.pf-m-truncate .pf-c-tree-view__node-text,.pf-c-tree-view.pf-m-truncate .pf-c-tree-view__node-title,.pf-c-tree-view__node-text.pf-m-truncate,.pf-c-tree-view__node-title.pf-m-truncate{--pf-c-tree-view__node-content--Overflow:hidden;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-tree-view__node-text{border:0;color:inherit;font-weight:inherit;text-align:left}label.pf-c-tree-view__node-text{cursor:pointer}.pf-c-tree-view__node-title{font-weight:var(--pf-c-tree-view__node-title--FontWeight)}.pf-c-tree-view__search{padding:var(--pf-c-tree-view__search--PaddingTop) var(--pf-c-tree-view__search--PaddingRight) var(--pf-c-tree-view__search--PaddingBottom) var(--pf-c-tree-view__search--PaddingLeft)}.pf-c-tree-view__node-icon{color:var(--pf-c-tree-view__node-icon--Color);padding-right:var(--pf-c-tree-view__node-icon--PaddingRight)}.pf-c-tree-view__content{align-items:center;display:flex}.pf-c-tree-view__content:focus-within,.pf-c-tree-view__content:hover{background-color:var(--pf-c-tree-view__node--hover--BackgroundColor)}.pf-c-tree-view__action{border:0;color:var(--pf-c-tree-view__action--Color);margin-left:var(--pf-c-tree-view__action--MarginLeft)}.pf-c-tree-view__action:hover{--pf-c-tree-view__action--Color:var(--pf-c-tree-view__action--hover--Color)}.pf-c-tree-view__action:focus{--pf-c-tree-view__action--Color:var(--pf-c-tree-view__action--focus--Color);background-color:var(--pf-c-tree-view__action--focus--BackgroundColor)}.pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*1 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*2 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*1 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*1 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*3 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*2 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*2 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*4 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*3 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*3 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*5 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*4 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*4 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*6 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*5 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*5 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*7 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*6 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*6 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*8 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*7 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*7 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*9 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*8 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*8 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item{--pf-c-tree-view__list-item__list-item__node-toggle--Left:var(--pf-c-tree-view__node--PaddingLeft);--pf-c-tree-view__node--PaddingLeft:calc(var(--pf-c-tree-view__node--nested-indent--base)*10 + var(--pf-c-tree-view__node--indent--base));--pf-c-tree-view--m-guides--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-guides--guide-left--base--offset));--pf-c-tree-view--m-compact__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact__node--nested-indent--base)*9 + var(--pf-c-tree-view--m-compact__node--indent--base));--pf-c-tree-view--m-compact--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--base-border--Left--offset));--pf-c-tree-view--m-compact--m-no-background__node--PaddingLeft:calc(var(--pf-c-tree-view--m-compact--m-no-background__node--nested-indent--base)*9 + var(--pf-c-tree-view--m-compact--m-no-background__node--indent--base));--pf-c-tree-view--m-compact--m-no-background--border--nested--Left:calc(var(--pf-c-tree-view__node--PaddingLeft) - var(--pf-c-tree-view--m-compact--m-no-background--base-border--Left--offset))}:where(.pf-theme-dark) .pf-c-tree-view{--pf-c-tree-view__node--hover--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-tree-view__node--focus--BackgroundColor:var(--pf-global--BackgroundColor--300)}.pf-c-action-list{--pf-c-action-list--m-icon--spacer:0;--pf-c-action-list--child--spacer-base:var(--pf-global--spacer--md);--pf-c-action-list--group--spacer-base:var(--pf-global--spacer--2xl)}.pf-c-action-list,.pf-c-action-list__group{--pf-c-action-list--child--spacer:var(--pf-c-action-list--child--spacer-base);--pf-c-action-list--group--spacer:var(--pf-c-action-list--group--spacer-base);align-items:center;display:flex}.pf-c-action-list>*+*,.pf-c-action-list__group>*+*{margin-left:var(--pf-c-action-list--child--spacer)}.pf-c-action-list .pf-c-action-list__group+*,.pf-c-action-list>*+.pf-c-action-list__group,.pf-c-action-list__group .pf-c-action-list__group+*,.pf-c-action-list__group>*+.pf-c-action-list__group{margin-left:var(--pf-c-action-list--group--spacer)}.pf-c-action-list.pf-m-icons,.pf-c-action-list__group.pf-m-icons{--pf-c-action-list--child--spacer:var(--pf-c-action-list--m-icon--spacer)}.pf-c-app-launcher{--pf-c-app-launcher__menu--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-app-launcher__menu--BoxShadow:var(--pf-global--BoxShadow--md);--pf-c-app-launcher__menu--PaddingTop:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu--Top:calc(100% + var(--pf-global--spacer--xs));--pf-c-app-launcher__menu--ZIndex:var(--pf-global--ZIndex--sm);--pf-c-app-launcher--m-top__menu--Top:0;--pf-c-app-launcher--m-top__menu--TranslateY:calc(-100% - var(--pf-global--spacer--xs));--pf-c-app-launcher__toggle--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-app-launcher__toggle--PaddingRight:var(--pf-global--spacer--md);--pf-c-app-launcher__toggle--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-app-launcher__toggle--PaddingLeft:var(--pf-global--spacer--md);--pf-c-app-launcher__toggle--Color:var(--pf-global--Color--200);--pf-c-app-launcher__toggle--hover--Color:var(--pf-global--Color--100);--pf-c-app-launcher__toggle--active--Color:var(--pf-global--Color--100);--pf-c-app-launcher__toggle--focus--Color:var(--pf-global--Color--100);--pf-c-app-launcher__toggle--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-app-launcher__toggle--m-expanded--Color:var(--pf-global--Color--100);--pf-c-app-launcher__menu-search--PaddingTop:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu-search--PaddingRight:var(--pf-global--spacer--md);--pf-c-app-launcher__menu-search--PaddingBottom:var(--pf-global--spacer--md);--pf-c-app-launcher__menu-search--PaddingLeft:var(--pf-global--spacer--md);--pf-c-app-launcher__menu-search--BottomBorderColor:var(--pf-global--BorderColor--100);--pf-c-app-launcher__menu-search--BottomBorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-app-launcher__menu-search--MarginBottom:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu-item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu-item--PaddingRight:var(--pf-global--spacer--md);--pf-c-app-launcher__menu-item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu-item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-app-launcher__menu-item--Color:var(--pf-global--Color--dark-100);--pf-c-app-launcher__menu-item--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-app-launcher__menu-item--Width:100%;--pf-c-app-launcher__menu-item--disabled--Color:var(--pf-global--Color--dark-200);--pf-c-app-launcher__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-app-launcher__menu-item--m-link--PaddingRight:0;--pf-c-app-launcher__menu-item--m-link--hover--BackgroundColor:transparent;--pf-c-app-launcher__menu-item--m-action--Color:var(--pf-global--Color--200);--pf-c-app-launcher__menu-item--m-action--Width:auto;--pf-c-app-launcher__menu-item--m-action--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-app-launcher__menu-item--m-action--hover--BackgroundColor:transparent;--pf-c-app-launcher__menu-item--hover__menu-item--m-action--Color:var(--pf-global--Color--200);--pf-c-app-launcher__menu-item--m-action--hover--Color:var(--pf-global--Color--100);--pf-c-app-launcher__menu-item--m-action--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color:var(--pf-global--palette--gold-400);--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--hover--Color:var(--pf-global--palette--gold-500);--pf-c-app-launcher__menu-item-icon--MarginRight:var(--pf-global--spacer--sm);--pf-c-app-launcher__menu-item-icon--Width:var(--pf-global--icon--FontSize--lg);--pf-c-app-launcher__menu-item-icon--Height:var(--pf-global--icon--FontSize--lg);--pf-c-app-launcher__menu-item-external-icon--Color:var(--pf-global--link--Color);--pf-c-app-launcher__menu-item-external-icon--PaddingLeft:var(--pf-global--spacer--md);--pf-c-app-launcher__menu-item-external-icon--TranslateY:-0.0625rem;--pf-c-app-launcher__menu-item-external-icon--FontSize:var(--pf-global--icon--FontSize--sm);--pf-c-app-launcher__group--group--PaddingTop:var(--pf-global--spacer--sm);--pf-c-app-launcher__group-title--PaddingTop:var(--pf-global--spacer--sm);--pf-c-app-launcher__group-title--PaddingRight:var(--pf-c-app-launcher__menu-item--PaddingRight);--pf-c-app-launcher__group-title--PaddingBottom:var(--pf-c-app-launcher__menu-item--PaddingBottom);--pf-c-app-launcher__group-title--PaddingLeft:var(--pf-c-app-launcher__menu-item--PaddingLeft);--pf-c-app-launcher__group-title--FontSize:var(--pf-global--FontSize--xs);--pf-c-app-launcher__group-title--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-app-launcher__group-title--Color:var(--pf-global--Color--dark-200);--pf-c-app-launcher--c-divider--MarginTop:var(--pf-global--spacer--sm);--pf-c-app-launcher--c-divider--MarginBottom:var(--pf-global--spacer--sm);display:inline-block;max-width:100%;position:relative}.pf-c-app-launcher.pf-m-expanded>.pf-c-app-launcher__toggle{color:var(--pf-c-app-launcher__toggle--m-expanded--Color)}.pf-c-app-launcher .pf-c-divider{margin-bottom:var(--pf-c-app-launcher--c-divider--MarginBottom);margin-top:var(--pf-c-app-launcher--c-divider--MarginTop)}.pf-c-app-launcher .pf-c-divider:last-child{--pf-c-app-launcher--c-divider--MarginBottom:0}.pf-c-app-launcher__toggle{border:none;color:var(--pf-c-app-launcher__toggle--Color);padding:var(--pf-c-app-launcher__toggle--PaddingTop) var(--pf-c-app-launcher__toggle--PaddingRight) var(--pf-c-app-launcher__toggle--PaddingBottom) var(--pf-c-app-launcher__toggle--PaddingLeft)}.pf-c-app-launcher__toggle:hover{--pf-c-app-launcher__toggle--Color:var(--pf-c-app-launcher__toggle--hover--Color)}.pf-c-app-launcher__toggle.pf-m-active,.pf-c-app-launcher__toggle:active{--pf-c-app-launcher__toggle--Color:var(--pf-c-app-launcher__toggle--active--Color)}.pf-c-app-launcher__toggle:focus{--pf-c-app-launcher__toggle--Color:var(--pf-c-app-launcher__toggle--focus--Color)}.pf-c-app-launcher__toggle:disabled{--pf-c-app-launcher__toggle--Color:var(--pf-c-app-launcher__toggle--disabled--Color);pointer-events:none}.pf-c-app-launcher__menu{background-clip:padding-box;background-color:var(--pf-c-app-launcher__menu--BackgroundColor);box-shadow:var(--pf-c-app-launcher__menu--BoxShadow);min-width:100%;padding-bottom:var(--pf-c-app-launcher__menu--PaddingBottom);padding-top:var(--pf-c-app-launcher__menu--PaddingTop);position:absolute;top:var(--pf-c-app-launcher__menu--Top);z-index:var(--pf-c-app-launcher__menu--ZIndex)}.pf-c-app-launcher__menu.pf-m-align-right{right:0}.pf-c-app-launcher.pf-m-top .pf-c-app-launcher__menu{--pf-c-app-launcher__menu--Top:var(--pf-c-app-launcher--m-top__menu--Top);transform:translateY(var(--pf-c-app-launcher--m-top__menu--TranslateY))}.pf-c-app-launcher__menu.pf-m-static{--pf-c-app-launcher--m-top__menu--TranslateY:0;bottom:auto;left:auto;min-width:min-content;position:static;right:auto;top:auto;z-index:auto}.pf-c-app-launcher__menu-search{border-bottom:var(--pf-c-app-launcher__menu-search--BottomBorderWidth) solid var(--pf-c-app-launcher__menu-search--BottomBorderColor);margin-bottom:var(--pf-c-app-launcher__menu-search--MarginBottom);padding:var(--pf-c-app-launcher__menu-search--PaddingTop) var(--pf-c-app-launcher__menu-search--PaddingRight) var(--pf-c-app-launcher__menu-search--PaddingBottom) var(--pf-c-app-launcher__menu-search--PaddingLeft)}.pf-c-app-launcher__menu-wrapper{display:flex}.pf-c-app-launcher__menu-wrapper.pf-m-favorite{--pf-c-app-launcher__menu-item--m-action--Color:var(--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color);--pf-c-app-launcher__menu-item--m-action--hover--Color:var(--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--hover--Color)}.pf-c-app-launcher__menu-item{align-items:center;border:0;color:var(--pf-c-app-launcher__menu-item--Color);display:flex;font-weight:var(--pf-c-app-launcher__menu-item--FontWeight);padding:var(--pf-c-app-launcher__menu-item--PaddingTop) var(--pf-c-app-launcher__menu-item--PaddingRight) var(--pf-c-app-launcher__menu-item--PaddingBottom) var(--pf-c-app-launcher__menu-item--PaddingLeft);white-space:nowrap;width:var(--pf-c-app-launcher__menu-item--Width)}.pf-c-app-launcher__menu-item:focus,.pf-c-app-launcher__menu-item:hover{--pf-c-app-launcher__menu-item--m-action--Color:var(--pf-c-app-launcher__menu-item--hover__menu-item--m-action--Color);text-decoration:none}.pf-c-app-launcher__menu-item:focus,.pf-c-app-launcher__menu-item:hover,.pf-c-app-launcher__menu-wrapper.pf-m-focus,.pf-c-app-launcher__menu-wrapper:focus-within,.pf-c-app-launcher__menu-wrapper:hover{background-color:var(--pf-c-app-launcher__menu-item--hover--BackgroundColor)}.pf-c-app-launcher__menu-item.pf-m-disabled,.pf-c-app-launcher__menu-item:disabled{--pf-c-app-launcher__menu-item--Color:var(--pf-c-app-launcher__menu-item--disabled--Color);--pf-c-app-launcher__menu-item--m-action--Color:var(--pf-c-app-launcher__menu-item--m-action--disabled--Color);pointer-events:none}.pf-c-app-launcher__menu-item.pf-m-disabled,.pf-c-app-launcher__menu-item:disabled,.pf-c-app-launcher__menu-wrapper.pf-m-disabled,.pf-c-app-launcher__menu-wrapper:disabled{background-color:transparent}.pf-c-app-launcher__menu-item.pf-m-external:focus .pf-c-app-launcher__menu-item-external-icon,.pf-c-app-launcher__menu-item.pf-m-external:hover .pf-c-app-launcher__menu-item-external-icon,.pf-c-app-launcher__menu-wrapper.pf-m-external:focus .pf-c-app-launcher__menu-item-external-icon,.pf-c-app-launcher__menu-wrapper.pf-m-external:hover .pf-c-app-launcher__menu-item-external-icon{opacity:1}.pf-c-app-launcher__menu-item.pf-m-link{--pf-c-app-launcher__menu-item--PaddingRight:var(--pf-c-app-launcher__menu-item--m-link--PaddingRight);--pf-c-app-launcher__menu-item--hover--BackgroundColor:var(--pf-c-app-launcher__menu-item--m-link--hover--BackgroundColor)}.pf-c-app-launcher__menu-item.pf-m-action{--pf-c-app-launcher__menu-item--Color:var(--pf-c-app-launcher__menu-item--m-action--Color);--pf-c-app-launcher__menu-item--Width:var(--pf-c-app-launcher__menu-item--m-action--Width);--pf-c-app-launcher__menu-item--hover--BackgroundColor:var(--pf-c-app-launcher__menu-item--m-action--hover--BackgroundColor);font-size:var(--pf-c-app-launcher__menu-item--m-action--FontSize)}.pf-c-app-launcher__menu-item.pf-m-action:focus,.pf-c-app-launcher__menu-item.pf-m-action:hover{--pf-c-app-launcher__menu-item--m-action--Color:var(--pf-c-app-launcher__menu-item--m-action--hover--Color)}.pf-c-app-launcher__menu-item-icon{align-items:center;display:inline-flex;height:var(--pf-c-app-launcher__menu-item-icon--Height);justify-content:center;margin-right:var(--pf-c-app-launcher__menu-item-icon--MarginRight);width:var(--pf-c-app-launcher__menu-item-icon--Width)}.pf-c-app-launcher__menu-item-icon>*{max-height:100%;max-width:100%}.pf-c-app-launcher__menu-item-external-icon{color:var(--pf-c-app-launcher__menu-item-external-icon--Color);font-size:var(--pf-c-app-launcher__menu-item-external-icon--FontSize);margin-left:auto;opacity:0;padding-left:var(--pf-c-app-launcher__menu-item-external-icon--PaddingLeft);transform:translateY(var(--pf-c-app-launcher__menu-item-external-icon--TranslateY))}.pf-c-app-launcher__group+.pf-c-app-launcher__group{padding-top:var(--pf-c-app-launcher__group--group--PaddingTop)}.pf-c-app-launcher__group-title{color:var(--pf-c-app-launcher__group-title--Color);font-size:var(--pf-c-app-launcher__group-title--FontSize);font-weight:var(--pf-c-app-launcher__group-title--FontWeight);padding-bottom:var(--pf-c-app-launcher__group-title--PaddingBottom);padding-left:var(--pf-c-app-launcher__group-title--PaddingLeft);padding-right:var(--pf-c-app-launcher__group-title--PaddingRight);padding-top:var(--pf-c-app-launcher__group-title--PaddingTop)}:where(.pf-theme-dark) .pf-c-app-launcher{--pf-c-app-launcher__menu--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-app-launcher__menu--Top:100%;--pf-c-app-launcher__menu-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-app-launcher__menu-item--disabled--Color:var(--pf-global--palette--black-300);--pf-c-app-launcher__menu-item--m-action--Color:var(--pf-global--Color--200);--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color:var(--pf-global--palette--gold-300);--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--hover--Color:var(--pf-global--palette--gold-100)}.pf-c-notification-badge{--pf-c-notification-badge--PaddingTop:var(--pf-global--spacer--form-element);--pf-c-notification-badge--PaddingRight:var(--pf-global--spacer--md);--pf-c-notification-badge--PaddingBottom:var(--pf-global--spacer--form-element);--pf-c-notification-badge--PaddingLeft:var(--pf-global--spacer--md);--pf-c-notification-badge--MarginTop:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-notification-badge--MarginRight:calc(var(--pf-global--spacer--md)*-1);--pf-c-notification-badge--MarginBottom:calc(var(--pf-global--spacer--form-element)*-1);--pf-c-notification-badge--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-notification-badge--after--BorderColor:transparent;--pf-c-notification-badge--after--BorderRadius:var(--pf-global--BorderRadius--sm);--pf-c-notification-badge--after--BorderWidth:0;--pf-c-notification-badge--after--Top:0;--pf-c-notification-badge--after--Right:0;--pf-c-notification-badge--after--Width:auto;--pf-c-notification-badge--after--Height:auto;--pf-c-notification-badge--after--BackgroundColor:transparent;--pf-c-notification-badge--after--TranslateX:0;--pf-c-notification-badge--after--TranslateY:0;--pf-c-notification-badge__i--Width:auto;--pf-c-notification-badge__i--Height:auto;--pf-c-notification-badge--m-read--after--BorderColor:transparent;--pf-c-notification-badge--m-read--after--BackgroundColor:transparent;--pf-c-notification-badge--m-read--m-expanded--after--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-notification-badge--m-unread--Color:var(--pf-global--Color--light-100);--pf-c-notification-badge--m-unread--after--BackgroundColor:var(--pf-global--active-color--100);--pf-c-notification-badge--m-unread--hover--after--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-notification-badge--m-unread--m-expanded--after--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-notification-badge--m-attention--Color:var(--pf-global--Color--light-100);--pf-c-notification-badge--m-attention--after--BackgroundColor:var(--pf-global--danger-color--100);--pf-c-notification-badge--m-attention--hover--after--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-notification-badge--m-attention--m-expanded--after--BackgroundColor:var(--pf-global--danger-color--200);--pf-c-notification-badge__count--MarginLeft:var(--pf-global--spacer--xs);--pf-c-notification-badge--pf-icon-attention-bell--LineHeight:var(--pf-global--LineHeight--sm);background-color:var(--pf-c-notification-badge--after--BackgroundColor);border-radius:var(--pf-c-notification-badge--after--BorderRadius);display:inline-block;margin:var(--pf-c-notification-badge--MarginTop) var(--pf-c-notification-badge--MarginRight) var(--pf-c-notification-badge--MarginBottom) var(--pf-c-notification-badge--MarginLeft);padding:var(--pf-c-notification-badge--PaddingTop) var(--pf-c-notification-badge--PaddingRight) var(--pf-c-notification-badge--PaddingBottom) var(--pf-c-notification-badge--PaddingLeft);position:relative}.pf-c-notification-badge:before{border:var(--pf-c-notification-badge--after--BorderWidth) solid var(--pf-c-notification-badge--after--BorderColor);border-radius:var(--pf-c-notification-badge--after--BorderRadius);bottom:0;content:"";height:var(--pf-c-notification-badge--after--Height);left:0;position:absolute;right:var(--pf-c-notification-badge--after--Right);top:var(--pf-c-notification-badge--after--Top);transform:translate(var(--pf-c-notification-badge--after--TranslateX),var(--pf-c-notification-badge--after--TranslateY));width:var(--pf-c-notification-badge--after--Width)}.pf-c-notification-badge>i{height:var(--pf-c-notification-badge__i--Height);width:var(--pf-c-notification-badge__i--Width)}.pf-c-notification-badge>*{position:relative}.pf-c-notification-badge .pf-icon-attention-bell,.pf-c-notification-badge .pf-icon-bell{display:inline-block;line-height:var(--pf-c-notification-badge--pf-icon-attention-bell--LineHeight)}.pf-c-notification-badge .pf-icon-attention-bell:before,.pf-c-notification-badge .pf-icon-bell:before{vertical-align:bottom}.pf-c-notification-badge.pf-m-read{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-notification-badge--m-read--after--BackgroundColor);--pf-c-notification-badge--after--BorderColor:var(--pf-c-notification-badge--m-read--after--BorderColor);color:var(--pf-c-notification-badge--m-read--Color,inherit)}.pf-c-notification-badge.pf-m-unread{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-notification-badge--m-unread--after--BackgroundColor);color:var(--pf-c-notification-badge--m-unread--Color)}.pf-c-notification-badge.pf-m-unread:hover{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-notification-badge--m-unread--hover--after--BackgroundColor)}.pf-c-notification-badge.pf-m-attention{--pf-c-notification-badge--after--BackgroundColor:var(--pf-c-notification-badge--m-attention--after--BackgroundColor);color:var(--pf-c-notification-badge--m-attention--Color)}.pf-c-notification-badge.pf-m-attention:hover{--pf-c-notification-badge--m-attention--after--BackgroundColor:var(--pf-c-notification-badge--m-attention--hover--after--BackgroundColor)}.pf-c-notification-badge.pf-m-expanded{--pf-c-notification-badge--m-read--Color:var(--pf-global--Color--light-100);--pf-c-notification-badge--m-read--after--BackgroundColor:var(--pf-c-notification-badge--m-read--m-expanded--after--BackgroundColor);--pf-c-notification-badge--m-unread--after--BackgroundColor:var(--pf-c-notification-badge--m-unread--m-expanded--after--BackgroundColor);--pf-c-notification-badge--m-attention--after--BackgroundColor:var(--pf-c-notification-badge--m-attention--m-expanded--after--BackgroundColor)}.pf-c-notification-badge__count{margin-left:var(--pf-c-notification-badge__count--MarginLeft)}:where(.pf-theme-dark) .pf-c-notification-badge{--pf-c-notification-badge--m-read--m-expanded--after--BackgroundColor:var(--pf-global--BackgroundColor--400);--pf-c-notification-badge--m-unread--after--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-notification-badge--m-attention--Color:var(--pf-global--palette--black-900)}.pf-c-masthead.pf-m-light,.pf-c-masthead.pf-m-light-200{--pf-global--Color--100:var(--pf-global--Color--dark-100);--pf-global--Color--200:var(--pf-global--Color--dark-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--dark-100);--pf-global--primary-color--100:var(--pf-global--primary-color--dark-100);--pf-global--link--Color:var(--pf-global--link--Color--dark);--pf-global--link--Color--hover:var(--pf-global--link--Color--dark--hover);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--light-100)}.pf-c-masthead,.pf-c-masthead .pf-c-button.pf-m-plain{--pf-global--Color--100:var(--pf-global--Color--light-100);--pf-global--Color--200:var(--pf-global--Color--light-200);--pf-global--BorderColor--100:var(--pf-global--BorderColor--light-100);--pf-global--primary-color--100:var(--pf-global--primary-color--light-100);--pf-global--link--Color:var(--pf-global--link--Color--light);--pf-global--link--Color--hover:var(--pf-global--link--Color--light);--pf-global--BackgroundColor--100:var(--pf-global--BackgroundColor--dark-100)}.pf-c-masthead .pf-c-button.pf-m-plain .pf-c-card,.pf-c-masthead .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--dark-transparent-200)}.pf-c-masthead .pf-c-button,.pf-c-masthead .pf-c-button.pf-m-plain .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--active--Color:var(--pf-global--primary-color--dark-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--BackgroundColor--light-100);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-button--m-secondary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--hover--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--focus--BorderColor:var(--pf-global--Color--light-100);--pf-c-button--m-secondary--active--BorderColor:var(--pf-global--Color--light-100)}.pf-c-masthead{--pf-c-masthead--PaddingLeft:var(--pf-c-masthead--inset);--pf-c-masthead--PaddingRight:var(--pf-c-masthead--inset);--pf-c-masthead--BackgroundColor:var(--pf-global--BackgroundColor--dark-100);--pf-c-masthead--inset:var(--pf-global--spacer--md);--pf-c-masthead--xl--inset:var(--pf-global--spacer--lg);--pf-c-masthead--m-display-stack--GridTemplateColumns:max-content 1fr;--pf-c-masthead--m-display-stack__main--GridColumn:-1/1;--pf-c-masthead--m-display-stack__main--MinHeight:4.375rem;--pf-c-masthead--m-display-stack__main--Order:-1;--pf-c-masthead--m-display-stack__main--FlexBasis:100%;--pf-c-masthead--m-display-stack__main--PaddingTop:var(--pf-global--spacer--sm);--pf-c-masthead--m-display-stack__main--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-masthead--m-display-stack__main--MarginRight:0;--pf-c-masthead--m-display-stack__main--before--BorderBottom:var(--pf-c-masthead__main--before--BorderBottomWidth) solid var(--pf-c-masthead__main--before--BorderBottomColor);--pf-c-masthead--m-display-stack__toggle--GridColumn:1;--pf-c-masthead--m-display-stack__content--GridColumn:2;--pf-c-masthead--m-display-stack__content--MinHeight:auto;--pf-c-masthead--m-display-stack__content--Order:1;--pf-c-masthead--m-display-stack__content--PaddingTop:0;--pf-c-masthead--m-display-stack__content--PaddingBottom:0;--pf-c-masthead--m-display-stack__content--MarginLeft:0;--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight:calc(var(--pf-c-masthead--inset)*-1);--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft:calc(var(--pf-c-masthead--inset)*-1);--pf-c-masthead--m-display-inline--GridTemplateColumns:max-content max-content 1fr;--pf-c-masthead--m-display-inline__main--GridColumn:2;--pf-c-masthead--m-display-inline__main--MinHeight:4.375rem;--pf-c-masthead--m-display-inline__main--Order:0;--pf-c-masthead--m-display-inline__main--FlexBasis:auto;--pf-c-masthead--m-display-inline__main--PaddingTop:0;--pf-c-masthead--m-display-inline__main--PaddingBottom:0;--pf-c-masthead--m-display-inline__main--MarginRight:calc(var(--pf-global--spacer--lg)/2);--pf-c-masthead--m-display-inline__main--BorderBottom:0;--pf-c-masthead--m-display-inline__toggle--GridColumn:1;--pf-c-masthead--m-display-inline__content--GridColumn:3;--pf-c-masthead--m-display-inline__content--MinHeight:4.375rem;--pf-c-masthead--m-display-inline__content--Order:0;--pf-c-masthead--m-display-inline__content--PaddingTop:0;--pf-c-masthead--m-display-inline__content--PaddingBottom:0;--pf-c-masthead--m-display-inline__content--MarginLeft:calc(var(--pf-global--spacer--lg)/2);--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight:0;--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft:0;--pf-c-masthead__main--before--Right:calc(var(--pf-c-masthead--inset)*-1);--pf-c-masthead__main--before--Left:calc(var(--pf-c-masthead--inset)*-1);--pf-c-masthead__main--before--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-masthead__main--before--BorderBottomColor:var(--pf-global--palette--black-600);--pf-c-masthead__toggle--MarginRight:var(--pf-global--spacer--sm);--pf-c-masthead__toggle--MarginLeft:calc(var(--pf-global--spacer--md)*-1);--pf-c-masthead__toggle--c-button--FontSize:var(--pf-global--FontSize--2xl);--pf-c-masthead--m-light--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-masthead--m-light__main--BorderBottomColor:var(--pf-global--BorderColor--300);--pf-c-masthead--m-light-200--BackgroundColor:var(--pf-global--BackgroundColor--200);--pf-c-masthead--m-light-200__main--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-masthead--c-toolbar__item--Display:flex;--pf-c-masthead--item-border-color--base:var(--pf-global--palette--black-800);--pf-c-masthead--c-context-selector--Width:auto;--pf-c-masthead--c-context-selector__toggle--BorderTopColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-context-selector__toggle--BorderRightColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-context-selector__toggle--BorderLeftColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-context-selector--m-full-height__toggle--BorderTopColor:transparent;--pf-c-masthead--c-context-selector--m-full-height__toggle--BorderBottomColor:transparent;--pf-c-masthead--c-dropdown__toggle--before--BorderTopColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-dropdown__toggle--before--BorderRightColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-dropdown__toggle--before--BorderLeftColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-dropdown--m-full-height__toggle--before--BorderTopColor:transparent;--pf-c-masthead--c-dropdown--m-full-height__toggle--before--BorderBottomColor:transparent;--pf-c-masthead--c-menu-toggle--before--BorderTopColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-menu-toggle--before--BorderRightColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-menu-toggle--before--BorderLeftColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--c-menu-toggle--m-full-height--before--BorderTopColor:transparent;--pf-c-masthead--c-menu-toggle--m-full-height--before--BorderBottomColor:transparent;--pf-c-masthead--c-toolbar__content--PaddingRight:0;--pf-c-masthead--c-toolbar__content--PaddingLeft:0;--pf-c-masthead--c-toolbar__expandable-content--PaddingTop:var(--pf-global--spacer--md);--pf-c-masthead--c-toolbar__expandable-content--PaddingRight:var(--pf-c-masthead--inset);--pf-c-masthead--c-toolbar__expandable-content--PaddingBottom:var(--pf-global--spacer--md);--pf-c-masthead--c-toolbar__expandable-content--PaddingLeft:var(--pf-c-masthead--inset);--pf-c-masthead--c-toolbar__expandable-content--BorderTopWidth:var(--pf-global--BorderWidth--sm);--pf-c-masthead--c-toolbar__expandable-content--BorderTopColor:var(--pf-c-masthead--item-border-color--base);--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft);align-items:center;background-color:var(--pf-c-masthead--BackgroundColor);color:var(--pf-global--Color--100);display:grid;grid-template-columns:var(--pf-c-masthead--GridTemplateColumns);min-width:0;padding-left:var(--pf-c-masthead--PaddingLeft);padding-right:var(--pf-c-masthead--PaddingRight);position:relative}@media screen and (min-width:768px){.pf-c-page:where(:not(.pf-m-resize-observer)) .pf-c-masthead{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}}@media screen and (min-width:1200px){.pf-c-masthead{--pf-c-masthead--inset:var(--pf-c-masthead--xl--inset)}}.pf-c-masthead.pf-m-light{--pf-c-masthead--BackgroundColor:var(--pf-c-masthead--m-light--BackgroundColor);--pf-c-masthead__main--BorderBottomColor:var(--pf-c-masthead--m-light__main--BorderBottomColor);color:var(--pf-global--Color--100)}.pf-c-masthead.pf-m-light-200{--pf-c-masthead--BackgroundColor:var(--pf-c-masthead--m-light-200--BackgroundColor);--pf-c-masthead__main--BorderBottomColor:var(--pf-c-masthead--m-light-200__main--BorderBottomColor);color:var(--pf-global--Color--100)}.pf-c-masthead .pf-c-toolbar{--pf-c-toolbar__content--PaddingRight:var(--pf-c-masthead--c-toolbar__content--PaddingRight);--pf-c-toolbar__content--PaddingLeft:var(--pf-c-masthead--c-toolbar__content--PaddingLeft);--pf-c-toolbar__expandable-content--PaddingTop:var(--pf-c-masthead--c-toolbar__expandable-content--PaddingTop);--pf-c-toolbar__expandable-content--PaddingRight:var(--pf-c-masthead--c-toolbar__expandable-content--PaddingRight);--pf-c-toolbar__expandable-content--PaddingBottom:var(--pf-c-masthead--c-toolbar__expandable-content--PaddingBottom);--pf-c-toolbar__expandable-content--PaddingLeft:var(--pf-c-masthead--c-toolbar__expandable-content--PaddingLeft);width:100%}.pf-c-masthead .pf-c-toolbar__content-section{flex-wrap:nowrap}.pf-c-masthead .pf-c-toolbar__expandable-content{border-top:var(--pf-c-masthead--c-toolbar__expandable-content--BorderTopWidth) solid var(--pf-c-masthead--c-toolbar__expandable-content--BorderTopColor)}.pf-c-masthead .pf-c-menu-toggle{--pf-c-menu-toggle--before--BorderTopColor:var(--pf-c-masthead--c-menu-toggle--before--BorderTopColor);--pf-c-menu-toggle--before--BorderRightColor:var(--pf-c-masthead--c-menu-toggle--before--BorderRightColor);--pf-c-menu-toggle--before--BorderLeftColor:var(--pf-c-masthead--c-menu-toggle--before--BorderLeftColor)}.pf-c-masthead .pf-c-menu-toggle.pf-m-full-height{--pf-c-menu-toggle--before--BorderTopColor:var(--pf-c-masthead--c-menu-toggle--m-full-height--before--BorderTopColor);--pf-c-menu-toggle--before--BorderBottomColor:var(--pf-c-masthead--c-menu-toggle--m-full-height--before--BorderBottomColor)}.pf-c-masthead .pf-c-context-selector{--pf-c-context-selector--Width:var(--pf-c-masthead--c-context-selector--Width);--pf-c-context-selector__toggle--BorderTopColor:var(--pf-c-masthead--c-context-selector__toggle--BorderTopColor);--pf-c-context-selector__toggle--BorderRightColor:var(--pf-c-masthead--c-context-selector__toggle--BorderRightColor);--pf-c-context-selector__toggle--BorderLeftColor:var(--pf-c-masthead--c-context-selector__toggle--BorderLeftColor)}.pf-c-masthead .pf-c-context-selector.pf-m-full-height{--pf-c-context-selector__toggle--BorderTopColor:var(--pf-c-masthead--c-context-selector--m-full-height__toggle--BorderTopColor);--pf-c-context-selector__toggle--BorderBottomColor:var(--pf-c-masthead--c-context-selector--m-full-height__toggle--BorderBottomColor)}.pf-c-masthead .pf-c-dropdown{--pf-c-dropdown__toggle--before--BorderTopColor:var(--pf-c-masthead--c-dropdown__toggle--before--BorderTopColor);--pf-c-dropdown__toggle--before--BorderRightColor:var(--pf-c-masthead--c-dropdown__toggle--before--BorderRightColor);--pf-c-dropdown__toggle--before--BorderLeftColor:var(--pf-c-masthead--c-dropdown__toggle--before--BorderLeftColor)}.pf-c-masthead .pf-c-dropdown.pf-m-full-height{--pf-c-dropdown__toggle--before--BorderTopColor:var(--pf-c-masthead--c-dropdown--m-full-height__toggle--before--BorderTopColor);--pf-c-dropdown__toggle--before--BorderBottomColor:var(--pf-c-masthead--c-dropdown--m-full-height__toggle--before--BorderBottomColor)}.pf-c-masthead .pf-c-nav{align-self:stretch}.pf-c-masthead .pf-c-button.pf-m-plain{color:var(--pf-c-button--m-plain--Color)}.pf-c-masthead__main{align-items:center;align-self:stretch;display:flex;flex-basis:var(--pf-c-masthead__main--FlexBasis);grid-column:var(--pf-c-masthead__main--GridColumn);margin-right:var(--pf-c-masthead__main--MarginRight);min-height:var(--pf-c-masthead__main--MinHeight);order:var(--pf-c-masthead__main--Order);padding-bottom:var(--pf-c-masthead__main--PaddingBottom);padding-top:var(--pf-c-masthead__main--PaddingTop);position:relative}.pf-c-masthead__main:before{border-bottom:var(--pf-c-masthead__main--before--BorderBottom);bottom:0;content:"";left:var(--pf-c-masthead__main--before--Left);position:absolute;right:var(--pf-c-masthead__main--before--Right)}.pf-c-masthead__main:last-child{--pf-c-masthead__main--MarginRight:0}.pf-c-masthead__content{align-items:center;align-self:stretch;display:flex;flex-grow:1;flex-shrink:1;grid-column:var(--pf-c-masthead__content--GridColumn);grid-column-end:-1;margin-left:var(--pf-c-masthead__content--MarginLeft);min-height:var(--pf-c-masthead__content--MinHeight);order:var(--pf-c-masthead__content--Order);padding-bottom:var(--pf-c-masthead__content--PaddingBottom);padding-top:var(--pf-c-masthead__content--PaddingTop)}.pf-c-masthead__content:only-child{--pf-c-masthead__content--MarginLeft:0}.pf-c-masthead__content .pf-c-nav.pf-m-horizontal{margin-left:var(--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft);margin-right:var(--pf-c-masthead__content--c-nav--m-horizontal--MarginRight)}.pf-c-masthead__toggle~.pf-c-masthead__content{--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:calc(var(--pf-c-masthead__content--MarginLeft)*-1)}.pf-c-masthead__brand,.pf-c-masthead__content,.pf-c-masthead__main{min-width:0}.pf-c-masthead__brand{align-self:center;display:inline-flex}.pf-c-masthead__toggle{align-self:center;grid-column:var(--pf-c-masthead__toggle--GridColumn);margin-left:var(--pf-c-masthead__toggle--MarginLeft);margin-right:var(--pf-c-masthead__toggle--MarginRight)}.pf-c-masthead__toggle .pf-c-button{--pf-c-button--FontSize:var(--pf-c-masthead__toggle--c-button--FontSize)}.pf-c-masthead.pf-m-display-stack{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-display-inline{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-inset-none{--pf-c-masthead--inset:0}.pf-c-masthead.pf-m-inset-sm{--pf-c-masthead--inset:var(--pf-global--spacer--sm)}.pf-c-masthead.pf-m-inset-md{--pf-c-masthead--inset:var(--pf-global--spacer--md)}.pf-c-masthead.pf-m-inset-lg{--pf-c-masthead--inset:var(--pf-global--spacer--lg)}.pf-c-masthead.pf-m-inset-xl{--pf-c-masthead--inset:var(--pf-global--spacer--xl)}.pf-c-masthead.pf-m-inset-2xl{--pf-c-masthead--inset:var(--pf-global--spacer--2xl)}@media (min-width:576px){.pf-c-masthead.pf-m-display-stack-on-sm{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-display-inline-on-sm{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-inset-none-on-sm{--pf-c-masthead--inset:0}.pf-c-masthead.pf-m-inset-sm-on-sm{--pf-c-masthead--inset:var(--pf-global--spacer--sm)}.pf-c-masthead.pf-m-inset-md-on-sm{--pf-c-masthead--inset:var(--pf-global--spacer--md)}.pf-c-masthead.pf-m-inset-lg-on-sm{--pf-c-masthead--inset:var(--pf-global--spacer--lg)}.pf-c-masthead.pf-m-inset-xl-on-sm{--pf-c-masthead--inset:var(--pf-global--spacer--xl)}.pf-c-masthead.pf-m-inset-2xl-on-sm{--pf-c-masthead--inset:var(--pf-global--spacer--2xl)}}@media (min-width:768px){.pf-c-masthead.pf-m-display-stack-on-md{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-display-inline-on-md{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-inset-none-on-md{--pf-c-masthead--inset:0}.pf-c-masthead.pf-m-inset-sm-on-md{--pf-c-masthead--inset:var(--pf-global--spacer--sm)}.pf-c-masthead.pf-m-inset-md-on-md{--pf-c-masthead--inset:var(--pf-global--spacer--md)}.pf-c-masthead.pf-m-inset-lg-on-md{--pf-c-masthead--inset:var(--pf-global--spacer--lg)}.pf-c-masthead.pf-m-inset-xl-on-md{--pf-c-masthead--inset:var(--pf-global--spacer--xl)}.pf-c-masthead.pf-m-inset-2xl-on-md{--pf-c-masthead--inset:var(--pf-global--spacer--2xl)}}@media (min-width:992px){.pf-c-masthead.pf-m-display-stack-on-lg{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-display-inline-on-lg{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-inset-none-on-lg{--pf-c-masthead--inset:0}.pf-c-masthead.pf-m-inset-sm-on-lg{--pf-c-masthead--inset:var(--pf-global--spacer--sm)}.pf-c-masthead.pf-m-inset-md-on-lg{--pf-c-masthead--inset:var(--pf-global--spacer--md)}.pf-c-masthead.pf-m-inset-lg-on-lg{--pf-c-masthead--inset:var(--pf-global--spacer--lg)}.pf-c-masthead.pf-m-inset-xl-on-lg{--pf-c-masthead--inset:var(--pf-global--spacer--xl)}.pf-c-masthead.pf-m-inset-2xl-on-lg{--pf-c-masthead--inset:var(--pf-global--spacer--2xl)}}@media (min-width:1200px){.pf-c-masthead.pf-m-display-stack-on-xl{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-display-inline-on-xl{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-inset-none-on-xl{--pf-c-masthead--inset:0}.pf-c-masthead.pf-m-inset-sm-on-xl{--pf-c-masthead--inset:var(--pf-global--spacer--sm)}.pf-c-masthead.pf-m-inset-md-on-xl{--pf-c-masthead--inset:var(--pf-global--spacer--md)}.pf-c-masthead.pf-m-inset-lg-on-xl{--pf-c-masthead--inset:var(--pf-global--spacer--lg)}.pf-c-masthead.pf-m-inset-xl-on-xl{--pf-c-masthead--inset:var(--pf-global--spacer--xl)}.pf-c-masthead.pf-m-inset-2xl-on-xl{--pf-c-masthead--inset:var(--pf-global--spacer--2xl)}}@media (min-width:1450px){.pf-c-masthead.pf-m-display-stack-on-2xl{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-stack--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-stack__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-stack__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-stack__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-stack__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-stack__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-stack__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-stack__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-stack__main--before--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-stack__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-stack__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-stack__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-stack__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-stack__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-stack__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-stack__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-display-inline-on-2xl{--pf-c-masthead--GridTemplateColumns:var(--pf-c-masthead--m-display-inline--GridTemplateColumns);--pf-c-masthead__main--GridColumn:var(--pf-c-masthead--m-display-inline__main--GridColumn);--pf-c-masthead__main--MinHeight:var(--pf-c-masthead--m-display-inline__main--MinHeight);--pf-c-masthead__main--Order:var(--pf-c-masthead--m-display-inline__main--Order);--pf-c-masthead__main--FlexBasis:var(--pf-c-masthead--m-display-inline__main--FlexBasis);--pf-c-masthead__main--PaddingTop:var(--pf-c-masthead--m-display-inline__main--PaddingTop);--pf-c-masthead__main--PaddingBottom:var(--pf-c-masthead--m-display-inline__main--PaddingBottom);--pf-c-masthead__main--MarginRight:var(--pf-c-masthead--m-display-inline__main--MarginRight);--pf-c-masthead__main--before--BorderBottom:var(--pf-c-masthead--m-display-inline__main--BorderBottom);--pf-c-masthead__content--GridColumn:var(--pf-c-masthead--m-display-inline__content--GridColumn);--pf-c-masthead__content--MinHeight:var(--pf-c-masthead--m-display-inline__content--MinHeight);--pf-c-masthead__content--Order:var(--pf-c-masthead--m-display-inline__content--Order);--pf-c-masthead__content--PaddingTop:var(--pf-c-masthead--m-display-inline__content--PaddingTop);--pf-c-masthead__content--PaddingBottom:var(--pf-c-masthead--m-display-inline__content--PaddingBottom);--pf-c-masthead__content--MarginLeft:var(--pf-c-masthead--m-display-inline__content--MarginLeft);--pf-c-masthead__content--c-nav--m-horizontal--MarginRight:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginRight);--pf-c-masthead__content--c-nav--m-horizontal--MarginLeft:var(--pf-c-masthead--m-display-inline__content--c-nav--m-horizontal--MarginLeft)}.pf-c-masthead.pf-m-inset-none-on-2xl{--pf-c-masthead--inset:0}.pf-c-masthead.pf-m-inset-sm-on-2xl{--pf-c-masthead--inset:var(--pf-global--spacer--sm)}.pf-c-masthead.pf-m-inset-md-on-2xl{--pf-c-masthead--inset:var(--pf-global--spacer--md)}.pf-c-masthead.pf-m-inset-lg-on-2xl{--pf-c-masthead--inset:var(--pf-global--spacer--lg)}.pf-c-masthead.pf-m-inset-xl-on-2xl{--pf-c-masthead--inset:var(--pf-global--spacer--xl)}.pf-c-masthead.pf-m-inset-2xl-on-2xl{--pf-c-masthead--inset:var(--pf-global--spacer--2xl)}}:where(.pf-theme-dark) .pf-c-masthead{--pf-global--Color--100:#e0e0e0;--pf-global--Color--200:#aaabac;--pf-global--BorderColor--100:#444548;--pf-global--primary-color--100:#1fa7f8;--pf-global--link--Color:#1fa7f8;--pf-global--link--Color--hover:#73bcf7;--pf-global--BackgroundColor--100:#1b1d21}:where(.pf-theme-dark) .pf-c-masthead .pf-c-card{--pf-c-card--BackgroundColor:var(--pf-global--BackgroundColor--100)}:where(.pf-theme-dark) .pf-c-masthead .pf-c-button{--pf-c-button--m-primary--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--hover--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--focus--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--active--Color:var(--pf-global--Color--light-100);--pf-c-button--m-primary--BackgroundColor:var(--pf-global--primary-color--300);--pf-c-button--m-primary--hover--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--focus--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-primary--active--BackgroundColor:var(--pf-global--primary-color--200);--pf-c-button--m-secondary--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--hover--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--focus--Color:var(--pf-global--primary-color--100);--pf-c-button--m-secondary--active--Color:var(--pf-global--primary-color--100)}:where(.pf-theme-dark) .pf-c-masthead{--pf-c-masthead--BackgroundColor:var(--pf-global--palette--black-1000);color:var(--pf-global--Color--100)}:where(.pf-theme-dark) .pf-c-masthead .pf-c-toolbar{--pf-c-toolbar--BackgroundColor:var(--pf-global--palette--black-1000)}.pf-c-nav{--pf-c-nav--Transition:var(--pf-global--Transition);--pf-c-nav--m-light__item--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-nav--m-light__item--m-current--not--m-expanded__link--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-nav--m-light__link--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-light__link--hover--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-light__link--focus--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-light__link--active--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-light__link--m-current--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-light__link--hover--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-nav--m-light__link--focus--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-nav--m-light__link--active--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-nav--m-light__link--m-current--BackgroundColor:var(--pf-global--BackgroundColor--light-300);--pf-c-nav--m-light__link--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-nav--m-light__link--after--BorderColor:var(--pf-global--active-color--100);--pf-c-nav--m-light__link--m-current--after--BorderColor:var(--pf-global--active-color--100);--pf-c-nav--m-light__section-title--Color:var(--pf-global--Color--dark-200);--pf-c-nav--m-light__section-title--BorderBottomColor:var(--pf-global--BorderColor--300);--pf-c-nav--m-light--c-divider--BackgroundColor:var(--pf-global--BorderColor--300);--pf-c-nav--m-light__subnav__link--hover--after--BorderColor:var(--pf-global--BorderColor--dark-100);--pf-c-nav--m-light__subnav__link--focus--after--BorderColor:var(--pf-global--BorderColor--dark-100);--pf-c-nav--m-light__subnav__link--active--after--BorderColor:var(--pf-global--BorderColor--dark-100);--pf-c-nav--m-light__subnav__link--m-current--after--BorderColor:var(--pf-global--active-color--100);--pf-c-nav__item--MarginTop:0;--pf-c-nav__item--m-current--not--m-expanded__link--BackgroundColor:var(--pf-global--BackgroundColor--dark-400);--pf-c-nav__link--m-current--not--m-expanded__link--after--BorderWidth:var(--pf-global--BorderWidth--xl);--pf-c-nav__item__item__link--PaddingRight:var(--pf-global--spacer--xl);--pf-c-nav__item__item__toggle--FontSize:var(--pf-global--FontSize--sm);--pf-c-nav__item__toggle-icon--Rotate:0;--pf-c-nav__item--m-expanded__toggle-icon--Rotate:90deg;--pf-c-nav__item--before--BorderColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__item--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__link--FontSize:var(--pf-global--FontSize--md);--pf-c-nav__link--FontWeight:var(--pf-global--FontWeight--normal);--pf-c-nav__link--PaddingTop:var(--pf-global--spacer--md);--pf-c-nav__link--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav__link--PaddingBottom:var(--pf-global--spacer--md);--pf-c-nav__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav__link--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav__link--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__link--Color:var(--pf-global--Color--light-100);--pf-c-nav__link--hover--Color:var(--pf-global--Color--light-100);--pf-c-nav__link--focus--Color:var(--pf-global--Color--light-100);--pf-c-nav__link--active--Color:var(--pf-global--Color--light-100);--pf-c-nav__link--m-current--Color:var(--pf-global--Color--light-100);--pf-c-nav__link--BackgroundColor:transparent;--pf-c-nav__link--hover--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__link--focus--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__link--active--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__link--m-current--BackgroundColor:var(--pf-global--BackgroundColor--dark-400);--pf-c-nav__link--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-nav__link--before--BorderColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__link--hover--before--BorderBottomWidth:0;--pf-c-nav__link--focus--before--BorderBottomWidth:0;--pf-c-nav__link--active--before--BorderBottomWidth:0;--pf-c-nav__link--m-current--before--BorderBottomWidth:0;--pf-c-nav__link--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__link--hover--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__link--focus--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__link--active--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__link--m-current--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__link--after--BorderLeftWidth:0;--pf-c-nav__link--hover--after--BorderLeftWidth:0;--pf-c-nav__link--focus--after--BorderLeftWidth:0;--pf-c-nav__link--active--after--BorderLeftWidth:0;--pf-c-nav__link--m-current--after--BorderLeftWidth:var(--pf-global--BorderWidth--xl);--pf-c-nav--m-horizontal__link--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav--m-horizontal__link--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal__link--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav--m-horizontal__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal__link--lg--PaddingTop:var(--pf-global--spacer--lg);--pf-c-nav--m-horizontal__link--lg--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-nav--m-horizontal__link--Right:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal__link--Left:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal__link--Color:var(--pf-global--Color--light-300);--pf-c-nav--m-horizontal__link--hover--Color:var(--pf-global--active-color--400);--pf-c-nav--m-horizontal__link--focus--Color:var(--pf-global--active-color--400);--pf-c-nav--m-horizontal__link--active--Color:var(--pf-global--active-color--400);--pf-c-nav--m-horizontal__link--m-current--Color:var(--pf-global--active-color--400);--pf-c-nav--m-horizontal__link--BackgroundColor:transparent;--pf-c-nav--m-horizontal__link--hover--BackgroundColor:transparent;--pf-c-nav--m-horizontal__link--focus--BackgroundColor:transparent;--pf-c-nav--m-horizontal__link--active--BackgroundColor:transparent;--pf-c-nav--m-horizontal__link--m-current--BackgroundColor:transparent;--pf-c-nav--m-horizontal__link--before--BorderColor:var(--pf-global--active-color--400);--pf-c-nav--m-horizontal__link--before--BorderWidth:0;--pf-c-nav--m-horizontal__link--hover--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-horizontal__link--focus--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-horizontal__link--active--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-horizontal__link--m-current--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-tertiary__link--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav--m-tertiary__link--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav--m-tertiary__link--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav--m-tertiary__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav--m-tertiary__link--Right:var(--pf-global--spacer--md);--pf-c-nav--m-tertiary__link--Left:var(--pf-global--spacer--md);--pf-c-nav--m-tertiary__link--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-tertiary__link--hover--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__link--focus--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__link--active--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__link--m-current--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__link--BackgroundColor:transparent;--pf-c-nav--m-tertiary__link--hover--BackgroundColor:transparent;--pf-c-nav--m-tertiary__link--focus--BackgroundColor:transparent;--pf-c-nav--m-tertiary__link--active--BackgroundColor:transparent;--pf-c-nav--m-tertiary__link--m-current--BackgroundColor:transparent;--pf-c-nav--m-tertiary__link--before--BorderColor:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__link--before--BorderWidth:0;--pf-c-nav--m-tertiary__link--hover--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-tertiary__link--focus--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-tertiary__link--active--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-tertiary__link--m-current--before--BorderWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--m-tertiary__scroll-button--Color:var(--pf-global--Color--dark-100);--pf-c-nav--m-tertiary__scroll-button--hover--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__scroll-button--focus--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__scroll-button--active--Color:var(--pf-global--active-color--100);--pf-c-nav--m-tertiary__scroll-button--disabled--Color:var(--pf-global--disabled-color--200);--pf-c-nav--m-tertiary__scroll-button--before--BorderColor:var(--pf-global--BorderColor--300);--pf-c-nav--m-tertiary__scroll-button--disabled--before--BorderColor:var(--pf-global--disabled-color--300);--pf-c-nav--m-horizontal-subnav__link--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav--m-horizontal-subnav__link--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal-subnav__link--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav--m-horizontal-subnav__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal-subnav__link--xl--PaddingTop:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal-subnav__link--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav--m-horizontal-subnav__link--xl--PaddingBottom:var(--pf-global--spacer--md);--pf-c-nav--m-horizontal-subnav__link--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav--m-horizontal-subnav__link--FontSize:var(--pf-global--FontSize--sm);--pf-c-nav--m-horizontal-subnav__link--Color:var(--pf-global--Color--light-200);--pf-c-nav--m-horizontal-subnav__link--hover--Color:var(--pf-global--Color--light-100);--pf-c-nav--m-horizontal-subnav__link--focus--Color:var(--pf-global--Color--light-100);--pf-c-nav--m-horizontal-subnav__link--active--Color:var(--pf-global--Color--light-100);--pf-c-nav--m-horizontal-subnav__link--m-current--Color:var(--pf-global--Color--light-100);--pf-c-nav--m-horizontal-subnav__link--BackgroundColor:transparent;--pf-c-nav--m-horizontal-subnav__link--hover--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav--m-horizontal-subnav__link--focus--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav--m-horizontal-subnav__link--active--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav--m-horizontal-subnav__link--m-current--BackgroundColor:var(--pf-global--BackgroundColor--dark-400);--pf-c-nav--m-horizontal-subnav__link--before--BorderColor:transparent;--pf-c-nav--m-horizontal-subnav__link--after--BorderColor:var(--pf-global--palette--black-800);--pf-c-nav--m-horizontal-subnav__link--hover--after--BorderColor:var(--pf-global--palette--black-800);--pf-c-nav--m-horizontal-subnav__link--active--after--BorderColor:var(--pf-global--palette--black-800);--pf-c-nav--m-horizontal-subnav__link--m-current--after--BorderColor:var(--pf-global--palette--black-800);--pf-c-nav--m-horizontal-subnav__link--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav--m-horizontal-subnav__link--hover--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav--m-horizontal-subnav__link--active--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav--m-horizontal-subnav__link--m-current--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__subnav--PaddingBottom:var(--pf-global--spacer--md);--pf-c-nav__subnav--xl--PaddingLeft:var(--pf-c-nav__link--PaddingLeft);--pf-c-nav__subnav__link--MarginTop:0;--pf-c-nav__subnav__link--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav__subnav__link--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav__subnav__link--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav__subnav__link--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__subnav__link--FontSize:var(--pf-global--FontSize--sm);--pf-c-nav__subnav__link--hover--after--BorderColor:var(--pf-global--BorderColor--200);--pf-c-nav__subnav__link--focus--after--BorderColor:var(--pf-global--BorderColor--200);--pf-c-nav__subnav__link--active--after--BorderColor:var(--pf-global--BorderColor--200);--pf-c-nav__subnav__link--m-current--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__subnav__link--hover--after--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__subnav__link--focus--after--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__subnav__link--active--after--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__subnav__link--m-current--after--BorderWidth:var(--pf-global--BorderWidth--xl);--pf-c-nav__subnav--MaxHeight:0;--pf-c-nav__subnav__subnav--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__subnav__subnav__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav__subnav__subnav__link--FontSize:var(--pf-global--FontSize--xs);--pf-c-nav__item--m-expanded__subnav--MaxHeight:100%;--pf-c-nav__subnav--c-divider--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav__subnav--c-divider--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__section--MarginTop:var(--pf-global--spacer--sm);--pf-c-nav__section__item--MarginTop:var(--pf-global--spacer--sm);--pf-c-nav__section__link--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav__section__link--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav__section__link--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav__section__link--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav__section__link--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav__section__link--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__section__link--FontSize:var(--pf-global--FontSize--md);--pf-c-nav__section__link--before--BorderBottomWidth:0;--pf-c-nav__section__link--hover--after--BorderColor:transparent;--pf-c-nav__section__link--focus--after--BorderColor:transparent;--pf-c-nav__section__link--active--after--BorderColor:transparent;--pf-c-nav__section__link--m-current--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav__section__link--hover--after--BorderWidth:0;--pf-c-nav__section__link--focus--after--BorderWidth:0;--pf-c-nav__section__link--active--after--BorderWidth:0;--pf-c-nav__section__link--m-current--after--BorderWidth:var(--pf-global--BorderWidth--xl);--pf-c-nav__section--section--MarginTop:var(--pf-global--spacer--xl);--pf-c-nav__section-title--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav__section-title--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav__section-title--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav__section-title--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav__section-title--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav__section-title--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__section-title--FontSize:var(--pf-global--FontSize--sm);--pf-c-nav__section-title--Color:var(--pf-global--Color--light-100);--pf-c-nav__section-title--BorderBottomColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__section-title--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__scroll-button--Color:var(--pf-global--Color--light-100);--pf-c-nav__scroll-button--hover--Color:var(--pf-global--active-color--400);--pf-c-nav__scroll-button--focus--Color:var(--pf-global--active-color--400);--pf-c-nav__scroll-button--active--Color:var(--pf-global--active-color--400);--pf-c-nav__scroll-button--disabled--Color:var(--pf-global--disabled-color--100);--pf-c-nav__scroll-button--BackgroundColor:transparent;--pf-c-nav__scroll-button--Width:var(--pf-global--target-size--MinWidth);--pf-c-nav__scroll-button--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-nav__scroll-button--Transition:margin .125s,transform .125s,opacity .125s;--pf-c-nav__scroll-button--before--BorderColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__scroll-button--before--BorderWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__scroll-button--before--BorderRightWidth:0;--pf-c-nav__scroll-button--before--BorderLeftWidth:0;--pf-c-nav__scroll-button--disabled--before--BorderColor:transparent;--pf-c-nav__toggle--PaddingRight:var(--pf-global--spacer--sm);--pf-c-nav__toggle--PaddingLeft:var(--pf-global--spacer--sm);--pf-c-nav__toggle--FontSize:var(--pf-global--icon--FontSize--md);--pf-c-nav__toggle-icon--Transition:var(--pf-global--TransitionDuration);--pf-c-nav--c-divider--MarginTop:var(--pf-global--spacer--sm);--pf-c-nav--c-divider--MarginBottom:var(--pf-global--spacer--sm);--pf-c-nav--c-divider--PaddingRight:0;--pf-c-nav--c-divider--PaddingLeft:0;--pf-c-nav--c-divider--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__list--ScrollSnapTypeAxis:x;--pf-c-nav__list--ScrollSnapTypeStrictness:proximity;--pf-c-nav__list--ScrollSnapType:var(--pf-c-nav__list--ScrollSnapTypeAxis) var(--pf-c-nav__list--ScrollSnapTypeStrictness);--pf-c-nav__item--ScrollSnapAlign:end;--pf-c-nav__item--m-flyout--c-menu--top-offset:0px;--pf-c-nav__item--m-flyout--c-menu--left-offset:0.25rem;--pf-c-nav__item--m-flyout--c-menu--m-top--bottom-offset:0px;--pf-c-nav__item--m-flyout--c-menu--m-left--right-offset:0.25rem;--pf-c-nav__item--m-flyout--MarginTop:0;--pf-c-nav__item--m-flyout--hover__link--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__item--m-flyout--focus__link--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__item--m-flyout--active__link--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav__item--m-flyout--hover__link--before--BorderWidth:0;--pf-c-nav__item--m-flyout--focus__link--before--BorderWidth:0;--pf-c-nav__item--m-flyout--active__link--before--BorderWidth:0;--pf-c-nav__item--m-flyout__item--last-child__link--before--BorderBottomWidth:0;--pf-c-nav__item--m-flyout--c-menu--Top:calc(var(--pf-c-nav__item--m-flyout--c-menu--top-offset));--pf-c-nav__item--m-flyout--c-menu--c-menu--Top:calc(var(--pf-c-nav__item--m-flyout--c-menu--Top) - var(--pf-c-nav__item--before--BorderWidth));--pf-c-nav__item--m-flyout--c-menu__list-item--first-child--c-menu--Top:0;--pf-c-nav__item--m-flyout--c-menu--Left:calc(100% - var(--pf-c-nav__item--m-flyout--c-menu--left-offset));--pf-c-nav__item--m-flyout--c-menu--m-left--Right:calc(100% - var(--pf-c-nav__item--m-flyout--c-menu--m-left--right-offset));--pf-c-nav__item--m-flyout--c-menu--m-top--Bottom:calc(var(--pf-c-nav__item--m-flyout--c-menu--m-top--bottom-offset));--pf-c-nav__item--m-flyout--c-menu--BackgroundColor:var(--pf-global--BackgroundColor--dark-300);--pf-c-nav__item--m-flyout--c-menu__item--Color:var(--pf-c-nav__link--Color);--pf-c-nav__item--m-flyout--c-menu__item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav__item--m-flyout--c-menu__item--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav__item--m-flyout--c-menu__item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav__item--m-flyout--c-menu__item--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav__item--m-flyout--c-menu__item-description--Color:var(--pf-global--Color--light-200);--pf-c-nav__item--m-flyout--c-menu__item--FontSize:var(--pf-global--FontSize--sm);--pf-c-nav__item--m-flyout--c-menu__item--OutlineOffset:var(--pf-c-nav__link--OutlineOffset);--pf-c-nav__item--m-flyout--c-menu__item--before--BorderBottomWidth:var(--pf-c-nav__item--before--BorderWidth);--pf-c-nav__item--m-flyout--c-menu__item--before--BorderBottomColor:var(--pf-c-nav__item--before--BorderColor);--pf-c-nav__item--m-flyout--c-menu__item--hover--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav__item--m-flyout--c-menu__item--hover--after--BorderLeftColor:var(--pf-global--BorderColor--200);--pf-c-nav__item--m-flyout--c-menu__item--hover--after--Top:calc(var(--pf-c-nav__item--m-flyout--c-menu__item--before--BorderBottomWidth)*-1);--pf-c-nav__item--m-flyout--c-menu__list-item--hover--BackgroundColor:var(--pf-c-nav__link--hover--BackgroundColor);--pf-c-nav__item--m-flyout--c-menu__list-item--focus-within--BackgroundColor:var(--pf-c-nav__link--focus--BackgroundColor);--pf-c-nav__item--m-flyout--c-menu__list-item--active--BackgroundColor:var(--pf-c-nav__link--active--BackgroundColor);--pf-c-nav__item--m-flyout--c-menu__list-item--first-child__item--hover--after--Top:0;--pf-c-nav__item--m-flyout--c-menu--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-nav--c-menu--BackgroundColor:var(--pf-global--BackgroundColor--dark-300);--pf-c-nav--c-menu__list--PaddingTop:0;--pf-c-nav--c-menu__list--PaddingBottom:0;--pf-c-nav--c-menu__list-item--Color:var(--pf-global--Color--light-100);--pf-c-nav--c-menu__list-item--hover--Color:var(--pf-global--Color--light-100);--pf-c-nav--c-menu__list-item--active--Color:var(--pf-global--Color--light-100);--pf-c-nav--c-menu__list-item--focus-within--Color:var(--pf-global--Color--light-100);--pf-c-nav--c-menu__list-item--hover--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav--c-menu__list-item--focus-within--BackgroundColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav--c-menu__list-item--m-drill-up--before--BorderBottomWidth:var(--pf-global--BorderWidth--lg);--pf-c-nav--c-menu__list-item--m-drill-up__item--FontWeight:var(--pf-global--FontWeight--bold);--pf-c-nav--c-menu__item--PaddingTop:var(--pf-global--spacer--md);--pf-c-nav--c-menu__item--PaddingRight:var(--pf-global--spacer--md);--pf-c-nav--c-menu__item--PaddingBottom:var(--pf-global--spacer--md);--pf-c-nav--c-menu__item--PaddingLeft:var(--pf-global--spacer--md);--pf-c-nav--c-menu__item--xl--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav--c-menu__item--xl--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav--c-menu__item--FontSize:var(--pf-global--FontSize--sm);--pf-c-nav--c-menu__item--OutlineOffset:calc(var(--pf-global--spacer--xs)*-1);--pf-c-nav--c-menu__item--before--BorderBottomWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav--c-menu__item--before--BorderBottomColor:var(--pf-global--BackgroundColor--dark-200);--pf-c-nav--c-menu__item--after--BorderLeftWidth:0;--pf-c-nav--c-menu__item--after--BorderLeftColor:transparent;--pf-c-nav--c-menu__item--m-current--BackgroundColor:var(--pf-global--BackgroundColor--dark-400);--pf-c-nav--c-menu__item--m-current--after--BorderLeftWidth:var(--pf-global--BorderWidth--xl);--pf-c-nav--c-menu__item--m-current--after--BorderColor:var(--pf-global--active-color--400);--pf-c-nav--c-menu__item-description--Color:var(--pf-global--Color--400);--pf-c-nav--c-menu--m-flyout--left-offset:0.25rem;--pf-c-nav--c-menu--m-flyout--m-left--right-offset:0.25rem;--pf-c-nav--c-menu--m-flyout--Top:0;--pf-c-nav--c-menu--m-flyout--c-menu--Top:calc(var(--pf-c-nav--c-menu--m-flyout--Top)*-1);--pf-c-nav--c-menu--m-flyout--c-menu--Right:auto;--pf-c-nav--c-menu--m-flyout--c-menu--Bottom:auto;--pf-c-nav--c-menu--m-flyout--c-menu--Left:calc(100% - var(--pf-c-nav--c-menu--m-flyout--left-offset));--pf-c-nav--c-menu--m-flyout--m-left--Right:calc(100% - var(--pf-c-nav--c-menu--m-flyout--m-left--right-offset));--pf-c-nav--c-menu--m-flyout--m-top--Bottom:0;--pf-c-nav--c-menu--m-flyout--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-nav--c-menu--m-flyout__item--PaddingTop:var(--pf-global--spacer--sm);--pf-c-nav--c-menu--m-flyout__item--PaddingRight:var(--pf-global--spacer--lg);--pf-c-nav--c-menu--m-flyout__item--PaddingBottom:var(--pf-global--spacer--sm);--pf-c-nav--c-menu--m-flyout__item--PaddingLeft:var(--pf-global--spacer--lg);--pf-c-nav--c-menu--m-flyout__item--hover--after--BorderLeftWidth:var(--pf-global--BorderWidth--sm);--pf-c-nav--c-menu--m-flyout__item--hover--after--BorderLeftColor:var(--pf-global--BorderColor--200);--pf-c-nav__toggle--m-start--MarginRight:var(--pf-global--spacer--sm);position:relative}@media screen and (min-width:1200px){.pf-c-nav{--pf-c-nav__link--PaddingRight:var(--pf-c-nav__link--xl--PaddingRight);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav__link--xl--PaddingLeft);--pf-c-nav--m-horizontal-subnav__link--PaddingTop:var(--pf-c-nav--m-horizontal-subnav__link--xl--PaddingTop);--pf-c-nav--m-horizontal-subnav__link--PaddingRight:var(--pf-c-nav--m-horizontal-subnav__link--xl--PaddingRight);--pf-c-nav--m-horizontal-subnav__link--PaddingBottom:var(--pf-c-nav--m-horizontal-subnav__link--xl--PaddingBottom);--pf-c-nav--m-horizontal-subnav__link--PaddingLeft:var(--pf-c-nav--m-horizontal-subnav__link--xl--PaddingLeft);--pf-c-nav__section__link--PaddingRight:var(--pf-c-nav__section__link--xl--PaddingRight);--pf-c-nav__section__link--PaddingLeft:var(--pf-c-nav__section__link--xl--PaddingLeft);--pf-c-nav__section-title--PaddingRight:var(--pf-c-nav__section-title--xl--PaddingRight);--pf-c-nav__section-title--PaddingLeft:var(--pf-c-nav__section-title--xl--PaddingLeft);--pf-c-nav__subnav--PaddingLeft:var(--pf-c-nav__subnav--xl--PaddingLeft);--pf-c-nav--c-menu__item--PaddingRight:var(--pf-c-nav--c-menu__item--xl--PaddingRight);--pf-c-nav--c-menu__item--PaddingLeft:var(--pf-c-nav--c-menu__item--xl--PaddingLeft)}}.pf-c-nav .pf-c-menu{--pf-c-menu--MinWidth:100%;--pf-c-menu--BackgroundColor:var(--pf-c-nav--c-menu--BackgroundColor);--pf-c-menu__list--PaddingTop:var(--pf-c-nav--c-menu__list--PaddingTop);--pf-c-menu__list--PaddingBottom:var(--pf-c-nav--c-menu__list--PaddingBottom);--pf-c-menu__item--PaddingTop:var(--pf-c-nav--c-menu__item--PaddingTop);--pf-c-menu__item--PaddingRight:var(--pf-c-nav--c-menu__item--PaddingRight);--pf-c-menu__item--PaddingBottom:var(--pf-c-nav--c-menu__item--PaddingBottom);--pf-c-menu__item--PaddingLeft:var(--pf-c-nav--c-menu__item--PaddingLeft);--pf-c-menu__list-item--Color:var(--pf-c-nav--c-menu__list-item--Color);--pf-c-menu__list-item--hover--Color:var(--pf-c-nav--c-menu__list-item--hover--Color);--pf-c-menu__list-item--active--Color:var(--pf-c-nav--c-menu__list-item--active--Color);--pf-c-menu__list-item--focus-within--Color:var(--pf-c-nav--c-menu__list-item--focus-within--Color);--pf-c-menu__list-item--hover--BackgroundColor:var(--pf-c-nav--c-menu__list-item--hover--BackgroundColor);--pf-c-menu__list-item--focus-within--BackgroundColor:var(--pf-c-nav--c-menu__list-item--focus-within--BackgroundColor);--pf-c-menu__item-description--Color:var(--pf-c-nav--c-menu__item-description--Color)}.pf-c-nav .pf-c-menu:first-child>.pf-c-menu__content{border-bottom:var(--pf-c-nav--c-menu__item--before--BorderBottomWidth) solid var(--pf-c-nav--c-menu__item--before--BorderBottomColor)}.pf-c-nav .pf-c-menu.pf-m-flyout,.pf-c-nav .pf-c-menu.pf-m-flyout .pf-c-menu{--pf-c-menu--BoxShadow:var(--pf-c-nav--c-menu--m-flyout--BoxShadow);--pf-c-menu__list--PaddingTop:0;--pf-c-menu__list--PaddingBottom:0;--pf-c-menu__item--FontSize:var(--pf-c-nav--c-menu__item--FontSize);--pf-c-menu__item--Color:var(--pf-c-nav--c-menu__item--Color,inherit);--pf-c-menu__item--PaddingTop:var(--pf-c-nav--c-menu--m-flyout__item--PaddingTop);--pf-c-menu__item--PaddingRight:var(--pf-c-nav--c-menu--m-flyout__item--PaddingRight);--pf-c-menu__item--PaddingBottom:var(--pf-c-nav--c-menu--m-flyout__item--PaddingBottom);--pf-c-menu__item--PaddingLeft:var(--pf-c-nav--c-menu--m-flyout__item--PaddingLeft);bottom:var(--pf-c-nav--c-menu--m-flyout--c-menu--Bottom);left:var(--pf-c-nav--c-menu--m-flyout--c-menu--Left);right:var(--pf-c-nav--c-menu--m-flyout--c-menu--Right);top:var(--pf-c-nav--c-menu--m-flyout--c-menu--Top)}.pf-c-nav .pf-c-menu.pf-m-flyout .pf-c-menu__item:hover{--pf-c-nav--c-menu__item--after--BorderLeftWidth:var(--pf-c-nav--c-menu--m-flyout__item--hover--after--BorderLeftWidth);--pf-c-nav--c-menu__item--after--BorderLeftColor:var(--pf-c-nav--c-menu--m-flyout__item--hover--after--BorderLeftColor)}.pf-c-nav .pf-c-menu.pf-m-top{--pf-c-nav--c-menu--m-flyout--c-menu--Top:auto;--pf-c-nav--c-menu--m-flyout--c-menu--Bottom:var(--pf-c-nav--c-menu--m-flyout--m-top--Bottom)}.pf-c-nav .pf-c-menu.pf-m-left{--pf-c-nav--c-menu--m-flyout--c-menu--Right:var(--pf-c-nav--c-menu--m-flyout--m-left--Right);--pf-c-nav--c-menu--m-flyout--c-menu--Left:auto}.pf-c-nav .pf-c-menu .pf-c-divider{margin-bottom:0;margin-top:0}.pf-c-nav .pf-c-menu__item{outline-offset:var(--pf-c-nav--c-menu__item--OutlineOffset);position:relative}.pf-c-nav .pf-c-menu__item:after,.pf-c-nav .pf-c-menu__item:before{content:"";position:absolute;top:0}.pf-c-nav .pf-c-menu__item:before{border-bottom:var(--pf-c-nav--c-menu__item--before--BorderBottomWidth) solid var(--pf-c-nav--c-menu__item--before--BorderBottomColor);bottom:calc(var(--pf-c-nav--c-menu__item--before--BorderBottomWidth)*-1);left:0;right:0}.pf-c-nav .pf-c-menu__item:after{border-left:var(--pf-c-nav--c-menu__item--after--BorderLeftWidth) solid var(--pf-c-nav--c-menu__item--after--BorderLeftColor);bottom:0;left:0}.pf-c-nav .pf-c-menu__item.pf-m-current{--pf-c-nav--c-menu__item--after--BorderLeftWidth:var(--pf-c-nav--c-menu__item--m-current--after--BorderLeftWidth);--pf-c-nav--c-menu__item--after--BorderLeftColor:var(--pf-c-nav--c-menu__item--m-current--after--BorderColor);background-color:var(--pf-c-nav--c-menu__item--m-current--BackgroundColor)}.pf-c-nav .pf-c-menu__list-item:where(.pf-m-drill-up){--pf-c-nav--c-menu__item--before--BorderBottomWidth:var(--pf-c-nav--c-menu__list-item--m-drill-up--before--BorderBottomWidth)}.pf-c-nav .pf-c-menu__list-item:where(.pf-m-drill-up)>.pf-c-menu__item{--pf-c-menu__item--FontWeight:var(--pf-c-nav--c-menu__list-item--m-drill-up__item--FontWeight)}.pf-c-nav .pf-c-menu__item-toggle-icon{margin-left:calc(var(--pf-c-menu__item-toggle-icon--PaddingLeft)*-1)}.pf-c-nav.pf-m-horizontal .pf-c-nav__link:after,.pf-c-nav.pf-m-tertiary .pf-c-nav__link:after{content:none}.pf-c-nav.pf-m-horizontal,.pf-c-nav.pf-m-horizontal-subnav,.pf-c-nav.pf-m-tertiary{overflow:hidden}.pf-c-nav.pf-m-horizontal,.pf-c-nav.pf-m-horizontal .pf-c-nav__list,.pf-c-nav.pf-m-horizontal-subnav,.pf-c-nav.pf-m-horizontal-subnav .pf-c-nav__list,.pf-c-nav.pf-m-tertiary,.pf-c-nav.pf-m-tertiary .pf-c-nav__list{display:flex;position:relative}.pf-c-nav.pf-m-horizontal .pf-c-nav__list,.pf-c-nav.pf-m-horizontal-subnav .pf-c-nav__list,.pf-c-nav.pf-m-tertiary .pf-c-nav__list{-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;flex:1;max-width:100%;overflow-x:auto;scroll-snap-type:var(--pf-c-nav__list--ScrollSnapType);scrollbar-width:none;white-space:nowrap}.pf-c-nav.pf-m-horizontal .pf-c-nav__list::-webkit-scrollbar,.pf-c-nav.pf-m-horizontal-subnav .pf-c-nav__list::-webkit-scrollbar,.pf-c-nav.pf-m-tertiary .pf-c-nav__list::-webkit-scrollbar{display:none}.pf-c-nav.pf-m-horizontal .pf-c-nav__item,.pf-c-nav.pf-m-horizontal-subnav .pf-c-nav__item,.pf-c-nav.pf-m-tertiary .pf-c-nav__item{display:flex;scroll-snap-align:var(--pf-c-nav__item--ScrollSnapAlign)}.pf-c-nav.pf-m-horizontal .pf-c-nav__link,.pf-c-nav.pf-m-horizontal-subnav .pf-c-nav__link,.pf-c-nav.pf-m-tertiary .pf-c-nav__link{align-items:center;align-self:stretch;white-space:nowrap}.pf-c-nav.pf-m-horizontal .pf-c-nav__link:before,.pf-c-nav.pf-m-horizontal-subnav .pf-c-nav__link:before,.pf-c-nav.pf-m-tertiary .pf-c-nav__link:before{bottom:0;top:auto}.pf-c-nav.pf-m-horizontal .pf-c-nav__link:before{left:var(--pf-c-nav--m-horizontal__link--Left);right:var(--pf-c-nav--m-horizontal__link--Right)}.pf-c-nav.pf-m-tertiary .pf-c-nav__link:before{left:var(--pf-c-nav--m-tertiary__link--Left);right:var(--pf-c-nav--m-tertiary__link--Right)}.pf-c-nav.pf-m-light{--pf-c-nav__item--before--BorderColor:var(--pf-c-nav--m-light__item--before--BorderColor);--pf-c-nav__item--m-current--not--m-expanded__link--BackgroundColor:var(--pf-c-nav--m-light__item--m-current--not--m-expanded__link--BackgroundColor);--pf-c-nav__link--Color:var(--pf-c-nav--m-light__link--Color);--pf-c-nav__link--hover--Color:var(--pf-c-nav--m-light__link--hover--Color);--pf-c-nav__link--focus--Color:var(--pf-c-nav--m-light__link--focus--Color);--pf-c-nav__link--active--Color:var(--pf-c-nav--m-light__link--active--Color);--pf-c-nav__link--m-current--Color:var(--pf-c-nav--m-light__link--m-current--Color);--pf-c-nav__link--hover--BackgroundColor:var(--pf-c-nav--m-light__link--hover--BackgroundColor);--pf-c-nav__link--focus--BackgroundColor:var(--pf-c-nav--m-light__link--focus--BackgroundColor);--pf-c-nav__link--active--BackgroundColor:var(--pf-c-nav--m-light__link--active--BackgroundColor);--pf-c-nav__link--m-current--BackgroundColor:var(--pf-c-nav--m-light__link--m-current--BackgroundColor);--pf-c-nav__link--before--BorderColor:var(--pf-c-nav--m-light__link--before--BorderColor);--pf-c-nav__link--after--BorderColor:var(--pf-c-nav--m-light__link--after--BorderColor);--pf-c-nav__link--m-current--after--BorderColor:var(--pf-c-nav--m-light__link--m-current--after--BorderColor);--pf-c-nav__subnav__link--hover--after--BorderColor:var(--pf-c-nav--m-light__subnav__link--hover--after--BorderColor);--pf-c-nav__subnav__link--focus--after--BorderColor:var(--pf-c-nav--m-light__subnav__link--focus--after--BorderColor);--pf-c-nav__subnav__link--active--after--BorderColor:var(--pf-c-nav--m-light__subnav__link--active--after--BorderColor);--pf-c-nav__subnav__link--m-current--after--BorderColor:var(--pf-c-nav--m-light__subnav__link--m-current--after--BorderColor);--pf-c-nav__section-title--Color:var(--pf-c-nav--m-light__section-title--Color);--pf-c-nav__section-title--BorderBottomColor:var(--pf-c-nav--m-light__section-title--BorderBottomColor)}.pf-c-nav.pf-m-light .pf-c-divider{--pf-c-divider--after--BackgroundColor:var(--pf-c-nav--m-light--c-divider--BackgroundColor)}.pf-c-nav.pf-m-horizontal{--pf-c-nav__link--PaddingTop:var(--pf-c-nav--m-horizontal__link--PaddingTop);--pf-c-nav__link--PaddingRight:var(--pf-c-nav--m-horizontal__link--PaddingRight);--pf-c-nav__link--PaddingBottom:var(--pf-c-nav--m-horizontal__link--PaddingBottom);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav--m-horizontal__link--PaddingLeft);--pf-c-nav__link--Right:var(--pf-c-nav--m-horizontal__link--Right);--pf-c-nav__link--Left:var(--pf-c-nav--m-horizontal__link--Left);--pf-c-nav__link--Color:var(--pf-c-nav--m-horizontal__link--Color);--pf-c-nav__link--hover--Color:var(--pf-c-nav--m-horizontal__link--hover--Color);--pf-c-nav__link--active--Color:var(--pf-c-nav--m-horizontal__link--active--Color);--pf-c-nav__link--focus--Color:var(--pf-c-nav--m-horizontal__link--focus--Color);--pf-c-nav__link--m-current--Color:var(--pf-c-nav--m-horizontal__link--m-current--Color);--pf-c-nav__link--BackgroundColor:var(--pf-c-nav--m-horizontal__link--BackgroundColor);--pf-c-nav__link--hover--BackgroundColor:var(--pf-c-nav--m-horizontal__link--hover--BackgroundColor);--pf-c-nav__link--focus--BackgroundColor:var(--pf-c-nav--m-horizontal__link--focus--BackgroundColor);--pf-c-nav__link--active--BackgroundColor:var(--pf-c-nav--m-horizontal__link--active--BackgroundColor);--pf-c-nav__link--m-current--BackgroundColor:var(--pf-c-nav--m-horizontal__link--m-current--BackgroundColor);--pf-c-nav__link--before--BorderColor:var(--pf-c-nav--m-horizontal__link--before--BorderColor);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-c-nav--m-horizontal__link--before--BorderWidth);--pf-c-nav__link--hover--before--BorderBottomWidth:var(--pf-c-nav--m-horizontal__link--hover--before--BorderWidth);--pf-c-nav__link--focus--before--BorderBottomWidth:var(--pf-c-nav--m-horizontal__link--focus--before--BorderWidth);--pf-c-nav__link--active--before--BorderBottomWidth:var(--pf-c-nav--m-horizontal__link--active--before--BorderWidth);--pf-c-nav__link--m-current--before--BorderBottomWidth:var(--pf-c-nav--m-horizontal__link--m-current--before--BorderWidth)}.pf-c-nav.pf-m-tertiary{--pf-c-nav__link--PaddingTop:var(--pf-c-nav--m-tertiary__link--PaddingTop);--pf-c-nav__link--PaddingRight:var(--pf-c-nav--m-tertiary__link--PaddingRight);--pf-c-nav__link--PaddingBottom:var(--pf-c-nav--m-tertiary__link--PaddingBottom);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav--m-tertiary__link--PaddingLeft);--pf-c-nav__link--Right:var(--pf-c-nav--m-tertiary__link--Right);--pf-c-nav__link--Left:var(--pf-c-nav--m-tertiary__link--Left);--pf-c-nav__link--Color:var(--pf-c-nav--m-tertiary__link--Color);--pf-c-nav__link--hover--Color:var(--pf-c-nav--m-tertiary__link--hover--Color);--pf-c-nav__link--active--Color:var(--pf-c-nav--m-tertiary__link--active--Color);--pf-c-nav__link--focus--Color:var(--pf-c-nav--m-tertiary__link--focus--Color);--pf-c-nav__link--m-current--Color:var(--pf-c-nav--m-tertiary__link--m-current--Color);--pf-c-nav__link--BackgroundColor:var(--pf-c-nav--m-tertiary__link--BackgroundColor);--pf-c-nav__link--hover--BackgroundColor:var(--pf-c-nav--m-tertiary__link--hover--BackgroundColor);--pf-c-nav__link--focus--BackgroundColor:var(--pf-c-nav--m-tertiary__link--focus--BackgroundColor);--pf-c-nav__link--active--BackgroundColor:var(--pf-c-nav--m-tertiary__link--active--BackgroundColor);--pf-c-nav__link--m-current--BackgroundColor:var(--pf-c-nav--m-tertiary__link--m-current--BackgroundColor);--pf-c-nav__link--before--BorderColor:var(--pf-c-nav--m-tertiary__link--before--BorderColor);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-c-nav--m-tertiary__link--before--BorderWidth);--pf-c-nav__link--hover--before--BorderBottomWidth:var(--pf-c-nav--m-tertiary__link--hover--before--BorderWidth);--pf-c-nav__link--focus--before--BorderBottomWidth:var(--pf-c-nav--m-tertiary__link--focus--before--BorderWidth);--pf-c-nav__link--active--before--BorderBottomWidth:var(--pf-c-nav--m-tertiary__link--active--before--BorderWidth);--pf-c-nav__link--m-current--before--BorderBottomWidth:var(--pf-c-nav--m-tertiary__link--m-current--before--BorderWidth);--pf-c-nav__scroll-button--Color:var(--pf-c-nav--m-tertiary__scroll-button--Color);--pf-c-nav__scroll-button--hover--Color:var(--pf-c-nav--m-tertiary__scroll-button--hover--Color);--pf-c-nav__scroll-button--focus--Color:var(--pf-c-nav--m-tertiary__scroll-button--focus--Color);--pf-c-nav__scroll-button--active--Color:var(--pf-c-nav--m-tertiary__scroll-button--active--Color);--pf-c-nav__scroll-button--disabled--Color:var(--pf-c-nav--m-tertiary__scroll-button--disabled--Color);--pf-c-nav__scroll-button--before--BorderColor:var(--pf-c-nav--m-tertiary__scroll-button--before--BorderColor);--pf-c-nav__scroll-button--disabled--before--BorderColor:var(--pf-c-nav--m-tertiary__scroll-button--disabled--before--BorderColor)}.pf-c-nav.pf-m-horizontal-subnav{--pf-c-nav__link--FontSize:var(--pf-c-nav--m-horizontal-subnav__link--FontSize);--pf-c-nav__link--PaddingTop:var(--pf-c-nav--m-horizontal-subnav__link--PaddingTop);--pf-c-nav__link--PaddingRight:var(--pf-c-nav--m-horizontal-subnav__link--PaddingRight);--pf-c-nav__link--PaddingBottom:var(--pf-c-nav--m-horizontal-subnav__link--PaddingBottom);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav--m-horizontal-subnav__link--PaddingLeft);--pf-c-nav__link--Color:var(--pf-c-nav--m-horizontal-subnav__link--Color);--pf-c-nav__link--Right:var(--pf-c-nav--m-horizontal-subnav__link--Right);--pf-c-nav__link--Left:var(--pf-c-nav--m-horizontal-subnav__link--Left);--pf-c-nav__link--hover--Color:var(--pf-c-nav--m-horizontal-subnav__link--hover--Color);--pf-c-nav__link--active--Color:var(--pf-c-nav--m-horizontal-subnav__link--active--Color);--pf-c-nav__link--focus--Color:var(--pf-c-nav--m-horizontal-subnav__link--focus--Color);--pf-c-nav__link--m-current--Color:var(--pf-c-nav--m-horizontal-subnav__link--m-current--Color);--pf-c-nav__link--BackgroundColor:var(--pf-c-nav--m-horizontal-subnav__link--BackgroundColor);--pf-c-nav__link--hover--BackgroundColor:var(--pf-c-nav--m-horizontal-subnav__link--hover--BackgroundColor);--pf-c-nav__link--focus--BackgroundColor:var(--pf-c-nav--m-horizontal-subnav__link--focus--BackgroundColor);--pf-c-nav__link--active--BackgroundColor:var(--pf-c-nav--m-horizontal-subnav__link--active--BackgroundColor);--pf-c-nav__link--m-current--BackgroundColor:var(--pf-c-nav--m-horizontal-subnav__link--m-current--BackgroundColor);--pf-c-nav__link--before--BorderColor:var(--pf-c-nav--m-horizontal-subnav__link--before--BorderColor);--pf-c-nav__link--after--BorderColor:var(--pf-c-nav--m-horizontal-subnav__link--after--BorderColor);--pf-c-nav__link--hover--after--BorderColor:var(--pf-c-nav--m-horizontal-subnav__link--hover--after--BorderColor);--pf-c-nav__link--active--after--BorderColor:var(--pf-c-nav--m-horizontal-subnav__link--active--after--BorderColor);--pf-c-nav__link--m-current--after--BorderColor:var(--pf-c-nav--m-horizontal-subnav__link--m-current--after--BorderColor);--pf-c-nav__link--after--BorderLeftWidth:var(--pf-c-nav--m-horizontal-subnav__link--after--BorderLeftWidth);--pf-c-nav__link--hover--after--BorderLeftWidth:var(--pf-c-nav--m-horizontal-subnav__link--hover--after--BorderLeftWidth);--pf-c-nav__link--active--after--BorderLeftWidth:var(--pf-c-nav--m-horizontal-subnav__link--active--after--BorderLeftWidth);--pf-c-nav__link--m-current--after--BorderLeftWidth:var(--pf-c-nav--m-horizontal-subnav__link--m-current--after--BorderLeftWidth)}.pf-c-nav.pf-m-horizontal-subnav.pf-m-scrollable .pf-c-nav__item:first-child{--pf-c-nav__link--after--BorderLeftWidth:0;--pf-c-nav__link--hover--after--BorderLeftWidth:0;--pf-c-nav__link--active--after--BorderLeftWidth:0;--pf-c-nav__link--m-current--after--BorderLeftWidth:0}.pf-c-nav .pf-c-divider{--pf-c-divider--after--BackgroundColor:var(--pf-c-nav--c-divider--BackgroundColor);margin-bottom:var(--pf-c-nav--c-divider--MarginBottom);margin-top:var(--pf-c-nav--c-divider--MarginTop);padding-left:var(--pf-c-nav--c-divider--PaddingLeft);padding-right:var(--pf-c-nav--c-divider--PaddingRight)}.pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button{opacity:1}.pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button:first-of-type{margin-right:0;transform:translateX(0)}.pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button:nth-of-type(2){margin-left:0;transform:translateX(0)}.pf-c-nav.pf-m-overflow-hidden{overflow:hidden}.pf-c-nav__list{display:block;position:relative}.pf-c-nav__item{margin-top:var(--pf-c-nav__item--MarginTop);position:relative}.pf-c-nav__item.pf-m-expandable{--pf-c-nav__link--before--BorderBottomWidth:0}.pf-c-nav__item.pf-m-expandable:before{border-bottom:var(--pf-c-nav__item--before--BorderWidth) solid var(--pf-c-nav__item--before--BorderColor);bottom:calc(var(--pf-c-nav__item--before--BorderWidth)*-1);content:"";left:0;position:absolute;right:0}.pf-c-nav__item .pf-c-nav__item:not(.pf-m-expanded) .pf-c-nav__toggle-icon{transform:rotate(0)}.pf-c-nav__item .pf-c-nav__item.pf-m-expandable{--pf-c-nav__toggle--FontSize:var(--pf-c-nav__item__item__toggle--FontSize);--pf-c-nav__link--PaddingRight:var(--pf-c-nav__item__item__link--PaddingRight)}@media screen and (min-width:1200px){.pf-c-nav__item .pf-c-nav__item.pf-m-expandable:before{border-bottom:none}}.pf-c-nav__item .pf-c-nav__item.pf-m-expandable .pf-c-nav__list:before{border-left:var(--pf-c-nav__item--before--BorderWidth) solid var(--pf-c-nav__item--before--BorderColor);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.pf-c-nav__item .pf-c-nav__toggle-icon{transform:rotate(var(--pf-c-nav__item__toggle-icon--Rotate))}.pf-c-nav__item.pf-m-flyout:hover{--pf-c-nav__link--BackgroundColor:var(--pf-c-nav__item--m-flyout--hover__link--BackgroundColor);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-c-nav__item--m-flyout--hover__link--before--BorderWidth)}.pf-c-nav__item.pf-m-flyout:focus{--pf-c-nav__link--BackgroundColor:var(--pf-c-nav__item--m-flyout--focus__link--BackgroundColor);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-c-nav__item--m-flyout--focus__link--before--BorderWidth)}.pf-c-nav__item.pf-m-flyout:active{--pf-c-nav__link--BackgroundColor:var(--pf-c-nav__item--m-flyout--active__link--BackgroundColor);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-c-nav__item--m-flyout--active__link--before--BorderWidth)}.pf-c-nav__item.pf-m-flyout .pf-c-menu{--pf-c-menu--MinWidth:100%;--pf-c-menu--BoxShadow:var(--pf-c-nav__item--m-flyout--c-menu--BoxShadow);--pf-c-menu--BackgroundColor:var(--pf-c-nav__item--m-flyout--c-menu--BackgroundColor);--pf-c-menu__list--PaddingTop:0;--pf-c-menu__list--PaddingBottom:0;--pf-c-menu__list-item--hover--BackgroundColor:var(--pf-c-nav__item--m-flyout--c-menu__list-item--hover--BackgroundColor);--pf-c-menu__list-item--focus-within--BackgroundColor:var(--pf-c-nav__item--m-flyout--c-menu__list-item--focus-within--BackgroundColor);--pf-c-menu__list-item--active--BackgroundColor:var(--pf-c-nav__item--m-flyout--c-menu__list-item--active--BackgroundColor);--pf-c-menu__item--FontSize:var(--pf-c-nav__item--m-flyout--c-menu__item--FontSize);--pf-c-menu__item--Color:var(--pf-c-nav__item--m-flyout--c-menu__item--Color);--pf-c-menu__item--PaddingTop:var(--pf-c-nav__item--m-flyout--c-menu__item--PaddingTop);--pf-c-menu__item--PaddingRight:var(--pf-c-nav__item--m-flyout--c-menu__item--PaddingRight);--pf-c-menu__item--PaddingBottom:var(--pf-c-nav__item--m-flyout--c-menu__item--PaddingBottom);--pf-c-menu__item--PaddingLeft:var(--pf-c-nav__item--m-flyout--c-menu__item--PaddingLeft);--pf-c-menu__item-description--Color:var(--pf-c-nav__item--m-flyout--c-menu__item-description--Color);--pf-c-nav--c-menu--m-flyout--c-menu--Bottom:var(--pf-c-nav__item--m-flyout--c-menu--m-top--Bottom);--pf-c-nav--c-menu--m-flyout--c-menu--Right:var(--pf-c-nav__item--m-flyout--c-menu--m-left--Right);left:var(--pf-c-nav__item--m-flyout--c-menu--Left);position:absolute;top:var(--pf-c-nav__item--m-flyout--c-menu--Top)}.pf-c-nav__item.pf-m-flyout .pf-c-menu .pf-c-menu{top:var(--pf-c-nav__item--m-flyout--c-menu--c-menu--Top)}.pf-c-nav__item.pf-m-flyout .pf-c-menu .pf-c-menu__list-item:first-child{--pf-c-nav__item--m-flyout--c-menu--c-menu--Top:var(--pf-c-nav__item--m-flyout--c-menu__list-item--first-child--c-menu--Top);--pf-c-nav__item--m-flyout--c-menu__item--hover--after--Top:var(--pf-c-nav__item--m-flyout--c-menu__list-item--first-child__item--hover--after--Top)}.pf-c-nav__item.pf-m-flyout .pf-c-menu .pf-c-menu__item{outline-offset:var(--pf-c-nav__item--m-flyout--c-menu__item--OutlineOffset);position:relative}.pf-c-nav__item.pf-m-flyout .pf-c-menu .pf-c-menu__item:before{border-bottom:var(--pf-c-nav__item--m-flyout--c-menu__item--before--BorderBottomWidth) solid var(--pf-c-nav__item--m-flyout--c-menu__item--before--BorderBottomColor);bottom:0;content:"";left:0;position:absolute;right:0}.pf-c-nav__item.pf-m-flyout .pf-c-menu .pf-c-menu__item:hover:after{border-left:var(--pf-c-nav__item--m-flyout--c-menu__item--hover--after--BorderLeftWidth) solid var(--pf-c-nav__item--m-flyout--c-menu__item--hover--after--BorderLeftColor);bottom:0;content:"";left:0;position:absolute;top:var(--pf-c-nav__item--m-flyout--c-menu__item--hover--after--Top)}.pf-c-nav__item.pf-m-drilldown.pf-m-expanded>.pf-c-nav__subnav{left:0;z-index:var(--pf-c-nav__item--m-drilldown--m-expanded__subnav--ZIndex)}.pf-c-nav__link{align-items:baseline;background-color:var(--pf-c-nav__link--BackgroundColor);color:var(--pf-c-nav__link--Color);display:flex;font-size:var(--pf-c-nav__link--FontSize);font-weight:var(--pf-c-nav__link--FontWeight);outline-offset:var(--pf-c-nav__link--OutlineOffset);padding:var(--pf-c-nav__link--PaddingTop) var(--pf-c-nav__link--PaddingRight) var(--pf-c-nav__link--PaddingBottom) var(--pf-c-nav__link--PaddingLeft);position:relative}.pf-c-nav__link:after,.pf-c-nav__link:before{border:0 solid;content:"";position:absolute}.pf-c-nav__link:before{border-bottom-width:var(--pf-c-nav__link--before--BorderBottomWidth);border-color:var(--pf-c-nav__link--before--BorderColor);bottom:calc(var(--pf-c-nav__link--before--BorderBottomWidth)*-1);left:0;right:0}.pf-c-nav__link:after{border:0 solid;border-color:var(--pf-c-nav__link--after--BorderColor);border-left-width:var(--pf-c-nav__link--after--BorderLeftWidth);bottom:0;left:0;top:0}.pf-c-nav__link.pf-m-hover,.pf-c-nav__link:hover{background-color:var(--pf-c-nav__link--hover--BackgroundColor);color:var(--pf-c-nav__link--hover--Color)}.pf-c-nav__link.pf-m-hover:before,.pf-c-nav__link:hover:before{border-bottom-width:var(--pf-c-nav__link--hover--before--BorderBottomWidth)}.pf-c-nav__link.pf-m-hover:after,.pf-c-nav__link:hover:after{border-color:var(--pf-c-nav__link--hover--after--BorderColor);border-left-width:var(--pf-c-nav__link--hover--after--BorderLeftWidth)}.pf-c-nav__link:focus{background-color:var(--pf-c-nav__link--focus--BackgroundColor);color:var(--pf-c-nav__link--focus--Color)}.pf-c-nav__link:focus:before{border-bottom-width:var(--pf-c-nav__link--focus--before--BorderBottomWidth)}.pf-c-nav__link:focus:after{border-color:var(--pf-c-nav__link--focus--after--BorderColor);border-left-width:var(--pf-c-nav__link--focus--after--BorderLeftWidth)}.pf-c-nav__link:active{background-color:var(--pf-c-nav__link--active--BackgroundColor);color:var(--pf-c-nav__link--active--Color)}.pf-c-nav__link:active:before{border-bottom-width:var(--pf-c-nav__link--active--before--BorderBottomWidth)}.pf-c-nav__link:active:after{border-color:var(--pf-c-nav__link--active--after--BorderColor);border-left-width:var(--pf-c-nav__link--active--after--BorderLeftWidth)}.pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link,.pf-c-nav__link.pf-m-current,.pf-c-nav__link.pf-m-current:hover{background-color:var(--pf-c-nav__link--m-current--BackgroundColor);color:var(--pf-c-nav__link--m-current--Color)}.pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link:before,.pf-c-nav__link.pf-m-current:before,.pf-c-nav__link.pf-m-current:hover:before{border-bottom-width:var(--pf-c-nav__link--m-current--before--BorderBottomWidth)}.pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link:after,.pf-c-nav__link.pf-m-current:after,.pf-c-nav__link.pf-m-current:hover:after{border-color:var(--pf-c-nav__link--m-current--after--BorderColor);border-left-width:var(--pf-c-nav__link--m-current--after--BorderLeftWidth)}.pf-c-nav__link,.pf-c-nav__link:active,.pf-c-nav__link:focus,.pf-c-nav__link:hover{border:none;text-decoration:none;width:100%}.pf-c-nav__subnav{--pf-c-nav__link--PaddingTop:var(--pf-c-nav__subnav__link--PaddingTop);--pf-c-nav__link--PaddingRight:var(--pf-c-nav__subnav__link--PaddingRight);--pf-c-nav__link--PaddingBottom:var(--pf-c-nav__subnav__link--PaddingBottom);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav__subnav__link--PaddingLeft);--pf-c-nav__link--FontSize:var(--pf-c-nav__subnav__link--FontSize);--pf-c-nav__link--hover--after--BorderColor:var(--pf-c-nav__subnav__link--hover--after--BorderColor);--pf-c-nav__link--focus--after--BorderColor:var(--pf-c-nav__subnav__link--focus--after--BorderColor);--pf-c-nav__link--active--after--BorderColor:var(--pf-c-nav__subnav__link--active--after--BorderColor);--pf-c-nav__link--m-current--after--BorderColor:var(--pf-c-nav__subnav__link--m-current--after--BorderColor);--pf-c-nav__link--hover--after--BorderLeftWidth:var(--pf-c-nav__subnav__link--hover--after--BorderWidth);--pf-c-nav__link--focus--after--BorderLeftWidth:var(--pf-c-nav__subnav__link--focus--after--BorderWidth);--pf-c-nav__link--active--after--BorderLeftWidth:var(--pf-c-nav__subnav__link--active--after--BorderWidth);--pf-c-nav__link--m-current--after--BorderLeftWidth:var(--pf-c-nav__subnav__link--m-current--after--BorderWidth);--pf-c-nav--c-divider--PaddingRight:var(--pf-c-nav__subnav--c-divider--PaddingRight);--pf-c-nav--c-divider--PaddingLeft:var(--pf-c-nav__subnav--c-divider--PaddingLeft);-ms-overflow-style:-ms-autohiding-scrollbar;max-height:var(--pf-c-nav__subnav--MaxHeight);padding-bottom:var(--pf-c-nav__subnav--PaddingBottom);padding-left:var(--pf-c-nav__subnav--PaddingLeft);scrollbar-width:none;transition:var(--pf-c-nav--Transition)}.pf-c-nav__subnav .pf-c-nav__subnav{--pf-c-nav__link--FontSize:var(--pf-c-nav__subnav__subnav__link--FontSize);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav__subnav__subnav__link--PaddingLeft);--pf-c-nav__subnav--PaddingLeft:var(--pf-c-nav__subnav__subnav--PaddingLeft)}.pf-c-nav__subnav.pf-m-flyout{width:100%}.pf-c-nav__item.pf-m-expanded .pf-c-nav__subnav{--pf-c-nav__subnav--MaxHeight:var(--pf-c-nav__item--m-expanded__subnav--MaxHeight);opacity:1;overflow-y:auto}.pf-c-nav__subnav::-webkit-scrollbar{display:none}.pf-c-nav__toggle{flex:none;font-size:var(--pf-c-nav__toggle--FontSize);line-height:1;margin-left:auto;padding-left:var(--pf-c-nav__toggle--PaddingLeft);padding-right:var(--pf-c-nav__toggle--PaddingRight)}.pf-c-nav__toggle.pf-m-start{margin-left:calc(var(--pf-c-nav__toggle--PaddingRight)*-1);margin-right:var(--pf-c-nav__toggle--m-start--MarginRight)}.pf-c-nav__toggle-icon{display:inline-block;transition:var(--pf-c-nav__toggle-icon--Transition)}.pf-c-nav__item.pf-m-expanded .pf-c-nav__toggle-icon{transform:rotate(var(--pf-c-nav__item--m-expanded__toggle-icon--Rotate))}.pf-c-nav__section{--pf-c-nav__item--MarginTop:var(--pf-c-nav__section__item--MarginTop);--pf-c-nav__link--PaddingTop:var(--pf-c-nav__section__link--PaddingTop);--pf-c-nav__link--PaddingRight:var(--pf-c-nav__section__link--PaddingRight);--pf-c-nav__link--PaddingBottom:var(--pf-c-nav__section__link--PaddingBottom);--pf-c-nav__link--PaddingLeft:var(--pf-c-nav__section__link--PaddingLeft);--pf-c-nav__link--FontSize:var(--pf-c-nav__section__link--FontSize);--pf-c-nav__link--before--BorderBottomWidth:var(--pf-c-nav__section__link--before--BorderBottomWidth);--pf-c-nav__link--hover--after--BorderColor:var(--pf-c-nav__section__link--hover--after--BorderColor);--pf-c-nav__link--focus--after--BorderColor:var(--pf-c-nav__section__link--focus--after--BorderColor);--pf-c-nav__link--active--after--BorderColor:var(--pf-c-nav__section__link--active--after--BorderColor);--pf-c-nav__link--m-current--after--BorderColor:var(--pf-c-nav__section__link--m-current--after--BorderColor);--pf-c-nav__link--hover--after--BorderLeftWidth:var(--pf-c-nav__section__link--hover--after--BorderWidth);--pf-c-nav__link--focus--after--BorderLeftWidth:var(--pf-c-nav__section__link--focus--after--BorderWidth);--pf-c-nav__link--active--after--BorderLeftWidth:var(--pf-c-nav__section__link--active--after--BorderWidth);--pf-c-nav__link--m-current--after--BorderLeftWidth:var(--pf-c-nav__section__link--m-current--after--BorderWidth);--pf-c-nav--c-divider--MarginBottom:0;margin-top:var(--pf-c-nav__section--MarginTop)}.pf-c-nav__section+.pf-c-nav__section{--pf-c-nav__section--MarginTop:var(--pf-c-nav__section--section--MarginTop)}.pf-c-nav__section.pf-m-no-title{--pf-c-nav__section--MarginTop:0}.pf-c-nav__section-title{border-bottom:var(--pf-c-nav__section-title--BorderBottomWidth) solid var(--pf-c-nav__section-title--BorderBottomColor);color:var(--pf-c-nav__section-title--Color);font-size:var(--pf-c-nav__section-title--FontSize);padding:var(--pf-c-nav__section-title--PaddingTop) var(--pf-c-nav__section-title--PaddingRight) var(--pf-c-nav__section-title--PaddingBottom) var(--pf-c-nav__section-title--PaddingLeft)}.pf-c-nav__scroll-button{background-color:var(--pf-c-nav__scroll-button--BackgroundColor);border:0;color:var(--pf-c-nav__scroll-button--Color);flex:none;opacity:0;outline-offset:var(--pf-c-nav__scroll-button--OutlineOffset);transition:var(--pf-c-nav__scroll-button--Transition);width:var(--pf-c-nav__scroll-button--Width)}.pf-c-nav__scroll-button:before{border:solid var(--pf-c-nav__scroll-button--before--BorderColor);border-width:0 var(--pf-c-nav__scroll-button--before--BorderRightWidth) 0 var(--pf-c-nav__scroll-button--before--BorderLeftWidth);bottom:0;content:"";position:absolute;top:0}.pf-c-nav__scroll-button:hover{color:var(--pf-c-nav__scroll-button--hover--Color)}.pf-c-nav__scroll-button:focus{color:var(--pf-c-nav__scroll-button--focus--Color)}.pf-c-nav__scroll-button:active{color:var(--pf-c-nav__scroll-button--active--Color)}.pf-c-nav__scroll-button:disabled{border-color:var(--pf-c-nav__scroll-button--disabled--before--BorderColor);color:var(--pf-c-nav__scroll-button--disabled--Color)}.pf-c-nav__scroll-button:first-of-type{--pf-c-nav__scroll-button--before--BorderRightWidth:var(--pf-c-nav__scroll-button--before--BorderWidth);margin-right:calc(var(--pf-c-nav__scroll-button--Width)*-1);transform:translateX(-100%)}.pf-c-nav__scroll-button:first-of-type:before{right:0}.pf-c-nav__scroll-button:nth-of-type(2){--pf-c-nav__scroll-button--before--BorderLeftWidth:var(--pf-c-nav__scroll-button--before--BorderWidth);margin-left:calc(var(--pf-c-nav__scroll-button--Width)*-1);transform:translateX(100%)}.pf-c-nav__scroll-button:nth-of-type(2):before{left:0}:where(.pf-theme-dark) .pf-c-nav{--pf-c-nav__item--item__link--after--Top:-1px;--pf-c-nav__item--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-nav__link--hover--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-nav__link--focus--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-nav__link--active--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-nav__link--m-current--BackgroundColor:var(--pf-global--BackgroundColor--300);--pf-c-nav__link--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-nav--m-tertiary__scroll-button--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-nav__section-title--Color:var(--pf-global--Color--200);--pf-c-nav__section-title--BorderBottomColor:var(--pf-global--BorderColor--100);--pf-c-nav__scroll-button--before--BorderColor:var(--pf-global--BorderColor--100);--pf-c-nav--c-divider--BackgroundColor:var(--pf-global--BorderColor--100);--pf-c-nav__link--hover--before--BorderBottomWidth:0;--pf-c-nav__link--focus--before--BorderBottomWidth:0;--pf-c-nav__link--active--before--BorderBottomWidth:0;--pf-c-nav__link--m-current--before--BorderBottomWidth:0}:where(.pf-theme-dark) .pf-c-nav__link:before{bottom:0}:where(.pf-theme-dark) .pf-c-nav__link:after{top:var(--pf-c-nav__item--item__link--after--Top)}:where(.pf-theme-dark) .pf-c-nav__item+.pf-c-nav__item{--pf-c-nav__link--after--Top:var(--pf-c-nav__item--item__link--after--Top)}:where(.pf-theme-dark) .pf-c-nav__subnav{--pf-c-nav__item--item__link--after--Top:0}:where(.pf-theme-dark) .pf-c-nav__section{--pf-c-nav__item--item__link--after--Top:0}.pf-c-skip-to-content{--pf-c-skip-to-content--Top:var(--pf-global--spacer--md);--pf-c-skip-to-content--ZIndex:var(--pf-global--ZIndex--2xl);--pf-c-skip-to-content--focus--Left:var(--pf-global--spacer--md);left:-300%;position:absolute;top:var(--pf-c-skip-to-content--Top);z-index:var(--pf-c-skip-to-content--ZIndex)}.pf-c-skip-to-content:focus{left:var(--pf-c-skip-to-content--focus--Left)}.pf-c-alert-group{--pf-c-alert-group__item--MarginTop:var(--pf-global--spacer--sm);--pf-c-alert-group--m-toast--Top:var(--pf-global--spacer--2xl);--pf-c-alert-group--m-toast--Right:var(--pf-global--spacer--xl);--pf-c-alert-group--m-toast--MaxWidth:37.5rem;--pf-c-alert-group--m-toast--ZIndex:var(--pf-global--ZIndex--2xl);--pf-c-alert-group__overflow-button--BorderWidth:0;--pf-c-alert-group__overflow-button--PaddingTop:var(--pf-global--spacer--lg);--pf-c-alert-group__overflow-button--PaddingRight:var(--pf-global--spacer--md);--pf-c-alert-group__overflow-button--PaddingBottom:var(--pf-global--spacer--lg);--pf-c-alert-group__overflow-button--PaddingLeft:var(--pf-global--spacer--md);--pf-c-alert-group__overflow-button--Color:var(--pf-global--link--Color);--pf-c-alert-group__overflow-button--BoxShadow:var(--pf-global--BoxShadow--lg);--pf-c-alert-group__overflow-button--BackgroundColor:var(--pf-global--BackgroundColor--100);--pf-c-alert-group__overflow-button--hover--Color:var(--pf-global--link--Color--hover);--pf-c-alert-group__overflow-button--hover--BoxShadow:var(--pf-global--BoxShadow--lg),var(--pf-global--BoxShadow--lg-bottom);--pf-c-alert-group__overflow-button--focus--Color:var(--pf-global--link--Color--hover);--pf-c-alert-group__overflow-button--focus--BoxShadow:var(--pf-global--BoxShadow--lg),var(--pf-global--BoxShadow--lg-bottom);--pf-c-alert-group__overflow-button--active--Color:var(--pf-global--link--Color--hover);--pf-c-alert-group__overflow-button--active--BoxShadow:var(--pf-global--BoxShadow--lg),var(--pf-global--BoxShadow--lg-bottom)}.pf-c-alert-group>*+*{margin-top:var(--pf-c-alert-group__item--MarginTop)}.pf-c-alert-group.pf-m-toast{max-width:var(--pf-c-alert-group--m-toast--MaxWidth);position:fixed;right:var(--pf-c-alert-group--m-toast--Right);top:var(--pf-c-alert-group--m-toast--Top);width:calc(100% - var(--pf-c-alert-group--m-toast--Right)*2);z-index:var(--pf-c-alert-group--m-toast--ZIndex)}.pf-c-alert-group__overflow-button{background-color:var(--pf-c-alert-group__overflow-button--BackgroundColor);border-width:var(--pf-c-alert-group__overflow-button--BorderWidth);box-shadow:var(--pf-c-alert-group__overflow-button--BoxShadow);color:var(--pf-c-alert-group__overflow-button--Color);padding:var(--pf-c-alert-group__overflow-button--PaddingTop) var(--pf-c-alert-group__overflow-button--PaddingRight) var(--pf-c-alert-group__overflow-button--PaddingBottom) var(--pf-c-alert-group__overflow-button--PaddingLeft);position:relative;width:100%}.pf-c-alert-group__overflow-button:hover{--pf-c-alert-group__overflow-button--Color:var(--pf-c-alert-group__overflow-button--hover--Color);--pf-c-alert-group__overflow-button--BoxShadow:var(--pf-c-alert-group__overflow-button--hover--BoxShadow)}.pf-c-alert-group__overflow-button:focus{--pf-c-alert-group__overflow-button--Color:var(--pf-c-alert-group__overflow-button--focus--Color);--pf-c-alert-group__overflow-button--BoxShadow:var(--pf-c-alert-group__overflow-button--focus--BoxShadow)}.pf-c-alert-group__overflow-button:active{--pf-c-alert-group__overflow-button--Color:var(--pf-c-alert-group__overflow-button--active--Color);--pf-c-alert-group__overflow-button--BoxShadow:var(--pf-c-alert-group__overflow-button--active--BoxShadow)}
\ No newline at end of file
diff --git a/assets/demo/site/app.5719b38e10b241d3.bundle.js b/assets/demo/site/app.5719b38e10b241d3.bundle.js
new file mode 100644
index 00000000..37b483aa
--- /dev/null
+++ b/assets/demo/site/app.5719b38e10b241d3.bundle.js
@@ -0,0 +1 @@
+(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[2143],{37158:(Q,F,U)=>{var B={"./af.js":[15903,4920],"./am.js":[29911,4920],"./ar-dz.js":[47200,4920],"./ar-iq.js":[87719,4920],"./ar-kw.js":[62376,4920],"./ar-ly.js":[48540,4920],"./ar-ma.js":[96817,4920],"./ar-sa.js":[11573,4920],"./ar-tn.js":[99339,4920],"./ar.js":[63939,4920],"./az.js":[88092,4920],"./be.js":[60504,4920],"./bg.js":[19091,4920],"./bi.js":[19149,4920],"./bm.js":[15287,4920],"./bn-bd.js":[54067,4920],"./bn.js":[35254,4920],"./bo.js":[52502,4920],"./br.js":[8864,4920],"./bs.js":[4502,4920],"./ca.js":[33646,4920],"./cs.js":[98507,4920],"./cv.js":[16636,4920],"./cy.js":[28792,4920],"./da.js":[17427,4920],"./de-at.js":[73237,4920],"./de-ch.js":[16148,4920],"./de.js":[80790,4920],"./dv.js":[11794,4920],"./el.js":[65423,4920],"./en-au.js":[85109,4920],"./en-ca.js":[55105,4920],"./en-gb.js":[99517,4920],"./en-ie.js":[30758,4920],"./en-il.js":[95805,4920],"./en-in.js":[88529,4920],"./en-nz.js":[50302,4920],"./en-sg.js":[35941,4920],"./en-tt.js":[46183,4920],"./en.js":[25054,4920],"./eo.js":[74990,4920],"./es-do.js":[3864,4920],"./es-mx.js":[37118,4920],"./es-pr.js":[23521,4920],"./es-us.js":[36165,4920],"./es.js":[67763,4920],"./et.js":[99670,4920],"./eu.js":[46629,4920],"./fa.js":[96953,4920],"./fi.js":[47822,4920],"./fo.js":[69197,4920],"./fr-ca.js":[77989,4920],"./fr-ch.js":[54254,4920],"./fr.js":[96023,4920],"./fy.js":[93220,4920],"./ga.js":[47467,4920],"./gd.js":[54855,4920],"./gl.js":[90229,4920],"./gom-latn.js":[46312,4920],"./gu.js":[87632,4920],"./he.js":[45418,4920],"./hi.js":[77573,4920],"./hr.js":[96257,4920],"./ht.js":[98889,4920],"./hu.js":[68562,4920],"./hy-am.js":[38242,4920],"./id.js":[83783,4920],"./is.js":[98980,4920],"./it-ch.js":[83706,4920],"./it.js":[15551,4920],"./ja.js":[76831,4920],"./jv.js":[42641,4920],"./ka.js":[46622,4920],"./kk.js":[32921,4920],"./km.js":[45567,4920],"./kn.js":[21113,4920],"./ko.js":[19132,4920],"./ku.js":[94888,4920],"./ky.js":[60466,4920],"./lb.js":[91796,4920],"./lo.js":[68894,4920],"./lt.js":[78768,4920],"./lv.js":[30953,4920],"./me.js":[18066,4920],"./mi.js":[68602,4920],"./mk.js":[51560,4920],"./ml.js":[4017,4920],"./mn.js":[94717,4920],"./mr.js":[15473,4920],"./ms-my.js":[77387,4920],"./ms.js":[5742,4920],"./mt.js":[28477,4920],"./my.js":[62966,4920],"./nb.js":[19682,4920],"./ne.js":[14149,4920],"./nl-be.js":[37496,4920],"./nl.js":[99182,4920],"./nn.js":[92722,4920],"./oc-lnc.js":[76159,4920],"./pa-in.js":[35914,4920],"./pl.js":[81987,4920],"./pt-br.js":[57548,4920],"./pt.js":[15001,4920],"./rn.js":[123,4920],"./ro.js":[18146,4920],"./ru.js":[70600,4920],"./rw.js":[6509,4920],"./sd.js":[65437,4920],"./se.js":[772,4920],"./si.js":[77109,4920],"./sk.js":[35627,4920],"./sl.js":[82544,4920],"./sq.js":[88341,4920],"./sr-cyrl.js":[37101,4920],"./sr.js":[50617,4920],"./ss.js":[64127,4920],"./sv-fi.js":[19911,4920],"./sv.js":[91876,4920],"./sw.js":[46148,4920],"./ta.js":[55596,4920],"./te.js":[45159,4920],"./tet.js":[99157,4920],"./tg.js":[9928,4920],"./th.js":[62019,4920],"./tk.js":[75817,4920],"./tl-ph.js":[46513,4920],"./tlh.js":[97296,4920],"./tr.js":[73035,4920],"./tzl.js":[57797,4920],"./tzm-latn.js":[30261,4920],"./tzm.js":[84722,4920],"./ug-cn.js":[80313,4920],"./uk.js":[64144,4920],"./ur.js":[92957,4920],"./uz-latn.js":[98727,4920],"./uz.js":[7486,4920],"./vi.js":[37553,4920],"./x-pseudo.js":[55321,4920],"./yo.js":[14724,4920],"./zh-cn.js":[33852,4920],"./zh-hk.js":[2390,4920],"./zh-tw.js":[43901,4920],"./zh.js":[32009,4920]};function e(Q){if(!U.o(B,Q))return Promise.resolve().then((()=>{var F=new Error("Cannot find module '"+Q+"'");throw F.code="MODULE_NOT_FOUND",F}));var F=B[Q],e=F[0];return U.e(F[1]).then((()=>U.t(e,23)))}e.keys=()=>Object.keys(B),e.id=37158,Q.exports=e},72913:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "J": () => (/* binding */ LoadingView)\n/* harmony export */ });\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(52643);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9947);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38424);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2372);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(60485);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar LoadingView = function (props) {\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_1__/* .Bullseye */ .b, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .EmptyState */ .u, null,\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_3__/* .EmptyStateIcon */ .k, { variant: "container", component: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_4__/* .Spinner */ .$ }),\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_5__/* .Title */ .D, { size: "lg", headingLevel: "h2" }, props.title || \'Loading\')))));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI5MTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQUMyRjtBQUMvRDtBQU14QixJQUFNLFdBQVcsR0FBK0IsVUFBQyxLQUFLO0lBQzNELE9BQU8sQ0FDTDtRQUNFLGlEQUFDLHFFQUFRO1lBQ1AsaURBQUMsdUVBQVU7Z0JBQ1QsaURBQUMsMkVBQWMsSUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLFNBQVMsRUFBRSxvRUFBTyxHQUFJO2dCQUMxRCxpREFBQyxrRUFBSyxJQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsWUFBWSxFQUFDLElBQUksSUFDL0IsS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQ25CLENBQ0csQ0FDSixDQUNWLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvTG9hZGluZ1ZpZXcvTG9hZGluZ1ZpZXcudHN4P2UyMDEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBCdWxsc2V5ZSwgRW1wdHlTdGF0ZSwgRW1wdHlTdGF0ZUljb24sIFNwaW5uZXIsIFRpdGxlIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ1ZpZXdQcm9wcyB7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgTG9hZGluZ1ZpZXc6IFJlYWN0LkZDPExvYWRpbmdWaWV3UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgICAgPEVtcHR5U3RhdGVJY29uIHZhcmlhbnQ9XCJjb250YWluZXJcIiBjb21wb25lbnQ9e1NwaW5uZXJ9IC8+XG4gICAgICAgICAgPFRpdGxlIHNpemU9XCJsZ1wiIGhlYWRpbmdMZXZlbD1cImgyXCI+XG4gICAgICAgICAgICB7cHJvcHMudGl0bGUgfHwgJ0xvYWRpbmcnfVxuICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgIDwvQnVsbHNleWU+XG4gICAgPC8+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///72913\n')},28829:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Y1": () => (/* binding */ getFromWarningMap),\n/* harmony export */ "gF": () => (/* binding */ DeleteOrDisableWarningType)\n/* harmony export */ });\n/* unused harmony exports DeleteActiveRecordings, DeleteArchivedRecordings, DeleteAutomatedRules, DisableAutomatedRules, DeleteEventTemplates, DeleteProbeTemplates, DeleteActiveProbes, DeleteCredentials, DeleteCustomTargets, DeleteDashboardLayout, DeleteLayoutTemplate, DeleteWarningKinds */\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar DeleteOrDisableWarningType;\n(function (DeleteOrDisableWarningType) {\n DeleteOrDisableWarningType["DeleteActiveRecordings"] = "DeleteActiveRecordings";\n DeleteOrDisableWarningType["DeleteArchivedRecordings"] = "DeleteArchivedRecordings";\n DeleteOrDisableWarningType["DeleteAutomatedRules"] = "DeleteAutomatedRules";\n DeleteOrDisableWarningType["DisableAutomatedRules"] = "DisableAutomatedRules";\n DeleteOrDisableWarningType["DeleteEventTemplates"] = "DeleteEventTemplates";\n DeleteOrDisableWarningType["DeleteProbeTemplates"] = "DeleteProbeTemplates";\n DeleteOrDisableWarningType["DeleteActiveProbes"] = "DeleteActiveProbes";\n DeleteOrDisableWarningType["DeleteCredentials"] = "DeleteCredentials";\n DeleteOrDisableWarningType["DeleteCustomTargets"] = "DeleteCustomTargets";\n DeleteOrDisableWarningType["DeleteDashboardLayout"] = "DeleteDashboardLayout";\n DeleteOrDisableWarningType["DeleteLayoutTemplate"] = "DeleteLayoutTemplate";\n})(DeleteOrDisableWarningType || (DeleteOrDisableWarningType = {}));\nvar DeleteActiveRecordings = {\n id: DeleteOrDisableWarningType.DeleteActiveRecordings,\n title: \'Permanently delete your JFR recording?\',\n label: \'Delete Active Recording\',\n description: "If you click delete, recording and report data will be lost.",\n ariaLabel: \'Recording delete warning\',\n};\nvar DeleteArchivedRecordings = {\n id: DeleteOrDisableWarningType.DeleteArchivedRecordings,\n title: \'Permanently delete your archived JFR recording?\',\n label: \'Delete Archived Recording\',\n description: "If you click delete, recording and report data will be lost.",\n ariaLabel: \'Recording delete warning\',\n};\nvar DeleteAutomatedRules = {\n id: DeleteOrDisableWarningType.DeleteAutomatedRules,\n title: \'Permanently delete your Automated Rule?\',\n label: \'Delete Automated Rule\',\n description: "If you click delete, rule data will be lost.",\n ariaLabel: \'Automated rule delete warning\',\n};\nvar DisableAutomatedRules = {\n id: DeleteOrDisableWarningType.DisableAutomatedRules,\n title: \'Disable your Automated Rule?\',\n label: \'Disable Automated Rule\',\n description: "If you click delete, the rule will be disabled.",\n ariaLabel: \'Automated rule disable warning\',\n};\nvar DeleteEventTemplates = {\n id: DeleteOrDisableWarningType.DeleteEventTemplates,\n title: \'Permanently delete your Event Template?\',\n label: \'Delete Event Template\',\n description: "If you click delete, custom event template data will be lost.",\n ariaLabel: \'Event template delete warning\',\n};\nvar DeleteProbeTemplates = {\n id: DeleteOrDisableWarningType.DeleteProbeTemplates,\n title: \'Permanently delete your Probe Template?\',\n label: \'Delete Probe Template\',\n description: "If you click delete, custom probe template data will be lost.",\n ariaLabel: \'Probe template delete warning\',\n};\nvar DeleteActiveProbes = {\n id: DeleteOrDisableWarningType.DeleteActiveProbes,\n title: \'Permanently remove your Active Probes from the target?\',\n label: \'Remove Active Probes\',\n description: "If you click delete, active probes will be removed from the target.",\n ariaLabel: \'Active Probes remove warning\',\n};\nvar DeleteCredentials = {\n id: DeleteOrDisableWarningType.DeleteCredentials,\n title: \'Permanently delete your Credentials?\',\n label: \'Delete Credentials\',\n description: "If you click delete, credential data for this target will be lost.",\n ariaLabel: \'Credentials delete warning\',\n};\nvar DeleteCustomTargets = {\n id: DeleteOrDisableWarningType.DeleteCustomTargets,\n title: \'Permanently delete your Custom Target?\',\n label: \'Delete Custom Targets\',\n description: "If you click delete, custom target information will be lost.",\n ariaLabel: \'Custom Targets delete warning\',\n};\nvar DeleteDashboardLayout = {\n id: DeleteOrDisableWarningType.DeleteDashboardLayout,\n title: \'Permanently delete your Dashboard Layout?\',\n label: \'Delete Dashboard Layouts\',\n description: "If you click delete, dashboard layout configuration data will be lost.",\n ariaLabel: \'Dashboard Layout delete warning\',\n};\nvar DeleteLayoutTemplate = {\n id: DeleteOrDisableWarningType.DeleteLayoutTemplate,\n title: \'Permanently delete your Layout Template?\',\n label: \'Delete Layout Template\',\n description: "If you click delete, layout template configuration data will be lost.",\n ariaLabel: \'Layout Template delete warning\',\n};\nvar DeleteWarningKinds = [\n DeleteActiveRecordings,\n DeleteArchivedRecordings,\n DeleteAutomatedRules,\n DisableAutomatedRules,\n DeleteEventTemplates,\n DeleteProbeTemplates,\n DeleteActiveProbes,\n DeleteCredentials,\n DeleteCustomTargets,\n DeleteDashboardLayout,\n DeleteLayoutTemplate,\n];\nvar getFromWarningMap = function (warning) {\n var wt = DeleteWarningKinds.find(function (t) { return t.id === warning; });\n return wt;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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MEJBQTBCLENBQUMscUJBQXFCO0lBQ3BELEtBQUssRUFBRSwyQ0FBMkM7SUFDbEQsS0FBSyxFQUFFLDBCQUEwQjtJQUNqQyxXQUFXLEVBQUUsd0VBQXdFO0lBQ3JGLFNBQVMsRUFBRSxpQ0FBaUM7Q0FDN0MsQ0FBQztBQUVLLElBQU0sb0JBQW9CLEdBQTJCO0lBQzFELEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxvQkFBb0I7SUFDbkQsS0FBSyxFQUFFLDBDQUEwQztJQUNqRCxLQUFLLEVBQUUsd0JBQXdCO0lBQy9CLFdBQVcsRUFBRSx1RUFBdUU7SUFDcEYsU0FBUyxFQUFFLGdDQUFnQztDQUM1QyxDQUFDO0FBRUssSUFBTSxrQkFBa0IsR0FBNkI7SUFDMUQsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4QixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLG9CQUFvQjtDQUNyQixDQUFDO0FBRUssSUFBTSxpQkFBaUIsR0FBRyxVQUFDLE9BQW1DO0lBQ25FLElBQU0sRUFBRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsSUFBSyxRQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBaEIsQ0FBZ0IsQ0FBQyxDQUFDO0lBQzVELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Nb2RhbC9EZWxldGVXYXJuaW5nVXRpbHMudHN4PzU4NzEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5leHBvcnQgZW51bSBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSB7XG4gIERlbGV0ZUFjdGl2ZVJlY29yZGluZ3MgPSAnRGVsZXRlQWN0aXZlUmVjb3JkaW5ncycsXG4gIERlbGV0ZUFyY2hpdmVkUmVjb3JkaW5ncyA9ICdEZWxldGVBcmNoaXZlZFJlY29yZGluZ3MnLFxuICBEZWxldGVBdXRvbWF0ZWRSdWxlcyA9ICdEZWxldGVBdXRvbWF0ZWRSdWxlcycsXG4gIERpc2FibGVBdXRvbWF0ZWRSdWxlcyA9ICdEaXNhYmxlQXV0b21hdGVkUnVsZXMnLFxuICBEZWxldGVFdmVudFRlbXBsYXRlcyA9ICdEZWxldGVFdmVudFRlbXBsYXRlcycsXG4gIERlbGV0ZVByb2JlVGVtcGxhdGVzID0gJ0RlbGV0ZVByb2JlVGVtcGxhdGVzJyxcbiAgRGVsZXRlQWN0aXZlUHJvYmVzID0gJ0RlbGV0ZUFjdGl2ZVByb2JlcycsXG4gIERlbGV0ZUNyZWRlbnRpYWxzID0gJ0RlbGV0ZUNyZWRlbnRpYWxzJyxcbiAgRGVsZXRlQ3VzdG9tVGFyZ2V0cyA9ICdEZWxldGVDdXN0b21UYXJnZXRzJyxcbiAgRGVsZXRlRGFzaGJvYXJkTGF5b3V0ID0gJ0RlbGV0ZURhc2hib2FyZExheW91dCcsXG4gIERlbGV0ZUxheW91dFRlbXBsYXRlID0gJ0RlbGV0ZUxheW91dFRlbXBsYXRlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVPckRpc2FibGVXYXJuaW5nIHtcbiAgaWQ6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlO1xuICB0aXRsZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhcmlhTGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERlbGV0ZUFjdGl2ZVJlY29yZGluZ3M6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmcgPSB7XG4gIGlkOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVBY3RpdmVSZWNvcmRpbmdzLFxuICB0aXRsZTogJ1Blcm1hbmVudGx5IGRlbGV0ZSB5b3VyIEpGUiByZWNvcmRpbmc/JyxcbiAgbGFiZWw6ICdEZWxldGUgQWN0aXZlIFJlY29yZGluZycsXG4gIGRlc2NyaXB0aW9uOiBgSWYgeW91IGNsaWNrIGRlbGV0ZSwgcmVjb3JkaW5nIGFuZCByZXBvcnQgZGF0YSB3aWxsIGJlIGxvc3QuYCxcbiAgYXJpYUxhYmVsOiAnUmVjb3JkaW5nIGRlbGV0ZSB3YXJuaW5nJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEZWxldGVBcmNoaXZlZFJlY29yZGluZ3M6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmcgPSB7XG4gIGlkOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVBcmNoaXZlZFJlY29yZGluZ3MsXG4gIHRpdGxlOiAnUGVybWFuZW50bHkgZGVsZXRlIHlvdXIgYXJjaGl2ZWQgSkZSIHJlY29yZGluZz8nLFxuICBsYWJlbDogJ0RlbGV0ZSBBcmNoaXZlZCBSZWNvcmRpbmcnLFxuICBkZXNjcmlwdGlvbjogYElmIHlvdSBjbGljayBkZWxldGUsIHJlY29yZGluZyBhbmQgcmVwb3J0IGRhdGEgd2lsbCBiZSBsb3N0LmAsXG4gIGFyaWFMYWJlbDogJ1JlY29yZGluZyBkZWxldGUgd2FybmluZycsXG59O1xuXG5leHBvcnQgY29uc3QgRGVsZXRlQXV0b21hdGVkUnVsZXM6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmcgPSB7XG4gIGlkOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVBdXRvbWF0ZWRSdWxlcyxcbiAgdGl0bGU6ICdQZXJtYW5lbnRseSBkZWxldGUgeW91ciBBdXRvbWF0ZWQgUnVsZT8nLFxuICBsYWJlbDogJ0RlbGV0ZSBBdXRvbWF0ZWQgUnVsZScsXG4gIGRlc2NyaXB0aW9uOiBgSWYgeW91IGNsaWNrIGRlbGV0ZSwgcnVsZSBkYXRhIHdpbGwgYmUgbG9zdC5gLFxuICBhcmlhTGFiZWw6ICdBdXRvbWF0ZWQgcnVsZSBkZWxldGUgd2FybmluZycsXG59O1xuXG5leHBvcnQgY29uc3QgRGlzYWJsZUF1dG9tYXRlZFJ1bGVzOiBEZWxldGVPckRpc2FibGVXYXJuaW5nID0ge1xuICBpZDogRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGlzYWJsZUF1dG9tYXRlZFJ1bGVzLFxuICB0aXRsZTogJ0Rpc2FibGUgeW91ciBBdXRvbWF0ZWQgUnVsZT8nLFxuICBsYWJlbDogJ0Rpc2FibGUgQXV0b21hdGVkIFJ1bGUnLFxuICBkZXNjcmlwdGlvbjogYElmIHlvdSBjbGljayBkZWxldGUsIHRoZSBydWxlIHdpbGwgYmUgZGlzYWJsZWQuYCxcbiAgYXJpYUxhYmVsOiAnQXV0b21hdGVkIHJ1bGUgZGlzYWJsZSB3YXJuaW5nJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEZWxldGVFdmVudFRlbXBsYXRlczogRGVsZXRlT3JEaXNhYmxlV2FybmluZyA9IHtcbiAgaWQ6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUV2ZW50VGVtcGxhdGVzLFxuICB0aXRsZTogJ1Blcm1hbmVudGx5IGRlbGV0ZSB5b3VyIEV2ZW50IFRlbXBsYXRlPycsXG4gIGxhYmVsOiAnRGVsZXRlIEV2ZW50IFRlbXBsYXRlJyxcbiAgZGVzY3JpcHRpb246IGBJZiB5b3UgY2xpY2sgZGVsZXRlLCBjdXN0b20gZXZlbnQgdGVtcGxhdGUgZGF0YSB3aWxsIGJlIGxvc3QuYCxcbiAgYXJpYUxhYmVsOiAnRXZlbnQgdGVtcGxhdGUgZGVsZXRlIHdhcm5pbmcnLFxufTtcblxuZXhwb3J0IGNvbnN0IERlbGV0ZVByb2JlVGVtcGxhdGVzOiBEZWxldGVPckRpc2FibGVXYXJuaW5nID0ge1xuICBpZDogRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlUHJvYmVUZW1wbGF0ZXMsXG4gIHRpdGxlOiAnUGVybWFuZW50bHkgZGVsZXRlIHlvdXIgUHJvYmUgVGVtcGxhdGU/JyxcbiAgbGFiZWw6ICdEZWxldGUgUHJvYmUgVGVtcGxhdGUnLFxuICBkZXNjcmlwdGlvbjogYElmIHlvdSBjbGljayBkZWxldGUsIGN1c3RvbSBwcm9iZSB0ZW1wbGF0ZSBkYXRhIHdpbGwgYmUgbG9zdC5gLFxuICBhcmlhTGFiZWw6ICdQcm9iZSB0ZW1wbGF0ZSBkZWxldGUgd2FybmluZycsXG59O1xuXG5leHBvcnQgY29uc3QgRGVsZXRlQWN0aXZlUHJvYmVzOiBEZWxldGVPckRpc2FibGVXYXJuaW5nID0ge1xuICBpZDogRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlQWN0aXZlUHJvYmVzLFxuICB0aXRsZTogJ1Blcm1hbmVudGx5IHJlbW92ZSB5b3VyIEFjdGl2ZSBQcm9iZXMgZnJvbSB0aGUgdGFyZ2V0PycsXG4gIGxhYmVsOiAnUmVtb3ZlIEFjdGl2ZSBQcm9iZXMnLFxuICBkZXNjcmlwdGlvbjogYElmIHlvdSBjbGljayBkZWxldGUsIGFjdGl2ZSBwcm9iZXMgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHRhcmdldC5gLFxuICBhcmlhTGFiZWw6ICdBY3RpdmUgUHJvYmVzIHJlbW92ZSB3YXJuaW5nJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEZWxldGVDcmVkZW50aWFsczogRGVsZXRlT3JEaXNhYmxlV2FybmluZyA9IHtcbiAgaWQ6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUNyZWRlbnRpYWxzLFxuICB0aXRsZTogJ1Blcm1hbmVudGx5IGRlbGV0ZSB5b3VyIENyZWRlbnRpYWxzPycsXG4gIGxhYmVsOiAnRGVsZXRlIENyZWRlbnRpYWxzJyxcbiAgZGVzY3JpcHRpb246IGBJZiB5b3UgY2xpY2sgZGVsZXRlLCBjcmVkZW50aWFsIGRhdGEgZm9yIHRoaXMgdGFyZ2V0IHdpbGwgYmUgbG9zdC5gLFxuICBhcmlhTGFiZWw6ICdDcmVkZW50aWFscyBkZWxldGUgd2FybmluZycsXG59O1xuXG5leHBvcnQgY29uc3QgRGVsZXRlQ3VzdG9tVGFyZ2V0czogRGVsZXRlT3JEaXNhYmxlV2FybmluZyA9IHtcbiAgaWQ6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUN1c3RvbVRhcmdldHMsXG4gIHRpdGxlOiAnUGVybWFuZW50bHkgZGVsZXRlIHlvdXIgQ3VzdG9tIFRhcmdldD8nLFxuICBsYWJlbDogJ0RlbGV0ZSBDdXN0b20gVGFyZ2V0cycsXG4gIGRlc2NyaXB0aW9uOiBgSWYgeW91IGNsaWNrIGRlbGV0ZSwgY3VzdG9tIHRhcmdldCBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3QuYCxcbiAgYXJpYUxhYmVsOiAnQ3VzdG9tIFRhcmdldHMgZGVsZXRlIHdhcm5pbmcnLFxufTtcblxuZXhwb3J0IGNvbnN0IERlbGV0ZURhc2hib2FyZExheW91dDogRGVsZXRlT3JEaXNhYmxlV2FybmluZyA9IHtcbiAgaWQ6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZURhc2hib2FyZExheW91dCxcbiAgdGl0bGU6ICdQZXJtYW5lbnRseSBkZWxldGUgeW91ciBEYXNoYm9hcmQgTGF5b3V0PycsXG4gIGxhYmVsOiAnRGVsZXRlIERhc2hib2FyZCBMYXlvdXRzJyxcbiAgZGVzY3JpcHRpb246IGBJZiB5b3UgY2xpY2sgZGVsZXRlLCBkYXNoYm9hcmQgbGF5b3V0IGNvbmZpZ3VyYXRpb24gZGF0YSB3aWxsIGJlIGxvc3QuYCxcbiAgYXJpYUxhYmVsOiAnRGFzaGJvYXJkIExheW91dCBkZWxldGUgd2FybmluZycsXG59O1xuXG5leHBvcnQgY29uc3QgRGVsZXRlTGF5b3V0VGVtcGxhdGU6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmcgPSB7XG4gIGlkOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVMYXlvdXRUZW1wbGF0ZSxcbiAgdGl0bGU6ICdQZXJtYW5lbnRseSBkZWxldGUgeW91ciBMYXlvdXQgVGVtcGxhdGU/JyxcbiAgbGFiZWw6ICdEZWxldGUgTGF5b3V0IFRlbXBsYXRlJyxcbiAgZGVzY3JpcHRpb246IGBJZiB5b3UgY2xpY2sgZGVsZXRlLCBsYXlvdXQgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBkYXRhIHdpbGwgYmUgbG9zdC5gLFxuICBhcmlhTGFiZWw6ICdMYXlvdXQgVGVtcGxhdGUgZGVsZXRlIHdhcm5pbmcnLFxufTtcblxuZXhwb3J0IGNvbnN0IERlbGV0ZVdhcm5pbmdLaW5kczogRGVsZXRlT3JEaXNhYmxlV2FybmluZ1tdID0gW1xuICBEZWxldGVBY3RpdmVSZWNvcmRpbmdzLFxuICBEZWxldGVBcmNoaXZlZFJlY29yZGluZ3MsXG4gIERlbGV0ZUF1dG9tYXRlZFJ1bGVzLFxuICBEaXNhYmxlQXV0b21hdGVkUnVsZXMsXG4gIERlbGV0ZUV2ZW50VGVtcGxhdGVzLFxuICBEZWxldGVQcm9iZVRlbXBsYXRlcyxcbiAgRGVsZXRlQWN0aXZlUHJvYmVzLFxuICBEZWxldGVDcmVkZW50aWFscyxcbiAgRGVsZXRlQ3VzdG9tVGFyZ2V0cyxcbiAgRGVsZXRlRGFzaGJvYXJkTGF5b3V0LFxuICBEZWxldGVMYXlvdXRUZW1wbGF0ZSxcbl07XG5cbmV4cG9ydCBjb25zdCBnZXRGcm9tV2FybmluZ01hcCA9ICh3YXJuaW5nOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSk6IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB3dCA9IERlbGV0ZVdhcm5pbmdLaW5kcy5maW5kKCh0KSA9PiB0LmlkID09PSB3YXJuaW5nKTtcbiAgcmV0dXJuIHd0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///28829\n')},1570:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Bn": () => (/* binding */ NotificationsInstance),\n/* harmony export */ "cJ": () => (/* binding */ NotificationsContext)\n/* harmony export */ });\n/* unused harmony export Notifications */\n/* harmony import */ var _app_Shared_Services_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23384);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88754);\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(53416);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(67294);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86515);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94975);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(51313);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(89475);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(29127);\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar Notifications = /** @class */ (function () {\n function Notifications() {\n var _this = this;\n this._notifications$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .BehaviorSubject */ .X([]);\n this._drawerState$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .BehaviorSubject */ .X(false);\n this._drawerState$\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__/* .filter */ .h)(function (v) { return v; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__/* .concatMap */ .b)(function () { return _this._notifications$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .first */ .P)()); }))\n .subscribe(function (prev) {\n return _this._notifications$.next(prev.map(function (n) { return (__assign(__assign({}, n), { hidden: true })); }));\n });\n }\n Notifications.prototype.drawerState = function () {\n return this._drawerState$.asObservable();\n };\n Notifications.prototype.setDrawerState = function (state) {\n this._drawerState$.next(state);\n };\n Notifications.prototype.notify = function (notification) {\n var _this = this;\n if (!notification.key) {\n notification.key = (0,nanoid__WEBPACK_IMPORTED_MODULE_6__/* .nanoid */ .x0)();\n }\n notification.read = false;\n if (notification.hidden === undefined) {\n notification.hidden = this._drawerState$.getValue();\n }\n notification.timestamp = +Date.now();\n if (notification.message instanceof Error) {\n notification.message = JSON.stringify(notification.message, Object.getOwnPropertyNames(notification.message));\n }\n else if (typeof notification.message !== \'string\') {\n notification.message = JSON.stringify(notification.message);\n }\n this._notifications$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .first */ .P)()).subscribe(function (prev) {\n prev.unshift(notification);\n _this._notifications$.next(prev);\n });\n };\n Notifications.prototype.success = function (title, message, category, hidden) {\n this.notify({ title: title, message: message, category: category, variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__/* .AlertVariant.success */ .U.success, hidden: hidden });\n };\n Notifications.prototype.info = function (title, message, category, hidden) {\n this.notify({ title: title, message: message, category: category, variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__/* .AlertVariant.info */ .U.info, hidden: hidden });\n };\n Notifications.prototype.warning = function (title, message, category) {\n this.notify({ title: title, message: message, category: category, variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__/* .AlertVariant.warning */ .U.warning });\n };\n Notifications.prototype.danger = function (title, message, category) {\n this.notify({ title: title, message: message, category: category, variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__/* .AlertVariant.danger */ .U.danger });\n };\n Notifications.prototype.notifications = function () {\n return this._notifications$.asObservable();\n };\n Notifications.prototype.unreadNotifications = function () {\n return this.notifications().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (a) { return a.filter(function (n) { return !n.read; }); }));\n };\n Notifications.prototype.actionsNotifications = function () {\n var _this = this;\n return this.notifications().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (a) { return a.filter(function (n) { return _this.isActionNotification(n); }); }));\n };\n Notifications.prototype.cryostatStatusNotifications = function () {\n var _this = this;\n return this.notifications().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (a) {\n return a.filter(function (n) { return (_this.isWsClientActivity(n) || _this.isJvmDiscovery(n)) && !Notifications.isProblemNotification(n); });\n }));\n };\n Notifications.prototype.problemsNotifications = function () {\n return this.notifications().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (a) { return a.filter(Notifications.isProblemNotification); }));\n };\n Notifications.prototype.setHidden = function (key, hidden) {\n var _this = this;\n if (hidden === void 0) { hidden = true; }\n if (!key) {\n return;\n }\n this._notifications$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .first */ .P)()).subscribe(function (prev) {\n for (var _i = 0, prev_1 = prev; _i < prev_1.length; _i++) {\n var n = prev_1[_i];\n if (n.key === key) {\n n.hidden = hidden;\n }\n }\n _this._notifications$.next(prev);\n });\n };\n Notifications.prototype.setRead = function (key, read) {\n var _this = this;\n if (read === void 0) { read = true; }\n if (!key) {\n return;\n }\n this._notifications$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .first */ .P)()).subscribe(function (prev) {\n for (var _i = 0, prev_2 = prev; _i < prev_2.length; _i++) {\n var n = prev_2[_i];\n if (n.key === key) {\n n.read = read;\n }\n }\n _this._notifications$.next(prev);\n });\n };\n Notifications.prototype.markAllRead = function () {\n var _this = this;\n this._notifications$.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .first */ .P)()).subscribe(function (prev) {\n for (var _i = 0, prev_3 = prev; _i < prev_3.length; _i++) {\n var n = prev_3[_i];\n n.read = true;\n }\n _this._notifications$.next(prev);\n });\n };\n Notifications.prototype.clearAll = function () {\n this._notifications$.next([]);\n };\n Notifications.prototype.isActionNotification = function (n) {\n return !this.isWsClientActivity(n) && !this.isJvmDiscovery(n) && !Notifications.isProblemNotification(n);\n };\n Notifications.prototype.isWsClientActivity = function (n) {\n return n.category === _app_Shared_Services_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_0__/* .NotificationCategory.WsClientActivity */ .mN.WsClientActivity;\n };\n Notifications.prototype.isJvmDiscovery = function (n) {\n return n.category === _app_Shared_Services_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_0__/* .NotificationCategory.TargetJvmDiscovery */ .mN.TargetJvmDiscovery;\n };\n Notifications.isProblemNotification = function (n) {\n return n.variant === _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__/* .AlertVariant.warning */ .U.warning || n.variant === _patternfly_react_core__WEBPACK_IMPORTED_MODULE_7__/* .AlertVariant.danger */ .U.danger;\n };\n return Notifications;\n}());\n\nvar NotificationsInstance = new Notifications();\nvar NotificationsContext = react__WEBPACK_IMPORTED_MODULE_1__.createContext(NotificationsInstance);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVPLDBDQUFrQixHQUExQixVQUEyQixDQUFlO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyw4SUFBcUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sc0NBQWMsR0FBdEIsVUFBdUIsQ0FBZTtRQUNwQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssa0pBQXVDLENBQUM7SUFDaEUsQ0FBQztJQUVNLG1DQUFxQixHQUE1QixVQUE2QixDQUFlO1FBQzFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSyx5RkFBb0IsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLHVGQUFtQixDQUFDO0lBQ2pGLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUM7O0FBRUQsSUFBTSxxQkFBcUIsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBRWxELElBQU0sb0JBQW9CLEdBQUcsZ0RBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVqQiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zLnRzeD82ZjU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnkgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Ob3RpZmljYXRpb25DaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRWYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIGZpbHRlciwgZmlyc3QsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb24ge1xuICBoaWRkZW4/OiBib29sZWFuO1xuICByZWFkPzogYm9vbGVhbjtcbiAga2V5Pzogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3I7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICB2YXJpYW50OiBBbGVydFZhcmlhbnQ7XG4gIHRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ub3RpZmljYXRpb25zJDogQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhdGlvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tm90aWZpY2F0aW9uW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHJhd2VyU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9kcmF3ZXJTdGF0ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHYpID0+IHYpLFxuICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5fbm90aWZpY2F0aW9ucyQucGlwZShmaXJzdCgpKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHByZXYpID0+XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQoXG4gICAgICAgICAgcHJldi5tYXAoKG4pID0+ICh7XG4gICAgICAgICAgICAuLi5uLFxuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZHJhd2VyU3RhdGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdlclN0YXRlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldERyYXdlclN0YXRlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhd2VyU3RhdGUkLm5leHQoc3RhdGUpO1xuICB9XG5cbiAgbm90aWZ5KG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFub3RpZmljYXRpb24ua2V5KSB7XG4gICAgICBub3RpZmljYXRpb24ua2V5ID0gbmFub2lkKCk7XG4gICAgfVxuICAgIG5vdGlmaWNhdGlvbi5yZWFkID0gZmFsc2U7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5oaWRkZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbm90aWZpY2F0aW9uLmhpZGRlbiA9IHRoaXMuX2RyYXdlclN0YXRlJC5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBub3RpZmljYXRpb24udGltZXN0YW1wID0gK0RhdGUubm93KCk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIG5vdGlmaWNhdGlvbi5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobm90aWZpY2F0aW9uLm1lc3NhZ2UsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG5vdGlmaWNhdGlvbi5tZXNzYWdlKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygbm90aWZpY2F0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICBub3RpZmljYXRpb24ubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KG5vdGlmaWNhdGlvbi5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucyQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKHByZXYpID0+IHtcbiAgICAgIHByZXYudW5zaGlmdChub3RpZmljYXRpb24pO1xuICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChwcmV2KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1Y2Nlc3ModGl0bGU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZyB8IEVycm9yLCBjYXRlZ29yeT86IHN0cmluZywgaGlkZGVuPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubm90aWZ5KHsgdGl0bGUsIG1lc3NhZ2UsIGNhdGVnb3J5LCB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcywgaGlkZGVuIH0pO1xuICB9XG5cbiAgaW5mbyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IsIGNhdGVnb3J5Pzogc3RyaW5nLCBoaWRkZW4/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZnkoeyB0aXRsZSwgbWVzc2FnZSwgY2F0ZWdvcnksIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5pbmZvLCBoaWRkZW4gfSk7XG4gIH1cblxuICB3YXJuaW5nKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvciwgY2F0ZWdvcnk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmeSh7IHRpdGxlLCBtZXNzYWdlLCBjYXRlZ29yeSwgdmFyaWFudDogQWxlcnRWYXJpYW50Lndhcm5pbmcgfSk7XG4gIH1cblxuICBkYW5nZXIodGl0bGU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZyB8IEVycm9yLCBjYXRlZ29yeT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubm90aWZ5KHsgdGl0bGUsIG1lc3NhZ2UsIGNhdGVnb3J5LCB2YXJpYW50OiBBbGVydFZhcmlhbnQuZGFuZ2VyIH0pO1xuICB9XG5cbiAgbm90aWZpY2F0aW9ucygpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgdW5yZWFkTm90aWZpY2F0aW9ucygpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucygpLnBpcGUobWFwKChhKSA9PiBhLmZpbHRlcigobikgPT4gIW4ucmVhZCkpKTtcbiAgfVxuXG4gIGFjdGlvbnNOb3RpZmljYXRpb25zKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zKCkucGlwZShtYXAoKGEpID0+IGEuZmlsdGVyKChuKSA9PiB0aGlzLmlzQWN0aW9uTm90aWZpY2F0aW9uKG4pKSkpO1xuICB9XG5cbiAgY3J5b3N0YXRTdGF0dXNOb3RpZmljYXRpb25zKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zKCkucGlwZShcbiAgICAgIG1hcCgoYSkgPT5cbiAgICAgICAgYS5maWx0ZXIoXG4gICAgICAgICAgKG4pID0+ICh0aGlzLmlzV3NDbGllbnRBY3Rpdml0eShuKSB8fCB0aGlzLmlzSnZtRGlzY292ZXJ5KG4pKSAmJiAhTm90aWZpY2F0aW9ucy5pc1Byb2JsZW1Ob3RpZmljYXRpb24obilcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm9ibGVtc05vdGlmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMoKS5waXBlKG1hcCgoYSkgPT4gYS5maWx0ZXIoTm90aWZpY2F0aW9ucy5pc1Byb2JsZW1Ob3RpZmljYXRpb24pKSk7XG4gIH1cblxuICBzZXRIaWRkZW4oa2V5Pzogc3RyaW5nLCBoaWRkZW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucyQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKHByZXYpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbiBvZiBwcmV2KSB7XG4gICAgICAgIGlmIChuLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgbi5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQocHJldik7XG4gICAgfSk7XG4gIH1cblxuICBzZXRSZWFkKGtleT86IHN0cmluZywgcmVhZCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgocHJldikgPT4ge1xuICAgICAgZm9yIChjb25zdCBuIG9mIHByZXYpIHtcbiAgICAgICAgaWYgKG4ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICBuLnJlYWQgPSByZWFkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KHByZXYpO1xuICAgIH0pO1xuICB9XG5cbiAgbWFya0FsbFJlYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucyQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKHByZXYpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbiBvZiBwcmV2KSB7XG4gICAgICAgIG4ucmVhZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KHByZXYpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbXSk7XG4gIH1cblxuICBwcml2YXRlIGlzQWN0aW9uTm90aWZpY2F0aW9uKG46IE5vdGlmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1dzQ2xpZW50QWN0aXZpdHkobikgJiYgIXRoaXMuaXNKdm1EaXNjb3ZlcnkobikgJiYgIU5vdGlmaWNhdGlvbnMuaXNQcm9ibGVtTm90aWZpY2F0aW9uKG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1dzQ2xpZW50QWN0aXZpdHkobjogTm90aWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG4uY2F0ZWdvcnkgPT09IE5vdGlmaWNhdGlvbkNhdGVnb3J5LldzQ2xpZW50QWN0aXZpdHk7XG4gIH1cblxuICBwcml2YXRlIGlzSnZtRGlzY292ZXJ5KG46IE5vdGlmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuLmNhdGVnb3J5ID09PSBOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRKdm1EaXNjb3Zlcnk7XG4gIH1cblxuICBzdGF0aWMgaXNQcm9ibGVtTm90aWZpY2F0aW9uKG46IE5vdGlmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuLnZhcmlhbnQgPT09IEFsZXJ0VmFyaWFudC53YXJuaW5nIHx8IG4udmFyaWFudCA9PT0gQWxlcnRWYXJpYW50LmRhbmdlcjtcbiAgfVxufVxuXG5jb25zdCBOb3RpZmljYXRpb25zSW5zdGFuY2UgPSBuZXcgTm90aWZpY2F0aW9ucygpO1xuXG5jb25zdCBOb3RpZmljYXRpb25zQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoTm90aWZpY2F0aW9uc0luc3RhbmNlKTtcblxuZXhwb3J0IHsgTm90aWZpY2F0aW9uc0NvbnRleHQsIE5vdGlmaWNhdGlvbnNJbnN0YW5jZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1570\n')},22345:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "a": () => (/* binding */ MatchedTargetsTable)\n/* harmony export */ });\n/* harmony import */ var _app_LoadingView_LoadingView__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72913);\n/* harmony import */ var _app_Shared_Services_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23384);\n/* harmony import */ var _app_Shared_Services_Services__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(35881);\n/* harmony import */ var _app_utils_useSort__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(73484);\n/* harmony import */ var _app_utils_useSubscriptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61139);\n/* harmony import */ var _app_utils_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52648);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(9947);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(38424);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(60485);\n/* harmony import */ var _patternfly_react_icons__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(80810);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(83360);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(86151);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(56494);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(46040);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(987);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(58240);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(35890);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(3134);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(96486);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(67294);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\nvar tableColumns = [\n {\n title: \'Target\',\n keyPaths: [\'alias\'],\n transform: function (_alias, target) {\n return target.alias === target.connectUrl || !target.alias\n ? "".concat(target.connectUrl)\n : "".concat(target.alias, " (").concat(target.connectUrl, ")");\n },\n sortable: true,\n },\n];\nvar MatchedTargetsTable = function (_a) {\n var id = _a.id, matchExpression = _a.matchExpression;\n var context = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_app_Shared_Services_Services__WEBPACK_IMPORTED_MODULE_2__/* .ServiceContext */ .o);\n var _b = react__WEBPACK_IMPORTED_MODULE_7__.useState([]), targets = _b[0], setTargets = _b[1];\n var _c = (0,_app_utils_useSort__WEBPACK_IMPORTED_MODULE_3__/* .useSort */ .Z)(), sortBy = _c[0], getSortParams = _c[1];\n var _d = react__WEBPACK_IMPORTED_MODULE_7__.useState(false), isLoading = _d[0], setIsLoading = _d[1];\n var addSubscription = (0,_app_utils_useSubscriptions__WEBPACK_IMPORTED_MODULE_4__/* .useSubscriptions */ .P)();\n var refreshTargetsList = react__WEBPACK_IMPORTED_MODULE_7__.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api.getCredential(id).subscribe(function (v) {\n setTargets(v.targets);\n setIsLoading(false);\n }));\n }, [addSubscription, setIsLoading, context.api, setTargets, id]);\n react__WEBPACK_IMPORTED_MODULE_7__.useEffect(function () {\n refreshTargetsList();\n }, [refreshTargetsList]);\n react__WEBPACK_IMPORTED_MODULE_7__.useEffect(function () {\n addSubscription(context.notificationChannel.messages(_app_Shared_Services_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_1__/* .NotificationCategory.TargetJvmDiscovery */ .mN.TargetJvmDiscovery).subscribe(function (v) {\n var evt = v.message.event;\n var target = evt.serviceRef;\n if (evt.kind === \'FOUND\') {\n var match = eval(matchExpression);\n if (match) {\n setTargets(function (old) { return old.concat(target); });\n }\n }\n else if (evt.kind === \'LOST\') {\n setTargets(function (old) { return old.filter(function (o) { return !lodash__WEBPACK_IMPORTED_MODULE_6___default().isEqual(o, target); }); });\n }\n }));\n }, [addSubscription, context, context.notificationChannel, setTargets, matchExpression]);\n var targetRows = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () {\n var _a, _b;\n return (0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_5__/* .sortResources */ .rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : _patternfly_react_table__WEBPACK_IMPORTED_MODULE_8__/* .SortByDirection.asc */ .B.asc,\n }, targets, tableColumns).map(function (target, idx) {\n return (react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_9__.Tr, { key: "target-".concat(idx) },\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_10__.Td, { key: "target-table-row-".concat(idx, "_0") }, target.alias == target.connectUrl || !target.alias\n ? "".concat(target.connectUrl)\n : "".concat(target.alias, " (").concat(target.connectUrl, ")"))));\n });\n }, [targets, sortBy]);\n var view;\n if (isLoading) {\n view = react__WEBPACK_IMPORTED_MODULE_7__.createElement(_app_LoadingView_LoadingView__WEBPACK_IMPORTED_MODULE_0__/* .LoadingView */ .J, null);\n }\n else if (targets.length === 0) {\n view = (react__WEBPACK_IMPORTED_MODULE_7__.createElement(react__WEBPACK_IMPORTED_MODULE_7__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_11__/* .EmptyState */ .u, null,\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_12__/* .EmptyStateIcon */ .k, { icon: _patternfly_react_icons__WEBPACK_IMPORTED_MODULE_13__/* .SearchIcon */ .W1 }),\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_14__/* .Title */ .D, { headingLevel: "h4", size: "lg" }, "No Targets"))));\n }\n else {\n view = (react__WEBPACK_IMPORTED_MODULE_7__.createElement(react__WEBPACK_IMPORTED_MODULE_7__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_15__/* .InnerScrollContainer */ .F, { style: { maxHeight: \'24em\' } },\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_16__/* .TableComposable */ .X, { "aria-label": "matched-targets-table", isStickyHeader: true, variant: \'compact\' },\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_17__/* .Thead */ .h, null,\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_9__.Tr, null, tableColumns.map(function (_a, index) {\n var title = _a.title;\n return (react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_18__.Th, { key: "table-header-".concat(title), sort: getSortParams(index) }, title));\n }))),\n react__WEBPACK_IMPORTED_MODULE_7__.createElement(_patternfly_react_table__WEBPACK_IMPORTED_MODULE_19__/* .Tbody */ .p, null, targetRows)))));\n }\n return react__WEBPACK_IMPORTED_MODULE_7__.createElement(react__WEBPACK_IMPORTED_MODULE_7__.Fragment, null, view);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBVTtnQkFDVCxpREFBQyw0RUFBYyxJQUFDLElBQUksRUFBRSwwRUFBVSxHQUFJO2dCQUNwQyxpREFBQyxtRUFBSyxJQUFDLFlBQVksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksaUJBRTFCLENBQ0csQ0FDWixDQUNKLENBQUM7S0FDSDtTQUFNO1FBQ0wsSUFBSSxHQUFHLENBQ0w7WUFDRSxpREFBQyxtRkFBb0IsSUFBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO2dCQUNoRCxpREFBQyw4RUFBZSxrQkFBWSx1QkFBdUIsRUFBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTO29CQUMxRixpREFBQyxvRUFBSzt3QkFDSixpREFBQyx1REFBRSxRQUNBLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBQyxFQUFTLEVBQUUsS0FBSztnQ0FBZCxLQUFLOzRCQUFjLFFBQ3RDLGlEQUFDLHdEQUFFLElBQUMsR0FBRyxFQUFFLHVCQUFnQixLQUFLLENBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUN6RCxLQUFLLENBQ0gsQ0FDTjt3QkFKdUMsQ0FJdkMsQ0FBQyxDQUNDLENBQ0M7b0JBQ1IsaURBQUMsb0VBQUssUUFBRSxVQUFVLENBQVMsQ0FDWCxDQUNHLENBQ3RCLENBQ0osQ0FBQztLQUNIO0lBRUQsT0FBTyxvR0FBRyxJQUFJLENBQUksQ0FBQztBQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NlY3VyaXR5UGFuZWwvQ3JlZGVudGlhbHMvTWF0Y2hlZFRhcmdldHNUYWJsZS50c3g/NGQ4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IExvYWRpbmdWaWV3IH0gZnJvbSAnQGFwcC9Mb2FkaW5nVmlldy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldERpc2NvdmVyeUV2ZW50IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiwgc29ydFJlc291cmNlcyB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSwgRW1wdHlTdGF0ZUljb24sIFRpdGxlIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgSW5uZXJTY3JvbGxDb250YWluZXIsXG4gIFNvcnRCeURpcmVjdGlvbixcbiAgVGFibGVDb21wb3NhYmxlLFxuICBUYm9keSxcbiAgVGQsXG4gIFRoLFxuICBUaGVhZCxcbiAgVHIsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hlZFRhcmdldHNUYWJsZVByb3BzIHtcbiAgaWQ6IG51bWJlcjtcbiAgbWF0Y2hFeHByZXNzaW9uOiBzdHJpbmc7XG59XG5cbmNvbnN0IHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtcbiAge1xuICAgIHRpdGxlOiAnVGFyZ2V0JyxcbiAgICBrZXlQYXRoczogWydhbGlhcyddLFxuICAgIHRyYW5zZm9ybTogKF9hbGlhczogc3RyaW5nLCB0YXJnZXQ6IFRhcmdldCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldC5hbGlhcyA9PT0gdGFyZ2V0LmNvbm5lY3RVcmwgfHwgIXRhcmdldC5hbGlhc1xuICAgICAgICA/IGAke3RhcmdldC5jb25uZWN0VXJsfWBcbiAgICAgICAgOiBgJHt0YXJnZXQuYWxpYXN9ICgke3RhcmdldC5jb25uZWN0VXJsfSlgO1xuICAgIH0sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgTWF0Y2hlZFRhcmdldHNUYWJsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8TWF0Y2hlZFRhcmdldHNUYWJsZVByb3BzPiA9ICh7IGlkLCBtYXRjaEV4cHJlc3Npb24gfSkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG5cbiAgY29uc3QgW3RhcmdldHMsIHNldFRhcmdldHNdID0gUmVhY3QudXNlU3RhdGUoW10gYXMgVGFyZ2V0W10pO1xuICBjb25zdCBbc29ydEJ5LCBnZXRTb3J0UGFyYW1zXSA9IHVzZVNvcnQoKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IHJlZnJlc2hUYXJnZXRzTGlzdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5hcGkuZ2V0Q3JlZGVudGlhbChpZCkuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICAgIHNldFRhcmdldHModi50YXJnZXRzKTtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgc2V0SXNMb2FkaW5nLCBjb250ZXh0LmFwaSwgc2V0VGFyZ2V0cywgaWRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZnJlc2hUYXJnZXRzTGlzdCgpO1xuICB9LCBbcmVmcmVzaFRhcmdldHNMaXN0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuVGFyZ2V0SnZtRGlzY292ZXJ5KS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgY29uc3QgZXZ0OiBUYXJnZXREaXNjb3ZlcnlFdmVudCA9IHYubWVzc2FnZS5ldmVudDtcbiAgICAgICAgY29uc3QgdGFyZ2V0OiBUYXJnZXQgPSBldnQuc2VydmljZVJlZjtcbiAgICAgICAgaWYgKGV2dC5raW5kID09PSAnRk9VTkQnKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2g6IGJvb2xlYW4gPSBldmFsKG1hdGNoRXhwcmVzc2lvbik7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBzZXRUYXJnZXRzKChvbGQpID0+IG9sZC5jb25jYXQodGFyZ2V0KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2dC5raW5kID09PSAnTE9TVCcpIHtcbiAgICAgICAgICBzZXRUYXJnZXRzKChvbGQpID0+IG9sZC5maWx0ZXIoKG8pID0+ICFfLmlzRXF1YWwobywgdGFyZ2V0KSkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQsIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgc2V0VGFyZ2V0cywgbWF0Y2hFeHByZXNzaW9uXSk7XG5cbiAgY29uc3QgdGFyZ2V0Um93cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzb3J0UmVzb3VyY2VzKFxuICAgICAge1xuICAgICAgICBpbmRleDogc29ydEJ5LmluZGV4ID8/IDAsXG4gICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgfSxcbiAgICAgIHRhcmdldHMsXG4gICAgICB0YWJsZUNvbHVtbnNcbiAgICApLm1hcCgodGFyZ2V0LCBpZHgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUciBrZXk9e2B0YXJnZXQtJHtpZHh9YH0+XG4gICAgICAgICAgPFRkIGtleT17YHRhcmdldC10YWJsZS1yb3ctJHtpZHh9XzBgfT5cbiAgICAgICAgICAgIHt0YXJnZXQuYWxpYXMgPT0gdGFyZ2V0LmNvbm5lY3RVcmwgfHwgIXRhcmdldC5hbGlhc1xuICAgICAgICAgICAgICA/IGAke3RhcmdldC5jb25uZWN0VXJsfWBcbiAgICAgICAgICAgICAgOiBgJHt0YXJnZXQuYWxpYXN9ICgke3RhcmdldC5jb25uZWN0VXJsfSlgfVxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgIDwvVHI+XG4gICAgICApO1xuICAgIH0pO1xuICB9LCBbdGFyZ2V0cywgc29ydEJ5XSk7XG5cbiAgbGV0IHZpZXc6IEpTWC5FbGVtZW50O1xuICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgdmlldyA9IDxMb2FkaW5nVmlldyAvPjtcbiAgfSBlbHNlIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgIE5vIFRhcmdldHNcbiAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICA8Lz5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8SW5uZXJTY3JvbGxDb250YWluZXIgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnMjRlbScgfX0+XG4gICAgICAgICAgPFRhYmxlQ29tcG9zYWJsZSBhcmlhLWxhYmVsPVwibWF0Y2hlZC10YXJnZXRzLXRhYmxlXCIgaXNTdGlja3lIZWFkZXI9e3RydWV9IHZhcmlhbnQ9eydjb21wYWN0J30+XG4gICAgICAgICAgICA8VGhlYWQ+XG4gICAgICAgICAgICAgIDxUcj5cbiAgICAgICAgICAgICAgICB7dGFibGVDb2x1bW5zLm1hcCgoeyB0aXRsZSB9LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRoIGtleT17YHRhYmxlLWhlYWRlci0ke3RpdGxlfWB9IHNvcnQ9e2dldFNvcnRQYXJhbXMoaW5kZXgpfT5cbiAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9Ucj5cbiAgICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAgICA8VGJvZHk+e3RhcmdldFJvd3N9PC9UYm9keT5cbiAgICAgICAgICA8L1RhYmxlQ29tcG9zYWJsZT5cbiAgICAgICAgPC9Jbm5lclNjcm9sbENvbnRhaW5lcj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gPD57dmlld308Lz47XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22345\n')},74841:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"G\": () => (/* binding */ CredentialsStorage),\n/* harmony export */ \"t\": () => (/* binding */ Locations)\n/* harmony export */ });\n/* harmony import */ var _app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74687);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(65381);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64403);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(92694);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(67294);\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(26909);\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(73727);\n/* harmony import */ var _SettingsUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74787);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the \"Software\"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a \"Larger Work\" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\n\n\n\n\n\nvar Locations = /** @class */ (function () {\n function Locations() {\n }\n Locations.BROWSER_SESSION = {\n key: 'Session (Browser Memory)',\n titleKey: 'SETTINGS.CREDENTIALS_STORAGE.BROWSER_SESSION.TITLE',\n descriptionKey: 'SETTINGS.CREDENTIALS_STORAGE.BROWSER_SESSION.DESCRIPTION',\n };\n Locations.BACKEND = {\n key: 'Backend',\n titleKey: 'SETTINGS.CREDENTIALS_STORAGE.BACKEND.TITLE',\n descriptionKey: 'SETTINGS.CREDENTIALS_STORAGE.BACKEND.DESCRIPTION',\n };\n return Locations;\n}());\n\nvar locations = [Locations.BROWSER_SESSION, Locations.BACKEND];\nvar getLocation = function (key) {\n for (var _i = 0, locations_1 = locations; _i < locations_1.length; _i++) {\n var l = locations_1[_i];\n if (l.key === key) {\n return l;\n }\n }\n return Locations.BACKEND;\n};\nvar Component = function () {\n var t = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__/* .useTranslation */ .$G)()[0];\n var _a = react__WEBPACK_IMPORTED_MODULE_1__.useState(false), isExpanded = _a[0], setExpanded = _a[1];\n var _b = react__WEBPACK_IMPORTED_MODULE_1__.useState(Locations.BACKEND.key), selection = _b[0], setSelection = _b[1];\n var handleSelect = react__WEBPACK_IMPORTED_MODULE_1__.useCallback(function (_, selection) {\n var location = getLocation(selection.value);\n setSelection(location.key);\n setExpanded(false);\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_0__/* .saveToLocalStorage */ .m8)('CREDENTIAL_LOCATION', selection.value);\n }, [setSelection, setExpanded]);\n react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {\n handleSelect(undefined, { value: (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_0__/* .getFromLocalStorage */ .fp)('CREDENTIAL_LOCATION', Locations.BACKEND.key) });\n }, [handleSelect]);\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_4__/* .Select */ .P, { variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_5__/* .SelectVariant.single */ .TM.single, isFlipEnabled: true, menuAppendTo: \"parent\", onToggle: setExpanded, onSelect: handleSelect, isOpen: isExpanded, selections: __assign({ value: selection }, { toString: function () { return t(getLocation(selection).titleKey); }, compareTo: function (val) { return val.value === selection; } }) }, locations.map(function (_a) {\n var key = _a.key, titleKey = _a.titleKey, descriptionKey = _a.descriptionKey;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_patternfly_react_core__WEBPACK_IMPORTED_MODULE_6__/* .SelectOption */ .$, { key: titleKey, value: __assign({ value: key }, { toString: function () { return t(titleKey); }, compareTo: function (val) { return val.value === key; } }), description: t(descriptionKey) }));\n }))));\n};\nvar CredentialsStorage = {\n titleKey: 'SETTINGS.CREDENTIALS_STORAGE.TITLE',\n descConstruct: {\n key: 'SETTINGS.CREDENTIALS_STORAGE.DESCRIPTION',\n parts: [react__WEBPACK_IMPORTED_MODULE_1__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_7__.Link, { key: 0, to: \"/security\" })],\n },\n content: Component,\n category: _SettingsUtils__WEBPACK_IMPORTED_MODULE_3__/* .SettingTab.ADVANCED */ .BM.ADVANCED,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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V0FDQSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFDakIsUUFBUSxFQUFFLGNBQU0sUUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFYLENBQVcsRUFDM0IsU0FBUyxFQUFFLFVBQUMsR0FBRyxJQUFLLFVBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFqQixDQUFpQixLQUV2QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUM5QixDQUNIO1FBVnFELENBVXJELENBQUMsQ0FDSyxDQUNSLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVLLElBQU0sa0JBQWtCLEdBQWdCO0lBQzdDLFFBQVEsRUFBRSxvQ0FBb0M7SUFDOUMsYUFBYSxFQUFFO1FBQ2IsR0FBRyxFQUFFLDBDQUEwQztRQUMvQyxLQUFLLEVBQUUsQ0FBQyxpREFBQyxrREFBSSxJQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLFdBQVcsR0FBRyxDQUFDO0tBQ3pDO0lBQ0QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLGtGQUFtQjtDQUM5QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZXR0aW5ncy9DcmVkZW50aWFsc1N0b3JhZ2UudHN4PzRlY2UiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGdldEZyb21Mb2NhbFN0b3JhZ2UsIHNhdmVUb0xvY2FsU3RvcmFnZSB9IGZyb20gJ0BhcHAvdXRpbHMvTG9jYWxTdG9yYWdlJztcbmltcG9ydCB7IFNlbGVjdCwgU2VsZWN0T3B0aW9uLCBTZWxlY3RWYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgU2V0dGluZ1RhYiwgVXNlclNldHRpbmcgfSBmcm9tICcuL1NldHRpbmdzVXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uIHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlS2V5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2NhdGlvbnMge1xuICBzdGF0aWMgcmVhZG9ubHkgQlJPV1NFUl9TRVNTSU9OOiBMb2NhdGlvbiA9IHtcbiAgICBrZXk6ICdTZXNzaW9uIChCcm93c2VyIE1lbW9yeSknLFxuICAgIHRpdGxlS2V5OiAnU0VUVElOR1MuQ1JFREVOVElBTFNfU1RPUkFHRS5CUk9XU0VSX1NFU1NJT04uVElUTEUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnU0VUVElOR1MuQ1JFREVOVElBTFNfU1RPUkFHRS5CUk9XU0VSX1NFU1NJT04uREVTQ1JJUFRJT04nLFxuICB9O1xuICBzdGF0aWMgcmVhZG9ubHkgQkFDS0VORDogTG9jYXRpb24gPSB7XG4gICAga2V5OiAnQmFja2VuZCcsXG4gICAgdGl0bGVLZXk6ICdTRVRUSU5HUy5DUkVERU5USUFMU19TVE9SQUdFLkJBQ0tFTkQuVElUTEUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnU0VUVElOR1MuQ1JFREVOVElBTFNfU1RPUkFHRS5CQUNLRU5ELkRFU0NSSVBUSU9OJyxcbiAgfTtcbn1cblxuY29uc3QgbG9jYXRpb25zID0gW0xvY2F0aW9ucy5CUk9XU0VSX1NFU1NJT04sIExvY2F0aW9ucy5CQUNLRU5EXTtcblxuY29uc3QgZ2V0TG9jYXRpb24gPSAoa2V5OiBzdHJpbmcpOiBMb2NhdGlvbiA9PiB7XG4gIGZvciAoY29uc3QgbCBvZiBsb2NhdGlvbnMpIHtcbiAgICBpZiAobC5rZXkgPT09IGtleSkge1xuICAgICAgcmV0dXJuIGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBMb2NhdGlvbnMuQkFDS0VORDtcbn07XG5cbmNvbnN0IENvbXBvbmVudCA9ICgpID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGlvbiwgc2V0U2VsZWN0aW9uXSA9IFJlYWN0LnVzZVN0YXRlKExvY2F0aW9ucy5CQUNLRU5ELmtleSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHNlbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzZWxlY3Rpb24udmFsdWUpO1xuICAgICAgc2V0U2VsZWN0aW9uKGxvY2F0aW9uLmtleSk7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICBzYXZlVG9Mb2NhbFN0b3JhZ2UoJ0NSRURFTlRJQUxfTE9DQVRJT04nLCBzZWxlY3Rpb24udmFsdWUpO1xuICAgIH0sXG4gICAgW3NldFNlbGVjdGlvbiwgc2V0RXhwYW5kZWRdXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QodW5kZWZpbmVkLCB7IHZhbHVlOiBnZXRGcm9tTG9jYWxTdG9yYWdlKCdDUkVERU5USUFMX0xPQ0FUSU9OJywgTG9jYXRpb25zLkJBQ0tFTkQua2V5KSB9KTtcbiAgfSwgW2hhbmRsZVNlbGVjdF0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTZWxlY3RcbiAgICAgICAgdmFyaWFudD17U2VsZWN0VmFyaWFudC5zaW5nbGV9XG4gICAgICAgIGlzRmxpcEVuYWJsZWQ9e3RydWV9XG4gICAgICAgIG1lbnVBcHBlbmRUbz1cInBhcmVudFwiXG4gICAgICAgIG9uVG9nZ2xlPXtzZXRFeHBhbmRlZH1cbiAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgaXNPcGVuPXtpc0V4cGFuZGVkfVxuICAgICAgICBzZWxlY3Rpb25zPXt7XG4gICAgICAgICAgLi4ueyB2YWx1ZTogc2VsZWN0aW9uIH0sXG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+IHQoZ2V0TG9jYXRpb24oc2VsZWN0aW9uKS50aXRsZUtleSksXG4gICAgICAgICAgY29tcGFyZVRvOiAodmFsKSA9PiB2YWwudmFsdWUgPT09IHNlbGVjdGlvbixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2xvY2F0aW9ucy5tYXAoKHsga2V5LCB0aXRsZUtleSwgZGVzY3JpcHRpb25LZXkgfSkgPT4gKFxuICAgICAgICAgIDxTZWxlY3RPcHRpb25cbiAgICAgICAgICAgIGtleT17dGl0bGVLZXl9XG4gICAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgICAuLi57IHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IHQodGl0bGVLZXkpLFxuICAgICAgICAgICAgICBjb21wYXJlVG86ICh2YWwpID0+IHZhbC52YWx1ZSA9PT0ga2V5LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPXt0KGRlc2NyaXB0aW9uS2V5KX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvU2VsZWN0PlxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IENyZWRlbnRpYWxzU3RvcmFnZTogVXNlclNldHRpbmcgPSB7XG4gIHRpdGxlS2V5OiAnU0VUVElOR1MuQ1JFREVOVElBTFNfU1RPUkFHRS5USVRMRScsXG4gIGRlc2NDb25zdHJ1Y3Q6IHtcbiAgICBrZXk6ICdTRVRUSU5HUy5DUkVERU5USUFMU19TVE9SQUdFLkRFU0NSSVBUSU9OJyxcbiAgICBwYXJ0czogWzxMaW5rIGtleT17MH0gdG89XCIvc2VjdXJpdHlcIiAvPl0sXG4gIH0sXG4gIGNvbnRlbnQ6IENvbXBvbmVudCxcbiAgY2F0ZWdvcnk6IFNldHRpbmdUYWIuQURWQU5DRUQsXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74841\n")},74787:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "BM": () => (/* binding */ SettingTab),\n/* harmony export */ "LZ": () => (/* binding */ ThemeSetting),\n/* harmony export */ "l0": () => (/* binding */ paramAsTab),\n/* harmony export */ "lt": () => (/* binding */ tabAsParam),\n/* harmony export */ "x2": () => (/* binding */ selectTab)\n/* harmony export */ });\n/* unused harmony export getDefaultTheme */\n/* harmony import */ var _app_utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52648);\n\nvar SettingTab;\n(function (SettingTab) {\n SettingTab["GENERAL"] = "SETTINGS.CATEGORIES.GENERAL";\n SettingTab["CONNECTIVITY"] = "SETTINGS.CATEGORIES.CONNECTIVITY";\n SettingTab["NOTIFICATION_MESSAGE"] = "SETTINGS.CATEGORIES.NOTIFICATION_MESSAGE";\n SettingTab["DASHBOARD"] = "SETTINGS.CATEGORIES.DASHBOARD";\n SettingTab["ADVANCED"] = "SETTINGS.CATEGORIES.ADVANCED";\n})(SettingTab || (SettingTab = {}));\nvar tabAsParam = function (key) {\n var parts = key.split(\'.\');\n return parts[parts.length - 1].toLowerCase().replace(/[_]/g, \'-\');\n};\nvar paramAsTab = function (param) {\n return "SETTINGS.CATEGORIES.".concat(param.toUpperCase().replace(/[-]/g, \'_\'));\n};\nvar selectTab = function (tabKey) {\n var tab = document.getElementById("pf-tab-".concat(tabKey, "-").concat((0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_0__/* .hashCode */ .un)(tabKey)));\n tab && tab.click();\n};\nvar getDefaultTheme = function () {\n if (window.matchMedia && window.matchMedia(\'(prefers-color-scheme: dark)\').matches) {\n return ThemeSetting.DARK;\n }\n return ThemeSetting.LIGHT;\n};\nvar ThemeSetting;\n(function (ThemeSetting) {\n ThemeSetting["AUTO"] = "auto";\n ThemeSetting["DARK"] = "dark";\n ThemeSetting["LIGHT"] = "light";\n})(ThemeSetting || (ThemeSetting = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3ODcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBc0M0QztBQVU1QyxJQUFZLFVBTVg7QUFORCxXQUFZLFVBQVU7SUFDcEIscURBQXVDO0lBQ3ZDLCtEQUFpRDtJQUNqRCwrRUFBaUU7SUFDakUseURBQTJDO0lBQzNDLHVEQUF5QztBQUMzQyxDQUFDLEVBTlcsVUFBVSxLQUFWLFVBQVUsUUFNckI7QUFFTSxJQUFNLFVBQVUsR0FBRyxVQUFDLEdBQWU7SUFDeEMsSUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBRUssSUFBTSxVQUFVLEdBQUcsVUFBQyxLQUFhO0lBQ3RDLE9BQU8sOEJBQXVCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFFLENBQUM7QUFDM0UsQ0FBQyxDQUFDO0FBb0JLLElBQU0sU0FBUyxHQUFHLFVBQUMsTUFBa0I7SUFDMUMsSUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBVSxNQUFNLGNBQUksb0VBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUFDLENBQUM7SUFDNUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFSyxJQUFNLGVBQWUsR0FBRztJQUM3QixJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNsRixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUM7S0FDMUI7SUFDRCxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLDZCQUFhO0lBQ2IsNkJBQWE7SUFDYiwrQkFBZTtBQUNqQixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NldHRpbmdzL1NldHRpbmdzVXRpbHMudHM/ZWY5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaGFzaENvZGUgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBfVHJhbnNmb3JtZWRVc2VyU2V0dGluZyBleHRlbmRzIE9taXQ8VXNlclNldHRpbmcsICdjb250ZW50Jz4ge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogUmVhY3QuUmVhY3ROb2RlO1xuICBlbGVtZW50OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudEVsZW1lbnQ8UmVjb3JkPHN0cmluZywgbmV2ZXI+PjtcbiAgb3JkZXJJbkdyb3VwOiBudW1iZXI7XG4gIGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsO1xufVxuXG5leHBvcnQgZW51bSBTZXR0aW5nVGFiIHtcbiAgR0VORVJBTCA9ICdTRVRUSU5HUy5DQVRFR09SSUVTLkdFTkVSQUwnLFxuICBDT05ORUNUSVZJVFkgPSAnU0VUVElOR1MuQ0FURUdPUklFUy5DT05ORUNUSVZJVFknLFxuICBOT1RJRklDQVRJT05fTUVTU0FHRSA9ICdTRVRUSU5HUy5DQVRFR09SSUVTLk5PVElGSUNBVElPTl9NRVNTQUdFJyxcbiAgREFTSEJPQVJEID0gJ1NFVFRJTkdTLkNBVEVHT1JJRVMuREFTSEJPQVJEJyxcbiAgQURWQU5DRUQgPSAnU0VUVElOR1MuQ0FURUdPUklFUy5BRFZBTkNFRCcsXG59XG5cbmV4cG9ydCBjb25zdCB0YWJBc1BhcmFtID0gKGtleTogU2V0dGluZ1RhYikgPT4ge1xuICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpO1xuICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bX10vZywgJy0nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJhbUFzVGFiID0gKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIGBTRVRUSU5HUy5DQVRFR09SSUVTLiR7cGFyYW0udG9VcHBlckNhc2UoKS5yZXBsYWNlKC9bLV0vZywgJ18nKX1gO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyU2V0dGluZyB7XG4gIHRpdGxlS2V5OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLy8gVHJhbnNsYXRpb24gS2V5IG9yIHsgVHJhbnNsYXRpb24gS2V5LCBSZWFjdCBDb21wb25lbnQgUGFydHMgfVxuICAvLyBodHRwczovL3JlYWN0LmkxOG5leHQuY29tL2xhdGVzdC90cmFucy1jb21wb25lbnQjaG93LXRvLWdldC10aGUtY29ycmVjdC10cmFuc2xhdGlvbi1zdHJpbmdcbiAgZGVzY0NvbnN0cnVjdDpcbiAgICB8IHN0cmluZ1xuICAgIHwge1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgcGFydHM6IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICAgICAgfTtcbiAgY29udGVudDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ7XG4gIGNhdGVnb3J5OiBTZXR0aW5nVGFiO1xuICBvcmRlckluR3JvdXA/OiBudW1iZXI7IC8vIGRlZmF1bHQgLTFcbiAgZmVhdHVyZUxldmVsPzogRmVhdHVyZUxldmVsOyAvLyBkZWZhdWx0IFBST0RVQ1RJT05cbiAgYXV0aGVudGljYXRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RUYWIgPSAodGFiS2V5OiBTZXR0aW5nVGFiKSA9PiB7XG4gIGNvbnN0IHRhYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBwZi10YWItJHt0YWJLZXl9LSR7aGFzaENvZGUodGFiS2V5KX1gKTtcbiAgdGFiICYmIHRhYi5jbGljaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRUaGVtZSA9ICgpOiBUaGVtZVNldHRpbmcgPT4ge1xuICBpZiAod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzKSB7XG4gICAgcmV0dXJuIFRoZW1lU2V0dGluZy5EQVJLO1xuICB9XG4gIHJldHVybiBUaGVtZVNldHRpbmcuTElHSFQ7XG59O1xuXG5leHBvcnQgZW51bSBUaGVtZVNldHRpbmcge1xuICBBVVRPID0gJ2F1dG8nLFxuICBEQVJLID0gJ2RhcmsnLFxuICBMSUdIVCA9ICdsaWdodCcsXG59XG5cbmV4cG9ydCB0eXBlIFRoZW1lVHlwZSA9IEV4Y2x1ZGU8VGhlbWVTZXR0aW5nLCBUaGVtZVNldHRpbmcuQVVUTz47XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///74787\n')},68038:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"D3\": () => (/* binding */ isHttpError),\n/* harmony export */ \"EL\": () => (/* binding */ isActiveRecording),\n/* harmony export */ \"Ls\": () => (/* binding */ automatedAnalysisRecordingName),\n/* harmony export */ \"SR\": () => (/* binding */ RecordingState),\n/* harmony export */ \"Vy\": () => (/* binding */ isHttpOk),\n/* harmony export */ \"cE\": () => (/* binding */ defaultChartControllerConfig),\n/* harmony export */ \"hh\": () => (/* binding */ defaultAutomatedAnalysisRecordingConfig),\n/* harmony export */ \"ld\": () => (/* binding */ UPLOADS_SUBDIRECTORY),\n/* harmony export */ \"oo\": () => (/* binding */ HttpError),\n/* harmony export */ \"sC\": () => (/* binding */ isGraphQLAuthError),\n/* harmony export */ \"sM\": () => (/* binding */ ApiService)\n/* harmony export */ });\n/* unused harmony exports XMLHttpError, isXMLHttpError */\n/* harmony import */ var _app_utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52648);\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(64190);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(96486);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70003);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1545);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(24635);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(54092);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(83610);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(52277);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(32817);\n/* harmony import */ var rxjs_fetch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(76536);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51313);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(42006);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(89475);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(79878);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(29127);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(94975);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(5014);\n/* harmony import */ var _Login_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63470);\n/* harmony import */ var _NotificationChannel_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23384);\n/* harmony import */ var _Target_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(38386);\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n\n\nvar HttpError = /** @class */ (function (_super) {\n __extends(HttpError, _super);\n function HttpError(httpResponse) {\n var _this = _super.call(this, httpResponse.statusText) || this;\n _this.httpResponse = httpResponse;\n return _this;\n }\n return HttpError;\n}(Error));\n\nvar XMLHttpError = /** @class */ (function (_super) {\n __extends(XMLHttpError, _super);\n function XMLHttpError(xmlHttpResponse) {\n var _this = _super.call(this, xmlHttpResponse.statusText) || this;\n _this.xmlHttpResponse = xmlHttpResponse;\n return _this;\n }\n return XMLHttpError;\n}(Error));\n\nvar isHttpError = function (err) {\n if (!(err instanceof Error)) {\n return false;\n }\n return err.httpResponse !== undefined;\n};\nvar isXMLHttpError = function (err) {\n if (!(err instanceof Error)) {\n return false;\n }\n return err.xmlHttpResponse !== undefined;\n};\nvar isHttpOk = function (statusCode) {\n return statusCode >= 200 && statusCode < 300;\n};\nvar ApiService = /** @class */ (function () {\n function ApiService(target, notifications, login) {\n var _this = this;\n this.target = target;\n this.notifications = notifications;\n this.login = login;\n this.archiveEnabled = new rxjs__WEBPACK_IMPORTED_MODULE_5__/* .ReplaySubject */ .t(1);\n this.cryostatVersionSubject = new rxjs__WEBPACK_IMPORTED_MODULE_5__/* .ReplaySubject */ .t(1);\n this.grafanaDatasourceUrlSubject = new rxjs__WEBPACK_IMPORTED_MODULE_5__/* .ReplaySubject */ .t(1);\n this.grafanaDashboardUrlSubject = new rxjs__WEBPACK_IMPORTED_MODULE_5__/* .ReplaySubject */ .t(1);\n // show recording archives when recordings available\n login\n .getSessionState()\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (sessionState) { return (sessionState === _Login_service__WEBPACK_IMPORTED_MODULE_2__/* .SessionState.USER_SESSION */ .sM.USER_SESSION ? _this.doGet('recordings') : rxjs__WEBPACK_IMPORTED_MODULE_7__/* .EMPTY */ .E); }))\n .subscribe({\n next: function () {\n _this.archiveEnabled.next(true);\n },\n error: function () {\n _this.archiveEnabled.next(false);\n },\n });\n var getDatasourceURL = (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_8__/* .fromFetch */ .U)(\"\".concat(this.login.authority, \"/api/v1/grafana_datasource_url\")).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D)(resp.json()); }));\n var getDashboardURL = (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_8__/* .fromFetch */ .U)(\"\".concat(this.login.authority, \"/api/v1/grafana_dashboard_url\")).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D)(resp.json()); }));\n var health = (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_8__/* .fromFetch */ .U)(\"\".concat(this.login.authority, \"/health\")).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)(function (resp) {\n if (!resp.ok) {\n window.console.error(resp);\n _this.notifications.danger('API /health request failed', resp.statusText);\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D)(resp.json()); }), (0,rxjs__WEBPACK_IMPORTED_MODULE_11__/* .shareReplay */ .d)());\n health\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (jsonResp) {\n _this.cryostatVersionSubject.next(jsonResp.cryostatVersion);\n var toFetch = [];\n var unconfigured = [];\n var unavailable = [];\n // if datasource or dashboard are not configured, display a warning\n // if either is configured but not available, display an error\n // if both configured and available then display nothing and just retrieve the URLs\n if (jsonResp.datasourceConfigured) {\n if (jsonResp.datasourceAvailable) {\n toFetch.push(getDatasourceURL);\n }\n else {\n unavailable.push('datasource URL');\n }\n }\n else {\n unconfigured.push('datasource URL');\n }\n if (jsonResp.dashboardConfigured) {\n if (jsonResp.dashboardAvailable) {\n toFetch.push(getDashboardURL);\n }\n else {\n unavailable.push('dashboard URL');\n }\n }\n else {\n unconfigured.push('dashboard URL');\n }\n if (unconfigured.length > 0) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_12__/* .throwError */ ._)(function () { return ({\n state: 'not configured',\n message: unconfigured.join(', ') + ' unconfigured',\n }); });\n }\n if (unavailable.length > 0) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_12__/* .throwError */ ._)(function () { return ({\n state: 'unavailable',\n message: unavailable.join(', ') + ' unavailable',\n }); });\n }\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_13__/* .forkJoin */ .D)(toFetch);\n }))\n .subscribe({\n next: function (parts) {\n _this.grafanaDatasourceUrlSubject.next(parts[0].grafanaDatasourceUrl);\n _this.grafanaDashboardUrlSubject.next(parts[1].grafanaDashboardUrl);\n },\n error: function (err) {\n window.console.error(err);\n if (err.state === 'unavailable') {\n _this.notifications.danger(\"Grafana \".concat(err.state), err.message, _NotificationChannel_service__WEBPACK_IMPORTED_MODULE_3__/* .NotificationCategory.GrafanaConfiguration */ .mN.GrafanaConfiguration);\n }\n else {\n _this.notifications.warning(\"Grafana \".concat(err.state), err.message, _NotificationChannel_service__WEBPACK_IMPORTED_MODULE_3__/* .NotificationCategory.GrafanaConfiguration */ .mN.GrafanaConfiguration);\n }\n },\n });\n }\n ApiService.prototype.createTarget = function (target, credentials, storeCredentials, dryrun) {\n if (storeCredentials === void 0) { storeCredentials = false; }\n if (dryrun === void 0) { dryrun = false; }\n var form = new window.FormData();\n form.append('connectUrl', target.connectUrl);\n if (target.alias && target.alias.trim()) {\n form.append('alias', target.alias);\n }\n (credentials === null || credentials === void 0 ? void 0 : credentials.username) && form.append('username', credentials.username);\n (credentials === null || credentials === void 0 ? void 0 : credentials.password) && form.append('password', credentials.password);\n return this.sendRequest('v2', \"targets\", {\n method: 'POST',\n body: form,\n }, new URLSearchParams({ storeCredentials: \"\".concat(storeCredentials), dryrun: \"\".concat(dryrun) }), true, true).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json().then(function (body) { return ({ status: resp.status, body: body }); }); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (err) {\n if (isHttpError(err)) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D)(err.httpResponse.json().then(function (body) { return ({ status: err.httpResponse.status, body: body }); }));\n }\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)({ status: 0, body: { data: { reason: err.message } } }); // Status 0 -> request is not completed\n }));\n };\n ApiService.prototype.deleteTarget = function (target) {\n return this.sendRequest('v2', \"targets/\".concat(encodeURIComponent(target.connectUrl)), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function () { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.uploadRule = function (rule, onUploadProgress, abortSignal) {\n window.onbeforeunload = function (event) { return event.preventDefault(); };\n var headers = {};\n headers['Content-Type'] = 'application/json';\n return this.sendLegacyRequest('v2', 'rules', {\n method: 'POST',\n body: JSON.stringify(rule),\n headers: headers,\n listeners: {\n onUploadProgress: function (event) {\n onUploadProgress && onUploadProgress(Math.floor((event.loaded * 100) / event.total));\n },\n },\n abortSignal: abortSignal,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)({\n next: function () { return (window.onbeforeunload = null); },\n error: function () { return (window.onbeforeunload = null); },\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.createRule = function (rule) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/json');\n return this.sendRequest('v2', 'rules', {\n method: 'POST',\n body: JSON.stringify(rule),\n headers: headers,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.updateRule = function (rule, clean) {\n if (clean === void 0) { clean = true; }\n var headers = new Headers();\n headers.set('Content-Type', 'application/json');\n return this.sendRequest('v2', \"rules/\".concat(rule.name), {\n method: 'PATCH',\n body: JSON.stringify(rule),\n headers: headers,\n }, new URLSearchParams({ clean: String(clean) })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.deleteRule = function (name, clean) {\n if (clean === void 0) { clean = true; }\n return this.sendRequest('v2', \"rules/\".concat(name), {\n method: 'DELETE',\n }, new URLSearchParams({ clean: String(clean) })).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.createRecording = function (recordingAttributes) {\n var _this = this;\n var form = new window.FormData();\n form.append('recordingName', recordingAttributes.name);\n form.append('events', recordingAttributes.events);\n if (!!recordingAttributes.duration && recordingAttributes.duration > 0) {\n form.append('duration', String(recordingAttributes.duration));\n }\n if (recordingAttributes.archiveOnStop != null) {\n form.append('archiveOnStop', String(recordingAttributes.archiveOnStop));\n }\n if (recordingAttributes.options) {\n if (recordingAttributes.options.restart) {\n form.append('restart', String(recordingAttributes.options.restart));\n }\n if (recordingAttributes.options.toDisk != null) {\n form.append('toDisk', String(recordingAttributes.options.toDisk));\n }\n if (!!recordingAttributes.options.maxAge && recordingAttributes.options.maxAge >= 0) {\n form.append('maxAge', String(recordingAttributes.options.maxAge));\n }\n if (!!recordingAttributes.options.maxSize && recordingAttributes.options.maxSize >= 0) {\n form.append('maxSize', String(recordingAttributes.options.maxSize));\n }\n }\n if (recordingAttributes.metadata) {\n form.append('metadata', JSON.stringify(recordingAttributes.metadata));\n }\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v1', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/recordings\"), {\n method: 'POST',\n body: form,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) {\n return {\n ok: resp.ok,\n status: resp.status,\n };\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (err) {\n if (isHttpError(err)) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)({\n ok: false,\n status: err.httpResponse.status,\n });\n }\n else {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(undefined);\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.createSnapshot = function () {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v1', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/snapshot\"), {\n method: 'POST',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)(function (resp) {\n if (resp.status == 202) {\n _this.notifications.warning('Snapshot Failed to Create', 'The recording is not readable for reasons, such as, unavailability of active and non-snapshot source recordings from where the event data is read.');\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.status == 200; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.createSnapshotV2 = function () {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v2', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/snapshot\"), {\n method: 'POST',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(undefined); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.isArchiveEnabled = function () {\n return this.archiveEnabled.asObservable();\n };\n ApiService.prototype.archiveRecording = function (recordingName) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v1', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/recordings/\").concat(encodeURIComponent(recordingName)), {\n method: 'PATCH',\n body: 'SAVE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.stopRecording = function (recordingName) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v1', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/recordings/\").concat(encodeURIComponent(recordingName)), {\n method: 'PATCH',\n body: 'STOP',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.deleteRecording = function (recordingName) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v1', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/recordings/\").concat(encodeURIComponent(recordingName)), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.deleteArchivedRecording = function (connectUrl, recordingName) {\n return this.sendRequest('beta', \"recordings/\".concat(encodeURIComponent(connectUrl), \"/\").concat(encodeURIComponent(recordingName)), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.uploadActiveRecordingToGrafana = function (recordingName) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v1', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/recordings/\").concat(encodeURIComponent(recordingName), \"/upload\"), {\n method: 'POST',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.uploadArchivedRecordingToGrafana = function (sourceTarget, recordingName) {\n var _this = this;\n return sourceTarget.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('beta', \"recordings/\".concat(encodeURIComponent(target.connectUrl), \"/\").concat(encodeURIComponent(recordingName), \"/upload\"), {\n method: 'POST',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n // from file system path functions\n ApiService.prototype.uploadArchivedRecordingToGrafanaFromPath = function (jvmId, recordingName) {\n var subdirectoryName = (0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_0__/* .jvmIdToSubdirectoryName */ .FU)(jvmId);\n return this.sendRequest('beta', \"fs/recordings/\".concat(subdirectoryName, \"/\").concat(encodeURIComponent(recordingName), \"/upload\"), {\n method: 'POST',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.deleteArchivedRecordingFromPath = function (jvmId, recordingName) {\n var subdirectoryName = (0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_0__/* .jvmIdToSubdirectoryName */ .FU)(jvmId);\n return this.sendRequest('beta', \"fs/recordings/\".concat(subdirectoryName, \"/\").concat(encodeURIComponent(recordingName)), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.transformAndStringifyToRawLabels = function (labels) {\n var rawLabels = {};\n for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) {\n var label = labels_1[_i];\n rawLabels[label.key] = label.value;\n }\n return JSON.stringify(rawLabels);\n };\n ApiService.prototype.postRecordingMetadataFromPath = function (jvmId, recordingName, labels) {\n var subdirectoryName = (0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_0__/* .jvmIdToSubdirectoryName */ .FU)(jvmId);\n return this.sendRequest('beta', \"fs/recordings/\".concat(subdirectoryName, \"/\").concat(encodeURIComponent(recordingName), \"/metadata/labels\"), {\n method: 'POST',\n body: this.transformAndStringifyToRawLabels(labels),\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.isProbeEnabled = function () {\n return this.getActiveProbes(true).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(true); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.deleteCustomEventTemplate = function (templateName) {\n return this.sendRequest('v1', \"templates/\".concat(encodeURIComponent(templateName)), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function () { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.addCustomEventTemplate = function (file, onUploadProgress, abortSignal) {\n window.onbeforeunload = function (event) { return event.preventDefault(); };\n var body = new window.FormData();\n body.append('template', file);\n return this.sendLegacyRequest('v1', 'templates', {\n body: body,\n method: 'POST',\n headers: {},\n listeners: {\n onUploadProgress: function (event) {\n onUploadProgress && onUploadProgress(Math.floor((event.loaded * 100) / event.total));\n },\n },\n abortSignal: abortSignal,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)({\n next: function () { return (window.onbeforeunload = null); },\n error: function () { return (window.onbeforeunload = null); },\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.removeProbes = function () {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v2', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/probes\"), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function () { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.insertProbes = function (templateName) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v2', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/probes/\").concat(encodeURIComponent(templateName)), {\n method: 'POST',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)(function (resp) {\n if (resp.status == 400) {\n _this.notifications.warning('Failed to insert Probes', 'The probes failed to be injected. Check that the agent is present in the same container as the target JVM and the target is running with -javaagent:/path/to/agent');\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.addCustomProbeTemplate = function (file, onUploadProgress, abortSignal) {\n window.onbeforeunload = function (event) { return event.preventDefault(); };\n var body = new window.FormData();\n body.append('probeTemplate', file);\n return this.sendLegacyRequest('v2', \"probes/\".concat(file.name), {\n method: 'POST',\n body: body,\n headers: {},\n listeners: {\n onUploadProgress: function (event) {\n onUploadProgress && onUploadProgress(Math.floor((event.loaded * 100) / event.total));\n },\n },\n abortSignal: abortSignal,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)({\n next: function () { return (window.onbeforeunload = null); },\n error: function () { return (window.onbeforeunload = null); },\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.deleteCustomProbeTemplate = function (templateName) {\n return this.sendRequest('v2', \"probes/\".concat(encodeURIComponent(templateName)), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function () { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.cryostatVersion = function () {\n return this.cryostatVersionSubject.asObservable();\n };\n ApiService.prototype.grafanaDatasourceUrl = function () {\n return this.grafanaDatasourceUrlSubject.asObservable();\n };\n ApiService.prototype.grafanaDashboardUrl = function () {\n return this.grafanaDashboardUrlSubject.asObservable();\n };\n ApiService.prototype.doGet = function (path, apiVersion, params, suppressNotifications, skipStatusCheck) {\n if (apiVersion === void 0) { apiVersion = 'v1'; }\n return this.sendRequest(apiVersion, path, { method: 'GET' }, params, suppressNotifications, skipStatusCheck).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.getProbeTemplates = function () {\n return this.sendRequest('v2', 'probes', { method: 'GET' }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.getActiveProbes = function (suppressNotifications) {\n var _this = this;\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.sendRequest('v2', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/probes\"), {\n method: 'GET',\n }, undefined, suppressNotifications).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n }));\n };\n ApiService.prototype.getActiveProbesForTarget = function (target, suppressNotifications, skipStatusCheck) {\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (skipStatusCheck === void 0) { skipStatusCheck = false; }\n return this.sendRequest('v2', \"targets/\".concat(encodeURIComponent(target.connectUrl), \"/probes\"), {\n method: 'GET',\n }, undefined, suppressNotifications, skipStatusCheck).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.graphql = function (query, variables, suppressNotifications, skipStatusCheck) {\n var headers = new Headers();\n headers.set('Content-Type', 'application/json');\n return this.sendRequest('v2.2', 'graphql', {\n method: 'POST',\n body: JSON.stringify({\n query: query.replace(/[\\s]+/g, ' '),\n variables: variables,\n }),\n headers: headers,\n }, undefined, suppressNotifications, skipStatusCheck).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.downloadReport = function (recording) {\n var _this = this;\n var body = new window.FormData();\n if (isActiveRecording(recording)) {\n body.append('resource', recording.reportUrl.replace('/api/v1', '/api/v2.1'));\n }\n else {\n body.append('resource', recording.reportUrl.concat('/jwt'));\n }\n this.sendRequest('v2.1', 'auth/token', {\n method: 'POST',\n body: body,\n })\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result.resourceUrl; }))\n .subscribe(function (resourceUrl) {\n _this.downloadFile(resourceUrl, \"\".concat(recording.name, \".report.html\"), false);\n });\n };\n ApiService.prototype.downloadRecording = function (recording) {\n var _this = this;\n var body = new window.FormData();\n if (isActiveRecording(recording)) {\n body.append('resource', recording.downloadUrl.replace('/api/v1', '/api/v2.1'));\n }\n else {\n body.append('resource', recording.downloadUrl.concat('/jwt'));\n }\n this.sendRequest('v2.1', 'auth/token', {\n method: 'POST',\n body: body,\n })\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result.resourceUrl; }))\n .subscribe(function (resourceUrl) {\n _this.downloadFile(resourceUrl, recording.name + (recording.name.endsWith('.jfr') ? '' : '.jfr'));\n _this.downloadFile((0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_0__/* .createBlobURL */ .ZR)(JSON.stringify(recording.metadata), 'application/json'), // Blob for metadata\n recording.name.replace(/\\.jfr$/, '') + '.metadata.json');\n });\n };\n ApiService.prototype.downloadTemplate = function (template) {\n var _this = this;\n this.target\n .target()\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (target) {\n return \"\".concat(_this.login.authority, \"/api/v2.1/targets/\").concat(encodeURIComponent(target.connectUrl), \"/templates/\").concat(encodeURIComponent(template.name), \"/type/\").concat(encodeURIComponent(template.type));\n }))\n .subscribe(function (resource) {\n var body = new window.FormData();\n body.append('resource', resource);\n _this.sendRequest('v2.1', 'auth/token', {\n method: 'POST',\n body: body,\n })\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result.resourceUrl; }))\n .subscribe(function (resourceUrl) {\n _this.downloadFile(resourceUrl, \"\".concat(template.name, \".jfc\"));\n });\n });\n };\n ApiService.prototype.downloadRule = function (name) {\n var _this = this;\n this.doGet('rules/' + name, 'v2')\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.data.result; }))\n .subscribe(function (rule) {\n var filename = \"\".concat(rule.name, \".json\");\n var file = new File([JSON.stringify(rule)], filename);\n var resourceUrl = URL.createObjectURL(file);\n _this.downloadFile(resourceUrl, filename);\n setTimeout(function () { return URL.revokeObjectURL(resourceUrl); }, 1000);\n });\n };\n ApiService.prototype.uploadRecording = function (file, labels, onUploadProgress, abortSignal) {\n window.onbeforeunload = function (event) { return event.preventDefault(); };\n var body = new window.FormData();\n body.append('recording', file);\n body.append('labels', JSON.stringify(labels));\n return this.sendLegacyRequest('v1', 'recordings', {\n method: 'POST',\n body: body,\n headers: {},\n listeners: {\n onUploadProgress: function (event) {\n onUploadProgress && onUploadProgress(Math.floor((event.loaded * 100) / event.total));\n },\n },\n abortSignal: abortSignal,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) {\n if (resp.ok) {\n return resp.body;\n }\n throw new XMLHttpError(resp);\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)({\n next: function () { return (window.onbeforeunload = null); },\n error: function () { return (window.onbeforeunload = null); },\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.uploadSSLCertificate = function (file, onUploadProgress, abortSignal) {\n window.onbeforeunload = function (event) { return event.preventDefault(); };\n var body = new window.FormData();\n body.append('cert', file);\n return this.sendLegacyRequest('v2', 'certificates', {\n method: 'POST',\n body: body,\n headers: {},\n listeners: {\n onUploadProgress: function (event) {\n onUploadProgress && onUploadProgress(Math.floor((event.loaded * 100) / event.total));\n },\n },\n abortSignal: abortSignal,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .tap */ .b)({\n next: function () { return (window.onbeforeunload = null); },\n error: function () { return (window.onbeforeunload = null); },\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.postRecordingMetadata = function (recordingName, labels) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_18__/* .filter */ .h)(function (target) { return target !== _Target_service__WEBPACK_IMPORTED_MODULE_4__/* .NO_TARGET */ .JE; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.graphql(\"\\n query PostRecordingMetadata($connectUrl: String, $recordingName: String, $labels: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n recordings {\\n archived(filter: { name: $recordingName }) {\\n data {\\n doPutMetadata(metadata: { labels: $labels }) {\\n metadata {\\n labels\\n }\\n }\\n }\\n }\\n }\\n }\\n }\", { connectUrl: target.connectUrl, recordingName: recordingName, labels: _this.stringifyRecordingLabels(labels) });\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (v) { return v.data.targetNodes[0].recordings.archived; }));\n };\n ApiService.prototype.postUploadedRecordingMetadata = function (recordingName, labels) {\n return this.graphql(\"\\n query PostUploadedRecordingMetadata($connectUrl: String, $recordingName: String, $labels: String){\\n archivedRecordings(filter: {sourceTarget: $connectUrl, name: $recordingName }) {\\n data {\\n doPutMetadata(metadata: { labels: $labels }) {\\n metadata {\\n labels\\n }\\n }\\n }\\n }\\n }\", { connectUrl: UPLOADS_SUBDIRECTORY, recordingName: recordingName, labels: this.stringifyRecordingLabels(labels) }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (v) { return v.data.archivedRecordings.data; }));\n };\n ApiService.prototype.postTargetRecordingMetadata = function (recordingName, labels) {\n var _this = this;\n return this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_18__/* .filter */ .h)(function (target) { return target !== _Target_service__WEBPACK_IMPORTED_MODULE_4__/* .NO_TARGET */ .JE; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (target) {\n return _this.graphql(\"\\n query PostActiveRecordingMetadata($connectUrl: String, $recordingName: String, $labels: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n recordings {\\n active(filter: { name: $recordingName }) {\\n data {\\n doPutMetadata(metadata: { labels: $labels }) {\\n metadata {\\n labels\\n }\\n }\\n }\\n }\\n }\\n }\\n }\", { connectUrl: target.connectUrl, recordingName: recordingName, labels: _this.stringifyRecordingLabels(labels) });\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (v) { return v.data.targetNodes[0].recordings.active; }));\n };\n ApiService.prototype.postCredentials = function (matchExpression, username, password) {\n var body = new window.FormData();\n body.append('matchExpression', matchExpression);\n body.append('username', username);\n body.append('password', password);\n return this.sendRequest('v2.2', 'credentials', {\n method: 'POST',\n body: body,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.getCredential = function (id) {\n return this.sendRequest('v2.2', \"credentials/\".concat(id), {\n method: 'GET',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.getCredentials = function (suppressNotifications, skipStatusCheck) {\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (skipStatusCheck === void 0) { skipStatusCheck = false; }\n return this.sendRequest('v2.2', \"credentials\", {\n method: 'GET',\n }, undefined, suppressNotifications, skipStatusCheck).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.deleteCredentials = function (id) {\n return this.sendRequest('v2.2', \"credentials/\".concat(id), {\n method: 'DELETE',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) { return resp.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.getRules = function (suppressNotifications, skipStatusCheck) {\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (skipStatusCheck === void 0) { skipStatusCheck = false; }\n return this.sendRequest('v2', 'rules', {\n method: 'GET',\n }, undefined, suppressNotifications, skipStatusCheck).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (response) { return response.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.getDiscoveryTree = function () {\n return this.sendRequest('v2.1', 'discovery', {\n method: 'GET',\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (body) { return body.data.result; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.isTargetMatched = function (matchExpression, target) {\n var body = new window.FormData();\n body.append('matchExpression', matchExpression);\n body.append('targets', JSON.stringify([target]));\n return this.sendRequest('beta', 'matchExpressions', {\n method: 'POST',\n body: body,\n }, undefined, true, true).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (body) {\n var matchedTargets = body.data.result.targets || [];\n return (0,_Target_service__WEBPACK_IMPORTED_MODULE_4__/* .includesTarget */ .vR)(matchedTargets, target);\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)());\n };\n ApiService.prototype.groupHasRecording = function (group, filter) {\n return this.graphql(\"\\n query GetRecordingForGroup ($groupFilter: EnvironmentNodeFilterInput, $recordingFilter: ActiveRecordingFilterInput){\\n environmentNodes(filter: $groupFilter) {\\n name\\n descendantTargets {\\n name\\n recordings {\\n active(filter: $recordingFilter) {\\n data {\\n name\\n }\\n }\\n }\\n }\\n }\\n }\\n \", {\n groupFilter: { id: group.id },\n recordingFilter: filter,\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (body) {\n return body.data.environmentNodes[0].descendantTargets.reduce(function (acc, curr) { var _a, _b; return acc.concat(((_b = (_a = curr.recordings) === null || _a === void 0 ? void 0 : _a.active) === null || _b === void 0 ? void 0 : _b.data) || []); }, []);\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)([]); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (recs) { return recs.length > 0; }) // At least one\n );\n };\n ApiService.prototype.targetHasRecording = function (target, filter) {\n if (filter === void 0) { filter = {}; }\n return this.graphql(\"\\n query ActiveRecordingsForJFRMetrics($connectUrl: String, $recordingFilter: ActiveRecordingFilterInput) {\\n targetNodes(filter: { name: $connectUrl }) {\\n recordings {\\n active (filter: $recordingFilter) {\\n aggregate {\\n count\\n }\\n }\\n }\\n }\\n }\", {\n connectUrl: target.connectUrl,\n recordingFilter: filter,\n }, true, true).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) {\n var nodes = resp.data.targetNodes;\n if (nodes.length === 0) {\n return false;\n }\n var count = nodes[0].recordings.active.aggregate.count;\n return count > 0;\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)(false); }));\n };\n ApiService.prototype.checkCredentialForTarget = function (target, credentials) {\n var body = new window.FormData();\n body.append('username', credentials.username);\n body.append('password', credentials.password);\n return this.sendRequest('beta', \"credentials/\".concat(encodeURIComponent(target.connectUrl)), { method: 'POST', body: body }, undefined, true, true).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_14__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (resp) { return resp.json(); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (body) {\n var _a;\n var result = (_a = body === null || body === void 0 ? void 0 : body.data) === null || _a === void 0 ? void 0 : _a.result;\n switch (result === null || result === void 0 ? void 0 : result.toUpperCase()) {\n case 'FAILURE':\n return { error: new Error('Invalid username or password.'), severeLevel: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_19__/* .ValidatedOptions.error */ .LD.error };\n case 'NA':\n return {\n error: new Error('The target does not have authentication enabled.'),\n severeLevel: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_19__/* .ValidatedOptions.warning */ .LD.warning,\n };\n case 'SUCCESS':\n return undefined;\n default:\n return {\n error: new Error('Could not determine test results. Try again!'),\n severeLevel: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_19__/* .ValidatedOptions.error */ .LD.error,\n };\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (err) {\n if (isHttpError(err)) {\n return err.httpResponse\n .text()\n .then(function (detail) { return ({ error: new Error(detail), severeLevel: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_19__/* .ValidatedOptions.error */ .LD.error }); });\n }\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)({ error: err, severeLevel: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_19__/* .ValidatedOptions.error */ .LD.error });\n }));\n };\n ApiService.prototype.getTargetMBeanMetrics = function (target, queries) {\n return this.graphql(\"\\n query MBeanMXMetricsForTarget($connectUrl: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n mbeanMetrics {\\n \".concat(queries.join('\\n'), \"\\n }\\n }\\n }\"), { connectUrl: target.connectUrl }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) {\n var _a;\n var nodes = resp.data.targetNodes;\n if (!nodes || nodes.length === 0) {\n return {};\n }\n return (_a = nodes[0]) === null || _a === void 0 ? void 0 : _a.mbeanMetrics;\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (_) { return (0,rxjs__WEBPACK_IMPORTED_MODULE_16__.of)({}); }));\n };\n ApiService.prototype.getTargetArchivedRecordings = function (target) {\n return this.graphql(\"\\n query ArchivedRecordingsForTarget($connectUrl: String) {\\n archivedRecordings(filter: { sourceTarget: $connectUrl }) {\\n data {\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n size\\n archivedTime\\n }\\n }\\n }\", { connectUrl: target.connectUrl }, true, true).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (v) { return v.data.archivedRecordings.data; }));\n };\n ApiService.prototype.getTargetActiveRecordings = function (target) {\n return this.doGet(\"targets/\".concat(encodeURIComponent(target.connectUrl), \"/recordings\"), 'v1', undefined, true, true);\n };\n ApiService.prototype.getTargetEventTemplates = function (target) {\n return this.doGet(\"targets/\".concat(encodeURIComponent(target.connectUrl), \"/templates\"), 'v1', undefined, true, true);\n };\n ApiService.prototype.getTargetEventTypes = function (target) {\n return this.doGet(\"targets/\".concat(encodeURIComponent(target.connectUrl), \"/events\"), 'v1', undefined, true, true);\n };\n ApiService.prototype.downloadLayoutTemplate = function (template) {\n var stringifiedSerializedLayout = this.stringifyLayoutTemplate(template);\n var filename = \"cryostat-dashboard-\".concat(template.name, \".json\");\n var resourceUrl = (0,_app_utils_utils__WEBPACK_IMPORTED_MODULE_0__/* .createBlobURL */ .ZR)(stringifiedSerializedLayout, 'application/json');\n this.downloadFile(resourceUrl, filename);\n };\n ApiService.prototype.stringifyLayoutTemplate = function (template) {\n var download = {\n name: template.name,\n description: template.description,\n cards: template.cards,\n version: template.version,\n };\n return JSON.stringify(download);\n };\n ApiService.prototype.downloadFile = function (url, filename, download) {\n if (download === void 0) { download = true; }\n var anchor = document.createElement('a');\n anchor.setAttribute('style', 'display: none; visibility: hidden;');\n anchor.target = '_blank';\n if (download) {\n anchor.download = filename;\n }\n anchor.href = url;\n anchor.click();\n anchor.remove();\n };\n ApiService.prototype.stringifyRecordingLabels = function (labels) {\n return JSON.stringify(labels).replace(/\"([^\"]+)\":/g, '$1:');\n };\n ApiService.prototype.sendRequest = function (apiVersion, path, config, params, suppressNotifications, skipStatusCheck) {\n var _this = this;\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (skipStatusCheck === void 0) { skipStatusCheck = false; }\n var req = function () {\n return _this.login.getHeaders().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (headers) {\n var defaultReq = {\n credentials: 'include',\n mode: 'cors',\n headers: headers,\n };\n var customizer = function (dest, src) {\n if (dest instanceof Headers && src instanceof Headers) {\n src.forEach(function (v, k) { return dest.set(k, v); });\n }\n return dest;\n };\n lodash__WEBPACK_IMPORTED_MODULE_1___default().mergeWith(config, defaultReq, customizer);\n return (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_8__/* .fromFetch */ .U)(\"\".concat(_this.login.authority, \"/api/\").concat(apiVersion, \"/\").concat(path).concat(params ? '?' + params : ''), config);\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) {\n if (resp.ok)\n return resp;\n throw new HttpError(resp);\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (err) {\n if (skipStatusCheck) {\n throw err;\n }\n return _this.handleError(err, req, suppressNotifications);\n }));\n };\n return req();\n };\n ApiService.prototype.handleError = function (error, retry, suppressNotifications) {\n var _this = this;\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (isHttpError(error)) {\n if (error.httpResponse.status === 427) {\n var jmxAuthScheme = error.httpResponse.headers.get('X-JMX-Authenticate');\n if (jmxAuthScheme === _Login_service__WEBPACK_IMPORTED_MODULE_2__/* .AuthMethod.BASIC */ .Hi.BASIC) {\n this.target.setAuthFailure();\n return this.target.authRetry().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_20__/* .mergeMap */ .z)(function () { return retry(); }));\n }\n }\n else if (error.httpResponse.status === 502) {\n this.target.setSslFailure();\n }\n else {\n error.httpResponse.text().then(function (detail) {\n if (!suppressNotifications) {\n _this.notifications.danger(\"Request failed (\".concat(error.httpResponse.status, \" \").concat(error.message, \")\"), detail);\n }\n });\n }\n throw error;\n }\n if (!suppressNotifications) {\n this.notifications.danger(\"Request failed\", error.message);\n }\n throw error;\n };\n ApiService.prototype.sendLegacyRequest = function (\n // Used for uploading. Prefer sendRequest for other operations\n apiVersion, path, _a, params, suppressNotifications, skipStatusCheck) {\n var _this = this;\n var _b = _a.method, method = _b === void 0 ? 'GET' : _b, body = _a.body, _c = _a.headers, headers = _c === void 0 ? {} : _c, listeners = _a.listeners, abortSignal = _a.abortSignal;\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (skipStatusCheck === void 0) { skipStatusCheck = false; }\n var req = function () {\n return _this.login.getHeaders().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .concatMap */ .b)(function (defaultHeaders) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_9__/* .from */ .D)(new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open(method, \"\".concat(_this.login.authority, \"/api/\").concat(apiVersion, \"/\").concat(path).concat(params ? '?' + params : ''), true);\n (listeners === null || listeners === void 0 ? void 0 : listeners.onUploadProgress) && xhr.upload.addEventListener('progress', listeners.onUploadProgress);\n abortSignal && abortSignal.subscribe(function () { return xhr.abort(); }); // Listen to abort signal if any\n xhr.addEventListener('readystatechange', function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status === 0) {\n // aborted\n reject(new Error('Aborted'));\n }\n var ok = isHttpOk(xhr.status);\n var respHeaders_1 = {};\n var arr = xhr\n .getAllResponseHeaders()\n .trim()\n .split(/[\\r\\n]+/);\n arr.forEach(function (line) {\n var parts = line.split(': ');\n var header = parts.shift();\n var value = parts.join(': ');\n if (header) {\n respHeaders_1[header] = value;\n }\n else {\n reject(new Error('Invalid header'));\n }\n });\n resolve({\n body: xhr.response,\n headers: respHeaders_1,\n respType: xhr.responseType,\n status: xhr.status,\n statusText: xhr.statusText,\n ok: ok,\n });\n }\n });\n // Populate headers\n defaultHeaders.forEach(function (v, k) { return xhr.setRequestHeader(k, v); });\n headers && Object.keys(headers).forEach(function (k) { return xhr.setRequestHeader(k, headers[k]); });\n xhr.withCredentials = true;\n // Send request\n xhr.send(body);\n }));\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_17__/* .map */ .U)(function (resp) {\n if (resp.ok)\n return resp;\n throw new XMLHttpError(resp);\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_15__/* .catchError */ .K)(function (err) {\n if (skipStatusCheck) {\n throw err;\n }\n return _this.handleLegacyError(err, req, suppressNotifications);\n }));\n };\n return req();\n };\n ApiService.prototype.handleLegacyError = function (error, retry, suppressNotifications) {\n var _this = this;\n if (suppressNotifications === void 0) { suppressNotifications = false; }\n if (isXMLHttpError(error)) {\n if (error.xmlHttpResponse.status === 427) {\n var jmxAuthScheme = error.xmlHttpResponse.headers['X-JMX-Authenticate'];\n if (jmxAuthScheme === _Login_service__WEBPACK_IMPORTED_MODULE_2__/* .AuthMethod.BASIC */ .Hi.BASIC) {\n this.target.setAuthFailure();\n return this.target.authRetry().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_20__/* .mergeMap */ .z)(function () { return retry(); }));\n }\n }\n else if (error.xmlHttpResponse.status === 502) {\n this.target.setSslFailure();\n }\n else {\n Promise.resolve(error.xmlHttpResponse.body).then(function (detail) {\n if (!suppressNotifications) {\n _this.notifications.danger(\"Request failed (\".concat(error.xmlHttpResponse.status, \" \").concat(error.message, \")\"), detail);\n }\n });\n }\n throw error;\n }\n if (!suppressNotifications) {\n this.notifications.danger(\"Request failed\", error.message);\n }\n throw error;\n };\n return ApiService;\n}());\n\nvar RecordingState;\n(function (RecordingState) {\n RecordingState[\"STOPPED\"] = \"STOPPED\";\n RecordingState[\"STARTING\"] = \"STARTING\";\n RecordingState[\"RUNNING\"] = \"RUNNING\";\n RecordingState[\"STOPPING\"] = \"STOPPING\";\n})(RecordingState || (RecordingState = {}));\nvar isActiveRecording = function (toCheck) {\n return toCheck.state !== undefined;\n};\nvar isGraphQLAuthError = function (resp) {\n if (resp.errors !== undefined) {\n if (resp.errors[0].message.includes('Authentication failed!')) {\n return true;\n }\n }\n return false;\n};\nvar automatedAnalysisRecordingName = 'automated-analysis';\nvar defaultAutomatedAnalysisRecordingConfig = {\n template: {\n name: 'Continuous',\n type: 'TARGET',\n },\n maxSize: 1048576,\n maxAge: 0,\n};\nvar defaultChartControllerConfig = {\n minRefresh: 10,\n};\n// New target specific archived recording apis now enforce a non-empty target field\n// The placeholder targetId for uploaded (non-target) recordings is \"uploads\"\nvar UPLOADS_SUBDIRECTORY = 'uploads';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0gsaUJBQUM7QUFBRCxDQUFDOztBQXlNRCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIscUNBQW1CO0lBQ25CLHVDQUFxQjtJQUNyQixxQ0FBbUI7SUFDbkIsdUNBQXFCO0FBQ3ZCLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQUlNLElBQU0saUJBQWlCLEdBQUcsVUFBQyxPQUFrQjtJQUNsRCxPQUFRLE9BQTJCLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMxRCxDQUFDLENBQUM7QUFFSyxJQUFNLGtCQUFrQixHQUFHLFVBQUMsSUFBUztJQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7WUFDN0QsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUEyRUssSUFBTSw4QkFBOEIsR0FBRyxvQkFBb0IsQ0FBQztBQVE1RCxJQUFNLHVDQUF1QyxHQUFxQztJQUN2RixRQUFRLEVBQUU7UUFDUixJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsT0FBTyxFQUFFLE9BQU87SUFDaEIsTUFBTSxFQUFFLENBQUM7Q0FDVixDQUFDO0FBTUssSUFBTSw0QkFBNEIsR0FBMEI7SUFDakUsVUFBVSxFQUFFLEVBQUU7Q0FDZixDQUFDO0FBRUYsbUZBQW1GO0FBQ25GLDZFQUE2RTtBQUN0RSxJQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlLnRzeD8wNjIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IExheW91dFRlbXBsYXRlLCBTZXJpYWxMYXlvdXRUZW1wbGF0ZSB9IGZyb20gJ0BhcHAvRGFzaGJvYXJkL2Rhc2hib2FyZC11dGlscyc7XG5pbXBvcnQgeyBFdmVudFR5cGUgfSBmcm9tICdAYXBwL0V2ZW50cy9FdmVudFR5cGVzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnMgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBSZWNvcmRpbmdMYWJlbCB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvUmVjb3JkaW5nTGFiZWwnO1xuaW1wb3J0IHsgUnVsZSB9IGZyb20gJ0BhcHAvUnVsZXMvUnVsZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnROb2RlIH0gZnJvbSAnQGFwcC9Ub3BvbG9neS90eXBpbmdzJztcbmltcG9ydCB7IGNyZWF0ZUJsb2JVUkwsIGp2bUlkVG9TdWJkaXJlY3RvcnlOYW1lIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBWYWxpZGF0ZWRPcHRpb25zIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRU1QVFksIGZvcmtKb2luLCBmcm9tLCBPYnNlcnZhYmxlLCBPYnNlcnZhYmxlSW5wdXQsIG9mLCBSZXBsYXlTdWJqZWN0LCBzaGFyZVJlcGxheSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZnJvbUZldGNoIH0gZnJvbSAncnhqcy9mZXRjaCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEF1dGhNZXRob2QsIExvZ2luU2VydmljZSwgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi9Mb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5IH0gZnJvbSAnLi9Ob3RpZmljYXRpb25DaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgaW5jbHVkZXNUYXJnZXQsIE5PX1RBUkdFVCwgVGFyZ2V0LCBUYXJnZXRTZXJ2aWNlIH0gZnJvbSAnLi9UYXJnZXQuc2VydmljZSc7XG5cbnR5cGUgQXBpVmVyc2lvbiA9ICd2MScgfCAndjInIHwgJ3YyLjEnIHwgJ3YyLjInIHwgJ2JldGEnO1xuXG5leHBvcnQgY2xhc3MgSHR0cEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gIGNvbnN0cnVjdG9yKGh0dHBSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICBzdXBlcihodHRwUmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgdGhpcy5odHRwUmVzcG9uc2UgPSBodHRwUmVzcG9uc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFhNTEh0dHBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgeG1sSHR0cFJlc3BvbnNlOiBYTUxIdHRwUmVzcG9uc2U7XG5cbiAgY29uc3RydWN0b3IoeG1sSHR0cFJlc3BvbnNlOiBYTUxIdHRwUmVzcG9uc2UpIHtcbiAgICBzdXBlcih4bWxIdHRwUmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgdGhpcy54bWxIdHRwUmVzcG9uc2UgPSB4bWxIdHRwUmVzcG9uc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzSHR0cEVycm9yID0gKGVycjogdW5rbm93bik6IGVyciBpcyBIdHRwRXJyb3IgPT4ge1xuICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChlcnIgYXMgSHR0cEVycm9yKS5odHRwUmVzcG9uc2UgIT09IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1hNTEh0dHBFcnJvciA9IChlcnI6IHVua25vd24pOiBlcnIgaXMgWE1MSHR0cEVycm9yID0+IHtcbiAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoZXJyIGFzIFhNTEh0dHBFcnJvcikueG1sSHR0cFJlc3BvbnNlICE9PSB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIdHRwT2sgPSAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwO1xufTtcblxuZXhwb3J0IGNsYXNzIEFwaVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFyY2hpdmVFbmFibGVkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3J5b3N0YXRWZXJzaW9uU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oMSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JhZmFuYURhdGFzb3VyY2VVcmxTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcbiAgcHJpdmF0ZSByZWFkb25seSBncmFmYW5hRGFzaGJvYXJkVXJsU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oMSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXQ6IFRhcmdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9naW46IExvZ2luU2VydmljZVxuICApIHtcbiAgICAvLyBzaG93IHJlY29yZGluZyBhcmNoaXZlcyB3aGVuIHJlY29yZGluZ3MgYXZhaWxhYmxlXG4gICAgbG9naW5cbiAgICAgIC5nZXRTZXNzaW9uU3RhdGUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbmNhdE1hcCgoc2Vzc2lvblN0YXRlKSA9PiAoc2Vzc2lvblN0YXRlID09PSBTZXNzaW9uU3RhdGUuVVNFUl9TRVNTSU9OID8gdGhpcy5kb0dldCgncmVjb3JkaW5ncycpIDogRU1QVFkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmFyY2hpdmVFbmFibGVkLm5leHQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hcmNoaXZlRW5hYmxlZC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0RGF0YXNvdXJjZVVSTDogT2JzZXJ2YWJsZTxHcmFmYW5hRGF0YXNvdXJjZVVybEdldFJlc3BvbnNlPiA9IGZyb21GZXRjaChcbiAgICAgIGAke3RoaXMubG9naW4uYXV0aG9yaXR5fS9hcGkvdjEvZ3JhZmFuYV9kYXRhc291cmNlX3VybGBcbiAgICApLnBpcGUoY29uY2F0TWFwKChyZXNwKSA9PiBmcm9tKHJlc3AuanNvbigpKSkpO1xuICAgIGNvbnN0IGdldERhc2hib2FyZFVSTDogT2JzZXJ2YWJsZTxHcmFmYW5hRGFzaGJvYXJkVXJsR2V0UmVzcG9uc2U+ID0gZnJvbUZldGNoKFxuICAgICAgYCR7dGhpcy5sb2dpbi5hdXRob3JpdHl9L2FwaS92MS9ncmFmYW5hX2Rhc2hib2FyZF91cmxgXG4gICAgKS5waXBlKGNvbmNhdE1hcCgocmVzcCkgPT4gZnJvbShyZXNwLmpzb24oKSkpKTtcbiAgICBjb25zdCBoZWFsdGg6IE9ic2VydmFibGU8SGVhbHRoR2V0UmVzcG9uc2U+ID0gZnJvbUZldGNoKGAke3RoaXMubG9naW4uYXV0aG9yaXR5fS9oZWFsdGhgKS5waXBlKFxuICAgICAgdGFwKChyZXNwOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3Aub2spIHtcbiAgICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihyZXNwKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGFuZ2VyKCdBUEkgL2hlYWx0aCByZXF1ZXN0IGZhaWxlZCcsIHJlc3Auc3RhdHVzVGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKChyZXNwOiBSZXNwb25zZSkgPT4gZnJvbShyZXNwLmpzb24oKSkpLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gICAgaGVhbHRoXG4gICAgICAucGlwZShcbiAgICAgICAgY29uY2F0TWFwKChqc29uUmVzcCkgPT4ge1xuICAgICAgICAgIHRoaXMuY3J5b3N0YXRWZXJzaW9uU3ViamVjdC5uZXh0KGpzb25SZXNwLmNyeW9zdGF0VmVyc2lvbik7XG4gICAgICAgICAgY29uc3QgdG9GZXRjaDogdW5rbm93bltdID0gW107XG4gICAgICAgICAgY29uc3QgdW5jb25maWd1cmVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHVuYXZhaWxhYmxlOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIC8vIGlmIGRhdGFzb3VyY2Ugb3IgZGFzaGJvYXJkIGFyZSBub3QgY29uZmlndXJlZCwgZGlzcGxheSBhIHdhcm5pbmdcbiAgICAgICAgICAvLyBpZiBlaXRoZXIgaXMgY29uZmlndXJlZCBidXQgbm90IGF2YWlsYWJsZSwgZGlzcGxheSBhbiBlcnJvclxuICAgICAgICAgIC8vIGlmIGJvdGggY29uZmlndXJlZCBhbmQgYXZhaWxhYmxlIHRoZW4gZGlzcGxheSBub3RoaW5nIGFuZCBqdXN0IHJldHJpZXZlIHRoZSBVUkxzXG4gICAgICAgICAgaWYgKGpzb25SZXNwLmRhdGFzb3VyY2VDb25maWd1cmVkKSB7XG4gICAgICAgICAgICBpZiAoanNvblJlc3AuZGF0YXNvdXJjZUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICB0b0ZldGNoLnB1c2goZ2V0RGF0YXNvdXJjZVVSTCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmF2YWlsYWJsZS5wdXNoKCdkYXRhc291cmNlIFVSTCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bmNvbmZpZ3VyZWQucHVzaCgnZGF0YXNvdXJjZSBVUkwnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGpzb25SZXNwLmRhc2hib2FyZENvbmZpZ3VyZWQpIHtcbiAgICAgICAgICAgIGlmIChqc29uUmVzcC5kYXNoYm9hcmRBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgdG9GZXRjaC5wdXNoKGdldERhc2hib2FyZFVSTCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmF2YWlsYWJsZS5wdXNoKCdkYXNoYm9hcmQgVVJMJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuY29uZmlndXJlZC5wdXNoKCdkYXNoYm9hcmQgVVJMJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmNvbmZpZ3VyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgICAgICAgc3RhdGU6ICdub3QgY29uZmlndXJlZCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHVuY29uZmlndXJlZC5qb2luKCcsICcpICsgJyB1bmNvbmZpZ3VyZWQnLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5hdmFpbGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgICAgICAgc3RhdGU6ICd1bmF2YWlsYWJsZScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHVuYXZhaWxhYmxlLmpvaW4oJywgJykgKyAnIHVuYXZhaWxhYmxlJyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKFxuICAgICAgICAgICAgdG9GZXRjaCBhcyBbT2JzZXJ2YWJsZTxHcmFmYW5hRGF0YXNvdXJjZVVybEdldFJlc3BvbnNlPiwgT2JzZXJ2YWJsZTxHcmFmYW5hRGFzaGJvYXJkVXJsR2V0UmVzcG9uc2U+XVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhcnRzKSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmFmYW5hRGF0YXNvdXJjZVVybFN1YmplY3QubmV4dChwYXJ0c1swXS5ncmFmYW5hRGF0YXNvdXJjZVVybCk7XG4gICAgICAgICAgdGhpcy5ncmFmYW5hRGFzaGJvYXJkVXJsU3ViamVjdC5uZXh0KHBhcnRzWzFdLmdyYWZhbmFEYXNoYm9hcmRVcmwpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgaWYgKGVyci5zdGF0ZSA9PT0gJ3VuYXZhaWxhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRhbmdlcihgR3JhZmFuYSAke2Vyci5zdGF0ZX1gLCBlcnIubWVzc2FnZSwgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuR3JhZmFuYUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMud2FybmluZyhgR3JhZmFuYSAke2Vyci5zdGF0ZX1gLCBlcnIubWVzc2FnZSwgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuR3JhZmFuYUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVGFyZ2V0KFxuICAgIHRhcmdldDogVGFyZ2V0LFxuICAgIGNyZWRlbnRpYWxzPzogeyB1c2VybmFtZT86IHN0cmluZzsgcGFzc3dvcmQ/OiBzdHJpbmcgfSxcbiAgICBzdG9yZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gICAgZHJ5cnVuID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTx7IHN0YXR1czogbnVtYmVyOyBib2R5OiBvYmplY3QgfT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgd2luZG93LkZvcm1EYXRhKCk7XG4gICAgZm9ybS5hcHBlbmQoJ2Nvbm5lY3RVcmwnLCB0YXJnZXQuY29ubmVjdFVybCk7XG4gICAgaWYgKHRhcmdldC5hbGlhcyAmJiB0YXJnZXQuYWxpYXMudHJpbSgpKSB7XG4gICAgICBmb3JtLmFwcGVuZCgnYWxpYXMnLCB0YXJnZXQuYWxpYXMpO1xuICAgIH1cbiAgICBjcmVkZW50aWFscz8udXNlcm5hbWUgJiYgZm9ybS5hcHBlbmQoJ3VzZXJuYW1lJywgY3JlZGVudGlhbHMudXNlcm5hbWUpO1xuICAgIGNyZWRlbnRpYWxzPy5wYXNzd29yZCAmJiBmb3JtLmFwcGVuZCgncGFzc3dvcmQnLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG4gICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAndjInLFxuICAgICAgYHRhcmdldHNgLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZm9ybSxcbiAgICAgIH0sXG4gICAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgc3RvcmVDcmVkZW50aWFsczogYCR7c3RvcmVDcmVkZW50aWFsc31gLCBkcnlydW46IGAke2RyeXJ1bn1gIH0pLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRydWVcbiAgICApLnBpcGUoXG4gICAgICBmaXJzdCgpLFxuICAgICAgY29uY2F0TWFwKChyZXNwKSA9PiByZXNwLmpzb24oKS50aGVuKChib2R5KSA9PiAoeyBzdGF0dXM6IHJlc3Auc3RhdHVzLCBib2R5OiBib2R5IGFzIG9iamVjdCB9KSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoaXNIdHRwRXJyb3IoZXJyKSkge1xuICAgICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgZXJyLmh0dHBSZXNwb25zZS5qc29uKCkudGhlbigoYm9keSkgPT4gKHsgc3RhdHVzOiBlcnIuaHR0cFJlc3BvbnNlLnN0YXR1cywgYm9keTogYm9keSBhcyBvYmplY3QgfSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoeyBzdGF0dXM6IDAsIGJvZHk6IHsgZGF0YTogeyByZWFzb246IGVyci5tZXNzYWdlIH0gfSB9KTsgLy8gU3RhdHVzIDAgLT4gcmVxdWVzdCBpcyBub3QgY29tcGxldGVkXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVUYXJnZXQodGFyZ2V0OiBUYXJnZXQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdCgndjInLCBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9YCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoZmFsc2UpKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgdXBsb2FkUnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZCxcbiAgICBhYm9ydFNpZ25hbD86IE9ic2VydmFibGU8dm9pZD5cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICByZXR1cm4gdGhpcy5zZW5kTGVnYWN5UmVxdWVzdCgndjInLCAncnVsZXMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJ1bGUpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGxpc3RlbmVyczoge1xuICAgICAgICBvblVwbG9hZFByb2dyZXNzOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzICYmIG9uVXBsb2FkUHJvZ3Jlc3MoTWF0aC5mbG9vcigoZXZlbnQubG9hZGVkICogMTAwKSAvIGV2ZW50LnRvdGFsKSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYWJvcnRTaWduYWwsXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAoKSA9PiAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gbnVsbCksXG4gICAgICAgIGVycm9yOiAoKSA9PiAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gbnVsbCksXG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlUnVsZShydWxlOiBSdWxlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3QoJ3YyJywgJ3J1bGVzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShydWxlKSxcbiAgICAgIGhlYWRlcnMsXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICBjYXRjaEVycm9yKChfKSA9PiBvZihmYWxzZSkpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVSdWxlKHJ1bGU6IFJ1bGUsIGNsZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICAgIGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KFxuICAgICAgJ3YyJyxcbiAgICAgIGBydWxlcy8ke3J1bGUubmFtZX1gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJ1bGUpLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSxcbiAgICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBjbGVhbjogU3RyaW5nKGNsZWFuKSB9KVxuICAgICkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVJ1bGUobmFtZTogc3RyaW5nLCBjbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICd2MicsXG4gICAgICBgcnVsZXMvJHtuYW1lfWAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB9LFxuICAgICAgbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGNsZWFuOiBTdHJpbmcoY2xlYW4pIH0pXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlUmVjb3JkaW5nKHJlY29yZGluZ0F0dHJpYnV0ZXM6IFJlY29yZGluZ0F0dHJpYnV0ZXMpOiBPYnNlcnZhYmxlPFNpbXBsZVJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyB3aW5kb3cuRm9ybURhdGEoKTtcbiAgICBmb3JtLmFwcGVuZCgncmVjb3JkaW5nTmFtZScsIHJlY29yZGluZ0F0dHJpYnV0ZXMubmFtZSk7XG4gICAgZm9ybS5hcHBlbmQoJ2V2ZW50cycsIHJlY29yZGluZ0F0dHJpYnV0ZXMuZXZlbnRzKTtcbiAgICBpZiAoISFyZWNvcmRpbmdBdHRyaWJ1dGVzLmR1cmF0aW9uICYmIHJlY29yZGluZ0F0dHJpYnV0ZXMuZHVyYXRpb24gPiAwKSB7XG4gICAgICBmb3JtLmFwcGVuZCgnZHVyYXRpb24nLCBTdHJpbmcocmVjb3JkaW5nQXR0cmlidXRlcy5kdXJhdGlvbikpO1xuICAgIH1cbiAgICBpZiAocmVjb3JkaW5nQXR0cmlidXRlcy5hcmNoaXZlT25TdG9wICE9IG51bGwpIHtcbiAgICAgIGZvcm0uYXBwZW5kKCdhcmNoaXZlT25TdG9wJywgU3RyaW5nKHJlY29yZGluZ0F0dHJpYnV0ZXMuYXJjaGl2ZU9uU3RvcCkpO1xuICAgIH1cbiAgICBpZiAocmVjb3JkaW5nQXR0cmlidXRlcy5vcHRpb25zKSB7XG4gICAgICBpZiAocmVjb3JkaW5nQXR0cmlidXRlcy5vcHRpb25zLnJlc3RhcnQpIHtcbiAgICAgICAgZm9ybS5hcHBlbmQoJ3Jlc3RhcnQnLCBTdHJpbmcocmVjb3JkaW5nQXR0cmlidXRlcy5vcHRpb25zLnJlc3RhcnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWNvcmRpbmdBdHRyaWJ1dGVzLm9wdGlvbnMudG9EaXNrICE9IG51bGwpIHtcbiAgICAgICAgZm9ybS5hcHBlbmQoJ3RvRGlzaycsIFN0cmluZyhyZWNvcmRpbmdBdHRyaWJ1dGVzLm9wdGlvbnMudG9EaXNrKSk7XG4gICAgICB9XG4gICAgICBpZiAoISFyZWNvcmRpbmdBdHRyaWJ1dGVzLm9wdGlvbnMubWF4QWdlICYmIHJlY29yZGluZ0F0dHJpYnV0ZXMub3B0aW9ucy5tYXhBZ2UgPj0gMCkge1xuICAgICAgICBmb3JtLmFwcGVuZCgnbWF4QWdlJywgU3RyaW5nKHJlY29yZGluZ0F0dHJpYnV0ZXMub3B0aW9ucy5tYXhBZ2UpKTtcbiAgICAgIH1cbiAgICAgIGlmICghIXJlY29yZGluZ0F0dHJpYnV0ZXMub3B0aW9ucy5tYXhTaXplICYmIHJlY29yZGluZ0F0dHJpYnV0ZXMub3B0aW9ucy5tYXhTaXplID49IDApIHtcbiAgICAgICAgZm9ybS5hcHBlbmQoJ21heFNpemUnLCBTdHJpbmcocmVjb3JkaW5nQXR0cmlidXRlcy5vcHRpb25zLm1heFNpemUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlY29yZGluZ0F0dHJpYnV0ZXMubWV0YWRhdGEpIHtcbiAgICAgIGZvcm0uYXBwZW5kKCdtZXRhZGF0YScsIEpTT04uc3RyaW5naWZ5KHJlY29yZGluZ0F0dHJpYnV0ZXMubWV0YWRhdGEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YXJnZXQudGFyZ2V0KCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgodGFyZ2V0KSA9PlxuICAgICAgICB0aGlzLnNlbmRSZXF1ZXN0KCd2MScsIGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vcmVjb3JkaW5nc2AsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgb2s6IHJlc3Aub2ssXG4gICAgICAgICAgICAgIHN0YXR1czogcmVzcC5zdGF0dXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSHR0cEVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBlcnIuaHR0cFJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBmaXJzdCgpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlU25hcHNob3QoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnRhcmdldCgpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdCgndjEnLCBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3NuYXBzaG90YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIHRhcCgocmVzcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3Auc3RhdHVzID09IDIwMikge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMud2FybmluZyhcbiAgICAgICAgICAgICAgICAnU25hcHNob3QgRmFpbGVkIHRvIENyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ1RoZSByZWNvcmRpbmcgaXMgbm90IHJlYWRhYmxlIGZvciByZWFzb25zLCBzdWNoIGFzLCB1bmF2YWlsYWJpbGl0eSBvZiBhY3RpdmUgYW5kIG5vbi1zbmFwc2hvdCBzb3VyY2UgcmVjb3JkaW5ncyBmcm9tIHdoZXJlIHRoZSBldmVudCBkYXRhIGlzIHJlYWQuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5zdGF0dXMgPT0gMjAwKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChfKSA9PiBvZihmYWxzZSkpLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTbmFwc2hvdFYyKCk6IE9ic2VydmFibGU8QWN0aXZlUmVjb3JkaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnRhcmdldCgpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdCgndjInLCBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3NuYXBzaG90YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIGNvbmNhdE1hcCgocmVzcCkgPT4gcmVzcC5qc29uKCkgYXMgUHJvbWlzZTxSZWNvcmRpbmdSZXNwb25zZT4pLFxuICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEucmVzdWx0KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChfKSA9PiBvZih1bmRlZmluZWQpKSxcbiAgICAgICAgICBmaXJzdCgpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaXNBcmNoaXZlRW5hYmxlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5hcmNoaXZlRW5hYmxlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGFyY2hpdmVSZWNvcmRpbmcocmVjb3JkaW5nTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnRhcmdldCgpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICAgICAndjEnLFxuICAgICAgICAgIGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vcmVjb3JkaW5ncy8ke2VuY29kZVVSSUNvbXBvbmVudChyZWNvcmRpbmdOYW1lKX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgICAgICAgIGJvZHk6ICdTQVZFJyxcbiAgICAgICAgICB9XG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzdG9wUmVjb3JkaW5nKHJlY29yZGluZ05hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnRhcmdldC50YXJnZXQoKS5waXBlKFxuICAgICAgY29uY2F0TWFwKCh0YXJnZXQpID0+XG4gICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAgICAgJ3YxJyxcbiAgICAgICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3JlY29yZGluZ3MvJHtlbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nTmFtZSl9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgICAgICBib2R5OiAnU1RPUCcsXG4gICAgICAgICAgfVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgICAgICBmaXJzdCgpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlUmVjb3JkaW5nKHJlY29yZGluZ05hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnRhcmdldC50YXJnZXQoKS5waXBlKFxuICAgICAgY29uY2F0TWFwKCh0YXJnZXQpID0+XG4gICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAgICAgJ3YxJyxcbiAgICAgICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3JlY29yZGluZ3MvJHtlbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nTmFtZSl9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIH1cbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICAgICAgZmlyc3QoKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFyY2hpdmVkUmVjb3JkaW5nKGNvbm5lY3RVcmw6IHN0cmluZywgcmVjb3JkaW5nTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAnYmV0YScsXG4gICAgICBgcmVjb3JkaW5ncy8ke2VuY29kZVVSSUNvbXBvbmVudChjb25uZWN0VXJsKX0vJHtlbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nTmFtZSl9YCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIH1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICB1cGxvYWRBY3RpdmVSZWNvcmRpbmdUb0dyYWZhbmEocmVjb3JkaW5nTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnRhcmdldCgpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICAgICAndjEnLFxuICAgICAgICAgIGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vcmVjb3JkaW5ncy8ke2VuY29kZVVSSUNvbXBvbmVudChyZWNvcmRpbmdOYW1lKX0vdXBsb2FkYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB9XG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICB1cGxvYWRBcmNoaXZlZFJlY29yZGluZ1RvR3JhZmFuYShzb3VyY2VUYXJnZXQ6IE9ic2VydmFibGU8VGFyZ2V0PiwgcmVjb3JkaW5nTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHNvdXJjZVRhcmdldC5waXBlKFxuICAgICAgY29uY2F0TWFwKCh0YXJnZXQpID0+XG4gICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAgICAgJ2JldGEnLFxuICAgICAgICAgIGByZWNvcmRpbmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vJHtlbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nTmFtZSl9L3VwbG9hZGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgfVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgICAgICBmaXJzdCgpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLy8gZnJvbSBmaWxlIHN5c3RlbSBwYXRoIGZ1bmN0aW9uc1xuICB1cGxvYWRBcmNoaXZlZFJlY29yZGluZ1RvR3JhZmFuYUZyb21QYXRoKGp2bUlkOiBzdHJpbmcsIHJlY29yZGluZ05hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHN1YmRpcmVjdG9yeU5hbWUgPSBqdm1JZFRvU3ViZGlyZWN0b3J5TmFtZShqdm1JZCk7XG4gICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3QoJ2JldGEnLCBgZnMvcmVjb3JkaW5ncy8ke3N1YmRpcmVjdG9yeU5hbWV9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlY29yZGluZ05hbWUpfS91cGxvYWRgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG4gIGRlbGV0ZUFyY2hpdmVkUmVjb3JkaW5nRnJvbVBhdGgoanZtSWQ6IHN0cmluZywgcmVjb3JkaW5nTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc3ViZGlyZWN0b3J5TmFtZSA9IGp2bUlkVG9TdWJkaXJlY3RvcnlOYW1lKGp2bUlkKTtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdCgnYmV0YScsIGBmcy9yZWNvcmRpbmdzLyR7c3ViZGlyZWN0b3J5TmFtZX0vJHtlbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nTmFtZSl9YCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgdHJhbnNmb3JtQW5kU3RyaW5naWZ5VG9SYXdMYWJlbHMobGFiZWxzOiBSZWNvcmRpbmdMYWJlbFtdKSB7XG4gICAgY29uc3QgcmF3TGFiZWxzID0ge307XG4gICAgZm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIHtcbiAgICAgIHJhd0xhYmVsc1tsYWJlbC5rZXldID0gbGFiZWwudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyYXdMYWJlbHMpO1xuICB9XG5cbiAgcG9zdFJlY29yZGluZ01ldGFkYXRhRnJvbVBhdGgoanZtSWQ6IHN0cmluZywgcmVjb3JkaW5nTmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZGluZ0xhYmVsW10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzdWJkaXJlY3RvcnlOYW1lID0ganZtSWRUb1N1YmRpcmVjdG9yeU5hbWUoanZtSWQpO1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KFxuICAgICAgJ2JldGEnLFxuICAgICAgYGZzL3JlY29yZGluZ3MvJHtzdWJkaXJlY3RvcnlOYW1lfS8ke2VuY29kZVVSSUNvbXBvbmVudChyZWNvcmRpbmdOYW1lKX0vbWV0YWRhdGEvbGFiZWxzYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IHRoaXMudHJhbnNmb3JtQW5kU3RyaW5naWZ5VG9SYXdMYWJlbHMobGFiZWxzKSxcbiAgICAgIH1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBpc1Byb2JlRW5hYmxlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVQcm9iZXModHJ1ZSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoXykgPT4gb2YodHJ1ZSkpLFxuICAgICAgY2F0Y2hFcnJvcigoXykgPT4gb2YoZmFsc2UpKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQ3VzdG9tRXZlbnRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KCd2MScsIGB0ZW1wbGF0ZXMvJHtlbmNvZGVVUklDb21wb25lbnQodGVtcGxhdGVOYW1lKX1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihmYWxzZSkpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBhZGRDdXN0b21FdmVudFRlbXBsYXRlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb25VcGxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkLFxuICAgIGFib3J0U2lnbmFsPzogT2JzZXJ2YWJsZTx2b2lkPlxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYm9keSA9IG5ldyB3aW5kb3cuRm9ybURhdGEoKTtcbiAgICBib2R5LmFwcGVuZCgndGVtcGxhdGUnLCBmaWxlKTtcbiAgICByZXR1cm4gdGhpcy5zZW5kTGVnYWN5UmVxdWVzdCgndjEnLCAndGVtcGxhdGVzJywge1xuICAgICAgYm9keTogYm9keSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICBsaXN0ZW5lcnM6IHtcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzczogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBvblVwbG9hZFByb2dyZXNzKE1hdGguZmxvb3IoKGV2ZW50LmxvYWRlZCAqIDEwMCkgLyBldmVudC50b3RhbCkpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgdGFwKHtcbiAgICAgICAgbmV4dDogKCkgPT4gKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IG51bGwpLFxuICAgICAgICBlcnJvcjogKCkgPT4gKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IG51bGwpLFxuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZVByb2JlcygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXQudGFyZ2V0KCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgodGFyZ2V0KSA9PlxuICAgICAgICB0aGlzLnNlbmRSZXF1ZXN0KCd2MicsIGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vcHJvYmVzYCwge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwKSA9PiByZXNwLm9rKSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSksXG4gICAgICAgICAgZmlyc3QoKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGluc2VydFByb2Jlcyh0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnRhcmdldC50YXJnZXQoKS5waXBlKFxuICAgICAgY29uY2F0TWFwKCh0YXJnZXQpID0+XG4gICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAgICAgJ3YyJyxcbiAgICAgICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3Byb2Jlcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0ZW1wbGF0ZU5hbWUpfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgfVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgdGFwKChyZXNwKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcC5zdGF0dXMgPT0gNDAwKSB7XG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy53YXJuaW5nKFxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5zZXJ0IFByb2JlcycsXG4gICAgICAgICAgICAgICAgJ1RoZSBwcm9iZXMgZmFpbGVkIHRvIGJlIGluamVjdGVkLiBDaGVjayB0aGF0IHRoZSBhZ2VudCBpcyBwcmVzZW50IGluIHRoZSBzYW1lIGNvbnRhaW5lciBhcyB0aGUgdGFyZ2V0IEpWTSBhbmQgdGhlIHRhcmdldCBpcyBydW5uaW5nIHdpdGggLWphdmFhZ2VudDovcGF0aC90by9hZ2VudCdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKF8pID0+IG9mKGZhbHNlKSksXG4gICAgICAgICAgZmlyc3QoKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGFkZEN1c3RvbVByb2JlVGVtcGxhdGUoXG4gICAgZmlsZTogRmlsZSxcbiAgICBvblVwbG9hZFByb2dyZXNzPzogKHByb2dyZXNzOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWQsXG4gICAgYWJvcnRTaWduYWw/OiBPYnNlcnZhYmxlPHZvaWQ+XG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBib2R5ID0gbmV3IHdpbmRvdy5Gb3JtRGF0YSgpO1xuICAgIGJvZHkuYXBwZW5kKCdwcm9iZVRlbXBsYXRlJywgZmlsZSk7XG4gICAgcmV0dXJuIHRoaXMuc2VuZExlZ2FjeVJlcXVlc3QoJ3YyJywgYHByb2Jlcy8ke2ZpbGUubmFtZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIGxpc3RlbmVyczoge1xuICAgICAgICBvblVwbG9hZFByb2dyZXNzOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzICYmIG9uVXBsb2FkUHJvZ3Jlc3MoTWF0aC5mbG9vcigoZXZlbnQubG9hZGVkICogMTAwKSAvIGV2ZW50LnRvdGFsKSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYWJvcnRTaWduYWwsXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAoKSA9PiAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gbnVsbCksXG4gICAgICAgIGVycm9yOiAoKSA9PiAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gbnVsbCksXG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQ3VzdG9tUHJvYmVUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KCd2MicsIGBwcm9iZXMvJHtlbmNvZGVVUklDb21wb25lbnQodGVtcGxhdGVOYW1lKX1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihmYWxzZSkpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBjcnlvc3RhdFZlcnNpb24oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jcnlvc3RhdFZlcnNpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ3JhZmFuYURhdGFzb3VyY2VVcmwoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ncmFmYW5hRGF0YXNvdXJjZVVybFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBncmFmYW5hRGFzaGJvYXJkVXJsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhZmFuYURhc2hib2FyZFVybFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBkb0dldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYXBpVmVyc2lvbjogQXBpVmVyc2lvbiA9ICd2MScsXG4gICAgcGFyYW1zPzogVVJMU2VhcmNoUGFyYW1zLFxuICAgIHN1cHByZXNzTm90aWZpY2F0aW9ucz86IGJvb2xlYW4sXG4gICAgc2tpcFN0YXR1c0NoZWNrPzogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdChhcGlWZXJzaW9uLCBwYXRoLCB7IG1ldGhvZDogJ0dFVCcgfSwgcGFyYW1zLCBzdXBwcmVzc05vdGlmaWNhdGlvbnMsIHNraXBTdGF0dXNDaGVjaykucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5qc29uKCkpLFxuICAgICAgY29uY2F0TWFwKGZyb20pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBnZXRQcm9iZVRlbXBsYXRlcygpOiBPYnNlcnZhYmxlPFByb2JlVGVtcGxhdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KCd2MicsICdwcm9iZXMnLCB7IG1ldGhvZDogJ0dFVCcgfSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgocmVzcCkgPT4gcmVzcC5qc29uKCkpLFxuICAgICAgbWFwKChyZXNwb25zZTogUHJvYmVUZW1wbGF0ZVJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhLnJlc3VsdCksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2ZVByb2JlcyhzdXBwcmVzc05vdGlmaWNhdGlvbnMgPSBmYWxzZSk6IE9ic2VydmFibGU8RXZlbnRQcm9iZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnRhcmdldCgpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICAgICAndjInLFxuICAgICAgICAgIGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vcHJvYmVzYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHN1cHByZXNzTm90aWZpY2F0aW9uc1xuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgY29uY2F0TWFwKChyZXNwKSA9PiByZXNwLmpzb24oKSksXG4gICAgICAgICAgbWFwKChyZXNwb25zZTogRXZlbnRQcm9iZXNSZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YS5yZXN1bHQpLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXRBY3RpdmVQcm9iZXNGb3JUYXJnZXQoXG4gICAgdGFyZ2V0OiBUYXJnZXQsXG4gICAgc3VwcHJlc3NOb3RpZmljYXRpb25zID0gZmFsc2UsXG4gICAgc2tpcFN0YXR1c0NoZWNrID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxFdmVudFByb2JlW10+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICd2MicsXG4gICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3Byb2Jlc2AsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB9LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgc3VwcHJlc3NOb3RpZmljYXRpb25zLFxuICAgICAgc2tpcFN0YXR1c0NoZWNrXG4gICAgKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChyZXNwKSA9PiByZXNwLmpzb24oKSksXG4gICAgICBtYXAoKHJlc3BvbnNlOiBFdmVudFByb2Jlc1Jlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhLnJlc3VsdCksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGdyYXBocWw8VD4oXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICB2YXJpYWJsZXM/OiB1bmtub3duLFxuICAgIHN1cHByZXNzTm90aWZpY2F0aW9ucz86IGJvb2xlYW4sXG4gICAgc2tpcFN0YXR1c0NoZWNrPzogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICd2Mi4yJyxcbiAgICAgICdncmFwaHFsJyxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBxdWVyeTogcXVlcnkucmVwbGFjZSgvW1xcc10rL2csICcgJyksXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICB9KSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzdXBwcmVzc05vdGlmaWNhdGlvbnMsXG4gICAgICBza2lwU3RhdHVzQ2hlY2tcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3AuanNvbigpKSxcbiAgICAgIGNvbmNhdE1hcChmcm9tKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgZG93bmxvYWRSZXBvcnQocmVjb3JkaW5nOiBSZWNvcmRpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBib2R5ID0gbmV3IHdpbmRvdy5Gb3JtRGF0YSgpO1xuICAgIGlmIChpc0FjdGl2ZVJlY29yZGluZyhyZWNvcmRpbmcpKSB7XG4gICAgICBib2R5LmFwcGVuZCgncmVzb3VyY2UnLCByZWNvcmRpbmcucmVwb3J0VXJsLnJlcGxhY2UoJy9hcGkvdjEnLCAnL2FwaS92Mi4xJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5LmFwcGVuZCgncmVzb3VyY2UnLCByZWNvcmRpbmcucmVwb3J0VXJsLmNvbmNhdCgnL2p3dCcpKTtcbiAgICB9XG4gICAgdGhpcy5zZW5kUmVxdWVzdCgndjIuMScsICdhdXRoL3Rva2VuJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY29uY2F0TWFwKChyZXNwKSA9PiByZXNwLmpzb24oKSksXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IEFzc2V0Snd0UmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEucmVzdWx0LnJlc291cmNlVXJsKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzb3VyY2VVcmwpID0+IHtcbiAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUocmVzb3VyY2VVcmwsIGAke3JlY29yZGluZy5uYW1lfS5yZXBvcnQuaHRtbGAsIGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZG93bmxvYWRSZWNvcmRpbmcocmVjb3JkaW5nOiBSZWNvcmRpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBib2R5ID0gbmV3IHdpbmRvdy5Gb3JtRGF0YSgpO1xuICAgIGlmIChpc0FjdGl2ZVJlY29yZGluZyhyZWNvcmRpbmcpKSB7XG4gICAgICBib2R5LmFwcGVuZCgncmVzb3VyY2UnLCByZWNvcmRpbmcuZG93bmxvYWRVcmwucmVwbGFjZSgnL2FwaS92MScsICcvYXBpL3YyLjEnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkuYXBwZW5kKCdyZXNvdXJjZScsIHJlY29yZGluZy5kb3dubG9hZFVybC5jb25jYXQoJy9qd3QnKSk7XG4gICAgfVxuICAgIHRoaXMuc2VuZFJlcXVlc3QoJ3YyLjEnLCAnYXV0aC90b2tlbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbmNhdE1hcCgocmVzcCkgPT4gcmVzcC5qc29uKCkpLFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBBc3NldEp3dFJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhLnJlc3VsdC5yZXNvdXJjZVVybClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc291cmNlVXJsKSA9PiB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHJlc291cmNlVXJsLCByZWNvcmRpbmcubmFtZSArIChyZWNvcmRpbmcubmFtZS5lbmRzV2l0aCgnLmpmcicpID8gJycgOiAnLmpmcicpKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoXG4gICAgICAgICAgY3JlYXRlQmxvYlVSTChKU09OLnN0cmluZ2lmeShyZWNvcmRpbmcubWV0YWRhdGEpLCAnYXBwbGljYXRpb24vanNvbicpLCAvLyBCbG9iIGZvciBtZXRhZGF0YVxuICAgICAgICAgIHJlY29yZGluZy5uYW1lLnJlcGxhY2UoL1xcLmpmciQvLCAnJykgKyAnLm1ldGFkYXRhLmpzb24nXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkVGVtcGxhdGUodGVtcGxhdGU6IEV2ZW50VGVtcGxhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnRhcmdldFxuICAgICAgLnRhcmdldCgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgICh0YXJnZXQpID0+XG4gICAgICAgICAgICBgJHt0aGlzLmxvZ2luLmF1dGhvcml0eX0vYXBpL3YyLjEvdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAgICAgdGFyZ2V0LmNvbm5lY3RVcmxcbiAgICAgICAgICAgICl9L3RlbXBsYXRlcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0ZW1wbGF0ZS5uYW1lKX0vdHlwZS8ke2VuY29kZVVSSUNvbXBvbmVudCh0ZW1wbGF0ZS50eXBlKX1gXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc291cmNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgd2luZG93LkZvcm1EYXRhKCk7XG4gICAgICAgIGJvZHkuYXBwZW5kKCdyZXNvdXJjZScsIHJlc291cmNlKTtcbiAgICAgICAgdGhpcy5zZW5kUmVxdWVzdCgndjIuMScsICdhdXRoL3Rva2VuJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgIH0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKHJlc3ApID0+IHJlc3AuanNvbigpKSxcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEFzc2V0Snd0UmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEucmVzdWx0LnJlc291cmNlVXJsKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNvdXJjZVVybCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUocmVzb3VyY2VVcmwsIGAke3RlbXBsYXRlLm5hbWV9LmpmY2ApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBkb3dubG9hZFJ1bGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kb0dldDxSdWxlUmVzcG9uc2U+KCdydWxlcy8nICsgbmFtZSwgJ3YyJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICBtYXAoKHJlc3ApID0+IHJlc3AuZGF0YS5yZXN1bHQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7cnVsZS5uYW1lfS5qc29uYDtcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtKU09OLnN0cmluZ2lmeShydWxlKV0sIGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShyZXNvdXJjZVVybCwgZmlsZW5hbWUpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwocmVzb3VyY2VVcmwpLCAxMDAwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBsb2FkUmVjb3JkaW5nKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgbGFiZWxzOiBvYmplY3QsXG4gICAgb25VcGxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkLFxuICAgIGFib3J0U2lnbmFsPzogT2JzZXJ2YWJsZTx2b2lkPlxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBib2R5ID0gbmV3IHdpbmRvdy5Gb3JtRGF0YSgpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWNvcmRpbmcnLCBmaWxlKTtcbiAgICBib2R5LmFwcGVuZCgnbGFiZWxzJywgSlNPTi5zdHJpbmdpZnkobGFiZWxzKSk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTGVnYWN5UmVxdWVzdCgndjEnLCAncmVjb3JkaW5ncycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgbGlzdGVuZXJzOiB7XG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IChldmVudCkgPT4ge1xuICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgb25VcGxvYWRQcm9ncmVzcyhNYXRoLmZsb29yKChldmVudC5sb2FkZWQgKiAxMDApIC8gZXZlbnQudG90YWwpKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhYm9ydFNpZ25hbCxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmIChyZXNwLm9rKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3AuYm9keSBhcyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFhNTEh0dHBFcnJvcihyZXNwKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKHtcbiAgICAgICAgbmV4dDogKCkgPT4gKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IG51bGwpLFxuICAgICAgICBlcnJvcjogKCkgPT4gKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IG51bGwpLFxuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIHVwbG9hZFNTTENlcnRpZmljYXRlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb25VcGxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkLFxuICAgIGFib3J0U2lnbmFsPzogT2JzZXJ2YWJsZTx2b2lkPlxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYm9keSA9IG5ldyB3aW5kb3cuRm9ybURhdGEoKTtcbiAgICBib2R5LmFwcGVuZCgnY2VydCcsIGZpbGUpO1xuICAgIHJldHVybiB0aGlzLnNlbmRMZWdhY3lSZXF1ZXN0KCd2MicsICdjZXJ0aWZpY2F0ZXMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHksXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIGxpc3RlbmVyczoge1xuICAgICAgICBvblVwbG9hZFByb2dyZXNzOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzICYmIG9uVXBsb2FkUHJvZ3Jlc3MoTWF0aC5mbG9vcigoZXZlbnQubG9hZGVkICogMTAwKSAvIGV2ZW50LnRvdGFsKSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYWJvcnRTaWduYWwsXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAoKSA9PiAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gbnVsbCksXG4gICAgICAgIGVycm9yOiAoKSA9PiAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gbnVsbCksXG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgcG9zdFJlY29yZGluZ01ldGFkYXRhKHJlY29yZGluZ05hbWU6IHN0cmluZywgbGFiZWxzOiBSZWNvcmRpbmdMYWJlbFtdKTogT2JzZXJ2YWJsZTxBcmNoaXZlZFJlY29yZGluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LnRhcmdldCgpLnBpcGUoXG4gICAgICBmaWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0ICE9PSBOT19UQVJHRVQpLFxuICAgICAgZmlyc3QoKSxcbiAgICAgIGNvbmNhdE1hcCgodGFyZ2V0KSA9PlxuICAgICAgICB0aGlzLmdyYXBocWw8YW55PihcbiAgICAgICAgICBgXG4gICAgICAgIHF1ZXJ5IFBvc3RSZWNvcmRpbmdNZXRhZGF0YSgkY29ubmVjdFVybDogU3RyaW5nLCAkcmVjb3JkaW5nTmFtZTogU3RyaW5nLCAkbGFiZWxzOiBTdHJpbmcpIHtcbiAgICAgICAgICB0YXJnZXROb2RlcyhmaWx0ZXI6IHsgbmFtZTogJGNvbm5lY3RVcmwgfSkge1xuICAgICAgICAgICAgcmVjb3JkaW5ncyB7XG4gICAgICAgICAgICAgIGFyY2hpdmVkKGZpbHRlcjogeyBuYW1lOiAkcmVjb3JkaW5nTmFtZSB9KSB7XG4gICAgICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgICAgICBkb1B1dE1ldGFkYXRhKG1ldGFkYXRhOiB7IGxhYmVsczogJGxhYmVscyB9KSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIHtcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfWAsXG4gICAgICAgICAgeyBjb25uZWN0VXJsOiB0YXJnZXQuY29ubmVjdFVybCwgcmVjb3JkaW5nTmFtZSwgbGFiZWxzOiB0aGlzLnN0cmluZ2lmeVJlY29yZGluZ0xhYmVscyhsYWJlbHMpIH1cbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIG1hcCgodikgPT4gdi5kYXRhLnRhcmdldE5vZGVzWzBdLnJlY29yZGluZ3MuYXJjaGl2ZWQgYXMgQXJjaGl2ZWRSZWNvcmRpbmdbXSlcbiAgICApO1xuICB9XG5cbiAgcG9zdFVwbG9hZGVkUmVjb3JkaW5nTWV0YWRhdGEocmVjb3JkaW5nTmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZGluZ0xhYmVsW10pOiBPYnNlcnZhYmxlPEFyY2hpdmVkUmVjb3JkaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsPGFueT4oXG4gICAgICBgXG4gICAgICBxdWVyeSBQb3N0VXBsb2FkZWRSZWNvcmRpbmdNZXRhZGF0YSgkY29ubmVjdFVybDogU3RyaW5nLCAkcmVjb3JkaW5nTmFtZTogU3RyaW5nLCAkbGFiZWxzOiBTdHJpbmcpe1xuICAgICAgICBhcmNoaXZlZFJlY29yZGluZ3MoZmlsdGVyOiB7c291cmNlVGFyZ2V0OiAkY29ubmVjdFVybCwgbmFtZTogJHJlY29yZGluZ05hbWUgfSkge1xuICAgICAgICAgIGRhdGEge1xuICAgICAgICAgICAgZG9QdXRNZXRhZGF0YShtZXRhZGF0YTogeyBsYWJlbHM6ICRsYWJlbHMgfSkge1xuICAgICAgICAgICAgICBtZXRhZGF0YSB7XG4gICAgICAgICAgICAgICAgbGFiZWxzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1gLFxuICAgICAgeyBjb25uZWN0VXJsOiBVUExPQURTX1NVQkRJUkVDVE9SWSwgcmVjb3JkaW5nTmFtZSwgbGFiZWxzOiB0aGlzLnN0cmluZ2lmeVJlY29yZGluZ0xhYmVscyhsYWJlbHMpIH1cbiAgICApLnBpcGUobWFwKCh2KSA9PiB2LmRhdGEuYXJjaGl2ZWRSZWNvcmRpbmdzLmRhdGEgYXMgQXJjaGl2ZWRSZWNvcmRpbmdbXSkpO1xuICB9XG5cbiAgcG9zdFRhcmdldFJlY29yZGluZ01ldGFkYXRhKHJlY29yZGluZ05hbWU6IHN0cmluZywgbGFiZWxzOiBSZWNvcmRpbmdMYWJlbFtdKTogT2JzZXJ2YWJsZTxBY3RpdmVSZWNvcmRpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnRhcmdldC50YXJnZXQoKS5waXBlKFxuICAgICAgZmlsdGVyKCh0YXJnZXQpID0+IHRhcmdldCAhPT0gTk9fVEFSR0VUKSxcbiAgICAgIGZpcnN0KCksXG4gICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgdGhpcy5ncmFwaHFsPGFueT4oXG4gICAgICAgICAgYFxuICAgICAgICBxdWVyeSBQb3N0QWN0aXZlUmVjb3JkaW5nTWV0YWRhdGEoJGNvbm5lY3RVcmw6IFN0cmluZywgJHJlY29yZGluZ05hbWU6IFN0cmluZywgJGxhYmVsczogU3RyaW5nKSB7XG4gICAgICAgICAgdGFyZ2V0Tm9kZXMoZmlsdGVyOiB7IG5hbWU6ICRjb25uZWN0VXJsIH0pIHtcbiAgICAgICAgICAgIHJlY29yZGluZ3Mge1xuICAgICAgICAgICAgICBhY3RpdmUoZmlsdGVyOiB7IG5hbWU6ICRyZWNvcmRpbmdOYW1lIH0pIHtcbiAgICAgICAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgICAgICAgIGRvUHV0TWV0YWRhdGEobWV0YWRhdGE6IHsgbGFiZWxzOiAkbGFiZWxzIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEge1xuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9YCxcbiAgICAgICAgICB7IGNvbm5lY3RVcmw6IHRhcmdldC5jb25uZWN0VXJsLCByZWNvcmRpbmdOYW1lLCBsYWJlbHM6IHRoaXMuc3RyaW5naWZ5UmVjb3JkaW5nTGFiZWxzKGxhYmVscykgfVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgbWFwKCh2KSA9PiB2LmRhdGEudGFyZ2V0Tm9kZXNbMF0ucmVjb3JkaW5ncy5hY3RpdmUgYXMgQWN0aXZlUmVjb3JkaW5nW10pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RDcmVkZW50aWFscyhtYXRjaEV4cHJlc3Npb246IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgd2luZG93LkZvcm1EYXRhKCk7XG4gICAgYm9keS5hcHBlbmQoJ21hdGNoRXhwcmVzc2lvbicsIG1hdGNoRXhwcmVzc2lvbik7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIGJvZHkuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KCd2Mi4yJywgJ2NyZWRlbnRpYWxzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHJlc3Aub2spLFxuICAgICAgY2F0Y2hFcnJvcigoXykgPT4gb2YoZmFsc2UpKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxNYXRjaGVkQ3JlZGVudGlhbD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KCd2Mi4yJywgYGNyZWRlbnRpYWxzLyR7aWR9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KS5waXBlKFxuICAgICAgY29uY2F0TWFwKChyZXNwKSA9PiByZXNwLmpzb24oKSksXG4gICAgICBtYXAoKHJlc3BvbnNlOiBDcmVkZW50aWFsUmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEucmVzdWx0KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoc3VwcHJlc3NOb3RpZmljYXRpb25zID0gZmFsc2UsIHNraXBTdGF0dXNDaGVjayA9IGZhbHNlKTogT2JzZXJ2YWJsZTxTdG9yZWRDcmVkZW50aWFsW10+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICd2Mi4yJyxcbiAgICAgIGBjcmVkZW50aWFsc2AsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB9LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgc3VwcHJlc3NOb3RpZmljYXRpb25zLFxuICAgICAgc2tpcFN0YXR1c0NoZWNrXG4gICAgKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChyZXNwKSA9PiByZXNwLmpzb24oKSksXG4gICAgICBtYXAoKHJlc3BvbnNlOiBDcmVkZW50aWFsc1Jlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhLnJlc3VsdCksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUNyZWRlbnRpYWxzKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdCgndjIuMicsIGBjcmVkZW50aWFscy8ke2lkfWAsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcCkgPT4gcmVzcC5vayksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGdldFJ1bGVzKHN1cHByZXNzTm90aWZpY2F0aW9ucyA9IGZhbHNlLCBza2lwU3RhdHVzQ2hlY2sgPSBmYWxzZSk6IE9ic2VydmFibGU8UnVsZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3QoXG4gICAgICAndjInLFxuICAgICAgJ3J1bGVzJyxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzdXBwcmVzc05vdGlmaWNhdGlvbnMsXG4gICAgICBza2lwU3RhdHVzQ2hlY2tcbiAgICApLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHJlc3ApID0+IHJlc3AuanNvbigpKSxcbiAgICAgIG1hcCgocmVzcG9uc2U6IFJ1bGVzUmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEucmVzdWx0KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzY292ZXJ5VHJlZSgpOiBPYnNlcnZhYmxlPEVudmlyb25tZW50Tm9kZT4ge1xuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KCd2Mi4xJywgJ2Rpc2NvdmVyeScsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgocmVzcCkgPT4gcmVzcC5qc29uKCkpLFxuICAgICAgbWFwKChib2R5OiBEaXNjb3ZlcnlSZXNwb25zZSkgPT4gYm9keS5kYXRhLnJlc3VsdCksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGlzVGFyZ2V0TWF0Y2hlZChtYXRjaEV4cHJlc3Npb246IHN0cmluZywgdGFyZ2V0OiBUYXJnZXQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBib2R5ID0gbmV3IHdpbmRvdy5Gb3JtRGF0YSgpO1xuICAgIGJvZHkuYXBwZW5kKCdtYXRjaEV4cHJlc3Npb24nLCBtYXRjaEV4cHJlc3Npb24pO1xuICAgIGJvZHkuYXBwZW5kKCd0YXJnZXRzJywgSlNPTi5zdHJpbmdpZnkoW3RhcmdldF0pKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KFxuICAgICAgJ2JldGEnLFxuICAgICAgJ21hdGNoRXhwcmVzc2lvbnMnLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogYm9keSxcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cnVlLFxuICAgICAgdHJ1ZVxuICAgICkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgocmVzcDogUmVzcG9uc2UpID0+IHJlc3AuanNvbigpKSxcbiAgICAgIG1hcCgoYm9keSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVkVGFyZ2V0czogVGFyZ2V0W10gPSBib2R5LmRhdGEucmVzdWx0LnRhcmdldHMgfHwgW107XG4gICAgICAgIHJldHVybiBpbmNsdWRlc1RhcmdldChtYXRjaGVkVGFyZ2V0cywgdGFyZ2V0KTtcbiAgICAgIH0pLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBncm91cEhhc1JlY29yZGluZyhncm91cDogRW52aXJvbm1lbnROb2RlLCBmaWx0ZXI6IEFjdGl2ZVJlY29yZGluZ0ZpbHRlcklucHV0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbDxhbnk+KFxuICAgICAgYFxuICAgIHF1ZXJ5IEdldFJlY29yZGluZ0Zvckdyb3VwICgkZ3JvdXBGaWx0ZXI6IEVudmlyb25tZW50Tm9kZUZpbHRlcklucHV0LCAkcmVjb3JkaW5nRmlsdGVyOiBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCl7XG4gICAgICBlbnZpcm9ubWVudE5vZGVzKGZpbHRlcjogJGdyb3VwRmlsdGVyKSB7XG4gICAgICAgIG5hbWVcbiAgICAgICAgZGVzY2VuZGFudFRhcmdldHMge1xuICAgICAgICAgIG5hbWVcbiAgICAgICAgICByZWNvcmRpbmdzIHtcbiAgICAgICAgICAgICAgYWN0aXZlKGZpbHRlcjogJHJlY29yZGluZ0ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBgLFxuICAgICAge1xuICAgICAgICBncm91cEZpbHRlcjogeyBpZDogZ3JvdXAuaWQgfSxcbiAgICAgICAgcmVjb3JkaW5nRmlsdGVyOiBmaWx0ZXIsXG4gICAgICB9XG4gICAgKS5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIG1hcCgoYm9keSkgPT5cbiAgICAgICAgYm9keS5kYXRhLmVudmlyb25tZW50Tm9kZXNbMF0uZGVzY2VuZGFudFRhcmdldHMucmVkdWNlKFxuICAgICAgICAgIChhY2M6IFBhcnRpYWw8QWN0aXZlUmVjb3JkaW5nPltdLCBjdXJyKSA9PiBhY2MuY29uY2F0KGN1cnIucmVjb3JkaW5ncz8uYWN0aXZlPy5kYXRhIHx8IFtdKSxcbiAgICAgICAgICBbXSBhcyBQYXJ0aWFsPEFjdGl2ZVJlY29yZGluZz5bXVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgY2F0Y2hFcnJvcigoXykgPT4gb2YoW10pKSxcbiAgICAgIG1hcCgocmVjczogUGFydGlhbDxBY3RpdmVSZWNvcmRpbmc+W10pID0+IHJlY3MubGVuZ3RoID4gMCkgLy8gQXQgbGVhc3Qgb25lXG4gICAgKTtcbiAgfVxuXG4gIHRhcmdldEhhc1JlY29yZGluZyh0YXJnZXQ6IFRhcmdldCwgZmlsdGVyOiBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCA9IHt9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbDxSZWNvcmRpbmdDb3VudFJlc3BvbnNlPihcbiAgICAgIGBcbiAgICAgICAgcXVlcnkgQWN0aXZlUmVjb3JkaW5nc0ZvckpGUk1ldHJpY3MoJGNvbm5lY3RVcmw6IFN0cmluZywgJHJlY29yZGluZ0ZpbHRlcjogQWN0aXZlUmVjb3JkaW5nRmlsdGVySW5wdXQpIHtcbiAgICAgICAgICB0YXJnZXROb2RlcyhmaWx0ZXI6IHsgbmFtZTogJGNvbm5lY3RVcmwgfSkge1xuICAgICAgICAgICAgcmVjb3JkaW5ncyB7XG4gICAgICAgICAgICAgIGFjdGl2ZSAoZmlsdGVyOiAkcmVjb3JkaW5nRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRlIHtcbiAgICAgICAgICAgICAgICAgIGNvdW50XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9YCxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdFVybDogdGFyZ2V0LmNvbm5lY3RVcmwsXG4gICAgICAgIHJlY29yZGluZ0ZpbHRlcjogZmlsdGVyLFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gcmVzcC5kYXRhLnRhcmdldE5vZGVzO1xuICAgICAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvdW50ID0gbm9kZXNbMF0ucmVjb3JkaW5ncy5hY3RpdmUuYWdncmVnYXRlLmNvdW50O1xuICAgICAgICByZXR1cm4gY291bnQgPiAwO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChfKSA9PiBvZihmYWxzZSkpXG4gICAgKTtcbiAgfVxuXG4gIGNoZWNrQ3JlZGVudGlhbEZvclRhcmdldChcbiAgICB0YXJnZXQ6IFRhcmdldCxcbiAgICBjcmVkZW50aWFsczogeyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH1cbiAgKTogT2JzZXJ2YWJsZTxcbiAgICB8IHtcbiAgICAgICAgZXJyb3I6IEVycm9yO1xuICAgICAgICBzZXZlcmVMZXZlbDogVmFsaWRhdGVkT3B0aW9ucztcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZFxuICA+IHtcbiAgICBjb25zdCBib2R5ID0gbmV3IHdpbmRvdy5Gb3JtRGF0YSgpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VybmFtZScsIGNyZWRlbnRpYWxzLnVzZXJuYW1lKTtcbiAgICBib2R5LmFwcGVuZCgncGFzc3dvcmQnLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kUmVxdWVzdChcbiAgICAgICdiZXRhJyxcbiAgICAgIGBjcmVkZW50aWFscy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9YCxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHkgfSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlXG4gICAgKS5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIGNvbmNhdE1hcCgocmVzcCkgPT4gcmVzcC5qc29uKCkpLFxuICAgICAgbWFwKChib2R5KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYm9keT8uZGF0YT8ucmVzdWx0O1xuICAgICAgICBzd2l0Y2ggKHJlc3VsdD8udG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ0ZBSUxVUkUnOlxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IG5ldyBFcnJvcignSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZC4nKSwgc2V2ZXJlTGV2ZWw6IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IgfTtcbiAgICAgICAgICBjYXNlICdOQSc6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdUaGUgdGFyZ2V0IGRvZXMgbm90IGhhdmUgYXV0aGVudGljYXRpb24gZW5hYmxlZC4nKSxcbiAgICAgICAgICAgICAgc2V2ZXJlTGV2ZWw6IFZhbGlkYXRlZE9wdGlvbnMud2FybmluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgY2FzZSAnU1VDQ0VTUyc6XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIHRlc3QgcmVzdWx0cy4gVHJ5IGFnYWluIScpLFxuICAgICAgICAgICAgICBzZXZlcmVMZXZlbDogVmFsaWRhdGVkT3B0aW9ucy5lcnJvcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGlmIChpc0h0dHBFcnJvcihlcnIpKSB7XG4gICAgICAgICAgcmV0dXJuIGVyci5odHRwUmVzcG9uc2VcbiAgICAgICAgICAgIC50ZXh0KClcbiAgICAgICAgICAgIC50aGVuKChkZXRhaWwpID0+ICh7IGVycm9yOiBuZXcgRXJyb3IoZGV0YWlsKSwgc2V2ZXJlTGV2ZWw6IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZih7IGVycm9yOiBlcnIsIHNldmVyZUxldmVsOiBWYWxpZGF0ZWRPcHRpb25zLmVycm9yIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0VGFyZ2V0TUJlYW5NZXRyaWNzKHRhcmdldDogVGFyZ2V0LCBxdWVyaWVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8TUJlYW5NZXRyaWNzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbDxNQmVhbk1ldHJpY3NSZXNwb25zZT4oXG4gICAgICBgXG4gICAgICAgIHF1ZXJ5IE1CZWFuTVhNZXRyaWNzRm9yVGFyZ2V0KCRjb25uZWN0VXJsOiBTdHJpbmcpIHtcbiAgICAgICAgICB0YXJnZXROb2RlcyhmaWx0ZXI6IHsgbmFtZTogJGNvbm5lY3RVcmwgfSkge1xuICAgICAgICAgICAgbWJlYW5NZXRyaWNzIHtcbiAgICAgICAgICAgICAgJHtxdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfWAsXG4gICAgICB7IGNvbm5lY3RVcmw6IHRhcmdldC5jb25uZWN0VXJsIH1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSByZXNwLmRhdGEudGFyZ2V0Tm9kZXM7XG4gICAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlc1swXT8ubWJlYW5NZXRyaWNzO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChfKSA9PiBvZih7fSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFRhcmdldEFyY2hpdmVkUmVjb3JkaW5ncyh0YXJnZXQ6IFRhcmdldCk6IE9ic2VydmFibGU8QXJjaGl2ZWRSZWNvcmRpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmdyYXBocWw8YW55PihcbiAgICAgIGBcbiAgICAgICAgICBxdWVyeSBBcmNoaXZlZFJlY29yZGluZ3NGb3JUYXJnZXQoJGNvbm5lY3RVcmw6IFN0cmluZykge1xuICAgICAgICAgICAgYXJjaGl2ZWRSZWNvcmRpbmdzKGZpbHRlcjogeyBzb3VyY2VUYXJnZXQ6ICRjb25uZWN0VXJsIH0pIHtcbiAgICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsXG4gICAgICAgICAgICAgICAgcmVwb3J0VXJsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEge1xuICAgICAgICAgICAgICAgICAgbGFiZWxzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNpemVcbiAgICAgICAgICAgICAgICBhcmNoaXZlZFRpbWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1gLFxuICAgICAgeyBjb25uZWN0VXJsOiB0YXJnZXQuY29ubmVjdFVybCB9LFxuICAgICAgdHJ1ZSxcbiAgICAgIHRydWVcbiAgICApLnBpcGUobWFwKCh2KSA9PiB2LmRhdGEuYXJjaGl2ZWRSZWNvcmRpbmdzLmRhdGEgYXMgQXJjaGl2ZWRSZWNvcmRpbmdbXSkpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QWN0aXZlUmVjb3JkaW5ncyh0YXJnZXQ6IFRhcmdldCk6IE9ic2VydmFibGU8QWN0aXZlUmVjb3JkaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5kb0dldDxBY3RpdmVSZWNvcmRpbmdbXT4oXG4gICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3JlY29yZGluZ3NgLFxuICAgICAgJ3YxJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIGdldFRhcmdldEV2ZW50VGVtcGxhdGVzKHRhcmdldDogVGFyZ2V0KTogT2JzZXJ2YWJsZTxFdmVudFRlbXBsYXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5kb0dldDxFdmVudFRlbXBsYXRlW10+KFxuICAgICAgYHRhcmdldHMvJHtlbmNvZGVVUklDb21wb25lbnQodGFyZ2V0LmNvbm5lY3RVcmwpfS90ZW1wbGF0ZXNgLFxuICAgICAgJ3YxJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIGdldFRhcmdldEV2ZW50VHlwZXModGFyZ2V0OiBUYXJnZXQpOiBPYnNlcnZhYmxlPEV2ZW50VHlwZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9HZXQ8RXZlbnRUeXBlW10+KFxuICAgICAgYHRhcmdldHMvJHtlbmNvZGVVUklDb21wb25lbnQodGFyZ2V0LmNvbm5lY3RVcmwpfS9ldmVudHNgLFxuICAgICAgJ3YxJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIGRvd25sb2FkTGF5b3V0VGVtcGxhdGUodGVtcGxhdGU6IExheW91dFRlbXBsYXRlKTogdm9pZCB7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRTZXJpYWxpemVkTGF5b3V0ID0gdGhpcy5zdHJpbmdpZnlMYXlvdXRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBgY3J5b3N0YXQtZGFzaGJvYXJkLSR7dGVtcGxhdGUubmFtZX0uanNvbmA7XG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSBjcmVhdGVCbG9iVVJMKHN0cmluZ2lmaWVkU2VyaWFsaXplZExheW91dCwgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICB0aGlzLmRvd25sb2FkRmlsZShyZXNvdXJjZVVybCwgZmlsZW5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnlMYXlvdXRUZW1wbGF0ZSh0ZW1wbGF0ZTogTGF5b3V0VGVtcGxhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvd25sb2FkID0ge1xuICAgICAgbmFtZTogdGVtcGxhdGUubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0ZW1wbGF0ZS5kZXNjcmlwdGlvbixcbiAgICAgIGNhcmRzOiB0ZW1wbGF0ZS5jYXJkcyxcbiAgICAgIHZlcnNpb246IHRlbXBsYXRlLnZlcnNpb24sXG4gICAgfSBhcyBTZXJpYWxMYXlvdXRUZW1wbGF0ZTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZG93bmxvYWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGRvd25sb2FkID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhbmNob3Iuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lOyB2aXNpYmlsaXR5OiBoaWRkZW47Jyk7XG4gICAgYW5jaG9yLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgIGlmIChkb3dubG9hZCkge1xuICAgICAgYW5jaG9yLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgfVxuICAgIGFuY2hvci5ocmVmID0gdXJsO1xuICAgIGFuY2hvci5jbGljaygpO1xuICAgIGFuY2hvci5yZW1vdmUoKTtcbiAgfVxuXG4gIHN0cmluZ2lmeVJlY29yZGluZ0xhYmVscyhsYWJlbHM6IFJlY29yZGluZ0xhYmVsW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShsYWJlbHMpLnJlcGxhY2UoL1wiKFteXCJdKylcIjovZywgJyQxOicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kUmVxdWVzdChcbiAgICBhcGlWZXJzaW9uOiBBcGlWZXJzaW9uLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBjb25maWc/OiBSZXF1ZXN0SW5pdCxcbiAgICBwYXJhbXM/OiBVUkxTZWFyY2hQYXJhbXMsXG4gICAgc3VwcHJlc3NOb3RpZmljYXRpb25zID0gZmFsc2UsXG4gICAgc2tpcFN0YXR1c0NoZWNrID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9ICgpID0+XG4gICAgICB0aGlzLmxvZ2luLmdldEhlYWRlcnMoKS5waXBlKFxuICAgICAgICBjb25jYXRNYXAoKGhlYWRlcnMpID0+IHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0UmVxID0ge1xuICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgfSBhcyBSZXF1ZXN0SW5pdDtcblxuICAgICAgICAgIGNvbnN0IGN1c3RvbWl6ZXIgPSAoZGVzdDogYW55LCBzcmM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRlc3QgaW5zdGFuY2VvZiBIZWFkZXJzICYmIHNyYyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgc3JjLmZvckVhY2goKHYsIGspID0+IGRlc3Quc2V0KGssIHYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBfLm1lcmdlV2l0aChjb25maWcsIGRlZmF1bHRSZXEsIGN1c3RvbWl6ZXIpO1xuICAgICAgICAgIHJldHVybiBmcm9tRmV0Y2goYCR7dGhpcy5sb2dpbi5hdXRob3JpdHl9L2FwaS8ke2FwaVZlcnNpb259LyR7cGF0aH0ke3BhcmFtcyA/ICc/JyArIHBhcmFtcyA6ICcnfWAsIGNvbmZpZyk7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgICBpZiAocmVzcC5vaykgcmV0dXJuIHJlc3A7XG4gICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihyZXNwKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGlmIChza2lwU3RhdHVzQ2hlY2spIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3I8UmVzcG9uc2U+KGVyciwgcmVxLCBzdXBwcmVzc05vdGlmaWNhdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICByZXR1cm4gcmVxKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yPFQ+KGVycm9yOiBFcnJvciwgcmV0cnk6ICgpID0+IE9ic2VydmFibGU8VD4sIHN1cHByZXNzTm90aWZpY2F0aW9ucyA9IGZhbHNlKTogT2JzZXJ2YWJsZUlucHV0PFQ+IHtcbiAgICBpZiAoaXNIdHRwRXJyb3IoZXJyb3IpKSB7XG4gICAgICBpZiAoZXJyb3IuaHR0cFJlc3BvbnNlLnN0YXR1cyA9PT0gNDI3KSB7XG4gICAgICAgIGNvbnN0IGpteEF1dGhTY2hlbWUgPSBlcnJvci5odHRwUmVzcG9uc2UuaGVhZGVycy5nZXQoJ1gtSk1YLUF1dGhlbnRpY2F0ZScpO1xuICAgICAgICBpZiAoam14QXV0aFNjaGVtZSA9PT0gQXV0aE1ldGhvZC5CQVNJQykge1xuICAgICAgICAgIHRoaXMudGFyZ2V0LnNldEF1dGhGYWlsdXJlKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0LmF1dGhSZXRyeSgpLnBpcGUobWVyZ2VNYXAoKCkgPT4gcmV0cnkoKSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLmh0dHBSZXNwb25zZS5zdGF0dXMgPT09IDUwMikge1xuICAgICAgICB0aGlzLnRhcmdldC5zZXRTc2xGYWlsdXJlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvci5odHRwUmVzcG9uc2UudGV4dCgpLnRoZW4oKGRldGFpbCkgPT4ge1xuICAgICAgICAgIGlmICghc3VwcHJlc3NOb3RpZmljYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGFuZ2VyKGBSZXF1ZXN0IGZhaWxlZCAoJHtlcnJvci5odHRwUmVzcG9uc2Uuc3RhdHVzfSAke2Vycm9yLm1lc3NhZ2V9KWAsIGRldGFpbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAoIXN1cHByZXNzTm90aWZpY2F0aW9ucykge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRhbmdlcihgUmVxdWVzdCBmYWlsZWRgLCBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBwcml2YXRlIHNlbmRMZWdhY3lSZXF1ZXN0KFxuICAgIC8vIFVzZWQgZm9yIHVwbG9hZGluZy4gUHJlZmVyIHNlbmRSZXF1ZXN0IGZvciBvdGhlciBvcGVyYXRpb25zXG4gICAgYXBpVmVyc2lvbjogQXBpVmVyc2lvbixcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgeyBtZXRob2QgPSAnR0VUJywgYm9keSwgaGVhZGVycyA9IHt9LCBsaXN0ZW5lcnMsIGFib3J0U2lnbmFsIH06IFhNTEh0dHBSZXF1ZXN0Q29uZmlnLFxuICAgIHBhcmFtcz86IFVSTFNlYXJjaFBhcmFtcyxcbiAgICBzdXBwcmVzc05vdGlmaWNhdGlvbnMgPSBmYWxzZSxcbiAgICBza2lwU3RhdHVzQ2hlY2sgPSBmYWxzZVxuICApOiBPYnNlcnZhYmxlPFhNTEh0dHBSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcSA9ICgpID0+XG4gICAgICB0aGlzLmxvZ2luLmdldEhlYWRlcnMoKS5waXBlKFxuICAgICAgICBjb25jYXRNYXAoKGRlZmF1bHRIZWFkZXJzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTxYTUxIdHRwUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIHhoci5vcGVuKG1ldGhvZCwgYCR7dGhpcy5sb2dpbi5hdXRob3JpdHl9L2FwaS8ke2FwaVZlcnNpb259LyR7cGF0aH0ke3BhcmFtcyA/ICc/JyArIHBhcmFtcyA6ICcnfWAsIHRydWUpO1xuXG4gICAgICAgICAgICAgIGxpc3RlbmVycz8ub25VcGxvYWRQcm9ncmVzcyAmJiB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgbGlzdGVuZXJzLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgICAgIGFib3J0U2lnbmFsICYmIGFib3J0U2lnbmFsLnN1YnNjcmliZSgoKSA9PiB4aHIuYWJvcnQoKSk7IC8vIExpc3RlbiB0byBhYm9ydCBzaWduYWwgaWYgYW55XG5cbiAgICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhYm9ydGVkXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Fib3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCBvayA9IGlzSHR0cE9rKHhoci5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcEhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IHhoclxuICAgICAgICAgICAgICAgICAgICAuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoL1tcXHJcXG5dKy8pO1xuICAgICAgICAgICAgICAgICAgYXJyLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnNwbGl0KCc6ICcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnRzLmpvaW4oJzogJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNwSGVhZGVyc1toZWFkZXJdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSW52YWxpZCBoZWFkZXInKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgYm9keTogeGhyLnJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwSGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcFR5cGU6IHhoci5yZXNwb25zZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgIG9rOiBvayxcbiAgICAgICAgICAgICAgICAgIH0gYXMgWE1MSHR0cFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIC8vIFBvcHVsYXRlIGhlYWRlcnNcbiAgICAgICAgICAgICAgZGVmYXVsdEhlYWRlcnMuZm9yRWFjaCgodiwgaykgPT4geGhyLnNldFJlcXVlc3RIZWFkZXIoaywgdikpO1xuICAgICAgICAgICAgICBoZWFkZXJzICYmIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKGspID0+IHhoci5zZXRSZXF1ZXN0SGVhZGVyKGssIGhlYWRlcnNba10pKTtcbiAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgLy8gU2VuZCByZXF1ZXN0XG4gICAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3Aub2spIHJldHVybiByZXNwO1xuICAgICAgICAgIHRocm93IG5ldyBYTUxIdHRwRXJyb3IocmVzcCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoc2tpcFN0YXR1c0NoZWNrKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxlZ2FjeUVycm9yPFhNTEh0dHBSZXNwb25zZT4oZXJyLCByZXEsIHN1cHByZXNzTm90aWZpY2F0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIHJldHVybiByZXEoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTGVnYWN5RXJyb3I8VD4oXG4gICAgZXJyb3I6IEVycm9yLFxuICAgIHJldHJ5OiAoKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICAgIHN1cHByZXNzTm90aWZpY2F0aW9ucyA9IGZhbHNlXG4gICk6IE9ic2VydmFibGVJbnB1dDxUPiB7XG4gICAgaWYgKGlzWE1MSHR0cEVycm9yKGVycm9yKSkge1xuICAgICAgaWYgKGVycm9yLnhtbEh0dHBSZXNwb25zZS5zdGF0dXMgPT09IDQyNykge1xuICAgICAgICBjb25zdCBqbXhBdXRoU2NoZW1lID0gZXJyb3IueG1sSHR0cFJlc3BvbnNlLmhlYWRlcnNbJ1gtSk1YLUF1dGhlbnRpY2F0ZSddO1xuICAgICAgICBpZiAoam14QXV0aFNjaGVtZSA9PT0gQXV0aE1ldGhvZC5CQVNJQykge1xuICAgICAgICAgIHRoaXMudGFyZ2V0LnNldEF1dGhGYWlsdXJlKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0LmF1dGhSZXRyeSgpLnBpcGUobWVyZ2VNYXAoKCkgPT4gcmV0cnkoKSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLnhtbEh0dHBSZXNwb25zZS5zdGF0dXMgPT09IDUwMikge1xuICAgICAgICB0aGlzLnRhcmdldC5zZXRTc2xGYWlsdXJlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZXJyb3IueG1sSHR0cFJlc3BvbnNlLmJvZHkgYXMgc3RyaW5nKS50aGVuKChkZXRhaWwpID0+IHtcbiAgICAgICAgICBpZiAoIXN1cHByZXNzTm90aWZpY2F0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRhbmdlcihgUmVxdWVzdCBmYWlsZWQgKCR7ZXJyb3IueG1sSHR0cFJlc3BvbnNlLnN0YXR1c30gJHtlcnJvci5tZXNzYWdlfSlgLCBkZXRhaWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgaWYgKCFzdXBwcmVzc05vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kYW5nZXIoYFJlcXVlc3QgZmFpbGVkYCwgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVJlc3BvbnNlID0gUGljazxSZXNwb25zZSwgJ29rJyB8ICdzdGF0dXMnPjtcblxuZXhwb3J0IGludGVyZmFjZSBBcGlWMlJlc3BvbnNlIHtcbiAgbWV0YToge1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbiAgfTtcbiAgZGF0YTogb2JqZWN0O1xufVxuXG5pbnRlcmZhY2UgQXNzZXRKd3RSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiB7XG4gICAgICByZXNvdXJjZVVybDogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBSZWNvcmRpbmdSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiBBY3RpdmVSZWNvcmRpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBDcmVkZW50aWFsUmVzcG9uc2UgZXh0ZW5kcyBBcGlWMlJlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHJlc3VsdDogTWF0Y2hlZENyZWRlbnRpYWw7XG4gIH07XG59XG5cbmludGVyZmFjZSBQcm9iZVRlbXBsYXRlUmVzcG9uc2UgZXh0ZW5kcyBBcGlWMlJlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHJlc3VsdDogUHJvYmVUZW1wbGF0ZVtdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRXZlbnRQcm9iZXNSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiBFdmVudFByb2JlW107XG4gIH07XG59XG5cbmludGVyZmFjZSBDcmVkZW50aWFsc1Jlc3BvbnNlIGV4dGVuZHMgQXBpVjJSZXNwb25zZSB7XG4gIGRhdGE6IHtcbiAgICByZXN1bHQ6IFN0b3JlZENyZWRlbnRpYWxbXTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFJ1bGVSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiBSdWxlO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgUnVsZXNSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiBSdWxlW107XG4gIH07XG59XG5cbmludGVyZmFjZSBEaXNjb3ZlcnlSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiBFbnZpcm9ubWVudE5vZGU7XG4gIH07XG59XG5cbmludGVyZmFjZSBSZWNvcmRpbmdDb3VudFJlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHRhcmdldE5vZGVzOiB7XG4gICAgICByZWNvcmRpbmdzOiB7XG4gICAgICAgIGFjdGl2ZToge1xuICAgICAgICAgIGFnZ3JlZ2F0ZToge1xuICAgICAgICAgICAgY291bnQ6IG51bWJlcjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9W107XG4gIH07XG59XG5cbmludGVyZmFjZSBYTUxIdHRwUmVzcG9uc2Uge1xuICBib2R5OiBhbnk7XG4gIGhlYWRlcnM6IG9iamVjdDtcbiAgcmVzcFR5cGU6IFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlO1xuICBzdGF0dXM6IG51bWJlcjtcbiAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICBvazogYm9vbGVhbjtcbiAgdGV4dDogKCkgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgWE1MSHR0cFJlcXVlc3RDb25maWcge1xuICBib2R5PzogWE1MSHR0cFJlcXVlc3RCb2R5SW5pdDtcbiAgaGVhZGVyczogb2JqZWN0O1xuICBtZXRob2Q6IHN0cmluZztcbiAgbGlzdGVuZXJzPzoge1xuICAgIG9uVXBsb2FkUHJvZ3Jlc3M/OiAoZTogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcbiAgfTtcbiAgYWJvcnRTaWduYWw/OiBPYnNlcnZhYmxlPHZvaWQ+O1xufVxuXG5pbnRlcmZhY2UgR3JhZmFuYURhc2hib2FyZFVybEdldFJlc3BvbnNlIHtcbiAgZ3JhZmFuYURhc2hib2FyZFVybDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgR3JhZmFuYURhdGFzb3VyY2VVcmxHZXRSZXNwb25zZSB7XG4gIGdyYWZhbmFEYXRhc291cmNlVXJsOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBIZWFsdGhHZXRSZXNwb25zZSB7XG4gIC8vIFRPRE86IHVwZGF0ZSBIVFRQX0FQSS5tZCB2MS9IZWFsdGhHZXRIYW5kbGVyIHRvIGluY2x1ZGUgY3J5b3N0YXRWZXJzaW9uXG4gIGNyeW9zdGF0VmVyc2lvbjogc3RyaW5nO1xuICBkYXRhc291cmNlQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgZGF0YXNvdXJjZUF2YWlsYWJsZTogYm9vbGVhbjtcbiAgZGFzaGJvYXJkQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgZGFzaGJvYXJkQXZhaWxhYmxlOiBib29sZWFuO1xuICByZXBvcnRzQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgcmVwb3J0c0F2YWlsYWJsZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlVc2FnZSB7XG4gIGluaXQ6IG51bWJlcjtcbiAgdXNlZDogbnVtYmVyO1xuICBjb21taXR0ZWQ6IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTUJlYW5NZXRyaWNzIHtcbiAgdGhyZWFkPzoge1xuICAgIHRocmVhZENvdW50PzogbnVtYmVyO1xuICAgIGRhZW1vblRocmVhZENvdW50PzogbnVtYmVyO1xuICB9O1xuICBvcz86IHtcbiAgICBhcmNoPzogc3RyaW5nO1xuICAgIGF2YWlsYWJsZVByb2Nlc3NvcnM/OiBudW1iZXI7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICBzeXN0ZW1DcHVMb2FkPzogbnVtYmVyO1xuICAgIHN5c3RlbUxvYWRBdmVyYWdlPzogbnVtYmVyO1xuICAgIHByb2Nlc3NDcHVMb2FkPzogbnVtYmVyO1xuICAgIHRvdGFsUGh5c2ljYWxNZW1vcnlTaXplPzogbnVtYmVyO1xuICAgIGZyZWVQaHlzaWNhbE1lbW9yeVNpemU/OiBudW1iZXI7XG4gIH07XG4gIG1lbW9yeT86IHtcbiAgICBoZWFwTWVtb3J5VXNhZ2U/OiBNZW1vcnlVc2FnZTtcbiAgICBub25IZWFwTWVtb3J5VXNhZ2U/OiBNZW1vcnlVc2FnZTtcbiAgICBoZWFwTWVtb3J5VXNhZ2VQZXJjZW50PzogbnVtYmVyO1xuICB9O1xuICBydW50aW1lPzoge1xuICAgIGJvb3RDbGFzc1BhdGg/OiBzdHJpbmc7XG4gICAgY2xhc3NQYXRoPzogc3RyaW5nO1xuICAgIGlucHV0QXJndW1lbnRzPzogc3RyaW5nW107XG4gICAgbGlicmFyeVBhdGg/OiBzdHJpbmc7XG4gICAgbWFuYWdlbWVudFNwZWNWZXJzaW9uPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgc3BlY05hbWU/OiBzdHJpbmc7XG4gICAgc3BlY1ZlbmRvcj86IHN0cmluZztcbiAgICBzdGFydFRpbWU/OiBudW1iZXI7XG4gICAgLy8gc3lzdGVtUHJvcGVydGllcz86IE9iamVjdFxuICAgIHVwdGltZT86IG51bWJlcjtcbiAgICB2bU5hbWU/OiBzdHJpbmc7XG4gICAgdm1WZW5kb3I/OiBzdHJpbmc7XG4gICAgdm1WZXJzaW9uPzogc3RyaW5nO1xuICAgIGJvb3RDbGFzc1BhdGhTdXBwb3J0ZWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1CZWFuTWV0cmljc1Jlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHRhcmdldE5vZGVzOiB7XG4gICAgICBtYmVhbk1ldHJpY3M6IE1CZWFuTWV0cmljcztcbiAgICB9W107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nRGlyZWN0b3J5IHtcbiAgY29ubmVjdFVybDogc3RyaW5nO1xuICBqdm1JZDogc3RyaW5nO1xuICByZWNvcmRpbmdzOiBBcmNoaXZlZFJlY29yZGluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFyY2hpdmVkUmVjb3JkaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkb3dubG9hZFVybDogc3RyaW5nO1xuICByZXBvcnRVcmw6IHN0cmluZztcbiAgbWV0YWRhdGE6IE1ldGFkYXRhO1xuICBzaXplOiBudW1iZXI7XG4gIGFyY2hpdmVkVGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2ZVJlY29yZGluZyBleHRlbmRzIE9taXQ8QXJjaGl2ZWRSZWNvcmRpbmcsICdzaXplJyB8ICdhcmNoaXZlZFRpbWUnPiB7XG4gIGlkOiBudW1iZXI7XG4gIHN0YXRlOiBSZWNvcmRpbmdTdGF0ZTtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgc3RhcnRUaW1lOiBudW1iZXI7XG4gIGNvbnRpbnVvdXM6IGJvb2xlYW47XG4gIHRvRGlzazogYm9vbGVhbjtcbiAgbWF4U2l6ZTogbnVtYmVyO1xuICBtYXhBZ2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gUmVjb3JkaW5nU3RhdGUge1xuICBTVE9QUEVEID0gJ1NUT1BQRUQnLFxuICBTVEFSVElORyA9ICdTVEFSVElORycsXG4gIFJVTk5JTkcgPSAnUlVOTklORycsXG4gIFNUT1BQSU5HID0gJ1NUT1BQSU5HJyxcbn1cblxuZXhwb3J0IHR5cGUgUmVjb3JkaW5nID0gQWN0aXZlUmVjb3JkaW5nIHwgQXJjaGl2ZWRSZWNvcmRpbmc7XG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZVJlY29yZGluZyA9ICh0b0NoZWNrOiBSZWNvcmRpbmcpOiB0b0NoZWNrIGlzIEFjdGl2ZVJlY29yZGluZyA9PiB7XG4gIHJldHVybiAodG9DaGVjayBhcyBBY3RpdmVSZWNvcmRpbmcpLnN0YXRlICE9PSB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcmFwaFFMQXV0aEVycm9yID0gKHJlc3A6IGFueSk6IGJvb2xlYW4gPT4ge1xuICBpZiAocmVzcC5lcnJvcnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChyZXNwLmVycm9yc1swXS5tZXNzYWdlLmluY2x1ZGVzKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQhJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZVR5cGUgPSAnVEFSR0VUJyB8ICdDVVNUT00nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VGVtcGxhdGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIHR5cGU6IFRlbXBsYXRlVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRpbmdPcHRpb25zIHtcbiAgcmVzdGFydD86IGJvb2xlYW47XG4gIHRvRGlzaz86IGJvb2xlYW47XG4gIG1heFNpemU/OiBudW1iZXI7XG4gIG1heEFnZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRpbmdBdHRyaWJ1dGVzIHtcbiAgbmFtZTogc3RyaW5nO1xuICBldmVudHM6IHN0cmluZztcbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIGFyY2hpdmVPblN0b3A/OiBib29sZWFuO1xuICBvcHRpb25zPzogUmVjb3JkaW5nT3B0aW9ucztcbiAgbWV0YWRhdGE/OiBNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YSB7XG4gIGxhYmVsczogb2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlZENyZWRlbnRpYWwge1xuICBpZDogbnVtYmVyO1xuICBtYXRjaEV4cHJlc3Npb246IHN0cmluZztcbiAgbnVtTWF0Y2hpbmdUYXJnZXRzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVUZW1wbGF0ZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgeG1sOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQcm9iZSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY2xheno6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICByZWNvcmRTdGFja1RyYWNlOiBib29sZWFuO1xuICB1c2VSZXRocm93OiBib29sZWFuO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIG1ldGhvZERlc2NyaXB0b3I6IHN0cmluZztcbiAgbG9jYXRpb246IHN0cmluZztcbiAgcmV0dXJuVmFsdWU6IHN0cmluZztcbiAgcGFyYW1ldGVyczogc3RyaW5nO1xuICBmaWVsZHM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXRjaGVkQ3JlZGVudGlhbCB7XG4gIG1hdGNoRXhwcmVzc2lvbjogc3RyaW5nO1xuICB0YXJnZXRzOiBUYXJnZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICBjb250aW51b3VzPzogYm9vbGVhbjtcbiAgdG9EaXNrPzogYm9vbGVhbjtcbiAgZHVyYXRpb25Nc0dyZWF0ZXJUaGFuRXF1YWw/OiBudW1iZXI7XG4gIGR1cmF0aW9uTXNMZXNzVGhhbkVxdWFsPzogbnVtYmVyO1xuICBzdGFydFRpbWVNc0JlZm9yZUVxdWFsPzogbnVtYmVyO1xuICBzdGFydFRpbWVNc0FmdGVyRXF1YWw/OiBudW1iZXI7XG4gIGxhYmVscz86IHN0cmluZ1tdIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdOYW1lID0gJ2F1dG9tYXRlZC1hbmFseXNpcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcge1xuICB0ZW1wbGF0ZTogUGljazxFdmVudFRlbXBsYXRlLCAnbmFtZScgfCAndHlwZSc+O1xuICBtYXhTaXplOiBudW1iZXI7XG4gIG1heEFnZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdEF1dG9tYXRlZEFuYWx5c2lzUmVjb3JkaW5nQ29uZmlnOiBBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZyA9IHtcbiAgdGVtcGxhdGU6IHtcbiAgICBuYW1lOiAnQ29udGludW91cycsXG4gICAgdHlwZTogJ1RBUkdFVCcsXG4gIH0sXG4gIG1heFNpemU6IDEwNDg1NzYsXG4gIG1heEFnZTogMCxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRDb250cm9sbGVyQ29uZmlnIHtcbiAgbWluUmVmcmVzaDogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdENoYXJ0Q29udHJvbGxlckNvbmZpZzogQ2hhcnRDb250cm9sbGVyQ29uZmlnID0ge1xuICBtaW5SZWZyZXNoOiAxMCxcbn07XG5cbi8vIE5ldyB0YXJnZXQgc3BlY2lmaWMgYXJjaGl2ZWQgcmVjb3JkaW5nIGFwaXMgbm93IGVuZm9yY2UgYSBub24tZW1wdHkgdGFyZ2V0IGZpZWxkXG4vLyBUaGUgcGxhY2Vob2xkZXIgdGFyZ2V0SWQgZm9yIHVwbG9hZGVkIChub24tdGFyZ2V0KSByZWNvcmRpbmdzIGlzIFwidXBsb2Fkc1wiXG5leHBvcnQgY29uc3QgVVBMT0FEU19TVUJESVJFQ1RPUlkgPSAndXBsb2Fkcyc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///68038\n")},63470:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hi\": () => (/* binding */ AuthMethod),\n/* harmony export */ \"r6\": () => (/* binding */ LoginService),\n/* harmony export */ \"sM\": () => (/* binding */ SessionState)\n/* harmony export */ });\n/* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(52300);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70003);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(32817);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(40564);\n/* harmony import */ var rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76536);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51313);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(89475);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(42006);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(29127);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(79878);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(53741);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(42965);\n/* harmony import */ var _Api_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(68038);\n/* harmony import */ var _Report_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(47627);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the \"Software\"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a \"Larger Work\" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar SessionState;\n(function (SessionState) {\n SessionState[SessionState[\"NO_USER_SESSION\"] = 0] = \"NO_USER_SESSION\";\n SessionState[SessionState[\"CREATING_USER_SESSION\"] = 1] = \"CREATING_USER_SESSION\";\n SessionState[SessionState[\"USER_SESSION\"] = 2] = \"USER_SESSION\";\n})(SessionState || (SessionState = {}));\nvar AuthMethod;\n(function (AuthMethod) {\n AuthMethod[\"BASIC\"] = \"Basic\";\n AuthMethod[\"BEARER\"] = \"Bearer\";\n AuthMethod[\"NONE\"] = \"None\";\n AuthMethod[\"UNKNOWN\"] = \"\";\n})(AuthMethod || (AuthMethod = {}));\nvar LoginService = /** @class */ (function () {\n function LoginService(target, authCredentials, settings) {\n this.target = target;\n this.authCredentials = authCredentials;\n this.settings = settings;\n this.TOKEN_KEY = 'token';\n this.USER_KEY = 'user';\n this.AUTH_METHOD_KEY = 'auth_method';\n this.token = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .ReplaySubject */ .t(1);\n this.authMethod = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .ReplaySubject */ .t(1);\n this.logout = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .ReplaySubject */ .t(1);\n this.username = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .ReplaySubject */ .t(1);\n this.sessionState = new rxjs__WEBPACK_IMPORTED_MODULE_2__/* .ReplaySubject */ .t(1);\n var apiAuthority = \"\";\n if (!apiAuthority) {\n apiAuthority = '';\n }\n this.authority = apiAuthority;\n this.token.next(this.getCacheItem(this.TOKEN_KEY));\n this.username.next(this.getCacheItem(this.USER_KEY));\n this.authMethod.next(this.getCacheItem(this.AUTH_METHOD_KEY));\n this.sessionState.next(SessionState.NO_USER_SESSION);\n this.queryAuthMethod();\n }\n LoginService.prototype.queryAuthMethod = function () {\n this.checkAuth('', '').subscribe(function () {\n // check auth once at component load to query the server's auth method\n });\n };\n LoginService.prototype.checkAuth = function (token, method, rememberMe) {\n var _this = this;\n if (rememberMe === void 0) { rememberMe = true; }\n token = js_base64__WEBPACK_IMPORTED_MODULE_3__/* .Base64.encodeURL */ .DS.encodeURL(token || this.getTokenFromUrlFragment());\n token = token || this.getCachedEncodedTokenIfAvailable();\n if (this.hasBearerTokenUrlHash()) {\n method = AuthMethod.BEARER;\n }\n if (!method) {\n method = this.getCacheItem(this.AUTH_METHOD_KEY);\n }\n return (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__/* .fromFetch */ .U)(\"\".concat(this.authority, \"/api/v2.1/auth\"), {\n credentials: 'include',\n mode: 'cors',\n method: 'POST',\n body: null,\n headers: this.getAuthHeaders(token, method),\n }).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .concatMap */ .b)(function (response) {\n if (!_this.authMethod.isStopped) {\n _this.completeAuthMethod(response.headers.get('X-WWW-Authenticate') || '');\n }\n if (response.status === 302) {\n var redirectUrl = response.headers.get('X-Location');\n if (redirectUrl) {\n window.location.replace(redirectUrl);\n }\n }\n return response.json();\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__/* .tap */ .b)(function (jsonResp) {\n if (jsonResp.meta.status === 'OK') {\n _this.decideRememberCredentials(token, jsonResp.data.result.username, rememberMe);\n _this.sessionState.next(SessionState.CREATING_USER_SESSION);\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (jsonResp) {\n return jsonResp.meta.status === 'OK';\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_9__/* .catchError */ .K)(function (e) {\n window.console.error(JSON.stringify(e));\n _this.authMethod.complete();\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_10__.of)(false);\n }));\n };\n LoginService.prototype.getAuthHeaders = function (token, method, jmxCredential) {\n var headers = new window.Headers();\n if (!!token && !!method) {\n headers.set('Authorization', \"\".concat(method, \" \").concat(token));\n }\n else if (method === AuthMethod.NONE) {\n headers.set('Authorization', AuthMethod.NONE);\n }\n if (jmxCredential) {\n var basic = \"\".concat(jmxCredential.username, \":\").concat(jmxCredential.password);\n headers.set('X-JMX-Authorization', \"Basic \".concat(js_base64__WEBPACK_IMPORTED_MODULE_3__/* .Base64.encode */ .DS.encode(basic)));\n }\n return headers;\n };\n LoginService.prototype.getHeaders = function () {\n var _this = this;\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_11__/* .combineLatest */ .a)([\n this.getToken(),\n this.getAuthMethod(),\n this.target.target().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (target) { return target.connectUrl; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .concatMap */ .b)(function (connect) { return _this.authCredentials.getCredential(connect); })),\n ]).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (parts) { return _this.getAuthHeaders(parts[0], parts[1], parts[2]); }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .first */ .P)());\n };\n LoginService.prototype.getToken = function () {\n return this.token.asObservable();\n };\n LoginService.prototype.getAuthMethod = function () {\n return this.authMethod.asObservable();\n };\n LoginService.prototype.getUsername = function () {\n return this.username.asObservable();\n };\n LoginService.prototype.getSessionState = function () {\n return this.sessionState\n .asObservable()\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_12__/* .distinctUntilChanged */ .x)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_13__/* .debounceTime */ .b)(this.settings.webSocketDebounceMs()));\n };\n LoginService.prototype.loggedOut = function () {\n return this.logout.asObservable();\n };\n LoginService.prototype.setLoggedOut = function () {\n var _this = this;\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_11__/* .combineLatest */ .a)([this.getToken(), this.getAuthMethod()]).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .first */ .P)(), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .concatMap */ .b)(function (parts) {\n var token = parts[0];\n var method = parts[1];\n return (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__/* .fromFetch */ .U)(\"\".concat(_this.authority, \"/api/v2.1/logout\"), {\n credentials: 'include',\n mode: 'cors',\n method: 'POST',\n body: null,\n headers: _this.getAuthHeaders(token, method),\n });\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .concatMap */ .b)(function (response) {\n if (response.status === 302) {\n var redirectUrl = response.headers.get('X-Location');\n if (!redirectUrl) {\n throw new _Api_service__WEBPACK_IMPORTED_MODULE_0__/* .HttpError */ .oo(response);\n }\n return (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__/* .fromFetch */ .U)(redirectUrl, {\n credentials: 'include',\n mode: 'cors',\n method: 'POST',\n body: null,\n });\n }\n else {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_10__.of)(response);\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_8__/* .map */ .U)(function (response) { return response.ok; }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__/* .tap */ .b)(function (responseOk) {\n if (responseOk) {\n _this.resetSessionState();\n _this.navigateToLoginPage();\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_9__/* .catchError */ .K)(function (e) {\n window.console.error(JSON.stringify(e));\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_10__.of)(false);\n }));\n };\n LoginService.prototype.setSessionState = function (state) {\n this.sessionState.next(state);\n };\n LoginService.prototype.resetSessionState = function () {\n this.token.next(this.getCacheItem(this.TOKEN_KEY));\n this.username.next(this.getCacheItem(this.USER_KEY));\n this.logout.next();\n this.sessionState.next(SessionState.NO_USER_SESSION);\n };\n LoginService.prototype.navigateToLoginPage = function () {\n this.authMethod.next(AuthMethod.UNKNOWN);\n this.removeCacheItem(this.AUTH_METHOD_KEY);\n var url = new URL(window.location.href.split('#')[0]);\n window.location.href = url.pathname.match(/\\/settings/i) ? '/' : url.pathname;\n };\n LoginService.prototype.getTokenFromUrlFragment = function () {\n var matches = location.hash.match(new RegExp('access_token' + '=([^&]*)'));\n return matches ? matches[1] : '';\n };\n LoginService.prototype.hasBearerTokenUrlHash = function () {\n var matches = location.hash.match('token_type=Bearer');\n return !!matches;\n };\n LoginService.prototype.getCachedEncodedTokenIfAvailable = function () {\n return this.getCacheItem(this.TOKEN_KEY);\n };\n LoginService.prototype.decideRememberCredentials = function (token, username, rememberMe) {\n this.token.next(token);\n this.username.next(username);\n if (rememberMe && !!token) {\n this.setCacheItem(this.TOKEN_KEY, token);\n this.setCacheItem(this.USER_KEY, username);\n }\n else {\n this.removeCacheItem(this.TOKEN_KEY);\n this.removeCacheItem(this.USER_KEY);\n }\n };\n LoginService.prototype.completeAuthMethod = function (method) {\n var validMethod = method;\n if (!Object.values(AuthMethod).includes(validMethod)) {\n validMethod = AuthMethod.UNKNOWN;\n }\n this.authMethod.next(validMethod);\n this.setCacheItem(this.AUTH_METHOD_KEY, validMethod);\n this.authMethod.complete();\n };\n LoginService.prototype.getCacheItem = function (key) {\n var item = sessionStorage.getItem(key);\n return item ? item : '';\n };\n LoginService.prototype.setCacheItem = function (key, token) {\n try {\n sessionStorage.setItem(key, token);\n }\n catch (err) {\n if ((0,_Report_service__WEBPACK_IMPORTED_MODULE_1__/* .isQuotaExceededError */ .BC)(err)) {\n console.error('Caching Failed', err.message);\n sessionStorage.clear();\n }\n else {\n console.error('Caching Failed', 'sessionStorage is not available');\n }\n }\n };\n LoginService.prototype.removeCacheItem = function (key) {\n sessionStorage.removeItem(key);\n };\n return LoginService;\n}());\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsaUNBQWlDLENBQUMsQ0FBQzthQUNwRTtTQUNGO0lBQ0gsQ0FBQztJQUVPLHNDQUFlLEdBQXZCLFVBQXdCLEdBQVc7UUFDakMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0gsbUJBQUM7QUFBRCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvU2VydmljZXMvTG9naW4uc2VydmljZS50c3g/ZGU3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gJ2pzLWJhc2U2NCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBPYnNlcnZhYmxlSW5wdXQsIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmcm9tRmV0Y2ggfSBmcm9tICdyeGpzL2ZldGNoJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3QsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBpVjJSZXNwb25zZSwgSHR0cEVycm9yIH0gZnJvbSAnLi9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBDcmVkZW50aWFsLCBBdXRoQ3JlZGVudGlhbHMgfSBmcm9tICcuL0F1dGhDcmVkZW50aWFscy5zZXJ2aWNlJztcbmltcG9ydCB7IGlzUXVvdGFFeGNlZWRlZEVycm9yIH0gZnJvbSAnLi9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0U2VydmljZSB9IGZyb20gJy4vVGFyZ2V0LnNlcnZpY2UnO1xuXG5leHBvcnQgZW51bSBTZXNzaW9uU3RhdGUge1xuICBOT19VU0VSX1NFU1NJT04sXG4gIENSRUFUSU5HX1VTRVJfU0VTU0lPTixcbiAgVVNFUl9TRVNTSU9OLFxufVxuXG5leHBvcnQgZW51bSBBdXRoTWV0aG9kIHtcbiAgQkFTSUMgPSAnQmFzaWMnLFxuICBCRUFSRVIgPSAnQmVhcmVyJyxcbiAgTk9ORSA9ICdOb25lJyxcbiAgVU5LTk9XTiA9ICcnLFxufVxuXG5leHBvcnQgY2xhc3MgTG9naW5TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBUT0tFTl9LRVk6IHN0cmluZyA9ICd0b2tlbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgVVNFUl9LRVk6IHN0cmluZyA9ICd1c2VyJztcbiAgcHJpdmF0ZSByZWFkb25seSBBVVRIX01FVEhPRF9LRVk6IHN0cmluZyA9ICdhdXRoX21ldGhvZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9rZW4gPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhNZXRob2QgPSBuZXcgUmVwbGF5U3ViamVjdDxBdXRoTWV0aG9kPigxKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dvdXQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VybmFtZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oMSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0YXRlID0gbmV3IFJlcGxheVN1YmplY3Q8U2Vzc2lvblN0YXRlPigxKTtcbiAgcmVhZG9ubHkgYXV0aG9yaXR5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXQ6IFRhcmdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoQ3JlZGVudGlhbHM6IEF1dGhDcmVkZW50aWFscyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2VcbiAgKSB7XG4gICAgbGV0IGFwaUF1dGhvcml0eSA9IHByb2Nlc3MuZW52LkNSWU9TVEFUX0FVVEhPUklUWTtcbiAgICBpZiAoIWFwaUF1dGhvcml0eSkge1xuICAgICAgYXBpQXV0aG9yaXR5ID0gJyc7XG4gICAgfVxuICAgIHRoaXMuYXV0aG9yaXR5ID0gYXBpQXV0aG9yaXR5O1xuICAgIHRoaXMudG9rZW4ubmV4dCh0aGlzLmdldENhY2hlSXRlbSh0aGlzLlRPS0VOX0tFWSkpO1xuICAgIHRoaXMudXNlcm5hbWUubmV4dCh0aGlzLmdldENhY2hlSXRlbSh0aGlzLlVTRVJfS0VZKSk7XG4gICAgdGhpcy5hdXRoTWV0aG9kLm5leHQodGhpcy5nZXRDYWNoZUl0ZW0odGhpcy5BVVRIX01FVEhPRF9LRVkpIGFzIEF1dGhNZXRob2QpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXRlLm5leHQoU2Vzc2lvblN0YXRlLk5PX1VTRVJfU0VTU0lPTik7XG4gICAgdGhpcy5xdWVyeUF1dGhNZXRob2QoKTtcbiAgfVxuXG4gIHF1ZXJ5QXV0aE1ldGhvZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrQXV0aCgnJywgJycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAvLyBjaGVjayBhdXRoIG9uY2UgYXQgY29tcG9uZW50IGxvYWQgdG8gcXVlcnkgdGhlIHNlcnZlcidzIGF1dGggbWV0aG9kXG4gICAgfSk7XG4gIH1cblxuICBjaGVja0F1dGgodG9rZW46IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIHJlbWVtYmVyTWUgPSB0cnVlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgdG9rZW4gPSBCYXNlNjQuZW5jb2RlVVJMKHRva2VuIHx8IHRoaXMuZ2V0VG9rZW5Gcm9tVXJsRnJhZ21lbnQoKSk7XG4gICAgdG9rZW4gPSB0b2tlbiB8fCB0aGlzLmdldENhY2hlZEVuY29kZWRUb2tlbklmQXZhaWxhYmxlKCk7XG5cbiAgICBpZiAodGhpcy5oYXNCZWFyZXJUb2tlblVybEhhc2goKSkge1xuICAgICAgbWV0aG9kID0gQXV0aE1ldGhvZC5CRUFSRVI7XG4gICAgfVxuXG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIG1ldGhvZCA9IHRoaXMuZ2V0Q2FjaGVJdGVtKHRoaXMuQVVUSF9NRVRIT0RfS0VZKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbUZldGNoKGAke3RoaXMuYXV0aG9yaXR5fS9hcGkvdjIuMS9hdXRoYCwge1xuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogbnVsbCxcbiAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0QXV0aEhlYWRlcnModG9rZW4sIG1ldGhvZCksXG4gICAgfSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhNZXRob2QuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUF1dGhNZXRob2QocmVzcG9uc2UuaGVhZGVycy5nZXQoJ1gtV1dXLUF1dGhlbnRpY2F0ZScpIHx8ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDMwMikge1xuICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1gtTG9jYXRpb24nKTtcblxuICAgICAgICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RVcmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9KSxcbiAgICAgIGZpcnN0KCksXG4gICAgICB0YXAoKGpzb25SZXNwOiBBdXRoVjJSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoanNvblJlc3AubWV0YS5zdGF0dXMgPT09ICdPSycpIHtcbiAgICAgICAgICB0aGlzLmRlY2lkZVJlbWVtYmVyQ3JlZGVudGlhbHModG9rZW4sIGpzb25SZXNwLmRhdGEucmVzdWx0LnVzZXJuYW1lLCByZW1lbWJlck1lKTtcbiAgICAgICAgICB0aGlzLnNlc3Npb25TdGF0ZS5uZXh0KFNlc3Npb25TdGF0ZS5DUkVBVElOR19VU0VSX1NFU1NJT04pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG1hcCgoanNvblJlc3A6IEF1dGhWMlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiBqc29uUmVzcC5tZXRhLnN0YXR1cyA9PT0gJ09LJztcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZTogRXJyb3IpOiBPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICAgIHRoaXMuYXV0aE1ldGhvZC5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QXV0aEhlYWRlcnModG9rZW46IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGpteENyZWRlbnRpYWw/OiBDcmVkZW50aWFsKTogSGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyB3aW5kb3cuSGVhZGVycygpO1xuICAgIGlmICghIXRva2VuICYmICEhbWV0aG9kKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGAke21ldGhvZH0gJHt0b2tlbn1gKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gQXV0aE1ldGhvZC5OT05FKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIEF1dGhNZXRob2QuTk9ORSk7XG4gICAgfVxuICAgIGlmIChqbXhDcmVkZW50aWFsKSB7XG4gICAgICBjb25zdCBiYXNpYyA9IGAke2pteENyZWRlbnRpYWwudXNlcm5hbWV9OiR7am14Q3JlZGVudGlhbC5wYXNzd29yZH1gO1xuICAgICAgaGVhZGVycy5zZXQoJ1gtSk1YLUF1dGhvcml6YXRpb24nLCBgQmFzaWMgJHtCYXNlNjQuZW5jb2RlKGJhc2ljKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBnZXRIZWFkZXJzKCk6IE9ic2VydmFibGU8SGVhZGVycz4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZ2V0VG9rZW4oKSxcbiAgICAgIHRoaXMuZ2V0QXV0aE1ldGhvZCgpLFxuICAgICAgdGhpcy50YXJnZXQudGFyZ2V0KCkucGlwZShcbiAgICAgICAgbWFwKCh0YXJnZXQpID0+IHRhcmdldC5jb25uZWN0VXJsKSxcbiAgICAgICAgY29uY2F0TWFwKChjb25uZWN0KSA9PiB0aGlzLmF1dGhDcmVkZW50aWFscy5nZXRDcmVkZW50aWFsKGNvbm5lY3QpKVxuICAgICAgKSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChwYXJ0czogW3N0cmluZywgQXV0aE1ldGhvZCwgQ3JlZGVudGlhbCB8IHVuZGVmaW5lZF0pID0+IHRoaXMuZ2V0QXV0aEhlYWRlcnMocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSkpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBnZXRUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRva2VuLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0QXV0aE1ldGhvZCgpOiBPYnNlcnZhYmxlPEF1dGhNZXRob2Q+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoTWV0aG9kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0VXNlcm5hbWUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy51c2VybmFtZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFNlc3Npb25TdGF0ZSgpOiBPYnNlcnZhYmxlPFNlc3Npb25TdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25TdGF0ZVxuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUodGhpcy5zZXR0aW5ncy53ZWJTb2NrZXREZWJvdW5jZU1zKCkpKTtcbiAgfVxuXG4gIGxvZ2dlZE91dCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2dvdXQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXRMb2dnZWRPdXQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZ2V0VG9rZW4oKSwgdGhpcy5nZXRBdXRoTWV0aG9kKCldKS5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIGNvbmNhdE1hcCgocGFydHMpID0+IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBwYXJ0c1swXTtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gcGFydHNbMV07XG5cbiAgICAgICAgcmV0dXJuIGZyb21GZXRjaChgJHt0aGlzLmF1dGhvcml0eX0vYXBpL3YyLjEvbG9nb3V0YCwge1xuICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgbW9kZTogJ2NvcnMnLFxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRBdXRoSGVhZGVycyh0b2tlbiwgbWV0aG9kKSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGNvbmNhdE1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMzAyKSB7XG4gICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnWC1Mb2NhdGlvbicpO1xuICAgICAgICAgIGlmICghcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IocmVzcG9uc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmcm9tRmV0Y2gocmVkaXJlY3RVcmwsIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBtb2RlOiAnY29ycycsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5vayksXG4gICAgICB0YXAoKHJlc3BvbnNlT2spID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlT2spIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U2Vzc2lvblN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9naW5QYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZTogRXJyb3IpOiBPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZXRTZXNzaW9uU3RhdGUoc3RhdGU6IFNlc3Npb25TdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvblN0YXRlLm5leHQoc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFNlc3Npb25TdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuLm5leHQodGhpcy5nZXRDYWNoZUl0ZW0odGhpcy5UT0tFTl9LRVkpKTtcbiAgICB0aGlzLnVzZXJuYW1lLm5leHQodGhpcy5nZXRDYWNoZUl0ZW0odGhpcy5VU0VSX0tFWSkpO1xuICAgIHRoaXMubG9nb3V0Lm5leHQoKTtcbiAgICB0aGlzLnNlc3Npb25TdGF0ZS5uZXh0KFNlc3Npb25TdGF0ZS5OT19VU0VSX1NFU1NJT04pO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvTG9naW5QYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0aE1ldGhvZC5uZXh0KEF1dGhNZXRob2QuVU5LTk9XTik7XG4gICAgdGhpcy5yZW1vdmVDYWNoZUl0ZW0odGhpcy5BVVRIX01FVEhPRF9LRVkpO1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSk7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwucGF0aG5hbWUubWF0Y2goL1xcL3NldHRpbmdzL2kpID8gJy8nIDogdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkZyb21VcmxGcmFnbWVudCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBsb2NhdGlvbi5oYXNoLm1hdGNoKG5ldyBSZWdFeHAoJ2FjY2Vzc190b2tlbicgKyAnPShbXiZdKiknKSk7XG4gICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGhhc0JlYXJlclRva2VuVXJsSGFzaCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRjaGVzID0gbG9jYXRpb24uaGFzaC5tYXRjaCgndG9rZW5fdHlwZT1CZWFyZXInKTtcbiAgICByZXR1cm4gISFtYXRjaGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWNoZWRFbmNvZGVkVG9rZW5JZkF2YWlsYWJsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENhY2hlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGRlY2lkZVJlbWVtYmVyQ3JlZGVudGlhbHModG9rZW46IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcmVtZW1iZXJNZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudG9rZW4ubmV4dCh0b2tlbik7XG4gICAgdGhpcy51c2VybmFtZS5uZXh0KHVzZXJuYW1lKTtcblxuICAgIGlmIChyZW1lbWJlck1lICYmICEhdG9rZW4pIHtcbiAgICAgIHRoaXMuc2V0Q2FjaGVJdGVtKHRoaXMuVE9LRU5fS0VZLCB0b2tlbik7XG4gICAgICB0aGlzLnNldENhY2hlSXRlbSh0aGlzLlVTRVJfS0VZLCB1c2VybmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2FjaGVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICAgIHRoaXMucmVtb3ZlQ2FjaGVJdGVtKHRoaXMuVVNFUl9LRVkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGxldGVBdXRoTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHZhbGlkTWV0aG9kID0gbWV0aG9kIGFzIEF1dGhNZXRob2Q7XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQXV0aE1ldGhvZCkuaW5jbHVkZXModmFsaWRNZXRob2QpKSB7XG4gICAgICB2YWxpZE1ldGhvZCA9IEF1dGhNZXRob2QuVU5LTk9XTjtcbiAgICB9XG5cbiAgICB0aGlzLmF1dGhNZXRob2QubmV4dCh2YWxpZE1ldGhvZCk7XG4gICAgdGhpcy5zZXRDYWNoZUl0ZW0odGhpcy5BVVRIX01FVEhPRF9LRVksIHZhbGlkTWV0aG9kKTtcbiAgICB0aGlzLmF1dGhNZXRob2QuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FjaGVJdGVtKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWNoZUl0ZW0oa2V5OiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIHRva2VuKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChpc1F1b3RhRXhjZWVkZWRFcnJvcihlcnIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhY2hpbmcgRmFpbGVkJywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2FjaGluZyBGYWlsZWQnLCAnc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2FjaGVJdGVtKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9XG59XG5cbmludGVyZmFjZSBBdXRoVjJSZXNwb25zZSBleHRlbmRzIEFwaVYyUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgcmVzdWx0OiB7XG4gICAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63470\n")},23384:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "NB": () => (/* binding */ messageKeys),\n/* harmony export */ "dm": () => (/* binding */ NotificationChannel),\n/* harmony export */ "mN": () => (/* binding */ NotificationCategory)\n/* harmony export */ });\n/* unused harmony export CloseStatus */\n/* harmony import */ var _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88754);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96486);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(82649);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(86515);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(40564);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6222);\n/* harmony import */ var rxjs_fetch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76536);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(94975);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(51313);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(53741);\n/* harmony import */ var rxjs_webSocket__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(51561);\n/* harmony import */ var _Login_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63470);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n\n\n\n\n\n\n\nvar NotificationCategory;\n(function (NotificationCategory) {\n NotificationCategory["WsClientActivity"] = "WsClientActivity";\n NotificationCategory["TargetJvmDiscovery"] = "TargetJvmDiscovery";\n NotificationCategory["ActiveRecordingCreated"] = "ActiveRecordingCreated";\n NotificationCategory["ActiveRecordingStopped"] = "ActiveRecordingStopped";\n NotificationCategory["ActiveRecordingSaved"] = "ActiveRecordingSaved";\n NotificationCategory["ActiveRecordingDeleted"] = "ActiveRecordingDeleted";\n NotificationCategory["SnapshotCreated"] = "SnapshotCreated";\n NotificationCategory["SnapshotDeleted"] = "SnapshotDeleted";\n NotificationCategory["ArchivedRecordingCreated"] = "ArchivedRecordingCreated";\n NotificationCategory["ArchivedRecordingDeleted"] = "ArchivedRecordingDeleted";\n NotificationCategory["TemplateUploaded"] = "TemplateUploaded";\n NotificationCategory["TemplateDeleted"] = "TemplateDeleted";\n NotificationCategory["ProbeTemplateUploaded"] = "ProbeTemplateUploaded";\n NotificationCategory["ProbeTemplateDeleted"] = "ProbeTemplateDeleted";\n NotificationCategory["ProbeTemplateApplied"] = "ProbeTemplateApplied";\n NotificationCategory["ProbesRemoved"] = "ProbesRemoved";\n NotificationCategory["RuleCreated"] = "RuleCreated";\n NotificationCategory["RuleUpdated"] = "RuleUpdated";\n NotificationCategory["RuleDeleted"] = "RuleDeleted";\n NotificationCategory["RecordingMetadataUpdated"] = "RecordingMetadataUpdated";\n NotificationCategory["GrafanaConfiguration"] = "GrafanaConfiguration";\n NotificationCategory["LayoutTemplateCreated"] = "LayoutTemplateCreated";\n NotificationCategory["TargetCredentialsStored"] = "TargetCredentialsStored";\n NotificationCategory["TargetCredentialsDeleted"] = "TargetCredentialsDeleted";\n NotificationCategory["CredentialsStored"] = "CredentialsStored";\n NotificationCategory["CredentialsDeleted"] = "CredentialsDeleted";\n})(NotificationCategory || (NotificationCategory = {}));\nvar CloseStatus;\n(function (CloseStatus) {\n CloseStatus[CloseStatus["LOGGED_OUT"] = 1000] = "LOGGED_OUT";\n CloseStatus[CloseStatus["PROTOCOL_FAILURE"] = 1002] = "PROTOCOL_FAILURE";\n CloseStatus[CloseStatus["INTERNAL_ERROR"] = 1011] = "INTERNAL_ERROR";\n CloseStatus[CloseStatus["UNKNOWN"] = -1] = "UNKNOWN";\n})(CloseStatus || (CloseStatus = {}));\nvar messageKeys = new Map([\n [\n // explicitly configure this category with a null message body mapper.\n // This is a special case because this is generated client-side,\n // not sent by the backend\n NotificationCategory.GrafanaConfiguration,\n {\n title: \'Grafana Configuration\',\n },\n ],\n [\n NotificationCategory.LayoutTemplateCreated,\n {\n title: \'Layout Template Created\',\n },\n ],\n [\n NotificationCategory.TargetJvmDiscovery,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.info */ .U.info,\n title: \'Target JVM Discovery\',\n body: function (v) {\n var evt = v.message.event;\n var target = evt.serviceRef;\n switch (evt.kind) {\n case \'FOUND\':\n return "Target \\"".concat(target.alias, "\\" appeared (").concat(target.connectUrl, ")\\"");\n case \'LOST\':\n return "Target \\"".concat(target.alias, "\\" disappeared (").concat(target.connectUrl, ")\\"");\n case \'MODIFIED\':\n return "Target \\"".concat(target.alias, "\\" was modified (").concat(target.connectUrl, ")\\"");\n default:\n return "Received a notification with category ".concat(NotificationCategory.TargetJvmDiscovery, " and unrecognized kind ").concat(evt.kind);\n }\n },\n },\n ],\n [\n NotificationCategory.WsClientActivity,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.info */ .U.info,\n title: \'WebSocket Client Activity\',\n body: function (evt) {\n var addr = Object.keys(evt.message)[0];\n var status = evt.message[addr];\n return "Client at ".concat(addr, " ").concat(status);\n },\n hidden: true,\n },\n ],\n [\n NotificationCategory.ActiveRecordingCreated,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Recording Created\',\n body: function (evt) { return "".concat(evt.message.recording.name, " created in target: ").concat(evt.message.target); },\n },\n ],\n [\n NotificationCategory.ActiveRecordingStopped,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Recording Stopped\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was stopped"); },\n },\n ],\n [\n NotificationCategory.ActiveRecordingSaved,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Recording Saved\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was archived"); },\n },\n ],\n [\n NotificationCategory.ActiveRecordingDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Recording Deleted\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was deleted"); },\n },\n ],\n [\n NotificationCategory.SnapshotCreated,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Snapshot Created\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was created in target: ").concat(evt.message.target); },\n },\n ],\n [\n NotificationCategory.SnapshotDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Snapshot Deleted\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was deleted"); },\n },\n ],\n [\n NotificationCategory.ArchivedRecordingCreated,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Archived Recording Uploaded\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was uploaded into archives"); },\n },\n ],\n [\n NotificationCategory.ArchivedRecordingDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Archived Recording Deleted\',\n body: function (evt) { return "".concat(evt.message.recording.name, " was deleted"); },\n },\n ],\n [\n NotificationCategory.TemplateUploaded,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Template Created\',\n body: function (evt) { return "".concat(evt.message.template.name, " was created"); },\n },\n ],\n [\n NotificationCategory.ProbeTemplateUploaded,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Probe Template Created\',\n body: function (evt) { return "".concat(evt.message.probeTemplate, " was created"); },\n },\n ],\n [\n NotificationCategory.ProbeTemplateApplied,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Probe Template Applied\',\n body: function (evt) { return "".concat(evt.message.probeTemplate, " was inserted"); },\n },\n ],\n [\n NotificationCategory.TemplateDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Template Deleted\',\n body: function (evt) { return "".concat(evt.message.template.name, " was deleted"); },\n },\n ],\n [\n NotificationCategory.ProbeTemplateDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Probe Template Deleted\',\n body: function (evt) { return "".concat(evt.message.probeTemplate, " was deleted"); },\n },\n ],\n [\n NotificationCategory.ProbesRemoved,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Probes Removed from Target\',\n body: function (evt) { return "Probes successfully removed from ".concat(evt.message.target); },\n },\n ],\n [\n NotificationCategory.RuleCreated,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Automated Rule Created\',\n body: function (evt) { return "".concat(evt.message.name, " was created"); },\n },\n ],\n [\n NotificationCategory.RuleUpdated,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Automated Rule Updated\',\n body: function (evt) { return "".concat(evt.message.name, " was ") + (evt.message.enabled ? \'enabled\' : \'disabled\'); },\n },\n ],\n [\n NotificationCategory.RuleDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Automated Rule Deleted\',\n body: function (evt) { return "".concat(evt.message.name, " was deleted"); },\n },\n ],\n [\n NotificationCategory.RecordingMetadataUpdated,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Recording Metadata Updated\',\n body: function (evt) { return "".concat(evt.message.recordingName, " metadata was updated"); },\n },\n ],\n [\n NotificationCategory.TargetCredentialsStored,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Target Credentials Stored\',\n body: function (evt) { return "Credentials stored for target: ".concat(evt.message.target); },\n },\n ],\n [\n NotificationCategory.TargetCredentialsDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Target Credentials Deleted\',\n body: function (evt) { return "Credentials deleted for target: ".concat(evt.message.target); },\n },\n ],\n [\n NotificationCategory.CredentialsStored,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Credentials Stored\',\n body: function (evt) { return "Credentials stored for: ".concat(evt.message.matchExpression); },\n },\n ],\n [\n NotificationCategory.CredentialsDeleted,\n {\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n title: \'Credentials Deleted\',\n body: function (evt) { return "Credentials deleted for: ".concat(evt.message.matchExpression); },\n },\n ],\n]);\nvar NotificationChannel = /** @class */ (function () {\n function NotificationChannel(notifications, login) {\n var _this = this;\n this.notifications = notifications;\n this.login = login;\n this.ws = null;\n this._messages = new rxjs__WEBPACK_IMPORTED_MODULE_3__/* .Subject */ .x();\n this._ready = new rxjs__WEBPACK_IMPORTED_MODULE_4__/* .BehaviorSubject */ .X({ ready: false });\n messageKeys.forEach(function (value, key) {\n if (!value || !value.body || !value.variant) {\n return;\n }\n _this.messages(key).subscribe(function (msg) {\n if (!value || !value.body || !value.variant) {\n return;\n }\n var message = value.body(msg);\n notifications.notify({\n title: value.title,\n message: message,\n category: key,\n variant: value.variant,\n hidden: value.hidden,\n });\n });\n });\n // fallback handler for unknown categories of message\n this._messages\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .filter */ .h)(function (msg) { return !messageKeys.has(msg.meta.category); }))\n .subscribe(function (msg) {\n var category = NotificationCategory[msg.meta.category];\n notifications.notify({\n title: msg.meta.category,\n message: msg.message,\n category: category,\n variant: _patternfly_react_core__WEBPACK_IMPORTED_MODULE_2__/* .AlertVariant.success */ .U.success,\n });\n });\n var notificationsUrl = (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_6__/* .fromFetch */ .U)("".concat(this.login.authority, "/api/v1/notifications_url")).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__/* .concatMap */ .b)(function (resp) { return __awaiter(_this, void 0, void 0, function () {\n var body, body;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!resp.ok) return [3 /*break*/, 2];\n return [4 /*yield*/, resp.json()];\n case 1:\n body = _a.sent();\n return [2 /*return*/, body.notificationsUrl];\n case 2: return [4 /*yield*/, resp.text()];\n case 3:\n body = _a.sent();\n throw new Error(resp.status + \' \' + body);\n }\n });\n }); }));\n (0,rxjs__WEBPACK_IMPORTED_MODULE_8__/* .combineLatest */ .a)([\n notificationsUrl,\n this.login.getToken(),\n this.login.getAuthMethod(),\n this.login.getSessionState(),\n (0,rxjs__WEBPACK_IMPORTED_MODULE_9__/* .timer */ .H)(0, 5000),\n ])\n .pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_10__/* .distinctUntilChanged */ .x)((lodash__WEBPACK_IMPORTED_MODULE_0___default().isEqual)))\n .subscribe({\n next: function (parts) {\n var url = parts[0];\n var token = parts[1];\n var authMethod = parts[2];\n var sessionState = parseInt(parts[3]);\n var subprotocol = undefined;\n if (sessionState !== _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .SessionState.CREATING_USER_SESSION */ .sM.CREATING_USER_SESSION) {\n return;\n }\n if (authMethod === _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .AuthMethod.BEARER */ .Hi.BEARER) {\n subprotocol = "base64url.bearer.authorization.cryostat.".concat(token);\n }\n else if (authMethod === _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .AuthMethod.BASIC */ .Hi.BASIC) {\n subprotocol = "basic.authorization.cryostat.".concat(token);\n }\n if (_this.ws) {\n _this.ws.complete();\n }\n _this.ws = (0,rxjs_webSocket__WEBPACK_IMPORTED_MODULE_11__/* .webSocket */ .j)({\n url: url,\n protocol: subprotocol,\n openObserver: {\n next: function () {\n _this._ready.next({ ready: true });\n _this.login.setSessionState(_Login_service__WEBPACK_IMPORTED_MODULE_1__/* .SessionState.USER_SESSION */ .sM.USER_SESSION);\n },\n },\n closeObserver: {\n next: function (evt) {\n var code;\n var msg = undefined;\n var fn;\n var sessionState;\n switch (evt.code) {\n case CloseStatus.LOGGED_OUT:\n code = CloseStatus.LOGGED_OUT;\n msg = \'Logout success\';\n fn = _this.notifications.info;\n sessionState = _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .SessionState.NO_USER_SESSION */ .sM.NO_USER_SESSION;\n break;\n case CloseStatus.PROTOCOL_FAILURE:\n code = CloseStatus.PROTOCOL_FAILURE;\n msg = \'Authentication failed\';\n fn = _this.notifications.danger;\n sessionState = _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .SessionState.NO_USER_SESSION */ .sM.NO_USER_SESSION;\n break;\n case CloseStatus.INTERNAL_ERROR:\n code = CloseStatus.INTERNAL_ERROR;\n msg = \'Internal server error\';\n fn = _this.notifications.danger;\n sessionState = _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .SessionState.CREATING_USER_SESSION */ .sM.CREATING_USER_SESSION;\n break;\n default:\n code = CloseStatus.UNKNOWN;\n fn = _this.notifications.info;\n sessionState = _Login_service__WEBPACK_IMPORTED_MODULE_1__/* .SessionState.CREATING_USER_SESSION */ .sM.CREATING_USER_SESSION;\n break;\n }\n _this._ready.next({ ready: false, code: code });\n _this.login.setSessionState(sessionState);\n fn.apply(_this.notifications, [\n \'WebSocket connection lost\',\n msg,\n NotificationCategory.WsClientActivity,\n fn === _this.notifications.info,\n ]);\n },\n },\n });\n _this.ws.subscribe({\n next: function (v) { return _this._messages.next(v); },\n error: function (err) { return _this.logError(\'WebSocket error\', err); },\n });\n // message doesn\'t matter, we just need to send something to the server so that our SubProtocol token can be authenticated\n _this.ws.next({ message: \'connect\' });\n },\n error: function (err) { return _this.logError(\'Notifications URL configuration\', err); },\n });\n this.login.loggedOut().subscribe({\n next: function () {\n var _a;\n (_a = _this.ws) === null || _a === void 0 ? void 0 : _a.complete();\n },\n error: function (err) { return _this.logError(\'Notifications URL configuration\', err); },\n });\n }\n NotificationChannel.prototype.isReady = function () {\n return this._ready.asObservable();\n };\n NotificationChannel.prototype.messages = function (category) {\n return this._messages.asObservable().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_5__/* .filter */ .h)(function (msg) { return msg.meta.category === category; }));\n };\n NotificationChannel.prototype.logError = function (title, err) {\n window.console.error(err === null || err === void 0 ? void 0 : err.message);\n window.console.error(err === null || err === void 0 ? void 0 : err.stack);\n if (err === null || err === void 0 ? void 0 : err.message) {\n this.notifications.danger(title, JSON.stringify(err === null || err === void 0 ? void 0 : err.message));\n }\n };\n return NotificationChannel;\n}());\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMzODQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDc0Q7QUFDL0I7QUFDMkQ7QUFDM0M7QUFDa0M7QUFDWjtBQUNZO0FBSXpFLElBQVksb0JBMkJYO0FBM0JELFdBQVksb0JBQW9CO0lBQzlCLDZEQUFxQztJQUNyQyxpRUFBeUM7SUFDekMseUVBQWlEO0lBQ2pELHlFQUFpRDtJQUNqRCxxRUFBNkM7SUFDN0MseUVBQWlEO0lBQ2pELDJEQUFtQztJQUNuQywyREFBbUM7SUFDbkMsNkVBQXFEO0lBQ3JELDZFQUFxRDtJQUNyRCw2REFBcUM7SUFDckMsMkRBQW1DO0lBQ25DLHVFQUErQztJQUMvQyxxRUFBNkM7SUFDN0MscUVBQTZDO0lBQzdDLHVEQUErQjtJQUMvQixtREFBMkI7SUFDM0IsbURBQTJCO0lBQzNCLG1EQUEyQjtJQUMzQiw2RUFBcUQ7SUFDckQscUVBQTZDO0lBQzdDLHVFQUErQztJQUMvQywyRUFBbUQ7SUFDbkQsNkVBQXFEO0lBQ3JELCtEQUF1QztJQUN2QyxpRUFBeUM7QUFDM0MsQ0FBQyxFQTNCVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBMkIvQjtBQUVELElBQVksV0FLWDtBQUxELFdBQVksV0FBVztJQUNyQiw0REFBaUI7SUFDakIsd0VBQXVCO0lBQ3ZCLG9FQUFxQjtJQUNyQixvREFBWTtBQUNkLENBQUMsRUFMVyxXQUFXLEtBQVgsV0FBVyxRQUt0QjtBQU9NLElBQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2pDO1FBQ0Usc0VBQXNFO1FBQ3RFLGdFQUFnRTtRQUNoRSwwQkFBMEI7UUFDMUIsb0JBQW9CLENBQUMsb0JBQW9CO1FBQ3pDO1lBQ0UsS0FBSyxFQUFFLHVCQUF1QjtTQUMvQjtLQUNGO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxxQkFBcUI7UUFDMUM7WUFDRSxLQUFLLEVBQUUseUJBQXlCO1NBQ2pDO0tBQ0Y7SUFDRDtRQUNFLG9CQUFvQixDQUFDLGtCQUFrQjtRQUN2QztZQUNFLE9BQU8sRUFBRSxtRkFBaUI7WUFDMUIsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixJQUFJLEVBQUUsVUFBQyxDQUFDO2dCQUNOLElBQU0sR0FBRyxHQUF5QixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDbEQsSUFBTSxNQUFNLEdBQVcsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDdEMsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUNoQixLQUFLLE9BQU87d0JBQ1YsT0FBTyxtQkFBVyxNQUFNLENBQUMsS0FBSywwQkFBZSxNQUFNLENBQUMsVUFBVSxRQUFJLENBQUM7b0JBQ3JFLEtBQUssTUFBTTt3QkFDVCxPQUFPLG1CQUFXLE1BQU0sQ0FBQyxLQUFLLDZCQUFrQixNQUFNLENBQUMsVUFBVSxRQUFJLENBQUM7b0JBQ3hFLEtBQUssVUFBVTt3QkFDYixPQUFPLG1CQUFXLE1BQU0sQ0FBQyxLQUFLLDhCQUFtQixNQUFNLENBQUMsVUFBVSxRQUFJLENBQUM7b0JBQ3pFO3dCQUNFLE9BQU8sZ0RBQXlDLG9CQUFvQixDQUFDLGtCQUFrQixvQ0FBMEIsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2lCQUMvSDtZQUNILENBQUM7U0FDMkI7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLGdCQUFnQjtRQUNyQztZQUNFLE9BQU8sRUFBRSxtRkFBaUI7WUFDMUIsS0FBSyxFQUFFLDJCQUEyQjtZQUNsQyxJQUFJLEVBQUUsVUFBQyxHQUFHO2dCQUNSLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxJQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxPQUFPLG9CQUFhLElBQUksY0FBSSxNQUFNLENBQUUsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsTUFBTSxFQUFFLElBQUk7U0FDZ0I7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLHNCQUFzQjtRQUMzQztZQUNFLE9BQU8sRUFBRSx5RkFBb0I7WUFDN0IsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixJQUFJLEVBQUUsVUFBQyxHQUFHLElBQUssaUJBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxpQ0FBdUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUUsRUFBeEUsQ0FBd0U7U0FDM0Q7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLHNCQUFzQjtRQUMzQztZQUNFLE9BQU8sRUFBRSx5RkFBb0I7WUFDN0IsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixJQUFJLEVBQUUsVUFBQyxHQUFHLElBQUssaUJBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxpQkFBYyxFQUEzQyxDQUEyQztTQUM5QjtLQUMvQjtJQUNEO1FBQ0Usb0JBQW9CLENBQUMsb0JBQW9CO1FBQ3pDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpQkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGtCQUFlLEVBQTVDLENBQTRDO1NBQy9CO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxzQkFBc0I7UUFDM0M7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksaUJBQWMsRUFBM0MsQ0FBMkM7U0FDOUI7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLGVBQWU7UUFDcEM7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUkscUNBQTJCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFFLEVBQTVFLENBQTRFO1NBQy9EO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxlQUFlO1FBQ3BDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsa0JBQWtCO1lBQ3pCLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpQkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGlCQUFjLEVBQTNDLENBQTJDO1NBQzlCO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyx3QkFBd0I7UUFDN0M7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSw2QkFBNkI7WUFDcEMsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksZ0NBQTZCLEVBQTFELENBQTBEO1NBQzdDO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyx3QkFBd0I7UUFDN0M7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSw0QkFBNEI7WUFDbkMsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksaUJBQWMsRUFBM0MsQ0FBMkM7U0FDOUI7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLGdCQUFnQjtRQUNyQztZQUNFLE9BQU8sRUFBRSx5RkFBb0I7WUFDN0IsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixJQUFJLEVBQUUsVUFBQyxHQUFHLElBQUssaUJBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxpQkFBYyxFQUExQyxDQUEwQztTQUM3QjtLQUMvQjtJQUNEO1FBQ0Usb0JBQW9CLENBQUMscUJBQXFCO1FBQzFDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpQkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsaUJBQWMsRUFBMUMsQ0FBMEM7U0FDN0I7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLG9CQUFvQjtRQUN6QztZQUNFLE9BQU8sRUFBRSx5RkFBb0I7WUFDN0IsS0FBSyxFQUFFLHdCQUF3QjtZQUMvQixJQUFJLEVBQUUsVUFBQyxHQUFHLElBQUssaUJBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLGtCQUFlLEVBQTNDLENBQTJDO1NBQzlCO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxlQUFlO1FBQ3BDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsa0JBQWtCO1lBQ3pCLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpQkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGlCQUFjLEVBQTFDLENBQTBDO1NBQzdCO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxvQkFBb0I7UUFDekM7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSx3QkFBd0I7WUFDL0IsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxpQkFBYyxFQUExQyxDQUEwQztTQUM3QjtLQUMvQjtJQUNEO1FBQ0Usb0JBQW9CLENBQUMsYUFBYTtRQUNsQztZQUNFLE9BQU8sRUFBRSx5RkFBb0I7WUFDN0IsS0FBSyxFQUFFLDRCQUE0QjtZQUNuQyxJQUFJLEVBQUUsVUFBQyxHQUFHLElBQUssa0RBQW9DLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFFLEVBQXhELENBQXdEO1NBQzNDO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxXQUFXO1FBQ2hDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpQkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWMsRUFBakMsQ0FBaUM7U0FDcEI7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLFdBQVc7UUFDaEM7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSx3QkFBd0I7WUFDL0IsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBM0UsQ0FBMkU7U0FDOUQ7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLFdBQVc7UUFDaEM7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSx3QkFBd0I7WUFDL0IsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGlCQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxpQkFBYyxFQUFqQyxDQUFpQztTQUNwQjtLQUMvQjtJQUNEO1FBQ0Usb0JBQW9CLENBQUMsd0JBQXdCO1FBQzdDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsNEJBQTRCO1lBQ25DLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpQkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsMEJBQXVCLEVBQW5ELENBQW1EO1NBQ3RDO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyx1QkFBdUI7UUFDNUM7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSwyQkFBMkI7WUFDbEMsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLGdEQUFrQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBRSxFQUF0RCxDQUFzRDtTQUN6QztLQUMvQjtJQUNEO1FBQ0Usb0JBQW9CLENBQUMsd0JBQXdCO1FBQzdDO1lBQ0UsT0FBTyxFQUFFLHlGQUFvQjtZQUM3QixLQUFLLEVBQUUsNEJBQTRCO1lBQ25DLElBQUksRUFBRSxVQUFDLEdBQUcsSUFBSyxpREFBbUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUUsRUFBdkQsQ0FBdUQ7U0FDMUM7S0FDL0I7SUFDRDtRQUNFLG9CQUFvQixDQUFDLGlCQUFpQjtRQUN0QztZQUNFLE9BQU8sRUFBRSx5RkFBb0I7WUFDN0IsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixJQUFJLEVBQUUsVUFBQyxHQUFHLElBQUsseUNBQTJCLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFFLEVBQXhELENBQXdEO1NBQzNDO0tBQy9CO0lBQ0Q7UUFDRSxvQkFBb0IsQ0FBQyxrQkFBa0I7UUFDdkM7WUFDRSxPQUFPLEVBQUUseUZBQW9CO1lBQzdCLEtBQUssRUFBRSxxQkFBcUI7WUFDNUIsSUFBSSxFQUFFLFVBQUMsR0FBRyxJQUFLLDBDQUE0QixHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBRSxFQUF6RCxDQUF5RDtTQUM1QztLQUMvQjtDQUNGLENBQUMsQ0FBQztBQVNIO0lBS0UsNkJBQTZCLGFBQTRCLEVBQW1CLEtBQW1CO1FBQS9GLGlCQWdKQztRQWhKNEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBbUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUp2RixPQUFFLEdBQWlELElBQUksQ0FBQztRQUMvQyxjQUFTLEdBQUcsSUFBSSxrREFBTyxFQUF1QixDQUFDO1FBQy9DLFdBQU0sR0FBRyxJQUFJLDBEQUFlLENBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUcxRSxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSyxFQUFFLEdBQUc7WUFDN0IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUMzQyxPQUFPO2FBQ1I7WUFDRCxLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFDLEdBQXdCO2dCQUNwRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQzNDLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsYUFBYSxDQUFDLE1BQU0sQ0FBQztvQkFDbkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixPQUFPO29CQUNQLFFBQVEsRUFBRSxHQUFHO29CQUNiLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2lCQUNyQixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELElBQUksQ0FBQyxTQUFTO2FBQ1gsSUFBSSxDQUFDLCtEQUFNLENBQUMsVUFBQyxHQUFHLElBQUssUUFBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBZ0MsQ0FBQyxFQUEzRCxDQUEyRCxDQUFDLENBQUM7YUFDbEYsU0FBUyxDQUFDLFVBQUMsR0FBRztZQUNiLElBQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBNkMsQ0FBQyxDQUFDO1lBQzlGLGFBQWEsQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ3hCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztnQkFDcEIsUUFBUTtnQkFDUixPQUFPLEVBQUUseUZBQW9CO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBTSxnQkFBZ0IsR0FBRyw4REFBUyxDQUFDLFVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLDhCQUEyQixDQUFDLENBQUMsSUFBSSxDQUN6RixrRUFBUyxDQUFDLFVBQU8sSUFBSTs7Ozs7NkJBQ2YsSUFBSSxDQUFDLEVBQUUsRUFBUCx3QkFBTzt3QkFDaUMscUJBQU0sSUFBSSxDQUFDLElBQUksRUFBRTs7d0JBQXJELElBQUksR0FBZ0MsU0FBaUI7d0JBQzNELHNCQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBQzs0QkFFUixxQkFBTSxJQUFJLENBQUMsSUFBSSxFQUFFOzt3QkFBaEMsSUFBSSxHQUFXLFNBQWlCO3dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDOzs7YUFFN0MsQ0FBQyxDQUNILENBQUM7UUFFRiw0REFBYSxDQUFDO1lBQ1osZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQzVCLG9EQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztTQUNmLENBQUM7YUFDQyxJQUFJLENBQUMsOEVBQW9CLENBQUMsdURBQVMsQ0FBQyxDQUFDO2FBQ3JDLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxVQUFDLEtBQWU7Z0JBQ3BCLElBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixJQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLElBQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxXQUFXLEdBQXVCLFNBQVMsQ0FBQztnQkFFaEQsSUFBSSxZQUFZLEtBQUssOEdBQWtDLEVBQUU7b0JBQ3ZELE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxVQUFVLEtBQUssOEVBQWlCLEVBQUU7b0JBQ3BDLFdBQVcsR0FBRyxrREFBMkMsS0FBSyxDQUFFLENBQUM7aUJBQ2xFO3FCQUFNLElBQUksVUFBVSxLQUFLLDRFQUFnQixFQUFFO29CQUMxQyxXQUFXLEdBQUcsdUNBQWdDLEtBQUssQ0FBRSxDQUFDO2lCQUN2RDtnQkFFRCxJQUFJLEtBQUksQ0FBQyxFQUFFLEVBQUU7b0JBQ1gsS0FBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDcEI7Z0JBRUQsS0FBSSxDQUFDLEVBQUUsR0FBRyxtRUFBUyxDQUFDO29CQUNsQixHQUFHO29CQUNILFFBQVEsRUFBRSxXQUFXO29CQUNyQixZQUFZLEVBQUU7d0JBQ1osSUFBSSxFQUFFOzRCQUNKLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQ2xDLEtBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLDRGQUF5QixDQUFDLENBQUM7d0JBQ3hELENBQUM7cUJBQ0Y7b0JBQ0QsYUFBYSxFQUFFO3dCQUNiLElBQUksRUFBRSxVQUFDLEdBQUc7NEJBQ1IsSUFBSSxJQUFpQixDQUFDOzRCQUN0QixJQUFJLEdBQUcsR0FBdUIsU0FBUyxDQUFDOzRCQUN4QyxJQUFJLEVBQWtDLENBQUM7NEJBQ3ZDLElBQUksWUFBMEIsQ0FBQzs0QkFDL0IsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO2dDQUNoQixLQUFLLFdBQVcsQ0FBQyxVQUFVO29DQUN6QixJQUFJLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQ0FDOUIsR0FBRyxHQUFHLGdCQUFnQixDQUFDO29DQUN2QixFQUFFLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0NBQzdCLFlBQVksR0FBRyxrR0FBNEIsQ0FBQztvQ0FDNUMsTUFBTTtnQ0FDUixLQUFLLFdBQVcsQ0FBQyxnQkFBZ0I7b0NBQy9CLElBQUksR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7b0NBQ3BDLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQztvQ0FDOUIsRUFBRSxHQUFHLEtBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO29DQUMvQixZQUFZLEdBQUcsa0dBQTRCLENBQUM7b0NBQzVDLE1BQU07Z0NBQ1IsS0FBSyxXQUFXLENBQUMsY0FBYztvQ0FDN0IsSUFBSSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7b0NBQ2xDLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQztvQ0FDOUIsRUFBRSxHQUFHLEtBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO29DQUMvQixZQUFZLEdBQUcsOEdBQWtDLENBQUM7b0NBQ2xELE1BQU07Z0NBQ1I7b0NBQ0UsSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7b0NBQzNCLEVBQUUsR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztvQ0FDN0IsWUFBWSxHQUFHLDhHQUFrQyxDQUFDO29DQUNsRCxNQUFNOzZCQUNUOzRCQUNELEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQUUsQ0FBQyxDQUFDOzRCQUN6QyxLQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDekMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsYUFBYSxFQUFFO2dDQUMzQiwyQkFBMkI7Z0NBQzNCLEdBQUc7Z0NBQ0gsb0JBQW9CLENBQUMsZ0JBQWdCO2dDQUNyQyxFQUFFLEtBQUssS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJOzZCQUMvQixDQUFDLENBQUM7d0JBQ0wsQ0FBQztxQkFDRjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsS0FBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ2hCLElBQUksRUFBRSxVQUFDLENBQUMsSUFBSyxZQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBdEIsQ0FBc0I7b0JBQ25DLEtBQUssRUFBRSxVQUFDLEdBQVUsSUFBSyxZQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxFQUFyQyxDQUFxQztpQkFDN0QsQ0FBQyxDQUFDO2dCQUVILDBIQUEwSDtnQkFDMUgsS0FBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUF5QixDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELEtBQUssRUFBRSxVQUFDLEdBQVUsSUFBSyxZQUFJLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsQ0FBQyxFQUFyRCxDQUFxRDtTQUM3RSxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUMvQixJQUFJLEVBQUU7O2dCQUNKLFdBQUksQ0FBQyxFQUFFLDBDQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxLQUFLLEVBQUUsVUFBQyxHQUFVLElBQUssWUFBSSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLENBQUMsRUFBckQsQ0FBcUQ7U0FDN0UsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFDQUFPLEdBQVA7UUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELHNDQUFRLEdBQVIsVUFBUyxRQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLCtEQUFNLENBQUMsVUFBQyxHQUFHLElBQUssVUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUE5QixDQUE4QixDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sc0NBQVEsR0FBaEIsVUFBaUIsS0FBYSxFQUFFLEdBQVU7UUFDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxLQUFLLENBQUMsQ0FBQztRQUVqQyxJQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBQ0gsMEJBQUM7QUFBRCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlLnRzeD80NTdjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTm90aWZpY2F0aW9ucyB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IEFsZXJ0VmFyaWFudCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZyb21GZXRjaCB9IGZyb20gJ3J4anMvZmV0Y2gnO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgd2ViU29ja2V0LCBXZWJTb2NrZXRTdWJqZWN0IH0gZnJvbSAncnhqcy93ZWJTb2NrZXQnO1xuaW1wb3J0IHsgQXV0aE1ldGhvZCwgTG9naW5TZXJ2aWNlLCBTZXNzaW9uU3RhdGUgfSBmcm9tICcuL0xvZ2luLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXREaXNjb3ZlcnlFdmVudCB9IGZyb20gJy4vVGFyZ2V0cy5zZXJ2aWNlJztcblxuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uQ2F0ZWdvcnkge1xuICBXc0NsaWVudEFjdGl2aXR5ID0gJ1dzQ2xpZW50QWN0aXZpdHknLFxuICBUYXJnZXRKdm1EaXNjb3ZlcnkgPSAnVGFyZ2V0SnZtRGlzY292ZXJ5JyxcbiAgQWN0aXZlUmVjb3JkaW5nQ3JlYXRlZCA9ICdBY3RpdmVSZWNvcmRpbmdDcmVhdGVkJyxcbiAgQWN0aXZlUmVjb3JkaW5nU3RvcHBlZCA9ICdBY3RpdmVSZWNvcmRpbmdTdG9wcGVkJyxcbiAgQWN0aXZlUmVjb3JkaW5nU2F2ZWQgPSAnQWN0aXZlUmVjb3JkaW5nU2F2ZWQnLFxuICBBY3RpdmVSZWNvcmRpbmdEZWxldGVkID0gJ0FjdGl2ZVJlY29yZGluZ0RlbGV0ZWQnLFxuICBTbmFwc2hvdENyZWF0ZWQgPSAnU25hcHNob3RDcmVhdGVkJyxcbiAgU25hcHNob3REZWxldGVkID0gJ1NuYXBzaG90RGVsZXRlZCcsXG4gIEFyY2hpdmVkUmVjb3JkaW5nQ3JlYXRlZCA9ICdBcmNoaXZlZFJlY29yZGluZ0NyZWF0ZWQnLFxuICBBcmNoaXZlZFJlY29yZGluZ0RlbGV0ZWQgPSAnQXJjaGl2ZWRSZWNvcmRpbmdEZWxldGVkJyxcbiAgVGVtcGxhdGVVcGxvYWRlZCA9ICdUZW1wbGF0ZVVwbG9hZGVkJyxcbiAgVGVtcGxhdGVEZWxldGVkID0gJ1RlbXBsYXRlRGVsZXRlZCcsXG4gIFByb2JlVGVtcGxhdGVVcGxvYWRlZCA9ICdQcm9iZVRlbXBsYXRlVXBsb2FkZWQnLFxuICBQcm9iZVRlbXBsYXRlRGVsZXRlZCA9ICdQcm9iZVRlbXBsYXRlRGVsZXRlZCcsXG4gIFByb2JlVGVtcGxhdGVBcHBsaWVkID0gJ1Byb2JlVGVtcGxhdGVBcHBsaWVkJyxcbiAgUHJvYmVzUmVtb3ZlZCA9ICdQcm9iZXNSZW1vdmVkJyxcbiAgUnVsZUNyZWF0ZWQgPSAnUnVsZUNyZWF0ZWQnLFxuICBSdWxlVXBkYXRlZCA9ICdSdWxlVXBkYXRlZCcsXG4gIFJ1bGVEZWxldGVkID0gJ1J1bGVEZWxldGVkJyxcbiAgUmVjb3JkaW5nTWV0YWRhdGFVcGRhdGVkID0gJ1JlY29yZGluZ01ldGFkYXRhVXBkYXRlZCcsXG4gIEdyYWZhbmFDb25maWd1cmF0aW9uID0gJ0dyYWZhbmFDb25maWd1cmF0aW9uJywgLy8gZ2VuZXJhdGVkIGNsaWVudC1zaWRlXG4gIExheW91dFRlbXBsYXRlQ3JlYXRlZCA9ICdMYXlvdXRUZW1wbGF0ZUNyZWF0ZWQnLCAvLyBnZW5lcmF0ZWQgY2xpZW50LXNpZGVcbiAgVGFyZ2V0Q3JlZGVudGlhbHNTdG9yZWQgPSAnVGFyZ2V0Q3JlZGVudGlhbHNTdG9yZWQnLFxuICBUYXJnZXRDcmVkZW50aWFsc0RlbGV0ZWQgPSAnVGFyZ2V0Q3JlZGVudGlhbHNEZWxldGVkJyxcbiAgQ3JlZGVudGlhbHNTdG9yZWQgPSAnQ3JlZGVudGlhbHNTdG9yZWQnLFxuICBDcmVkZW50aWFsc0RlbGV0ZWQgPSAnQ3JlZGVudGlhbHNEZWxldGVkJyxcbn1cblxuZXhwb3J0IGVudW0gQ2xvc2VTdGF0dXMge1xuICBMT0dHRURfT1VUID0gMTAwMCxcbiAgUFJPVE9DT0xfRkFJTFVSRSA9IDEwMDIsXG4gIElOVEVSTkFMX0VSUk9SID0gMTAxMSxcbiAgVU5LTk9XTiA9IC0xLFxufVxuXG5pbnRlcmZhY2UgUmVhZHlTdGF0ZSB7XG4gIHJlYWR5OiBib29sZWFuO1xuICBjb2RlPzogQ2xvc2VTdGF0dXM7XG59XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlS2V5cyA9IG5ldyBNYXAoW1xuICBbXG4gICAgLy8gZXhwbGljaXRseSBjb25maWd1cmUgdGhpcyBjYXRlZ29yeSB3aXRoIGEgbnVsbCBtZXNzYWdlIGJvZHkgbWFwcGVyLlxuICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSB0aGlzIGlzIGdlbmVyYXRlZCBjbGllbnQtc2lkZSxcbiAgICAvLyBub3Qgc2VudCBieSB0aGUgYmFja2VuZFxuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LkdyYWZhbmFDb25maWd1cmF0aW9uLFxuICAgIHtcbiAgICAgIHRpdGxlOiAnR3JhZmFuYSBDb25maWd1cmF0aW9uJyxcbiAgICB9LFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuTGF5b3V0VGVtcGxhdGVDcmVhdGVkLFxuICAgIHtcbiAgICAgIHRpdGxlOiAnTGF5b3V0IFRlbXBsYXRlIENyZWF0ZWQnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRKdm1EaXNjb3ZlcnksXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LmluZm8sXG4gICAgICB0aXRsZTogJ1RhcmdldCBKVk0gRGlzY292ZXJ5JyxcbiAgICAgIGJvZHk6ICh2KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2dDogVGFyZ2V0RGlzY292ZXJ5RXZlbnQgPSB2Lm1lc3NhZ2UuZXZlbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldDogVGFyZ2V0ID0gZXZ0LnNlcnZpY2VSZWY7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtpbmQpIHtcbiAgICAgICAgICBjYXNlICdGT1VORCc6XG4gICAgICAgICAgICByZXR1cm4gYFRhcmdldCBcIiR7dGFyZ2V0LmFsaWFzfVwiIGFwcGVhcmVkICgke3RhcmdldC5jb25uZWN0VXJsfSlcImA7XG4gICAgICAgICAgY2FzZSAnTE9TVCc6XG4gICAgICAgICAgICByZXR1cm4gYFRhcmdldCBcIiR7dGFyZ2V0LmFsaWFzfVwiIGRpc2FwcGVhcmVkICgke3RhcmdldC5jb25uZWN0VXJsfSlcImA7XG4gICAgICAgICAgY2FzZSAnTU9ESUZJRUQnOlxuICAgICAgICAgICAgcmV0dXJuIGBUYXJnZXQgXCIke3RhcmdldC5hbGlhc31cIiB3YXMgbW9kaWZpZWQgKCR7dGFyZ2V0LmNvbm5lY3RVcmx9KVwiYDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGBSZWNlaXZlZCBhIG5vdGlmaWNhdGlvbiB3aXRoIGNhdGVnb3J5ICR7Tm90aWZpY2F0aW9uQ2F0ZWdvcnkuVGFyZ2V0SnZtRGlzY292ZXJ5fSBhbmQgdW5yZWNvZ25pemVkIGtpbmQgJHtldnQua2luZH1gO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LldzQ2xpZW50QWN0aXZpdHksXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LmluZm8sXG4gICAgICB0aXRsZTogJ1dlYlNvY2tldCBDbGllbnQgQWN0aXZpdHknLFxuICAgICAgYm9keTogKGV2dCkgPT4ge1xuICAgICAgICBjb25zdCBhZGRyID0gT2JqZWN0LmtleXMoZXZ0Lm1lc3NhZ2UpWzBdO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBldnQubWVzc2FnZVthZGRyXTtcbiAgICAgICAgcmV0dXJuIGBDbGllbnQgYXQgJHthZGRyfSAke3N0YXR1c31gO1xuICAgICAgfSxcbiAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5BY3RpdmVSZWNvcmRpbmdDcmVhdGVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdSZWNvcmRpbmcgQ3JlYXRlZCcsXG4gICAgICBib2R5OiAoZXZ0KSA9PiBgJHtldnQubWVzc2FnZS5yZWNvcmRpbmcubmFtZX0gY3JlYXRlZCBpbiB0YXJnZXQ6ICR7ZXZ0Lm1lc3NhZ2UudGFyZ2V0fWAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQWN0aXZlUmVjb3JkaW5nU3RvcHBlZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnUmVjb3JkaW5nIFN0b3BwZWQnLFxuICAgICAgYm9keTogKGV2dCkgPT4gYCR7ZXZ0Lm1lc3NhZ2UucmVjb3JkaW5nLm5hbWV9IHdhcyBzdG9wcGVkYCxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5BY3RpdmVSZWNvcmRpbmdTYXZlZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnUmVjb3JkaW5nIFNhdmVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLnJlY29yZGluZy5uYW1lfSB3YXMgYXJjaGl2ZWRgLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ0RlbGV0ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ1JlY29yZGluZyBEZWxldGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLnJlY29yZGluZy5uYW1lfSB3YXMgZGVsZXRlZGAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuU25hcHNob3RDcmVhdGVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdTbmFwc2hvdCBDcmVhdGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLnJlY29yZGluZy5uYW1lfSB3YXMgY3JlYXRlZCBpbiB0YXJnZXQ6ICR7ZXZ0Lm1lc3NhZ2UudGFyZ2V0fWAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuU25hcHNob3REZWxldGVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdTbmFwc2hvdCBEZWxldGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLnJlY29yZGluZy5uYW1lfSB3YXMgZGVsZXRlZGAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQXJjaGl2ZWRSZWNvcmRpbmdDcmVhdGVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdBcmNoaXZlZCBSZWNvcmRpbmcgVXBsb2FkZWQnLFxuICAgICAgYm9keTogKGV2dCkgPT4gYCR7ZXZ0Lm1lc3NhZ2UucmVjb3JkaW5nLm5hbWV9IHdhcyB1cGxvYWRlZCBpbnRvIGFyY2hpdmVzYCxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5BcmNoaXZlZFJlY29yZGluZ0RlbGV0ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ0FyY2hpdmVkIFJlY29yZGluZyBEZWxldGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLnJlY29yZGluZy5uYW1lfSB3YXMgZGVsZXRlZGAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuVGVtcGxhdGVVcGxvYWRlZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnVGVtcGxhdGUgQ3JlYXRlZCcsXG4gICAgICBib2R5OiAoZXZ0KSA9PiBgJHtldnQubWVzc2FnZS50ZW1wbGF0ZS5uYW1lfSB3YXMgY3JlYXRlZGAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUHJvYmVUZW1wbGF0ZVVwbG9hZGVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdQcm9iZSBUZW1wbGF0ZSBDcmVhdGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLnByb2JlVGVtcGxhdGV9IHdhcyBjcmVhdGVkYCxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5Qcm9iZVRlbXBsYXRlQXBwbGllZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnUHJvYmUgVGVtcGxhdGUgQXBwbGllZCcsXG4gICAgICBib2R5OiAoZXZ0KSA9PiBgJHtldnQubWVzc2FnZS5wcm9iZVRlbXBsYXRlfSB3YXMgaW5zZXJ0ZWRgLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlRlbXBsYXRlRGVsZXRlZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnVGVtcGxhdGUgRGVsZXRlZCcsXG4gICAgICBib2R5OiAoZXZ0KSA9PiBgJHtldnQubWVzc2FnZS50ZW1wbGF0ZS5uYW1lfSB3YXMgZGVsZXRlZGAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUHJvYmVUZW1wbGF0ZURlbGV0ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ1Byb2JlIFRlbXBsYXRlIERlbGV0ZWQnLFxuICAgICAgYm9keTogKGV2dCkgPT4gYCR7ZXZ0Lm1lc3NhZ2UucHJvYmVUZW1wbGF0ZX0gd2FzIGRlbGV0ZWRgLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlByb2Jlc1JlbW92ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ1Byb2JlcyBSZW1vdmVkIGZyb20gVGFyZ2V0JyxcbiAgICAgIGJvZHk6IChldnQpID0+IGBQcm9iZXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSAke2V2dC5tZXNzYWdlLnRhcmdldH1gLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJ1bGVDcmVhdGVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdBdXRvbWF0ZWQgUnVsZSBDcmVhdGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGAke2V2dC5tZXNzYWdlLm5hbWV9IHdhcyBjcmVhdGVkYCxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5SdWxlVXBkYXRlZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnQXV0b21hdGVkIFJ1bGUgVXBkYXRlZCcsXG4gICAgICBib2R5OiAoZXZ0KSA9PiBgJHtldnQubWVzc2FnZS5uYW1lfSB3YXMgYCArIChldnQubWVzc2FnZS5lbmFibGVkID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJyksXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUnVsZURlbGV0ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ0F1dG9tYXRlZCBSdWxlIERlbGV0ZWQnLFxuICAgICAgYm9keTogKGV2dCkgPT4gYCR7ZXZ0Lm1lc3NhZ2UubmFtZX0gd2FzIGRlbGV0ZWRgLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJlY29yZGluZ01ldGFkYXRhVXBkYXRlZCxcbiAgICB7XG4gICAgICB2YXJpYW50OiBBbGVydFZhcmlhbnQuc3VjY2VzcyxcbiAgICAgIHRpdGxlOiAnUmVjb3JkaW5nIE1ldGFkYXRhIFVwZGF0ZWQnLFxuICAgICAgYm9keTogKGV2dCkgPT4gYCR7ZXZ0Lm1lc3NhZ2UucmVjb3JkaW5nTmFtZX0gbWV0YWRhdGEgd2FzIHVwZGF0ZWRgLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbiAgW1xuICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlRhcmdldENyZWRlbnRpYWxzU3RvcmVkLFxuICAgIHtcbiAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgdGl0bGU6ICdUYXJnZXQgQ3JlZGVudGlhbHMgU3RvcmVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGBDcmVkZW50aWFscyBzdG9yZWQgZm9yIHRhcmdldDogJHtldnQubWVzc2FnZS50YXJnZXR9YCxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRDcmVkZW50aWFsc0RlbGV0ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ1RhcmdldCBDcmVkZW50aWFscyBEZWxldGVkJyxcbiAgICAgIGJvZHk6IChldnQpID0+IGBDcmVkZW50aWFscyBkZWxldGVkIGZvciB0YXJnZXQ6ICR7ZXZ0Lm1lc3NhZ2UudGFyZ2V0fWAsXG4gICAgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlTWFwcGVyLFxuICBdLFxuICBbXG4gICAgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQ3JlZGVudGlhbHNTdG9yZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ0NyZWRlbnRpYWxzIFN0b3JlZCcsXG4gICAgICBib2R5OiAoZXZ0KSA9PiBgQ3JlZGVudGlhbHMgc3RvcmVkIGZvcjogJHtldnQubWVzc2FnZS5tYXRjaEV4cHJlc3Npb259YCxcbiAgICB9IGFzIE5vdGlmaWNhdGlvbk1lc3NhZ2VNYXBwZXIsXG4gIF0sXG4gIFtcbiAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5DcmVkZW50aWFsc0RlbGV0ZWQsXG4gICAge1xuICAgICAgdmFyaWFudDogQWxlcnRWYXJpYW50LnN1Y2Nlc3MsXG4gICAgICB0aXRsZTogJ0NyZWRlbnRpYWxzIERlbGV0ZWQnLFxuICAgICAgYm9keTogKGV2dCkgPT4gYENyZWRlbnRpYWxzIGRlbGV0ZWQgZm9yOiAke2V2dC5tZXNzYWdlLm1hdGNoRXhwcmVzc2lvbn1gLFxuICAgIH0gYXMgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlcixcbiAgXSxcbl0pO1xuXG5pbnRlcmZhY2UgTm90aWZpY2F0aW9uTWVzc2FnZU1hcHBlciB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiAoZXZ0OiBOb3RpZmljYXRpb25NZXNzYWdlKSA9PiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBBbGVydFZhcmlhbnQ7XG4gIGhpZGRlbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25DaGFubmVsIHtcbiAgcHJpdmF0ZSB3czogV2ViU29ja2V0U3ViamVjdDxOb3RpZmljYXRpb25NZXNzYWdlPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlcyA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvbk1lc3NhZ2U+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWFkeVN0YXRlPih7IHJlYWR5OiBmYWxzZSB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnMsIHByaXZhdGUgcmVhZG9ubHkgbG9naW46IExvZ2luU2VydmljZSkge1xuICAgIG1lc3NhZ2VLZXlzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmJvZHkgfHwgIXZhbHVlLnZhcmlhbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXNzYWdlcyhrZXkpLnN1YnNjcmliZSgobXNnOiBOb3RpZmljYXRpb25NZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmJvZHkgfHwgIXZhbHVlLnZhcmlhbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHZhbHVlLmJvZHkobXNnKTtcbiAgICAgICAgbm90aWZpY2F0aW9ucy5ub3RpZnkoe1xuICAgICAgICAgIHRpdGxlOiB2YWx1ZS50aXRsZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIGNhdGVnb3J5OiBrZXksXG4gICAgICAgICAgdmFyaWFudDogdmFsdWUudmFyaWFudCxcbiAgICAgICAgICBoaWRkZW46IHZhbHVlLmhpZGRlbixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIGZhbGxiYWNrIGhhbmRsZXIgZm9yIHVua25vd24gY2F0ZWdvcmllcyBvZiBtZXNzYWdlXG4gICAgdGhpcy5fbWVzc2FnZXNcbiAgICAgIC5waXBlKGZpbHRlcigobXNnKSA9PiAhbWVzc2FnZUtleXMuaGFzKG1zZy5tZXRhLmNhdGVnb3J5IGFzIE5vdGlmaWNhdGlvbkNhdGVnb3J5KSkpXG4gICAgICAuc3Vic2NyaWJlKChtc2cpID0+IHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBOb3RpZmljYXRpb25DYXRlZ29yeVttc2cubWV0YS5jYXRlZ29yeSBhcyBrZXlvZiB0eXBlb2YgTm90aWZpY2F0aW9uQ2F0ZWdvcnldO1xuICAgICAgICBub3RpZmljYXRpb25zLm5vdGlmeSh7XG4gICAgICAgICAgdGl0bGU6IG1zZy5tZXRhLmNhdGVnb3J5LFxuICAgICAgICAgIG1lc3NhZ2U6IG1zZy5tZXNzYWdlLFxuICAgICAgICAgIGNhdGVnb3J5LFxuICAgICAgICAgIHZhcmlhbnQ6IEFsZXJ0VmFyaWFudC5zdWNjZXNzLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc1VybCA9IGZyb21GZXRjaChgJHt0aGlzLmxvZ2luLmF1dGhvcml0eX0vYXBpL3YxL25vdGlmaWNhdGlvbnNfdXJsYCkucGlwZShcbiAgICAgIGNvbmNhdE1hcChhc3luYyAocmVzcCkgPT4ge1xuICAgICAgICBpZiAocmVzcC5vaykge1xuICAgICAgICAgIGNvbnN0IGJvZHk6IE5vdGlmaWNhdGlvbnNVcmxHZXRSZXNwb25zZSA9IGF3YWl0IHJlc3AuanNvbigpO1xuICAgICAgICAgIHJldHVybiBib2R5Lm5vdGlmaWNhdGlvbnNVcmw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYm9keTogc3RyaW5nID0gYXdhaXQgcmVzcC50ZXh0KCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3Auc3RhdHVzICsgJyAnICsgYm9keSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgbm90aWZpY2F0aW9uc1VybCxcbiAgICAgIHRoaXMubG9naW4uZ2V0VG9rZW4oKSxcbiAgICAgIHRoaXMubG9naW4uZ2V0QXV0aE1ldGhvZCgpLFxuICAgICAgdGhpcy5sb2dpbi5nZXRTZXNzaW9uU3RhdGUoKSxcbiAgICAgIHRpbWVyKDAsIDUwMDApLFxuICAgIF0pXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChfLmlzRXF1YWwpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChwYXJ0czogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBwYXJ0c1swXTtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IHBhcnRzWzFdO1xuICAgICAgICAgIGNvbnN0IGF1dGhNZXRob2QgPSBwYXJ0c1syXTtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uU3RhdGUgPSBwYXJzZUludChwYXJ0c1szXSk7XG4gICAgICAgICAgbGV0IHN1YnByb3RvY29sOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoc2Vzc2lvblN0YXRlICE9PSBTZXNzaW9uU3RhdGUuQ1JFQVRJTkdfVVNFUl9TRVNTSU9OKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGF1dGhNZXRob2QgPT09IEF1dGhNZXRob2QuQkVBUkVSKSB7XG4gICAgICAgICAgICBzdWJwcm90b2NvbCA9IGBiYXNlNjR1cmwuYmVhcmVyLmF1dGhvcml6YXRpb24uY3J5b3N0YXQuJHt0b2tlbn1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXV0aE1ldGhvZCA9PT0gQXV0aE1ldGhvZC5CQVNJQykge1xuICAgICAgICAgICAgc3VicHJvdG9jb2wgPSBgYmFzaWMuYXV0aG9yaXphdGlvbi5jcnlvc3RhdC4ke3Rva2VufWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMud3MpIHtcbiAgICAgICAgICAgIHRoaXMud3MuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLndzID0gd2ViU29ja2V0KHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHByb3RvY29sOiBzdWJwcm90b2NvbCxcbiAgICAgICAgICAgIG9wZW5PYnNlcnZlcjoge1xuICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZHkubmV4dCh7IHJlYWR5OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubG9naW4uc2V0U2Vzc2lvblN0YXRlKFNlc3Npb25TdGF0ZS5VU0VSX1NFU1NJT04pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlT2JzZXJ2ZXI6IHtcbiAgICAgICAgICAgICAgbmV4dDogKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjb2RlOiBDbG9zZVN0YXR1cztcbiAgICAgICAgICAgICAgICBsZXQgbXNnOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGZuOiB0eXBlb2YgdGhpcy5ub3RpZmljYXRpb25zLmluZm87XG4gICAgICAgICAgICAgICAgbGV0IHNlc3Npb25TdGF0ZTogU2Vzc2lvblN0YXRlO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgQ2xvc2VTdGF0dXMuTE9HR0VEX09VVDpcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9IENsb3NlU3RhdHVzLkxPR0dFRF9PVVQ7XG4gICAgICAgICAgICAgICAgICAgIG1zZyA9ICdMb2dvdXQgc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgIGZuID0gdGhpcy5ub3RpZmljYXRpb25zLmluZm87XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdGF0ZSA9IFNlc3Npb25TdGF0ZS5OT19VU0VSX1NFU1NJT047XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBDbG9zZVN0YXR1cy5QUk9UT0NPTF9GQUlMVVJFOlxuICAgICAgICAgICAgICAgICAgICBjb2RlID0gQ2xvc2VTdGF0dXMuUFJPVE9DT0xfRkFJTFVSRTtcbiAgICAgICAgICAgICAgICAgICAgbXNnID0gJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgIGZuID0gdGhpcy5ub3RpZmljYXRpb25zLmRhbmdlcjtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0YXRlID0gU2Vzc2lvblN0YXRlLk5PX1VTRVJfU0VTU0lPTjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIENsb3NlU3RhdHVzLklOVEVSTkFMX0VSUk9SOlxuICAgICAgICAgICAgICAgICAgICBjb2RlID0gQ2xvc2VTdGF0dXMuSU5URVJOQUxfRVJST1I7XG4gICAgICAgICAgICAgICAgICAgIG1zZyA9ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBmbiA9IHRoaXMubm90aWZpY2F0aW9ucy5kYW5nZXI7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdGF0ZSA9IFNlc3Npb25TdGF0ZS5DUkVBVElOR19VU0VSX1NFU1NJT047XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9IENsb3NlU3RhdHVzLlVOS05PV047XG4gICAgICAgICAgICAgICAgICAgIGZuID0gdGhpcy5ub3RpZmljYXRpb25zLmluZm87XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdGF0ZSA9IFNlc3Npb25TdGF0ZS5DUkVBVElOR19VU0VSX1NFU1NJT047XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeS5uZXh0KHsgcmVhZHk6IGZhbHNlLCBjb2RlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubG9naW4uc2V0U2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcy5ub3RpZmljYXRpb25zLCBbXG4gICAgICAgICAgICAgICAgICAnV2ViU29ja2V0IGNvbm5lY3Rpb24gbG9zdCcsXG4gICAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5Xc0NsaWVudEFjdGl2aXR5LFxuICAgICAgICAgICAgICAgICAgZm4gPT09IHRoaXMubm90aWZpY2F0aW9ucy5pbmZvLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMud3Muc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2KSA9PiB0aGlzLl9tZXNzYWdlcy5uZXh0KHYpLFxuICAgICAgICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB0aGlzLmxvZ0Vycm9yKCdXZWJTb2NrZXQgZXJyb3InLCBlcnIpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gbWVzc2FnZSBkb2Vzbid0IG1hdHRlciwgd2UganVzdCBuZWVkIHRvIHNlbmQgc29tZXRoaW5nIHRvIHRoZSBzZXJ2ZXIgc28gdGhhdCBvdXIgU3ViUHJvdG9jb2wgdG9rZW4gY2FuIGJlIGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgICB0aGlzLndzLm5leHQoeyBtZXNzYWdlOiAnY29ubmVjdCcgfSBhcyBOb3RpZmljYXRpb25NZXNzYWdlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB0aGlzLmxvZ0Vycm9yKCdOb3RpZmljYXRpb25zIFVSTCBjb25maWd1cmF0aW9uJywgZXJyKSxcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5sb2dpbi5sb2dnZWRPdXQoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLndzPy5jb21wbGV0ZSgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4gdGhpcy5sb2dFcnJvcignTm90aWZpY2F0aW9ucyBVUkwgY29uZmlndXJhdGlvbicsIGVyciksXG4gICAgfSk7XG4gIH1cblxuICBpc1JlYWR5KCk6IE9ic2VydmFibGU8UmVhZHlTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG1lc3NhZ2VzKGNhdGVnb3J5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbk1lc3NhZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZXMuYXNPYnNlcnZhYmxlKCkucGlwZShmaWx0ZXIoKG1zZykgPT4gbXNnLm1ldGEuY2F0ZWdvcnkgPT09IGNhdGVnb3J5KSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ0Vycm9yKHRpdGxlOiBzdHJpbmcsIGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICB3aW5kb3cuY29uc29sZS5lcnJvcihlcnI/Lm1lc3NhZ2UpO1xuICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKGVycj8uc3RhY2spO1xuXG4gICAgaWYgKGVycj8ubWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRhbmdlcih0aXRsZSwgSlNPTi5zdHJpbmdpZnkoZXJyPy5tZXNzYWdlKSk7XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBOb3RpZmljYXRpb25zVXJsR2V0UmVzcG9uc2Uge1xuICBub3RpZmljYXRpb25zVXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uTWVzc2FnZSB7XG4gIG1ldGE6IE1lc3NhZ2VNZXRhO1xuICAvLyBTaG91bGQgYSBtZXNzYWdlIGJlIGFueSB0eXBlPyBUcnkgVD9cbiAgbWVzc2FnZTogYW55OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc2VydmVyVGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VNZXRhIHtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgdHlwZTogTWVzc2FnZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVR5cGUge1xuICB0eXBlOiBzdHJpbmc7XG4gIHN1YnR5cGU6IHN0cmluZztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///23384\n')},47627:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "BC": () => (/* binding */ isQuotaExceededError),\n/* harmony export */ "ad": () => (/* binding */ isGenerationError),\n/* harmony export */ "fB": () => (/* binding */ NO_RECORDINGS_MESSAGE),\n/* harmony export */ "ll": () => (/* binding */ TEMPLATE_UNSUPPORTED_MESSAGE),\n/* harmony export */ "oI": () => (/* binding */ RECORDING_FAILURE_MESSAGE),\n/* harmony export */ "rM": () => (/* binding */ ReportService),\n/* harmony export */ "tG": () => (/* binding */ FAILED_REPORT_MESSAGE),\n/* harmony export */ "xY": () => (/* binding */ AutomatedAnalysisScore)\n/* harmony export */ });\n/* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(52300);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83610);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32817);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(24635);\n/* harmony import */ var rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76536);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(51313);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(42006);\n/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(89475);\n/* harmony import */ var _Api_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(68038);\n\n\n\n\n\nvar ReportService = /** @class */ (function () {\n function ReportService(login, notifications) {\n this.login = login;\n this.notifications = notifications;\n }\n ReportService.prototype.report = function (recording) {\n var _this = this;\n if (!recording.reportUrl) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_1__/* .throwError */ ._)(function () { return new Error(\'No recording report URL\'); });\n }\n var stored = sessionStorage.getItem(this.key(recording));\n if (stored) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_2__.of)(stored);\n }\n return this.login.getHeaders().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__/* .concatMap */ .b)(function (headers) {\n return (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__/* .fromFetch */ .U)(recording.reportUrl, {\n method: \'GET\',\n mode: \'cors\',\n credentials: \'include\',\n headers: headers,\n });\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__/* .concatMap */ .b)(function (resp) {\n if (resp.ok) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_5__/* .from */ .D)(resp.text());\n }\n else {\n var ge = {\n name: "Report Failure (".concat(recording.name, ")"),\n message: resp.statusText,\n messageDetail: (0,rxjs__WEBPACK_IMPORTED_MODULE_5__/* .from */ .D)(resp.text()),\n status: resp.status,\n };\n throw ge;\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .tap */ .b)({\n next: function (report) {\n var isArchived = !(0,_Api_service__WEBPACK_IMPORTED_MODULE_0__/* .isActiveRecording */ .EL)(recording);\n var isActiveStopped = !isArchived && recording.state === _Api_service__WEBPACK_IMPORTED_MODULE_0__/* .RecordingState.STOPPED */ .SR.STOPPED;\n if (isArchived || isActiveStopped) {\n try {\n sessionStorage.setItem(_this.key(recording), report);\n }\n catch (err) {\n if (isQuotaExceededError(err)) {\n _this.notifications.warning(\'Report Caching Failed\', err.message);\n _this.delete(recording);\n }\n else {\n // see https://mmazzarolo.com/blog/2022-06-25-local-storage-status/\n _this.notifications.warning(\'Report Caching Failed\', \'localStorage is not available\');\n _this.delete(recording);\n }\n }\n }\n },\n error: function (err) {\n if (isGenerationError(err) && err.status >= 500) {\n err.messageDetail.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__/* .first */ .P)()).subscribe(function (detail) {\n _this.notifications.warning("Report generation failure: ".concat(detail));\n sessionStorage.setItem(_this.key(recording), "
".concat(detail, "
"));\n });\n }\n else {\n _this.notifications.danger(err.name, err.message);\n }\n },\n }));\n };\n ReportService.prototype.reportJson = function (recording, connectUrl) {\n var _this = this;\n if (!recording.reportUrl) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_1__/* .throwError */ ._)(function () { return new Error(\'No recording report URL\'); });\n }\n return this.login.getHeaders().pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__/* .concatMap */ .b)(function (headers) {\n headers.append(\'Accept\', \'application/json\');\n return (0,rxjs_fetch__WEBPACK_IMPORTED_MODULE_4__/* .fromFetch */ .U)(recording.reportUrl, {\n method: \'GET\',\n mode: \'cors\',\n credentials: \'include\',\n headers: headers,\n });\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__/* .concatMap */ .b)(function (resp) {\n if (resp.ok) {\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_5__/* .from */ .D)(resp\n .text()\n .then(JSON.parse)\n .then(function (obj) { return Object.values(obj); }));\n }\n else {\n var ge = {\n name: "Report Failure (".concat(recording.name, ")"),\n message: resp.statusText,\n messageDetail: (0,rxjs__WEBPACK_IMPORTED_MODULE_5__/* .from */ .D)(resp.text()),\n status: resp.status,\n };\n throw ge;\n }\n }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_6__/* .tap */ .b)({\n next: function (report) {\n if ((0,_Api_service__WEBPACK_IMPORTED_MODULE_0__/* .isActiveRecording */ .EL)(recording)) {\n try {\n sessionStorage.setItem(_this.analysisKey(connectUrl), JSON.stringify(report));\n sessionStorage.setItem(_this.analysisKeyTimestamp(connectUrl), Date.now().toString());\n }\n catch (err) {\n if (isQuotaExceededError(err)) {\n _this.notifications.warning(\'Report Caching Failed\', err.message);\n _this.delete(recording);\n }\n else {\n // see https://mmazzarolo.com/blog/2022-06-25-local-storage-status/\n _this.notifications.warning(\'Report Caching Failed\', \'localStorage is not available\');\n _this.delete(recording);\n }\n }\n }\n },\n error: function (err) {\n if (isGenerationError(err) && err.status >= 500) {\n err.messageDetail.pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_7__/* .first */ .P)()).subscribe(function (detail) {\n _this.notifications.warning("Report generation failure: ".concat(detail));\n _this.deleteCachedAnalysisReport(connectUrl);\n });\n }\n else {\n _this.notifications.danger(err.name, err.message);\n }\n },\n }));\n };\n ReportService.prototype.getCachedAnalysisReport = function (connectUrl) {\n var stored = sessionStorage.getItem(this.analysisKey(connectUrl));\n var storedTimestamp = Number(sessionStorage.getItem(this.analysisKeyTimestamp(connectUrl)));\n if (stored) {\n return {\n report: JSON.parse(stored),\n timestamp: storedTimestamp || 0,\n };\n }\n return {\n report: [],\n timestamp: 0,\n };\n };\n ReportService.prototype.delete = function (recording) {\n sessionStorage.removeItem(this.key(recording));\n };\n ReportService.prototype.deleteCachedAnalysisReport = function (connectUrl) {\n sessionStorage.removeItem(this.analysisKey(connectUrl));\n sessionStorage.removeItem(this.analysisKeyTimestamp(connectUrl));\n };\n ReportService.prototype.key = function (recording) {\n return js_base64__WEBPACK_IMPORTED_MODULE_8__/* .Base64.encode */ .DS.encode("report.".concat(recording.reportUrl));\n };\n ReportService.prototype.analysisKey = function (connectUrl) {\n return js_base64__WEBPACK_IMPORTED_MODULE_8__/* .Base64.encode */ .DS.encode("".concat(connectUrl, ".latestReport"));\n };\n ReportService.prototype.analysisKeyTimestamp = function (connectUrl) {\n return js_base64__WEBPACK_IMPORTED_MODULE_8__/* .Base64.encode */ .DS.encode("".concat(connectUrl, ".latestReportTimestamp"));\n };\n return ReportService;\n}());\n\nvar isGenerationError = function (err) {\n if (err.name === undefined) {\n return false;\n }\n if (err.message === undefined) {\n return false;\n }\n if (err.messageDetail === undefined) {\n return false;\n }\n if (err.status === undefined) {\n return false;\n }\n return true;\n};\nvar isQuotaExceededError = function (err) {\n return (err instanceof DOMException &&\n (err.name === \'QuotaExceededError\' ||\n // Firefox\n err.name === \'NS_ERROR_DOM_QUOTA_REACHED\'));\n};\nvar AutomatedAnalysisScore;\n(function (AutomatedAnalysisScore) {\n AutomatedAnalysisScore[AutomatedAnalysisScore["NA_SCORE"] = -1] = "NA_SCORE";\n AutomatedAnalysisScore[AutomatedAnalysisScore["ORANGE_SCORE_THRESHOLD"] = 25] = "ORANGE_SCORE_THRESHOLD";\n AutomatedAnalysisScore[AutomatedAnalysisScore["RED_SCORE_THRESHOLD"] = 75] = "RED_SCORE_THRESHOLD";\n})(AutomatedAnalysisScore || (AutomatedAnalysisScore = {}));\nvar FAILED_REPORT_MESSAGE = \'Failed to load the report from recording because the requested entity is too large.\';\nvar NO_RECORDINGS_MESSAGE = \'No active or archived recordings available. Create a new recording for analysis.\';\nvar RECORDING_FAILURE_MESSAGE = \'Failed to start recording for analysis.\';\nvar TEMPLATE_UNSUPPORTED_MESSAGE = \'The template type used in this recording is not supported on this JVM.\';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSyxHQUF1QixDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDakQsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUssSUFBTSxvQkFBb0IsR0FBRyxVQUFDLEdBQVk7SUFDL0MsT0FBTyxDQUNMLEdBQUcsWUFBWSxZQUFZO1FBQzNCLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxvQkFBb0I7WUFDaEMsVUFBVTtZQUNWLEdBQUcsQ0FBQyxJQUFJLEtBQUssNEJBQTRCLENBQUMsQ0FDN0MsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVNGLElBQVksc0JBSVg7QUFKRCxXQUFZLHNCQUFzQjtJQUNoQyw0RUFBYTtJQUNiLHdHQUEyQjtJQUMzQixrR0FBd0I7QUFDMUIsQ0FBQyxFQUpXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFJakM7QUFFTSxJQUFNLHFCQUFxQixHQUNoQyxxRkFBcUYsQ0FBQztBQUNqRixJQUFNLHFCQUFxQixHQUFHLGtGQUFrRixDQUFDO0FBQ2pILElBQU0seUJBQXlCLEdBQUcseUNBQXlDLENBQUM7QUFDNUUsSUFBTSw0QkFBNEIsR0FBRyx3RUFBd0UsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL1NlcnZpY2VzL1JlcG9ydC5zZXJ2aWNlLnRzeD82NGZmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTm90aWZpY2F0aW9ucyB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gJ2pzLWJhc2U2NCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZnJvbUZldGNoIH0gZnJvbSAncnhqcy9mZXRjaCc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIGZpcnN0LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc0FjdGl2ZVJlY29yZGluZywgUmVjb3JkaW5nU3RhdGUsIFJlY29yZGluZyB9IGZyb20gJy4vQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9Mb2dpbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIFJlcG9ydFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2luOiBMb2dpblNlcnZpY2UsIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9ucykge31cblxuICByZXBvcnQocmVjb3JkaW5nOiBSZWNvcmRpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghcmVjb3JkaW5nLnJlcG9ydFVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyByZWNvcmRpbmcgcmVwb3J0IFVSTCcpKTtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleShyZWNvcmRpbmcpKTtcbiAgICBpZiAoc3RvcmVkKSB7XG4gICAgICByZXR1cm4gb2Yoc3RvcmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9naW4uZ2V0SGVhZGVycygpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGhlYWRlcnMpID0+XG4gICAgICAgIGZyb21GZXRjaChyZWNvcmRpbmcucmVwb3J0VXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICBtb2RlOiAnY29ycycsXG4gICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIGNvbmNhdE1hcCgocmVzcCkgPT4ge1xuICAgICAgICBpZiAocmVzcC5vaykge1xuICAgICAgICAgIHJldHVybiBmcm9tKHJlc3AudGV4dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBnZTogR2VuZXJhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgbmFtZTogYFJlcG9ydCBGYWlsdXJlICgke3JlY29yZGluZy5uYW1lfSlgLFxuICAgICAgICAgICAgbWVzc2FnZTogcmVzcC5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgbWVzc2FnZURldGFpbDogZnJvbShyZXNwLnRleHQoKSksXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3Auc3RhdHVzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhyb3cgZ2U7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKHtcbiAgICAgICAgbmV4dDogKHJlcG9ydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXJjaGl2ZWQgPSAhaXNBY3RpdmVSZWNvcmRpbmcocmVjb3JkaW5nKTtcbiAgICAgICAgICBjb25zdCBpc0FjdGl2ZVN0b3BwZWQgPSAhaXNBcmNoaXZlZCAmJiByZWNvcmRpbmcuc3RhdGUgPT09IFJlY29yZGluZ1N0YXRlLlNUT1BQRUQ7XG4gICAgICAgICAgaWYgKGlzQXJjaGl2ZWQgfHwgaXNBY3RpdmVTdG9wcGVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5KHJlY29yZGluZyksIHJlcG9ydCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgaWYgKGlzUXVvdGFFeGNlZWRlZEVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMud2FybmluZygnUmVwb3J0IENhY2hpbmcgRmFpbGVkJywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKHJlY29yZGluZyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vbW1henphcm9sby5jb20vYmxvZy8yMDIyLTA2LTI1LWxvY2FsLXN0b3JhZ2Utc3RhdHVzL1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy53YXJuaW5nKCdSZXBvcnQgQ2FjaGluZyBGYWlsZWQnLCAnbG9jYWxTdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShyZWNvcmRpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGlmIChpc0dlbmVyYXRpb25FcnJvcihlcnIpICYmIGVyci5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICAgICAgICBlcnIubWVzc2FnZURldGFpbC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoZGV0YWlsKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy53YXJuaW5nKGBSZXBvcnQgZ2VuZXJhdGlvbiBmYWlsdXJlOiAke2RldGFpbH1gKTtcbiAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleShyZWNvcmRpbmcpLCBgPHA+JHtkZXRhaWx9PC9wPmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kYW5nZXIoZXJyLm5hbWUsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXBvcnRKc29uKHJlY29yZGluZzogUmVjb3JkaW5nLCBjb25uZWN0VXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJ1bGVFdmFsdWF0aW9uW10+IHtcbiAgICBpZiAoIXJlY29yZGluZy5yZXBvcnRVcmwpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gcmVjb3JkaW5nIHJlcG9ydCBVUkwnKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvZ2luLmdldEhlYWRlcnMoKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChoZWFkZXJzKSA9PiB7XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICByZXR1cm4gZnJvbUZldGNoKHJlY29yZGluZy5yZXBvcnRVcmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBjb25jYXRNYXAoKHJlc3ApID0+IHtcbiAgICAgICAgaWYgKHJlc3Aub2spIHtcbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIHJlc3BcbiAgICAgICAgICAgICAgLnRleHQoKVxuICAgICAgICAgICAgICAudGhlbihKU09OLnBhcnNlKVxuICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBPYmplY3QudmFsdWVzKG9iaikgYXMgUnVsZUV2YWx1YXRpb25bXSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGdlOiBHZW5lcmF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBgUmVwb3J0IEZhaWx1cmUgKCR7cmVjb3JkaW5nLm5hbWV9KWAsXG4gICAgICAgICAgICBtZXNzYWdlOiByZXNwLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBtZXNzYWdlRGV0YWlsOiBmcm9tKHJlc3AudGV4dCgpKSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcC5zdGF0dXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aHJvdyBnZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YXAoe1xuICAgICAgICBuZXh0OiAocmVwb3J0KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQWN0aXZlUmVjb3JkaW5nKHJlY29yZGluZykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5hbmFseXNpc0tleShjb25uZWN0VXJsKSwgSlNPTi5zdHJpbmdpZnkocmVwb3J0KSk7XG4gICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5hbmFseXNpc0tleVRpbWVzdGFtcChjb25uZWN0VXJsKSwgRGF0ZS5ub3coKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBpZiAoaXNRdW90YUV4Y2VlZGVkRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy53YXJuaW5nKCdSZXBvcnQgQ2FjaGluZyBGYWlsZWQnLCBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGUocmVjb3JkaW5nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9tbWF6emFyb2xvLmNvbS9ibG9nLzIwMjItMDYtMjUtbG9jYWwtc3RvcmFnZS1zdGF0dXMvXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLndhcm5pbmcoJ1JlcG9ydCBDYWNoaW5nIEZhaWxlZCcsICdsb2NhbFN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKHJlY29yZGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGlzR2VuZXJhdGlvbkVycm9yKGVycikgJiYgZXJyLnN0YXR1cyA+PSA1MDApIHtcbiAgICAgICAgICAgIGVyci5tZXNzYWdlRGV0YWlsLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkZXRhaWwpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLndhcm5pbmcoYFJlcG9ydCBnZW5lcmF0aW9uIGZhaWx1cmU6ICR7ZGV0YWlsfWApO1xuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUNhY2hlZEFuYWx5c2lzUmVwb3J0KGNvbm5lY3RVcmwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kYW5nZXIoZXJyLm5hbWUsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRDYWNoZWRBbmFseXNpc1JlcG9ydChjb25uZWN0VXJsOiBzdHJpbmcpOiBDYWNoZWRSZXBvcnRWYWx1ZSB7XG4gICAgY29uc3Qgc3RvcmVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmFuYWx5c2lzS2V5KGNvbm5lY3RVcmwpKTtcbiAgICBjb25zdCBzdG9yZWRUaW1lc3RhbXAgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmFuYWx5c2lzS2V5VGltZXN0YW1wKGNvbm5lY3RVcmwpKSk7XG4gICAgaWYgKHN0b3JlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVwb3J0OiBKU09OLnBhcnNlKHN0b3JlZCksXG4gICAgICAgIHRpbWVzdGFtcDogc3RvcmVkVGltZXN0YW1wIHx8IDAsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcmVwb3J0OiBbXSxcbiAgICAgIHRpbWVzdGFtcDogMCxcbiAgICB9O1xuICB9XG5cbiAgZGVsZXRlKHJlY29yZGluZzogUmVjb3JkaW5nKTogdm9pZCB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmtleShyZWNvcmRpbmcpKTtcbiAgfVxuXG4gIGRlbGV0ZUNhY2hlZEFuYWx5c2lzUmVwb3J0KGNvbm5lY3RVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5hbmFseXNpc0tleShjb25uZWN0VXJsKSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmFuYWx5c2lzS2V5VGltZXN0YW1wKGNvbm5lY3RVcmwpKTtcbiAgfVxuXG4gIHByaXZhdGUga2V5KHJlY29yZGluZzogUmVjb3JkaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQmFzZTY0LmVuY29kZShgcmVwb3J0LiR7cmVjb3JkaW5nLnJlcG9ydFVybH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5hbHlzaXNLZXkoY29ubmVjdFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQmFzZTY0LmVuY29kZShgJHtjb25uZWN0VXJsfS5sYXRlc3RSZXBvcnRgKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5hbHlzaXNLZXlUaW1lc3RhbXAoY29ubmVjdFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQmFzZTY0LmVuY29kZShgJHtjb25uZWN0VXJsfS5sYXRlc3RSZXBvcnRUaW1lc3RhbXBgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZFJlcG9ydFZhbHVlIHtcbiAgcmVwb3J0OiBSdWxlRXZhbHVhdGlvbltdO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuLy8gW3RvcGljLCB7IHJ1bGVOYW1lLCBzY29yZSwgZGVzY3JpcHRpb24sIC4uLiB9fV1cbmV4cG9ydCB0eXBlIENhdGVnb3JpemVkUnVsZUV2YWx1YXRpb25zID0gW3N0cmluZywgUnVsZUV2YWx1YXRpb25bXV07XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRpb25FcnJvciA9IEVycm9yICYge1xuICBzdGF0dXM6IG51bWJlcjtcbiAgbWVzc2FnZURldGFpbDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR2VuZXJhdGlvbkVycm9yID0gKGVycjogdW5rbm93bik6IGVyciBpcyBHZW5lcmF0aW9uRXJyb3IgPT4ge1xuICBpZiAoKGVyciBhcyBHZW5lcmF0aW9uRXJyb3IpLm5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoKGVyciBhcyBHZW5lcmF0aW9uRXJyb3IpLm1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoKGVyciBhcyBHZW5lcmF0aW9uRXJyb3IpLm1lc3NhZ2VEZXRhaWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoKGVyciBhcyBHZW5lcmF0aW9uRXJyb3IpLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUXVvdGFFeGNlZWRlZEVycm9yID0gKGVycjogdW5rbm93bik6IGVyciBpcyBET01FeGNlcHRpb24gPT4ge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJlxuICAgIChlcnIubmFtZSA9PT0gJ1F1b3RhRXhjZWVkZWRFcnJvcicgfHxcbiAgICAgIC8vIEZpcmVmb3hcbiAgICAgIGVyci5uYW1lID09PSAnTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQnKVxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlRXZhbHVhdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbiAgdG9waWM6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQXV0b21hdGVkQW5hbHlzaXNTY29yZSB7XG4gIE5BX1NDT1JFID0gLTEsXG4gIE9SQU5HRV9TQ09SRV9USFJFU0hPTEQgPSAyNSxcbiAgUkVEX1NDT1JFX1RIUkVTSE9MRCA9IDc1LFxufVxuXG5leHBvcnQgY29uc3QgRkFJTEVEX1JFUE9SVF9NRVNTQUdFID1cbiAgJ0ZhaWxlZCB0byBsb2FkIHRoZSByZXBvcnQgZnJvbSByZWNvcmRpbmcgYmVjYXVzZSB0aGUgcmVxdWVzdGVkIGVudGl0eSBpcyB0b28gbGFyZ2UuJztcbmV4cG9ydCBjb25zdCBOT19SRUNPUkRJTkdTX01FU1NBR0UgPSAnTm8gYWN0aXZlIG9yIGFyY2hpdmVkIHJlY29yZGluZ3MgYXZhaWxhYmxlLiBDcmVhdGUgYSBuZXcgcmVjb3JkaW5nIGZvciBhbmFseXNpcy4nO1xuZXhwb3J0IGNvbnN0IFJFQ09SRElOR19GQUlMVVJFX01FU1NBR0UgPSAnRmFpbGVkIHRvIHN0YXJ0IHJlY29yZGluZyBmb3IgYW5hbHlzaXMuJztcbmV4cG9ydCBjb25zdCBURU1QTEFURV9VTlNVUFBPUlRFRF9NRVNTQUdFID0gJ1RoZSB0ZW1wbGF0ZSB0eXBlIHVzZWQgaW4gdGhpcyByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIEpWTS4nO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47627\n')},35881:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "o": () => (/* binding */ ServiceContext),\n "J": () => (/* binding */ defaultServices)\n});\n\n// EXTERNAL MODULE: ./src/app/Notifications/Notifications.tsx\nvar Notifications = __webpack_require__(1570);\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(67294);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Api.service.tsx\nvar Api_service = __webpack_require__(68038);\n// EXTERNAL MODULE: ./src/app/Settings/CredentialsStorage.tsx\nvar CredentialsStorage = __webpack_require__(74841);\n// EXTERNAL MODULE: ./src/app/utils/LocalStorage.ts\nvar LocalStorage = __webpack_require__(74687);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/of.js\nvar of = __webpack_require__(32817);\n;// CONCATENATED MODULE: ./src/app/Shared/Services/AuthCredentials.service.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar AuthCredentials = /** @class */ (function () {\n function AuthCredentials(api) {\n this.api = api;\n // TODO replace with Redux?\n this.store = new Map();\n }\n AuthCredentials.prototype.setCredential = function (targetId, username, password) {\n var location = (0,LocalStorage/* getFromLocalStorage */.fp)(\'CREDENTIAL_LOCATION\', CredentialsStorage/* Locations.BACKEND.key */.t.BACKEND.key);\n switch (location) {\n case CredentialsStorage/* Locations.BACKEND.key */.t.BACKEND.key:\n return this.api().postCredentials("target.connectUrl == \\"".concat(targetId, "\\""), username, password);\n case CredentialsStorage/* Locations.BROWSER_SESSION.key */.t.BROWSER_SESSION.key:\n this.store.set(targetId, { username: username, password: password });\n return (0,of.of)(true);\n default:\n console.warn(\'Unknown storage location\', location);\n return (0,of.of)(false);\n }\n };\n AuthCredentials.prototype.getCredential = function (targetId) {\n var location = (0,LocalStorage/* getFromLocalStorage */.fp)(\'CREDENTIAL_LOCATION\', CredentialsStorage/* Locations.BACKEND.key */.t.BACKEND.key);\n switch (location) {\n case CredentialsStorage/* Locations.BACKEND.key */.t.BACKEND.key:\n // if this is stored on the backend then Cryostat should be using those and not prompting us to request from the user\n return (0,of.of)(undefined);\n case CredentialsStorage/* Locations.BROWSER_SESSION.key */.t.BROWSER_SESSION.key:\n return (0,of.of)(this.store.get(targetId));\n default:\n console.warn(\'Unknown storage location\', location);\n return (0,of.of)(undefined);\n }\n };\n return AuthCredentials;\n}());\n\n\n// EXTERNAL MODULE: ./src/app/Shared/Services/Login.service.tsx\nvar Login_service = __webpack_require__(63470);\n// EXTERNAL MODULE: ./src/app/Shared/Services/NotificationChannel.service.tsx\nvar NotificationChannel_service = __webpack_require__(23384);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Report.service.tsx\nvar Report_service = __webpack_require__(47627);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Settings.service.tsx\nvar Settings_service = __webpack_require__(73721);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Target.service.tsx\nvar Target_service = __webpack_require__(38386);\n// EXTERNAL MODULE: ./node_modules/lodash/lodash.js\nvar lodash = __webpack_require__(96486);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js\nvar BehaviorSubject = __webpack_require__(86515);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/empty.js\nvar empty = __webpack_require__(1545);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/concatMap.js\nvar concatMap = __webpack_require__(51313);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/first.js + 2 modules\nvar first = __webpack_require__(89475);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/tap.js\nvar tap = __webpack_require__(42006);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/map.js\nvar map = __webpack_require__(29127);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/catchError.js\nvar catchError = __webpack_require__(79878);\n;// CONCATENATED MODULE: ./src/app/Shared/Services/Targets.service.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\nvar TargetsService = /** @class */ (function () {\n function TargetsService(api, notifications, login, notificationChannel) {\n var _this = this;\n this.api = api;\n this.notifications = notifications;\n this._targets$ = new BehaviorSubject/* BehaviorSubject */.X([]);\n login\n .getSessionState()\n .pipe((0,concatMap/* concatMap */.b)(function (sessionState) { return (sessionState === Login_service/* SessionState.USER_SESSION */.sM.USER_SESSION ? _this.queryForTargets() : empty/* EMPTY */.E); }))\n .subscribe(function () {\n // just trigger a startup query\n });\n notificationChannel.messages(NotificationChannel_service/* NotificationCategory.TargetJvmDiscovery */.mN.TargetJvmDiscovery).subscribe(function (v) {\n var evt = v.message.event;\n switch (evt.kind) {\n case \'FOUND\':\n _this._targets$.next(lodash.unionBy(_this._targets$.getValue(), [evt.serviceRef], function (t) { return t.connectUrl; }));\n break;\n case \'LOST\':\n _this._targets$.next(lodash.filter(_this._targets$.getValue(), function (t) { return t.connectUrl !== evt.serviceRef.connectUrl; }));\n break;\n case \'MODIFIED\':\n {\n var idx = lodash.findIndex(_this._targets$.getValue(), function (t) { return t.connectUrl === evt.serviceRef.connectUrl; });\n if (idx >= 0) {\n _this._targets$.getValue().splice(idx, 1, evt.serviceRef);\n _this._targets$.next(__spreadArray([], _this._targets$.getValue(), true));\n }\n }\n break;\n default:\n break;\n }\n });\n }\n TargetsService.prototype.queryForTargets = function () {\n var _this = this;\n return this.api.doGet("targets").pipe((0,first/* first */.P)(), (0,tap/* tap */.b)(function (targets) { return _this._targets$.next(targets); }), (0,map/* map */.U)(function () { return undefined; }), (0,catchError/* catchError */.K)(function (err) {\n _this.notifications.danger(\'Target List Update Failed\', JSON.stringify(err));\n return (0,of.of)(undefined);\n }));\n };\n TargetsService.prototype.targets = function () {\n return this._targets$.asObservable();\n };\n return TargetsService;\n}());\n\n\n;// CONCATENATED MODULE: ./src/app/Shared/Services/Services.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar settings = new Settings_service/* SettingsService */.gb();\nvar authCredentials = new AuthCredentials(function () { return api; });\nvar login = new Login_service/* LoginService */.r6(Target_service/* TargetInstance */.pw, authCredentials, settings);\nvar api = new Api_service/* ApiService */.sM(Target_service/* TargetInstance */.pw, Notifications/* NotificationsInstance */.Bn, login);\nvar notificationChannel = new NotificationChannel_service/* NotificationChannel */.dm(Notifications/* NotificationsInstance */.Bn, login);\nvar reports = new Report_service/* ReportService */.rM(login, Notifications/* NotificationsInstance */.Bn);\nvar targets = new TargetsService(api, Notifications/* NotificationsInstance */.Bn, login, notificationChannel);\nvar defaultServices = {\n target: Target_service/* TargetInstance */.pw,\n targets: targets,\n api: api,\n authCredentials: authCredentials,\n notificationChannel: notificationChannel,\n reports: reports,\n settings: settings,\n login: login,\n};\nvar ServiceContext = react.createContext(defaultServices);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBYSxDQUFDLEtBQUssRUFBRSwyQ0FBcUIsQ0FBQyxDQUFDO0FBQ2hFLElBQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSwyQ0FBcUIsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUUzRixJQUFNLGVBQWUsR0FBYTtJQUNoQyxNQUFNLEVBQUUscUNBQWM7SUFDdEIsT0FBTztJQUNQLEdBQUc7SUFDSCxlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxRQUFRO0lBQ1IsS0FBSztDQUNOLENBQUM7QUFFRixJQUFNLGNBQWMsR0FBNEIsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9TZXJ2aWNlcy9BdXRoQ3JlZGVudGlhbHMuc2VydmljZS50c3g/MzYyOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXRzLnNlcnZpY2UudHN4PzdmN2IiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMudHN4PzAzYTQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBMb2NhdGlvbnMgfSBmcm9tICdAYXBwL1NldHRpbmdzL0NyZWRlbnRpYWxzU3RvcmFnZSc7XG5pbXBvcnQgeyBnZXRGcm9tTG9jYWxTdG9yYWdlIH0gZnJvbSAnQGFwcC91dGlscy9Mb2NhbFN0b3JhZ2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL0FwaS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFsIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhDcmVkZW50aWFscyB7XG4gIC8vIFRPRE8gcmVwbGFjZSB3aXRoIFJlZHV4P1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gbmV3IE1hcDxzdHJpbmcsIENyZWRlbnRpYWw+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcGk6ICgpID0+IEFwaVNlcnZpY2UpIHt9XG5cbiAgc2V0Q3JlZGVudGlhbCh0YXJnZXRJZDogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBnZXRGcm9tTG9jYWxTdG9yYWdlKCdDUkVERU5USUFMX0xPQ0FUSU9OJywgTG9jYXRpb25zLkJBQ0tFTkQua2V5KTtcbiAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7XG4gICAgICBjYXNlIExvY2F0aW9ucy5CQUNLRU5ELmtleTpcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpKCkucG9zdENyZWRlbnRpYWxzKGB0YXJnZXQuY29ubmVjdFVybCA9PSBcIiR7dGFyZ2V0SWR9XCJgLCB1c2VybmFtZSwgcGFzc3dvcmQpO1xuICAgICAgY2FzZSBMb2NhdGlvbnMuQlJPV1NFUl9TRVNTSU9OLmtleTpcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0SWQsIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH0pO1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gc3RvcmFnZSBsb2NhdGlvbicsIGxvY2F0aW9uKTtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnZXRDcmVkZW50aWFsKHRhcmdldElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENyZWRlbnRpYWwgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoJ0NSRURFTlRJQUxfTE9DQVRJT04nLCBMb2NhdGlvbnMuQkFDS0VORC5rZXkpO1xuICAgIHN3aXRjaCAobG9jYXRpb24pIHtcbiAgICAgIGNhc2UgTG9jYXRpb25zLkJBQ0tFTkQua2V5OlxuICAgICAgICAvLyBpZiB0aGlzIGlzIHN0b3JlZCBvbiB0aGUgYmFja2VuZCB0aGVuIENyeW9zdGF0IHNob3VsZCBiZSB1c2luZyB0aG9zZSBhbmQgbm90IHByb21wdGluZyB1cyB0byByZXF1ZXN0IGZyb20gdGhlIHVzZXJcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICBjYXNlIExvY2F0aW9ucy5CUk9XU0VSX1NFU1NJT04ua2V5OlxuICAgICAgICByZXR1cm4gb2YodGhpcy5zdG9yZS5nZXQodGFyZ2V0SWQpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBzdG9yYWdlIGxvY2F0aW9uJywgbG9jYXRpb24pO1xuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zIH0gZnJvbSAnQGFwcC9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvbnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgRU1QVFkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZmlyc3QsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlLCBTZXNzaW9uU3RhdGUgfSBmcm9tICcuL0xvZ2luLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnksIE5vdGlmaWNhdGlvbkNoYW5uZWwgfSBmcm9tICcuL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICcuL1RhcmdldC5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXREaXNjb3ZlcnlFdmVudCB7XG4gIGtpbmQ6ICdMT1NUJyB8ICdGT1VORCcgfCAnTU9ESUZJRUQnO1xuICBzZXJ2aWNlUmVmOiBUYXJnZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUYXJnZXRzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldHMkOiBCZWhhdmlvclN1YmplY3Q8VGFyZ2V0W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYXJnZXRbXT4oW10gYXMgVGFyZ2V0W10pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpOiBBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9ucyxcbiAgICBsb2dpbjogTG9naW5TZXJ2aWNlLFxuICAgIG5vdGlmaWNhdGlvbkNoYW5uZWw6IE5vdGlmaWNhdGlvbkNoYW5uZWxcbiAgKSB7XG4gICAgbG9naW5cbiAgICAgIC5nZXRTZXNzaW9uU3RhdGUoKVxuICAgICAgLnBpcGUoY29uY2F0TWFwKChzZXNzaW9uU3RhdGUpID0+IChzZXNzaW9uU3RhdGUgPT09IFNlc3Npb25TdGF0ZS5VU0VSX1NFU1NJT04gPyB0aGlzLnF1ZXJ5Rm9yVGFyZ2V0cygpIDogRU1QVFkpKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBqdXN0IHRyaWdnZXIgYSBzdGFydHVwIHF1ZXJ5XG4gICAgICB9KTtcbiAgICBub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlRhcmdldEp2bURpc2NvdmVyeSkuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICBjb25zdCBldnQ6IFRhcmdldERpc2NvdmVyeUV2ZW50ID0gdi5tZXNzYWdlLmV2ZW50O1xuICAgICAgc3dpdGNoIChldnQua2luZCkge1xuICAgICAgICBjYXNlICdGT1VORCc6XG4gICAgICAgICAgdGhpcy5fdGFyZ2V0cyQubmV4dChfLnVuaW9uQnkodGhpcy5fdGFyZ2V0cyQuZ2V0VmFsdWUoKSwgW2V2dC5zZXJ2aWNlUmVmXSwgKHQpID0+IHQuY29ubmVjdFVybCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdMT1NUJzpcbiAgICAgICAgICB0aGlzLl90YXJnZXRzJC5uZXh0KF8uZmlsdGVyKHRoaXMuX3RhcmdldHMkLmdldFZhbHVlKCksICh0KSA9PiB0LmNvbm5lY3RVcmwgIT09IGV2dC5zZXJ2aWNlUmVmLmNvbm5lY3RVcmwpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTU9ESUZJRUQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IF8uZmluZEluZGV4KHRoaXMuX3RhcmdldHMkLmdldFZhbHVlKCksICh0KSA9PiB0LmNvbm5lY3RVcmwgPT09IGV2dC5zZXJ2aWNlUmVmLmNvbm5lY3RVcmwpO1xuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3RhcmdldHMkLmdldFZhbHVlKCkuc3BsaWNlKGlkeCwgMSwgZXZ0LnNlcnZpY2VSZWYpO1xuICAgICAgICAgICAgICB0aGlzLl90YXJnZXRzJC5uZXh0KFsuLi50aGlzLl90YXJnZXRzJC5nZXRWYWx1ZSgpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcXVlcnlGb3JUYXJnZXRzKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5kb0dldDxUYXJnZXRbXT4oYHRhcmdldHNgKS5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHRhcCgodGFyZ2V0cykgPT4gdGhpcy5fdGFyZ2V0cyQubmV4dCh0YXJnZXRzKSksXG4gICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGFuZ2VyKCdUYXJnZXQgTGlzdCBVcGRhdGUgRmFpbGVkJywgSlNPTi5zdHJpbmdpZnkoZXJyKSk7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdGFyZ2V0cygpOiBPYnNlcnZhYmxlPFRhcmdldFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldHMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNJbnN0YW5jZSB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhDcmVkZW50aWFscyB9IGZyb20gJy4vQXV0aENyZWRlbnRpYWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9Mb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNoYW5uZWwgfSBmcm9tICcuL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0U2VydmljZSwgVGFyZ2V0SW5zdGFuY2UgfSBmcm9tICcuL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldHNTZXJ2aWNlIH0gZnJvbSAnLi9UYXJnZXRzLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VzIHtcbiAgdGFyZ2V0OiBUYXJnZXRTZXJ2aWNlO1xuICB0YXJnZXRzOiBUYXJnZXRzU2VydmljZTtcbiAgYXBpOiBBcGlTZXJ2aWNlO1xuICBhdXRoQ3JlZGVudGlhbHM6IEF1dGhDcmVkZW50aWFscztcbiAgbm90aWZpY2F0aW9uQ2hhbm5lbDogTm90aWZpY2F0aW9uQ2hhbm5lbDtcbiAgcmVwb3J0czogUmVwb3J0U2VydmljZTtcbiAgc2V0dGluZ3M6IFNldHRpbmdzU2VydmljZTtcbiAgbG9naW46IExvZ2luU2VydmljZTtcbn1cblxuY29uc3Qgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3NTZXJ2aWNlKCk7XG5jb25zdCBhdXRoQ3JlZGVudGlhbHMgPSBuZXcgQXV0aENyZWRlbnRpYWxzKCgpID0+IGFwaSk7XG5jb25zdCBsb2dpbiA9IG5ldyBMb2dpblNlcnZpY2UoVGFyZ2V0SW5zdGFuY2UsIGF1dGhDcmVkZW50aWFscywgc2V0dGluZ3MpO1xuY29uc3QgYXBpID0gbmV3IEFwaVNlcnZpY2UoVGFyZ2V0SW5zdGFuY2UsIE5vdGlmaWNhdGlvbnNJbnN0YW5jZSwgbG9naW4pO1xuY29uc3Qgbm90aWZpY2F0aW9uQ2hhbm5lbCA9IG5ldyBOb3RpZmljYXRpb25DaGFubmVsKE5vdGlmaWNhdGlvbnNJbnN0YW5jZSwgbG9naW4pO1xuY29uc3QgcmVwb3J0cyA9IG5ldyBSZXBvcnRTZXJ2aWNlKGxvZ2luLCBOb3RpZmljYXRpb25zSW5zdGFuY2UpO1xuY29uc3QgdGFyZ2V0cyA9IG5ldyBUYXJnZXRzU2VydmljZShhcGksIE5vdGlmaWNhdGlvbnNJbnN0YW5jZSwgbG9naW4sIG5vdGlmaWNhdGlvbkNoYW5uZWwpO1xuXG5jb25zdCBkZWZhdWx0U2VydmljZXM6IFNlcnZpY2VzID0ge1xuICB0YXJnZXQ6IFRhcmdldEluc3RhbmNlLFxuICB0YXJnZXRzLFxuICBhcGksXG4gIGF1dGhDcmVkZW50aWFscyxcbiAgbm90aWZpY2F0aW9uQ2hhbm5lbCxcbiAgcmVwb3J0cyxcbiAgc2V0dGluZ3MsXG4gIGxvZ2luLFxufTtcblxuY29uc3QgU2VydmljZUNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8U2VydmljZXM+ID0gUmVhY3QuY3JlYXRlQ29udGV4dChkZWZhdWx0U2VydmljZXMpO1xuXG5leHBvcnQgeyBTZXJ2aWNlQ29udGV4dCwgZGVmYXVsdFNlcnZpY2VzIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///35881\n')},73721:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Lu\": () => (/* binding */ FeatureLevel),\n/* harmony export */ \"eA\": () => (/* binding */ automatedAnalysisConfigToRecordingAttributes),\n/* harmony export */ \"gb\": () => (/* binding */ SettingsService)\n/* harmony export */ });\n/* harmony import */ var _app_Modal_DeleteWarningUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28829);\n/* harmony import */ var _app_Settings_SettingsUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74787);\n/* harmony import */ var _app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74687);\n/* harmony import */ var _i18n_datetime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(83628);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(86515);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(22401);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(80095);\n/* harmony import */ var _Api_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(68038);\n/* harmony import */ var _NotificationChannel_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23384);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the \"Software\"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a \"Larger Work\" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar FeatureLevel;\n(function (FeatureLevel) {\n FeatureLevel[FeatureLevel[\"DEVELOPMENT\"] = 0] = \"DEVELOPMENT\";\n FeatureLevel[FeatureLevel[\"BETA\"] = 1] = \"BETA\";\n FeatureLevel[FeatureLevel[\"PRODUCTION\"] = 2] = \"PRODUCTION\";\n})(FeatureLevel || (FeatureLevel = {}));\nvar automatedAnalysisConfigToRecordingAttributes = function (config) {\n return {\n name: _Api_service__WEBPACK_IMPORTED_MODULE_4__/* .automatedAnalysisRecordingName */ .Ls,\n events: \"template=\".concat(config.template.name, \",type=\").concat(config.template.type),\n duration: undefined,\n archiveOnStop: false,\n options: {\n toDisk: true,\n maxAge: config.maxAge,\n maxSize: config.maxSize,\n },\n metadata: {\n labels: {\n origin: _Api_service__WEBPACK_IMPORTED_MODULE_4__/* .automatedAnalysisRecordingName */ .Ls,\n },\n },\n };\n};\nvar SettingsService = /** @class */ (function () {\n function SettingsService() {\n this._featureLevel$ = new rxjs__WEBPACK_IMPORTED_MODULE_6__/* .BehaviorSubject */ .X((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('FEATURE_LEVEL', FeatureLevel.PRODUCTION));\n this._visibleNotificationsCount$ = new rxjs__WEBPACK_IMPORTED_MODULE_6__/* .BehaviorSubject */ .X((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('VISIBLE_NOTIFICATIONS_COUNT', 5));\n this._datetimeFormat$ = new rxjs__WEBPACK_IMPORTED_MODULE_6__/* .BehaviorSubject */ .X((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('DATETIME_FORMAT', _i18n_datetime__WEBPACK_IMPORTED_MODULE_3__/* .defaultDatetimeFormat */ .wO));\n this._theme$ = new rxjs__WEBPACK_IMPORTED_MODULE_6__/* .BehaviorSubject */ .X((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('THEME', _app_Settings_SettingsUtils__WEBPACK_IMPORTED_MODULE_1__/* .ThemeSetting.AUTO */ .LZ.AUTO));\n this._featureLevel$.subscribe(function (featureLevel) { return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('FEATURE_LEVEL', featureLevel); });\n this._visibleNotificationsCount$.subscribe(function (count) {\n return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('VISIBLE_NOTIFICATIONS_COUNT', count);\n });\n this._datetimeFormat$.subscribe(function (format) { return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('DATETIME_FORMAT', format); });\n this._theme$.subscribe(function (theme) { return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('THEME', theme); });\n }\n SettingsService.prototype.media = function (query) {\n var mediaQuery = window.matchMedia(query);\n return (0,rxjs__WEBPACK_IMPORTED_MODULE_7__/* .fromEvent */ .R)(mediaQuery, 'change').pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_8__/* .startWith */ .O)(mediaQuery));\n };\n SettingsService.prototype.themeSetting = function () {\n return this._theme$.asObservable();\n };\n SettingsService.prototype.setThemeSetting = function (theme) {\n this._theme$.next(theme);\n };\n SettingsService.prototype.datetimeFormat = function () {\n return this._datetimeFormat$.asObservable();\n };\n SettingsService.prototype.setDatetimeFormat = function (format) {\n this._datetimeFormat$.next(format);\n };\n SettingsService.prototype.featureLevel = function () {\n return this._featureLevel$.asObservable();\n };\n SettingsService.prototype.setFeatureLevel = function (featureLevel) {\n this._featureLevel$.next(featureLevel);\n };\n SettingsService.prototype.autoRefreshEnabled = function () {\n return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('AUTO_REFRESH_ENABLED', 'false') === 'true';\n };\n SettingsService.prototype.setAutoRefreshEnabled = function (enabled) {\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('AUTO_REFRESH_ENABLED', String(enabled));\n };\n SettingsService.prototype.autoRefreshPeriod = function (defaultPeriod) {\n if (defaultPeriod === void 0) { defaultPeriod = 30; }\n return Number((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('AUTO_REFRESH_PERIOD', defaultPeriod));\n };\n SettingsService.prototype.setAutoRefreshPeriod = function (period) {\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('AUTO_REFRESH_PERIOD', String(period));\n };\n SettingsService.prototype.autoRefreshUnits = function (defaultUnits) {\n if (defaultUnits === void 0) { defaultUnits = 1000; }\n return Number((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('AUTO_REFRESH_UNITS', defaultUnits));\n };\n SettingsService.prototype.setAutoRefreshUnits = function (units) {\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('AUTO_REFRESH_UNITS', String(units));\n };\n SettingsService.prototype.automatedAnalysisRecordingConfig = function (defaultConfig) {\n if (defaultConfig === void 0) { defaultConfig = _Api_service__WEBPACK_IMPORTED_MODULE_4__/* .defaultAutomatedAnalysisRecordingConfig */ .hh; }\n return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('AUTOMATED_ANALYSIS_RECORDING_CONFIG', defaultConfig);\n };\n SettingsService.prototype.setAutomatedAnalysisRecordingConfig = function (config) {\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('AUTOMATED_ANALYSIS_RECORDING_CONFIG', config);\n };\n SettingsService.prototype.chartControllerConfig = function (defaultConfig) {\n if (defaultConfig === void 0) { defaultConfig = _Api_service__WEBPACK_IMPORTED_MODULE_4__/* .defaultChartControllerConfig */ .cE; }\n return (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('CHART_CONTROLLER_CONFIG', defaultConfig);\n };\n SettingsService.prototype.setChartControllerConfig = function (config) {\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('CHART_CONTROLLER_CONFIG', config);\n };\n SettingsService.prototype.deletionDialogsEnabled = function () {\n var value = (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('DELETION_DIALOGS_ENABLED', undefined);\n if (typeof value === 'object') {\n var obj = new Map(Array.from(Object.entries(value)));\n var res_1 = new Map();\n obj.forEach(function (v) {\n res_1.set(v[0], v[1]);\n });\n for (var t in _app_Modal_DeleteWarningUtils__WEBPACK_IMPORTED_MODULE_0__/* .DeleteOrDisableWarningType */ .gF) {\n if (!res_1.has(_app_Modal_DeleteWarningUtils__WEBPACK_IMPORTED_MODULE_0__/* .DeleteOrDisableWarningType */ .gF[t])) {\n res_1.set(_app_Modal_DeleteWarningUtils__WEBPACK_IMPORTED_MODULE_0__/* .DeleteOrDisableWarningType */ .gF[t], true);\n }\n }\n return res_1;\n }\n var map = new Map();\n for (var cat in _app_Modal_DeleteWarningUtils__WEBPACK_IMPORTED_MODULE_0__/* .DeleteOrDisableWarningType */ .gF) {\n map.set(_app_Modal_DeleteWarningUtils__WEBPACK_IMPORTED_MODULE_0__/* .DeleteOrDisableWarningType */ .gF[cat], true);\n }\n this.setDeletionDialogsEnabled(map);\n return map;\n };\n SettingsService.prototype.deletionDialogsEnabledFor = function (type) {\n var res = this.deletionDialogsEnabled().get(type);\n if (typeof res != 'boolean') {\n return true;\n }\n return res;\n };\n SettingsService.prototype.setDeletionDialogsEnabled = function (map) {\n var value = Array.from(map.entries());\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('DELETION_DIALOGS_ENABLED', value);\n };\n SettingsService.prototype.setDeletionDialogsEnabledFor = function (type, enabled) {\n var map = this.deletionDialogsEnabled();\n map.set(type, enabled);\n this.setDeletionDialogsEnabled(map);\n };\n SettingsService.prototype.visibleNotificationsCount = function () {\n return this._visibleNotificationsCount$.asObservable();\n };\n SettingsService.prototype.setVisibleNotificationCount = function (count) {\n this._visibleNotificationsCount$.next(count);\n };\n SettingsService.prototype.notificationsEnabled = function () {\n var value = (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('NOTIFICATIONS_ENABLED', undefined);\n if (typeof value === 'object') {\n var res_2 = new Map();\n value.forEach(function (v) {\n res_2.set(v[0], v[1]);\n });\n for (var t in _NotificationChannel_service__WEBPACK_IMPORTED_MODULE_5__/* .NotificationCategory */ .mN) {\n if (!res_2.has(_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_5__/* .NotificationCategory */ .mN[t])) {\n res_2.set(_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_5__/* .NotificationCategory */ .mN[t], true);\n }\n }\n return res_2;\n }\n var map = new Map();\n for (var cat in _NotificationChannel_service__WEBPACK_IMPORTED_MODULE_5__/* .NotificationCategory */ .mN) {\n map.set(_NotificationChannel_service__WEBPACK_IMPORTED_MODULE_5__/* .NotificationCategory */ .mN[cat], true);\n }\n this.setNotificationsEnabled(map);\n return map;\n };\n SettingsService.prototype.notificationsEnabledFor = function (category) {\n var res = this.notificationsEnabled().get(category);\n if (typeof res != 'boolean') {\n return true;\n }\n return res;\n };\n SettingsService.prototype.setNotificationsEnabled = function (map) {\n var value = Array.from(map.entries());\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('NOTIFICATIONS_ENABLED', value);\n };\n SettingsService.prototype.webSocketDebounceMs = function (defaultWebSocketDebounceMs) {\n if (defaultWebSocketDebounceMs === void 0) { defaultWebSocketDebounceMs = 100; }\n return Number((0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('WEBSOCKET_DEBOUNCE_MS', defaultWebSocketDebounceMs));\n };\n SettingsService.prototype.setWebSocketDebounceMs = function (debounce) {\n (0,_app_utils_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .saveToLocalStorage */ .m8)('WEBSOCKET_DEBOUNCE_MS', String(debounce));\n };\n return SettingsService;\n}());\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFBd0IsUUFBOEI7UUFDcEQsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxHQUFHLElBQUksU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxpREFBdUIsR0FBdkIsVUFBd0IsR0FBdUM7UUFDN0QsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4QyxxRkFBa0IsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsNkNBQW1CLEdBQW5CLFVBQW9CLDBCQUFnQztRQUFoQyw2RUFBZ0M7UUFDbEQsT0FBTyxNQUFNLENBQUMsc0ZBQW1CLENBQUMsdUJBQXVCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxnREFBc0IsR0FBdEIsVUFBdUIsUUFBZ0I7UUFDckMscUZBQWtCLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNILHNCQUFDO0FBQUQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UudHN4P2IzZTQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nVXRpbHMnO1xuaW1wb3J0IHsgVGhlbWVTZXR0aW5nIH0gZnJvbSAnQGFwcC9TZXR0aW5ncy9TZXR0aW5nc1V0aWxzJztcbmltcG9ydCB7IGdldEZyb21Mb2NhbFN0b3JhZ2UsIHNhdmVUb0xvY2FsU3RvcmFnZSB9IGZyb20gJ0BhcHAvdXRpbHMvTG9jYWxTdG9yYWdlJztcbmltcG9ydCB7IERhdGV0aW1lRm9ybWF0LCBkZWZhdWx0RGF0ZXRpbWVGb3JtYXQgfSBmcm9tICdAaTE4bi9kYXRldGltZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZyxcbiAgYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdOYW1lLFxuICBDaGFydENvbnRyb2xsZXJDb25maWcsXG4gIGRlZmF1bHRBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZyxcbiAgZGVmYXVsdENoYXJ0Q29udHJvbGxlckNvbmZpZyxcbiAgUmVjb3JkaW5nQXR0cmlidXRlcyxcbn0gZnJvbSAnLi9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSB9IGZyb20gJy4vTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcblxuZXhwb3J0IGVudW0gRmVhdHVyZUxldmVsIHtcbiAgREVWRUxPUE1FTlQgPSAwLFxuICBCRVRBID0gMSxcbiAgUFJPRFVDVElPTiA9IDIsXG59XG5cbmV4cG9ydCBjb25zdCBhdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ1RvUmVjb3JkaW5nQXR0cmlidXRlcyA9IChcbiAgY29uZmlnOiBBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZ1xuKTogUmVjb3JkaW5nQXR0cmlidXRlcyA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdOYW1lLFxuICAgIGV2ZW50czogYHRlbXBsYXRlPSR7Y29uZmlnLnRlbXBsYXRlLm5hbWV9LHR5cGU9JHtjb25maWcudGVtcGxhdGUudHlwZX1gLFxuICAgIGR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgYXJjaGl2ZU9uU3RvcDogZmFsc2UsXG4gICAgb3B0aW9uczoge1xuICAgICAgdG9EaXNrOiB0cnVlLFxuICAgICAgbWF4QWdlOiBjb25maWcubWF4QWdlLFxuICAgICAgbWF4U2l6ZTogY29uZmlnLm1heFNpemUsXG4gICAgfSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbGFiZWxzOiB7XG4gICAgICAgIG9yaWdpbjogYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdOYW1lLFxuICAgICAgfSxcbiAgICB9LFxuICB9IGFzIFJlY29yZGluZ0F0dHJpYnV0ZXM7XG59O1xuZXhwb3J0IGNsYXNzIFNldHRpbmdzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZlYXR1cmVMZXZlbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZlYXR1cmVMZXZlbD4oXG4gICAgZ2V0RnJvbUxvY2FsU3RvcmFnZSgnRkVBVFVSRV9MRVZFTCcsIEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Zpc2libGVOb3RpZmljYXRpb25zQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KFxuICAgIGdldEZyb21Mb2NhbFN0b3JhZ2UoJ1ZJU0lCTEVfTk9USUZJQ0FUSU9OU19DT1VOVCcsIDUpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZXRpbWVGb3JtYXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRldGltZUZvcm1hdD4oXG4gICAgZ2V0RnJvbUxvY2FsU3RvcmFnZSgnREFURVRJTUVfRk9STUFUJywgZGVmYXVsdERhdGV0aW1lRm9ybWF0KVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RoZW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGhlbWVTZXR0aW5nPihnZXRGcm9tTG9jYWxTdG9yYWdlKCdUSEVNRScsIFRoZW1lU2V0dGluZy5BVVRPKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZmVhdHVyZUxldmVsJC5zdWJzY3JpYmUoKGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsKSA9PiBzYXZlVG9Mb2NhbFN0b3JhZ2UoJ0ZFQVRVUkVfTEVWRUwnLCBmZWF0dXJlTGV2ZWwpKTtcbiAgICB0aGlzLl92aXNpYmxlTm90aWZpY2F0aW9uc0NvdW50JC5zdWJzY3JpYmUoKGNvdW50OiBudW1iZXIpID0+XG4gICAgICBzYXZlVG9Mb2NhbFN0b3JhZ2UoJ1ZJU0lCTEVfTk9USUZJQ0FUSU9OU19DT1VOVCcsIGNvdW50KVxuICAgICk7XG4gICAgdGhpcy5fZGF0ZXRpbWVGb3JtYXQkLnN1YnNjcmliZSgoZm9ybWF0OiBEYXRldGltZUZvcm1hdCkgPT4gc2F2ZVRvTG9jYWxTdG9yYWdlKCdEQVRFVElNRV9GT1JNQVQnLCBmb3JtYXQpKTtcbiAgICB0aGlzLl90aGVtZSQuc3Vic2NyaWJlKCh0aGVtZTogVGhlbWVTZXR0aW5nKSA9PiBzYXZlVG9Mb2NhbFN0b3JhZ2UoJ1RIRU1FJywgdGhlbWUpKTtcbiAgfVxuXG4gIG1lZGlhKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1lZGlhUXVlcnlMaXN0PiB7XG4gICAgY29uc3QgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KTtcbiAgICByZXR1cm4gZnJvbUV2ZW50PE1lZGlhUXVlcnlMaXN0PihtZWRpYVF1ZXJ5LCAnY2hhbmdlJykucGlwZShzdGFydFdpdGgobWVkaWFRdWVyeSkpO1xuICB9XG5cbiAgdGhlbWVTZXR0aW5nKCk6IE9ic2VydmFibGU8VGhlbWVTZXR0aW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RoZW1lJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldFRoZW1lU2V0dGluZyh0aGVtZTogVGhlbWVTZXR0aW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdGhlbWUkLm5leHQodGhlbWUpO1xuICB9XG5cbiAgZGF0ZXRpbWVGb3JtYXQoKTogT2JzZXJ2YWJsZTxEYXRldGltZUZvcm1hdD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRldGltZUZvcm1hdCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXREYXRldGltZUZvcm1hdChmb3JtYXQ6IERhdGV0aW1lRm9ybWF0KSB7XG4gICAgdGhpcy5fZGF0ZXRpbWVGb3JtYXQkLm5leHQoZm9ybWF0KTtcbiAgfVxuXG4gIGZlYXR1cmVMZXZlbCgpOiBPYnNlcnZhYmxlPEZlYXR1cmVMZXZlbD4ge1xuICAgIHJldHVybiB0aGlzLl9mZWF0dXJlTGV2ZWwkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0RmVhdHVyZUxldmVsKGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fZmVhdHVyZUxldmVsJC5uZXh0KGZlYXR1cmVMZXZlbCk7XG4gIH1cblxuICBhdXRvUmVmcmVzaEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldEZyb21Mb2NhbFN0b3JhZ2UoJ0FVVE9fUkVGUkVTSF9FTkFCTEVEJywgJ2ZhbHNlJykgPT09ICd0cnVlJztcbiAgfVxuXG4gIHNldEF1dG9SZWZyZXNoRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdBVVRPX1JFRlJFU0hfRU5BQkxFRCcsIFN0cmluZyhlbmFibGVkKSk7XG4gIH1cblxuICBhdXRvUmVmcmVzaFBlcmlvZChkZWZhdWx0UGVyaW9kID0gMzApOiBudW1iZXIge1xuICAgIHJldHVybiBOdW1iZXIoZ2V0RnJvbUxvY2FsU3RvcmFnZSgnQVVUT19SRUZSRVNIX1BFUklPRCcsIGRlZmF1bHRQZXJpb2QpKTtcbiAgfVxuXG4gIHNldEF1dG9SZWZyZXNoUGVyaW9kKHBlcmlvZDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdBVVRPX1JFRlJFU0hfUEVSSU9EJywgU3RyaW5nKHBlcmlvZCkpO1xuICB9XG5cbiAgYXV0b1JlZnJlc2hVbml0cyhkZWZhdWx0VW5pdHMgPSAxMDAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKGdldEZyb21Mb2NhbFN0b3JhZ2UoJ0FVVE9fUkVGUkVTSF9VTklUUycsIGRlZmF1bHRVbml0cykpO1xuICB9XG5cbiAgc2V0QXV0b1JlZnJlc2hVbml0cyh1bml0czogbnVtYmVyKTogdm9pZCB7XG4gICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdBVVRPX1JFRlJFU0hfVU5JVFMnLCBTdHJpbmcodW5pdHMpKTtcbiAgfVxuXG4gIGF1dG9tYXRlZEFuYWx5c2lzUmVjb3JkaW5nQ29uZmlnKFxuICAgIGRlZmF1bHRDb25maWcgPSBkZWZhdWx0QXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWdcbiAgKTogQXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcge1xuICAgIHJldHVybiBnZXRGcm9tTG9jYWxTdG9yYWdlKCdBVVRPTUFURURfQU5BTFlTSVNfUkVDT1JESU5HX0NPTkZJRycsIGRlZmF1bHRDb25maWcpO1xuICB9XG5cbiAgc2V0QXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcoY29uZmlnOiBBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZyk6IHZvaWQge1xuICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnQVVUT01BVEVEX0FOQUxZU0lTX1JFQ09SRElOR19DT05GSUcnLCBjb25maWcpO1xuICB9XG5cbiAgY2hhcnRDb250cm9sbGVyQ29uZmlnKGRlZmF1bHRDb25maWcgPSBkZWZhdWx0Q2hhcnRDb250cm9sbGVyQ29uZmlnKTogQ2hhcnRDb250cm9sbGVyQ29uZmlnIHtcbiAgICByZXR1cm4gZ2V0RnJvbUxvY2FsU3RvcmFnZSgnQ0hBUlRfQ09OVFJPTExFUl9DT05GSUcnLCBkZWZhdWx0Q29uZmlnKTtcbiAgfVxuXG4gIHNldENoYXJ0Q29udHJvbGxlckNvbmZpZyhjb25maWc6IENoYXJ0Q29udHJvbGxlckNvbmZpZyk6IHZvaWQge1xuICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnQ0hBUlRfQ09OVFJPTExFUl9DT05GSUcnLCBjb25maWcpO1xuICB9XG5cbiAgZGVsZXRpb25EaWFsb2dzRW5hYmxlZCgpOiBNYXA8RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUsIGJvb2xlYW4+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoJ0RFTEVUSU9OX0RJQUxPR1NfRU5BQkxFRCcsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG9iaiA9IG5ldyBNYXA8c3RyaW5nLCBBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZz4oQXJyYXkuZnJvbShPYmplY3QuZW50cmllcyh2YWx1ZSkpKTtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBNYXA8RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUsIGJvb2xlYW4+KCk7XG4gICAgICBvYmouZm9yRWFjaCgodikgPT4ge1xuICAgICAgICByZXMuc2V0KHZbMF0gYXMgRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUsIHZbMV0gYXMgYm9vbGVhbik7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgdCBpbiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSkge1xuICAgICAgICBpZiAoIXJlcy5oYXMoRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGVbdF0pKSB7XG4gICAgICAgICAgcmVzLnNldChEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZVt0XSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSwgYm9vbGVhbj4oKTtcbiAgICBmb3IgKGNvbnN0IGNhdCBpbiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSkge1xuICAgICAgbWFwLnNldChEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZVtjYXRdLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5zZXREZWxldGlvbkRpYWxvZ3NFbmFibGVkKG1hcCk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGRlbGV0aW9uRGlhbG9nc0VuYWJsZWRGb3IodHlwZTogRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmRlbGV0aW9uRGlhbG9nc0VuYWJsZWQoKS5nZXQodHlwZSk7XG4gICAgaWYgKHR5cGVvZiByZXMgIT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHNldERlbGV0aW9uRGlhbG9nc0VuYWJsZWQobWFwOiBNYXA8RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBBcnJheS5mcm9tKG1hcC5lbnRyaWVzKCkpO1xuICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnREVMRVRJT05fRElBTE9HU19FTkFCTEVEJywgdmFsdWUpO1xuICB9XG5cbiAgc2V0RGVsZXRpb25EaWFsb2dzRW5hYmxlZEZvcih0eXBlOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuZGVsZXRpb25EaWFsb2dzRW5hYmxlZCgpO1xuICAgIG1hcC5zZXQodHlwZSwgZW5hYmxlZCk7XG4gICAgdGhpcy5zZXREZWxldGlvbkRpYWxvZ3NFbmFibGVkKG1hcCk7XG4gIH1cblxuICB2aXNpYmxlTm90aWZpY2F0aW9uc0NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVOb3RpZmljYXRpb25zQ291bnQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0VmlzaWJsZU5vdGlmaWNhdGlvbkNvdW50KGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl92aXNpYmxlTm90aWZpY2F0aW9uc0NvdW50JC5uZXh0KGNvdW50KTtcbiAgfVxuXG4gIG5vdGlmaWNhdGlvbnNFbmFibGVkKCk6IE1hcDxOb3RpZmljYXRpb25DYXRlZ29yeSwgYm9vbGVhbj4ge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RnJvbUxvY2FsU3RvcmFnZSgnTk9USUZJQ0FUSU9OU19FTkFCTEVEJywgdW5kZWZpbmVkKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgcmVzID0gbmV3IE1hcDxOb3RpZmljYXRpb25DYXRlZ29yeSwgYm9vbGVhbj4oKTtcbiAgICAgIHZhbHVlLmZvckVhY2goKHY6IFtOb3RpZmljYXRpb25DYXRlZ29yeSwgYm9vbGVhbl0pID0+IHtcbiAgICAgICAgcmVzLnNldCh2WzBdLCB2WzFdKTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCB0IGluIE5vdGlmaWNhdGlvbkNhdGVnb3J5KSB7XG4gICAgICAgIGlmICghcmVzLmhhcyhOb3RpZmljYXRpb25DYXRlZ29yeVt0XSkpIHtcbiAgICAgICAgICByZXMuc2V0KE5vdGlmaWNhdGlvbkNhdGVnb3J5W3RdLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxOb3RpZmljYXRpb25DYXRlZ29yeSwgYm9vbGVhbj4oKTtcbiAgICBmb3IgKGNvbnN0IGNhdCBpbiBOb3RpZmljYXRpb25DYXRlZ29yeSkge1xuICAgICAgbWFwLnNldChOb3RpZmljYXRpb25DYXRlZ29yeVtjYXRdLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5zZXROb3RpZmljYXRpb25zRW5hYmxlZChtYXApO1xuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBub3RpZmljYXRpb25zRW5hYmxlZEZvcihjYXRlZ29yeTogTm90aWZpY2F0aW9uQ2F0ZWdvcnkpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXMgPSB0aGlzLm5vdGlmaWNhdGlvbnNFbmFibGVkKCkuZ2V0KGNhdGVnb3J5KTtcbiAgICBpZiAodHlwZW9mIHJlcyAhPSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQobWFwOiBNYXA8Tm90aWZpY2F0aW9uQ2F0ZWdvcnksIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBBcnJheS5mcm9tKG1hcC5lbnRyaWVzKCkpO1xuICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnTk9USUZJQ0FUSU9OU19FTkFCTEVEJywgdmFsdWUpO1xuICB9XG5cbiAgd2ViU29ja2V0RGVib3VuY2VNcyhkZWZhdWx0V2ViU29ja2V0RGVib3VuY2VNcyA9IDEwMCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihnZXRGcm9tTG9jYWxTdG9yYWdlKCdXRUJTT0NLRVRfREVCT1VOQ0VfTVMnLCBkZWZhdWx0V2ViU29ja2V0RGVib3VuY2VNcykpO1xuICB9XG5cbiAgc2V0V2ViU29ja2V0RGVib3VuY2VNcyhkZWJvdW5jZTogbnVtYmVyKTogdm9pZCB7XG4gICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdXRUJTT0NLRVRfREVCT1VOQ0VfTVMnLCBTdHJpbmcoZGVib3VuY2UpKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73721\n")},38386:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "E4": () => (/* binding */ indexOfTarget),\n/* harmony export */ "FW": () => (/* binding */ getTargetRepresentation),\n/* harmony export */ "JE": () => (/* binding */ NO_TARGET),\n/* harmony export */ "cH": () => (/* binding */ TargetService),\n/* harmony export */ "iJ": () => (/* binding */ isTargetAgentHttp),\n/* harmony export */ "pw": () => (/* binding */ TargetInstance),\n/* harmony export */ "v4": () => (/* binding */ isEqualTarget),\n/* harmony export */ "vR": () => (/* binding */ includesTarget)\n/* harmony export */ });\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86515);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82649);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nvar NO_TARGET = {};\nvar includesTarget = function (arr, target) {\n return arr.some(function (t) { return t.connectUrl === target.connectUrl; });\n};\nvar isEqualTarget = function (a, b) {\n return a.connectUrl === b.connectUrl;\n};\nvar indexOfTarget = function (arr, target) {\n var index = -1;\n arr.forEach(function (t, idx) {\n if (t.connectUrl === target.connectUrl) {\n index = idx;\n }\n });\n return index;\n};\nvar getTargetRepresentation = function (t) {\n return !t.alias || t.alias === t.connectUrl ? "".concat(t.connectUrl) : "".concat(t.alias, " (").concat(t.connectUrl, ")");\n};\nvar isTargetAgentHttp = function (t) { return t.connectUrl.startsWith(\'http\'); };\nvar TargetService = /** @class */ (function () {\n function TargetService() {\n this._target = new rxjs__WEBPACK_IMPORTED_MODULE_0__/* .BehaviorSubject */ .X(NO_TARGET);\n this._authFailure = new rxjs__WEBPACK_IMPORTED_MODULE_1__/* .Subject */ .x();\n this._authRetry = new rxjs__WEBPACK_IMPORTED_MODULE_1__/* .Subject */ .x();\n this._sslFailure = new rxjs__WEBPACK_IMPORTED_MODULE_1__/* .Subject */ .x();\n }\n TargetService.prototype.setTarget = function (target) {\n if (target === NO_TARGET || !!target.connectUrl) {\n this._target.next(target);\n }\n else {\n throw new Error(\'Malformed target\');\n }\n };\n TargetService.prototype.target = function () {\n return this._target.asObservable();\n };\n TargetService.prototype.authFailure = function () {\n return this._authFailure.asObservable();\n };\n TargetService.prototype.setAuthFailure = function () {\n this._authFailure.next();\n };\n TargetService.prototype.authRetry = function () {\n return this._authRetry.asObservable();\n };\n TargetService.prototype.setAuthRetry = function () {\n this._authRetry.next();\n };\n TargetService.prototype.sslFailure = function () {\n return this._sslFailure.asObservable();\n };\n TargetService.prototype.setSslFailure = function () {\n this._sslFailure.next();\n };\n return TargetService;\n}());\nvar TargetInstance = new TargetService();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQWI7UUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUM7QUFFRCxJQUFNLGNBQWMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBRUYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZS50c3g/ZDQ1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgTk9fVEFSR0VUID0ge30gYXMgVGFyZ2V0O1xuXG5leHBvcnQgY29uc3QgaW5jbHVkZXNUYXJnZXQgPSAoYXJyOiBUYXJnZXRbXSwgdGFyZ2V0OiBUYXJnZXQpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGFyci5zb21lKCh0KSA9PiB0LmNvbm5lY3RVcmwgPT09IHRhcmdldC5jb25uZWN0VXJsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0VxdWFsVGFyZ2V0ID0gKGE6IFRhcmdldCwgYjogVGFyZ2V0KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBhLmNvbm5lY3RVcmwgPT09IGIuY29ubmVjdFVybDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmRleE9mVGFyZ2V0ID0gKGFycjogVGFyZ2V0W10sIHRhcmdldDogVGFyZ2V0KTogbnVtYmVyID0+IHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGFyci5mb3JFYWNoKCh0LCBpZHgpID0+IHtcbiAgICBpZiAodC5jb25uZWN0VXJsID09PSB0YXJnZXQuY29ubmVjdFVybCkge1xuICAgICAgaW5kZXggPSBpZHg7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGluZGV4O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhcmdldFJlcHJlc2VudGF0aW9uID0gKHQ6IFRhcmdldCkgPT5cbiAgIXQuYWxpYXMgfHwgdC5hbGlhcyA9PT0gdC5jb25uZWN0VXJsID8gYCR7dC5jb25uZWN0VXJsfWAgOiBgJHt0LmFsaWFzfSAoJHt0LmNvbm5lY3RVcmx9KWA7XG5cbmV4cG9ydCBjb25zdCBpc1RhcmdldEFnZW50SHR0cCA9ICh0OiBUYXJnZXQpID0+IHQuY29ubmVjdFVybC5zdGFydHNXaXRoKCdodHRwJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0IHtcbiAganZtSWQ/OiBzdHJpbmc7IC8vIHByZXNlbnQgaW4gcmVzcG9uc2VzLCBidXQgd2UgZG8gbm90IG5lZWQgdG8gcHJvdmlkZSBpdCBpbiByZXF1ZXN0c1xuICBjb25uZWN0VXJsOiBzdHJpbmc7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIGxhYmVscz86IG9iamVjdDtcbiAgYW5ub3RhdGlvbnM/OiB7XG4gICAgY3J5b3N0YXQ6IG9iamVjdDtcbiAgICBwbGF0Zm9ybTogb2JqZWN0O1xuICB9O1xufVxuXG5jbGFzcyBUYXJnZXRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFyZ2V0OiBTdWJqZWN0PFRhcmdldD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KE5PX1RBUkdFVCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhGYWlsdXJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0aFJldHJ5OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3NsRmFpbHVyZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgc2V0VGFyZ2V0KHRhcmdldDogVGFyZ2V0KTogdm9pZCB7XG4gICAgaWYgKHRhcmdldCA9PT0gTk9fVEFSR0VUIHx8ICEhdGFyZ2V0LmNvbm5lY3RVcmwpIHtcbiAgICAgIHRoaXMuX3RhcmdldC5uZXh0KHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFsZm9ybWVkIHRhcmdldCcpO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldCgpOiBPYnNlcnZhYmxlPFRhcmdldD4ge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhdXRoRmFpbHVyZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXV0aEZhaWx1cmUuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXRBdXRoRmFpbHVyZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRoRmFpbHVyZS5uZXh0KCk7XG4gIH1cblxuICBhdXRoUmV0cnkoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhSZXRyeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldEF1dGhSZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRoUmV0cnkubmV4dCgpO1xuICB9XG5cbiAgc3NsRmFpbHVyZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc3NsRmFpbHVyZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldFNzbEZhaWx1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5fc3NsRmFpbHVyZS5uZXh0KCk7XG4gIH1cbn1cblxuY29uc3QgVGFyZ2V0SW5zdGFuY2UgPSBuZXcgVGFyZ2V0U2VydmljZSgpO1xuXG5leHBvcnQgeyBUYXJnZXRTZXJ2aWNlLCBUYXJnZXRJbnN0YW5jZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///38386\n')},74687:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "bZ": () => (/* binding */ removeFromLocalStorage),\n/* harmony export */ "fp": () => (/* binding */ getFromLocalStorage),\n/* harmony export */ "m8": () => (/* binding */ saveToLocalStorage)\n/* harmony export */ });\n/* unused harmony export LocalStorageKey */\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar LocalStorageKey;\n(function (LocalStorageKey) {\n LocalStorageKey[LocalStorageKey["ASSET_VERSION"] = 0] = "ASSET_VERSION";\n LocalStorageKey[LocalStorageKey["FEATURE_LEVEL"] = 1] = "FEATURE_LEVEL";\n LocalStorageKey[LocalStorageKey["DASHBOARD_CFG"] = 2] = "DASHBOARD_CFG";\n LocalStorageKey[LocalStorageKey["AUTOMATED_ANALYSIS_FILTERS"] = 3] = "AUTOMATED_ANALYSIS_FILTERS";\n LocalStorageKey[LocalStorageKey["TARGET_RECORDING_FILTERS"] = 4] = "TARGET_RECORDING_FILTERS";\n LocalStorageKey[LocalStorageKey["CREDENTIAL_LOCATION"] = 5] = "CREDENTIAL_LOCATION";\n LocalStorageKey[LocalStorageKey["TARGET"] = 6] = "TARGET";\n LocalStorageKey[LocalStorageKey["TARGET_FAVORITES"] = 7] = "TARGET_FAVORITES";\n LocalStorageKey[LocalStorageKey["TOPOLOGY_GRAPH_POSITONS"] = 8] = "TOPOLOGY_GRAPH_POSITONS";\n LocalStorageKey[LocalStorageKey["TOPOLOGY_NODE_POSITIONS"] = 9] = "TOPOLOGY_NODE_POSITIONS";\n LocalStorageKey[LocalStorageKey["TOPOLOGY_CONFIG"] = 10] = "TOPOLOGY_CONFIG";\n LocalStorageKey[LocalStorageKey["TOPOLOGY_FILTERS"] = 11] = "TOPOLOGY_FILTERS";\n LocalStorageKey[LocalStorageKey["AUTO_REFRESH_ENABLED"] = 12] = "AUTO_REFRESH_ENABLED";\n LocalStorageKey[LocalStorageKey["AUTO_REFRESH_PERIOD"] = 13] = "AUTO_REFRESH_PERIOD";\n LocalStorageKey[LocalStorageKey["AUTO_REFRESH_UNITS"] = 14] = "AUTO_REFRESH_UNITS";\n LocalStorageKey[LocalStorageKey["AUTOMATED_ANALYSIS_RECORDING_CONFIG"] = 15] = "AUTOMATED_ANALYSIS_RECORDING_CONFIG";\n LocalStorageKey[LocalStorageKey["CHART_CONTROLLER_CONFIG"] = 16] = "CHART_CONTROLLER_CONFIG";\n LocalStorageKey[LocalStorageKey["DELETION_DIALOGS_ENABLED"] = 17] = "DELETION_DIALOGS_ENABLED";\n LocalStorageKey[LocalStorageKey["VISIBLE_NOTIFICATIONS_COUNT"] = 18] = "VISIBLE_NOTIFICATIONS_COUNT";\n LocalStorageKey[LocalStorageKey["NOTIFICATIONS_ENABLED"] = 19] = "NOTIFICATIONS_ENABLED";\n LocalStorageKey[LocalStorageKey["WEBSOCKET_DEBOUNCE_MS"] = 20] = "WEBSOCKET_DEBOUNCE_MS";\n LocalStorageKey[LocalStorageKey["DATETIME_FORMAT"] = 21] = "DATETIME_FORMAT";\n LocalStorageKey[LocalStorageKey["MATCH_EXPRES_VIS_GRAPH_POSITIONS"] = 22] = "MATCH_EXPRES_VIS_GRAPH_POSITIONS";\n LocalStorageKey[LocalStorageKey["MATCH_EXPRES_VIS_NODE_POSITIONS"] = 23] = "MATCH_EXPRES_VIS_NODE_POSITIONS";\n LocalStorageKey[LocalStorageKey["THEME"] = 24] = "THEME";\n})(LocalStorageKey || (LocalStorageKey = {}));\nvar getFromLocalStorage = function (key, defaultValue) {\n if (typeof window === \'undefined\') {\n return defaultValue;\n }\n try {\n var item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : defaultValue;\n }\n catch (error) {\n return defaultValue;\n }\n};\nvar saveToLocalStorage = function (key, value, error) {\n try {\n if (typeof window !== \'undefined\') {\n window.localStorage.setItem(key, JSON.stringify(value));\n }\n }\n catch (err) {\n console.warn(err);\n error && error();\n }\n};\nvar removeFromLocalStorage = function (key, error) {\n try {\n if (typeof window !== \'undefined\') {\n window.localStorage.removeItem(key);\n }\n }\n catch (err) {\n console.warn(err);\n error && error();\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ2ODcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQUNILHVEQUF1RDtBQUN2RCxJQUFZLGVBMEJYO0FBMUJELFdBQVksZUFBZTtJQUN6Qix1RUFBYTtJQUNiLHVFQUFhO0lBQ2IsdUVBQWE7SUFDYixpR0FBMEI7SUFDMUIsNkZBQXdCO0lBQ3hCLG1GQUFtQjtJQUNuQix5REFBTTtJQUNOLDZFQUFnQjtJQUNoQiwyRkFBdUI7SUFDdkIsMkZBQXVCO0lBQ3ZCLDRFQUFlO0lBQ2YsOEVBQWdCO0lBQ2hCLHNGQUFvQjtJQUNwQixvRkFBbUI7SUFDbkIsa0ZBQWtCO0lBQ2xCLG9IQUFtQztJQUNuQyw0RkFBdUI7SUFDdkIsOEZBQXdCO0lBQ3hCLG9HQUEyQjtJQUMzQix3RkFBcUI7SUFDckIsd0ZBQXFCO0lBQ3JCLDRFQUFlO0lBQ2YsOEdBQWdDO0lBQ2hDLDRHQUErQjtJQUMvQix3REFBSztBQUNQLENBQUMsRUExQlcsZUFBZSxLQUFmLGVBQWUsUUEwQjFCO0FBSU0sSUFBTSxtQkFBbUIsR0FBRyxVQUFDLEdBQTJCLEVBQUUsWUFBaUI7SUFDaEYsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDakMsT0FBTyxZQUFZLENBQUM7S0FDckI7SUFDRCxJQUFJO1FBQ0YsSUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUMvQztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxZQUFZLENBQUM7S0FDckI7QUFDSCxDQUFDLENBQUM7QUFFSyxJQUFNLGtCQUFrQixHQUFHLFVBQUMsR0FBMkIsRUFBRSxLQUFVLEVBQUUsS0FBa0I7SUFDNUYsSUFBSTtRQUNGLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekQ7S0FDRjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7S0FDbEI7QUFDSCxDQUFDLENBQUM7QUFFSyxJQUFNLHNCQUFzQixHQUFHLFVBQUMsR0FBMkIsRUFBRSxLQUFrQjtJQUNwRixJQUFJO1FBQ0YsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7S0FDRjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7S0FDbEI7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL0xvY2FsU3RvcmFnZS50cz9jNDYzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuZXhwb3J0IGVudW0gTG9jYWxTdG9yYWdlS2V5IHtcbiAgQVNTRVRfVkVSU0lPTixcbiAgRkVBVFVSRV9MRVZFTCxcbiAgREFTSEJPQVJEX0NGRyxcbiAgQVVUT01BVEVEX0FOQUxZU0lTX0ZJTFRFUlMsXG4gIFRBUkdFVF9SRUNPUkRJTkdfRklMVEVSUyxcbiAgQ1JFREVOVElBTF9MT0NBVElPTixcbiAgVEFSR0VULFxuICBUQVJHRVRfRkFWT1JJVEVTLFxuICBUT1BPTE9HWV9HUkFQSF9QT1NJVE9OUyxcbiAgVE9QT0xPR1lfTk9ERV9QT1NJVElPTlMsXG4gIFRPUE9MT0dZX0NPTkZJRyxcbiAgVE9QT0xPR1lfRklMVEVSUyxcbiAgQVVUT19SRUZSRVNIX0VOQUJMRUQsXG4gIEFVVE9fUkVGUkVTSF9QRVJJT0QsXG4gIEFVVE9fUkVGUkVTSF9VTklUUyxcbiAgQVVUT01BVEVEX0FOQUxZU0lTX1JFQ09SRElOR19DT05GSUcsXG4gIENIQVJUX0NPTlRST0xMRVJfQ09ORklHLFxuICBERUxFVElPTl9ESUFMT0dTX0VOQUJMRUQsXG4gIFZJU0lCTEVfTk9USUZJQ0FUSU9OU19DT1VOVCxcbiAgTk9USUZJQ0FUSU9OU19FTkFCTEVELFxuICBXRUJTT0NLRVRfREVCT1VOQ0VfTVMsXG4gIERBVEVUSU1FX0ZPUk1BVCxcbiAgTUFUQ0hfRVhQUkVTX1ZJU19HUkFQSF9QT1NJVElPTlMsXG4gIE1BVENIX0VYUFJFU19WSVNfTk9ERV9QT1NJVElPTlMsXG4gIFRIRU1FLFxufVxuXG5leHBvcnQgdHlwZSBMb2NhbFN0b3JhZ2VLZXlTdHJpbmdzID0ga2V5b2YgdHlwZW9mIExvY2FsU3RvcmFnZUtleTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5OiBMb2NhbFN0b3JhZ2VLZXlTdHJpbmdzLCBkZWZhdWx0VmFsdWU6IGFueSk6IGFueSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBKU09OLnBhcnNlKGl0ZW0pIDogZGVmYXVsdFZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlVG9Mb2NhbFN0b3JhZ2UgPSAoa2V5OiBMb2NhbFN0b3JhZ2VLZXlTdHJpbmdzLCB2YWx1ZTogYW55LCBlcnJvcj86ICgpID0+IHZvaWQpID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICBlcnJvciAmJiBlcnJvcigpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZSA9IChrZXk6IExvY2FsU3RvcmFnZUtleVN0cmluZ3MsIGVycm9yPzogKCkgPT4gdm9pZCk6IGFueSA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUud2FybihlcnIpO1xuICAgIGVycm9yICYmIGVycm9yKCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///74687\n')},73484:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ useSort)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);\n\nvar useSort = function () {\n var _a = react__WEBPACK_IMPORTED_MODULE_0__.useState({}), sortBy = _a[0], setSortBy = _a[1];\n var getSortParams = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (columnIndex) { return ({\n sortBy: sortBy,\n onSort: function (_event, index, direction) {\n setSortBy({\n index: index,\n direction: direction,\n });\n },\n columnIndex: columnIndex,\n }); }, [sortBy, setSortBy]);\n return [sortBy, getSortParams];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM0ODQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQXNDK0I7QUFFeEIsSUFBTSxPQUFPLEdBQUc7SUFDZixTQUFzQiwyQ0FBYyxDQUFDLEVBQWEsQ0FBQyxFQUFsRCxNQUFNLFVBQUUsU0FBUyxRQUFpQyxDQUFDO0lBQzFELElBQU0sYUFBYSxHQUFHLDhDQUFpQixDQUNyQyxVQUFDLFdBQW1CLElBQXNCLFFBQUM7UUFDekMsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsVUFBQyxNQUF3QixFQUFFLEtBQUssRUFBRSxTQUFTO1lBQ2pELFNBQVMsQ0FBQztnQkFDUixLQUFLLEVBQUUsS0FBSztnQkFDWixTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsV0FBVztLQUNaLENBQUMsRUFUd0MsQ0FTeEMsRUFDRixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FDcEIsQ0FBQztJQUNGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC91dGlscy91c2VTb3J0LnRzPzY3MDQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBJU29ydEJ5LCBUaFByb3BzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgY29uc3QgdXNlU29ydCA9ICgpOiBbSVNvcnRCeSwgKGNvbHVtbkluZGV4OiBudW1iZXIpID0+IFRoUHJvcHNbJ3NvcnQnXV0gPT4ge1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gUmVhY3QudXNlU3RhdGUoe30gYXMgSVNvcnRCeSk7XG4gIGNvbnN0IGdldFNvcnRQYXJhbXMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY29sdW1uSW5kZXg6IG51bWJlcik6IFRoUHJvcHNbJ3NvcnQnXSA9PiAoe1xuICAgICAgc29ydEJ5OiBzb3J0QnksXG4gICAgICBvblNvcnQ6IChfZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQsIGluZGV4LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgc2V0U29ydEJ5KHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgIH0pLFxuICAgIFtzb3J0QnksIHNldFNvcnRCeV1cbiAgKTtcbiAgcmV0dXJuIFtzb3J0QnksIGdldFNvcnRQYXJhbXNdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///73484\n')},61139:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "P": () => (/* binding */ useSubscriptions)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nfunction useSubscriptions() {\n var subsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef([]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () { return function () { return subsRef.current.forEach(function (s) { return s.unsubscribe(); }); }; }, []);\n var addSubscription = function (sub) {\n subsRef.current = subsRef.current.concat([sub]);\n };\n return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(addSubscription, [subsRef]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjExMzkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFDNEI7QUFHeEIsU0FBUyxnQkFBZ0I7SUFDOUIsSUFBTSxPQUFPLEdBQUcseUNBQVksQ0FBQyxFQUFvQixDQUFDLENBQUM7SUFFbkQsNENBQWUsQ0FBQyxjQUFNLHFCQUFNLGNBQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBZSxJQUFXLFFBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBZixDQUFlLENBQUMsRUFBbkUsQ0FBbUUsRUFBekUsQ0FBeUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVyRyxJQUFNLGVBQWUsR0FBRyxVQUFDLEdBQWlCO1FBQ3hDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQztJQUVGLE9BQU8sOENBQWlCLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC91dGlscy91c2VTdWJzY3JpcHRpb25zLnRzPzMzYmQiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN1YnNjcmlwdGlvbnMoKSB7XG4gIGNvbnN0IHN1YnNSZWYgPSBSZWFjdC51c2VSZWYoW10gYXMgU3Vic2NyaXB0aW9uW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiAoKSA9PiBzdWJzUmVmLmN1cnJlbnQuZm9yRWFjaCgoczogU3Vic2NyaXB0aW9uKTogdm9pZCA9PiBzLnVuc3Vic2NyaWJlKCkpLCBbXSk7XG5cbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gKHN1YjogU3Vic2NyaXB0aW9uKTogdm9pZCA9PiB7XG4gICAgc3Vic1JlZi5jdXJyZW50ID0gc3Vic1JlZi5jdXJyZW50LmNvbmNhdChbc3ViXSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKGFkZFN1YnNjcmlwdGlvbiwgW3N1YnNSZWZdKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61139\n')},52648:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"B5\": () => (/* binding */ calculateAnalysisTimer),\n/* harmony export */ \"BP\": () => (/* binding */ cleanDataId),\n/* harmony export */ \"FU\": () => (/* binding */ jvmIdToSubdirectoryName),\n/* harmony export */ \"IU\": () => (/* binding */ isAssetNew),\n/* harmony export */ \"LF\": () => (/* binding */ swap),\n/* harmony export */ \"MR\": () => (/* binding */ switchTab),\n/* harmony export */ \"NZ\": () => (/* binding */ StreamOf),\n/* harmony export */ \"O5\": () => (/* binding */ getDisplayFieldName),\n/* harmony export */ \"QX\": () => (/* binding */ openTabForUrl),\n/* harmony export */ \"T9\": () => (/* binding */ evaluateTargetWithExpr),\n/* harmony export */ \"ZR\": () => (/* binding */ createBlobURL),\n/* harmony export */ \"fr\": () => (/* binding */ getActiveTab),\n/* harmony export */ \"mh\": () => (/* binding */ accessibleRouteChangeHandler),\n/* harmony export */ \"o4\": () => (/* binding */ splitWordsOnUppercase),\n/* harmony export */ \"pB\": () => (/* binding */ move),\n/* harmony export */ \"rg\": () => (/* binding */ sortResources),\n/* harmony export */ \"tO\": () => (/* binding */ portalRoot),\n/* harmony export */ \"td\": () => (/* binding */ formatBytes),\n/* harmony export */ \"un\": () => (/* binding */ hashCode),\n/* harmony export */ \"xD\": () => (/* binding */ clickOutside)\n/* harmony export */ });\n/* unused harmony exports sizeUnits, getValue, semverRegex, getSemVer, compareSemVer, utf8ToBase32 */\n/* harmony import */ var _app_Shared_Services_Api_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(68038);\n/* harmony import */ var _patternfly_react_table__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(83360);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(96486);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(86515);\n/* harmony import */ var _LocalStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74687);\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the \"Software\"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a \"Larger Work\" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\nvar SECOND_MILLIS = 1000;\nvar MINUTE_MILLIS = 60 * SECOND_MILLIS;\nvar HOUR_MILLIS = 60 * MINUTE_MILLIS;\nvar DAY_MILLIS = 24 * HOUR_MILLIS;\n// [ 0, 1, 2, 3 ] array\n// 0 1 2 3 indexes\n// { 0 | 1 | 2 | 3 | 4 } gap indices (drop zones)\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction move(arr, from, gapIndex) {\n if (gapIndex > from) {\n gapIndex--;\n }\n arr.splice(gapIndex, 0, arr.splice(from, 1)[0]);\n return arr;\n}\nfunction swap(arr, from, to) {\n arr[from] = arr.splice(to, 1, arr[from])[0];\n return arr;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\nvar openTabForUrl = function (url) {\n var anchor = document.createElement('a');\n anchor.setAttribute('href', url);\n anchor.setAttribute('target', '_blank');\n anchor.setAttribute('style', 'display: none; visibility: hidden;');\n anchor.click();\n anchor.remove();\n};\nvar createBlobURL = function (content, contentType, timeout) {\n if (timeout === void 0) { timeout = 1000; }\n var blob = new Blob([content], { type: contentType });\n var url = window.URL.createObjectURL(blob);\n setTimeout(function () { return window.URL.revokeObjectURL(url); }, timeout);\n return url;\n};\nfunction accessibleRouteChangeHandler() {\n return window.setTimeout(function () {\n var mainContainer = document.getElementById('primary-app-container');\n if (mainContainer) {\n mainContainer.focus();\n }\n }, 50);\n}\nvar hashCode = function (str) {\n var hash = 0;\n for (var i = 0; i < str.length; i++) {\n hash = (hash << 5) - hash + str.charCodeAt(i);\n hash |= 0; // Force 32-bit number\n }\n return hash;\n};\nvar sizeUnits = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\nvar formatBytes = function (bytes, decimals) {\n if (decimals === void 0) { decimals = 2; }\n if (bytes <= 0)\n return '0 B';\n var k = 1024; // 1 KB\n var dm = Math.max(decimals, 0); // Decimal places\n var i = Math.floor(Math.log(bytes) / Math.log(k));\n return \"\".concat(parseFloat((bytes / Math.pow(k, i)).toFixed(dm)), \" \").concat(sizeUnits[i]);\n};\nvar calculateAnalysisTimer = function (reportTime) {\n var interval, timerQuantity, timerUnits;\n var now = Date.now();\n var reportMillis = now - reportTime;\n if (reportMillis < MINUTE_MILLIS) {\n timerQuantity = Math.round(reportMillis / SECOND_MILLIS);\n interval = SECOND_MILLIS - (reportMillis % SECOND_MILLIS);\n timerUnits = 'second';\n }\n else if (reportMillis < HOUR_MILLIS) {\n timerQuantity = Math.round(reportMillis / MINUTE_MILLIS);\n interval = MINUTE_MILLIS - (reportMillis % MINUTE_MILLIS);\n timerUnits = 'minute';\n }\n else if (reportMillis < DAY_MILLIS) {\n timerQuantity = Math.round(reportMillis / HOUR_MILLIS);\n interval = HOUR_MILLIS - (reportMillis % HOUR_MILLIS);\n timerUnits = 'hour';\n }\n else {\n timerQuantity = Math.round(reportMillis / DAY_MILLIS);\n interval = DAY_MILLIS - reportMillis * DAY_MILLIS;\n timerUnits = 'day';\n }\n return {\n quantity: timerQuantity,\n unit: timerUnits,\n interval: interval,\n };\n};\nvar splitWordsOnUppercase = function (str, capitalizeFirst) {\n var words = str.split(/(?=[A-Z])/);\n if (capitalizeFirst && words.length) {\n var first = words[0];\n words[0] = first.substring(0, 1).toUpperCase() + first.slice(1);\n }\n return words;\n};\nvar needUppercase = /(url|id|jvm)/i;\nvar getDisplayFieldName = function (fieldName) {\n return splitWordsOnUppercase(fieldName)\n .map(function (word) {\n if (needUppercase.test(word)) {\n return lodash__WEBPACK_IMPORTED_MODULE_1___default().upperCase(word);\n }\n return lodash__WEBPACK_IMPORTED_MODULE_1___default().capitalize(word);\n })\n .join(' ');\n};\nvar evaluateTargetWithExpr = function (target, matchExpression) {\n var f = new Function('target', \"return \".concat(matchExpression));\n return f(lodash__WEBPACK_IMPORTED_MODULE_1___default().cloneDeep(target));\n};\nvar portalRoot = document.getElementById('portal-root') || document.body;\nvar cleanDataId = function (key) {\n return key.toLocaleLowerCase().replace(/\\s+/g, '');\n};\nvar StreamOf = /** @class */ (function () {\n function StreamOf(first) {\n this._stream$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__/* .BehaviorSubject */ .X(first);\n }\n StreamOf.prototype.get = function () {\n return this._stream$.asObservable();\n };\n StreamOf.prototype.set = function (value) {\n this._stream$.next(value);\n };\n return StreamOf;\n}());\n\nvar mapper = function (tableColumns, index) {\n var _a;\n if (index === undefined) {\n return undefined;\n }\n return (_a = tableColumns[index]) === null || _a === void 0 ? void 0 : _a.keyPaths;\n};\nvar getTransform = function (tableColumns, index) {\n var _a;\n if (index === undefined) {\n return undefined;\n }\n return (_a = tableColumns[index]) === null || _a === void 0 ? void 0 : _a.transform;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar getValue = function (object, keyPath) {\n return keyPath.reduce(function (acc, key) { return acc[key]; }, object);\n};\n// Returned a newly sorted array)\nvar sortResources = function (_a, resources, tableColumns) {\n var index = _a.index, direction = _a.direction;\n var keyPaths = mapper(tableColumns, index);\n if (!keyPaths || !keyPaths.length) {\n return __spreadArray([], resources, true);\n }\n var transform = getTransform(tableColumns, index);\n var sorted = __spreadArray([], resources, true).sort(function (a, b) {\n var aVal = getValue(a, keyPaths);\n var bVal = getValue(b, keyPaths);\n if (transform) {\n aVal = transform(aVal, a);\n bVal = transform(bVal, b);\n }\n return aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n });\n return direction === _patternfly_react_table__WEBPACK_IMPORTED_MODULE_4__/* .SortByDirection.asc */ .B.asc ? sorted : sorted.reverse();\n};\nvar switchTab = function (history, pathname, search, _a) {\n var tabKey = _a.tabKey, tabValue = _a.tabValue;\n var query = new URLSearchParams(search);\n query.set(tabKey, tabValue);\n history.push(\"\".concat(pathname, \"?\").concat(query.toString()));\n};\nvar getActiveTab = function (search, key, supportedTabs, defaultTab) {\n var query = new URLSearchParams(search);\n var tab = query.get(key) || defaultTab;\n return supportedTabs.includes(tab) ? tab : defaultTab;\n};\nvar clickOutside = function () { return document.body.click(); };\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nvar semverRegex = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nvar getSemVer = function (str) {\n var matched = str.match(semverRegex);\n if (matched) {\n var _1 = matched[0], major = matched[1], minor = matched[2], patch = matched[3];\n return {\n major: Number(major),\n minor: Number(minor),\n patch: Number(patch),\n };\n }\n return undefined;\n};\nvar convert = function (ver) { return ver.major * 100 + ver.minor * 10 + ver.patch; };\nvar compareSemVer = function (ver1, ver2) {\n var _ver1 = convert(ver1);\n var _ver2 = convert(ver2);\n return _ver1 > _ver2 ? 1 : _ver1 < _ver2 ? -1 : 0;\n};\nvar isAssetNew = function (currVerStr) {\n var oldVer = getSemVer((0,_LocalStorage__WEBPACK_IMPORTED_MODULE_2__/* .getFromLocalStorage */ .fp)('ASSET_VERSION', '0.0.0'));\n var currVer = getSemVer(currVerStr);\n if (!currVer) {\n throw new Error(\"Invalid asset version: \".concat(currVer));\n }\n // Invalid (old) version is ignored.\n return !oldVer || compareSemVer(currVer, oldVer) > 0;\n};\nvar utf8ToBase32 = function (str) {\n var encoder = new TextEncoder();\n var byteArray = encoder.encode(str);\n var BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n var bits = 0;\n var value = 0;\n var base32 = '';\n for (var i = 0; i < byteArray.length; i++) {\n value = (value << 8) | byteArray[i];\n bits += 8;\n while (bits >= 5) {\n bits -= 5;\n base32 += BASE32_ALPHABET[(value >>> bits) & 0x1f];\n }\n }\n if (bits > 0) {\n value <<= 5 - bits;\n base32 += BASE32_ALPHABET[value & 0x1f];\n }\n var paddingLength = base32.length % 8 !== 0 ? 8 - (base32.length % 8) : 0;\n for (var i = 0; i < paddingLength; i++) {\n base32 += '=';\n }\n return base32;\n};\nvar jvmIdToSubdirectoryName = function (jvmId) {\n if (jvmId === _app_Shared_Services_Api_service__WEBPACK_IMPORTED_MODULE_0__/* .UPLOADS_SUBDIRECTORY */ .ld || jvmId === 'lost') {\n return jvmId;\n }\n return utf8ToBase32(jvmId);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RCxJQUFJLEtBQUssS0FBSyw0RkFBb0IsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3RELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL3V0aWxzLnRzPzUwNmEiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IFVQTE9BRFNfU1VCRElSRUNUT1JZIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVNvcnRCeSwgU29ydEJ5RGlyZWN0aW9uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0RnJvbUxvY2FsU3RvcmFnZSB9IGZyb20gJy4vTG9jYWxTdG9yYWdlJztcblxuY29uc3QgU0VDT05EX01JTExJUyA9IDEwMDA7XG5jb25zdCBNSU5VVEVfTUlMTElTID0gNjAgKiBTRUNPTkRfTUlMTElTO1xuY29uc3QgSE9VUl9NSUxMSVMgPSA2MCAqIE1JTlVURV9NSUxMSVM7XG5jb25zdCBEQVlfTUlMTElTID0gMjQgKiBIT1VSX01JTExJUztcblxuLy8gWyAgICAgMCwgICAgMSwgICAgMiwgICAgMyAgICAgXSBhcnJheVxuLy8gICAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgICBpbmRleGVzXG4vLyB7ICAwICB8ICAxICB8ICAyICB8ICAzICB8ICA0ICB9IGdhcCBpbmRpY2VzIChkcm9wIHpvbmVzKVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vdmUoYXJyOiBhbnlbXSwgZnJvbTogbnVtYmVyLCBnYXBJbmRleDogbnVtYmVyKSB7XG4gIGlmIChnYXBJbmRleCA+IGZyb20pIHtcbiAgICBnYXBJbmRleC0tO1xuICB9XG4gIGFyci5zcGxpY2UoZ2FwSW5kZXgsIDAsIGFyci5zcGxpY2UoZnJvbSwgMSlbMF0pO1xuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3dhcChhcnI6IGFueVtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpIHtcbiAgYXJyW2Zyb21dID0gYXJyLnNwbGljZSh0bywgMSwgYXJyW2Zyb21dKVswXTtcbiAgcmV0dXJuIGFycjtcbn1cbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5leHBvcnQgY29uc3Qgb3BlblRhYkZvclVybCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBjb25zdCBhbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICBhbmNob3Iuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6IG5vbmU7IHZpc2liaWxpdHk6IGhpZGRlbjsnKTtcblxuICBhbmNob3IuY2xpY2soKTtcbiAgYW5jaG9yLnJlbW92ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJsb2JVUkwgPSAoY29udGVudDogc3RyaW5nLCBjb250ZW50VHlwZTogc3RyaW5nLCB0aW1lb3V0ID0gMTAwMCkgPT4ge1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NvbnRlbnRdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgcmV0dXJuIHVybDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhY2Nlc3NpYmxlUm91dGVDaGFuZ2VIYW5kbGVyKCkge1xuICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IG1haW5Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpbWFyeS1hcHAtY29udGFpbmVyJyk7XG4gICAgaWYgKG1haW5Db250YWluZXIpIHtcbiAgICAgIG1haW5Db250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH0sIDUwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGhhc2hDb2RlID0gKHN0cjogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgbGV0IGhhc2ggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBoYXNoIHw9IDA7IC8vIEZvcmNlIDMyLWJpdCBudW1iZXJcbiAgfVxuICByZXR1cm4gaGFzaDtcbn07XG5cbmV4cG9ydCBjb25zdCBzaXplVW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEJ5dGVzID0gKGJ5dGVzOiBudW1iZXIsIGRlY2ltYWxzID0gMik6IHN0cmluZyA9PiB7XG4gIGlmIChieXRlcyA8PSAwKSByZXR1cm4gJzAgQic7XG5cbiAgY29uc3QgayA9IDEwMjQ7IC8vIDEgS0JcbiAgY29uc3QgZG0gPSBNYXRoLm1heChkZWNpbWFscywgMCk7IC8vIERlY2ltYWwgcGxhY2VzXG5cbiAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSl9ICR7c2l6ZVVuaXRzW2ldfWA7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9tYXRlZEFuYWx5c2lzVGltZXJPYmplY3Qge1xuICBxdWFudGl0eTogbnVtYmVyO1xuICB1bml0OiBzdHJpbmc7XG4gIGludGVydmFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVBbmFseXNpc1RpbWVyID0gKHJlcG9ydFRpbWU6IG51bWJlcik6IEF1dG9tYXRlZEFuYWx5c2lzVGltZXJPYmplY3QgPT4ge1xuICBsZXQgaW50ZXJ2YWwsIHRpbWVyUXVhbnRpdHksIHRpbWVyVW5pdHM7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IHJlcG9ydE1pbGxpcyA9IG5vdyAtIHJlcG9ydFRpbWU7XG4gIGlmIChyZXBvcnRNaWxsaXMgPCBNSU5VVEVfTUlMTElTKSB7XG4gICAgdGltZXJRdWFudGl0eSA9IE1hdGgucm91bmQocmVwb3J0TWlsbGlzIC8gU0VDT05EX01JTExJUyk7XG4gICAgaW50ZXJ2YWwgPSBTRUNPTkRfTUlMTElTIC0gKHJlcG9ydE1pbGxpcyAlIFNFQ09ORF9NSUxMSVMpO1xuICAgIHRpbWVyVW5pdHMgPSAnc2Vjb25kJztcbiAgfSBlbHNlIGlmIChyZXBvcnRNaWxsaXMgPCBIT1VSX01JTExJUykge1xuICAgIHRpbWVyUXVhbnRpdHkgPSBNYXRoLnJvdW5kKHJlcG9ydE1pbGxpcyAvIE1JTlVURV9NSUxMSVMpO1xuICAgIGludGVydmFsID0gTUlOVVRFX01JTExJUyAtIChyZXBvcnRNaWxsaXMgJSBNSU5VVEVfTUlMTElTKTtcbiAgICB0aW1lclVuaXRzID0gJ21pbnV0ZSc7XG4gIH0gZWxzZSBpZiAocmVwb3J0TWlsbGlzIDwgREFZX01JTExJUykge1xuICAgIHRpbWVyUXVhbnRpdHkgPSBNYXRoLnJvdW5kKHJlcG9ydE1pbGxpcyAvIEhPVVJfTUlMTElTKTtcbiAgICBpbnRlcnZhbCA9IEhPVVJfTUlMTElTIC0gKHJlcG9ydE1pbGxpcyAlIEhPVVJfTUlMTElTKTtcbiAgICB0aW1lclVuaXRzID0gJ2hvdXInO1xuICB9IGVsc2Uge1xuICAgIHRpbWVyUXVhbnRpdHkgPSBNYXRoLnJvdW5kKHJlcG9ydE1pbGxpcyAvIERBWV9NSUxMSVMpO1xuICAgIGludGVydmFsID0gREFZX01JTExJUyAtIHJlcG9ydE1pbGxpcyAqIERBWV9NSUxMSVM7XG4gICAgdGltZXJVbml0cyA9ICdkYXknO1xuICB9XG4gIHJldHVybiB7XG4gICAgcXVhbnRpdHk6IHRpbWVyUXVhbnRpdHksXG4gICAgdW5pdDogdGltZXJVbml0cyxcbiAgICBpbnRlcnZhbDogaW50ZXJ2YWwsXG4gIH0gYXMgQXV0b21hdGVkQW5hbHlzaXNUaW1lck9iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBzcGxpdFdvcmRzT25VcHBlcmNhc2UgPSAoc3RyOiBzdHJpbmcsIGNhcGl0YWxpemVGaXJzdD86IGJvb2xlYW4pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHdvcmRzID0gc3RyLnNwbGl0KC8oPz1bQS1aXSkvKTtcbiAgaWYgKGNhcGl0YWxpemVGaXJzdCAmJiB3b3Jkcy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdCA9IHdvcmRzWzBdO1xuICAgIHdvcmRzWzBdID0gZmlyc3Quc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBmaXJzdC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gd29yZHM7XG59O1xuXG5jb25zdCBuZWVkVXBwZXJjYXNlID0gLyh1cmx8aWR8anZtKS9pO1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheUZpZWxkTmFtZSA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gc3BsaXRXb3Jkc09uVXBwZXJjYXNlKGZpZWxkTmFtZSlcbiAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICBpZiAobmVlZFVwcGVyY2FzZS50ZXN0KHdvcmQpKSB7XG4gICAgICAgIHJldHVybiBfLnVwcGVyQ2FzZSh3b3JkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfLmNhcGl0YWxpemUod29yZCk7XG4gICAgfSlcbiAgICAuam9pbignICcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlVGFyZ2V0V2l0aEV4cHIgPSAodGFyZ2V0OiB1bmtub3duLCBtYXRjaEV4cHJlc3Npb246IHN0cmluZykgPT4ge1xuICBjb25zdCBmID0gbmV3IEZ1bmN0aW9uKCd0YXJnZXQnLCBgcmV0dXJuICR7bWF0Y2hFeHByZXNzaW9ufWApO1xuICByZXR1cm4gZihfLmNsb25lRGVlcCh0YXJnZXQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3J0YWxSb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcnRhbC1yb290JykgfHwgZG9jdW1lbnQuYm9keTtcblxuZXhwb3J0IGNvbnN0IGNsZWFuRGF0YUlkID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJycpO1xufTtcblxuZXhwb3J0IGNsYXNzIFN0cmVhbU9mPFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtJDogQmVoYXZpb3JTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKGZpcnN0OiBUKSB7XG4gICAgdGhpcy5fc3RyZWFtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4oZmlyc3QpO1xuICB9XG5cbiAgZ2V0KCk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdHJlYW0kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2V0KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5fc3RyZWFtJC5uZXh0KHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdG9vbHRpcD86IHN0cmluZztcbiAga2V5UGF0aHM/OiBzdHJpbmdbXTtcbiAgdHJhbnNmb3JtPzogKHZhbHVlOiB1bmtub3duLCBfcmVjOiB1bmtub3duKSA9PiB1bmtub3duO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHdpZHRoPzogbnVtYmVyO1xufVxuXG5jb25zdCBtYXBwZXIgPSAodGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBpbmRleD86IG51bWJlcikgPT4ge1xuICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHRhYmxlQ29sdW1uc1tpbmRleF0/LmtleVBhdGhzO1xufTtcblxuY29uc3QgZ2V0VHJhbnNmb3JtID0gKHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSwgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB0YWJsZUNvbHVtbnNbaW5kZXhdPy50cmFuc2Zvcm07XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgY29uc3QgZ2V0VmFsdWUgPSAob2JqZWN0OiBhbnksIGtleVBhdGg6IHN0cmluZ1tdKSA9PiB7XG4gIHJldHVybiBrZXlQYXRoLnJlZHVjZSgoYWNjLCBrZXkpID0+IGFjY1trZXldLCBvYmplY3QpO1xufTtcblxuLy8gUmV0dXJuZWQgYSBuZXdseSBzb3J0ZWQgYXJyYXkpXG5leHBvcnQgY29uc3Qgc29ydFJlc291cmNlcyA9IDxSPih7IGluZGV4LCBkaXJlY3Rpb24gfTogSVNvcnRCeSwgcmVzb3VyY2VzOiBSW10sIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSk6IFJbXSA9PiB7XG4gIGNvbnN0IGtleVBhdGhzID0gbWFwcGVyKHRhYmxlQ29sdW1ucywgaW5kZXgpO1xuICBpZiAoIWtleVBhdGhzIHx8ICFrZXlQYXRocy5sZW5ndGgpIHtcbiAgICByZXR1cm4gWy4uLnJlc291cmNlc107XG4gIH1cbiAgY29uc3QgdHJhbnNmb3JtID0gZ2V0VHJhbnNmb3JtKHRhYmxlQ29sdW1ucywgaW5kZXgpO1xuICBjb25zdCBzb3J0ZWQgPSBbLi4ucmVzb3VyY2VzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgbGV0IGFWYWwgPSBnZXRWYWx1ZShhLCBrZXlQYXRocyk7XG4gICAgbGV0IGJWYWwgPSBnZXRWYWx1ZShiLCBrZXlQYXRocyk7XG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgYVZhbCA9IHRyYW5zZm9ybShhVmFsLCBhKTtcbiAgICAgIGJWYWwgPSB0cmFuc2Zvcm0oYlZhbCwgYik7XG4gICAgfVxuICAgIHJldHVybiBhVmFsIDwgYlZhbCA/IC0xIDogYVZhbCA+IGJWYWwgPyAxIDogMDtcbiAgfSk7XG4gIHJldHVybiBkaXJlY3Rpb24gPT09IFNvcnRCeURpcmVjdGlvbi5hc2MgPyBzb3J0ZWQgOiBzb3J0ZWQucmV2ZXJzZSgpO1xufTtcblxuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYkNvbmZpZyB7XG4gIHRhYktleTogc3RyaW5nO1xuICB0YWJWYWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3Qgc3dpdGNoVGFiID0gKFxuICBoaXN0b3J5OiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VIaXN0b3J5PixcbiAgcGF0aG5hbWU6IHN0cmluZyxcbiAgc2VhcmNoOiBzdHJpbmcsXG4gIHsgdGFiS2V5LCB0YWJWYWx1ZSB9OiBUYWJDb25maWdcbikgPT4ge1xuICBjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgcXVlcnkuc2V0KHRhYktleSwgdGFiVmFsdWUpO1xuICBoaXN0b3J5LnB1c2goYCR7cGF0aG5hbWV9PyR7cXVlcnkudG9TdHJpbmcoKX1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBY3RpdmVUYWIgPSA8VD4oc2VhcmNoOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzdXBwb3J0ZWRUYWJzOiBUW10sIGRlZmF1bHRUYWI6IFQpID0+IHtcbiAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG4gIGNvbnN0IHRhYiA9IHF1ZXJ5LmdldChrZXkpIHx8IGRlZmF1bHRUYWI7XG4gIHJldHVybiBzdXBwb3J0ZWRUYWJzLmluY2x1ZGVzKHRhYiBhcyBUKSA/ICh0YWIgYXMgVCkgOiBkZWZhdWx0VGFiO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsaWNrT3V0c2lkZSA9ICgpID0+IGRvY3VtZW50LmJvZHkuY2xpY2soKTtcblxuZXhwb3J0IGludGVyZmFjZSBTZW1WZXIge1xuICBtYWpvcjogbnVtYmVyO1xuICBtaW5vcjogbnVtYmVyO1xuICBwYXRjaDogbnVtYmVyO1xufVxuXG4vLyBodHRwczovL3NlbXZlci5vcmcvI2lzLXRoZXJlLWEtc3VnZ2VzdGVkLXJlZ3VsYXItZXhwcmVzc2lvbi1yZWdleC10by1jaGVjay1hLXNlbXZlci1zdHJpbmdcbmV4cG9ydCBjb25zdCBzZW12ZXJSZWdleCA9XG4gIC9eKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKilcXC4oMHxbMS05XVxcZCopKD86LSgoPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikoPzpcXC4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikpKikpPyg/OlxcKyhbMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1WZXIgPSAoc3RyOiBzdHJpbmcpOiBTZW1WZXIgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBtYXRjaGVkID0gc3RyLm1hdGNoKHNlbXZlclJlZ2V4KTtcbiAgaWYgKG1hdGNoZWQpIHtcbiAgICBjb25zdCBbXywgbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBtYXRjaGVkO1xuICAgIHJldHVybiB7XG4gICAgICBtYWpvcjogTnVtYmVyKG1ham9yKSxcbiAgICAgIG1pbm9yOiBOdW1iZXIobWlub3IpLFxuICAgICAgcGF0Y2g6IE51bWJlcihwYXRjaCksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgY29udmVydCA9ICh2ZXI6IFNlbVZlcikgPT4gdmVyLm1ham9yICogMTAwICsgdmVyLm1pbm9yICogMTAgKyB2ZXIucGF0Y2g7XG5cbmV4cG9ydCBjb25zdCBjb21wYXJlU2VtVmVyID0gKHZlcjE6IFNlbVZlciwgdmVyMjogU2VtVmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3QgX3ZlcjEgPSBjb252ZXJ0KHZlcjEpO1xuICBjb25zdCBfdmVyMiA9IGNvbnZlcnQodmVyMik7XG4gIHJldHVybiBfdmVyMSA+IF92ZXIyID8gMSA6IF92ZXIxIDwgX3ZlcjIgPyAtMSA6IDA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBc3NldE5ldyA9IChjdXJyVmVyU3RyOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgb2xkVmVyID0gZ2V0U2VtVmVyKGdldEZyb21Mb2NhbFN0b3JhZ2UoJ0FTU0VUX1ZFUlNJT04nLCAnMC4wLjAnKSk7XG4gIGNvbnN0IGN1cnJWZXIgPSBnZXRTZW1WZXIoY3VyclZlclN0cik7XG5cbiAgaWYgKCFjdXJyVmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFzc2V0IHZlcnNpb246ICR7Y3VyclZlcn1gKTtcbiAgfVxuICAvLyBJbnZhbGlkIChvbGQpIHZlcnNpb24gaXMgaWdub3JlZC5cbiAgcmV0dXJuICFvbGRWZXIgfHwgY29tcGFyZVNlbVZlcihjdXJyVmVyLCBvbGRWZXIpID4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCB1dGY4VG9CYXNlMzIgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IGJ5dGVBcnJheSA9IGVuY29kZXIuZW5jb2RlKHN0cik7XG4gIGNvbnN0IEJBU0UzMl9BTFBIQUJFVCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nyc7XG4gIGxldCBiaXRzID0gMDtcbiAgbGV0IHZhbHVlID0gMDtcbiAgbGV0IGJhc2UzMiA9ICcnO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlQXJyYXlbaV07XG4gICAgYml0cyArPSA4O1xuICAgIHdoaWxlIChiaXRzID49IDUpIHtcbiAgICAgIGJpdHMgLT0gNTtcbiAgICAgIGJhc2UzMiArPSBCQVNFMzJfQUxQSEFCRVRbKHZhbHVlID4+PiBiaXRzKSAmIDB4MWZdO1xuICAgIH1cbiAgfVxuXG4gIGlmIChiaXRzID4gMCkge1xuICAgIHZhbHVlIDw8PSA1IC0gYml0cztcbiAgICBiYXNlMzIgKz0gQkFTRTMyX0FMUEhBQkVUW3ZhbHVlICYgMHgxZl07XG4gIH1cblxuICBjb25zdCBwYWRkaW5nTGVuZ3RoID0gYmFzZTMyLmxlbmd0aCAlIDggIT09IDAgPyA4IC0gKGJhc2UzMi5sZW5ndGggJSA4KSA6IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkZGluZ0xlbmd0aDsgaSsrKSB7XG4gICAgYmFzZTMyICs9ICc9JztcbiAgfVxuXG4gIHJldHVybiBiYXNlMzI7XG59O1xuXG5leHBvcnQgY29uc3QganZtSWRUb1N1YmRpcmVjdG9yeU5hbWUgPSAoanZtSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmIChqdm1JZCA9PT0gVVBMT0FEU19TVUJESVJFQ1RPUlkgfHwganZtSWQgPT09ICdsb3N0Jykge1xuICAgIHJldHVybiBqdm1JZDtcbiAgfVxuICByZXR1cm4gdXRmOFRvQmFzZTMyKGp2bUlkKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52648\n")},83628:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Kd": () => (/* binding */ getLocale),\n/* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "a$": () => (/* binding */ supportedTimezones),\n/* harmony export */ "k1": () => (/* binding */ locales),\n/* harmony export */ "wO": () => (/* binding */ defaultDatetimeFormat)\n/* harmony export */ });\n/* unused harmony exports timezones, localTimezone, UTCTimezone, getTimezone */\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27484);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs_locale_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(79790);\n/* harmony import */ var dayjs_plugin_advancedFormat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28734);\n/* harmony import */ var dayjs_plugin_advancedFormat__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10285);\n/* harmony import */ var dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var dayjs_plugin_localeData__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(96036);\n/* harmony import */ var dayjs_plugin_localeData__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_localeData__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var dayjs_plugin_localizedFormat__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(56176);\n/* harmony import */ var dayjs_plugin_localizedFormat__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_localizedFormat__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var dayjs_plugin_timezone__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(29387);\n/* harmony import */ var dayjs_plugin_timezone__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_timezone__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(70178);\n/* harmony import */ var dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_7__);\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/// \n\n\n\n\n\n\n // dependent on utc plugin\n\ndayjs__WEBPACK_IMPORTED_MODULE_0___default().extend((dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_7___default()));\ndayjs__WEBPACK_IMPORTED_MODULE_0___default().extend((dayjs_plugin_timezone__WEBPACK_IMPORTED_MODULE_6___default()));\ndayjs__WEBPACK_IMPORTED_MODULE_0___default().extend((dayjs_plugin_localeData__WEBPACK_IMPORTED_MODULE_4___default()));\ndayjs__WEBPACK_IMPORTED_MODULE_0___default().extend((dayjs_plugin_localizedFormat__WEBPACK_IMPORTED_MODULE_5___default()));\ndayjs__WEBPACK_IMPORTED_MODULE_0___default().extend((dayjs_plugin_customParseFormat__WEBPACK_IMPORTED_MODULE_3___default()));\ndayjs__WEBPACK_IMPORTED_MODULE_0___default().extend((dayjs_plugin_advancedFormat__WEBPACK_IMPORTED_MODULE_2___default()));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((dayjs__WEBPACK_IMPORTED_MODULE_0___default()));\nvar locales = dayjs_locale_json__WEBPACK_IMPORTED_MODULE_1__.map(function (locale) { return (__assign(__assign({}, locale), { \n // Dynamic locale loading\n // Need to include .js to skip parsing .d.ts\n load: function () { return __webpack_require__(37158)("./".concat(locale.key, ".js")); } })); })\n .sort(function (a, b) { return a.key.localeCompare(b.key); });\nvar getLocale = function (key) {\n return locales.find(function (l) { return l.key === key; });\n};\nvar timezones = (typeof Intl.supportedValuesOf === \'undefined\' ? [] : Intl.supportedValuesOf(\'timeZone\'));\nvar defaultDatetimeFormat = {\n dateLocale: {\n key: \'en\',\n name: \'English\',\n },\n timeZone: {\n // guess current timezone\n full: dayjs__WEBPACK_IMPORTED_MODULE_0___default().tz.guess(),\n short: dayjs__WEBPACK_IMPORTED_MODULE_0___default()().tz(dayjs__WEBPACK_IMPORTED_MODULE_0___default().tz.guess()).format(\'z\'),\n },\n};\nvar localTimezone = {\n full: dayjs__WEBPACK_IMPORTED_MODULE_0___default().tz.guess(),\n short: dayjs__WEBPACK_IMPORTED_MODULE_0___default()().tz(dayjs__WEBPACK_IMPORTED_MODULE_0___default().tz.guess()).format(\'z\'),\n};\nvar UTCTimezone = {\n full: \'UTC\',\n short: \'UTC\',\n};\nvar supportedTimezones = function () {\n return !timezones.length\n ? [localTimezone, UTCTimezone]\n : timezones.map(function (tname) {\n return ({\n full: tname,\n short: dayjs__WEBPACK_IMPORTED_MODULE_0___default()().tz(tname).format(\'z\'), // Get abbreviation\n });\n });\n};\nvar getTimezone = function (short) {\n return supportedTimezones().find(function (t) { return t.short === short; });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUMsS0FBSyxLQUFLLEtBQUssRUFBakIsQ0FBaUIsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9pMThuL2RhdGV0aW1lLnRzPzk0MDUiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGF0ZXRpbWUudHlwaW5ncy5kLnRzXCIgLz5cbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgbG9jYWxlSnNvbiBmcm9tICdkYXlqcy9sb2NhbGUuanNvbic7XG5pbXBvcnQgYWR2YW5jZWRGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2FkdmFuY2VkRm9ybWF0JztcbmltcG9ydCBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xuaW1wb3J0IGxvY2FsZURhdGEgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsZURhdGEnO1xuaW1wb3J0IGxvY2FsaXplZEZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxpemVkRm9ybWF0JztcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnOyAvLyBkZXBlbmRlbnQgb24gdXRjIHBsdWdpblxuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcblxuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpO1xuZGF5anMuZXh0ZW5kKGxvY2FsaXplZEZvcm1hdCk7XG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xuZGF5anMuZXh0ZW5kKGFkdmFuY2VkRm9ybWF0KTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5anM7XG5cbmV4cG9ydCBjb25zdCBsb2NhbGVzID0gbG9jYWxlSnNvblxuICAubWFwKChsb2NhbGUpID0+ICh7XG4gICAgLi4ubG9jYWxlLFxuICAgIC8vIER5bmFtaWMgbG9jYWxlIGxvYWRpbmdcbiAgICAvLyBOZWVkIHRvIGluY2x1ZGUgLmpzIHRvIHNraXAgcGFyc2luZyAuZC50c1xuICAgIGxvYWQ6ICgpID0+IGltcG9ydChgZGF5anMvbG9jYWxlLyR7bG9jYWxlLmtleX0uanNgKSxcbiAgfSkpXG4gIC5zb3J0KChhLCBiKSA9PiBhLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KSk7XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbGUgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIGxvY2FsZXMuZmluZCgobCkgPT4gbC5rZXkgPT09IGtleSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGltZXpvbmVzID0gKFxuICB0eXBlb2YgSW50bC5zdXBwb3J0ZWRWYWx1ZXNPZiA9PT0gJ3VuZGVmaW5lZCcgPyBbXSA6IEludGwuc3VwcG9ydGVkVmFsdWVzT2YoJ3RpbWVab25lJylcbikgYXMgc3RyaW5nW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZXpvbmUge1xuICBmdWxsOiBzdHJpbmc7XG4gIHNob3J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZXRpbWVGb3JtYXQge1xuICBkYXRlTG9jYWxlOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGtleTogc3RyaW5nO1xuICB9O1xuICB0aW1lWm9uZTogVGltZXpvbmU7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0RGF0ZXRpbWVGb3JtYXQ6IERhdGV0aW1lRm9ybWF0ID0ge1xuICBkYXRlTG9jYWxlOiB7XG4gICAga2V5OiAnZW4nLFxuICAgIG5hbWU6ICdFbmdsaXNoJyxcbiAgfSwgLy8gZGVmYXVsdCBlblxuICB0aW1lWm9uZToge1xuICAgIC8vIGd1ZXNzIGN1cnJlbnQgdGltZXpvbmVcbiAgICBmdWxsOiBkYXlqcy50ei5ndWVzcygpLFxuICAgIHNob3J0OiBkYXlqcygpLnR6KGRheWpzLnR6Lmd1ZXNzKCkpLmZvcm1hdCgneicpLFxuICB9IGFzIFRpbWV6b25lLFxufTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsVGltZXpvbmUgPSB7XG4gIGZ1bGw6IGRheWpzLnR6Lmd1ZXNzKCksXG4gIHNob3J0OiBkYXlqcygpLnR6KGRheWpzLnR6Lmd1ZXNzKCkpLmZvcm1hdCgneicpLFxufSBhcyBUaW1lem9uZTtcblxuZXhwb3J0IGNvbnN0IFVUQ1RpbWV6b25lID0ge1xuICBmdWxsOiAnVVRDJyxcbiAgc2hvcnQ6ICdVVEMnLFxufSBhcyBUaW1lem9uZTtcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZFRpbWV6b25lcyA9ICgpID0+XG4gICF0aW1lem9uZXMubGVuZ3RoXG4gICAgPyBbbG9jYWxUaW1lem9uZSwgVVRDVGltZXpvbmVdXG4gICAgOiB0aW1lem9uZXMubWFwKFxuICAgICAgICAodG5hbWUpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIGZ1bGw6IHRuYW1lLFxuICAgICAgICAgICAgc2hvcnQ6IGRheWpzKCkudHoodG5hbWUpLmZvcm1hdCgneicpLCAvLyBHZXQgYWJicmV2aWF0aW9uXG4gICAgICAgICAgfSBhcyBUaW1lem9uZSlcbiAgICAgICk7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lem9uZSA9IChzaG9ydDogc3RyaW5nKTogVGltZXpvbmUgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gc3VwcG9ydGVkVGltZXpvbmVzKCkuZmluZCgodCkgPT4gdC5zaG9ydCA9PT0gc2hvcnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///83628\n')},45656:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/styles/base.css\nvar base = __webpack_require__(67668);\n// EXTERNAL MODULE: ./node_modules/i18next/dist/esm/i18next.js\nvar esm_i18next = __webpack_require__(36609);\n// EXTERNAL MODULE: ./node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js\nvar i18nextBrowserLanguageDetector = __webpack_require__(15059);\n// EXTERNAL MODULE: ./node_modules/react-i18next/dist/es/index.js + 14 modules\nvar es = __webpack_require__(26909);\n;// CONCATENATED MODULE: ./locales/en/common.json\nconst common_namespaceObject = JSON.parse(\'{"AriaLabels":{"MAXIMUM_AGE":"Maximum age value","MAXIMUM_AGE_UNITS_INPUT":"Maximum age units input","MAXIMUM_SIZE":"Maximum size value","MAXIMUM_SIZE_UNITS_INPUT":"Maximum size units input"},"BETA":"BETA","CANCEL":"Cancel","CARD_TYPE":"Card type","CLEAR_FILTERS":"Clear all filters","CLEAR_RECENT":"Clear recent","CLOSE":"Close","CREATE":"Create","CREATING":"Creating","CRITICAL":"CRITICAL","CRYOSTAT_TRADEMARK":"Copyright The Cryostat Authors, The Universal Permissive License (UPL), Version 1.0","DATE":"Date","DELETE":"Delete","DESCRIPTION":"Description","DEVELOPMENT":"DEVELOPMENT","DOWNLOAD":"Download","EDIT":"Edit","FILTER_NAME":"Name","HELP":"Help","HOUR":"Hour","HOUR_one":"Hour","HOUR_other":"Hours","MAXIMUM_AGE":"Maximum age","MAXIMUM_AGE_HELPER_TEXT":"The maximum age of recording data stored to disk.","MAXIMUM_SIZE":"Maximum size","MAXIMUM_SIZE_HELPER_TEXT":"The maximum size of recording data saved to disk.","MERIDIEM_AM":"AM","MERIDIEM_PM":"PM","MINUTE":"Minute","MINUTE_one":"Minute","MINUTE_other":"Minutes","N/A":"N/A","NAME":"Name","OK":"OK","PRODUCTION":"PRODUCTION","REMOVE":"Remove","RENAME":"Rename","RESET":"Reset","RETRY":"Retry","SCORE":"Score","SECOND":"Second","SECOND_one":"Second","SECOND_other":"Seconds","SELECT":"Select","SHOW_LESS":"Show less","SHOW_MORE":"Show more","SOMETHING_WENT_WRONG":"Something went wrong","SUBMIT":"Submit","SUBMITTING":"Submitting","SUGGESTED":"Suggested","TEMPLATE":"Template","TIME":"Time","UPLOAD":"Upload","USER_SUBMITTED":"User-submitted","VIEW":"View","VIEW_MORE":"View more","WARNING":"WARNING","WHATS_THIS":"What\\\'s this?"}\');\n;// CONCATENATED MODULE: ./locales/en/public.json\nconst public_namespaceObject = JSON.parse(\'{"About":{"ABOUT":"About"},"AboutDescription":{"BUGS":"Bugs","FILE_A_REPORT":"File a Report","HOMEPAGE":"Homepage","KNOWN_ISSUES":"Known Issues","LICENSE":"License","MAILING_LIST":"Mailing List","OPEN_SOURCE_LICENSE":"Open Source License","VERSION":"version"},"AppLayout":{"APP_LAUNCHER":{"ABOUT":"About","DOCUMENTATION":"Documentation","GUIDED_TOUR":"Guided tour","HELP":"Help","QUICKSTARTS":"Quick Starts"}},"AutomatedAnalysisCard":{"CARD_DESCRIPTION":"Assess common application performance and configuration issues.","CARD_DESCRIPTION_FULL":"Creates a recording and periodically evaluates various common problems in application configuration and performance. Results are displayed with scores from 0-100 with colour coding and in groups. This card should be unique on a dashboard.","CARD_TITLE":"Automated Analysis","CRITICAL_RESULTS_one":"{{count}} Critical Result","CRITICAL_RESULTS_other":"{{count}} Critical Results","ERROR_TEXT":"Cryostat was unable to generate an automated analysis report.","ERROR_TITLE":"Automated Analysis Error","GOOD_RESULTS":"No problems","NO_RESULTS":"No Results Found","NO_RESULTS_BODY":"No results match this filter criteria. Try removing filters, showing unavailable scores, or resetting the severity score filter to 0.","RETRY_LOADING":"Retry loading report","RETRY_STARTING":"Retry starting recording","STALE_REPORT":{"TEXT_one":"Most recent data from {{ count }} {{ units }} ago.","TEXT_other":"Most recent data from {{ count }} {{ units }}s ago.","TOOLTIP":"Report data is stale. Click the Create Recording button and choose an option to start an active recording to source automated reports from."},"TOOLBAR":{"CHECKBOX":{"SHOW_NA":{"LABEL":"Show N/A scores"}},"DELETE":{"LABEL":"Delete automated analysis"},"LABEL":"Automated Analysis Toolbar","REFRESH":{"LABEL":"Refresh automated analysis"},"SWITCH":{"LIST_VIEW":{"LABEL":"List view"}}},"WARNING_RESULTS_one":"{{count}} Warning Result","WARNING_RESULTS_other":"{{count}} Warning Results"},"AutomatedAnalysisConfigDrawer":{"INPUT_GROUP":{"CREATE_RECORDING":{"LABEL":"Create Recording"},"OPEN_SETTINGS":{"LABEL":"Open Settings"}}},"AutomatedAnalysisConfigForm":{"CURRENT_CONFIG":"Current Configuration","FORM_TITLE":"Profiling Recording Configuration","FORMATTED_TEMPLATE":"Name: {{template.name}}, Type: {{template.type}}","MAXIMUM_AGE":"Maximum age ({{unit}})","MAXIMUM_SIZE":"Maximum size ({{unit}})","SAVE_CHANGES":"Save changes","TEMPLATE_HELPER_TEXT":"The Event Template to be applied to Automated Analysis recordings.","TEMPLATE_INVALID_WARNING":"WARNING: Setting a Target Template as a default template type configuration may not apply to all Target JVMs if the JVMs do not support them."},"AutomatedAnalysisScoreFilter":{"CURRENT_SCORE_TEXT":"Only showing analysis results with severity scores ≥ {{ val }}:","SLIDER":{"RESET0":{"LABEL":"Reset score to 0"},"RESET100":{"LABEL":"Reset score to 100"}},"TOOLTIP":{"CONTENT":"Severity scores are calculated based on the number of JFR events that were triggered by the application in the time the report was generated."}},"CHART_CARD":{"BUTTONS":{"CREATE":{"LABEL":"Create"},"POPOUT":{"LABEL":"Pop out {{chartKind}} chart"},"SYNC":{"LABEL":"Synchronize {{chartKind}} chart"}},"JFR_METRICS_CARD_DESCRIPTION":"Display common performance metrics from recent JFR data.","JFR_METRICS_CARD_DESCRIPTION_FULL":"Display a single performance metric from a list of supported JFR event types. Data is displayed from the present moment back to a specified duration. Note: these metrics are only available for a single target at a time. Second Cryostat-Web instances, for the same user or others, will not behave as expected when using this card type.","JFR_METRICS_CARD_TITLE":"JFR Metrics Chart","MBEAN_METRICS_CARD_DESCRIPTION":"Display common performance metrics from current MBean data.","MBEAN_METRICS_CARD_DESCRIPTION_FULL":"Display a single performance metric from a list of supported MBeans.","MBEAN_METRICS_CARD_TITLE":"MBean Metrics Chart","NO_RECORDING":{"DESCRIPTION":"Metrics cards display data taken from running flight recordings with the label . No such recordings are currently available.","TITLE":"No source recording"},"PROP_CONTROLS":{"DATA_WINDOW":{"DESCRIPTION":"The data window width in seconds.","NAME":"Data Window"},"PERFORMANCE_METRIC":{"DESCRIPTION":"Select the metric to display in this card.","NAME":"Performance Metric"},"REFRESH_PERIOD":{"DESCRIPTION":"The chart refresh period in seconds.","NAME":"Refresh Period"},"THEME":{"DESCRIPTION":"Select a color theme.","NAME":"Color Theme"},"THEME_COLOR":{"DESCRIPTION":"The color theme to apply to this chart.","NAME":"Color"}},"TITLE":"{{chartKind}} (last {{duration}}s, every {{period}}s)"},"ClickableAutomatedAnalysisLabel":{"ARIA_LABELS":{"POPOVER":"automated-analysis-description-popover"}},"Dashboard":{"ADD_CARD_HELPER_TEXT":"Choose a card type to add to your dashboard. Some cards require additional configuration.","CARD_CATALOG_DESCRIPTION":"Cards added to this Dashboard layout present information at a glance about the selected target. The layout is preserved for all targets viewed on this client.","CARD_CATALOG_TITLE":"Dashboard Card Catalog","INVALID_CARD_CONFIGURATIONS":"Invalid Card Configurations","PAGE_TITLE":"Dashboard"},"DashboardCardActionMenu":{"RESET_SIZE":"Reset Size"},"DashboardLayoutCreateModal":{"CREATE_LAYOUT":"Create Dashboard Layout","ERROR":{"NAME_INVALID":"Name must be alphanumeric and can contain underscores, dashes, and periods.","NAME_REQUIRED":"Layout name is a mandatory field.","NAME_TAKEN":"Specified layout name already exists.","NAME_TOO_LONG":"Name must be 20 characters or less."},"LABEL":"Create a new dashboard layout","NAME":{"HELPER_TEXT":"Enter a name for the dashboard layout.","LABEL":"Name"},"RENAME_LAYOUT":"Rename Dashboard Layout"},"DashboardLayoutSetAsTemplateModal":{"DOWNLOAD":{"DESCRIPTION":"Download the current dashboard layout as a template.","TITLE":"Download Custom Layout Template"},"ERROR":{"DESCRIPTION_INVALID":"The description can only include letters, numbers, spaces, and some special characters.","DESCRIPTION_TOO_LONG":"The description must be 100 characters or less."},"FORM_GROUP":{"DESCRIPTION":{"HELPER_TEXT":"Enter a description for the template.","LABEL":"Description","PLACEHOLDER":"A layout template for..."},"NAME":{"HELPER_TEXT":"Enter a name for the template.","LABEL":"Name"}},"SET_TEMPLATE":{"DESCRIPTION":"Set the current dashboard layout as a template.","TITLE":"Set Custom Layout Template"}},"DashboardLayoutToolbar":{"DELETE":{"LABEL":"Delete layout"},"DOWNLOAD_AS_TEMPLATE":"Download as template","MENU":{"FAVORITES":"Favorites","LABEL":"Layout menu","OTHERS":"Layouts"},"NEW_LAYOUT":"New Layout","RENAME":{"LABEL":"Rename layout"},"SET_AS_TEMPLATE":"Set as template","UPLOAD":{"LABEL":"Upload layout"}},"DatetimeFilter":{"ARIA_LABELS":{"DATETIME_INPUT":"Input a datetime","SEARCH_BUTTON":"Search For Date","TOGGLE_CALENDAR":"Toggle the calendar"},"INVALID_DATE_TEXT":"Invalid date time"},"DateTimePicker":{"ARIA_LABELS":{"DISPLAY_SELECTED_DATETIME":"Displayed selected datetime","TABS":"Select a date or time tab"},"SELECTED_DATETIME":"Selected DateTime"},"ERROR_BOUNDARY":{"ERROR_MESSAGE":"Reason: {{message}}","RESOLVE_MESSAGE":"Reload the page and try again. If the error still persists, see the list of {{knownIssue}} or {{fileReport}}."},"ErrorView":{"EVENT_TEMPLATES":"Error retrieving event templates"},"JvmDetailsCard":{"CARD_DESCRIPTION":"Display details about the selected target JVM.","CARD_DESCRIPTION_FULL":"View information such as the connection URL, labels, and annotations belonging to the selected target JVM.","CARD_TITLE":"Target JVM Details"},"LayoutTemplateGroup":{"ITEMS_one":"{{count}} item","ITEMS_other":"{{count}} items"},"LayoutTemplatePicker":{"SORT_BY":{"CARD_COUNT":"Sort by: Card Count","NAME":"Sort by: Name","PLACEHOLDER":"Sort by..."}},"LayoutTemplateUploadModal":{"DESCRIPTION":"Select Dashboard Layout Template configuration file(s) to upload. File(s) must be in valid JSON format.","ERROR":{"CONFIG_INVALID":"Card configurations are invalid.","DESCRIPTION_INVALID":"Template description is invalid.","DUPLICATE_UPLOAD":"A previously uploaded file has the same template name as the current file: \\\\"{{name}}\\\\".","NAME_INVALID":"Template name is invalid.","NAME_TAKEN":"Template with name \\\\"{{name}}\\\\" already exists.","PARSE":"JSON parse error.","TEMPLATE_INVALID":"Template has an invalid configuration.","VERSION_INVALID":"Template version is invalid."},"HELP":{"CONTENT":"Dashboard Layout Templates are pre-configured dashboard designs that can be used as a starting point for new dashboard layouts. Each template is defined in a JSON file that contains a list of dashboard cards and their configurations, as well as a unique name for the template. The name must be alphanumeric and can include underscores, dashes, and periods."},"TITLE":"Upload Dashboard Layout Template"},"MeridiemPicker":{"ARIA_LABELS":{"LISTBOX":"Select AM or PM"}},"QuickStarts":{"CATALOG_PAGE":{"HINT":"Quick start tutorials to get started with Cryostat.","TITLE":"Quick Starts"}},"RecordingLabelFields":{"INVALID_UPLOADS_one":"The file does not contain valid recording metadata:","INVALID_UPLOADS_other":"These files do not contain valid recording metadata:"},"SETTINGS":{"AUTO_REFRESH":{"CHECKBOX_LABEL":"Enabled","DESCRIPTION":"Set the refresh period for content views. Views normally update dynamically via WebSocket notifications, so this should not be needed unless WebSockets are not working.","TITLE":"Auto-Refresh"},"AUTOMATED_ANALYSIS_CONFIG":{"DESCRIPTION":"Set the recording configuration for automated analysis recordings. You may want smaller or larger values for max-age and max-size depending on how recent you want events to be recorded from the analysis.","TITLE":"Automated Analysis Recording Configuration"},"CATEGORIES":{"ADVANCED":"Advanced","CONNECTIVITY":"Connectivity","DASHBOARD":"Dashboard","GENERAL":"General","NOTIFICATION_MESSAGE":"Notifications & Messages"},"CHARTS_CONFIG":{"DESCRIPTION":"","REFRESH_RATE_SETTING":"Configure the minimum time to wait between data refreshes. Individual metrics cards may still request updates on a faster cycle, but the client application instance will throttle update requests to the server according to this setting.","TITLE":"Dashboard Metrics Configuration"},"CREDENTIALS_STORAGE":{"BACKEND":{"DESCRIPTION":"Keep credentials in encrypted Cryostat backend storage. These credentials will be available to other users and will be used for Automated Rules.","TITLE":"Backend"},"BROWSER_SESSION":{"DESCRIPTION":"Keep credentials in browser memory for the current session only. When you close this browser tab the credentials will be forgotten.","TITLE":"Session (Browser Memory)"},"DESCRIPTION":"When you attempt to connect to a target application which requires authentication, you will see a prompt for credentials to present to the application and complete the connection. You can choose where to persist these credentials. Any credentials added through the <0>Security0> panel will always be stored in Cryostat backend encrypted storage.","TITLE":"Credentials Storage"},"DATETIME_CONTROL":{"ARIA_LABELS":{"LOCALE_SELECT":"Select a datetime locale"},"DESCRIPTION":"","LOCALE_SELECT_DESCRIPTION":"Select current date locale.","TIMEZONE_SELECT_DESCRIPTION":"Select current timezone.","TITLE":"Date & Time"},"DELETION_DIALOG_CONTROL":{"DESCRIPTION":"","SWITCH_DESCRIPTION":"Enable or disable deletion dialogs by deletion type.","SWITCH_LABEL":"All Deletion Warnings","TITLE":"Show Deletion Dialogs"},"FEATURE_LEVEL":{"DESCRIPTION":"Control which graphical features appear in the application.","TITLE":"Feature Level"},"LANGUAGE":{"ARIA_LABELS":{"SELECT":"Select a language"},"DESCRIPTION":"Set the current language for web console.","TITLE":"Language"},"NOTIFICATION_CONTROL":{"DESCRIPTION":"","INPUT":"Control the maximum number of notification alerts that appear at once.","INPUT_DESCRIPTION":"Enable or disable all notifications.","SWITCH_LABEL":"All Notifications","TITLE":"Notifications"},"THEME":{"AUTO":"Auto","DARK":"Dark","DESCRIPTION":"Set the current theme for web console.","LIGHT":"Light","SELECT":{"LABEL":"Select a theme"},"TITLE":"Theme"},"WEBSOCKET_CONNECTION_DEBOUNCE":{"DESCRIPTION":"Set the debounce time (in milliseconds) used when establishing WebSocket connections. Increase this time if the web-interface repeatedly displays WebSocket connection/disconnection messages. Decrease this time if the web-interface takes a long time to populate on startup.","TITLE":"WebSocket Connection Debounce"}},"TimePicker":{"24HOUR":"24-hour","USE_24HR_TIME":"Use 24-hour time"},"TimeSpinner":{"DECREMENT_HOUR12_VALUE":"Decrement hour12 value","DECREMENT_HOUR24_VALUE":"Decrement hour24 value","DECREMENT_MINUTE_VALUE":"Decrement minute value","DECREMENT_SECOND_VALUE":"Decrement second value","INCREMENT_HOUR12_VALUE":"Increment hour12 value","INCREMENT_HOUR24_VALUE":"Increment hour24 value","INCREMENT_MINUTE_VALUE":"Increment minute value","INCREMENT_SECOND_VALUE":"Increment second value","INPUT_HOUR12_VALUE":"Input hour12 value","INPUT_HOUR24_VALUE":"Input hour24 value","INPUT_MINUTE_VALUE":"Input minute value","INPUT_SECOND_VALUE":"Input second value"},"TimezonePicker":{"ARIA_LABELS":{"SELECT":"Select a timezone","TYPE_AHEAD":"Search a timezone"}},"Topology":{"GRAPH_VIEW":"Graph View","LIST_VIEW":"List View"}}\');\n;// CONCATENATED MODULE: ./src/i18n/config.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n// import zh_common from \'../../locales/zh/common.json\';\n// import zh_public from \'../../locales/zh/public.json\';\n// TODO: .use(Backend) eventually store translations on backend?\n// Openshift console does this already:\n// https://github.com/openshift/console/blob/master/frontend/public/i18n.js\nvar i18nResources = {\n en: {\n public: public_namespaceObject,\n common: common_namespaceObject,\n },\n // zh: {\n // // TODO: add zh translation (and other languages)?\n // // public: zh_public,\n // // common: zh_common,\n // },\n};\nvar i18nNamespaces = [\'public\', \'common\'];\nvar i18nLanguages = Object.keys(i18nResources);\n// eslint-disable-next-line import/no-named-as-default-member\nesm_i18next/* default.use */.ZP.use(i18nextBrowserLanguageDetector/* default */.Z)\n .use(es/* initReactI18next */.Db)\n .init({\n resources: i18nResources,\n ns: i18nNamespaces,\n defaultNS: \'public\',\n fallbackNS: [\'common\'],\n fallbackLng: [\'en\'],\n debug: "production" === \'development\',\n returnNull: false,\n interpolation: {\n escapeValue: false, // react already safes from xss => https://www.i18next.com/translation-function/interpolation#unescape\n },\n react: {\n useSuspense: true,\n },\n});\n/* harmony default export */ const config = ((/* unused pure expression or super */ null && (i18next)));\n\n;// CONCATENATED MODULE: ./src/app/assets/about_background.png\nconst about_background_namespaceObject = __webpack_require__.p + "images/about_background.png";\n;// CONCATENATED MODULE: ./src/app/assets/cryostat_icon_rgb_reverse.svg\nconst cryostat_icon_rgb_reverse_namespaceObject = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojZmZmO30uY2xzLTJ7ZmlsbDojY2FlOWZmO30uY2xzLTN7ZmlsbDojOTVjOWU5O30uY2xzLTR7ZmlsbDojNWZhOGQzO308L3N0eWxlPjwvZGVmcz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iNTk3LjM0IDY1OS44MiA2OTguOTIgNjg3LjA0IDY3Ny42NCA2MDcuNjMgNzU3LjA0IDU4Ni4zNSA2ODIuNjkgNTEyIDc1Ny4wNCA0MzcuNjUgNjc3LjY0IDQxNi4zNyA2OTguOTEgMzM2Ljk2IDU5Ny4zNCAzNjQuMTggNTcwLjEzIDI2Mi42MSA1MTIgMzIwLjc0IDQ1My44NyAyNjIuNjEgNDI2LjY2IDM2NC4xOCAzMjUuMDkgMzM2Ljk2IDM0Ni4zNiA0MTYuMzcgMjY2Ljk2IDQzNy42NSAzNDEuMzEgNTEyIDI2Ni45NiA1ODYuMzUgMzQ2LjM2IDYwNy42MyAzMjUuMDkgNjg3LjA0IDQyNi42NiA2NTkuODIgNDUzLjg3IDc2MS4zOSA1MTIgNzAzLjI2IDU3MC4xMyA3NjEuMzkgNTk3LjM0IDY1OS44MiIvPjxnPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIyNDYuMjMgNDUyLjEgMjE3LjM5IDQ4MC45NCAyNDguNzQgNTEyLjI5IDIxNy4zOSA1NDMuNjQgMjQ2LjIzIDU3Mi40OCAzMDYuNDIgNTEyLjI5IDI0Ni4yMyA0NTIuMSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSI3NzcuNzcgNDUxLjUyIDgwNi42MSA0ODAuMzYgNzc1LjI2IDUxMS43MSA4MDYuNjEgNTQzLjA2IDc3Ny43NyA1NzEuOSA3MTcuNTggNTExLjcxIDc3Ny43NyA0NTEuNTIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNDMxLjQ5IDc3Mi40IDM5Mi4wOSA3ODIuOTYgMzgwLjYyIDc0MC4xNCAzMzcuOCA3NTEuNjEgMzI3LjI0IDcxMi4yMiA0MDkuNDYgNjkwLjE5IDQzMS40OSA3NzIuNCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSI2OTcuMjYgNzExLjkzIDY4Ni43MSA3NTEuMzIgNjQzLjg4IDczOS44NSA2MzIuNDEgNzgyLjY3IDU5My4wMSA3NzIuMTEgNjE1LjA0IDY4OS45IDY5Ny4yNiA3MTEuOTMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNTkyLjUxIDI1MS42IDYzMS45MSAyNDEuMDQgNjQzLjM4IDI4My44NiA2ODYuMiAyNzIuMzkgNjk2Ljc2IDMxMS43OCA2MTQuNTQgMzMzLjgxIDU5Mi41MSAyNTEuNiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIzMjYuNzQgMzEyLjA3IDMzNy4yOSAyNzIuNjggMzgwLjEyIDI4NC4xNSAzOTEuNTkgMjQxLjMzIDQzMC45OSAyNTEuODkgNDA4Ljk2IDMzNC4xIDMyNi43NCAzMTIuMDciLz48L2c+PGc+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjY2MS43NiAxMzkuNDkgNjA3LjM4IDg1LjExIDU1MC40NSAxNDIuMDQgNTUwLjQ1IDAgNDczLjU1IDAgNDczLjU1IDE0Mi4wNCA0MTYuNjIgODUuMTEgMzYyLjI0IDEzOS40OSA1MTIgMjg5LjI2IDY2MS43NiAxMzkuNDkiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMjY0LjI4IDE5Ni4wNSAxOTAgMjE1Ljk1IDIxMC44MyAyOTMuNzIgODcuODIgMjIyLjcgNDkuMzcgMjg5LjMgMTcyLjM4IDM2MC4zMiA5NC42MSAzODEuMTYgMTE0LjUyIDQ1NS40NSAzMTkuMSA0MDAuNjMgMjY0LjI4IDE5Ni4wNSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSIxMTQuNTIgNTY4LjU2IDk0LjYxIDY0Mi44NCAxNzIuMzggNjYzLjY4IDQ5LjM3IDczNC43IDg3LjgyIDgwMS4zIDIxMC44MyA3MzAuMjggMTkwIDgwOC4wNSAyNjQuMjggODI3Ljk1IDMxOS4xIDYyMy4zNyAxMTQuNTIgNTY4LjU2Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjM2Mi4yNCA4ODQuNTEgNDE2LjYyIDkzOC44OSA0NzMuNTUgODgxLjk2IDQ3My41NSAxMDI0IDU1MC40NSAxMDI0IDU1MC40NSA4ODEuOTYgNjA3LjM4IDkzOC44OSA2NjEuNzYgODg0LjUxIDUxMiA3MzQuNzQgMzYyLjI0IDg4NC41MSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI3NTkuNzIgODI3Ljk1IDgzNCA4MDguMDUgODEzLjE3IDczMC4yOCA5MzYuMTggODAxLjMgOTc0LjYzIDczNC43IDg1MS42MiA2NjMuNjggOTI5LjM5IDY0Mi44NCA5MDkuNDggNTY4LjU1IDcwNC45IDYyMy4zNyA3NTkuNzIgODI3Ljk1Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjkwOS40OCA0NTUuNDQgOTI5LjM5IDM4MS4xNiA4NTEuNjIgMzYwLjMyIDk3NC42MyAyODkuMyA5MzYuMTggMjIyLjcgODEzLjE3IDI5My43MiA4MzQgMjE1Ljk1IDc1OS43MiAxOTYuMDUgNzA0LjkgNDAwLjYzIDkwOS40OCA0NTUuNDQiLz48L2c+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTEyLjU0LDU3OS40N2MtMzcuNDcsMC02Ny45Ni0zMC40OS02Ny45Ni02Ny45NnMzMC40OS02Ny45Niw2Ny45Ni02Ny45NmMyNS4xMSwwLDQ3LjA2LDEzLjY5LDU4LjgyLDM0bDY5LjE3LTM5Ljc2LTEyOC41My03NC4yMS0xMjguNTMsNzQuMjF2MTQ4LjQybDEyOC41Myw3NC4yMSwxMjguNTMtNzQuMjEtNjkuMTctNDAuNzNjLTExLjc3LDIwLjMtMzMuNzIsMzMuOTktNTguODIsMzMuOTlaIi8+PC9zdmc+";\n;// CONCATENATED MODULE: ./src/app/build.json\nconst build_namespaceObject = JSON.parse(\'{"N$":"Cryostat","wd":"https://github.com/cryostatio/cryostat/commits/__REPLACE_HASH__","e6":"https://cryostat.io","Un":"https://cryostat.io/blog","R1":"https://cryostat.io/guides","rj":"https://cryostat.io/guides/#dashboard","dk":"https://github.com/cryostatio/cryostat/discussions","aT":"https://github.com/cryostatio/cryostat/issues","S3":"https://github.com/cryostatio/cryostat/issues/new?labels=user+report,bug&body=Affects+__REPLACE_VERSION__","e$":"Google Groups","Io":"https://groups.google.com/g/cryostat-development","EH":"https://github.com/cryostatio/cryostat/blob/main/LICENSE","i8":"2.3.0"}\');\n// EXTERNAL MODULE: ./src/app/utils/utils.ts\nvar utils = __webpack_require__(52648);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModal.js + 8 modules\nvar AboutModal = __webpack_require__(20873);\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(67294);\nvar react_namespaceObject = /*#__PURE__*/__webpack_require__.t(react, 2);\n// EXTERNAL MODULE: ./src/app/Notifications/Notifications.tsx\nvar Notifications = __webpack_require__(1570);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Services.tsx + 2 modules\nvar Services = __webpack_require__(35881);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Text/Text.js\nvar Text = __webpack_require__(68340);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Text/TextContent.js\nvar TextContent = __webpack_require__(68774);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Text/TextList.js\nvar TextList = __webpack_require__(25834);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Text/TextListItem.js\nvar TextListItem = __webpack_require__(78140);\n;// CONCATENATED MODULE: ./src/app/About/AboutDescription.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar AboutDescription = function () {\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var notificationsContext = react.useContext(Notifications/* NotificationsContext */.cJ);\n var _a = react.useState(undefined), cryostatVersion = _a[0], setCryostatVersion = _a[1];\n var t = (0,es/* useTranslation */.$G)().t;\n react.useEffect(function () {\n var sub = serviceContext.api.cryostatVersion().subscribe(setCryostatVersion);\n return function () { return sub.unsubscribe(); };\n }, [serviceContext]);\n var cryostatCommitHash = react.useMemo(function () {\n var _a;\n if (!cryostatVersion) {\n return;\n }\n var expr = /^(?[a-zA-Z0-9-_.]+-[0-9]+-[a-z0-9]+)(?:-dirty)?$/;\n var result = cryostatVersion.match(expr);\n if (!result) {\n notificationsContext.warning(\'Cryostat Version Parse Failure\', "Could not parse Cryostat version string \'".concat(cryostatVersion, "\'."));\n return \'main\';\n }\n return ((_a = result.groups) === null || _a === void 0 ? void 0 : _a.describe) || \'main\';\n }, [cryostatVersion, notificationsContext]);\n var versionComponent = react.useMemo(function () {\n if (build_namespaceObject.wd) {\n return (react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.wd.replace(\'__REPLACE_HASH__\', cryostatCommitHash || \'\') }, cryostatVersion));\n }\n else {\n return react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, cryostatVersion);\n }\n }, [cryostatVersion, cryostatCommitHash]);\n return (react.createElement(react.Fragment, null,\n react.createElement(TextContent/* TextContent */.D, null,\n react.createElement(TextList/* TextList */.G, { component: "dl" },\n react.createElement(TextListItem/* TextListItem */.T, { component: "dt" }, t(\'AboutDescription.VERSION\')),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dd" }, versionComponent),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dt" }, t(\'AboutDescription.HOMEPAGE\')),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dd" },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.e6 }, "cryostat.io")),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dt" }, t(\'AboutDescription.BUGS\')),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dd" },\n react.createElement(Text/* Text */.x, null,\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.aT }, t(\'AboutDescription.KNOWN_ISSUES\')),\n "\\u00A0|\\u00A0",\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.S3.replace(\'__REPLACE_VERSION__\', cryostatVersion || \'unknown\') }, t(\'AboutDescription.FILE_A_REPORT\')))),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dt" }, t(\'AboutDescription.MAILING_LIST\')),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dd" },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.Io }, build_namespaceObject.e$)),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dt" }, t(\'AboutDescription.OPEN_SOURCE_LICENSE\')),\n react.createElement(TextListItem/* TextListItem */.T, { component: "dd" },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.EH }, t(\'AboutDescription.LICENSE\')))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/About/AboutCryostatModal.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar AboutCryostatModal = function (_a) {\n var isOpen = _a.isOpen, onClose = _a.onClose;\n var t = (0,es/* useTranslation */.$G)().t;\n return (react.createElement(AboutModal/* AboutModal */.t, { appendTo: utils/* portalRoot */.tO, productName: "".concat(build_namespaceObject.N$, " ").concat(build_namespaceObject.i8), brandImageSrc: cryostat_icon_rgb_reverse_namespaceObject, brandImageAlt: "Cryostat Logo", isOpen: isOpen, onClose: onClose, trademark: t(\'CRYOSTAT_TRADEMARK\', { ns: \'common\' }), backgroundImageSrc: about_background_namespaceObject },\n react.createElement(AboutDescription, null)));\n};\n\n;// CONCATENATED MODULE: ./src/app/assets/cryostat_logo_hori_rgb_reverse.svg\nconst cryostat_logo_hori_rgb_reverse_namespaceObject = __webpack_require__.p + "images/cryostat_logo_hori_rgb_reverse.svg";\n;// CONCATENATED MODULE: ./src/app/utils/useSetState.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n// taken from streamich.github.io/react-use\nvar useSetState = function (initialState) {\n if (initialState === void 0) { initialState = {}; }\n var _a = (0,react.useState)(initialState), state = _a[0], set = _a[1];\n var setState = (0,react.useCallback)(function (patch) {\n set(function (prevState) { return Object.assign({}, prevState, patch instanceof Function ? patch(prevState) : patch); });\n }, []);\n return [state, setState];\n};\n/* harmony default export */ const utils_useSetState = (useSetState);\n\n;// CONCATENATED MODULE: ./src/app/Joyride/JoyrideProvider.tsx\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar defaultState = {\n run: false,\n stepIndex: 0,\n steps: [],\n};\n/* eslint-disable @typescript-eslint/no-empty-function */\nvar JoyrideContext = react.createContext({\n state: defaultState,\n setState: function () { return undefined; },\n isNavBarOpen: true,\n setIsNavBarOpen: function () { return undefined; },\n});\n/* eslint-enable @typescript-eslint/no-empty-function */\nvar JoyrideProvider = function (props) {\n var _a = utils_useSetState(defaultState), state = _a[0], setState = _a[1];\n var _b = react.useState(true), isNavBarOpen = _b[0], setIsNavBarOpen = _b[1];\n var value = react.useMemo(function () { return ({ state: state, setState: setState, isNavBarOpen: isNavBarOpen, setIsNavBarOpen: setIsNavBarOpen }); }, [state, setState, isNavBarOpen, setIsNavBarOpen]);\n return (react.createElement(JoyrideContext.Provider, __assign({ value: value }, props), props.children));\n};\nvar useJoyride = function () {\n return react.useContext(JoyrideContext);\n};\n\n// EXTERNAL MODULE: ./src/i18n/datetime.ts\nvar i18n_datetime = __webpack_require__(83628);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/concatMap.js\nvar concatMap = __webpack_require__(51313);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/of.js\nvar of = __webpack_require__(32817);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/from.js + 9 modules\nvar from = __webpack_require__(24635);\n;// CONCATENATED MODULE: ./src/app/utils/useDayjs.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nfunction useDayjs() {\n var _localeSubRef = react.useRef([]);\n var _services = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(i18n_datetime/* defaultDatetimeFormat */.wO), datetimeContext = _a[0], setDatetimeContext = _a[1];\n react.useEffect(function () { return function () { return _localeSubRef.current.forEach(function (s) { return s.unsubscribe(); }); }; }, []);\n react.useEffect(function () {\n _localeSubRef.current = _localeSubRef.current.concat([\n _services.settings\n .datetimeFormat()\n .pipe((0,concatMap/* concatMap */.b)(function (f) {\n var locale = (0,i18n_datetime/* getLocale */.Kd)(f.dateLocale.key);\n if (locale) {\n return i18n_datetime/* default.locale */.ZP.locale() === f.dateLocale.key // only load if not yet\n ? (0,of.of)(f)\n : (0,from/* from */.D)(locale\n .load()\n .then(function () {\n i18n_datetime/* default.locale */.ZP.locale(locale.key); // Load globally\n return f;\n })\n .catch(function (err) {\n console.warn(err);\n return f;\n }));\n }\n else {\n console.warn("".concat(f.dateLocale.name, " (").concat(f.dateLocale.key, ") is not supported."));\n return (0,of.of)(f);\n }\n }))\n .subscribe(setDatetimeContext),\n ]);\n }, [_services.settings, setDatetimeContext, _localeSubRef]);\n return [i18n_datetime/* default */.ZP, datetimeContext];\n}\n/* harmony default export */ const utils_useDayjs = (useDayjs);\n\n// EXTERNAL MODULE: ./src/app/utils/useSubscriptions.ts\nvar useSubscriptions = __webpack_require__(61139);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownItem.js\nvar DropdownItem = __webpack_require__(84457);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawer.js\nvar NotificationDrawer = __webpack_require__(47664);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerHeader.js\nvar NotificationDrawerHeader = __webpack_require__(7668);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/Dropdown.js\nvar Dropdown = __webpack_require__(56787);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/KebabToggle.js\nvar KebabToggle = __webpack_require__(94024);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/dropdownConstants.js\nvar dropdownConstants = __webpack_require__(99355);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerBody.js\nvar NotificationDrawerBody = __webpack_require__(27441);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerGroupList.js\nvar NotificationDrawerGroupList = __webpack_require__(80671);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerGroup.js + 1 modules\nvar NotificationDrawerGroup = __webpack_require__(76853);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerList.js\nvar NotificationDrawerList = __webpack_require__(16659);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerListItem.js\nvar NotificationDrawerListItem = __webpack_require__(58461);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerListItemHeader.js + 1 modules\nvar NotificationDrawerListItemHeader = __webpack_require__(92133);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationDrawer/NotificationDrawerListItemBody.js\nvar NotificationDrawerListItemBody = __webpack_require__(86399);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js\nvar combineLatest = __webpack_require__(40564);\n;// CONCATENATED MODULE: ./src/app/Notifications/NotificationCenter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar NotificationCenter = function (props) {\n var _a = utils_useDayjs(), dayjs = _a[0], datetimeContext = _a[1];\n var context = react.useContext(Notifications/* NotificationsContext */.cJ);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState(0), totalUnreadNotificationsCount = _b[0], setTotalUnreadNotificationsCount = _b[1];\n var _c = react.useState(false), isHeaderDropdownOpen = _c[0], setHeaderDropdownOpen = _c[1];\n var PROBLEMS_CATEGORY_IDX = 2;\n var _d = react.useState([\n { title: \'Completed Actions\', isExpanded: true, notifications: [], unreadCount: 0 },\n { title: \'Cryostat Status\', isExpanded: false, notifications: [], unreadCount: 0 },\n { title: \'Problems\', isExpanded: false, notifications: [], unreadCount: 0 },\n ]), drawerCategories = _d[0], setDrawerCategories = _d[1];\n var countUnreadNotifications = function (notifications) {\n return notifications.filter(function (n) { return !n.read; }).length;\n };\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n context.actionsNotifications(),\n context.cryostatStatusNotifications(),\n context.problemsNotifications(),\n ]).subscribe(function (notificationLists) {\n setDrawerCategories(function (drawerCategories) {\n return drawerCategories.map(function (category, idx) {\n category.notifications = notificationLists[idx];\n category.unreadCount = countUnreadNotifications(notificationLists[idx]);\n return category;\n });\n });\n }));\n }, [addSubscription, context, context.notifications, setDrawerCategories]);\n react.useEffect(function () {\n addSubscription(context.unreadNotifications().subscribe(function (s) {\n setTotalUnreadNotificationsCount(s.length);\n }));\n }, [addSubscription, context, context.unreadNotifications, setTotalUnreadNotificationsCount]);\n var handleToggleDropdown = react.useCallback(function () {\n setHeaderDropdownOpen(function (v) { return !v; });\n }, [setHeaderDropdownOpen]);\n var handleToggleExpandCategory = react.useCallback(function (categoryIdx) {\n setDrawerCategories(function (drawerCategories) {\n return drawerCategories.map(function (category, idx) {\n category.isExpanded = idx === categoryIdx ? !category.isExpanded : false;\n return category;\n });\n });\n }, [setDrawerCategories]);\n // Expands the Problems tab when unread errors/warnings are present\n react.useEffect(function () {\n if (drawerCategories[PROBLEMS_CATEGORY_IDX].unreadCount === 0) {\n return;\n }\n setDrawerCategories(function (drawerCategories) {\n return drawerCategories.map(function (category, idx) {\n category.isExpanded = idx === PROBLEMS_CATEGORY_IDX;\n return category;\n });\n });\n }, [setDrawerCategories, drawerCategories]);\n var handleMarkAllRead = react.useCallback(function () {\n context.markAllRead();\n }, [context]);\n var handleClearAll = react.useCallback(function () {\n context.clearAll();\n }, [context]);\n var markRead = react.useCallback(function (key) {\n context.setRead(key);\n }, [context]);\n var timestampToDateTimeString = function (timestamp) {\n if (!timestamp) {\n return \'\';\n }\n return dayjs(timestamp).tz(datetimeContext.timeZone.full).format(\'L LTS z\');\n };\n var drawerDropdownItems = [\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "markAllRead", onClick: handleMarkAllRead, component: "button" }, "Mark all read"),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "clearAll", onClick: handleClearAll, component: "button" }, "Clear all"),\n ];\n return (react.createElement(react.Fragment, null,\n react.createElement(NotificationDrawer/* NotificationDrawer */.j, null,\n react.createElement(NotificationDrawerHeader/* NotificationDrawerHeader */.O, { count: totalUnreadNotificationsCount, onClose: props.onClose },\n react.createElement(Dropdown/* Dropdown */.L, { isPlain: true, onSelect: handleToggleDropdown, toggle: react.createElement(KebabToggle/* KebabToggle */.a, { onToggle: handleToggleDropdown }), isOpen: isHeaderDropdownOpen, position: dropdownConstants/* DropdownPosition.right */.ir.right, dropdownItems: drawerDropdownItems })),\n react.createElement(NotificationDrawerBody/* NotificationDrawerBody */.u, null,\n react.createElement(NotificationDrawerGroupList/* NotificationDrawerGroupList */.s, null, drawerCategories.map(function (_a, idx) {\n var title = _a.title, isExpanded = _a.isExpanded, notifications = _a.notifications, unreadCount = _a.unreadCount;\n return (react.createElement(NotificationDrawerGroup/* NotificationDrawerGroup */.N, { title: title, isExpanded: isExpanded, count: unreadCount, onExpand: function () { return handleToggleExpandCategory(idx); }, key: idx },\n react.createElement(NotificationDrawerList/* NotificationDrawerList */.F, { isHidden: !isExpanded }, notifications.map(function (_a) {\n var key = _a.key, title = _a.title, message = _a.message, variant = _a.variant, timestamp = _a.timestamp, read = _a.read;\n return (react.createElement(NotificationDrawerListItem/* NotificationDrawerListItem */.V, { key: key, variant: variant, onClick: function () { return markRead(key); }, isRead: read },\n react.createElement(NotificationDrawerListItemHeader/* NotificationDrawerListItemHeader */.n, { title: title, variant: variant }),\n react.createElement(NotificationDrawerListItemBody/* NotificationDrawerListItemBody */.e, { timestamp: timestampToDateTimeString(timestamp) },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, message === null || message === void 0 ? void 0 : message.toString()))));\n }))));\n }))))));\n};\n\n// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js\nvar react_router = __webpack_require__(16550);\n// EXTERNAL MODULE: ./node_modules/react-router-last-location/dist/index.js\nvar dist = __webpack_require__(12556);\n;// CONCATENATED MODULE: ./src/app/assets/cryostat_logo_hori_rgb_default.svg\nconst cryostat_logo_hori_rgb_default_namespaceObject = __webpack_require__.p + "images/cryostat_logo_hori_rgb_default.svg";\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Page/PageGroup.js\nvar PageGroup = __webpack_require__(74277);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Page/PageSection.js\nvar PageSection = __webpack_require__(32045);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Breadcrumb/Breadcrumb.js\nvar Breadcrumb = __webpack_require__(64029);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Breadcrumb/BreadcrumbItem.js\nvar BreadcrumbItem = __webpack_require__(32835);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Breadcrumb/BreadcrumbHeading.js\nvar BreadcrumbHeading = __webpack_require__(81425);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Stack/Stack.js\nvar Stack = __webpack_require__(49739);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Stack/StackItem.js\nvar StackItem = __webpack_require__(83826);\n// EXTERNAL MODULE: ./node_modules/react-router-dom/esm/react-router-dom.js\nvar react_router_dom = __webpack_require__(73727);\n;// CONCATENATED MODULE: ./src/app/BreadcrumbPage/BreadcrumbPage.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar BreadcrumbPage = function (props) {\n return (react.createElement(PageGroup/* PageGroup */.C, null,\n react.createElement(PageSection/* PageSection */.NP, null,\n react.createElement(Breadcrumb/* Breadcrumb */.a, null,\n (props.breadcrumbs || []).map(function (_a) {\n var title = _a.title, path = _a.path;\n return (react.createElement(BreadcrumbItem/* BreadcrumbItem */.g, { key: path },\n react.createElement(react_router_dom.Link, { to: path }, title)));\n }),\n react.createElement(BreadcrumbHeading/* BreadcrumbHeading */.h, null, props.pageTitle)),\n react.createElement(Stack/* Stack */.K, { hasGutter: true }, react.Children.map(props.children, function (child) { return (react.createElement(StackItem/* StackItem */.v, { isFilled: isItemFilled(child) }, child)); })))));\n};\nvar isItemFilled = function (item) {\n if (!item)\n return false;\n var toCheck = item[\'props\'] ? item[\'props\'] : item;\n return toCheck[\'isFilled\'] || toCheck[\'isFullHeight\'] || toCheck[\'data-full-height\'];\n};\n\n// EXTERNAL MODULE: ./src/app/Settings/SettingsUtils.ts\nvar SettingsUtils = __webpack_require__(74787);\n;// CONCATENATED MODULE: ./src/app/utils/useTheme.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n// setting is the option, but theme is the color scheme what we actually render\nfunction useTheme() {\n var _a = react.useState(SettingsUtils/* ThemeSetting.LIGHT */.LZ.LIGHT), setting = _a[0], setSetting = _a[1];\n var _b = react.useState(SettingsUtils/* ThemeSetting.LIGHT */.LZ.LIGHT), theme = _b[0], setTheme = _b[1];\n var themeRef = react.useRef();\n var mediaRef = react.useRef();\n var services = react.useContext(Services/* ServiceContext */.o);\n react.useEffect(function () {\n themeRef.current = services.settings.themeSetting().subscribe(function (theme) {\n setSetting(theme);\n if (theme === SettingsUtils/* ThemeSetting.AUTO */.LZ.AUTO) {\n setTheme(window.matchMedia && window.matchMedia(\'(prefers-color-scheme: dark)\').matches\n ? SettingsUtils/* ThemeSetting.DARK */.LZ.DARK\n : SettingsUtils/* ThemeSetting.LIGHT */.LZ.LIGHT);\n }\n else {\n setTheme(theme);\n }\n });\n return function () { return themeRef.current && themeRef.current.unsubscribe(); };\n }, [services.settings, themeRef]);\n react.useEffect(function () {\n mediaRef.current = services.settings.media(\'(prefers-color-scheme: dark)\').subscribe(function (dark) {\n setSetting(function (setting) {\n if (setting === SettingsUtils/* ThemeSetting.AUTO */.LZ.AUTO) {\n setTheme(dark.matches ? SettingsUtils/* ThemeSetting.DARK */.LZ.DARK : SettingsUtils/* ThemeSetting.LIGHT */.LZ.LIGHT);\n }\n return setting;\n });\n });\n return function () { return mediaRef.current && mediaRef.current.unsubscribe(); };\n }, [services.settings, mediaRef]);\n return [theme, setting];\n}\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/Card.js\nvar Card = __webpack_require__(32203);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/CardHeader.js\nvar CardHeader = __webpack_require__(70401);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Brand/Brand.js\nvar Brand = __webpack_require__(70571);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/CardBody.js\nvar CardBody = __webpack_require__(62394);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/CardFooter.js\nvar CardFooter = __webpack_require__(49734);\n;// CONCATENATED MODULE: ./src/app/About/About.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar About = function (_) {\n var t = (0,es/* useTranslation */.$G)(\'public\').t;\n var theme = useTheme()[0];\n var logo = react.useMemo(function () { return (theme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK ? cryostat_logo_hori_rgb_reverse_namespaceObject : cryostat_logo_hori_rgb_default_namespaceObject); }, [theme]);\n return (react.createElement(BreadcrumbPage, { pageTitle: t(\'About.ABOUT\') },\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(Brand/* Brand */.H, { alt: build_namespaceObject.N$, src: logo, className: "cryostat-logo" })),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(AboutDescription, null)),\n react.createElement(CardFooter/* CardFooter */.e, null, t(\'CRYOSTAT_TRADEMARK\', { ns: \'common\' })))));\n};\n/* harmony default export */ const About_About = (About);\n\n// EXTERNAL MODULE: ./src/app/LoadingView/LoadingView.tsx\nvar LoadingView = __webpack_require__(72913);\n;// CONCATENATED MODULE: ./src/app/RecordingMetadata/RecordingLabel.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nvar parseLabels = function (jsonLabels) {\n if (!jsonLabels)\n return [];\n return Object.entries(jsonLabels).map(function (_a) {\n var k = _a[0], v = _a[1];\n return { key: k, value: v };\n });\n};\nvar parseLabelsFromFile = function (file) {\n return (0,from/* from */.D)(file\n .text()\n .then(JSON.parse)\n .then(function (obj) {\n var labels = [];\n var labelObj = obj[\'labels\'];\n if (labelObj) {\n Object.keys(labelObj).forEach(function (key) {\n labels.push({\n key: key,\n value: labelObj[key],\n });\n });\n return labels;\n }\n throw new Error(\'No labels found in file\');\n }));\n};\nvar includesLabel = function (arr, searchLabel) {\n return arr.some(function (l) { return isEqualLabel(searchLabel, l); });\n};\nvar isEqualLabel = function (a, b) {\n return a.key === b.key && a.value === b.value;\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/helpers/constants.js\nvar constants = __webpack_require__(64190);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Button/Button.js\nvar Button_Button = __webpack_require__(47173);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Popover/Popover.js + 9 modules\nvar Popover = __webpack_require__(28415);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/List/List.js\nvar List = __webpack_require__(72936);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/List/ListItem.js\nvar ListItem = __webpack_require__(49345);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Split/Split.js\nvar Split = __webpack_require__(79851);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Split/SplitItem.js\nvar SplitItem = __webpack_require__(34512);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/TextInput/TextInput.js\nvar TextInput = __webpack_require__(92607);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Form/FormHelperText.js\nvar FormHelperText = __webpack_require__(87828);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/HelperText/HelperText.js\nvar HelperText = __webpack_require__(36621);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/HelperText/HelperTextItem.js\nvar HelperTextItem = __webpack_require__(65673);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/plus-circle-icon.js\nvar plus_circle_icon = __webpack_require__(7081);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon.js\nvar exclamation_circle_icon = __webpack_require__(43047);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/file-icon.js\nvar file_icon = __webpack_require__(3278);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/upload-icon.js\nvar upload_icon = __webpack_require__(62729);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/close-icon.js\nvar close_icon = __webpack_require__(36438);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/catchError.js\nvar catchError = __webpack_require__(79878);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/zip.js + 1 modules\nvar zip = __webpack_require__(68872);\n;// CONCATENATED MODULE: ./src/app/RecordingMetadata/RecordingLabelFields.tsx\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar LabelPattern = /^\\S+$/;\nvar getValidatedOption = function (isValid) {\n return isValid ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error;\n};\nvar matchesLabelSyntax = function (l) {\n return l && LabelPattern.test(l.key) && LabelPattern.test(l.value);\n};\nvar RecordingLabelFields = function (_a) {\n var setLabels = _a.setLabels, setValid = _a.setValid, props = __rest(_a, ["setLabels", "setValid"]);\n var inputRef = react.useRef(null); // Use ref to refer to child component\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = react.useState(false), loading = _b[0], setLoading = _b[1];\n var _c = react.useState([]), invalidUploads = _c[0], setInvalidUploads = _c[1];\n var handleKeyChange = react.useCallback(function (idx, key) {\n var updatedLabels = __spreadArray([], props.labels, true);\n updatedLabels[idx].key = key;\n setLabels(updatedLabels);\n }, [props.labels, setLabels]);\n var handleValueChange = react.useCallback(function (idx, value) {\n var updatedLabels = __spreadArray([], props.labels, true);\n updatedLabels[idx].value = value;\n setLabels(updatedLabels);\n }, [props.labels, setLabels]);\n var handleAddLabelButtonClick = react.useCallback(function () {\n setLabels(__spreadArray(__spreadArray([], props.labels, true), [{ key: \'\', value: \'\' }], false));\n }, [props.labels, setLabels]);\n var handleDeleteLabelButtonClick = react.useCallback(function (idx) {\n var updated = __spreadArray([], props.labels, true);\n updated.splice(idx, 1);\n setLabels(updated);\n }, [props.labels, setLabels]);\n var isLabelValid = react.useCallback(matchesLabelSyntax, [matchesLabelSyntax]);\n var isDuplicateKey = react.useCallback(function (key, labels) {\n return labels.filter(function (label) { return label.key === key; }).length > 1;\n }, []);\n var allLabelsValid = react.useMemo(function () {\n if (!props.labels.length) {\n return true;\n }\n return props.labels.reduce(function (prev, curr) { return isLabelValid(curr) && !isDuplicateKey(curr.key, props.labels) && prev; }, true);\n }, [props.labels, isLabelValid, isDuplicateKey]);\n var validKeys = react.useMemo(function () {\n var arr = Array(props.labels.length).fill(constants/* ValidatedOptions.default */.LD["default"]);\n props.labels.forEach(function (label, index) {\n if (label.key.length > 0) {\n arr[index] = getValidatedOption(LabelPattern.test(label.key) && !isDuplicateKey(label.key, props.labels));\n } // Ignore initial empty key inputs\n });\n return arr;\n }, [props.labels, isDuplicateKey]);\n var validValues = react.useMemo(function () {\n var arr = Array(props.labels.length).fill(constants/* ValidatedOptions.default */.LD["default"]);\n props.labels.forEach(function (label, index) {\n if (label.value.length > 0) {\n arr[index] = getValidatedOption(LabelPattern.test(label.value));\n } // Ignore initial empty value inputs\n });\n return arr;\n }, [props.labels]);\n react.useEffect(function () {\n setValid(getValidatedOption(allLabelsValid));\n }, [setValid, allLabelsValid]);\n var handleUploadLabel = react.useCallback(function (e) {\n var files = e.target.files;\n if (files && files.length) {\n var tasks = [];\n setLoading(true);\n var _loop_1 = function (labelFile) {\n tasks.push(parseLabelsFromFile(labelFile).pipe((0,catchError/* catchError */.K)(function (_) {\n setInvalidUploads(function (old) { return old.concat([labelFile.name]); });\n return (0,of.of)([]);\n })));\n };\n for (var _i = 0, _a = e.target.files; _i < _a.length; _i++) {\n var labelFile = _a[_i];\n _loop_1(labelFile);\n }\n addSubscription((0,zip/* zip */.$)(tasks).subscribe(function (labelArrays) {\n setLoading(false);\n var labels = labelArrays.reduce(function (acc, next) { return acc.concat(next); }, []);\n setLabels(__spreadArray(__spreadArray([], props.labels, true), labels, true));\n }));\n }\n }, [setLabels, props.labels, addSubscription, setLoading]);\n var closeWarningPopover = react.useCallback(function () { return setInvalidUploads([]); }, [setInvalidUploads]);\n var openLabelFileBrowse = react.useCallback(function () {\n inputRef.current && inputRef.current.click();\n }, [inputRef]);\n return loading ? (react.createElement(LoadingView/* LoadingView */.J, null)) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, { "aria-label": "Add Label", onClick: handleAddLabelButtonClick, variant: "link", icon: react.createElement(plus_circle_icon/* PlusCircleIcon */.wl, null), isDisabled: props.isDisabled }, "Add Label"),\n props.isUploadable && (react.createElement(react.Fragment, null,\n react.createElement(Popover/* Popover */.J, { appendTo: utils/* portalRoot */.tO, isVisible: !!invalidUploads.length, "aria-label": "uploading warning", alertSeverityVariant: "danger", headerContent: "Invalid Selection", headerComponent: "h1", shouldClose: closeWarningPopover, headerIcon: react.createElement(exclamation_circle_icon/* ExclamationCircleIcon */.$O, null), bodyContent: react.createElement(react.Fragment, null,\n react.createElement(Text/* Text */.x, { component: "h4" }, t(\'RecordingLabelFields.INVALID_UPLOADS\', { count: invalidUploads.length })),\n react.createElement(List/* List */.aV, null, invalidUploads.map(function (uploadName) { return (react.createElement(ListItem/* ListItem */.H, { key: uploadName, icon: react.createElement(file_icon/* FileIcon */.aA, null) }, uploadName)); }))) },\n react.createElement(Button_Button/* Button */.zx, { "aria-label": "Upload Labels", onClick: openLabelFileBrowse, variant: "link", icon: react.createElement(upload_icon/* UploadIcon */.rG, null), isDisabled: props.isDisabled }, "Upload Labels")),\n react.createElement("input", { ref: inputRef, accept: \'.json\', type: "file", style: { display: \'none\' }, onChange: handleUploadLabel, multiple: true }))),\n props.labels.map(function (label, idx) {\n var _a, _b;\n return (react.createElement(Split/* Split */.P, { hasGutter: true, key: idx },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { isRequired: true, type: "text", id: "label-key-input", name: "label-key-input", "aria-describedby": "label-key-input-helper", "aria-label": "Label Key", value: (_a = label.key) !== null && _a !== void 0 ? _a : \'\', onChange: function (key) { return handleKeyChange(idx, key); }, validated: validKeys[idx], isDisabled: props.isDisabled }),\n react.createElement(Text/* Text */.x, null, "Key"),\n react.createElement(FormHelperText/* FormHelperText */.Q, { isHidden: validKeys[idx] !== constants/* ValidatedOptions.error */.LD.error && validValues[idx] !== constants/* ValidatedOptions.error */.LD.error, component: "div" },\n react.createElement(HelperText/* HelperText */.p, { id: "label-error-text" },\n react.createElement(HelperTextItem/* HelperTextItem */.u, { variant: "error" }, "Keys must be unique. Labels should not contain empty spaces.")))),\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { isRequired: true, type: "text", id: "label-value-input", name: "label-value-input", "aria-describedby": "label-value-input-helper", "aria-label": "Label Value", value: (_b = label.value) !== null && _b !== void 0 ? _b : \'\', onChange: function (value) { return handleValueChange(idx, value); }, validated: validValues[idx], isDisabled: props.isDisabled }),\n react.createElement(Text/* Text */.x, null, "Value")),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Button_Button/* Button */.zx, { onClick: function () { return handleDeleteLabelButtonClick(idx); }, variant: "link", "aria-label": "Remove Label", isDisabled: props.isDisabled, icon: react.createElement(close_icon/* CloseIcon */.Tw, { color: "gray", size: "sm" }) }))));\n })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Modal/Modal.js + 9 modules\nvar Modal = __webpack_require__(20699);\n;// CONCATENATED MODULE: ./src/app/Modal/CancelUploadModal.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar CancelUploadModal = function (props) {\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, width: \'40%\', isOpen: props.visible, showClose: true, onClose: props.onNo, title: props.title, actions: [\n react.createElement(Button_Button/* Button */.zx, { key: \'Yes\', variant: "primary", onClick: props.onYes }, "Yes"),\n react.createElement(Button_Button/* Button */.zx, { key: \'No\', variant: "secondary", onClick: props.onNo }, "No"),\n ] }, props.message));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/MultipleFileUpload/MultipleFileUpload.js\nvar MultipleFileUpload = __webpack_require__(85958);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/MultipleFileUpload/MultipleFileUploadMain.js + 6 modules\nvar MultipleFileUploadMain = __webpack_require__(51495);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatus.js\nvar MultipleFileUploadStatus = __webpack_require__(67699);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.js + 4 modules\nvar MultipleFileUploadStatusItem = __webpack_require__(96852);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/in-progress-icon.js\nvar in_progress_icon = __webpack_require__(94768);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/Subject.js + 1 modules\nvar Subject = __webpack_require__(82649);\n;// CONCATENATED MODULE: ./src/app/Shared/FileUploads.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar FileUploads_assign = (undefined && undefined.__assign) || function () {\n FileUploads_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return FileUploads_assign.apply(this, arguments);\n};\nvar FileUploads_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\nvar MultiFileUpload = function (_a) {\n var titleIcon = _a.titleIcon, titleText = _a.titleText, titleTextSeparator = _a.titleTextSeparator, infoText = _a.infoText, displayAccepts = _a.displayAccepts, dropZoneAccepts = _a.dropZoneAccepts, onFileSubmit = _a.onFileSubmit, uploading = _a.uploading, onFilesChange = _a.onFilesChange, submitRef = _a.submitRef, abortRef = _a.abortRef;\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var _b = react.useState([]), fileUploads = _b[0], setFileUploads = _b[1];\n var _c = react.useState(false), showCancelPrompt = _c[0], setShowCancelPrompt = _c[1];\n var dzAccept = react.useMemo(function () {\n if (dropZoneAccepts && dropZoneAccepts.length) {\n return dropZoneAccepts.join(\',\');\n }\n return displayAccepts.map(function (t) { return ".".concat(t.toLocaleLowerCase()); }).join(\',\');\n }, [dropZoneAccepts, displayAccepts]);\n var handleFileDrop = react.useCallback(function (droppedFiles) {\n setFileUploads(function (old) {\n // Check for re-uploads\n var currentFilenames = old.map(function (fileUpload) { return fileUpload.file.name; });\n var reUploadFilenames = droppedFiles.filter(function (f) { return currentFilenames.includes(f.name); }).map(function (f) { return f.name; });\n var newFileUploads = FileUploads_spreadArray(FileUploads_spreadArray([], old.filter(function (fileUpload) { return !reUploadFilenames.includes(fileUpload.file.name); }), true), droppedFiles.map(function (f) {\n return ({\n file: f,\n abortSignal: new Subject/* Subject */.x(),\n });\n }), true);\n onFilesChange && onFilesChange(newFileUploads);\n return newFileUploads;\n });\n }, [setFileUploads, onFilesChange]);\n var handleFileReject = react.useCallback(function (rejectedFiles) {\n rejectedFiles.forEach(function (f) {\n if (!dzAccept.includes(f.type) || f.type === \'\') {\n var message = "Expected file format: ".concat(dzAccept, ", but received ").concat(f.type === \'\' ? \'unknown type\' : f.type, " for ").concat(f.name);\n notifications.warning("Incompatible file format", message);\n }\n else {\n notifications.warning("Failed to load file", f.name);\n }\n });\n }, [notifications, dzAccept]);\n var handleFileRemove = react.useCallback(function (removedFilename, abort) {\n if (abort === void 0) { abort = false; }\n if (abort) {\n var fileToAbort = fileUploads.find(function (fileUpload) { return fileUpload.file.name === removedFilename; });\n fileToAbort === null || fileToAbort === void 0 ? void 0 : fileToAbort.abortSignal.next();\n }\n else {\n setFileUploads(function (old) {\n var newFileUploads = old.filter(function (fileUpload) { return fileUpload.file.name !== removedFilename; });\n onFilesChange && onFilesChange(newFileUploads);\n return newFileUploads;\n });\n }\n }, [fileUploads, setFileUploads, onFilesChange]);\n var getProgressUpdateCallback = react.useCallback(function (filename) {\n return function (progress) {\n setFileUploads(function (old) {\n var match = old.find(function (f) { return f.file.name === filename; });\n if (match) {\n return FileUploads_spreadArray(FileUploads_spreadArray([], old.filter(function (f) { return f.file.name !== filename; }), true), [\n FileUploads_assign(FileUploads_assign({}, match), { progress: {\n progressValue: progress,\n progressVariant: "".concat(progress) == \'100\' ? \'success\' : undefined,\n } }),\n ], false);\n }\n return old;\n });\n };\n }, [setFileUploads]);\n var onSingleFailure = react.useCallback(function (filename, error) {\n setFileUploads(function (old) {\n var _a;\n var match = old.find(function (f) { return f.file.name === filename; });\n if (match) {\n return FileUploads_spreadArray(FileUploads_spreadArray([], old.filter(function (f) { return f.file.name !== filename; }), true), [\n FileUploads_assign(FileUploads_assign({}, match), { progress: {\n progressValue: ((_a = match.progress) === null || _a === void 0 ? void 0 : _a.progressValue) || 0,\n progressVariant: \'danger\',\n }, error: error }),\n ], false);\n }\n return old;\n });\n }, [setFileUploads]);\n var onSingleSuccess = react.useCallback(function (filename, message) {\n setFileUploads(function (old) {\n var match = old.find(function (f) { return f.file.name === filename; });\n if (match) {\n return FileUploads_spreadArray(FileUploads_spreadArray([], old.filter(function (f) { return f.file.name !== filename; }), true), [\n FileUploads_assign(FileUploads_assign({}, match), { progress: {\n progressValue: 100,\n progressVariant: \'success\',\n }, helperText: message }),\n ], false);\n }\n return old;\n });\n }, [setFileUploads]);\n var handleSubmit = react.useCallback(function () {\n setFileUploads(function (old) {\n var toUploads = old.filter(function (f) { return f.error || !f.progress; }); // Failed or newly uploaded\n onFileSubmit(toUploads, { getProgressUpdateCallback: getProgressUpdateCallback, onSingleSuccess: onSingleSuccess, onSingleFailure: onSingleFailure });\n var newFileUploads = old.map(function (f) {\n var _a, _b;\n return (FileUploads_assign(FileUploads_assign({}, f), { error: undefined, progress: ((_a = f.progress) === null || _a === void 0 ? void 0 : _a.progressVariant) === \'success\' ? f.progress : undefined, helperText: ((_b = f.progress) === null || _b === void 0 ? void 0 : _b.progressVariant) === \'success\' ? \'Already uploaded\' : undefined }));\n });\n return newFileUploads;\n });\n }, [onFileSubmit, getProgressUpdateCallback, onSingleSuccess, onSingleFailure]);\n var handleCloseCancelModal = react.useCallback(function () { return setShowCancelPrompt(false); }, [setShowCancelPrompt]);\n var handleOpenCancelModal = react.useCallback(function () { return setShowCancelPrompt(true); }, [setShowCancelPrompt]);\n var handleAbortAll = react.useCallback(function () {\n fileUploads\n .filter(function (fileUpload) { var _a; return !((_a = fileUpload.progress) === null || _a === void 0 ? void 0 : _a.progressVariant); })\n .map(function (fileUpload) {\n fileUpload.abortSignal.next(); // trigger abort\n });\n handleCloseCancelModal();\n }, [fileUploads, handleCloseCancelModal]);\n var handleCancel = react.useCallback(function () {\n if (uploading) {\n handleOpenCancelModal();\n }\n }, [handleOpenCancelModal, uploading]);\n var numOfSuccessUploads = react.useMemo(function () {\n return fileUploads.filter(function (fUpload) { return fUpload.progress && fUpload.progress.progressVariant === \'success\'; }).length;\n }, [fileUploads]);\n var sortedFileUploads = react.useMemo(function () {\n return fileUploads.sort(function (a, b) { return a.file.name.localeCompare(b.file.name, undefined, { numeric: true }); });\n }, [fileUploads]);\n return (react.createElement(react.Fragment, null,\n react.createElement(react_router/* Prompt */.NL, { when: uploading, message: "Are you sure you wish to cancel the file upload?" }),\n react.createElement(CancelUploadModal, { visible: showCancelPrompt, title: "Upload in Progress", message: "Are you sure you wish to cancel the file uploads? Successfully uploaded files won\'t be aborted.", onYes: handleAbortAll, onNo: handleCloseCancelModal }),\n react.createElement(MultipleFileUpload/* MultipleFileUpload */.o, { onFileDrop: handleFileDrop, dropzoneProps: {\n accept: dzAccept,\n onDropRejected: handleFileReject,\n }, disabled: uploading },\n react.createElement(MultipleFileUploadMain/* MultipleFileUploadMain */.Y, { titleIcon: titleIcon || react.createElement(upload_icon/* UploadIcon */.rG, null), titleText: titleText || \'Drag and drop files here\', titleTextSeparator: titleTextSeparator || \'or\', infoText: infoText || "Accepted file types: ".concat(displayAccepts.join(\', \')) }),\n fileUploads.length ? (react.createElement(MultipleFileUploadStatus/* MultipleFileUploadStatus */.M, { statusToggleText: "".concat(numOfSuccessUploads, " of ").concat(fileUploads.length, " files uploaded"), statusToggleIcon: react.createElement(in_progress_icon/* InProgressIcon */.pG, null) }, sortedFileUploads.map(function (fileUpload) {\n var _a, _b, _c;\n return (react.createElement(MultipleFileUploadStatusItem/* MultipleFileUploadStatusItem */.B, { file: fileUpload.file, key: fileUpload.file.name, onClearClick: function () { return handleFileRemove(fileUpload.file.name, uploading); }, customFileHandler: function (_) { return undefined; }, progressValue: (_a = fileUpload.progress) === null || _a === void 0 ? void 0 : _a.progressValue, progressVariant: (_b = fileUpload.progress) === null || _b === void 0 ? void 0 : _b.progressVariant, progressHelperText: ((_c = fileUpload.error) === null || _c === void 0 ? void 0 : _c.message) || fileUpload.helperText }));\n }))) : undefined),\n react.createElement("div", { ref: submitRef, id: \'start-upload-files\', hidden: true, onClick: handleSubmit }),\n react.createElement("div", { ref: abortRef, id: \'abort-upload-files\', hidden: true, onClick: handleCancel })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Tooltip/Tooltip.js + 2 modules\nvar Tooltip = __webpack_require__(81495);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Form/Form.js\nvar Form = __webpack_require__(83115);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Form/FormGroup.js\nvar FormGroup = __webpack_require__(59775);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ExpandableSection/ExpandableSection.js + 1 modules\nvar ExpandableSection = __webpack_require__(83559);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Form/ActionGroup.js\nvar ActionGroup = __webpack_require__(68809);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/help-icon.js\nvar help_icon = __webpack_require__(84213);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/forkJoin.js\nvar forkJoin = __webpack_require__(52277);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/tap.js\nvar tap = __webpack_require__(42006);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js\nvar defaultIfEmpty = __webpack_require__(35700);\n;// CONCATENATED MODULE: ./src/app/Archives/ArchiveUploadModal.tsx\nvar ArchiveUploadModal_assign = (undefined && undefined.__assign) || function () {\n ArchiveUploadModal_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ArchiveUploadModal_assign.apply(this, arguments);\n};\nvar ArchiveUploadModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\nvar ArchiveUploadModal = function (_a) {\n var onClose = _a.onClose, props = ArchiveUploadModal_rest(_a, ["onClose"]);\n var addSubscriptions = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var submitRef = react.useRef(null); // Use ref to refer to submit trigger div\n var abortRef = react.useRef(null); // Use ref to refer to abort trigger div\n var _b = react.useState(false), uploading = _b[0], setUploading = _b[1];\n var _c = react.useState(0), numOfFiles = _c[0], setNumOfFiles = _c[1];\n var _d = react.useState(false), allOks = _d[0], setAllOks = _d[1];\n var _e = react.useState([]), labels = _e[0], setLabels = _e[1];\n var _f = react.useState(constants/* ValidatedOptions.success */.LD.success), valid = _f[0], setValid = _f[1];\n var getFormattedLabels = react.useCallback(function () {\n var formattedLabels = {};\n labels.forEach(function (l) {\n if (l.key && l.value) {\n formattedLabels[l.key] = l.value;\n }\n });\n return formattedLabels;\n }, [labels]);\n var reset = react.useCallback(function () {\n setUploading(false);\n setLabels([]);\n setValid(constants/* ValidatedOptions.success */.LD.success);\n setNumOfFiles(0);\n }, [setUploading, setLabels, setValid, setNumOfFiles]);\n var handleClose = react.useCallback(function () {\n if (uploading) {\n abortRef.current && abortRef.current.click();\n }\n else {\n reset();\n onClose();\n }\n }, [uploading, abortRef, reset, onClose]);\n var onFileSubmit = react.useCallback(function (fileUploads, _a) {\n var getProgressUpdateCallback = _a.getProgressUpdateCallback, onSingleSuccess = _a.onSingleSuccess, onSingleFailure = _a.onSingleFailure;\n setUploading(true);\n var tasks = [];\n fileUploads.forEach(function (fileUpload) {\n tasks.push(context.api\n .uploadRecording(fileUpload.file, getFormattedLabels(), getProgressUpdateCallback(fileUpload.file.name), fileUpload.abortSignal)\n .pipe((0,tap/* tap */.b)({\n next: function (_) {\n onSingleSuccess(fileUpload.file.name);\n },\n error: function (err) {\n onSingleFailure(fileUpload.file.name, err);\n },\n }), (0,catchError/* catchError */.K)(function (_) { return (0,of.of)(undefined); })));\n });\n addSubscriptions((0,forkJoin/* forkJoin */.D)(tasks)\n .pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([\'\']))\n .subscribe(function (savedNames) {\n setUploading(false);\n setAllOks(!savedNames.some(function (name) { return name === undefined; }));\n }));\n }, [addSubscriptions, context.api, setUploading, getFormattedLabels, setAllOks]);\n var handleSubmit = react.useCallback(function () {\n submitRef.current && submitRef.current.click();\n }, [submitRef]);\n var onFilesChange = react.useCallback(function (fileUploads) {\n setAllOks(!fileUploads.some(function (f) { return !f.progress || f.progress.progressVariant !== \'success\'; }));\n setNumOfFiles(fileUploads.length);\n }, [setNumOfFiles, setAllOks]);\n var submitButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Submitting\',\n spinnerAriaLabel: \'submitting-uploaded-recording\',\n isLoading: uploading,\n });\n }, [uploading]);\n return (react.createElement(Modal/* Modal */.u, { isOpen: props.visible, variant: Modal/* ModalVariant.large */.v.large, showClose: true, onClose: handleClose, title: "Re-Upload Archived Recording", description: react.createElement(Text/* Text */.x, null,\n react.createElement("span", null, "Select a JDK Flight Recorder file to re-upload. Files must be .jfr binary format and follow the naming convention used by Cryostat when archiving recordings"),\n \' \',\n react.createElement(Tooltip/* Tooltip */.u, { content: react.createElement(Text/* Text */.x, null,\n "Archive naming conventions: ",\n react.createElement("b", null, "target-name_recordingName_timestamp.jfr"),\n ".",\n react.createElement("br", null),\n "For example: io-cryostat-Cryostat_profiling_timestamp.jfr"), appendTo: utils/* portalRoot */.tO },\n react.createElement("sup", { style: { cursor: \'pointer\' } },\n react.createElement("b", null, "[?]"))),\n react.createElement("span", null, ".")) },\n react.createElement(Form/* Form */.l, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: "JFR File", isRequired: true, fieldId: "file" },\n react.createElement(MultiFileUpload, { submitRef: submitRef, abortRef: abortRef, uploading: uploading, displayAccepts: [\'JFR\'], onFileSubmit: onFileSubmit, onFilesChange: onFilesChange })),\n react.createElement(ExpandableSection/* ExpandableSection */.L, { toggleTextExpanded: "Hide metadata options", toggleTextCollapsed: "Show metadata options" },\n react.createElement(FormGroup/* FormGroup */.c, { label: "Labels", fieldId: "labels", labelIcon: react.createElement(Tooltip/* Tooltip */.u, { content: react.createElement(Text/* Text */.x, null, "Unique key-value pairs containing information about the recording."), appendTo: utils/* portalRoot */.tO },\n react.createElement(help_icon/* HelpIcon */.by, { noVerticalAlign: true })) },\n react.createElement(RecordingLabelFields, { isUploadable: true, labels: labels, setLabels: setLabels, setValid: setValid, isDisabled: uploading }))),\n react.createElement(ActionGroup/* ActionGroup */.W, null, allOks && numOfFiles ? (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClose }, "Close")) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, ArchiveUploadModal_assign({ variant: "primary", onClick: handleSubmit, isDisabled: !numOfFiles || valid !== constants/* ValidatedOptions.success */.LD.success || uploading }, submitButtonLoadingProps), uploading ? \'Submitting\' : \'Submit\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, "Cancel")))))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Checkbox/Checkbox.js\nvar Checkbox = __webpack_require__(93149);\n// EXTERNAL MODULE: ./src/app/Modal/DeleteWarningUtils.tsx\nvar DeleteWarningUtils = __webpack_require__(28829);\n;// CONCATENATED MODULE: ./src/app/Modal/DeleteWarningModal.tsx\nvar DeleteWarningModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar DeleteWarningModal = function (_a) {\n var onAccept = _a.onAccept, onClose = _a.onClose, props = DeleteWarningModal_rest(_a, ["onAccept", "onClose"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var _b = (0,react.useState)(false), doNotAsk = _b[0], setDoNotAsk = _b[1];\n var realWarningType = (0,DeleteWarningUtils/* getFromWarningMap */.Y1)(props.warningType);\n var onAcceptClose = react.useCallback(function (ev) {\n ev.stopPropagation();\n onAccept();\n onClose();\n if (doNotAsk && !!realWarningType) {\n context.settings.setDeletionDialogsEnabledFor(realWarningType.id, false);\n }\n }, [context.settings, onAccept, onClose, doNotAsk, realWarningType]);\n var onInnerClose = react.useCallback(function (ev) {\n ev && ev.stopPropagation();\n onClose();\n }, [onClose]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, title: "".concat(realWarningType === null || realWarningType === void 0 ? void 0 : realWarningType.title), description: realWarningType === null || realWarningType === void 0 ? void 0 : realWarningType.description, "aria-label": realWarningType === null || realWarningType === void 0 ? void 0 : realWarningType.ariaLabel, titleIconVariant: "warning", variant: Modal/* ModalVariant.medium */.v.medium, isOpen: props.visible, showClose: true, onClose: onInnerClose, actions: [\n react.createElement(Stack/* Stack */.K, { hasGutter: true, key: "modal-footer-stack" },\n react.createElement(Split/* Split */.P, { key: "modal-footer-split" },\n react.createElement(Button_Button/* Button */.zx, { variant: "danger", onClick: onAcceptClose }, "Delete"),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: onInnerClose }, "Cancel"))),\n ] },\n react.createElement(Checkbox/* Checkbox */.X, { id: "do-not-ask-enabled", label: "Don\'t ask me again", isChecked: doNotAsk, onChange: setDoNotAsk })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js\nvar redux_toolkit_esm = __webpack_require__(29829);\n// EXTERNAL MODULE: ./src/app/utils/LocalStorage.ts\nvar LocalStorage = __webpack_require__(74687);\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/utils.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar utils_assign = (undefined && undefined.__assign) || function () {\n utils_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return utils_assign.apply(this, arguments);\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nvar getPersistedState = function (key, _version, defaultConfig) {\n var persisted = (0,LocalStorage/* getFromLocalStorage */.fp)(key, undefined);\n if (!persisted || persisted._version !== _version) {\n return utils_assign(utils_assign({}, defaultConfig), { _version: _version });\n }\n return persisted;\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/Filters/RecordingFilterSlice.tsx\nvar RecordingFilterSlice_assign = (undefined && undefined.__assign) || function () {\n RecordingFilterSlice_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return RecordingFilterSlice_assign.apply(this, arguments);\n};\nvar RecordingFilterSlice_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar _version = \'1\';\n// Common action string format: "resource(s)/action"\nvar RecordingFilterAction;\n(function (RecordingFilterAction) {\n RecordingFilterAction["FILTER_ADD"] = "recording-filter/add";\n RecordingFilterAction["FILTER_DELETE"] = "recording-filter/delete";\n RecordingFilterAction["FILTER_DELETE_ALL"] = "recording-filter/delete-all";\n RecordingFilterAction["CATEGORY_FILTERS_DELETE"] = "recording-filter/delete-category";\n RecordingFilterAction["CATEGORY_UPDATE"] = "recording-filter-category/update";\n RecordingFilterAction["TARGET_ADD"] = "recording-filter-target/add";\n RecordingFilterAction["TARGET_DELETE"] = "recording-filter-target/delete";\n})(RecordingFilterAction || (RecordingFilterAction = {}));\nvar enumValues = new Set(Object.values(RecordingFilterAction));\nvar emptyActiveRecordingFilters = {\n Name: [],\n Label: [],\n State: [],\n StartedBeforeDate: [],\n StartedAfterDate: [],\n DurationSeconds: [],\n};\nvar allowedActiveRecordingFilters = Object.keys(emptyActiveRecordingFilters);\nvar emptyArchivedRecordingFilters = {\n Name: [],\n Label: [],\n};\nvar allowedArchivedRecordingFilters = Object.keys(emptyArchivedRecordingFilters);\nvar recordingAddFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.FILTER_ADD, function (target, category, filter, isArchived) { return ({\n payload: {\n target: target,\n category: category,\n filter: filter,\n isArchived: isArchived,\n },\n}); });\nvar recordingDeleteFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.FILTER_DELETE, function (target, category, filter, isArchived) { return ({\n payload: {\n target: target,\n category: category,\n filter: filter,\n isArchived: isArchived,\n },\n}); });\nvar recordingDeleteCategoryFiltersIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.CATEGORY_FILTERS_DELETE, function (target, category, isArchived) { return ({\n payload: {\n target: target,\n category: category,\n isArchived: isArchived,\n },\n}); });\nvar recordingDeleteAllFiltersIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.FILTER_DELETE_ALL, function (target, isArchived) { return ({\n payload: {\n target: target,\n isArchived: isArchived,\n },\n}); });\nvar recordingUpdateCategoryIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.CATEGORY_UPDATE, function (target, category, isArchived) { return ({\n payload: {\n target: target,\n category: category,\n isArchived: isArchived,\n },\n}); });\nvar recordingAddTargetIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.TARGET_ADD, function (target) { return ({\n payload: {\n target: target,\n },\n}); });\nvar recordingDeleteTargetIntent = (0,redux_toolkit_esm/* createAction */.PH)(RecordingFilterAction.TARGET_DELETE, function (target) { return ({\n payload: {\n target: target,\n },\n}); });\nvar createOrUpdateRecordingFilter = function (old, _a) {\n var filterValue = _a.filterValue, filterKey = _a.filterKey, _b = _a.deleted, deleted = _b === void 0 ? false : _b, deleteOptions = _a.deleteOptions;\n var newFilterValues;\n if (!old[filterKey]) {\n newFilterValues = [filterValue];\n }\n else {\n var oldFilterValues = old[filterKey];\n if (deleted) {\n if (deleteOptions && deleteOptions.all) {\n newFilterValues = [];\n }\n else {\n newFilterValues = oldFilterValues.filter(function (val) { return val !== filterValue; });\n }\n }\n else {\n newFilterValues = Array.from(new Set(RecordingFilterSlice_spreadArray(RecordingFilterSlice_spreadArray([], oldFilterValues, true), [filterValue], false)));\n }\n }\n var newFilters = RecordingFilterSlice_assign({}, old);\n newFilters[filterKey] = newFilterValues;\n return newFilters;\n};\nvar getTargetRecordingFilter = function (state, target) {\n var targetFilter = state.list.filter(function (targetFilters) { return targetFilters.target === target; });\n return targetFilter.length > 0 ? targetFilter[0] : createEmptyTargetRecordingFilters(target);\n};\nvar createEmptyTargetRecordingFilters = function (target) {\n return ({\n target: target,\n active: {\n selectedCategory: \'Name\',\n filters: emptyActiveRecordingFilters,\n },\n archived: {\n selectedCategory: \'Name\',\n filters: emptyArchivedRecordingFilters,\n },\n });\n};\nvar deleteAllTargetRecordingFilters = function (targetRecordingFilter, isArchived) {\n if (isArchived) {\n return RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, targetRecordingFilter), { archived: {\n selectedCategory: targetRecordingFilter.archived.selectedCategory,\n filters: emptyArchivedRecordingFilters,\n } });\n }\n return RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, targetRecordingFilter), { active: {\n selectedCategory: targetRecordingFilter.active.selectedCategory,\n filters: emptyActiveRecordingFilters,\n } });\n};\nvar INITIAL_STATE = getPersistedState(\'TARGET_RECORDING_FILTERS\', _version, {\n list: [],\n});\nvar recordingFilterReducer = (0,redux_toolkit_esm/* createReducer */.Lq)(INITIAL_STATE, function (builder) {\n builder\n .addCase(recordingAddFilterIntent, function (state, _a) {\n var payload = _a.payload;\n var oldTargetRecordingFilter = getTargetRecordingFilter(state, payload.target);\n var newTargetRecordingFilter;\n if (payload.isArchived) {\n newTargetRecordingFilter = RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, oldTargetRecordingFilter), { archived: {\n selectedCategory: payload.category,\n filters: createOrUpdateRecordingFilter(oldTargetRecordingFilter.archived.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n }),\n } });\n }\n else {\n newTargetRecordingFilter = RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, oldTargetRecordingFilter), { active: {\n selectedCategory: payload.category,\n filters: createOrUpdateRecordingFilter(oldTargetRecordingFilter.active.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n }),\n } });\n }\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== newTargetRecordingFilter.target; });\n state.list.push(newTargetRecordingFilter);\n })\n .addCase(recordingDeleteFilterIntent, function (state, _a) {\n var payload = _a.payload;\n var oldTargetRecordingFilter = getTargetRecordingFilter(state, payload.target);\n var newTargetRecordingFilter;\n if (payload.isArchived) {\n newTargetRecordingFilter = RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, oldTargetRecordingFilter), { archived: {\n selectedCategory: payload.category,\n filters: createOrUpdateRecordingFilter(oldTargetRecordingFilter.archived.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n deleted: true,\n }),\n } });\n }\n else {\n newTargetRecordingFilter = RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, oldTargetRecordingFilter), { active: {\n selectedCategory: payload.category,\n filters: createOrUpdateRecordingFilter(oldTargetRecordingFilter.active.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n deleted: true,\n }),\n } });\n }\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== newTargetRecordingFilter.target; });\n state.list.push(newTargetRecordingFilter);\n })\n .addCase(recordingDeleteCategoryFiltersIntent, function (state, _a) {\n var payload = _a.payload;\n var oldTargetRecordingFilter = getTargetRecordingFilter(state, payload.target);\n var newTargetRecordingFilter;\n if (payload.isArchived) {\n newTargetRecordingFilter = RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, oldTargetRecordingFilter), { archived: {\n selectedCategory: payload.category,\n filters: createOrUpdateRecordingFilter(oldTargetRecordingFilter.archived.filters, {\n filterKey: payload.category,\n deleted: true,\n deleteOptions: { all: true },\n }),\n } });\n }\n else {\n newTargetRecordingFilter = RecordingFilterSlice_assign(RecordingFilterSlice_assign({}, oldTargetRecordingFilter), { active: {\n selectedCategory: payload.category,\n filters: createOrUpdateRecordingFilter(oldTargetRecordingFilter.active.filters, {\n filterKey: payload.category,\n deleted: true,\n deleteOptions: { all: true },\n }),\n } });\n }\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== newTargetRecordingFilter.target; });\n state.list.push(newTargetRecordingFilter);\n })\n .addCase(recordingDeleteAllFiltersIntent, function (state, _a) {\n var payload = _a.payload;\n var oldTargetRecordingFilter = getTargetRecordingFilter(state, payload.target);\n var newTargetRecordingFilter = deleteAllTargetRecordingFilters(oldTargetRecordingFilter, payload.isArchived);\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== newTargetRecordingFilter.target; });\n state.list.push(newTargetRecordingFilter);\n })\n .addCase(recordingUpdateCategoryIntent, function (state, _a) {\n var payload = _a.payload;\n var oldTargetRecordingFilter = getTargetRecordingFilter(state, payload.target);\n var newTargetRecordingFilter = RecordingFilterSlice_assign({}, oldTargetRecordingFilter);\n if (payload.isArchived) {\n newTargetRecordingFilter.archived.selectedCategory = payload.category;\n }\n else {\n newTargetRecordingFilter.active.selectedCategory = payload.category;\n }\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== newTargetRecordingFilter.target; });\n state.list.push(newTargetRecordingFilter);\n })\n .addCase(recordingAddTargetIntent, function (state, _a) {\n var payload = _a.payload;\n var targetRecordingFilter = getTargetRecordingFilter(state, payload.target);\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== payload.target; });\n state.list.push(targetRecordingFilter);\n })\n .addCase(recordingDeleteTargetIntent, function (state, _a) {\n var payload = _a.payload;\n state.list = state.list.filter(function (targetFilters) { return targetFilters.target !== payload.target; });\n });\n});\n/* harmony default export */ const RecordingFilterSlice = (recordingFilterReducer);\n\n// EXTERNAL MODULE: ./node_modules/redux/es/redux.js\nvar redux = __webpack_require__(14890);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Settings.service.tsx\nvar Settings_service = __webpack_require__(73721);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartLine/ChartLine.js\nvar ChartLine = __webpack_require__(63209);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartArea/ChartArea.js\nvar ChartArea = __webpack_require__(79941);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/Chart/Chart.js\nvar Chart = __webpack_require__(52109);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartVoronoiContainer/ChartVoronoiContainer.js\nvar ChartVoronoiContainer = __webpack_require__(51007);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartLegend/ChartLegend.js + 2 modules\nvar ChartLegend = __webpack_require__(92190);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartLabel/ChartLabel.js\nvar ChartLabel = __webpack_require__(10310);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartAxis/ChartAxis.js\nvar ChartAxis = __webpack_require__(2370);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartGroup/ChartGroup.js\nvar ChartGroup = __webpack_require__(75949);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartDonutUtilization/ChartDonutUtilization.js + 2 modules\nvar ChartDonutUtilization = __webpack_require__(14316);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-charts/dist/esm/components/ChartUtils/chart-resize.js\nvar chart_resize = __webpack_require__(63006);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/CardTitle.js\nvar CardTitle = __webpack_require__(70);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/CardActions.js\nvar CardActions = __webpack_require__(21005);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/sync-alt-icon.js\nvar sync_alt_icon = __webpack_require__(66395);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/monitoring-icon.js\nvar monitoring_icon = __webpack_require__(39542);\n// EXTERNAL MODULE: ./node_modules/lodash/lodash.js\nvar lodash = __webpack_require__(96486);\nvar lodash_default = /*#__PURE__*/__webpack_require__.n(lodash);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/interval.js\nvar interval = __webpack_require__(16697);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-styles/dist/esm/index.js\nvar esm = __webpack_require__(38296);\n;// CONCATENATED MODULE: ./src/app/assets/cryostat_icon_rgb_default.svg\nconst cryostat_icon_rgb_default_namespaceObject = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojZmZmO30uY2xzLTJ7ZmlsbDojMWI0OTY1O30uY2xzLTN7ZmlsbDojOTVjOWU5O30uY2xzLTR7ZmlsbDojNWZhOGQzO308L3N0eWxlPjwvZGVmcz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iNjYxLjc2IDEzOS40OSA2MDcuMzggODUuMTEgNTUwLjQ1IDE0Mi4wNCA1NTAuNDUgMCA0NzMuNTUgMCA0NzMuNTUgMTQyLjA0IDQxNi42MiA4NS4xMSAzNjIuMjQgMTM5LjQ5IDUxMiAyODkuMjYgNjYxLjc2IDEzOS40OSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSI1OTcuMzQgNjU5LjgyIDY5OC45MiA2ODcuMDQgNjc3LjY0IDYwNy42MyA3NTcuMDQgNTg2LjM1IDY4Mi42OSA1MTIgNzU3LjA0IDQzNy42NSA2NzcuNjQgNDE2LjM3IDY5OC45MSAzMzYuOTYgNTk3LjM0IDM2NC4xOCA1NzAuMTMgMjYyLjYxIDUxMiAzMjAuNzQgNDUzLjg3IDI2Mi42MSA0MjYuNjYgMzY0LjE4IDMyNS4wOSAzMzYuOTYgMzQ2LjM2IDQxNi4zNyAyNjYuOTYgNDM3LjY1IDM0MS4zMSA1MTIgMjY2Ljk2IDU4Ni4zNSAzNDYuMzYgNjA3LjYzIDMyNS4wOSA2ODcuMDQgNDI2LjY2IDY1OS44MiA0NTMuODcgNzYxLjM5IDUxMiA3MDMuMjYgNTcwLjEzIDc2MS4zOSA1OTcuMzQgNjU5LjgyIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjI0Ni4yMyA0NTIuMSAyMTcuMzkgNDgwLjk0IDI0OC43NCA1MTIuMjkgMjE3LjM5IDU0My42NCAyNDYuMjMgNTcyLjQ4IDMwNi40MiA1MTIuMjkgMjQ2LjIzIDQ1Mi4xIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9Ijc3Ny43NyA0NTEuNTIgODA2LjYxIDQ4MC4zNiA3NzUuMjYgNTExLjcxIDgwNi42MSA1NDMuMDYgNzc3Ljc3IDU3MS45IDcxNy41OCA1MTEuNzEgNzc3Ljc3IDQ1MS41MiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI0MzEuNDkgNzcyLjQgMzkyLjA5IDc4Mi45NiAzODAuNjIgNzQwLjE0IDMzNy44IDc1MS42MSAzMjcuMjQgNzEyLjIyIDQwOS40NiA2OTAuMTkgNDMxLjQ5IDc3Mi40Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjY5Ny4yNiA3MTEuOTMgNjg2LjcxIDc1MS4zMiA2NDMuODggNzM5Ljg1IDYzMi40MSA3ODIuNjcgNTkzLjAxIDc3Mi4xMSA2MTUuMDQgNjg5LjkgNjk3LjI2IDcxMS45MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI1OTIuNTEgMjUxLjYgNjMxLjkxIDI0MS4wNCA2NDMuMzggMjgzLjg2IDY4Ni4yIDI3Mi4zOSA2OTYuNzYgMzExLjc4IDYxNC41NCAzMzMuODEgNTkyLjUxIDI1MS42Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjMyNi43NCAzMTIuMDcgMzM3LjI5IDI3Mi42OCAzODAuMTIgMjg0LjE1IDM5MS41OSAyNDEuMzMgNDMwLjk5IDI1MS44OSA0MDguOTYgMzM0LjEgMzI2Ljc0IDMxMi4wNyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNCIgcG9pbnRzPSIyNjQuMjggMTk2LjA1IDE5MCAyMTUuOTUgMjEwLjgzIDI5My43MiA4Ny44MiAyMjIuNyA0OS4zNyAyODkuMyAxNzIuMzggMzYwLjMyIDk0LjYxIDM4MS4xNiAxMTQuNTIgNDU1LjQ1IDMxOS4xIDQwMC42MyAyNjQuMjggMTk2LjA1Ii8+PHBvbHlnb24gY2xhc3M9ImNscy00IiBwb2ludHM9IjExNC41MiA1NjguNTYgOTQuNjEgNjQyLjg0IDE3Mi4zOCA2NjMuNjggNDkuMzcgNzM0LjcgODcuODIgODAxLjMgMjEwLjgzIDczMC4yOCAxOTAgODA4LjA1IDI2NC4yOCA4MjcuOTUgMzE5LjEgNjIzLjM3IDExNC41MiA1NjguNTYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMzYyLjI0IDg4NC41MSA0MTYuNjIgOTM4Ljg5IDQ3My41NSA4ODEuOTYgNDczLjU1IDEwMjQgNTUwLjQ1IDEwMjQgNTUwLjQ1IDg4MS45NiA2MDcuMzggOTM4Ljg5IDY2MS43NiA4ODQuNTEgNTEyIDczNC43NCAzNjIuMjQgODg0LjUxIi8+PHBvbHlnb24gY2xhc3M9ImNscy00IiBwb2ludHM9Ijc1OS43MiA4MjcuOTUgODM0IDgwOC4wNSA4MTMuMTcgNzMwLjI4IDkzNi4xOCA4MDEuMyA5NzQuNjMgNzM0LjcgODUxLjYyIDY2My42OCA5MjkuMzkgNjQyLjg0IDkwOS40OCA1NjguNTUgNzA0LjkgNjIzLjM3IDc1OS43MiA4MjcuOTUiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iOTA5LjQ4IDQ1NS40NCA5MjkuMzkgMzgxLjE2IDg1MS42MiAzNjAuMzIgOTc0LjYzIDI4OS4zIDkzNi4xOCAyMjIuNyA4MTMuMTcgMjkzLjcyIDgzNCAyMTUuOTUgNzU5LjcyIDE5Ni4wNSA3MDQuOSA0MDAuNjMgOTA5LjQ4IDQ1NS40NCIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUxMi41NCw1NzkuNDdjLTM3LjQ3LDAtNjcuOTYtMzAuNDktNjcuOTYtNjcuOTZzMzAuNDktNjcuOTYsNjcuOTYtNjcuOTZjMjUuMTEsMCw0Ny4wNiwxMy42OSw1OC44MiwzNGw2OS4xNy0zOS43Ni0xMjguNTMtNzQuMjEtMTI4LjUzLDc0LjIxdjE0OC40MmwxMjguNTMsNzQuMjEsMTI4LjUzLTc0LjIxLTY5LjE3LTQwLjczYy0xMS43NywyMC4zLTMzLjcyLDMzLjk5LTU4LjgyLDMzLjk5WiIvPjwvc3ZnPg==";\n;// CONCATENATED MODULE: ./src/app/utils/withThemedIcon.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar withThemedIcon = function (icon, darkIcon, alt) {\n var WithThemedIcon = function () {\n var theme = useTheme()[0];\n if (theme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK) {\n return react.createElement("img", { src: darkIcon, alt: alt });\n }\n else {\n return react.createElement("img", { src: icon, alt: alt });\n }\n };\n return WithThemedIcon;\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/user-icon.js\nvar user_icon = __webpack_require__(63191);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/unknown-icon.js\nvar unknown_icon = __webpack_require__(17542);\n// EXTERNAL MODULE: ./node_modules/react-redux/es/index.js + 13 modules\nvar react_redux_es = __webpack_require__(9473);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyState.js\nvar EmptyState = __webpack_require__(9947);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStateIcon.js\nvar EmptyStateIcon = __webpack_require__(38424);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Title/Title.js\nvar Title = __webpack_require__(60485);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStateBody.js\nvar EmptyStateBody = __webpack_require__(75106);\n;// CONCATENATED MODULE: ./src/app/ErrorView/ErrorView.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar authFailMessage = \'Authentication failure\';\nvar missingSSLMessage = \'Bad Gateway\';\nvar isAuthFail = function (message) { return message === authFailMessage; };\nvar ErrorView = function (props) {\n return (react.createElement(react.Fragment, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: exclamation_circle_icon/* ExclamationCircleIcon */.$O, color: \'#a30000\' }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, props.title),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null,\n react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, null,\n react.createElement(StackItem/* StackItem */.v, null, props.message),\n props.retry && (react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: props.retry }, props.retryButtonMessage || \'Retry\')))))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/Filters/AutomatedAnalysisFilterSlice.tsx\nvar AutomatedAnalysisFilterSlice_assign = (undefined && undefined.__assign) || function () {\n AutomatedAnalysisFilterSlice_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AutomatedAnalysisFilterSlice_assign.apply(this, arguments);\n};\nvar AutomatedAnalysisFilterSlice_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar AutomatedAnalysisFilterSlice_version = \'1\';\n// Common action string format: "resource(s)/action"\nvar AutomatedAnalysisFilterAction;\n(function (AutomatedAnalysisFilterAction) {\n AutomatedAnalysisFilterAction["GLOBAL_FILTER_ADD"] = "automated-analysis-global-filter/add";\n AutomatedAnalysisFilterAction["FILTER_ADD"] = "automated-analysis-filter/add";\n AutomatedAnalysisFilterAction["FILTER_DELETE"] = "automated-analysis-filter/delete";\n AutomatedAnalysisFilterAction["FILTER_DELETE_ALL"] = "automated-analysis-filter/delete_all";\n AutomatedAnalysisFilterAction["CATEGORY_FILTERS_DELETE"] = "automated-analysis-filters/delete";\n AutomatedAnalysisFilterAction["CATEGORY_UPDATE"] = "automated-analysis-category/update";\n AutomatedAnalysisFilterAction["TARGET_ADD"] = "automated-analysis-target/add";\n AutomatedAnalysisFilterAction["TARGET_DELETE"] = "automated-analysis-target/delete";\n})(AutomatedAnalysisFilterAction || (AutomatedAnalysisFilterAction = {}));\nvar AutomatedAnalysisFilterSlice_enumValues = new Set(Object.values(AutomatedAnalysisFilterAction));\nvar emptyAutomatedAnalysisFilters = {\n Name: [],\n Topic: [],\n};\nvar allowedAutomatedAnalysisFilters = Object.keys(emptyAutomatedAnalysisFilters);\nvar automatedAnalysisAddGlobalFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.GLOBAL_FILTER_ADD, function (category, filter) { return ({\n payload: {\n category: category,\n filter: filter,\n },\n}); });\nvar automatedAnalysisAddFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.FILTER_ADD, function (target, category, filter) { return ({\n payload: {\n target: target,\n category: category,\n filter: filter,\n },\n}); });\nvar automatedAnalysisDeleteFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.FILTER_DELETE, function (target, category, filter) { return ({\n payload: {\n target: target,\n category: category,\n filter: filter,\n },\n}); });\nvar automatedAnalysisDeleteCategoryFiltersIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.CATEGORY_FILTERS_DELETE, function (target, category) { return ({\n payload: {\n target: target,\n category: category,\n },\n}); });\nvar automatedAnalysisDeleteAllFiltersIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.FILTER_DELETE_ALL, function (target) { return ({\n payload: {\n target: target,\n },\n}); });\nvar automatedAnalysisUpdateCategoryIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.CATEGORY_UPDATE, function (target, category) { return ({\n payload: {\n target: target,\n category: category,\n },\n}); });\nvar automatedAnalysisAddTargetIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.TARGET_ADD, function (target) { return ({\n payload: {\n target: target,\n },\n}); });\nvar automatedAnalysisDeleteTargetIntent = (0,redux_toolkit_esm/* createAction */.PH)(AutomatedAnalysisFilterAction.TARGET_DELETE, function (target) { return ({\n payload: {\n target: target,\n },\n}); });\nvar createOrUpdateAutomatedAnalysisGlobalFilter = function (old, _a) {\n var filterValue = _a.filterValue, filterKey = _a.filterKey;\n var newFilters = AutomatedAnalysisFilterSlice_assign({}, old);\n newFilters[filterKey] = filterValue;\n return newFilters;\n};\nvar createOrUpdateAutomatedAnalysisFilter = function (old, _a) {\n var filterValue = _a.filterValue, filterKey = _a.filterKey, _b = _a.deleted, deleted = _b === void 0 ? false : _b, deleteOptions = _a.deleteOptions;\n var newFilterValues;\n if (!old[filterKey]) {\n newFilterValues = [filterValue];\n }\n else {\n var oldFilterValues = old[filterKey];\n if (deleted) {\n if (deleteOptions && deleteOptions.all) {\n newFilterValues = [];\n }\n else {\n newFilterValues = oldFilterValues.filter(function (val) { return val !== filterValue; });\n }\n }\n else {\n newFilterValues = Array.from(new Set(AutomatedAnalysisFilterSlice_spreadArray(AutomatedAnalysisFilterSlice_spreadArray([], oldFilterValues, true), [filterValue], false)));\n }\n }\n var newFilters = AutomatedAnalysisFilterSlice_assign({}, old);\n newFilters[filterKey] = newFilterValues;\n return newFilters;\n};\nvar getAutomatedAnalysisGlobalFilter = function (state) {\n return state.globalFilters;\n};\nvar getAutomatedAnalysisFilter = function (state, target) {\n var targetFilter = state.targetFilters.filter(function (targetFilters) { return targetFilters.target === target; });\n return targetFilter.length > 0 ? targetFilter[0] : createEmptyAutomatedAnalysisFilters(target);\n};\nvar createEmptyAutomatedAnalysisFilters = function (target) {\n return ({\n target: target,\n selectedCategory: \'Name\',\n filters: emptyAutomatedAnalysisFilters,\n });\n};\nvar deleteAllAutomatedAnalysisFilters = function (automatedAnalysisFilter) {\n return AutomatedAnalysisFilterSlice_assign(AutomatedAnalysisFilterSlice_assign({}, automatedAnalysisFilter), { selectedCategory: automatedAnalysisFilter.selectedCategory, filters: emptyAutomatedAnalysisFilters });\n};\nvar AutomatedAnalysisFilterSlice_INITIAL_STATE = getPersistedState(\'AUTOMATED_ANALYSIS_FILTERS\', AutomatedAnalysisFilterSlice_version, {\n state: {\n targetFilters: [],\n globalFilters: { filters: { Score: 0 } },\n },\n});\nvar automatedAnalysisFilterReducer = (0,redux_toolkit_esm/* createReducer */.Lq)(AutomatedAnalysisFilterSlice_INITIAL_STATE, function (builder) {\n builder\n .addCase(automatedAnalysisAddGlobalFilterIntent, function (state, _a) {\n var payload = _a.payload;\n var oldAutomatedAnalysisGlobalFilter = getAutomatedAnalysisGlobalFilter(state.state);\n state.state.globalFilters = {\n filters: createOrUpdateAutomatedAnalysisGlobalFilter(oldAutomatedAnalysisGlobalFilter.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n }),\n };\n })\n .addCase(automatedAnalysisAddFilterIntent, function (state, _a) {\n var payload = _a.payload;\n var oldAutomatedAnalysisFilter = getAutomatedAnalysisFilter(state.state, payload.target);\n var newAutomatedAnalysisFilter = AutomatedAnalysisFilterSlice_assign(AutomatedAnalysisFilterSlice_assign({}, oldAutomatedAnalysisFilter), { selectedCategory: payload.category, filters: createOrUpdateAutomatedAnalysisFilter(oldAutomatedAnalysisFilter.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n }) });\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== newAutomatedAnalysisFilter.target; });\n state.state.targetFilters.push(newAutomatedAnalysisFilter);\n })\n .addCase(automatedAnalysisDeleteFilterIntent, function (state, _a) {\n var payload = _a.payload;\n var oldAutomatedAnalysisFilter = getAutomatedAnalysisFilter(state.state, payload.target);\n var newAutomatedAnalysisFilter = AutomatedAnalysisFilterSlice_assign(AutomatedAnalysisFilterSlice_assign({}, oldAutomatedAnalysisFilter), { selectedCategory: payload.category, filters: createOrUpdateAutomatedAnalysisFilter(oldAutomatedAnalysisFilter.filters, {\n filterKey: payload.category,\n filterValue: payload.filter,\n deleted: true,\n }) });\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== newAutomatedAnalysisFilter.target; });\n state.state.targetFilters.push(newAutomatedAnalysisFilter);\n })\n .addCase(automatedAnalysisDeleteCategoryFiltersIntent, function (state, _a) {\n var payload = _a.payload;\n var oldAutomatedAnalysisFilter = getAutomatedAnalysisFilter(state.state, payload.target);\n var newAutomatedAnalysisFilter = AutomatedAnalysisFilterSlice_assign(AutomatedAnalysisFilterSlice_assign({}, oldAutomatedAnalysisFilter), { selectedCategory: payload.category, filters: createOrUpdateAutomatedAnalysisFilter(oldAutomatedAnalysisFilter.filters, {\n filterKey: payload.category,\n deleted: true,\n deleteOptions: { all: true },\n }) });\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== newAutomatedAnalysisFilter.target; });\n state.state.targetFilters.push(newAutomatedAnalysisFilter);\n })\n .addCase(automatedAnalysisDeleteAllFiltersIntent, function (state, _a) {\n var payload = _a.payload;\n var oldAutomatedAnalysisFilter = getAutomatedAnalysisFilter(state.state, payload.target);\n var newAutomatedAnalysisFilter = deleteAllAutomatedAnalysisFilters(oldAutomatedAnalysisFilter);\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== newAutomatedAnalysisFilter.target; });\n state.state.targetFilters.push(newAutomatedAnalysisFilter);\n })\n .addCase(automatedAnalysisUpdateCategoryIntent, function (state, _a) {\n var payload = _a.payload;\n var oldAutomatedAnalysisFilter = getAutomatedAnalysisFilter(state.state, payload.target);\n var newAutomatedAnalysisFilter = AutomatedAnalysisFilterSlice_assign({}, oldAutomatedAnalysisFilter);\n newAutomatedAnalysisFilter.selectedCategory = payload.category;\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== newAutomatedAnalysisFilter.target; });\n state.state.targetFilters.push(newAutomatedAnalysisFilter);\n })\n .addCase(automatedAnalysisAddTargetIntent, function (state, _a) {\n var payload = _a.payload;\n var AutomatedAnalysisFilter = getAutomatedAnalysisFilter(state.state, payload.target);\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== payload.target; });\n state.state.targetFilters.push(AutomatedAnalysisFilter);\n })\n .addCase(automatedAnalysisDeleteTargetIntent, function (state, _a) {\n var payload = _a.payload;\n state.state.targetFilters = state.state.targetFilters.filter(function (targetFilters) { return targetFilters.target !== payload.target; });\n });\n});\n/* harmony default export */ const AutomatedAnalysisFilterSlice = (automatedAnalysisFilterReducer);\n\n// EXTERNAL MODULE: ./src/app/Shared/Services/Api.service.tsx\nvar Api_service = __webpack_require__(68038);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Report.service.tsx\nvar Report_service = __webpack_require__(47627);\n// EXTERNAL MODULE: ./src/app/Shared/Services/Target.service.tsx\nvar Target_service = __webpack_require__(38386);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStateSecondaryActions.js\nvar EmptyStateSecondaryActions = __webpack_require__(35293);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Grid/Grid.js\nvar Grid = __webpack_require__(50693);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Grid/GridItem.js\nvar GridItem = __webpack_require__(16475);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/LabelGroup/LabelGroup.js\nvar LabelGroup = __webpack_require__(21947);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Toolbar/Toolbar.js + 1 modules\nvar Toolbar = __webpack_require__(78933);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Toolbar/ToolbarContent.js + 1 modules\nvar ToolbarContent = __webpack_require__(90440);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Toolbar/ToolbarGroup.js\nvar ToolbarGroup = __webpack_require__(33109);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Toolbar/ToolbarItem.js\nvar ToolbarItem = __webpack_require__(1595);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Switch/Switch.js\nvar Switch = __webpack_require__(13946);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Label/Label.js\nvar Label = __webpack_require__(69174);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Level/Level.js\nvar Level = __webpack_require__(48140);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Level/LevelItem.js\nvar LevelItem = __webpack_require__(86050);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Card/CardExpandableContent.js\nvar CardExpandableContent = __webpack_require__(42744);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/outlined-question-circle-icon.js\nvar outlined_question_circle_icon = __webpack_require__(91290);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/search-icon.js\nvar search_icon = __webpack_require__(80810);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/spinner2-icon.js\nvar spinner2_icon = __webpack_require__(81437);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/trash-icon.js\nvar trash_icon = __webpack_require__(37355);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/info-circle-icon.js\nvar info_circle_icon = __webpack_require__(53688);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/exclamation-triangle-icon.js\nvar exclamation_triangle_icon = __webpack_require__(69957);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/check-circle-icon.js\nvar check_circle_icon = __webpack_require__(68778);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/process-automation-icon.js\nvar process_automation_icon = __webpack_require__(63609);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/filter.js\nvar filter = __webpack_require__(94975);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/first.js + 2 modules\nvar first = __webpack_require__(89475);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/map.js\nvar map = __webpack_require__(29127);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Flex/Flex.js\nvar Flex = __webpack_require__(28191);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Flex/FlexItem.js\nvar FlexItem = __webpack_require__(92298);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/OuterScrollContainer.js\nvar OuterScrollContainer = __webpack_require__(65793);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/InnerScrollContainer.js\nvar InnerScrollContainer = __webpack_require__(46040);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/TableComposable.js + 1 modules\nvar TableComposable = __webpack_require__(987);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/Thead.js\nvar Thead = __webpack_require__(58240);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/Tr.js\nvar Tr = __webpack_require__(86151);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/Th.js + 15 modules\nvar Th = __webpack_require__(35890);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/Tbody.js\nvar Tbody = __webpack_require__(3134);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/TableComposable/Td.js + 10 modules\nvar Td = __webpack_require__(56494);\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCardList.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar AutomatedAnalysisCardList = function (props) {\n var t = (0,es/* useTranslation */.$G)().t;\n var _a = react.useState({}), sortBy = _a[0], setSortBy = _a[1];\n var icon = react.useCallback(function (score) {\n return score == Report_service/* AutomatedAnalysisScore.NA_SCORE */.xY.NA_SCORE ? (react.createElement("span", { className: (0,esm.css)(\'pf-m-grey\', \'pf-c-label__icon\') },\n react.createElement(info_circle_icon/* InfoCircleIcon */.uM, null))) : score < Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD ? (react.createElement("span", { className: (0,esm.css)(\'pf-m-green\', \'pf-c-label__icon\') },\n react.createElement(check_circle_icon/* CheckCircleIcon */.rE, null))) : score < Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD ? (react.createElement("span", { className: (0,esm.css)(\'pf-m-orange\', \'pf-c-label__icon\') },\n react.createElement(exclamation_triangle_icon/* ExclamationTriangleIcon */.LP, null))) : (react.createElement("span", { className: (0,esm.css)(\'pf-m-red\', \'pf-c-label__icon\') },\n react.createElement(exclamation_circle_icon/* ExclamationCircleIcon */.$O, null)));\n }, []);\n var getSortParams = react.useCallback(function (columnIndex) { return ({\n sortBy: sortBy,\n onSort: function (_event, index, direction) {\n setSortBy({ index: index, direction: direction });\n },\n columnIndex: columnIndex,\n }); }, [setSortBy, sortBy]);\n var flatFiltered = react.useMemo(function () {\n return props.evaluations\n .flatMap(function (_a) {\n var _ = _a[0], evaluations = _a[1];\n return evaluations.map(function (evaluation) { return evaluation; });\n })\n .sort(function (a, b) {\n var aValue = sortBy.index === 0 ? a.name : a.score;\n var bValue = sortBy.index === 0 ? b.name : b.score;\n if (typeof aValue === \'string\' && typeof bValue === \'string\') {\n if (sortBy.direction === \'asc\') {\n return aValue.localeCompare(bValue);\n }\n return bValue.localeCompare(aValue);\n }\n if (typeof aValue === \'number\' && typeof bValue === \'number\') {\n if (sortBy.direction === \'asc\') {\n if (aValue === bValue) {\n return a.name.localeCompare(b.name);\n }\n return aValue - bValue;\n }\n else {\n if (aValue === bValue) {\n return b.name.localeCompare(a.name);\n }\n return bValue - aValue;\n }\n }\n return 0;\n });\n }, [sortBy, props.evaluations]);\n return (react.createElement(OuterScrollContainer/* OuterScrollContainer */.U, { className: "automated-analysis-datalist-outerscroll" },\n react.createElement(InnerScrollContainer/* InnerScrollContainer */.F, { className: "automated-analysis-datalist-innerscroll" },\n react.createElement(TableComposable/* TableComposable */.X, { "aria-label": \'Automated Analysis Data List\', gridBreakPoint: \'grid-md\', isStickyHeader: true },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, { sort: getSortParams(0) }, t(\'NAME\', { ns: \'common\' })),\n react.createElement(Th.Th, { modifier: "wrap", sort: getSortParams(1) }, t(\'SCORE\', { ns: \'common\' })),\n react.createElement(Th.Th, { modifier: "truncate" }, t(\'DESCRIPTION\', { ns: \'common\' })))),\n react.createElement(Tbody/* Tbody */.p, null, flatFiltered.map(function (evaluation) {\n return (react.createElement(Tr.Tr, { key: evaluation.name },\n react.createElement(Td.Td, { dataLabel: t(\'NAME\', { ns: \'common\' }), width: 10 }, evaluation.name),\n react.createElement(Td.Td, { dataLabel: t(\'SCORE\', { ns: \'common\' }), modifier: "wrap" },\n react.createElement(Flex/* Flex */.k, { spaceItems: { default: \'spaceItemsSm\' } },\n react.createElement(FlexItem/* FlexItem */.B, null, evaluation.score == Report_service/* AutomatedAnalysisScore.NA_SCORE */.xY.NA_SCORE\n ? t(\'N/A\', { ns: \'common\' })\n : evaluation.score.toFixed(1)),\n react.createElement(FlexItem/* FlexItem */.B, null, icon(evaluation.score)))),\n react.createElement(Td.Td, { modifier: "breakWord", dataLabel: t(\'DESCRIPTION\', { ns: \'common\' }) }, transformAADescription(evaluation.description))));\n }))))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerPanelContent.js\nvar DrawerPanelContent = __webpack_require__(16941);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerHead.js\nvar DrawerHead = __webpack_require__(58409);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerActions.js\nvar DrawerActions = __webpack_require__(76770);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerCloseButton.js\nvar DrawerCloseButton = __webpack_require__(28985);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerPanelBody.js\nvar DrawerPanelBody = __webpack_require__(29821);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/InputGroup/InputGroup.js\nvar InputGroup = __webpack_require__(65802);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerContentBody.js\nvar DrawerContentBody = __webpack_require__(16537);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/Drawer.js\nvar Drawer = __webpack_require__(5436);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerContent.js + 1 modules\nvar DrawerContent = __webpack_require__(46321);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/cog-icon.js\nvar cog_icon = __webpack_require__(75386);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js + 1 modules\nvar mergeMap = __webpack_require__(5014);\n;// CONCATENATED MODULE: ./src/app/AppLayout/CredentialAuthForm.tsx\nvar CredentialAuthForm_assign = (undefined && undefined.__assign) || function () {\n CredentialAuthForm_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CredentialAuthForm_assign.apply(this, arguments);\n};\nvar CredentialAuthForm_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nvar CredentialAuthForm = function (_a) {\n var onDismiss = _a.onDismiss, onSave = _a.onSave, onCredentialChange = _a.onCredentialChange, loading = _a.loading, isDisabled = _a.isDisabled, focus = _a.focus, children = _a.children, props = CredentialAuthForm_rest(_a, ["onDismiss", "onSave", "onCredentialChange", "loading", "isDisabled", "focus", "children"]);\n var _b = react.useState(\'\'), username = _b[0], setUsername = _b[1];\n var _c = react.useState(\'\'), password = _c[0], setPassword = _c[1];\n var handleSave = react.useCallback(function () {\n onSave(username, password);\n }, [onSave, username, password]);\n var handleDismiss = react.useCallback(function () {\n // Do not set state as form is unmounted after cancel\n onDismiss();\n }, [onDismiss]);\n var handleKeyUp = react.useCallback(function (event) {\n if (event.code === \'Enter\' && username !== \'\' && password !== \'\') {\n handleSave();\n }\n }, [handleSave, username, password]);\n var saveButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Saving\',\n spinnerAriaLabel: \'saving-credentials\',\n isLoading: loading,\n });\n }, [loading]);\n return (react.createElement(Form/* Form */.l, CredentialAuthForm_assign({}, props),\n children,\n react.createElement(FormGroup/* FormGroup */.c, { isRequired: true, label: "Username", fieldId: "username" },\n react.createElement(TextInput/* TextInput */.oi, { value: username, isDisabled: isDisabled || loading, isRequired: true, type: "text", id: "username", onChange: function (v) {\n setUsername(v);\n onCredentialChange &&\n onCredentialChange({\n username: v,\n password: password,\n });\n }, onKeyUp: handleKeyUp, autoFocus: focus })),\n react.createElement(FormGroup/* FormGroup */.c, { isRequired: true, label: "Password", fieldId: "password" },\n react.createElement(TextInput/* TextInput */.oi, { value: password, isDisabled: isDisabled || loading, isRequired: true, type: "password", id: "password", onChange: function (v) {\n setPassword(v);\n onCredentialChange &&\n onCredentialChange({\n username: username,\n password: v,\n });\n }, onKeyUp: handleKeyUp })),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, CredentialAuthForm_assign({ variant: "primary", onClick: handleSave }, saveButtonLoadingProps, { isDisabled: isDisabled || loading || username === \'\' || password === \'\' }), loading ? \'Saving\' : \'Save\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: handleDismiss, isDisabled: isDisabled || loading }, "Cancel"))));\n};\n\n;// CONCATENATED MODULE: ./src/app/AppLayout/AuthModal.tsx\nvar AuthModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar AuthModal = function (_a) {\n var onDismiss = _a.onDismiss, onPropsSave = _a.onSave, targetObs = _a.targetObs, props = AuthModal_rest(_a, ["onDismiss", "onSave", "targetObs"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var _b = react.useState(false), loading = _b[0], setLoading = _b[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var onSave = react.useCallback(function (username, password) {\n setLoading(true);\n addSubscription(targetObs\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,first/* first */.P)(), (0,map/* map */.U)(function (target) { return target.connectUrl; }), (0,mergeMap/* mergeMap */.z)(function (connectUrl) { return context.authCredentials.setCredential(connectUrl, username, password); }))\n .subscribe(function (ok) {\n setLoading(false);\n if (ok) {\n onPropsSave();\n }\n }));\n }, [addSubscription, context.authCredentials, targetObs, setLoading, onPropsSave]);\n return (react.createElement(Modal/* Modal */.u, { isOpen: props.visible, variant: Modal/* ModalVariant.large */.v.large, showClose: !loading, onClose: onDismiss, title: "Authentication Required", description: react.createElement(Text/* Text */.x, null,\n "This target JVM requires authentication. The credentials you provide here will be passed from Cryostat to the target when establishing JMX connections. Enter credentials specific to this target, or go to",\n \' \',\n react.createElement(react_router_dom.Link, { onClick: onDismiss, to: "/security" }, "Security"),\n \' \',\n "to add a credential matching multiple targets. Visit",\n \' \',\n react.createElement(react_router_dom.Link, { onClick: onDismiss, to: "/settings" }, "Settings"),\n \' \',\n "to confirm and configure whether these credentials will be held only for this browser session or stored encrypted in the Cryostat backend.") },\n react.createElement(CredentialAuthForm, { onSave: onSave, onDismiss: onDismiss, focus: true, loading: loading })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/FormSelect/FormSelect.js\nvar FormSelect = __webpack_require__(90784);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/FormSelect/FormSelectOption.js\nvar FormSelectOption = __webpack_require__(22608);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/FormSelect/FormSelectOptionGroup.js\nvar FormSelectOptionGroup = __webpack_require__(90773);\n;// CONCATENATED MODULE: ./src/app/Shared/SelectTemplateSelectorForm.tsx\n\n\nvar SelectTemplateSelectorForm = function (_a) {\n var selected = _a.selected, templates = _a.templates, disabled = _a.disabled, validated = _a.validated, onSelect = _a.onSelect;\n var groups = react.useMemo(function () {\n return [\n {\n groupLabel: \'Target Templates\',\n options: templates\n .filter(function (t) { return t.type === \'TARGET\'; })\n .map(function (t) { return ({\n value: "".concat(t.name, ",").concat(t.type),\n label: t.name,\n }); }),\n },\n {\n groupLabel: \'Custom Templates\',\n options: templates\n .filter(function (t) { return t.type === \'CUSTOM\'; })\n .map(function (t) { return ({\n value: "".concat(t.name, ",").concat(t.type),\n label: t.name,\n }); }),\n },\n ];\n }, [templates]);\n var handleTemplateSelect = react.useCallback(function (selected) {\n if (!selected.length) {\n onSelect(undefined, undefined);\n }\n else {\n var str = selected.split(\',\');\n onSelect(str[0], str[1]);\n }\n }, [onSelect]);\n return (react.createElement(react.Fragment, null,\n react.createElement(FormSelect/* FormSelect */.i, { isDisabled: disabled, value: selected, validated: validated || constants/* ValidatedOptions.default */.LD["default"], onChange: handleTemplateSelect, "aria-label": "Event Template Input", id: "recording-template", "data-quickstart-id": "template-selector" },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "-1", value: "", label: "Select a Template", isPlaceholder: true }),\n groups.map(function (group, index) { return (react.createElement(FormSelectOptionGroup/* FormSelectOptionGroup */.k, { isDisabled: group.disabled, key: index, label: group.groupLabel }, group.options.map(function (option, idx) { return (react.createElement(FormSelectOption/* FormSelectOption */.j, { key: idx, label: option.label, value: option.value, isDisabled: option.disabled })); }))); }))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/disconnected-icon.js\nvar disconnected_icon = __webpack_require__(12136);\n;// CONCATENATED MODULE: ./src/app/TargetView/NoTargetSelected.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar NoTargetSelected = function () {\n return (react.createElement(react.Fragment, null,\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardTitle/* CardTitle */.l, null,\n react.createElement(disconnected_icon/* DisconnectedIcon */.yK, null),\n "\\u00A0 No target selected"),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, "To view this content, select a JVM target.")))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/CodeBlock/CodeBlock.js\nvar CodeBlock = __webpack_require__(74046);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/CodeBlock/CodeBlockCode.js\nvar CodeBlockCode = __webpack_require__(35730);\n;// CONCATENATED MODULE: ./src/app/Shared/SerializedTarget.tsx\n\n\n\nvar SerializedTarget = function (props) {\n return (react.createElement(react.Fragment, null, !props.target ? (react.createElement(NoTargetSelected, null)) : (react.createElement(CodeBlock/* CodeBlock */.d, null,\n react.createElement(CodeBlockCode/* CodeBlockCode */.B, null, JSON.stringify(props.target, null, props.indentLevel || 2))))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Select/SelectGroup.js\nvar SelectGroup = __webpack_require__(44210);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Select/SelectOption.js\nvar SelectOption = __webpack_require__(92694);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Select/Select.js + 2 modules\nvar Select = __webpack_require__(65381);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Select/selectConstants.js\nvar selectConstants = __webpack_require__(64403);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/container-node-icon.js\nvar container_node_icon = __webpack_require__(16459);\n;// CONCATENATED MODULE: ./src/app/Shared/TargetSelect.tsx\nvar TargetSelect_assign = (undefined && undefined.__assign) || function () {\n TargetSelect_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TargetSelect_assign.apply(this, arguments);\n};\nvar TargetSelect_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar TargetSelect = function (_a) {\n var onSelect = _a.onSelect, simple = _a.simple, props = TargetSelect_rest(_a, ["onSelect", "simple"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var firstLoadRef = react.useRef(false);\n var _b = react.useState(false), isExpanded = _b[0], setExpanded = _b[1];\n var _c = react.useState(Target_service/* NO_TARGET */.JE), selected = _c[0], setSelected = _c[1];\n var _d = react.useState([]), targets = _d[0], setTargets = _d[1];\n var _e = react.useState(false), isDropdownOpen = _e[0], setDropdownOpen = _e[1];\n var _f = react.useState(false), isLoading = _f[0], setLoading = _f[1];\n var onExpand = react.useCallback(function () {\n setExpanded(function (v) { return !v; });\n }, [setExpanded]);\n var _refreshTargetList = react.useCallback(function () {\n setLoading(true);\n addSubscription(context.targets.queryForTargets().subscribe(function () {\n // Reset loading and context.targets.targets will emit\n setLoading(false);\n }));\n }, [addSubscription, context.targets, setLoading]);\n var handleSelect = react.useCallback(function (_, selection, isPlaceholder) {\n setDropdownOpen(false);\n var toSelect = isPlaceholder ? Target_service/* NO_TARGET */.JE : selection;\n onSelect && onSelect(toSelect);\n setSelected(toSelect);\n }, [setDropdownOpen, onSelect, setSelected]);\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return _refreshTargetList(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, _refreshTargetList]);\n react.useEffect(function () {\n if (selected !== Target_service/* NO_TARGET */.JE && !(0,Target_service/* includesTarget */.vR)(targets, selected)) {\n handleSelect(undefined, undefined, true);\n }\n if (targets.length && !firstLoadRef.current) {\n firstLoadRef.current = true;\n var cachedUrl_1 = (0,LocalStorage/* getFromLocalStorage */.fp)(\'TARGET\', undefined);\n var matched = targets.find(function (tn) { return tn.connectUrl === cachedUrl_1; });\n if (matched) {\n handleSelect(undefined, matched, false);\n }\n }\n }, [handleSelect, targets, selected, firstLoadRef]);\n var selectOptions = react.useMemo(function () {\n var options = [];\n var groupNames = new Set();\n targets.forEach(function (t) { var _a; return groupNames.add(((_a = t.annotations) === null || _a === void 0 ? void 0 : _a.cryostat[\'REALM\']) || \'Others\'); });\n options = options.concat(Array.from(groupNames)\n .map(function (name) { return (react.createElement(SelectGroup/* SelectGroup */.D, { key: name, label: name }, targets\n .filter(function (t) { var _a; return (((_a = t.annotations) === null || _a === void 0 ? void 0 : _a.cryostat[\'REALM\']) || \'Others\') === name; })\n .map(function (t) { return (react.createElement(SelectOption/* SelectOption */.$, { key: t.connectUrl, value: t, isPlaceholder: false }, !t.alias || t.alias === t.connectUrl ? "".concat(t.connectUrl) : "".concat(t.alias, " (").concat(t.connectUrl, ")"))); }))); })\n .sort(function (a, b) { return "".concat(a.props[\'label\']).localeCompare("".concat(b.props[\'label\'])); }));\n return options;\n }, [targets]);\n var handleTargetFilter = react.useCallback(function (_, value) {\n if (!value) {\n return selectOptions;\n }\n var matchExp = new RegExp(value, \'i\');\n return selectOptions\n .filter(function (grp) { return grp.props.children; })\n .map(function (grp) {\n return react.cloneElement(grp, {\n children: grp.props.children.filter(function (option) { return matchExp.test(option.props.value.connectUrl) || matchExp.test(option.props.value.alias); }),\n });\n })\n .filter(function (grp) { return grp.props.children.length > 0; });\n }, [selectOptions]);\n var cardHeaderProps = react.useMemo(function () {\n return simple\n ? {}\n : {\n onExpand: onExpand,\n toggleButtonProps: {\n id: \'target-select-expand-button\',\n \'aria-label\': \'Details\',\n \'aria-labelledby\': \'expandable-card-title target-select-expand-button\',\n \'aria-expanded\': isExpanded,\n },\n };\n }, [simple, onExpand, isExpanded]);\n return (react.createElement(Card/* Card */.Z, TargetSelect_assign({}, props, { isRounded: true, isCompact: true, isFlat: true, isExpanded: isExpanded }),\n react.createElement(CardHeader/* CardHeader */.O, TargetSelect_assign({}, cardHeaderProps),\n react.createElement(CardTitle/* CardTitle */.l, null, "Target JVM")),\n isLoading ? (react.createElement(LoadingView/* LoadingView */.J, null)) : (react.createElement(react.Fragment, null,\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Select/* Select */.P, { placeholderText: "Select a target", toggleIcon: react.createElement(container_node_icon/* ContainerNodeIcon */.SO, null), variant: selectConstants/* SelectVariant.single */.TM.single, hasInlineFilter: true, inlineFilterPlaceholderText: "Filter by target", isGrouped: true, onFilter: handleTargetFilter, onSelect: handleSelect, onToggle: setDropdownOpen, selections: selected.alias || selected.connectUrl, isFlipEnabled: true, menuAppendTo: "parent", maxHeight: "20em", isOpen: isDropdownOpen, "aria-label": "Select Target" }, selectOptions)),\n react.createElement(CardExpandableContent/* CardExpandableContent */.K, null,\n react.createElement(CardBody/* CardBody */.e, null, selected === Target_service/* NO_TARGET */.JE ? react.createElement(NoTargetSelected, null) : react.createElement(SerializedTarget, { target: selected })))))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Spinner/Spinner.js\nvar Spinner = __webpack_require__(2372);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DescriptionList/DescriptionList.js\nvar DescriptionList = __webpack_require__(91921);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DescriptionList/DescriptionListGroup.js\nvar DescriptionListGroup = __webpack_require__(58844);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DescriptionList/DescriptionListTerm.js\nvar DescriptionListTerm = __webpack_require__(10550);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DescriptionList/DescriptionListDescription.js\nvar DescriptionListDescription = __webpack_require__(3025);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Form/FormSection.js\nvar FormSection = __webpack_require__(50399);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/pencil-alt-icon.js\nvar pencil_alt_icon = __webpack_require__(65413);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/ReplaySubject.js\nvar ReplaySubject = __webpack_require__(70003);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/iif.js + 1 modules\nvar iif = __webpack_require__(31257);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/take.js\nvar take = __webpack_require__(74727);\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigForm.tsx\nvar AutomatedAnalysisConfigForm_assign = (undefined && undefined.__assign) || function () {\n AutomatedAnalysisConfigForm_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AutomatedAnalysisConfigForm_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AutomatedAnalysisConfigForm = function (_a) {\n var _b = _a.useTitle, useTitle = _b === void 0 ? false : _b, _c = _a.inlineForm, inlineForm = _c === void 0 ? false : _c;\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var t = (0,es/* useTranslation */.$G)().t;\n var targetSubjectRef = react.useRef(new ReplaySubject/* ReplaySubject */.t(1));\n var targetSubject = targetSubjectRef.current;\n var _d = react.useState(context.settings.automatedAnalysisRecordingConfig()), recordingConfig = _d[0], setRecordingConfig = _d[1];\n var _e = react.useState({\n maxAge: context.settings.automatedAnalysisRecordingConfig().maxAge,\n maxAgeUnits: 1,\n maxSize: context.settings.automatedAnalysisRecordingConfig().maxSize,\n maxSizeUnits: 1,\n template: context.settings.automatedAnalysisRecordingConfig().template,\n }), formConfig = _e[0], setFormConfig = _e[1];\n var _f = react.useState([]), templates = _f[0], setTemplates = _f[1];\n var _g = react.useState(\'\'), errorMessage = _g[0], setErrorMessage = _g[1];\n var _h = react.useState(false), isLoading = _h[0], setIsLoading = _h[1];\n var _j = react.useState(false), editing = _j[0], setEditing = _j[1];\n var _k = react.useState(false), isAuthModalOpen = _k[0], setIsAuthModalOpen = _k[1];\n var refreshTemplates = react.useCallback(function (target) {\n setIsLoading(true);\n addSubscription((0,iif/* iif */.s)(function () {\n return target === Target_service/* NO_TARGET */.JE;\n }, (0,of.of)([]), context.api\n .doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/templates"), \'v1\', undefined, undefined, true)\n .pipe((0,first/* first */.P)())).subscribe({\n next: function (templates) {\n setErrorMessage(\'\');\n setTemplates(templates);\n setFormConfig(function (old) {\n var oldTemplate = old.template;\n var matched = templates.find(function (t) { return t.name === oldTemplate.name && t.type === t.type; });\n return AutomatedAnalysisConfigForm_assign(AutomatedAnalysisConfigForm_assign({}, old), { template: matched ? { name: matched.name, type: matched.type } : {} });\n });\n setIsLoading(false);\n },\n error: function (err) {\n setTemplates([]);\n setIsLoading(false);\n if ((0,Api_service/* isHttpError */.D3)(err) && err.httpResponse.status === 427) {\n setErrorMessage(authFailMessage);\n setIsAuthModalOpen(true);\n }\n else {\n setErrorMessage(err.message);\n }\n },\n }));\n }, [addSubscription, context.api, setErrorMessage, setTemplates, setFormConfig, setIsLoading, setIsAuthModalOpen]);\n react.useEffect(function () {\n addSubscription(targetSubject.subscribe(function (target) {\n refreshTemplates(target);\n }));\n }, [targetSubject, addSubscription, refreshTemplates, setIsLoading, editing]);\n var setAAConfig = react.useCallback(function (config) {\n if (!config.template) {\n return;\n }\n setRecordingConfig(config);\n context.settings.setAutomatedAnalysisRecordingConfig(config);\n }, [context.settings, setRecordingConfig]);\n var handleMaxAgeChange = react.useCallback(function (evt) {\n setFormConfig(function (old) {\n return AutomatedAnalysisConfigForm_assign(AutomatedAnalysisConfigForm_assign({}, old), { maxAge: Number(evt) });\n });\n }, [setFormConfig]);\n var handleMaxAgeUnitChange = react.useCallback(function (evt) {\n setFormConfig(function (old) {\n return AutomatedAnalysisConfigForm_assign(AutomatedAnalysisConfigForm_assign({}, old), { maxAgeUnits: Number(evt) });\n });\n }, [setFormConfig]);\n var handleMaxSizeChange = react.useCallback(function (evt) {\n setFormConfig(function (old) {\n return AutomatedAnalysisConfigForm_assign(AutomatedAnalysisConfigForm_assign({}, old), { maxSize: Number(evt) });\n });\n }, [setFormConfig]);\n var handleMaxSizeUnitChange = react.useCallback(function (evt) {\n setFormConfig(function (old) {\n return AutomatedAnalysisConfigForm_assign(AutomatedAnalysisConfigForm_assign({}, old), { maxSizeUnits: Number(evt) });\n });\n }, [setFormConfig]);\n var handleTemplateChange = react.useCallback(function (templateName, templateType) {\n setFormConfig(function (old) {\n return AutomatedAnalysisConfigForm_assign(AutomatedAnalysisConfigForm_assign({}, old), { template: {\n name: templateName,\n type: templateType,\n } });\n });\n }, [setFormConfig]);\n var handleSubmit = react.useCallback(function () {\n var template = formConfig.template, maxSize = formConfig.maxSize, maxSizeUnits = formConfig.maxSizeUnits, maxAge = formConfig.maxAge, maxAgeUnits = formConfig.maxAgeUnits;\n setAAConfig({\n template: template,\n maxSize: maxSize * maxSizeUnits,\n maxAge: maxAge * maxAgeUnits,\n });\n setEditing(false);\n }, [setAAConfig, setEditing, formConfig]);\n var authRetry = react.useCallback(function () {\n setIsAuthModalOpen(true);\n }, [setIsAuthModalOpen]);\n var selectedSpecifier = react.useMemo(function () {\n var _a = formConfig.template, name = _a.name, type = _a.type;\n if (name && type) {\n return "".concat(name, ",").concat(type);\n }\n return \'\';\n }, [formConfig.template]);\n var targetSelect = react.useMemo(function () {\n return editing && react.createElement(TargetSelect, { simple: true, onSelect: function (target) { return targetSubject.next(target); } });\n }, [editing, targetSubject]);\n var configData = react.useMemo(function () {\n if (editing) {\n return (react.createElement(Grid/* Grid */.r, { hasGutter: true, lg: 4, md: 12 },\n react.createElement(GridItem/* GridItem */.P, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: t("TEMPLATE", { ns: \'common\' }), isRequired: true, fieldId: "recording-template", helperText: react.createElement(react.Fragment, null,\n react.createElement(HelperText/* HelperText */.p, { className: "".concat(Api_service/* automatedAnalysisRecordingName */.Ls, "-config-save-template-warning-helper") },\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'AutomatedAnalysisConfigForm.TEMPLATE_HELPER_TEXT\')),\n formConfig.template.type == \'TARGET\' && errorMessage === \'\' && (react.createElement(HelperTextItem/* HelperTextItem */.u, { variant: "warning" },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, t(\'AutomatedAnalysisConfigForm.TEMPLATE_INVALID_WARNING\')))))) }, isLoading ? (react.createElement(Spinner/* Spinner */.$, { size: "md" })) : errorMessage != \'\' ? (react.createElement(ErrorView, { title: t(\'ErrorView.EVENT_TEMPLATES\'), message: errorMessage, retry: isAuthFail(errorMessage) ? authRetry : undefined })) : (react.createElement(SelectTemplateSelectorForm, { templates: templates, onSelect: handleTemplateChange, selected: selectedSpecifier })))),\n react.createElement(GridItem/* GridItem */.P, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: t(\'MAXIMUM_SIZE\', { ns: \'common\' }), fieldId: "maxSize", helperText: t(\'MAXIMUM_SIZE_HELPER_TEXT\', { ns: \'common\' }) },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: formConfig.maxSize, isRequired: true, type: "number", id: "maxSize", "aria-label": t(\'AriaLabels.MAXIMUM_SIZE\', { ns: \'common\' }), onChange: handleMaxSizeChange, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: formConfig.maxSizeUnits, onChange: handleMaxSizeUnitChange, "aria-label": t(\'AriaLabels.MAXIMUM_SIZE_UNITS_INPUT\', { ns: \'common\' }) },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "B" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 1024, label: "KiB" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 1024 * 1024, label: "MiB" })))))),\n react.createElement(GridItem/* GridItem */.P, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: t(\'MAXIMUM_AGE\', { ns: \'common\' }), fieldId: "maxAge", helperText: t(\'MAXIMUM_AGE_HELPER_TEXT\', { ns: \'common\' }) },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: formConfig.maxAge, isRequired: true, type: "number", id: "maxAgeDuration", "aria-label": t(\'AriaLabels.MAXIMUM_AGE\', { ns: \'common\' }), onChange: handleMaxAgeChange, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: formConfig.maxAgeUnits, onChange: handleMaxAgeUnitChange, "aria-label": t(\'AriaLabels.MAXIMUM_AGE_UNITS_INPUT\', { ns: \'common\' }) },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: t(\'SECOND\', { count: 0, ns: \'common\' }) }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 60, label: t(\'MINUTE\', { count: 0, ns: \'common\' }) }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 60 * 60, label: t(\'HOUR\', { count: 0, ns: \'common\' }) }))))))));\n }\n return (react.createElement(DescriptionList/* DescriptionList */.o, { isCompact: true, isAutoFit: true },\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, t(\'TEMPLATE\', { ns: \'common\' })),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, t(\'AutomatedAnalysisConfigForm.FORMATTED_TEMPLATE\', { template: recordingConfig.template }))),\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, t(\'AutomatedAnalysisConfigForm.MAXIMUM_SIZE\', { unit: \'B\' })),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, recordingConfig.maxSize)),\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, t(\'AutomatedAnalysisConfigForm.MAXIMUM_AGE\', { unit: \'s\' })),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, recordingConfig.maxAge))));\n }, [\n t,\n isLoading,\n editing,\n recordingConfig,\n formConfig,\n templates,\n selectedSpecifier,\n handleTemplateChange,\n handleMaxSizeChange,\n handleMaxSizeUnitChange,\n handleMaxAgeChange,\n handleMaxAgeUnitChange,\n errorMessage,\n authRetry,\n ]);\n var toggleEdit = react.useCallback(function () {\n setEditing(function (edit) { return !edit; });\n setFormConfig({\n template: recordingConfig.template,\n maxSize: recordingConfig.maxSize,\n maxAge: recordingConfig.maxAge,\n maxSizeUnits: 1,\n maxAgeUnits: 1,\n });\n }, [setEditing, setFormConfig, recordingConfig]);\n var authModal = react.useMemo(function () {\n return (react.createElement(AuthModal, { visible: isAuthModalOpen, onDismiss: function () { return setIsAuthModalOpen(false); }, onSave: function () {\n setIsAuthModalOpen(false);\n addSubscription(targetSubject.pipe((0,take/* take */.q)(1)).subscribe(function (target) {\n refreshTemplates(target);\n }));\n }, targetObs: targetSubject }));\n }, [addSubscription, isAuthModalOpen, setIsAuthModalOpen, refreshTemplates, targetSubject]);\n var formContent = react.useMemo(function () { return (react.createElement(react.Fragment, null,\n react.createElement(Card/* Card */.Z, { isFlat: true, style: { marginTop: \'1em\' } },\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(CardTitle/* CardTitle */.l, null,\n react.createElement(Title/* Title */.D, { headingLevel: "h3", size: "md" }, t(\'AutomatedAnalysisConfigForm.CURRENT_CONFIG\'))),\n react.createElement(CardActions/* CardActions */.T, null,\n editing && (react.createElement(Button_Button/* Button */.zx, { onClick: handleSubmit, variant: \'primary\', isDisabled: !formConfig.template.name || !formConfig.template.type }, t(\'AutomatedAnalysisConfigForm.SAVE_CHANGES\'))),\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", onClick: toggleEdit, "aria-label": editing ? t(\'CANCEL\', { ns: \'common\' }) : t(\'EDIT\', { ns: \'common\' }) }, editing ? react.createElement(close_icon/* CloseIcon */.Tw, null) : react.createElement(pencil_alt_icon/* PencilAltIcon */.sC, null)))),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null, targetSelect),\n react.createElement(StackItem/* StackItem */.v, null, configData)))),\n authModal)); }, [t, handleSubmit, toggleEdit, formConfig.template, targetSelect, configData, editing, authModal]);\n var formSection = react.useMemo(function () {\n return useTitle ? (react.createElement(FormSection/* FormSection */.h, { title: t(\'AutomatedAnalysisConfigForm.FORM_TITLE\') }, formContent)) : (formContent);\n }, [useTitle, t, formContent]);\n return inlineForm ? formSection : react.createElement(Form/* Form */.l, null, formSection);\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisConfigDrawer.tsx\nvar AutomatedAnalysisConfigDrawer_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar AutomatedAnalysisConfigDrawer = function (_a) {\n var onCreate = _a.onCreate, onError = _a.onError, props = AutomatedAnalysisConfigDrawer_rest(_a, ["onCreate", "onError"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = react.useState(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var _c = react.useState(false), isLoading = _c[0], setIsLoading = _c[1];\n var drawerRef = react.useRef(null);\n var handleCreateRecording = react.useCallback(function (recordingAttributes) {\n setIsLoading(true);\n addSubscription(context.api.createRecording(recordingAttributes).subscribe({\n next: function (resp) {\n setIsLoading(false);\n if (resp && resp.ok) {\n onCreate();\n }\n else if ((resp === null || resp === void 0 ? void 0 : resp.status) === 500) {\n onError(new Error(Report_service/* TEMPLATE_UNSUPPORTED_MESSAGE */.ll));\n }\n else {\n onError(new Error(Report_service/* RECORDING_FAILURE_MESSAGE */.oI));\n }\n },\n error: function (err) {\n setIsLoading(false);\n onError(err);\n },\n }));\n }, [addSubscription, context.api, setIsLoading, onCreate, onError]);\n var onDefaultRecordingStart = react.useCallback(function () {\n var config = context.settings.automatedAnalysisRecordingConfig();\n var attributes = (0,Settings_service/* automatedAnalysisConfigToRecordingAttributes */.eA)(config);\n handleCreateRecording(attributes);\n }, [context.settings, handleCreateRecording]);\n var onExpand = react.useCallback(function () {\n drawerRef.current && drawerRef.current.focus();\n }, [drawerRef]);\n var onCogSelect = react.useCallback(function () {\n setIsExpanded(function (old) { return !old; });\n }, [setIsExpanded]);\n var onDrawerClose = react.useCallback(function () {\n setIsExpanded(false);\n }, [setIsExpanded]);\n var panelContent = react.useMemo(function () {\n return (react.createElement(DrawerPanelContent/* DrawerPanelContent */.S, { isResizable: true, style: { zIndex: 199 } },\n react.createElement(DrawerHead/* DrawerHead */.h, null,\n react.createElement("span", { tabIndex: isExpanded ? 0 : -1, ref: drawerRef }),\n react.createElement(DrawerActions/* DrawerActions */.x, null,\n react.createElement(DrawerCloseButton/* DrawerCloseButton */.c, { onClick: onDrawerClose }))),\n react.createElement(DrawerPanelBody/* DrawerPanelBody */.F, null,\n react.createElement(AutomatedAnalysisConfigForm, { useTitle: true }))));\n }, [isExpanded, onDrawerClose]);\n var inputGroup = react.useMemo(function () {\n return (react.createElement(InputGroup/* InputGroup */.B, null,\n react.createElement("div", { style: { margin: \'auto\' } },\n react.createElement(Button_Button/* Button */.zx, { "aria-label": t(\'AutomatedAnalysisConfigDrawer.INPUT_GROUP.OPEN_SETTINGS.LABEL\'), variant: "control", onClick: onCogSelect, icon: react.createElement(cog_icon/* CogIcon */.IE, null) }),\n react.createElement(Button_Button/* Button */.zx, { id: \'automated-analysis-config-drawer-create-recording-button\', "aria-label": t(\'AutomatedAnalysisConfigDrawer.INPUT_GROUP.CREATE_RECORDING.LABEL\'), variant: "control", onClick: onDefaultRecordingStart },\n react.createElement("span", { style: { marginRight: \'0.2em\' } }, t(\'AutomatedAnalysisConfigDrawer.INPUT_GROUP.CREATE_RECORDING.LABEL\'))))));\n }, [t, onCogSelect, onDefaultRecordingStart]);\n var drawerContentBody = react.useMemo(function () {\n return (react.createElement(DrawerContentBody/* DrawerContentBody */.s, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null, props.isContentAbove ? props.drawerContent : inputGroup),\n react.createElement(StackItem/* StackItem */.v, null, props.isContentAbove ? inputGroup : props.drawerContent))));\n }, [props.drawerContent, props.isContentAbove, inputGroup]);\n var view = react.useMemo(function () {\n if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n return (react.createElement(Drawer/* Drawer */.dy, { isExpanded: isExpanded, position: "right", onExpand: onExpand, isInline: true },\n react.createElement(DrawerContent/* DrawerContent */.s, { panelContent: panelContent }, drawerContentBody)));\n }, [isExpanded, onExpand, panelContent, drawerContentBody, isLoading]);\n return view;\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownToggle.js\nvar DropdownToggle = __webpack_require__(75728);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Toolbar/ToolbarToggleGroup.js\nvar ToolbarToggleGroup = __webpack_require__(12466);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Toolbar/ToolbarFilter.js\nvar ToolbarFilter = __webpack_require__(35248);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/filter-icon.js\nvar filter_icon = __webpack_require__(76889);\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/Filters/AutomatedAnalysisNameFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar AutomatedAnalysisNameFilter_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\nvar AutomatedAnalysisNameFilter = function (_a) {\n var onSubmit = _a.onSubmit, props = AutomatedAnalysisNameFilter_rest(_a, ["onSubmit"]);\n var _b = react.useState(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var onSelect = react.useCallback(function (_, selection, isPlaceholder) {\n if (!isPlaceholder) {\n setIsExpanded(false);\n onSubmit(selection);\n }\n }, [onSubmit, setIsExpanded]);\n var nameOptions = react.useMemo(function () {\n var flatEvalMap = [];\n for (var _i = 0, _a = props.evaluations.map(function (r) { return r[1]; }); _i < _a.length; _i++) {\n var topic = _a[_i];\n for (var _b = 0, topic_1 = topic; _b < topic_1.length; _b++) {\n var rule = topic_1[_b];\n flatEvalMap.push(rule.name);\n }\n }\n return flatEvalMap\n .filter(function (n) { return !props.filteredNames.includes(n); })\n .sort()\n .map(function (option, index) { return react.createElement(SelectOption/* SelectOption */.$, { key: index, value: option }); });\n }, [props.evaluations, props.filteredNames]);\n return (react.createElement(Select/* Select */.P, { variant: selectConstants/* SelectVariant.typeahead */.TM.typeahead, onToggle: setIsExpanded, onSelect: onSelect, isOpen: isExpanded, typeAheadAriaLabel: "Filter by name...", placeholderText: "Filter by name...", "aria-label": "Filter by name", maxHeight: "16em", menuAppendTo: function () { return document.getElementById(\'dashboard-grid\') || utils/* portalRoot */.tO; } }, nameOptions));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/Filters/AutomatedAnalysisTopicFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar AutomatedAnalysisTopicFilter_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\nvar AutomatedAnalysisTopicFilter = function (_a) {\n var onSubmit = _a.onSubmit, props = AutomatedAnalysisTopicFilter_rest(_a, ["onSubmit"]);\n var _b = react.useState(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var onSelect = react.useCallback(function (_, selection, isPlaceholder) {\n if (!isPlaceholder) {\n setIsExpanded(false);\n onSubmit(selection);\n }\n }, [onSubmit, setIsExpanded]);\n var topicOptions = react.useMemo(function () {\n return props.evaluations\n .map(function (r) { return r[0]; })\n .filter(function (n) { return !props.filteredTopics.includes(n); })\n .map(function (option, index) { return react.createElement(SelectOption/* SelectOption */.$, { key: index, value: option }); });\n }, [props.evaluations, props.filteredTopics]);\n return (react.createElement(Select/* Select */.P, { variant: selectConstants/* SelectVariant.typeahead */.TM.typeahead, onToggle: setIsExpanded, onSelect: onSelect, isOpen: isExpanded, typeAheadAriaLabel: "Filter by topic...", placeholderText: "Filter by topic...", "aria-label": "Filter by topic", maxHeight: "16em", menuAppendTo: function () { return document.getElementById(\'dashboard-grid\') || utils/* portalRoot */.tO; } }, topicOptions));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisFilters.tsx\nvar AutomatedAnalysisFilters_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar AutomatedAnalysisFilters = function (_a) {\n var updateFilters = _a.updateFilters, props = AutomatedAnalysisFilters_rest(_a, ["updateFilters"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var currentCategory = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var targetAutomatedAnalysisFilters = state.automatedAnalysisFilters.state.targetFilters.filter(function (targetFilter) { return targetFilter.target === props.target; });\n if (!targetAutomatedAnalysisFilters.length) {\n return t(\'FILTER_NAME\', { ns: \'common\' });\n } // Target is not yet loaded\n return targetAutomatedAnalysisFilters[0].selectedCategory;\n });\n var _b = react.useState(false), isCategoryDropdownOpen = _b[0], setIsCategoryDropdownOpen = _b[1];\n var onCategoryToggle = react.useCallback(function () {\n setIsCategoryDropdownOpen(function (opened) { return !opened; });\n }, [setIsCategoryDropdownOpen]);\n var onCategorySelect = react.useCallback(function (category) {\n setIsCategoryDropdownOpen(false);\n dispatch(ReduxStore_automatedAnalysisUpdateCategoryIntent(props.target, category));\n }, [dispatch, setIsCategoryDropdownOpen, props.target]);\n var onDelete = react.useCallback(function (category, value) {\n return updateFilters(props.target, { filterKey: category, filterValue: value, deleted: true });\n }, [updateFilters, props.target]);\n var onDeleteGroup = react.useCallback(function (category) {\n return updateFilters(props.target, { filterKey: category, deleted: true, deleteOptions: { all: true } });\n }, [updateFilters, props.target]);\n var onNameInput = react.useCallback(function (inputName) { return updateFilters(props.target, { filterKey: currentCategory, filterValue: inputName }); }, [updateFilters, currentCategory, props.target]);\n var onTopicInput = react.useCallback(function (inputTopic) {\n updateFilters(props.target, { filterKey: currentCategory, filterValue: inputTopic });\n }, [updateFilters, currentCategory, props.target]);\n var categoryDropdown = react.useMemo(function () {\n return (react.createElement(Dropdown/* Dropdown */.L, { "aria-label": \'Category Dropdown\', position: dropdownConstants/* DropdownPosition.left */.ir.left, toggle: react.createElement(DropdownToggle/* DropdownToggle */.Z, { "aria-label": currentCategory, onToggle: onCategoryToggle },\n react.createElement(filter_icon/* FilterIcon */.k1, null),\n " ",\n currentCategory), isOpen: isCategoryDropdownOpen, dropdownItems: allowedAutomatedAnalysisFilters.map(function (cat) { return (react.createElement(DropdownItem/* DropdownItem */.h, { "aria-label": cat, key: cat, onClick: function () { return onCategorySelect(cat); } }, cat)); }) }));\n }, [isCategoryDropdownOpen, currentCategory, onCategoryToggle, onCategorySelect]);\n var filterDropdownItems = react.useMemo(function () { return [\n react.createElement(AutomatedAnalysisNameFilter, { key: \'name\', evaluations: props.evaluations, filteredNames: props.filters.Name, onSubmit: onNameInput }),\n react.createElement(AutomatedAnalysisTopicFilter, { key: \'topic\', evaluations: props.evaluations, filteredTopics: props.filters.Topic, onSubmit: onTopicInput }),\n ]; }, [props.evaluations, props.filters.Name, props.filters.Topic, onNameInput, onTopicInput]);\n return (react.createElement(ToolbarToggleGroup/* ToolbarToggleGroup */.R, { toggleIcon: react.createElement(filter_icon/* FilterIcon */.k1, null), breakpoint: "xl" },\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n categoryDropdown,\n Object.keys(props.filters)\n .filter(function (f) { return f !== \'Score\'; })\n .map(function (filterKey, i) { return (react.createElement(ToolbarFilter/* ToolbarFilter */.p, { key: filterKey, chips: props.filters[filterKey], deleteChip: onDelete, deleteChipGroup: onDeleteGroup, categoryName: filterKey, showToolbarItem: filterKey === currentCategory }, filterDropdownItems[i])); })))));\n};\nvar filterAutomatedAnalysis = function (topicEvalTuple, filters, globalFilters, showNAScores) {\n if (!topicEvalTuple || !topicEvalTuple.length) {\n return topicEvalTuple;\n }\n var filtered = topicEvalTuple;\n if (filters.Name != null && !!filters.Name.length) {\n filtered = filtered.map(function (_a) {\n var topic = _a[0], evaluations = _a[1];\n return [topic, evaluations.filter(function (evaluation) { return filters.Name.includes(evaluation.name); })];\n });\n }\n if (globalFilters.Score != null) {\n filtered = filtered.map(function (_a) {\n var topic = _a[0], evaluations = _a[1];\n return [\n topic,\n evaluations.filter(function (evaluation) {\n if (showNAScores) {\n return globalFilters.Score <= evaluation.score || evaluation.score == -1;\n }\n return globalFilters.Score <= evaluation.score;\n }),\n ];\n });\n }\n if (filters.Topic != null && !!filters.Topic.length) {\n filtered = filtered.map(function (_a) {\n var topic = _a[0], evaluations = _a[1];\n return [topic, evaluations.filter(function (_) { return filters.Topic.includes(topic); })];\n });\n }\n return filtered;\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/warning-triangle-icon.js\nvar warning_triangle_icon = __webpack_require__(7771);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-styles/css/components/Popover/popover.js\nvar popover = __webpack_require__(51714);\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/ClickableAutomatedAnalysisLabel.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar clickableAutomatedAnalysisKey = \'clickable-automated-analysis-label\';\nvar ClickableAutomatedAnalysisLabel = function (_a) {\n var label = _a.label;\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = react.useState(false), isHoveredOrFocused = _b[0], setIsHoveredOrFocused = _b[1];\n var _c = react.useState(false), isDescriptionVisible = _c[0], setIsDescriptionVisible = _c[1];\n var handleHoveredOrFocused = react.useCallback(function () { return setIsHoveredOrFocused(true); }, [setIsHoveredOrFocused]);\n var handleNonHoveredOrFocused = react.useCallback(function () { return setIsHoveredOrFocused(false); }, [setIsHoveredOrFocused]);\n var alertStyle = {\n default: popover/* default.modifiers.default */.Z.modifiers["default"],\n info: popover/* default.modifiers.info */.Z.modifiers.info,\n success: popover/* default.modifiers.success */.Z.modifiers.success,\n warning: popover/* default.modifiers.warning */.Z.modifiers.warning,\n danger: popover/* default.modifiers.danger */.Z.modifiers.danger,\n };\n var colorScheme = react.useMemo(function () {\n // TODO: use label color schemes based on settings for accessibility\n // context.settings.etc.\n return label.score == Report_service/* AutomatedAnalysisScore.NA_SCORE */.xY.NA_SCORE\n ? \'grey\'\n : label.score < Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD\n ? \'green\'\n : label.score < Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD\n ? \'orange\'\n : \'red\';\n }, [label.score]);\n var alertPopoverVariant = react.useMemo(function () {\n return label.score == Report_service/* AutomatedAnalysisScore.NA_SCORE */.xY.NA_SCORE\n ? \'default\'\n : label.score < Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD\n ? \'success\'\n : label.score < Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD\n ? \'warning\'\n : \'danger\';\n }, [label.score]);\n var icon = react.useMemo(function () {\n return label.score == Report_service/* AutomatedAnalysisScore.NA_SCORE */.xY.NA_SCORE ? (react.createElement(info_circle_icon/* InfoCircleIcon */.uM, null)) : label.score < Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD ? (react.createElement(check_circle_icon/* CheckCircleIcon */.rE, null)) : label.score < Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD ? (react.createElement(warning_triangle_icon/* WarningTriangleIcon */.T6, null)) : (react.createElement(exclamation_circle_icon/* ExclamationCircleIcon */.$O, null));\n }, [label.score]);\n return (react.createElement(Popover/* Popover */.J, { "aria-label": t(\'ClickableAutomatedAnalysisLabel.ARIA_LABELS.POPOVER\'), isVisible: isDescriptionVisible, headerContent: react.createElement("div", { className: "".concat(clickableAutomatedAnalysisKey, "-popover-header") }, label.name), alertSeverityVariant: alertPopoverVariant, alertSeverityScreenReaderText: alertPopoverVariant, shouldOpen: function () { return setIsDescriptionVisible(true); }, shouldClose: function () { return setIsDescriptionVisible(false); }, key: "".concat(clickableAutomatedAnalysisKey, "-popover-").concat(label.name), bodyContent: react.createElement("div", { className: "".concat(clickableAutomatedAnalysisKey, "-popover-body"), key: "".concat(clickableAutomatedAnalysisKey, "-popover-body-").concat(label.name) },\n react.createElement("p", { className: (0,esm.css)(alertStyle[alertPopoverVariant], "".concat(clickableAutomatedAnalysisKey, "-popover-body-score")) }, label.score == Report_service/* AutomatedAnalysisScore.NA_SCORE */.xY.NA_SCORE ? \'N/A\' : label.score.toFixed(1)),\n transformAADescription(label.description)), appendTo: utils/* portalRoot */.tO },\n react.createElement(Label/* Label */._, { "aria-label": label.name, icon: icon, color: colorScheme, className: isHoveredOrFocused ? "clickable-label-hovered" : \'\', onMouseEnter: handleHoveredOrFocused, onMouseLeave: handleNonHoveredOrFocused, onFocus: handleHoveredOrFocused, key: "".concat(clickableAutomatedAnalysisKey, "-").concat(label.name), isCompact: true },\n react.createElement("span", { className: "".concat(clickableAutomatedAnalysisKey, "-name") }, "".concat(label.name)))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Slider/Slider.js + 2 modules\nvar Slider = __webpack_require__(71486);\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/Filters/AutomatedAnalysisScoreFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar AutomatedAnalysisScoreFilter = function (_) {\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var currentScore = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var filters = state.automatedAnalysisFilters.state.globalFilters.filters;\n if (!filters)\n return 0;\n return filters.Score;\n });\n var steps = [\n { value: 0, label: \'0\' },\n { value: 12.5, label: t(\'OK\', { ns: \'common\' }) },\n {\n value: Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD,\n label: String(Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD),\n },\n { value: 50, label: t(\'WARNING\', { ns: \'common\' }) },\n { value: Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD, label: String(Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD) },\n { value: 87.5, label: t(\'CRITICAL\', { ns: \'common\' }) },\n { value: 100, label: \'100\' },\n ];\n var on100Reset = react.useCallback(function () {\n dispatch(ReduxStore_automatedAnalysisAddGlobalFilterIntent(\'Score\', 100));\n }, [dispatch]);\n var on0Reset = react.useCallback(function () {\n dispatch(ReduxStore_automatedAnalysisAddGlobalFilterIntent(\'Score\', 0));\n }, [dispatch]);\n var onChange = react.useCallback(function (value, inputValue) {\n value = Math.round(value * 10) / 10;\n var newValue;\n if (inputValue === undefined) {\n newValue = value;\n }\n else {\n if (inputValue > 100) {\n newValue = 100;\n }\n else if (inputValue < 0) {\n newValue = 0;\n }\n else {\n newValue = Math.round(inputValue * 10) / 10;\n }\n }\n dispatch(ReduxStore_automatedAnalysisAddGlobalFilterIntent(\'Score\', newValue));\n }, [dispatch]);\n var className = react.useMemo(function () {\n if (currentScore >= Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD) {\n return \'automated-analysis-score-filter-slider automated-analysis-score-filter-slider-critical\';\n }\n else if (currentScore >= Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD) {\n return \'automated-analysis-score-filter-slider automated-analysis-score-filter-slider-warning\';\n }\n else {\n return \'automated-analysis-score-filter-slider automated-analysis-score-filter-slider-ok\';\n }\n }, [currentScore]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Tooltip/* Tooltip */.u, { content: t(\'AutomatedAnalysisScoreFilter.TOOLTIP.CONTENT\'), appendTo: utils/* portalRoot */.tO },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small }, t(\'AutomatedAnalysisScoreFilter.CURRENT_SCORE_TEXT\', { val: currentScore }))),\n react.createElement(Slider/* Slider */.i, { leftActions: react.createElement(Level/* Level */.a, { hasGutter: true },\n react.createElement(LevelItem/* LevelItem */.Z, null,\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small },\n t(\'RESET\', { ns: \'common\' }),\n ":")),\n react.createElement(LevelItem/* LevelItem */.Z, null,\n react.createElement(Button_Button/* Button */.zx, { isSmall: true, isInline: true, variant: "link", "aria-label": t(\'AutomatedAnalysisScoreFilter.SLIDER.RESET0.LABEL\'), onClick: on0Reset }, "0")),\n react.createElement(LevelItem/* LevelItem */.Z, null,\n react.createElement(Button_Button/* Button */.zx, { isSmall: true, isInline: true, variant: "link", "aria-label": t(\'AutomatedAnalysisScoreFilter.SLIDER.RESET100.LABEL\'), onClick: on100Reset }, "100"))), step: 0.1, className: className, areCustomStepsContinuous: true, customSteps: steps, isInputVisible: true, inputLabel: t(\'SCORE\', { ns: \'common\' }), inputValue: currentScore, value: currentScore, onChange: onChange, min: 0, max: 100 })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/AutomatedAnalysis/AutomatedAnalysisCard.tsx\nvar AutomatedAnalysisCard_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AutomatedAnalysisCard = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _a = react.useState(\'\'), targetConnectURL = _a[0], setTargetConnectURL = _a[1];\n var _b = react.useState([]), evaluations = _b[0], setEvaluations = _b[1];\n var _c = react.useState([]), categorizedEvaluation = _c[0], setCategorizedEvaluation = _c[1];\n var _d = react.useState([]), filteredCategorizedEvaluation = _d[0], setFilteredCategorizedEvaluation = _d[1];\n var _e = react.useState(true), isCardExpanded = _e[0], setIsCardExpanded = _e[1];\n var _f = react.useState(undefined), errorMessage = _f[0], setErrorMessage = _f[1];\n var _g = react.useState(false), isLoading = _g[0], setIsLoading = _g[1];\n var _h = react.useState(0), reportStalenessTimer = _h[0], setReportStalenessTimer = _h[1];\n var _j = react.useState(\'second\'), reportStalenessTimerUnits = _j[0], setReportStalenessTimerUnits = _j[1];\n var _k = react.useState(0), reportTime = _k[0], setReportTime = _k[1];\n var _l = react.useState(false), usingArchivedReport = _l[0], setUsingArchivedReport = _l[1];\n var _m = react.useState(false), usingCachedReport = _m[0], setUsingCachedReport = _m[1];\n var _o = react.useState(false), showNAScores = _o[0], setShowNAScores = _o[1];\n var _p = react.useState(\'automated-analysis\'), report = _p[0], setReport = _p[1];\n var _q = react.useState(false), showListView = _q[0], setShowListView = _q[1];\n var targetAutomatedAnalysisFilters = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var filters = state.automatedAnalysisFilters.state.targetFilters.filter(function (targetFilter) { return targetFilter.target === targetConnectURL; });\n return filters.length > 0 ? filters[0].filters : emptyAutomatedAnalysisFilters;\n });\n var targetAutomatedAnalysisGlobalFilters = (0,react_redux_es/* useSelector */.v9)(function (state) {\n return state.automatedAnalysisFilters.state.globalFilters.filters;\n });\n var categorizeEvaluation = react.useCallback(function (arr) {\n setEvaluations(arr);\n var map = new Map();\n arr.forEach(function (evaluation) {\n var topicValue = map.get(evaluation.topic);\n if (topicValue === undefined) {\n map.set(evaluation.topic, [evaluation]);\n }\n else {\n topicValue.push(evaluation);\n topicValue.sort(function (a, b) { return b.score - a.score || a.name.localeCompare(b.name); });\n }\n });\n var sorted = Array.from(map).sort();\n setCategorizedEvaluation(sorted);\n }, [setCategorizedEvaluation, setEvaluations]);\n // Will perform analysis on the first ActiveRecording which has\n // name: \'automated-analysis\'; label: \'origin=automated-analysis\'\n // Query NEEDS \'state\' so that isActiveRecording(result) is valid\n var queryActiveRecordings = react.useCallback(function (connectUrl) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return context.api.graphql("\\n query ActiveRecordingsForAutomatedAnalysis($connectUrl: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n recordings {\\n active (filter: {\\n name: \\"".concat(Api_service/* automatedAnalysisRecordingName */.Ls, "\\",\\n labels: [\\"origin=").concat(Api_service/* automatedAnalysisRecordingName */.Ls, "\\"],\\n }) {\\n data {\\n state\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n }\\n }\\n }\\n }\\n }"), { connectUrl: connectUrl });\n }, [context.api]);\n var queryArchivedRecordings = react.useCallback(function (connectUrl) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return context.api.graphql("query ArchivedRecordingsForAutomatedAnalysis($connectUrl: String) {\\n archivedRecordings(filter: { sourceTarget: $connectUrl }) {\\n data {\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n size\\n archivedTime\\n }\\n }\\n }", { connectUrl: connectUrl });\n }, [context.api]);\n var handleStateErrors = react.useCallback(function (errorMessage) {\n setErrorMessage(errorMessage);\n setIsLoading(false);\n setUsingArchivedReport(false);\n setUsingCachedReport(false);\n }, [setErrorMessage, setIsLoading, setUsingArchivedReport, setUsingCachedReport]);\n var handleLoading = react.useCallback(function () {\n setErrorMessage(undefined);\n setIsLoading(true);\n setUsingArchivedReport(false);\n setUsingCachedReport(false);\n }, [setErrorMessage, setIsLoading, setUsingArchivedReport, setUsingCachedReport]);\n var handleArchivedRecordings = react.useCallback(function (recordings) {\n var freshestRecording = recordings.reduce(function (prev, current) {\n return (prev === null || prev === void 0 ? void 0 : prev.archivedTime) > (current === null || current === void 0 ? void 0 : current.archivedTime) ? prev : current;\n });\n addSubscription(context.target\n .target()\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,first/* first */.P)())\n .subscribe(function (target) {\n context.reports\n .reportJson(freshestRecording, target.connectUrl)\n .pipe((0,first/* first */.P)())\n .subscribe({\n next: function (report) {\n setReport(freshestRecording.name);\n setUsingArchivedReport(true);\n setReportTime(freshestRecording.archivedTime);\n categorizeEvaluation(report);\n setIsLoading(false);\n },\n error: function (err) {\n handleStateErrors(err.message);\n },\n });\n }));\n }, [\n addSubscription,\n context.target,\n context.reports,\n categorizeEvaluation,\n handleStateErrors,\n setUsingArchivedReport,\n setReportTime,\n setIsLoading,\n setReport,\n ]);\n // try generating report on cached or archived recordings\n var handleEmptyRecordings = react.useCallback(function (connectUrl) {\n var cachedReportAnalysis = context.reports.getCachedAnalysisReport(connectUrl);\n if (cachedReportAnalysis.report.length > 0) {\n setReport(Api_service/* automatedAnalysisRecordingName */.Ls);\n setUsingCachedReport(true);\n setReportTime(cachedReportAnalysis.timestamp);\n categorizeEvaluation(cachedReportAnalysis.report);\n setIsLoading(false);\n }\n else {\n addSubscription(queryArchivedRecordings(connectUrl)\n .pipe((0,first/* first */.P)(), (0,map/* map */.U)(function (v) { return v.data.archivedRecordings.data; }))\n .subscribe({\n next: function (recordings) {\n if (recordings.length > 0) {\n handleArchivedRecordings(recordings);\n }\n else {\n handleStateErrors(Report_service/* NO_RECORDINGS_MESSAGE */.fB);\n }\n },\n error: function (err) {\n handleStateErrors(err.message);\n },\n }));\n }\n }, [\n addSubscription,\n context.reports,\n categorizeEvaluation,\n queryArchivedRecordings,\n handleArchivedRecordings,\n handleStateErrors,\n setUsingCachedReport,\n setReportTime,\n setReport,\n setIsLoading,\n ]);\n var generateReport = react.useCallback(function () {\n handleLoading();\n addSubscription(context.target\n .target()\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,first/* first */.P)())\n .subscribe(function (target) {\n addSubscription(queryActiveRecordings(target.connectUrl)\n .pipe((0,first/* first */.P)(), (0,tap/* tap */.b)(function (resp) {\n if (resp.data == undefined) {\n if ((0,Api_service/* isGraphQLAuthError */.sC)(resp)) {\n context.target.setAuthFailure();\n throw new Error(authFailMessage);\n }\n else {\n throw new Error(resp.errors[0].message);\n }\n }\n }), (0,map/* map */.U)(function (v) { return v.data.targetNodes[0].recordings.active.data[0]; }), (0,tap/* tap */.b)(function (recording) {\n if (recording === null || recording === undefined) {\n throw new Error(Report_service/* NO_RECORDINGS_MESSAGE */.fB);\n }\n }))\n .subscribe({\n next: function (recording) {\n context.reports\n .reportJson(recording, target.connectUrl)\n .pipe((0,first/* first */.P)())\n .subscribe({\n next: function (report) {\n setReport(recording.name);\n categorizeEvaluation(report);\n setIsLoading(false);\n },\n error: function (_) {\n handleStateErrors(Report_service/* FAILED_REPORT_MESSAGE */.tG);\n },\n });\n },\n error: function (err) {\n if (isAuthFail(err.message)) {\n handleStateErrors(authFailMessage);\n }\n else {\n handleEmptyRecordings(target.connectUrl);\n }\n },\n }));\n }));\n }, [\n addSubscription,\n context.target,\n context.reports,\n setIsLoading,\n setReport,\n categorizeEvaluation,\n queryActiveRecordings,\n handleEmptyRecordings,\n handleLoading,\n handleStateErrors,\n ]);\n var startProfilingRecording = react.useCallback(function () {\n var config = context.settings.automatedAnalysisRecordingConfig();\n var attributes = (0,Settings_service/* automatedAnalysisConfigToRecordingAttributes */.eA)(config);\n addSubscription(context.api.createRecording(attributes).subscribe(function (resp) {\n if (resp) {\n if (resp.ok || resp.status === 400) {\n // in-case the recording already exists\n generateReport();\n }\n else if (resp.status === 500) {\n handleStateErrors(Report_service/* TEMPLATE_UNSUPPORTED_MESSAGE */.ll);\n }\n }\n else {\n handleStateErrors(Report_service/* RECORDING_FAILURE_MESSAGE */.oI);\n }\n }));\n }, [addSubscription, context.api, context.settings, generateReport, handleStateErrors]);\n var getMessageAndRetry = react.useCallback(function (errorMessage) {\n if (errorMessage) {\n if (errorMessage === Report_service/* NO_RECORDINGS_MESSAGE */.fB) {\n return [undefined, undefined];\n }\n else if (isAuthFail(errorMessage)) {\n return [t(\'RETRY\', { ns: \'common\' }), generateReport];\n }\n else if (errorMessage === Report_service/* RECORDING_FAILURE_MESSAGE */.oI) {\n return [t(\'AutomatedAnalysisCard.RETRY_STARTING\'), startProfilingRecording];\n }\n else if (errorMessage === Report_service/* FAILED_REPORT_MESSAGE */.tG) {\n return [t(\'AutomatedAnalysisCard.RETRY_LOADING\'), generateReport];\n }\n else if (errorMessage === Report_service/* TEMPLATE_UNSUPPORTED_MESSAGE */.ll) {\n return [undefined, undefined];\n }\n else {\n return [t(\'RETRY\', { ns: \'common\' }), generateReport];\n }\n }\n return [undefined, undefined];\n }, [t, startProfilingRecording, generateReport]);\n react.useEffect(function () {\n addSubscription(context.target.authRetry().subscribe(generateReport));\n }, [addSubscription, context.target, generateReport]);\n react.useEffect(function () {\n context.target.target().subscribe(function (target) {\n setTargetConnectURL(target.connectUrl);\n dispatch(ReduxStore_automatedAnalysisAddTargetIntent(target.connectUrl));\n generateReport();\n });\n }, [context.target, generateReport, setTargetConnectURL, dispatch]);\n react.useEffect(function () {\n if (reportTime == 0 || !(usingArchivedReport || usingCachedReport)) {\n return;\n }\n var analysisTimer = (0,utils/* calculateAnalysisTimer */.B5)(reportTime);\n setReportStalenessTimer(analysisTimer.quantity);\n setReportStalenessTimerUnits(analysisTimer.unit);\n var timer = setInterval(function () {\n setReportStalenessTimer(function (reportStalenessTimer) { return reportStalenessTimer + 1; });\n }, analysisTimer.interval);\n return function () { return clearInterval(timer); };\n }, [\n setReportStalenessTimer,\n setReportStalenessTimerUnits,\n reportTime,\n reportStalenessTimer,\n usingArchivedReport,\n usingCachedReport,\n ]);\n react.useEffect(function () {\n setFilteredCategorizedEvaluation(filterAutomatedAnalysis(categorizedEvaluation, targetAutomatedAnalysisFilters, targetAutomatedAnalysisGlobalFilters, showNAScores));\n }, [\n categorizedEvaluation,\n targetAutomatedAnalysisFilters,\n targetAutomatedAnalysisGlobalFilters,\n showNAScores,\n setFilteredCategorizedEvaluation,\n ]);\n var onCardExpand = react.useCallback(function () {\n setIsCardExpanded(function (isCardExpanded) { return !isCardExpanded; });\n }, [setIsCardExpanded]);\n var showUnavailableScores = react.useCallback(function () {\n setShowNAScores(true);\n }, [setShowNAScores]);\n var clearAnalysis = react.useCallback(function () {\n if (usingArchivedReport) {\n handleStateErrors(Report_service/* NO_RECORDINGS_MESSAGE */.fB);\n return;\n }\n setIsLoading(true);\n context.reports.deleteCachedAnalysisReport(targetConnectURL);\n if (usingCachedReport) {\n generateReport();\n }\n else {\n addSubscription(context.api.deleteRecording(\'automated-analysis\').subscribe({\n next: function () {\n generateReport();\n },\n error: function (error) {\n handleStateErrors(error.message);\n },\n }));\n }\n }, [\n addSubscription,\n context.api,\n context.reports,\n targetConnectURL,\n usingCachedReport,\n usingArchivedReport,\n setIsLoading,\n generateReport,\n handleStateErrors,\n ]);\n var updateFilters = react.useCallback(function (target, _a) {\n var filterValue = _a.filterValue, filterKey = _a.filterKey, _b = _a.deleted, deleted = _b === void 0 ? false : _b, deleteOptions = _a.deleteOptions;\n if (deleted) {\n if (deleteOptions && deleteOptions.all) {\n dispatch(ReduxStore_automatedAnalysisDeleteCategoryFiltersIntent(target, filterKey));\n }\n else {\n dispatch(ReduxStore_automatedAnalysisDeleteFilterIntent(target, filterKey, filterValue));\n }\n }\n else {\n dispatch(ReduxStore_automatedAnalysisAddFilterIntent(target, filterKey, filterValue));\n }\n }, [dispatch]);\n var handleClearFilters = react.useCallback(function () {\n dispatch(ReduxStore_automatedAnalysisDeleteAllFiltersIntent(targetConnectURL));\n }, [dispatch, targetConnectURL]);\n var handleResetScoreFilter = react.useCallback(function () {\n dispatch(automatedAnalysisAddGlobalFilterIntent(\'Score\', 0));\n }, [dispatch]);\n var reportStalenessText = react.useMemo(function () {\n if (isLoading || !(usingArchivedReport || usingCachedReport)) {\n return undefined;\n }\n return (react.createElement(TextContent/* TextContent */.D, { style: { marginBottom: \'1em\' } },\n react.createElement(Text/* Text */.x, { className: "stale-report-text", component: Text/* TextVariants.p */.q.p },\n react.createElement("span", { style: { marginRight: \'0.3rem\' } }, t(\'AutomatedAnalysisCard.STALE_REPORT.TEXT\', {\n count: reportStalenessTimer,\n units: reportStalenessTimerUnits,\n })),\n react.createElement(Tooltip/* Tooltip */.u, { content: t(\'AutomatedAnalysisCard.STALE_REPORT.TOOLTIP\'), appendTo: utils/* portalRoot */.tO },\n react.createElement(outlined_question_circle_icon/* OutlinedQuestionCircleIcon */.iC, { style: { height: \'0.85em\', width: \'0.85em\', color: \'var(--pf-global--Color--100)\' } })))));\n }, [t, isLoading, usingArchivedReport, usingCachedReport, reportStalenessTimer, reportStalenessTimerUnits]);\n var filteredCategorizedLabels = react.useMemo(function () {\n var filtered = filteredCategorizedEvaluation.filter(function (_a) {\n var _ = _a[0], evaluations = _a[1];\n return evaluations.length > 0;\n });\n if (filtered.length === 0) {\n return (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, t("AutomatedAnalysisCard.NO_RESULTS")),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, t(\'AutomatedAnalysisCard.NO_RESULTS_BODY\')),\n react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClearFilters }, t(\'CLEAR_FILTERS\', { ns: \'common\' })),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: showUnavailableScores }, t(\'AutomatedAnalysisCard.TOOLBAR.CHECKBOX.SHOW_NA.LABEL\')),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleResetScoreFilter }, t(\'AutomatedAnalysisScoreFilter.SLIDER.RESET0.LABEL\')))));\n }\n if (showListView) {\n return react.createElement(AutomatedAnalysisCardList, { evaluations: filtered });\n }\n return (react.createElement(Grid/* Grid */.r, null, filtered.map(function (_a) {\n var topic = _a[0], evaluations = _a[1];\n return (react.createElement(GridItem/* GridItem */.P, { className: "automated-analysis-grid-item", span: 3, key: "gridItem-".concat(topic) },\n react.createElement(LabelGroup/* LabelGroup */.e, { className: "automated-analysis-topic-label-groups", categoryName: topic, isVertical: true, numLabels: 3, isCompact: true, key: topic }, evaluations.map(function (evaluation) {\n return react.createElement(ClickableAutomatedAnalysisLabel, { label: evaluation, key: clickableAutomatedAnalysisKey });\n }))));\n })));\n }, [\n t,\n handleClearFilters,\n showUnavailableScores,\n handleResetScoreFilter,\n filteredCategorizedEvaluation,\n showListView,\n ]);\n var toolbar = react.useMemo(function () {\n return (react.createElement(Toolbar/* Toolbar */.o, { id: "automated-analysis-toolbar", "aria-label": t(\'AutomatedAnalysisCard.TOOLBAR.LABEL\'), clearAllFilters: handleClearFilters, clearFiltersButtonText: t(\'CLEAR_FILTERS\', { ns: \'common\' }), isFullHeight: true },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(AutomatedAnalysisFilters, { target: targetConnectURL, evaluations: categorizedEvaluation, filters: targetAutomatedAnalysisFilters, updateFilters: updateFilters }),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { style: { margin: \'0.5em 0 0.5em 0\' } },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { isSmall: true, isDisabled: isLoading || usingCachedReport || usingArchivedReport, isAriaDisabled: isLoading || usingCachedReport || usingArchivedReport, "aria-label": t(\'AutomatedAnalysisCard.TOOLBAR.REFRESH.LABEL\'), onClick: generateReport, variant: "control", icon: react.createElement(spinner2_icon/* Spinner2Icon */.A_, null) }),\n react.createElement(Button_Button/* Button */.zx, { isSmall: true, isDisabled: isLoading, isAriaDisabled: isLoading, "aria-label": t(\'AutomatedAnalysisCard.TOOLBAR.DELETE.LABEL\'), onClick: clearAnalysis, variant: "control", icon: react.createElement(trash_icon/* TrashIcon */.XH, null) })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Checkbox/* Checkbox */.X, { label: t(\'AutomatedAnalysisCard.TOOLBAR.CHECKBOX.SHOW_NA.LABEL\'), isChecked: showNAScores, onChange: setShowNAScores, id: "show-na-scores", name: "show-na-scores" })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Switch/* Switch */.r, { label: t(\'AutomatedAnalysisCard.TOOLBAR.SWITCH.LIST_VIEW.LABEL\'), isChecked: showListView, onChange: setShowListView, id: "show-list-view" }))))));\n }, [\n t,\n isLoading,\n showNAScores,\n showListView,\n targetConnectURL,\n categorizedEvaluation,\n targetAutomatedAnalysisFilters,\n usingArchivedReport,\n usingCachedReport,\n setShowNAScores,\n setShowListView,\n clearAnalysis,\n generateReport,\n handleClearFilters,\n updateFilters,\n ]);\n var errorView = react.useMemo(function () {\n return (react.createElement(ErrorView, { title: t(\'AutomatedAnalysisCard.ERROR_TITLE\'), message: react.createElement(TextContent/* TextContent */.D, null,\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, t(\'AutomatedAnalysisCard.ERROR_TEXT\')),\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small }, errorMessage)), retryButtonMessage: getMessageAndRetry(errorMessage)[0], retry: getMessageAndRetry(errorMessage)[1] }));\n }, [t, getMessageAndRetry, errorMessage]);\n var handleConfigError = react.useCallback(function (error) {\n handleStateErrors(error.message);\n }, [handleStateErrors]);\n var view = react.useMemo(function () {\n if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n if (errorMessage) {\n if (isAuthFail(errorMessage)) {\n return errorView;\n }\n return (react.createElement(AutomatedAnalysisConfigDrawer, { onCreate: generateReport, drawerContent: errorView, isContentAbove: true, onError: handleConfigError }));\n }\n else if (usingArchivedReport || usingCachedReport) {\n return (react.createElement(AutomatedAnalysisConfigDrawer, { onCreate: generateReport, drawerContent: filteredCategorizedLabels, isContentAbove: false, onError: handleConfigError }));\n }\n else {\n return filteredCategorizedLabels;\n }\n }, [\n filteredCategorizedLabels,\n usingArchivedReport,\n usingCachedReport,\n isLoading,\n errorMessage,\n errorView,\n generateReport,\n handleConfigError,\n ]);\n var reportSource = react.useMemo(function () {\n if (isLoading || errorMessage)\n return undefined;\n return (react.createElement(Label/* Label */._, { icon: react.createElement(info_circle_icon/* InfoCircleIcon */.uM, null), color: \'cyan\' }, "".concat(usingArchivedReport ? \'Archived\' : usingCachedReport ? \'Cached\' : \'Active\', " report name=").concat(report)));\n }, [usingArchivedReport, usingCachedReport, report, isLoading, errorMessage]);\n var headerLabels = react.useMemo(function () {\n if (isLoading || errorMessage)\n return undefined;\n var filtered = evaluations.filter(function (e) { return e.score >= Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD; });\n if (filtered.length === 0)\n return react.createElement(AutomatedAnalysisHeaderLabel, { type: "ok" });\n var _a = lodash_default().partition(filtered, function (e) { return e.score < Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD; }), warnings = _a[0], errors = _a[1];\n return (react.createElement(LabelGroup/* LabelGroup */.e, null,\n reportSource,\n errors.length > 0 && react.createElement(AutomatedAnalysisHeaderLabel, { type: \'critical\', count: errors.length }),\n warnings.length > 0 && react.createElement(AutomatedAnalysisHeaderLabel, { type: \'warning\', count: warnings.length })));\n }, [isLoading, errorMessage, evaluations, reportSource]);\n var header = react.useMemo(function () {\n return (react.createElement(CardHeader/* CardHeader */.O, { onExpand: onCardExpand, toggleButtonProps: {\n id: \'automated-analysis-toggle-details\',\n \'aria-label\': \'Details\',\n \'aria-labelledby\': \'automated-analysis-card-title toggle-details\',\n \'aria-expanded\': isCardExpanded,\n } },\n react.createElement.apply(react_namespaceObject, AutomatedAnalysisCard_spreadArray([CardActions/* CardActions */.T, null], props.actions || [], false)),\n react.createElement(Level/* Level */.a, { hasGutter: true },\n react.createElement(LevelItem/* LevelItem */.Z, null,\n react.createElement(CardTitle/* CardTitle */.l, { component: "h4" }, t(\'AutomatedAnalysisCard.CARD_TITLE\'))),\n react.createElement(LevelItem/* LevelItem */.Z, null, headerLabels))));\n }, [t, onCardExpand, isCardExpanded, headerLabels, props.actions]);\n return (react.createElement(DashboardCard, { dashboardId: props.dashboardId, cardSizes: AutomatedAnalysisCardSizes, id: "automated-analysis-card", isCompact: true, isDraggable: props.isDraggable, isResizable: props.isResizable, isFullHeight: props.isFullHeight, isExpanded: isCardExpanded, cardHeader: header },\n react.createElement(CardExpandableContent/* CardExpandableContent */.K, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null, isLoading || errorMessage ? null : toolbar),\n react.createElement(StackItem/* StackItem */.v, { className: "automated-analysis-score-filter-stack-item" }, isLoading || errorMessage ? null : react.createElement(AutomatedAnalysisScoreFilter, null)),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(CardBody/* CardBody */.e, { isFilled: true },\n reportStalenessText,\n view))))));\n};\nvar AutomatedAnalysisHeaderLabel = function (props) {\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _a = react.useState(false), isHoveredOrFocused = _a[0], setIsHoveredOrFocused = _a[1];\n var handleHoveredOrFocused = react.useCallback(function () { return setIsHoveredOrFocused(true); }, [setIsHoveredOrFocused]);\n var handleNonHoveredOrFocused = react.useCallback(function () { return setIsHoveredOrFocused(false); }, [setIsHoveredOrFocused]);\n var label = react.useMemo(function () {\n var onClick;\n var icon;\n var color;\n var children;\n switch (props.type) {\n case \'critical\':\n onClick = function () {\n dispatch(automatedAnalysisAddGlobalFilterIntent(\'Score\', Report_service/* AutomatedAnalysisScore.RED_SCORE_THRESHOLD */.xY.RED_SCORE_THRESHOLD));\n };\n icon = react.createElement(exclamation_circle_icon/* ExclamationCircleIcon */.$O, null);\n color = \'red\';\n children = t(\'AutomatedAnalysisCard.CRITICAL_RESULTS\', { count: props.count });\n break;\n case \'warning\':\n onClick = function () {\n dispatch(automatedAnalysisAddGlobalFilterIntent(\'Score\', Report_service/* AutomatedAnalysisScore.ORANGE_SCORE_THRESHOLD */.xY.ORANGE_SCORE_THRESHOLD));\n };\n icon = react.createElement(exclamation_triangle_icon/* ExclamationTriangleIcon */.LP, null);\n color = \'orange\';\n children = t(\'AutomatedAnalysisCard.WARNING_RESULTS\', { count: props.count });\n break;\n default:\n onClick = function () { return undefined; };\n icon = react.createElement(check_circle_icon/* CheckCircleIcon */.rE, null);\n color = \'green\';\n children = t(\'AutomatedAnalysisCard.GOOD_RESULTS\');\n }\n return { onClick: onClick, icon: icon, color: color, children: children };\n }, [dispatch, t, props.count, props.type]);\n var onClick = label.onClick, icon = label.icon, color = label.color, children = label.children;\n return (react.createElement(Label/* Label */._, { className: isHoveredOrFocused ? \'clickable-label-hovered\' : undefined, draggable: true, onDragStart: function (e) { return e.stopPropagation(); }, onClick: onClick, onMouseEnter: handleHoveredOrFocused, onMouseLeave: handleNonHoveredOrFocused, onFocus: handleHoveredOrFocused, icon: icon, color: color }, children));\n};\nvar AutomatedAnalysisCardSizes = {\n span: {\n minimum: 4,\n default: 6,\n maximum: 12,\n },\n height: {\n // TODO: implement height resizing\n minimum: Number.NaN,\n default: Number.NaN,\n maximum: Number.NaN,\n },\n};\nvar AutomatedAnalysisCardDescriptor = {\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n title: \'AutomatedAnalysisCard.CARD_TITLE\',\n cardSizes: AutomatedAnalysisCardSizes,\n description: \'AutomatedAnalysisCard.CARD_DESCRIPTION\',\n descriptionFull: "AutomatedAnalysisCard.CARD_DESCRIPTION_FULL",\n component: AutomatedAnalysisCard,\n propControls: [],\n advancedConfig: react.createElement(AutomatedAnalysisConfigForm, null),\n icon: react.createElement(process_automation_icon/* ProcessAutomationIcon */.KF, null),\n labels: [\n {\n content: \'Evaluation\',\n color: \'blue\',\n },\n ],\n preview: react.createElement(AutomatedAnalysisCard, { span: 12, dashboardId: 0, isDraggable: false, isResizable: false }),\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Bullseye/Bullseye.js\nvar Bullseye = __webpack_require__(52643);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/external-link-alt-icon.js\nvar external_link_alt_icon = __webpack_require__(15265);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/data-source-icon.js\nvar data_source_icon = __webpack_require__(92100);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/tachometer-alt-icon.js\nvar tachometer_alt_icon = __webpack_require__(91949);\n// EXTERNAL MODULE: ./src/app/Shared/Services/NotificationChannel.service.tsx\nvar NotificationChannel_service = __webpack_require__(23384);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js\nvar BehaviorSubject = __webpack_require__(86515);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/pairwise.js\nvar pairwise = __webpack_require__(26472);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js\nvar distinctUntilChanged = __webpack_require__(53741);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/finalize.js\nvar finalize = __webpack_require__(83286);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/observable/merge.js\nvar merge = __webpack_require__(23071);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/throttleTime.js + 1 modules\nvar throttleTime = __webpack_require__(51246);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/switchMap.js\nvar switchMap = __webpack_require__(34978);\n;// CONCATENATED MODULE: ./src/app/Dashboard/Charts/jfr/JFRMetricsChartController.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar RECORDING_NAME = \'dashboard_metrics\';\nvar ControllerState;\n(function (ControllerState) {\n ControllerState[ControllerState["UNKNOWN"] = 0] = "UNKNOWN";\n ControllerState[ControllerState["NO_DATA"] = 1] = "NO_DATA";\n ControllerState[ControllerState["READY"] = 2] = "READY";\n})(ControllerState || (ControllerState = {}));\nvar JFRMetricsChartController = /** @class */ (function () {\n function JFRMetricsChartController(_api, _target, _notifications, _settings) {\n var _this = this;\n this._api = _api;\n this._target = _target;\n this._notifications = _notifications;\n this._settings = _settings;\n this._state$ = new BehaviorSubject/* BehaviorSubject */.X(ControllerState.UNKNOWN);\n this._refCount$ = new BehaviorSubject/* BehaviorSubject */.X(0);\n this._updates$ = new ReplaySubject/* ReplaySubject */.t(1);\n this._lazy = this._refCount$\n .pipe((0,map/* map */.U)(function (v) { return v > 0; }), (0,pairwise/* pairwise */.G)())\n .subscribe(function (_a) {\n var prev = _a[0], curr = _a[1];\n if (!prev && curr) {\n // first subscriber joined\n _this._start();\n }\n if (prev && !curr) {\n // last subscriber left\n _this._stop();\n }\n });\n }\n JFRMetricsChartController.prototype.attach = function () {\n var _this = this;\n this._refCount$.next(this._refCount$.value + 1);\n return this._state$.asObservable().pipe((0,distinctUntilChanged/* distinctUntilChanged */.x)(), (0,finalize/* finalize */.x)(function () { return _this._refCount$.next(_this._refCount$.value - 1); }));\n };\n JFRMetricsChartController.prototype.requestRefresh = function () {\n this._updates$.next();\n };\n JFRMetricsChartController.prototype._tearDown = function () {\n this._state$.next(ControllerState.UNKNOWN);\n this._lazy.unsubscribe();\n this._stop();\n };\n JFRMetricsChartController.prototype._stop = function () {\n if (this._attach) {\n this._attach.unsubscribe();\n this._attach = undefined;\n }\n };\n JFRMetricsChartController.prototype._start = function () {\n var _this = this;\n this._stop();\n this._attach = (0,merge/* merge */.T)((0,merge/* merge */.T)(this._updates$.pipe((0,throttleTime/* throttleTime */.p)(this._settings.chartControllerConfig().minRefresh * 1000)), this._notifications.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingCreated */.mN.ActiveRecordingCreated), this._notifications.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingDeleted */.mN.ActiveRecordingDeleted), this._notifications.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingStopped */.mN.ActiveRecordingStopped)).pipe((0,switchMap/* switchMap */.w)(function (_) { return _this._target.target().pipe((0,first/* first */.P)()); })), this._target.target().pipe((0,tap/* tap */.b)(function (_) { return _this._state$.next(ControllerState.UNKNOWN); })))\n .pipe((0,concatMap/* concatMap */.b)(function (t) { return _this._hasRecording(t); }))\n .subscribe(function (v) {\n _this._state$.next(v ? ControllerState.READY : ControllerState.NO_DATA);\n if (v) {\n _this._api\n .uploadActiveRecordingToGrafana(RECORDING_NAME)\n .pipe((0,first/* first */.P)())\n .subscribe(function (_) {\n _this._state$.next(ControllerState.READY);\n });\n }\n });\n };\n JFRMetricsChartController.prototype._hasRecording = function (target) {\n if (target === Target_service/* NO_TARGET */.JE) {\n return (0,of.of)(false);\n }\n return this._api.targetHasRecording(target, {\n state: Api_service/* RecordingState.RUNNING */.SR.RUNNING,\n labels: ["origin=".concat(RECORDING_NAME)],\n });\n };\n return JFRMetricsChartController;\n}());\n\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/Charts/mbean/MBeanMetricsChartController.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar MBeanMetricsChartController_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar MBeanMetricsChartController = /** @class */ (function () {\n function MBeanMetricsChartController(_api, _target, _settings) {\n var _this = this;\n this._api = _api;\n this._target = _target;\n this._settings = _settings;\n this._metrics = new Map();\n this._state$ = new Subject/* Subject */.x();\n this._loading$ = new BehaviorSubject/* BehaviorSubject */.X(true);\n this._refCount$ = new BehaviorSubject/* BehaviorSubject */.X(0);\n this._updates$ = new ReplaySubject/* ReplaySubject */.t(1);\n this._lazy = this._refCount$\n .pipe((0,map/* map */.U)(function (v) { return v > 0; }), (0,pairwise/* pairwise */.G)())\n .subscribe(function (_a) {\n var prev = _a[0], curr = _a[1];\n if (!prev && curr) {\n // first subscriber joined\n _this._start();\n }\n if (prev && !curr) {\n // last subscriber left\n _this._stop();\n }\n });\n }\n MBeanMetricsChartController.prototype.attach = function (category, fields) {\n var _this = this;\n var _a;\n this._refCount$.next(this._refCount$.value + 1);\n if (!this._metrics.has(category)) {\n this._metrics.set(category, []);\n }\n (_a = this._metrics.get(category)) === null || _a === void 0 ? void 0 : _a.push.apply(_a, fields);\n return this._state$.asObservable().pipe((0,distinctUntilChanged/* distinctUntilChanged */.x)(), (0,finalize/* finalize */.x)(function () {\n var _a;\n _this._refCount$.next(_this._refCount$.value - 1);\n var original = _this._metrics.get(category) || [];\n var updated = MBeanMetricsChartController_spreadArray([], original, true);\n fields.forEach(function (field) {\n var idx = updated.findIndex(function (e) { return e === field; });\n if (idx >= 0) {\n updated.splice(idx, 1);\n }\n });\n (_a = _this._metrics.get(category)) === null || _a === void 0 ? void 0 : _a.push.apply(_a, updated);\n }));\n };\n MBeanMetricsChartController.prototype.requestRefresh = function () {\n this._updates$.next();\n };\n MBeanMetricsChartController.prototype.loading = function () {\n return this._loading$.asObservable().pipe((0,distinctUntilChanged/* distinctUntilChanged */.x)());\n };\n MBeanMetricsChartController.prototype._tearDown = function () {\n this._state$.next({});\n this._lazy.unsubscribe();\n this._stop();\n };\n MBeanMetricsChartController.prototype._stop = function () {\n if (this._attach) {\n this._attach.unsubscribe();\n this._attach = undefined;\n }\n };\n MBeanMetricsChartController.prototype._start = function () {\n var _this = this;\n this._stop();\n this._attach = (0,merge/* merge */.T)(this._updates$.pipe((0,throttleTime/* throttleTime */.p)(this._settings.chartControllerConfig().minRefresh * 1000), (0,concatMap/* concatMap */.b)(function (_) { return _this._target.target().pipe((0,first/* first */.P)()); })), this._target.target())\n .pipe((0,tap/* tap */.b)(function (_) { return _this._loading$.next(true); }), (0,concatMap/* concatMap */.b)(function (t) { return _this._queryMetrics(t); }), (0,tap/* tap */.b)(function (_) { return _this._loading$.next(false); }))\n .subscribe(function (v) { return _this._state$.next(v); });\n };\n MBeanMetricsChartController.prototype._queryMetrics = function (target) {\n var q = [];\n var m = new Map();\n this._metrics.forEach(function (fields, category) {\n var s = m.get(category) || new Set();\n fields.forEach(function (f) { return s.add(f); });\n m.set(category, s);\n });\n m.forEach(function (s, k) {\n var l = "".concat(k, " {");\n s.forEach(function (f) { return (l += "\\t".concat(f, "\\n")); });\n l += \'}\';\n q.push(l);\n });\n return this._api.getTargetMBeanMetrics(target, q);\n };\n return MBeanMetricsChartController;\n}());\n\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/Charts/ChartContext.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar ChartContext = react.createContext({\n jfrController: new JFRMetricsChartController(Services/* defaultServices.api */.J.api, Services/* defaultServices.target */.J.target, Services/* defaultServices.notificationChannel */.J.notificationChannel, Services/* defaultServices.settings */.J.settings),\n mbeanController: new MBeanMetricsChartController(Services/* defaultServices.api */.J.api, Services/* defaultServices.target */.J.target, Services/* defaultServices.settings */.J.settings),\n});\n\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/Charts/jfr/JFRMetricsChartCard.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar JFRMetricsChartCard_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO these need to be localized\nvar JFRMetricsChartKind;\n(function (JFRMetricsChartKind) {\n JFRMetricsChartKind[JFRMetricsChartKind["Core Count"] = 1] = "Core Count";\n JFRMetricsChartKind[JFRMetricsChartKind["Thread Count"] = 2] = "Thread Count";\n JFRMetricsChartKind[JFRMetricsChartKind["CPU Load"] = 3] = "CPU Load";\n JFRMetricsChartKind[JFRMetricsChartKind["Heap Usage"] = 4] = "Heap Usage";\n JFRMetricsChartKind[JFRMetricsChartKind["Memory Usage"] = 5] = "Memory Usage";\n JFRMetricsChartKind[JFRMetricsChartKind["Total Memory"] = 6] = "Total Memory";\n JFRMetricsChartKind[JFRMetricsChartKind["Recording Start Time"] = 7] = "Recording Start Time";\n JFRMetricsChartKind[JFRMetricsChartKind["Recording Duration"] = 8] = "Recording Duration";\n JFRMetricsChartKind[JFRMetricsChartKind["Classloading Statistics"] = 9] = "Classloading Statistics";\n JFRMetricsChartKind[JFRMetricsChartKind["Metaspace Summary"] = 10] = "Metaspace Summary";\n JFRMetricsChartKind[JFRMetricsChartKind["Network Utilization"] = 11] = "Network Utilization";\n JFRMetricsChartKind[JFRMetricsChartKind["Metaspace GC Threshold"] = 12] = "Metaspace GC Threshold";\n JFRMetricsChartKind[JFRMetricsChartKind["Thread Statistics"] = 13] = "Thread Statistics";\n JFRMetricsChartKind[JFRMetricsChartKind["Exception Statistics"] = 14] = "Exception Statistics";\n JFRMetricsChartKind[JFRMetricsChartKind["Thread Context Switch Rate"] = 15] = "Thread Context Switch Rate";\n JFRMetricsChartKind[JFRMetricsChartKind["Compiler Statistics"] = 16] = "Compiler Statistics";\n JFRMetricsChartKind[JFRMetricsChartKind["Safepoint Duration"] = 18] = "Safepoint Duration";\n JFRMetricsChartKind[JFRMetricsChartKind["File I/O"] = 19] = "File I/O";\n JFRMetricsChartKind[JFRMetricsChartKind["Compiler Total Time"] = 20] = "Compiler Total Time";\n JFRMetricsChartKind[JFRMetricsChartKind["Compiler Peak Time"] = 24] = "Compiler Peak Time";\n JFRMetricsChartKind[JFRMetricsChartKind["Object Allocation Sample"] = 38] = "Object Allocation Sample";\n})(JFRMetricsChartKind || (JFRMetricsChartKind = {}));\nfunction kindToId(kind) {\n return JFRMetricsChartKind[kind];\n}\nvar JFRMetricsChartCard = function (props) {\n var t = (0,es/* useTranslation */.$G)()[0];\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var controllerContext = react.useContext(ChartContext);\n var history = (0,react_router/* useHistory */.k6)();\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var theme = useTheme()[0];\n var _a = react.useState(ControllerState.NO_DATA), controllerState = _a[0], setControllerState = _a[1];\n var _b = react.useState(Math.floor(Math.random())), randomKey = _b[0], setRandomKey = _b[1];\n var _c = react.useState(\'\'), chartSrc = _c[0], setChartSrc = _c[1];\n var _d = react.useState(\'\'), dashboardUrl = _d[0], setDashboardUrl = _d[1];\n var updateRandomKey = react.useCallback(function () {\n setRandomKey(function (prev) {\n var next = prev + 1;\n if (next >= 10) {\n next = 0;\n }\n return next;\n });\n }, [setRandomKey]);\n react.useEffect(function () {\n addSubscription(serviceContext.api.grafanaDashboardUrl().subscribe(setDashboardUrl));\n }, [addSubscription, serviceContext, setDashboardUrl]);\n react.useEffect(function () {\n if (!dashboardUrl) {\n return;\n }\n var u = new URL(\'/d-solo/main\', dashboardUrl);\n u.searchParams.append(\'theme\', theme);\n u.searchParams.append(\'panelId\', String(kindToId(props.chartKind)));\n u.searchParams.append(\'to\', \'now\');\n u.searchParams.append(\'from\', "now-".concat(props.duration, "s"));\n u.searchParams.append(\'refresh\', "".concat(props.period, "s"));\n setChartSrc(u.toString());\n }, [dashboardUrl, setControllerState, theme, props.chartKind, props.duration, props.period, setChartSrc]);\n react.useEffect(function () {\n addSubscription(controllerContext.jfrController.attach().subscribe(setControllerState));\n }, [addSubscription, controllerContext, setControllerState]);\n var refresh = react.useCallback(function () {\n controllerContext.jfrController.requestRefresh();\n }, [controllerContext]);\n react.useEffect(function () {\n refresh();\n addSubscription((0,interval/* interval */.F)(props.period * 1000).subscribe(function () { return refresh(); }));\n }, [addSubscription, props.period, refresh]);\n var popout = react.useCallback(function () {\n if (chartSrc && dashboardUrl) {\n window.open(chartSrc, \'_blank\');\n }\n }, [chartSrc, dashboardUrl]);\n var cardStyle = react.useMemo(function () {\n if (controllerState !== ControllerState.READY || props.isFullHeight) {\n return {};\n }\n var height;\n switch (props.chartKind) {\n case \'Core Count\':\n height = \'250px\';\n break;\n default:\n height = "380px";\n break;\n }\n return { height: height };\n }, [controllerState, props.chartKind, props.isFullHeight]);\n var resyncButton = react.useMemo(function () {\n return (react.createElement(Button_Button/* Button */.zx, { key: 0, "aria-label": t(\'CHART_CARD.BUTTONS.SYNC.LABEL\', { chartKind: props.chartKind }), onClick: updateRandomKey, variant: "plain", icon: react.createElement(sync_alt_icon/* SyncAltIcon */.ew, null), isDisabled: !chartSrc || !dashboardUrl }));\n }, [t, props.chartKind, updateRandomKey, chartSrc, dashboardUrl]);\n var popoutButton = react.useMemo(function () {\n return (react.createElement(Button_Button/* Button */.zx, { key: 1, "aria-label": t(\'CHART_CARD.BUTTONS.POPOUT.LABEL\', { chartKind: props.chartKind }), onClick: popout, variant: "plain", icon: react.createElement(external_link_alt_icon/* ExternalLinkAltIcon */.LA, null), isDisabled: !chartSrc || !dashboardUrl }));\n }, [t, props.chartKind, popout, chartSrc, dashboardUrl]);\n var actions = react.useMemo(function () {\n var a = props.actions || [];\n return JFRMetricsChartCard_spreadArray([resyncButton, popoutButton], a, true);\n }, [props.actions, resyncButton, popoutButton]);\n var header = react.useMemo(function () {\n return (react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(CardTitle/* CardTitle */.l, null, t(\'CHART_CARD.TITLE\', { chartKind: props.chartKind, duration: props.duration, period: props.period })),\n react.createElement(CardActions/* CardActions */.T, null, controllerState === ControllerState.READY ? actions : props.actions)));\n }, [props.actions, props.chartKind, props.duration, props.period, t, controllerState, actions]);\n var handleCreateRecording = react.useCallback(function () {\n history.push({\n pathname: \'/recordings/create\',\n state: {\n restartExisting: true,\n name: RECORDING_NAME,\n templateName: \'Continuous\',\n templateType: \'TARGET\',\n labels: [{ key: \'origin\', value: RECORDING_NAME }],\n duration: -1,\n // TODO these are arbitrary defaults that will be set in the recording creation form.\n // Should these values be inferred in some more intelligent way?\n maxAge: 120,\n maxSize: 100 * 1024 * 1024, // bytes\n },\n });\n }, [history]);\n return (react.createElement(DashboardCard, { id: props.chartKind + \'-chart-card\', dashboardId: props.dashboardId, cardSizes: JFRMetricsChartCardSizes, isCompact: true, style: cardStyle, cardHeader: header, title: props.chartKind, isDraggable: props.isDraggable, isResizable: props.isResizable, isFullHeight: props.isFullHeight },\n react.createElement(CardBody/* CardBody */.e, null, controllerState === ControllerState.UNKNOWN ? (react.createElement(LoadingView/* LoadingView */.J, null)) : controllerState === ControllerState.READY ? (react.createElement("div", { className: "grafana-iframe-wrapper" },\n react.createElement("iframe", { className: "disabled-pointer", key: controllerState + randomKey, src: chartSrc }))) : (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.large */.I.large },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: data_source_icon/* DataSourceIcon */.xs }),\n react.createElement(Title/* Title */.D, { headingLevel: "h2", size: "md" }, t(\'CHART_CARD.NO_RECORDING.TITLE\')),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null,\n react.createElement(es/* Trans */.cC, { t: t, values: { recordingName: RECORDING_NAME }, components: { label: react.createElement(Label/* Label */._, { color: "blue", isCompact: true }) } }, "CHART_CARD.NO_RECORDING.DESCRIPTION")),\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleCreateRecording }, t(\'CHART_CARD.BUTTONS.CREATE.LABEL\'))))))));\n};\nvar JFRMetricsChartCardSizes = {\n span: {\n minimum: 3,\n default: 4,\n maximum: 12,\n },\n height: {\n // TODO: implement height resizing\n minimum: Number.NaN,\n default: Number.NaN,\n maximum: Number.NaN,\n },\n};\nvar JFRMetricsChartCardDescriptor = {\n featureLevel: Settings_service/* FeatureLevel.BETA */.Lu.BETA,\n title: \'CHART_CARD.JFR_METRICS_CARD_TITLE\',\n cardSizes: JFRMetricsChartCardSizes,\n description: \'CHART_CARD.JFR_METRICS_CARD_DESCRIPTION\',\n descriptionFull: \'CHART_CARD.JFR_METRICS_CARD_DESCRIPTION_FULL\',\n component: JFRMetricsChartCard,\n propControls: [\n {\n name: \'CHART_CARD.PROP_CONTROLS.PERFORMANCE_METRIC.NAME\',\n key: \'chartKind\',\n description: \'CHART_CARD.PROP_CONTROLS.PERFORMANCE_METRIC.DESCRIPTION\',\n values: Object.values(JFRMetricsChartKind).filter(function (v) { return typeof v === \'string\'; }),\n defaultValue: Object.values(JFRMetricsChartKind).filter(function (v) { return typeof v === \'string\'; })[0],\n kind: \'select\',\n },\n {\n name: \'CHART_CARD.PROP_CONTROLS.DATA_WINDOW.NAME\',\n key: \'duration\',\n defaultValue: 120,\n description: \'CHART_CARD.PROP_CONTROLS.DATA_WINDOW.DESCRIPTION\',\n kind: \'number\',\n extras: {\n min: 30,\n max: 300,\n },\n },\n {\n name: \'CHART_CARD.PROP_CONTROLS.REFRESH_PERIOD.NAME\',\n key: \'period\',\n defaultValue: 10,\n description: \'CHART_CARD.PROP_CONTROLS.REFRESH_PERIOD.DESCRIPTION\',\n kind: \'number\',\n extras: {\n min: 5,\n max: 120,\n },\n },\n ],\n icon: react.createElement(tachometer_alt_icon/* TachometerAltIcon */.Le, null),\n labels: [\n {\n content: \'Beta\',\n color: \'green\',\n },\n {\n content: \'Metrics\',\n color: \'blue\',\n },\n ],\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/LinearDotSpinner.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar LinearDotSpinner_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nvar LinearDotSpinner = function (_a) {\n var className = _a.className, _ = LinearDotSpinner_rest(_a, ["className"]);\n return react.createElement("div", { className: (0,esm.css)(\'linear-dot-spinner\', className) });\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/PropertyPath.tsx\nvar PropertyPath_assign = (undefined && undefined.__assign) || function () {\n PropertyPath_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return PropertyPath_assign.apply(this, arguments);\n};\nvar PropertyPath_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar PropertyPath = function (_a) {\n var kind = _a.kind, path = _a.path, props = PropertyPath_rest(_a, ["kind", "path"]);\n var pathArray = lodash_default().toPath(path);\n return (react.createElement(Breadcrumb/* Breadcrumb */.a, PropertyPath_assign({}, props),\n react.createElement(BreadcrumbItem/* BreadcrumbItem */.g, null, kind),\n pathArray.map(function (property, i) {\n return (react.createElement(BreadcrumbItem/* BreadcrumbItem */.g, { key: "".concat(property, "-").concat(i), isActive: i === pathArray.length - 1 }, property));\n })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-topology/dist/esm/index.js + 291 modules\nvar dist_esm = __webpack_require__(88998);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js\nvar debounceTime = __webpack_require__(42965);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DescriptionList/DescriptionListTermHelpText.js\nvar DescriptionListTermHelpText = __webpack_require__(48761);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DescriptionList/DescriptionListTermHelpTextButton.js\nvar DescriptionListTermHelpTextButton = __webpack_require__(80324);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/running-icon.js\nvar running_icon = __webpack_require__(2322);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/ban-icon.js\nvar ban_icon = __webpack_require__(46716);\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/EmptyText.tsx\nvar EmptyText_assign = (undefined && undefined.__assign) || function () {\n EmptyText_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return EmptyText_assign.apply(this, arguments);\n};\nvar EmptyText_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar EmptyText = function (_a) {\n var text = _a.text, className = _a.className, props = EmptyText_rest(_a, ["text", "className"]);\n return (react.createElement("span", EmptyText_assign({}, props, { className: (0,esm.css)(\'empty-text\', className) }), text));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/Entity/utils.tsx\nvar Entity_utils_assign = (undefined && undefined.__assign) || function () {\n Entity_utils_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Entity_utils_assign.apply(this, arguments);\n};\nvar utils_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar utils_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\nvar mapSection = function (d) { return (react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, { key: d.key },\n react.createElement(DescriptionListTermHelpText/* DescriptionListTermHelpText */.H, null,\n react.createElement(Popover/* Popover */.J, { headerContent: d.helperTitle, bodyContent: d.helperDescription },\n react.createElement(DescriptionListTermHelpTextButton/* DescriptionListTermHelpTextButton */.$, null, d.title))),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, { style: { userSelect: \'text\', cursor: \'text\' } }, d.content))); };\n// Note: Values will be word split to used as display names\nvar TargetOwnedResourceTypeAsArray = [\n \'activeRecordings\',\n \'archivedRecordings\',\n \'eventTemplates\',\n \'eventTypes\',\n \'agentProbes\',\n];\nvar TargetRelatedResourceTypeAsArray = [\'automatedRules\', \'credentials\'];\nvar isOwnedResource = function (resourceType) {\n return resourceType !== \'automatedRules\' && resourceType !== \'credentials\';\n};\nvar getTargetOwnedResources = function (resourceType, _a, apiService) {\n var target = _a.target;\n switch (resourceType) {\n case \'activeRecordings\':\n return apiService.getTargetActiveRecordings(target);\n case \'archivedRecordings\':\n return apiService.getTargetArchivedRecordings(target);\n case \'eventTemplates\':\n return apiService.getTargetEventTemplates(target);\n case \'eventTypes\':\n return apiService.getTargetEventTypes(target);\n case \'agentProbes\':\n return apiService.getActiveProbesForTarget(target, true, true);\n case \'automatedRules\':\n return apiService.getRules(true, true).pipe((0,concatMap/* concatMap */.b)(function (rules) {\n var tasks = rules.map(function (r) {\n return apiService.isTargetMatched(r.matchExpression, target).pipe((0,map/* map */.U)(function (ok) { return (ok ? [r] : []); }));\n });\n return (0,forkJoin/* forkJoin */.D)(tasks).pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([[]]), (0,map/* map */.U)(function (rules) { return rules.reduce(function (prev, curr) { return prev.concat(curr); }); }));\n }));\n case \'credentials\':\n return apiService.getCredentials(true, true).pipe((0,concatMap/* concatMap */.b)(function (credentials) {\n var tasks = credentials.map(function (crd) {\n return apiService.isTargetMatched(crd.matchExpression, target).pipe((0,map/* map */.U)(function (ok) { return (ok ? [crd] : []); }));\n });\n return (0,forkJoin/* forkJoin */.D)(tasks).pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([[]]), (0,map/* map */.U)(function (credentials) { return credentials.reduce(function (prev, curr) { return prev.concat(curr); }); }));\n }));\n default:\n throw new Error("Unsupported resource: ".concat(resourceType));\n }\n};\nvar getResourceAddedOrModifiedEvents = function (resourceType) {\n switch (resourceType) {\n case \'activeRecordings\':\n return [\n NotificationChannel_service/* NotificationCategory.ActiveRecordingCreated */.mN.ActiveRecordingCreated,\n NotificationChannel_service/* NotificationCategory.SnapshotCreated */.mN.SnapshotCreated,\n NotificationChannel_service/* NotificationCategory.ActiveRecordingStopped */.mN.ActiveRecordingStopped, // State Update\n ];\n case \'archivedRecordings\':\n return [NotificationChannel_service/* NotificationCategory.ArchivedRecordingCreated */.mN.ArchivedRecordingCreated, NotificationChannel_service/* NotificationCategory.ActiveRecordingSaved */.mN.ActiveRecordingSaved];\n case \'eventTemplates\':\n return [NotificationChannel_service/* NotificationCategory.TemplateUploaded */.mN.TemplateUploaded];\n case \'eventTypes\':\n return [];\n case \'agentProbes\':\n return [NotificationChannel_service/* NotificationCategory.ProbeTemplateApplied */.mN.ProbeTemplateApplied];\n case \'automatedRules\':\n return [NotificationChannel_service/* NotificationCategory.RuleCreated */.mN.RuleCreated, NotificationChannel_service/* NotificationCategory.RuleUpdated */.mN.RuleUpdated];\n case \'credentials\':\n return [NotificationChannel_service/* NotificationCategory.CredentialsStored */.mN.CredentialsStored, NotificationChannel_service/* NotificationCategory.TargetCredentialsStored */.mN.TargetCredentialsStored];\n default:\n throw new Error("Unsupported resource: ".concat(resourceType));\n }\n};\nvar getResourceRemovedEvents = function (resourceType) {\n switch (resourceType) {\n case \'activeRecordings\':\n return [NotificationChannel_service/* NotificationCategory.ActiveRecordingDeleted */.mN.ActiveRecordingDeleted, NotificationChannel_service/* NotificationCategory.SnapshotDeleted */.mN.SnapshotDeleted];\n case \'archivedRecordings\':\n return [NotificationChannel_service/* NotificationCategory.ArchivedRecordingDeleted */.mN.ArchivedRecordingDeleted];\n case \'eventTemplates\':\n return [NotificationChannel_service/* NotificationCategory.TemplateDeleted */.mN.TemplateDeleted];\n case \'eventTypes\':\n return [];\n case \'agentProbes\':\n return [NotificationChannel_service/* NotificationCategory.ProbesRemoved */.mN.ProbesRemoved];\n case \'automatedRules\':\n return [NotificationChannel_service/* NotificationCategory.RuleDeleted */.mN.RuleDeleted];\n case \'credentials\':\n return [NotificationChannel_service/* NotificationCategory.CredentialsDeleted */.mN.CredentialsDeleted, NotificationChannel_service/* NotificationCategory.TargetCredentialsDeleted */.mN.TargetCredentialsDeleted];\n default:\n throw new Error("Unsupported resource: ".concat(resourceType));\n }\n};\nvar getResourceListPatchFn = function (resourceType, _a, apiService) {\n var target = _a.target;\n switch (resourceType) {\n case \'activeRecordings\':\n case \'archivedRecordings\':\n return function (arr, eventData, removed) {\n var recording = eventData.message.recording;\n var newArr = arr.filter(function (r) { return r.name !== recording.name; });\n if (!removed) {\n newArr = newArr.concat([recording]);\n }\n return (0,of.of)(newArr);\n };\n case \'eventTemplates\':\n return function (arr, eventData, removed) {\n var template = eventData.message.template;\n var newArr = arr.filter(function (r) { return r.name !== template.name; });\n if (!removed) {\n newArr = newArr.concat([template]);\n }\n return (0,of.of)(newArr);\n };\n case \'agentProbes\':\n return function (arr, eventData, removed) {\n // Only support remove all\n if (removed) {\n return (0,of.of)([]);\n }\n var probes = eventData.message.events || [];\n var probeIds = probes.map(function (p) { return p.id; });\n return (0,of.of)(utils_spreadArray(utils_spreadArray([], arr.filter(function (probe) { return !probeIds.includes(probe.id); }), true), probes, true));\n };\n case \'automatedRules\':\n return function (arr, eventData, removed) {\n var rule = eventData.message;\n return apiService.isTargetMatched(rule.matchExpression, target).pipe((0,map/* map */.U)(function (ok) {\n if (ok) {\n var newArr = arr.filter(function (r) { return r.name !== rule.name; });\n if (!removed) {\n newArr = newArr.concat([rule]);\n }\n return newArr;\n }\n return arr;\n }));\n };\n case \'credentials\':\n return function (arr, eventData, removed) {\n var credential = eventData.message;\n return apiService.isTargetMatched(credential.matchExpression, target).pipe((0,map/* map */.U)(function (ok) {\n if (ok) {\n var newArr = arr.filter(function (r) { return r.id !== credential.id; });\n if (!removed) {\n newArr = newArr.concat([credential]);\n }\n return newArr;\n }\n return arr;\n }));\n };\n default:\n throw new Error("Unsupported resource: ".concat(resourceType));\n }\n};\n// TODO: Revisit when updating to react-router v6\nvar getLinkPropsForTargetResource = function (resourceType) {\n switch (resourceType) {\n case \'activeRecordings\':\n return { to: { pathname: \'/recordings\', search: \'?tab=active-recording\' } };\n case \'archivedRecordings\':\n return { to: { pathname: \'/recordings\', search: \'?tab=archived-recording\' } };\n case \'eventTemplates\':\n return { to: { pathname: \'/events\', search: \'?eventTab=event-template\' } };\n case \'eventTypes\':\n return { to: { pathname: \'/events\', search: \'?eventTab=event-type\' } };\n case \'agentProbes\':\n return { to: { pathname: \'/events\', search: \'?agentTab=agent-probe\' } };\n case \'automatedRules\':\n return { to: { pathname: \'/rules\' } };\n case \'credentials\':\n return { to: { pathname: \'/security\' } };\n default:\n throw new Error("Unsupported resource: ".concat(resourceType));\n }\n};\nvar ActiveRecDetail = function (_a) {\n var resources = _a.resources, props = utils_rest(_a, ["resources"]);\n var stateGroupConfigs = react.useMemo(function () { return [\n {\n groupLabel: \'Running\',\n color: \'green\',\n icon: react.createElement(running_icon/* RunningIcon */.de, { color: "green" }),\n items: resources.filter(function (rec) { return rec.state === Api_service/* RecordingState.RUNNING */.SR.RUNNING; }),\n },\n {\n groupLabel: \'Stopped\',\n color: \'orange\',\n icon: react.createElement(ban_icon/* BanIcon */.SC, { color: "orange" }),\n items: resources.filter(function (rec) { return rec.state === Api_service/* RecordingState.STOPPED */.SR.STOPPED; }),\n },\n ]; }, [resources]);\n return (react.createElement(DescriptionList/* DescriptionList */.o, null,\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTermHelpText/* DescriptionListTermHelpText */.H, null, "Recording Status"),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null,\n react.createElement(Flex/* Flex */.k, Entity_utils_assign({}, props), stateGroupConfigs.map(function (_a) {\n var groupLabel = _a.groupLabel, items = _a.items, color = _a.color, icon = _a.icon;\n return (react.createElement(Flex/* Flex */.k, { key: groupLabel },\n react.createElement(FlexItem/* FlexItem */.B, { spacer: { default: \'spacerSm\' } },\n react.createElement("span", { style: { fontSize: \'1.1em\' } }, items.length)),\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(Label/* Label */._, { icon: icon, color: color }, groupLabel))));\n }))))));\n};\nvar Nothing = function () {\n return (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyText, { text: \'Nothing to show.\' })));\n};\nvar getExpandedResourceDetails = function (resourceType) {\n switch (resourceType) {\n case \'activeRecordings\':\n return ActiveRecDetail;\n default:\n return Nothing;\n }\n};\nvar getConnectUrlFromEvent = function (event) {\n return event.message.target || event.message.targetId;\n};\nvar useResources = function (targetNode, resourceType) {\n var _a = react.useContext(Services/* ServiceContext */.o), api = _a.api, notificationChannel = _a.notificationChannel, settings = _a.settings;\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState([]), resources = _b[0], setResources = _b[1];\n var _c = react.useState(true), loading = _c[0], setLoading = _c[1];\n var _d = react.useState(), error = _d[0], setError = _d[1];\n var targetSubjectRef = react.useRef(new Subject/* Subject */.x());\n var targetSubject = targetSubjectRef.current;\n react.useEffect(function () {\n addSubscription(targetSubject\n .pipe((0,switchMap/* switchMap */.w)(function (tn) {\n var resourceObs = getTargetOwnedResources(resourceType, tn, api).pipe((0,map/* map */.U)(function (rs) { return ({\n resources: rs,\n error: undefined,\n }); }), (0,catchError/* catchError */.K)(function (err) {\n return (0,of.of)({\n resources: [],\n error: err,\n });\n }));\n if (!settings.autoRefreshEnabled()) {\n return resourceObs;\n }\n return (0,merge/* merge */.T)(resourceObs, (0,interval/* interval */.F)(settings.autoRefreshPeriod() * settings.autoRefreshUnits()).pipe((0,concatMap/* concatMap */.b)(function () { return resourceObs; })));\n }))\n .subscribe(function (_a) {\n var resources = _a.resources, error = _a.error;\n setLoading(false);\n setError(error);\n setResources(resources);\n }));\n }, [addSubscription, setLoading, setError, setResources, api, settings, targetSubject, resourceType]);\n react.useEffect(function () {\n var patchEventConfig = [\n {\n categories: getResourceAddedOrModifiedEvents(resourceType),\n },\n {\n categories: getResourceRemovedEvents(resourceType),\n deleted: true,\n },\n ];\n patchEventConfig.forEach(function (_a) {\n var categories = _a.categories, deleted = _a.deleted;\n addSubscription(targetSubject\n .pipe((0,switchMap/* switchMap */.w)(function (tn) {\n return (0,combineLatest/* combineLatest */.a)([(0,of.of)(tn), merge/* merge.apply */.T.apply(void 0, categories.map(function (cat) { return notificationChannel.messages(cat); }))]);\n }))\n .subscribe(function (_a) {\n var targetNode = _a[0], event = _a[1];\n var extractedUrl = getConnectUrlFromEvent(event);\n var isOwned = isOwnedResource(resourceType);\n if (!isOwned || (extractedUrl && extractedUrl === targetNode.target.connectUrl)) {\n setLoading(true);\n setResources(function (old) {\n // Avoid accessing state directly, which\n // causes the effect to run every time\n addSubscription(getResourceListPatchFn(resourceType, targetNode, api)(old, event, deleted).subscribe({\n next: function (rs) {\n setLoading(false);\n setError(undefined);\n setResources(rs);\n },\n error: function (error) {\n setLoading(false);\n setError(error);\n },\n }));\n return old;\n });\n }\n }));\n });\n }, [addSubscription, setLoading, api, targetSubject, resourceType, notificationChannel, setResources, setError]);\n // Need to call after registering listeners\n // Do not reorder\n react.useEffect(function () {\n targetSubject.next(targetNode);\n }, [targetNode, targetSubject]);\n return {\n error: error,\n loading: loading,\n resources: resources,\n };\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/CodeBlock/CodeBlockAction.js\nvar CodeBlockAction = __webpack_require__(50982);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js + 1 modules\nvar ClipboardCopyButton = __webpack_require__(85030);\n;// CONCATENATED MODULE: ./src/app/Shared/MatchExpression/MatchExpressionHint.tsx\nvar MatchExpressionHint_assign = (undefined && undefined.__assign) || function () {\n MatchExpressionHint_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return MatchExpressionHint_assign.apply(this, arguments);\n};\nvar MatchExpressionHint_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar MatchExpressionHint = function (_a) {\n var target = _a.target, props = MatchExpressionHint_rest(_a, ["target"]);\n var _b = react.useState(false), copied = _b[0], setCopied = _b[1];\n var exampleExpression = react.useMemo(function () {\n var _a;\n var body;\n if (!target || !target.alias || !target.connectUrl) {\n body = \'true\';\n }\n else {\n body = "target.alias == \'".concat(target.alias, "\' || target.annotations.cryostat[\'PORT\'] == ").concat((_a = target.annotations) === null || _a === void 0 ? void 0 : _a.cryostat[\'PORT\']);\n }\n body = JSON.stringify(body, null, 2);\n body = body.substring(1, body.length - 1);\n return body;\n }, [target]);\n var onSaveToClipboard = react.useCallback(function () {\n setCopied(true);\n navigator.clipboard.writeText(exampleExpression);\n }, [setCopied, exampleExpression]);\n var actions = react.useMemo(function () {\n return (react.createElement(CodeBlockAction/* CodeBlockAction */.A, null,\n react.createElement(ClipboardCopyButton/* ClipboardCopyButton */.u, { id: "match-expression-copy-button", textId: "match-expression-code-content", "aria-label": "Copy to clipboard", onClick: onSaveToClipboard, exitDelay: copied ? 1500 : 600, maxWidth: "110px", variant: "plain", onTooltipHidden: function () { return setCopied(false); } }, copied ? \'Copied!\' : \'Click to copy to clipboard\')));\n }, [copied, onSaveToClipboard, setCopied]);\n return (react.createElement(CodeBlock/* CodeBlock */.d, MatchExpressionHint_assign({}, props, { actions: actions }),\n react.createElement(CodeBlockCode/* CodeBlockCode */.B, null, exampleExpression)));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/CollapseIcon.tsx\nvar CollapseIcon_assign = (undefined && undefined.__assign) || function () {\n CollapseIcon_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CollapseIcon_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nvar CollapseIcon = function (_a) {\n var style = _a.style;\n return (react.createElement("svg", { style: CollapseIcon_assign(CollapseIcon_assign({}, style), { verticalAlign: \'-0.125em\' }), fill: "currentColor", height: "1em", width: "1em", viewBox: "0 0 448 512", "aria-hidden": "true", role: "img" },\n react.createElement("path", { d: "M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z" })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/GraphView/TopologyControlBar.tsx\nvar TopologyControlBar_assign = (undefined && undefined.__assign) || function () {\n TopologyControlBar_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyControlBar_assign.apply(this, arguments);\n};\nvar TopologyControlBar_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar TopologyControlBar_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar TopologyControlBar = function (_a) {\n var visualization = _a.visualization, noCollapse = _a.noCollapse, className = _a.className, props = TopologyControlBar_rest(_a, ["visualization", "noCollapse", "className"]);\n var buttonConfigs = react.useMemo(function () {\n var base = TopologyControlBar_spreadArray([], (0,dist_esm/* createTopologyControlButtons */.w9q)(TopologyControlBar_assign(TopologyControlBar_assign({}, dist_esm/* defaultControlButtonsOptions */.T5T), { zoomInCallback: (0,dist_esm/* action */.aDg)(function () {\n visualization.getGraph().scaleBy(4 / 3);\n }), zoomInTip: \'Zoom in\', zoomInAriaLabel: \'Zoom in\', zoomOutCallback: (0,dist_esm/* action */.aDg)(function () {\n visualization.getGraph().scaleBy(3 / 4);\n }), zoomOutTip: \'Zoom out\', zoomOutAriaLabel: \'Zoom out\', fitToScreenCallback: (0,dist_esm/* action */.aDg)(function () {\n visualization.getGraph().fit(120);\n }), fitToScreenTip: \'Fit to screen\', fitToScreenAriaLabel: \'Fit to screen\', resetViewCallback: (0,dist_esm/* action */.aDg)(function () {\n visualization.getGraph().reset();\n visualization.getGraph().layout();\n }), resetViewTip: \'Reset view\', resetViewAriaLabel: \'Reset view\', legend: false })), true);\n if (!noCollapse) {\n base.push({\n id: \'collapse-all-group\',\n icon: react.createElement(CollapseIcon, null),\n tooltip: \'Collapse all groups\',\n callback: (0,dist_esm/* action */.aDg)(function () {\n // Close top-level groups\n visualization\n .getGraph()\n .getNodes()\n .forEach(function (n) { return n.setCollapsed(true); });\n }),\n });\n }\n return base;\n }, [visualization, noCollapse]);\n return (react.createElement("div", { className: (0,esm.css)(\'topology-control-bar\', className) },\n react.createElement(dist_esm/* TopologyControlBar */.pEr, TopologyControlBar_assign({}, props, { controlButtons: buttonConfigs }))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/typings.ts\nvar NodeType;\n(function (NodeType) {\n // The entire deployment scenario Cryostat finds itself in.\n NodeType["UNIVERSE"] = "Universe";\n // A division of the deployment scenario (i.e. Kubernetes, JDP, Custom Target, CryostatAgent)\n NodeType["REALM"] = "Realm";\n // A plain target JVM, connectable over JMX.\n NodeType["JVM"] = "JVM";\n // A target JVM using the Cryostat Agent, *not* connectable over JMX. Agent instances\n // that do publish a JMX Service URL should publish themselves with the JVM NodeType.\n NodeType["AGENT"] = "CryostatAgent";\n // Custom target defined via Custom Target Creation Form.\n NodeType["CUSTOM_TARGET"] = "CustomTarget";\n // Kubernetes platform.\n NodeType["NAMESPACE"] = "Namespace";\n NodeType["STATEFULSET"] = "StatefulSet";\n NodeType["DAEMONSET"] = "DaemonSet";\n NodeType["DEPLOYMENT"] = "Deployment";\n NodeType["DEPLOYMENTCONFIG"] = "DeploymentConfig";\n NodeType["REPLICASET"] = "ReplicaSet";\n NodeType["REPLICATIONCONTROLLER"] = "ReplicationController";\n NodeType["POD"] = "Pod";\n NodeType["ENDPOINT"] = "Endpoint";\n // Standalone targets\n NodeType["TARGET"] = "Target";\n})(NodeType || (NodeType = {}));\nvar DEFAULT_EMPTY_UNIVERSE = {\n id: 0,\n name: \'Universe\',\n nodeType: NodeType.UNIVERSE,\n labels: {},\n children: [],\n};\nvar isTargetNode = function (node) {\n return node[\'target\'] !== undefined && node[\'children\'] === undefined;\n};\n\n;// CONCATENATED MODULE: ./src/app/assets/openjdk.svg\nconst openjdk_namespaceObject = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIwLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAzMiAzMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzIgMzI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDpub25lO30KCS5zdDJ7ZmlsbDp1cmwoI1NWR0lEXzFfKTtzdHJva2U6IzAwMDAwMDt9Cjwvc3R5bGU+CjxwYXRoIGQ9Ik0xMC45NiwzLjQyYzAuNjYsMS4zOSwwLjIxLDExLjA2LTAuNTYsMTQuNDVjLTAuNzcsMy40LTEuNTUsNy43Mi0xLjczLDExLjM2Yy0wLjA4LDEuNTUsMC4xNiwyLjE2LDEuMTcsMi4xNgoJYzEuNzksMCw0LjA1LTMuNzcsNi45LTMuNjhjMi44NSwwLjA4LDMuNzUsNC4zMiw1LjA5LDQuMjljMS4zMy0wLjAzLDIuNDEtMC40OSwyLjQyLTQuNjFDMjQuMjksMTUuMDgsMTMuOTgsNS4xLDEwLjk2LDMuNDIKCUwxMC45NiwzLjQyTDEwLjk2LDMuNDJMMTAuOTYsMy40MnoiLz4KPHBhdGggZD0iTTE5LjkxLDEzLjI1YzAuNjMsMS4wNiwyLjIzLDAuMjQsMi4zLTAuOTVjMC4wNy0xLjE5LTAuMTEtMi43LTAuODgtMi43NWMtMC43Ny0wLjA2LTEuMzMtMC44My0yLjEtMC44OQoJcy0xLjYxLDAuNzItMS45Ny0wLjMxYy0wLjM2LTEuMDMsMC45Ny0xLjQ2LDEuOTctMS42M2MtMC44OS0wLjg5LTEuNDEtMS44Ny0xLjgtMi45Yy0wLjM5LTEuMDItMC42OC0xLjk2LDAuNDEtMi4zNgoJczEsMS42NiwyLjI1LDIuNjFjLTAuMzctMS4zOS0wLjUtMS45Ny0wLjQ4LTIuNzhzLTAuMDMtMS40MywxLjEyLTEuMjdzMC42NSwyLjU0LDEuNTQsMy41MmMwLjI3LTAuOTIsMC40NC0yLjA5LDEuMDktMi41NwoJczIuMTUtMC40OSwxLjIsMS40OHMwLjI4LDMuMDQtMC4wMSw0LjZzLTEuMTgsMS4yNy0xLjU3LDIuMjdjLTAuMzgsMSwwLjIzLDMuMjgtMC41LDQuM3MtMC44NSwyLjYtMC4zOCwzLjg1CglDMjAuNjYsMTYuMTMsMTkuOTEsMTMuMjUsMTkuOTEsMTMuMjVMMTkuOTEsMTMuMjVMMTkuOTEsMTMuMjVMMTkuOTEsMTMuMjV6Ii8+CjxwYXRoIGQ9Ik0xMC45MywxNC41OGMtMC41OCwzLjk5LTIuNjEsNC40Ny0yLjcxLDYuMTJjLTAuMSwxLjY2LDAuNTQsMS44MiwwLjUsMy4zNWMtMC4wNCwxLjUzLTEuNCwyLjE1LTEuNTcsMi45OQoJYy0wLjE2LDAuODMsMC43LDEuMSwxLjIsMS4xczEuMDEtMi4yMSwxLjIxLTMuNjFjMC4yLTEuNC0wLjY3LTIuMjMtMC42Ny0zLjE5czEuMjYtMi43MiwxLjAzLTEuMTgKCUMxMC45NywxOC41MSwxMS40NywxNi40MSwxMC45MywxNC41OEwxMC45MywxNC41OEwxMC45MywxNC41OEwxMC45MywxNC41OHoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTExLjcxLDE2LjFjLTAuNDQsMi4xNi0zLjIsMTQuMjItMS43OSwxNC4zN2MxLjQsMC4xNSwzLjQtMy43Myw2LjY3LTMuN2MzLjI3LDAuMDMsNC41Niw0LjM1LDUuMzYsNC4zMwoJYzAuOC0wLjAzLDEuMzIsMC4yOCwxLjQxLTQuNTlzLTIuODktMTEuMS00LjY1LTEzLjg0QzE2LjMxLDEyLjgyLDEzLjc1LDE0LjczLDExLjcxLDE2LjFMMTEuNzEsMTYuMUwxMS43MSwxNi4xTDExLjcxLDE2LjF6Ii8+CjxnPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTE4LjA2LDEzLjUyYy0wLjE1LTEuNDMtMS41LTItMi44LTEuODJjLTEuMDksMC4xNS0yLjU0LDEuMDctMi42OCwyLjI1Yy0wLjE1LDEuMzMsMC45LDIuNTUsMi4yMywyLjYxCgkJYzEuMTgsMC4wNSwyLjQ1LTAuNTIsMi45OC0xLjYzQzE4LDE0LjQ4LDE4LjA4LDE0LjAyLDE4LjA2LDEzLjUyIi8+Cgk8cGF0aCBkPSJNMTguNjgsMTMuNDdjLTAuMTMtMS4zNS0xLjEzLTIuMi0yLjQzLTIuNDFjLTEuMjUtMC4yLTIuNjEsMC4zOS0zLjQ5LDEuMjdjLTAuOTgsMC45OC0xLjAyLDIuMzUtMC4zMywzLjUyCgkJYzAuNjgsMS4xNSwyLjE5LDEuNTMsMy40MiwxLjI0QzE3LjU0LDE2LjcxLDE4Ljc5LDE1LjIzLDE4LjY4LDEzLjQ3Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iMTMuOTMxNCIgY3k9IjIwLjg3ODQiIHI9IjQuMjk3NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDM0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjA2MDQiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQkM4QjQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjA3MTIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQkMzQjAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjE4MjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNGNzk3OEIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjI5OTUiIHN0eWxlPSJzdG9wLWNvbG9yOiNGNDcxNkIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQxOTkiIHN0eWxlPSJzdG9wLWNvbG9yOiNGMTUyNTEiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU0NTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNFRjNBM0QiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3NzgiIHN0eWxlPSJzdG9wLWNvbG9yOiNFRTI5MkYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjgyMiIgc3R5bGU9InN0b3AtY29sb3I6I0VEMUYyNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNFRDFDMjQiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QyIiBkPSJNMTguMDYsMTMuOThjLTAuMTIsMS4yMy0xLjEsMi4yMS0yLjI3LDIuNWMtMS4yNSwwLjMtMi42Mi0wLjE4LTMuMDctMS40NmMtMC4yMy0wLjY1LTAuMTktMS4zMywwLjIxLTEuOQoJCWMwLjMzLTAuNDgsMC44Ny0wLjg2LDEuNC0xLjFjMS4wOS0wLjUsMi42Ni0wLjU1LDMuNDIsMC41NkMxOC4wMiwxMi45OSwxOC4wNywxMy40OCwxOC4wNiwxMy45OCIvPgo8L2c+Cjwvc3ZnPgo=";\n;// CONCATENATED MODULE: ./src/app/Topology/GraphView/NodeDecorator.tsx\nvar NodeDecorator_assign = (undefined && undefined.__assign) || function () {\n NodeDecorator_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return NodeDecorator_assign.apply(this, arguments);\n};\nvar NodeDecorator_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar getNodeDecorators = function (element) {\n return (react.createElement(react.Fragment, null,\n react.createElement(ActiveRecordingDecorator, { element: element, quadrant: dist_esm/* TopologyQuadrant.upperRight */.jp8.upperRight }),\n ",",\n react.createElement(StatusDecorator, { element: element, quadrant: dist_esm/* TopologyQuadrant.lowerLeft */.jp8.lowerLeft })));\n};\nvar ActiveRecordingDecorator = function (_a) {\n var element = _a.element, quadrant = _a.quadrant, props = NodeDecorator_rest(_a, ["element", "quadrant"]);\n var data = element.getData();\n var _b = (0,dist_esm/* getDefaultShapeDecoratorCenter */.eOL)(quadrant, element), x = _b.x, y = _b.y;\n var _c = useResources(data, \'activeRecordings\'), recordings = _c.resources, error = _c.error, loading = _c.loading;\n var runningRecs = react.useMemo(function () { return recordings.filter(function (rec) { return rec.state === Api_service/* RecordingState.RUNNING */.SR.RUNNING; }); }, [recordings]);\n var iconConfig = react.useMemo(function () {\n var base = \'topology__node-decorator-icon\';\n if (loading) {\n return {\n icon: react.createElement(in_progress_icon/* InProgressIcon */.pG, { className: (0,esm.css)(base, \'progress\') }),\n tooltip: \'Retrieving active recordings.\',\n };\n }\n return runningRecs.length && !error\n ? {\n icon: react.createElement(running_icon/* RunningIcon */.de, { className: (0,esm.css)(base, \'success\') }),\n tooltip: "".concat(runningRecs.length, " running active recording").concat(runningRecs.length > 2 ? \'s\' : \'\', "."),\n }\n : undefined;\n }, [error, loading, runningRecs]);\n return iconConfig ? (react.createElement(Tooltip/* Tooltip */.u, NodeDecorator_assign({}, props, { content: iconConfig.tooltip, appendTo: utils/* portalRoot */.tO }),\n react.createElement(dist_esm/* Decorator */.Sbw, { x: x, y: y, radius: dist_esm/* DEFAULT_DECORATOR_RADIUS */._Ww, showBackground: true, icon: iconConfig.icon }))) : null;\n};\nvar StatusDecorator = function (_a) {\n var element = _a.element, quadrant = _a.quadrant, props = NodeDecorator_rest(_a, ["element", "quadrant"]);\n var data = element.getData();\n var _b = getStatusTargetNode(data), nodeStatus = _b[0], extra = _b[1];\n var _c = (0,dist_esm/* getDefaultShapeDecoratorCenter */.eOL)(quadrant, element), x = _c.x, y = _c.y;\n return nodeStatus ? (react.createElement(Tooltip/* Tooltip */.u, NodeDecorator_assign({}, props, { content: extra === null || extra === void 0 ? void 0 : extra.title, appendTo: utils/* portalRoot */.tO }),\n react.createElement(dist_esm/* Decorator */.Sbw, { x: x, y: y, radius: dist_esm/* DEFAULT_DECORATOR_RADIUS */._Ww, showBackground: true, icon: react.createElement(warning_triangle_icon/* WarningTriangleIcon */.T6, { className: (0,esm.css)(\'topology__node-decorator-icon\', \'warning\') }) }))) : null;\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Divider/Divider.js\nvar Divider = __webpack_require__(56186);\n;// CONCATENATED MODULE: ./src/app/utils/useFeatureLevel.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nfunction useFeatureLevel() {\n var _a = react.useState(Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION), featureLevel = _a[0], setFeatureLevel = _a[1];\n var subRef = react.useRef();\n var services = react.useContext(Services/* ServiceContext */.o);\n react.useLayoutEffect(function () {\n subRef.current = services.settings.featureLevel().subscribe(setFeatureLevel);\n return function () { return subRef.current && subRef.current.unsubscribe(); };\n }, [subRef, services.settings]);\n return featureLevel;\n}\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Tabs/TabTitleText.js\nvar TabTitleText = __webpack_require__(29873);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/SearchInput/SearchInput.js + 5 modules\nvar SearchInput = __webpack_require__(92036);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Sidebar/Sidebar.js\nvar Sidebar = __webpack_require__(92884);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Sidebar/SidebarPanel.js\nvar SidebarPanel = __webpack_require__(90660);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Tabs/Tabs.js + 2 modules\nvar Tabs = __webpack_require__(31092);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Tabs/Tab.js + 2 modules\nvar Tab = __webpack_require__(70378);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Sidebar/SidebarContent.js\nvar SidebarContent = __webpack_require__(7544);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/Menu.js\nvar Menu = __webpack_require__(47680);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/MenuContent.js\nvar MenuContent = __webpack_require__(56726);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/MenuList.js\nvar MenuList = __webpack_require__(46820);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/MenuItem.js + 3 modules\nvar MenuItem = __webpack_require__(28196);\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/QuickSearchIcon.tsx\nvar QuickSearchIcon_assign = (undefined && undefined.__assign) || function () {\n QuickSearchIcon_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return QuickSearchIcon_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nvar QuickSearchIcon = function (_a) {\n var style = _a.style;\n return (react.createElement("svg", { viewBox: "0 0 80 80", "aria-hidden": "true", fill: "currentColor", width: "2em", height: "2em", style: QuickSearchIcon_assign({ verticalAlign: \'middle\' }, style), className: \'quick-search-icon\' },\n react.createElement("style", null, \'.prefix__st0{display:none}.prefix__st2,.prefix__st3{fill-rule:evenodd;clip-rule:evenodd}\'),\n react.createElement("g", { id: "prefix__Layer_1", className: "prefix__st0" },\n react.createElement("path", { className: "prefix__st2", d: "M31.79 18.48v.04c.01-.01.01-.02 0-.04zM11.5 59.22c-4.19.38-6.94 5.22-6.94 5.22V9.73C0 9.87 0 14.01 0 14.01v50.74c.19 5.42 6.84 4.13 6.84 4.13 6.84-9.65 25.09.14 25.09.14v-4.45c-7.84-5.09-15.11-5.95-20.43-5.35zm11.36-3.09c3.34.58 6.91 3.28 8.92 3.76v-4.55H31.5h.29V18.49l.01-3.62s-.01 0-.01-.01v-.5C24.35 9.56 14.7 6.3 9.12 5.26v50.59c4.09-1.13 7.5-.83 13.74.28zm13.77-37.65c-.01.02-.01.02 0 0zm27.23-8.75v54.71s-2.75-4.83-6.94-5.22c-5.32-.6-12.59.26-20.43 5.36v4.45s18.24-9.79 25.09-.14c0 0 6.66 1.28 6.84-4.13V14.01s0-4.14-4.56-4.28zM36.63 30.47v24.87l.66-.11c-.13.07-.27.11-.41.11h-.24v4.55c2.01-.48 5.59-3.18 8.92-3.76 6.24-1.11 9.65-1.41 13.74-.29V5.26c-5.57 1.04-15.22 4.3-22.66 9.08v.51c0 .01-.01.01-.01.01l.01 3.62-.01 11.99z" }),\n react.createElement("circle", { className: "prefix__st3", cx: 59.96, cy: 56.6, r: 13.54 }),\n react.createElement("path", { d: "M62.66 67.25h-4.41c-.52 0-.95-.39-.95-.86v-6.63h-7.25c-.52 0-.95-.39-.95-.86v-4.04c0-.48.43-.86.95-.86h7.25v-6.63c0-.48.43-.86.95-.86h4.41c.52 0 .95.39.95.86V54h7.25c.52 0 .95.39.95.86v4.04c0 .48-.43.86-.95.86H63.6v6.63c0 .47-.42.86-.94.86zm-2.21 7.49c10.8 0 19.55-8 19.55-17.87S71.25 39 60.45 39 40.9 47 40.9 56.87s8.75 17.87 19.55 17.87z", fillRule: "evenodd", clipRule: "evenodd", fill: \'#fff\' })),\n react.createElement("g", { id: "prefix__Layer_2" },\n react.createElement("path", { className: "prefix__st3", d: "M78.95 58.77h-8.08v-7.39c0-.53-.47-.96-1.05-.96H64.9c-.58 0-1.05.43-1.05.96v7.39h-8.08c-.58 0-1.05.43-1.05.96v4.5c0 .53.47.96 1.05.96h8.08v7.39c0 .53.47.96 1.05.96h4.92c.58 0 1.05-.43 1.05-.96v-7.39h8.08c.58 0 1.05-.43 1.05-.96v-4.5c0-.53-.47-.96-1.05-.96z" }),\n react.createElement("path", { className: "prefix__st2", d: "M76.23 43.81V14.22s0-4.61-5.08-4.76v32.93c1.78.29 3.48.76 5.08 1.42zM40.81 32.57v27.71l.73-.13a.94.94 0 01-.46.13h-.27v5.07c1.2-.29 2.92-1.29 4.81-2.25-.02-.37-.06-.74-.06-1.11 0-10.6 9.07-19.24 20.5-19.86V4.47c-6.21 1.16-16.96 4.8-25.25 10.12v.57c0 .02-.02.02-.02.02l.02 4.03v13.36zM12.82 64.6c-4.67.43-7.73 5.81-7.73 5.81V9.46C0 9.62 0 14.22 0 14.22v56.54c.21 6.03 7.62 4.61 7.62 4.61 7.62-10.75 27.95.16 27.95.16v-4.95c-8.73-5.69-16.83-6.65-22.75-5.98z" }),\n react.createElement("path", { className: "prefix__st2", d: "M25.47 61.15c3.72.65 7.7 3.65 9.94 4.19V19.21l.02-4.03s-.02 0-.02-.02v-.56C27.13 9.27 16.37 5.63 10.16 4.47v56.36c4.56-1.25 8.36-.91 15.31.32zM46.41 67.44c-1.88.83-3.8 1.86-5.76 3.13v4.95s3.46-1.85 8.05-3.28c-.98-1.48-1.75-3.09-2.29-4.8z" }))));\n};\n/* harmony default export */ const Shared_QuickSearchIcon = (QuickSearchIcon);\n\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/quicksearches/custom-target.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar _CustomTargetSearchItem = {\n id: \'custom-target\',\n name: \'Custom Target\',\n icon: react.createElement("img", { src: openjdk_namespaceObject }),\n labels: [\n {\n content: \'Discovery\',\n color: \'green\',\n },\n ],\n descriptionShort: \'Define a custom target definition.\',\n descriptionFull: \'Provide a JMX Service URL along with necessary credentials to point to a target JVM.\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n createAction: function (_a) {\n var history = _a.history;\n history.push(\'/topology/create-custom-target\');\n },\n};\n/* harmony default export */ const custom_target = (_CustomTargetSearchItem);\n\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/quicksearches/dev-sample.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar _DevSampleSearchItem = {\n id: \'dev-sample\',\n name: \'Sample\',\n icon: react.createElement(container_node_icon/* ContainerNodeIcon */.SO, null),\n labels: [\n {\n content: \'Sample\',\n color: \'blue\',\n },\n ],\n descriptionShort: \'This is a sample template to create a search item.\',\n descriptionFull: \'Put the full description of the item here.\',\n featureLevel: Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT,\n createAction: function () { return undefined; },\n};\n/* harmony default export */ const dev_sample = (_DevSampleSearchItem);\n\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/quicksearches/all-quick-searches.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar quickSearches = [custom_target, dev_sample];\nvar quickSearchIds = [custom_target.id, dev_sample.id];\n/* harmony default export */ const all_quick_searches = (quickSearches);\n\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/QuickSearchPanel.tsx\nvar QuickSearchPanel_assign = (undefined && undefined.__assign) || function () {\n QuickSearchPanel_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return QuickSearchPanel_assign.apply(this, arguments);\n};\nvar QuickSearchPanel_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar QuickSearchTabContent = function (_a) {\n var item = _a.item, props = QuickSearchPanel_rest(_a, ["item"]);\n var history = (0,react_router/* useHistory */.k6)();\n var services = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var handleActionClick = react.useCallback(function () {\n (item === null || item === void 0 ? void 0 : item.createAction) && item.createAction({ history: history, services: services, notifications: notifications });\n }, [item, history, services, notifications]);\n return item ? (react.createElement(Stack/* Stack */.K, QuickSearchPanel_assign({}, props, { hasGutter: true, className: (0,esm.css)(\'topology__quicksearch__tab-content\') }),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement("h2", { className: (0,esm.css)(\'topology__quicksearch__tab-content-title\') }, item.name)),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement("span", { className: (0,esm.css)(\'topology__quicksearch__tab-content-description-short\') }, item.descriptionShort)),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleActionClick }, item.actionText ? item.actionText : \'Create\')),\n react.createElement(StackItem/* StackItem */.v, null, item.descriptionFull))) : null;\n};\nvar QuickSearchTabTitle = function (_a) {\n var item = _a.item, props = QuickSearchPanel_rest(_a, ["item"]);\n return (react.createElement(Flex/* Flex */.k, QuickSearchPanel_assign({}, props),\n react.createElement(FlexItem/* FlexItem */.B, { alignSelf: { default: \'alignSelfFlexStart\' } },\n react.createElement("div", { className: (0,esm.css)(\'topology__quicksearch__tab-icon\') },\n react.createElement(Bullseye/* Bullseye */.b, null, item.icon))),\n react.createElement(Flex/* Flex */.k, { direction: { default: \'column\' }, flex: { default: \'flex_1\' }, alignSelf: { default: \'alignSelfFlexStart\' } },\n react.createElement(FlexItem/* FlexItem */.B, { spacer: { default: \'spacerNone\' } },\n react.createElement(TabTitleText/* TabTitleText */.T, { className: (0,esm.css)(\'topology__quicksearch__tab-text\') }, item.name)),\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(LabelGroup/* LabelGroup */.e, null, item.labels\n ? item.labels.map(function (_a) {\n var content = _a.content, color = _a.color, icon = _a.icon;\n return (react.createElement(Label/* Label */._, { color: color, icon: icon, key: content }, content));\n })\n : null)))));\n};\nvar QuickSearchPanel = function (_a) {\n var props = QuickSearchPanel_rest(_a, []);\n var _b = react.useState(quickSearchIds[0] || \'\'), activeTab = _b[0], setActiveTab = _b[1];\n var _c = react.useState(false), isExpanded = _c[0], setIsExpanded = _c[1];\n var _d = react.useState(\'\'), searchText = _d[0], setSearchText = _d[1];\n var activeLevel = useFeatureLevel();\n var handleTabChange = react.useCallback(function (_, eventKey) { return setActiveTab("".concat(eventKey)); }, [setActiveTab]);\n var handleSearch = react.useCallback(function (input) {\n setSearchText(input);\n }, [setSearchText]);\n var filteredQuicksearches = react.useMemo(function () {\n var items = all_quick_searches.filter(function (qs) { return activeLevel <= qs.featureLevel; });\n if (searchText && searchText !== \'\') {\n var regex_1 = new RegExp(searchText, \'i\');\n items = items.filter(function (_a) {\n var name = _a.name, _b = _a.descriptionFull, descriptionFull = _b === void 0 ? \'\' : _b, _c = _a.descriptionShort, descriptionShort = _c === void 0 ? \'\' : _c, _d = _a.labels, labels = _d === void 0 ? [] : _d;\n var matchResult = regex_1.test(name) || regex_1.test(descriptionFull) || regex_1.test(descriptionShort);\n matchResult = matchResult || labels.reduce(function (acc, curr) { return acc || regex_1.test(curr.content); }, false);\n return matchResult;\n });\n }\n return items;\n }, [searchText, activeLevel]);\n var matchedItem = react.useMemo(function () {\n return filteredQuicksearches.find(function (qs) { return qs.id === activeTab; });\n }, [filteredQuicksearches, activeTab]);\n react.useEffect(function () {\n if (!matchedItem && filteredQuicksearches.length) {\n setActiveTab(filteredQuicksearches[0].id);\n }\n }, [filteredQuicksearches, matchedItem]);\n return (react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(SearchInput/* SearchInput */.M, { placeholder: "Add to view...", value: searchText, onChange: handleSearch, onClear: function () { return handleSearch(\'\'); } })),\n filteredQuicksearches.length ? (react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Sidebar/* Sidebar */.Y, QuickSearchPanel_assign({}, props, { tabIndex: 0, style: { height: \'max-content\' }, hasGutter: true }),\n react.createElement(SidebarPanel/* SidebarPanel */.p, { variant: "sticky" },\n react.createElement(Tabs/* Tabs */.m, { className: \'topology__quicksearch__tabs\', isVertical: true, unmountOnExit: true, expandable: { default: \'nonExpandable\', md: \'nonExpandable\', lg: \'nonExpandable\', sm: \'expandable\' }, isExpanded: isExpanded, toggleText: isExpanded ? \'Close Tabs\' : \'Open Tabs\', onToggle: setIsExpanded, activeKey: activeTab, onSelect: handleTabChange, role: \'region\' }, filteredQuicksearches.map(function (qs, index) { return (react.createElement(Tab/* Tab */.O, { className: (0,esm.css)(\'topology__quicksearch__tab\'), eventKey: qs.id, key: index, isDisabled: qs.disabled, title: react.createElement(QuickSearchTabTitle, { item: qs }) })); }))),\n react.createElement(SidebarContent/* SidebarContent */.T, null,\n react.createElement(QuickSearchTabContent, { item: matchedItem }))))) : (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Results"))))));\n};\nvar QuickSearchModal = function (_a) {\n var isOpen = _a.isOpen, onClose = _a.onClose, _b = _a.variant, variant = _b === void 0 ? \'medium\' : _b, _props = QuickSearchPanel_rest(_a, ["isOpen", "onClose", "variant"]);\n var activeLevel = useFeatureLevel();\n var guide = react.useMemo(function () {\n if (activeLevel === Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION) {\n return null;\n }\n return (react.createElement("span", null,\n "For quickstarts on how to create these entities, visit ",\n react.createElement(react_router_dom.Link, { to: \'/quickstarts\' }, "Quick Starts"),\n "."));\n }, [activeLevel]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: isOpen, onClose: onClose, variant: variant, titleIconVariant: Shared_QuickSearchIcon, title: \'Topology Entity Catalog\', className: \'topology__quick-search-modal\', id: \'topology-quick-search-modal\', description: react.createElement("div", null,\n "Select an entity to add to view. ",\n guide) },\n react.createElement(QuickSearchPanel, null)));\n};\n// A fly-out menu when right-click on visualization area\nvar QuickSearchContextMenu = function (_a) {\n var id = _a.id, props = QuickSearchPanel_rest(_a, ["id"]);\n var _b = (0,dist_esm/* useHover */.XIr)(0, 100), hover = _b[0], hoverRef = _b[1]; // delay 100s to allow mouse moving to flyout menu\n return (react.createElement("div", { id: id, className: \'topology__quick-search__context-menu\' },\n react.createElement(Menu/* Menu */.v, QuickSearchPanel_assign({}, props, { containsFlyout: true }),\n react.createElement(MenuContent/* MenuContent */.D, null,\n react.createElement(MenuList/* MenuList */.q, null,\n react.createElement(MenuItem/* MenuItem */.s, { isFocused: true, ref: hoverRef, itemId: \'Add to View\', flyoutMenu: react.createElement(QuickSearchFlyoutMenu, { isShow: hover }) }, "Add to View"))))));\n};\nvar QuickSearchFlyoutMenu = function (_a) {\n var isShow = _a.isShow, props = QuickSearchPanel_rest(_a, ["isShow"]);\n var history = (0,react_router/* useHistory */.k6)();\n var services = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var activeLevel = useFeatureLevel();\n var _b = (0,dist_esm/* useHover */.XIr)(0, 0), hover = _b[0], hoverRef = _b[1];\n var filteredQuicksearches = react.useMemo(function () { return all_quick_searches.filter(function (qs) { return activeLevel <= qs.featureLevel; }); }, [activeLevel]);\n var items = react.useMemo(function () {\n return filteredQuicksearches.map(function (_a) {\n var id = _a.id, icon = _a.icon, name = _a.name, _b = _a.createAction, createAction = _b === void 0 ? function () { return undefined; } : _b;\n return (react.createElement(MenuItem/* MenuItem */.s, { key: id, itemId: id, icon: react.createElement("div", { style: { height: \'1em\', width: \'1em\' } },\n react.createElement(Bullseye/* Bullseye */.b, null, icon)), onClick: function () { return createAction({ history: history, services: services, notifications: notifications }); } }, name));\n });\n }, [filteredQuicksearches, history, services, notifications]);\n return isShow || hover ? (react.createElement(Menu/* Menu */.v, QuickSearchPanel_assign({}, props, { id: "quick-searches-menu", key: "quick-searches-menu", isScrollable: true, ref: hoverRef }),\n react.createElement(MenuContent/* MenuContent */.D, null,\n react.createElement(MenuList/* MenuList */.q, null, items)))) : null;\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/topology-icon.js\nvar topology_icon = __webpack_require__(70628);\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/TopologyEmptyState.tsx\nvar TopologyEmptyState_assign = (undefined && undefined.__assign) || function () {\n TopologyEmptyState_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyEmptyState_assign.apply(this, arguments);\n};\nvar TopologyEmptyState_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar TopologyEmptyState = function (_a) {\n var props = TopologyEmptyState_rest(_a, []);\n var discoveryTree = react.useContext(DiscoveryTreeContext);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var searchExprService = react.useContext(SearchExprServiceContext);\n var isTruelyEmpty = react.useMemo(function () {\n return !getAllLeaves(discoveryTree).length;\n }, [discoveryTree]);\n var emptyStateContent = react.useMemo(function () {\n if (isTruelyEmpty) {\n return (react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null,\n "Start launching a Java application or define a",\n \' \',\n react.createElement(react_router_dom.Link, { to: \'/topology/create-custom-target\' }, "Custom Target"),\n "."));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "Adjust your filters/searches and try again."),\n react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null,\n react.createElement(Button_Button/* Button */.zx, { variant: \'link\', onClick: function () { return dispatch(ReduxStore_topologyDeleteAllFiltersIntent()); } }, "Clear Filters"),\n react.createElement(Button_Button/* Button */.zx, { variant: \'link\', onClick: function () { return searchExprService.setSearchExpression(\'\'); } }, "Clear Searches"))));\n }, [isTruelyEmpty, searchExprService, dispatch]);\n return (react.createElement(Bullseye/* Bullseye */.b, TopologyEmptyState_assign({}, props),\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.full */.I.full },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: topology_icon/* TopologyIcon */["if"] }),\n react.createElement(Title/* Title */.D, { headingLevel: "h3", size: "lg" }, "No Targets Found"),\n emptyStateContent)));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/TopologyExceedLimitState.tsx\nvar TopologyExceedLimitState_assign = (undefined && undefined.__assign) || function () {\n TopologyExceedLimitState_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyExceedLimitState_assign.apply(this, arguments);\n};\nvar TopologyExceedLimitState_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar TopologyExceedLimitState = function (_a) {\n var onShowTopologyAnyway = _a.onShowTopologyAnyway, props = TopologyExceedLimitState_rest(_a, ["onShowTopologyAnyway"]);\n return (react.createElement(Bullseye/* Bullseye */.b, TopologyExceedLimitState_assign({}, props),\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: topology_icon/* TopologyIcon */["if"] }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4" }, "Loading of application topology is taking longer than expected"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "We are working on loading the topology of your applications. Since the data to be displayed is large, the rendering is taking more time. To see a smaller subset of your applications, use the filters to select the parameters or click Continue to keep waiting."),\n react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: onShowTopologyAnyway }, "Continue")))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/SideBar/TopologySideBar.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar TopologySideBar_assign = (undefined && undefined.__assign) || function () {\n TopologySideBar_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologySideBar_assign.apply(this, arguments);\n};\nvar TopologySideBar_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n// Parent will wrap this element in \nvar TopologySideBar = function (_a) {\n var children = _a.children, onClose = _a.onClose, className = _a.className, props = TopologySideBar_rest(_a, ["children", "onClose", "className"]);\n return (react.createElement(react.Fragment, null,\n react.createElement(DrawerHead/* DrawerHead */.h, { hasNoPadding: true },\n react.createElement(DrawerActions/* DrawerActions */.x, null,\n react.createElement(DrawerCloseButton/* DrawerCloseButton */.c, { className: "entity-overview__entity-close-button", onClick: onClose }))),\n react.createElement(DrawerPanelBody/* DrawerPanelBody */.F, TopologySideBar_assign({}, props, { hasNoPadding: true, className: className }), children)));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/list-icon.js\nvar list_icon = __webpack_require__(4585);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/mouse-icon.js\nvar mouse_icon = __webpack_require__(52378);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/question-circle-icon.js\nvar question_circle_icon = __webpack_require__(73479);\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/Shortcuts.tsx\nvar Shortcuts_assign = (undefined && undefined.__assign) || function () {\n Shortcuts_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Shortcuts_assign.apply(this, arguments);\n};\nvar Shortcuts_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar Shortcuts = function (_a) {\n var shortcuts = _a.shortcuts, props = Shortcuts_rest(_a, ["shortcuts"]);\n return (react.createElement(TableComposable/* TableComposable */.X, Shortcuts_assign({ borders: false, "aria-label": \'Shortcuts table\', variant: \'compact\' }, props),\n react.createElement(Tbody/* Tbody */.p, null, shortcuts.map(function (sc) { return (react.createElement(Tr.Tr, { key: sc.id },\n react.createElement(Td.Td, { key: "".concat(sc.id, "-keyboard-shortcuts") }, sc.shortcut),\n react.createElement(Td.Td, { key: "".concat(sc.id, "-keyboard-shortcuts-description") }, sc.description))); }))));\n};\nvar ShortcutCommand = function (_a) {\n var commands = _a.commands, props = Shortcuts_rest(_a, ["commands"]);\n var content = react.useMemo(function () {\n var _content = commands.map(function (command) { return (react.createElement("span", { className: \'topology__shortcut-command\', key: command.id },\n command.icon ? (react.createElement("span", { key: "".concat(command.id, "-icon"), className: "topology__shortcut-command-icon" }, command.icon)) : null,\n react.createElement("kbd", { key: "".concat(command.id, "-command") }, command.command))); });\n // Put + in between\n return lodash_default().flatMap(_content, function (val, index) {\n if (index < _content.length - 1) {\n return [\n val,\n react.createElement("span", { className: \'topology__shortcut-command-plus\', key: "".concat(index, "-plus") }, "+"),\n ];\n }\n return [val];\n });\n }, [commands]);\n return react.createElement("div", Shortcuts_assign({}, props), content);\n};\n/* harmony default export */ const Shared_Shortcuts = (Shortcuts);\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/Configurations/TopologyConfigSlice.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar TopologyConfigSlice_version = \'1\';\nvar TopologyConfigAction;\n(function (TopologyConfigAction) {\n TopologyConfigAction["VIEW_MODE_SET"] = "topology-config/set-view-mode";\n TopologyConfigAction["DISPLAY_OPTION_SET"] = "topology-config/set-dislay-options";\n})(TopologyConfigAction || (TopologyConfigAction = {}));\nvar TopologyConfigSlice_enumValues = new Set(Object.values(TopologyConfigAction));\nvar topologyConfigSetViewModeIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyConfigAction.VIEW_MODE_SET, function (viewMode) { return ({\n payload: {\n viewMode: viewMode,\n },\n}); });\nvar topologyDisplayOptionsSetIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyConfigAction.DISPLAY_OPTION_SET, function (category, key, value) { return ({\n payload: {\n category: category,\n key: key,\n value: value,\n },\n}); });\nvar defaultDisplayOptions = {\n show: {\n connectionUrl: false,\n badge: true,\n status: true,\n icon: true,\n },\n groupings: {\n realmOnly: false,\n collapseSingles: false,\n },\n};\nvar showOptions = Object.keys(defaultDisplayOptions.show).map(function (k) {\n return [(0,utils/* getDisplayFieldName */.O5)(k), k];\n});\nvar groupingOptions = Object.keys(defaultDisplayOptions.groupings).map(function (k) {\n return [(0,utils/* getDisplayFieldName */.O5)(k), k];\n});\nvar TopologyConfigSlice_INITIAL_STATE = getPersistedState(\'TOPOLOGY_CONFIG\', TopologyConfigSlice_version, {\n viewMode: \'graph\',\n displayOptions: defaultDisplayOptions,\n});\nvar topologyConfigReducer = (0,redux_toolkit_esm/* createReducer */.Lq)(TopologyConfigSlice_INITIAL_STATE, function (builder) {\n builder.addCase(topologyConfigSetViewModeIntent, function (state, _a) {\n var payload = _a.payload;\n state.viewMode = payload.viewMode;\n });\n builder.addCase(topologyDisplayOptionsSetIntent, function (state, _a) {\n var _b;\n var payload = _a.payload;\n var category = payload.category, key = payload.key, value = payload.value;\n if (state.displayOptions[category]) {\n state.displayOptions[category][key] = value;\n }\n else {\n state.displayOptions[category] = (_b = {},\n _b[key] = value,\n _b);\n }\n // Special case for groupings\n // If realmOnly is true, singleGroups should also be true\n if (category === \'groupings\' && key === \'realmOnly\') {\n if (value) {\n state.displayOptions.groupings.collapseSingles = true;\n }\n }\n });\n});\n/* harmony default export */ const TopologyConfigSlice = (topologyConfigReducer);\n\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/DisplayOptions.tsx\nvar DisplayOptions_assign = (undefined && undefined.__assign) || function () {\n DisplayOptions_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return DisplayOptions_assign.apply(this, arguments);\n};\nvar DisplayOptions_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\nvar DisplayOptions = function (_a) {\n var _b = _a.isDisabled, isDisabled = _b === void 0 ? false : _b, _c = _a.isGraph, isGraphView = _c === void 0 ? true : _c, props = DisplayOptions_rest(_a, ["isDisabled", "isGraph"]);\n var _d = react.useState(false), open = _d[0], setOpen = _d[1];\n var _e = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyConfigs.displayOptions; }), show = _e.show, groupings = _e.groupings;\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var handleToggle = react.useCallback(function () { return setOpen(function (old) { return !old; }); }, [setOpen]);\n var getChangeHandler = react.useCallback(function (group, key) {\n return function (checked, _) {\n dispatch(ReduxStore_topologyDisplayOptionsSetIntent(group, key, checked));\n };\n }, [dispatch]);\n var checkBoxContents = react.useMemo(function () {\n return showOptions.map(function (_a) {\n var option = _a[0], key = _a[1];\n return [\n key,\n react.createElement(Checkbox/* Checkbox */.X, { key: key, id: "show-".concat(option.toLowerCase(), "-checkbox"), className: \'topology__display-option-menu-item\', label: option, isChecked: show[key], onChange: getChangeHandler(\'show\', key), isDisabled: !isGraphView }),\n ];\n });\n }, [show, isGraphView, getChangeHandler]);\n var switchContents = react.useMemo(function () {\n return groupingOptions.map(function (_a) {\n var option = _a[0], key = _a[1];\n return [\n key,\n react.createElement(Switch/* Switch */.r, { key: key, id: "".concat(option.toLowerCase(), "-mode"), className: \'topology__display-option-menu-item\', label: option, isDisabled: key === \'collapseSingles\' && groupings.realmOnly, isChecked: groupings[key], onChange: getChangeHandler(\'groupings\', key) }),\n ];\n });\n }, [groupings, getChangeHandler]);\n var menuContent = react.useMemo(function () {\n return (react.createElement(Stack/* Stack */.K, { className: "topology__display-option-menu" },\n react.createElement(StackItem/* StackItem */.v, { key: \'mode-group-title\' },\n react.createElement("span", { className: "pf-c-select__menu-group-title" }, "Groupings")),\n switchContents.map(function (_a) {\n var key = _a[0], children = _a[1];\n return (react.createElement(StackItem/* StackItem */.v, { key: key }, children));\n }),\n react.createElement(StackItem/* StackItem */.v, { key: \'divider0\' },\n react.createElement(Divider/* Divider */.i, null)),\n react.createElement(StackItem/* StackItem */.v, { key: \'show-group-title\' },\n react.createElement("span", { className: "pf-c-select__menu-group-title" }, "Show")),\n checkBoxContents.map(function (_a) {\n var key = _a[0], children = _a[1];\n return (react.createElement(StackItem/* StackItem */.v, { key: key }, children));\n })));\n }, [checkBoxContents, switchContents]);\n return (react.createElement(Select/* Select */.P, DisplayOptions_assign({}, props, { menuAppendTo: \'parent\', onToggle: handleToggle, isDisabled: isDisabled, isOpen: open, "aria-label": \'Display Options\', placeholderText: \'Display options\', customContent: menuContent })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/FindByMatchExpression.tsx\nvar FindByMatchExpression_assign = (undefined && undefined.__assign) || function () {\n FindByMatchExpression_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return FindByMatchExpression_assign.apply(this, arguments);\n};\nvar FindByMatchExpression_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar FindByMatchExpression = function (_a) {\n var isDisabled = _a.isDisabled, props = FindByMatchExpression_rest(_a, ["isDisabled"]);\n var _b = useSearchExpression(), expression = _b[0], setExpression = _b[1];\n return (react.createElement(SearchInput/* SearchInput */.M, FindByMatchExpression_assign({}, props, { placeholder: \'Find by match expression...\', value: expression, onChange: setExpression, isDisabled: isDisabled })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Icon/Icon.js\nvar Icon = __webpack_require__(67460);\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/HelpButton.tsx\nvar HelpButton_assign = (undefined && undefined.__assign) || function () {\n HelpButton_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return HelpButton_assign.apply(this, arguments);\n};\nvar HelpButton_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar HelpButton = function (_a) {\n var visualization = _a.visualization, props = HelpButton_rest(_a, ["visualization"]);\n var onClick = react.useCallback(function () {\n (0,dist_esm/* action */.aDg)(function () {\n visualization && visualization.getGraph().fit(120);\n })();\n }, [visualization]);\n var content = react.useMemo(function () { return (react.createElement(react.Fragment, null,\n "Search results may appear outside of the visible area.",\n \' \',\n react.createElement(Button_Button/* Button */.zx, { onClick: onClick, variant: "link", isInline: true }, "Click here"),\n \' \',\n "to fit to the screen.")); }, [onClick]);\n return (react.createElement(Popover/* Popover */.J, HelpButton_assign({ bodyContent: content, position: \'left\' }, props),\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", className: "topology__help-icon-button" },\n react.createElement(Icon/* Icon */.J, { status: "info" },\n react.createElement(info_circle_icon/* InfoCircleIcon */.uM, { className: "topology__help-icon" })))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/QuickSearchButton.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar QuickSearchButton_assign = (undefined && undefined.__assign) || function () {\n QuickSearchButton_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return QuickSearchButton_assign.apply(this, arguments);\n};\nvar QuickSearchButton_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\nvar QuickSearchButton = function (_a) {\n var onClick = _a.onClick, tooltipContent = _a.tooltipContent, props = QuickSearchButton_rest(_a, ["onClick", "tooltipContent"]);\n var catalogRef = react.useRef(null);\n var handleClick = react.useCallback(function () {\n var _a;\n onClick();\n (_a = catalogRef.current) === null || _a === void 0 ? void 0 : _a.blur(); // Remove focus on the catalog button\n }, [onClick]);\n return (react.createElement("div", { id: "topology-quicksearch-btn-wrapper" },\n react.createElement(Tooltip/* Tooltip */.u, QuickSearchButton_assign({}, props, { content: tooltipContent, appendTo: function () { return document.getElementById(\'topology-quicksearch-btn-wrapper\') || document.body; } }),\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", onClick: handleClick, style: { padding: 0 }, "data-quickstart-id": \'topology-catalog-btn\', ref: catalogRef },\n react.createElement(Shared_QuickSearchIcon, null)))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ChipGroup/ChipGroup.js\nvar ChipGroup = __webpack_require__(26391);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Chip/Chip.js\nvar Chip = __webpack_require__(35978);\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/TopologyFilterChips.tsx\nvar TopologyFilterChips_assign = (undefined && undefined.__assign) || function () {\n TopologyFilterChips_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyFilterChips_assign.apply(this, arguments);\n};\nvar TopologyFilterChips_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\nvar TopologyFilterChips = function (_a) {\n var className = _a.className, props = TopologyFilterChips_rest(_a, ["className"]);\n var _b = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyFilters; }), groupFilters = _b.groupFilters, targetFilters = _b.targetFilters;\n var generateChip = react.useCallback(function (_a, isGroupCategory) {\n var filters = _a.filters;\n if (isGroupCategory) {\n return Object.entries(filters).map(function (_a) {\n var nodeType = _a[0], filter = _a[1];\n return Object.entries(filter).map(function (_a) {\n var category = _a[0], values = _a[1];\n return (react.createElement(TopologyFilterChip, { key: "".concat(nodeType, "-").concat(category), isGroupCategory: isGroupCategory, category: category, chipValues: values, nodeType: nodeType, className: "topology__filter-chip-group" }));\n });\n });\n }\n else {\n return Object.entries(filters).map(function (_a) {\n var category = _a[0], values = _a[1];\n return (react.createElement(TopologyFilterChip, { key: "Target-".concat(category), isGroupCategory: isGroupCategory, category: category, chipValues: values, nodeType: \'Target\', className: "topology__filter-chip-group" }));\n });\n }\n }, []);\n var groupChips = react.useMemo(function () { return generateChip(groupFilters, true); }, [groupFilters, generateChip]);\n var targetChips = react.useMemo(function () { return generateChip(targetFilters, false); }, [targetFilters, generateChip]);\n return (react.createElement("div", TopologyFilterChips_assign({}, props, { className: className }),\n groupChips,\n targetChips));\n};\nvar TopologyFilterChip = function (_a) {\n var isGroupCategory = _a.isGroupCategory, className = _a.className, category = _a.category, nodeType = _a.nodeType, chipValues = _a.chipValues, props = TopologyFilterChips_rest(_a, ["isGroupCategory", "className", "category", "nodeType", "chipValues"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var handleDeleteChip = react.useCallback(function (value) {\n dispatch(ReduxStore_topologyDeleteFilterIntent(isGroupCategory, nodeType, category, value));\n }, [dispatch, isGroupCategory, nodeType, category]);\n var handleDeleteChipGroup = react.useCallback(function () {\n dispatch(ReduxStore_topologyDeleteCategoryFiltersIntent(isGroupCategory, nodeType, category));\n }, [dispatch, isGroupCategory, nodeType, category]);\n return (react.createElement(ChipGroup/* ChipGroup */.Z, TopologyFilterChips_assign({}, props, { categoryName: "".concat(nodeType, "/").concat((0,utils/* getDisplayFieldName */.O5)(category)), isClosable: true, onClick: handleDeleteChipGroup, className: className }), chipValues.map(function (value) { return (react.createElement(Chip/* Chip */.A, { key: value, onClick: function () { return handleDeleteChip(value); } }, value)); })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/Filters/TopologyFilterSlice.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar TopologyFilterSlice_assign = (undefined && undefined.__assign) || function () {\n TopologyFilterSlice_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyFilterSlice_assign.apply(this, arguments);\n};\nvar TopologyFilterSlice_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar TopologyFilterSlice_version = \'1\';\nvar TopologyFilterAction;\n(function (TopologyFilterAction) {\n TopologyFilterAction["CATEGORY_TYPE_UPDATE"] = "topology-category-type/update";\n TopologyFilterAction["CATEGORY_UPDATE"] = "topology-category/update";\n TopologyFilterAction["FILTER_ADD"] = "topology-filter/add";\n TopologyFilterAction["FILTER_DELETE"] = "topology-filter/delete";\n TopologyFilterAction["FILTER_DELETE_ALL"] = "topology-filter/delete-all";\n TopologyFilterAction["CATEGORY_FILTERS_DELETE"] = "topology-filter/delete-category";\n})(TopologyFilterAction || (TopologyFilterAction = {}));\nvar TopologyFilterSlice_enumValues = new Set(Object.values(TopologyFilterAction));\nvar topologyUpdateCategoryTypeIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyFilterAction.CATEGORY_TYPE_UPDATE, function (isGroup) { return ({\n payload: {\n isGroup: isGroup,\n },\n}); });\nvar topologyUpdateCategoryIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyFilterAction.CATEGORY_UPDATE, function (isGroup, category) { return ({\n payload: {\n isGroup: isGroup,\n category: category,\n },\n}); });\nvar topologyAddFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyFilterAction.FILTER_ADD, function (isGroup, nodeType, category, value) { return ({\n payload: {\n isGroup: isGroup,\n nodeType: nodeType,\n category: category,\n value: value,\n },\n}); });\nvar topologyDeleteFilterIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyFilterAction.FILTER_DELETE, function (isGroup, nodeType, category, value) { return ({\n payload: {\n isGroup: isGroup,\n nodeType: nodeType,\n category: category,\n value: value,\n },\n}); });\nvar topologyDeleteAllFiltersIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyFilterAction.FILTER_DELETE_ALL, function () { return ({\n payload: {},\n}); });\nvar topologyDeleteCategoryFiltersIntent = (0,redux_toolkit_esm/* createAction */.PH)(TopologyFilterAction.CATEGORY_FILTERS_DELETE, function (isGroup, nodeType, category) { return ({\n payload: {\n isGroup: isGroup,\n nodeType: nodeType,\n category: category,\n },\n}); });\nvar categoryToNodeField = function (filterCategory) {\n switch (filterCategory) {\n case \'Name\':\n return \'name\';\n case \'Label\':\n return \'labels\';\n case \'Annotation\':\n return \'annotations\';\n case \'JvmId\':\n return \'jvmId\';\n case \'Alias\':\n return \'alias\';\n case \'ConnectionUrl\':\n return \'connectUrl\';\n default:\n throw new Error("Unsupported ".concat(filterCategory, " for filters."));\n }\n};\nvar defaultEmptyGroupFilters = {\n Name: [],\n Label: [],\n};\nvar defaultEmptyTargetFilters = {\n // Below will be taken from node.target\n Alias: [],\n ConnectionUrl: [],\n JvmId: [],\n Label: [],\n Annotation: [],\n};\nvar defaultTopologyFilters = {\n isGroup: false,\n groupFilters: {\n category: \'Name\',\n filters: {},\n },\n targetFilters: {\n category: \'Alias\',\n filters: defaultEmptyTargetFilters,\n },\n};\n// Representing keys. Component can pipe it via getDisplayFieldName\nvar allowedTargetFilters = Object.keys(defaultEmptyTargetFilters);\nvar allowedGroupFilters = Object.keys(defaultEmptyGroupFilters);\nvar TopologyFilterSlice_INITIAL_STATE = getPersistedState(\'TOPOLOGY_FILTERS\', TopologyFilterSlice_version, defaultTopologyFilters);\nvar topologyFilterReducer = (0,redux_toolkit_esm/* createReducer */.Lq)(TopologyFilterSlice_INITIAL_STATE, function (builder) {\n builder.addCase(topologyUpdateCategoryTypeIntent, function (state, _a) {\n var payload = _a.payload;\n state.isGroup = payload.isGroup;\n });\n builder.addCase(topologyUpdateCategoryIntent, function (state, _a) {\n var payload = _a.payload;\n var isGroup = payload.isGroup, category = payload.category;\n if (isGroup) {\n state.groupFilters.category = category;\n }\n else {\n state.targetFilters.category = category;\n }\n });\n builder.addCase(topologyAddFilterIntent, function (state, _a) {\n var _b;\n var payload = _a.payload;\n var isGroup = payload.isGroup, category = payload.category, value = payload.value, nodeType = payload.nodeType;\n if (isGroup) {\n var old = state.groupFilters.filters[nodeType] || defaultEmptyGroupFilters;\n state.groupFilters.filters[nodeType] = TopologyFilterSlice_assign(TopologyFilterSlice_assign({}, old), (_b = {}, _b[category] = TopologyFilterSlice_spreadArray(TopologyFilterSlice_spreadArray([], old[category], true), [value], false), _b));\n }\n else {\n var old = state.targetFilters.filters[category];\n state.targetFilters.filters[category] = TopologyFilterSlice_spreadArray(TopologyFilterSlice_spreadArray([], old.filter(function (val) { return val !== value; }), true), [value], false);\n }\n });\n builder.addCase(topologyDeleteFilterIntent, function (state, _a) {\n var _b;\n var payload = _a.payload;\n var isGroup = payload.isGroup, category = payload.category, value = payload.value, nodeType = payload.nodeType;\n if (isGroup) {\n var old = state.groupFilters.filters[nodeType] || defaultEmptyGroupFilters;\n state.groupFilters.filters[nodeType] = TopologyFilterSlice_assign(TopologyFilterSlice_assign({}, old), (_b = {}, _b[category] = old[category].filter(function (val) { return val !== value; }), _b));\n }\n else {\n var old = state.targetFilters.filters[category];\n state.targetFilters.filters[category] = old.filter(function (val) { return val !== value; });\n }\n });\n builder.addCase(topologyDeleteCategoryFiltersIntent, function (state, _a) {\n var _b;\n var payload = _a.payload;\n var isGroup = payload.isGroup, category = payload.category, nodeType = payload.nodeType;\n if (isGroup) {\n var old = state.groupFilters.filters[nodeType] || defaultEmptyGroupFilters;\n state.groupFilters.filters[nodeType] = TopologyFilterSlice_assign(TopologyFilterSlice_assign({}, old), (_b = {}, _b[category] = [], _b));\n }\n else {\n state.targetFilters.filters[category] = [];\n }\n });\n builder.addCase(topologyDeleteAllFiltersIntent, function (state, _) {\n state.groupFilters = {\n category: state.groupFilters.category,\n filters: {},\n };\n state.targetFilters = {\n category: state.targetFilters.category,\n filters: defaultEmptyTargetFilters,\n };\n });\n});\n/* harmony default export */ const TopologyFilterSlice = (topologyFilterReducer);\n\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/TopologyFilters.tsx\nvar TopologyFilters_assign = (undefined && undefined.__assign) || function () {\n TopologyFilters_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyFilters_assign.apply(this, arguments);\n};\nvar TopologyFilters_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar TopologyFilters_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar TopologyFilters = function (_a) {\n var _b = _a.breakpoint, breakpoint = _b === void 0 ? \'2xl\' : _b, isDisabled = _a.isDisabled, props = TopologyFilters_rest(_a, ["breakpoint", "isDisabled"]);\n return (react.createElement(ToolbarToggleGroup/* ToolbarToggleGroup */.R, TopologyFilters_assign({}, props, { toggleIcon: react.createElement(filter_icon/* FilterIcon */.k1, null), breakpoint: breakpoint }),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(TopologyFilterCategorySelect, { isDisabled: isDisabled })),\n react.createElement(TopologyFilter, { isDisabled: isDisabled }))));\n};\nvar TopologyFilterCategorySelect = function (_a) {\n var isDisabled = _a.isDisabled, props = TopologyFilters_rest(_a, ["isDisabled"]);\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var _c = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyFilters; }), isGroup = _c.isGroup, groupFilters = _c.groupFilters, targetFilters = _c.targetFilters;\n var handleSelect = react.useCallback(function (_, value, placeholder) {\n if (!placeholder) {\n var category = value.category;\n dispatch(ReduxStore_topologyUpdateCategoryIntent(isGroup, category));\n }\n }, [dispatch, isGroup]);\n var handleCategoryTypeChange = react.useCallback(function (isChecked) {\n dispatch(ReduxStore_topologyUpdateCategoryTypeIntent(isChecked));\n }, [dispatch]);\n var selected = react.useMemo(function () {\n return (isGroup ? groupFilters : targetFilters).category;\n }, [isGroup, targetFilters, groupFilters]);\n var options = react.useMemo(function () {\n var categories = isGroup ? allowedGroupFilters : allowedTargetFilters;\n return [\n react.createElement(SelectGroup/* SelectGroup */.D, { label: "Category Type", key: \'category-type\' },\n react.createElement(SelectOption/* SelectOption */.$, { isPlaceholder: true, key: \'switch\', value: \'\' },\n react.createElement(Switch/* Switch */.r, { id: \'category-type-switch\', label: \'Groupings\', isChecked: isGroup, onChange: handleCategoryTypeChange }))),\n react.createElement(Divider/* Divider */.i, { key: \'divider\' }),\n react.createElement(SelectGroup/* SelectGroup */.D, { label: "Categories", key: \'categories\' }, categories.map(function (cat) { return (react.createElement(SelectOption/* SelectOption */.$, { key: cat, value: TopologyFilters_assign({ toString: function () { return (0,utils/* getDisplayFieldName */.O5)(cat); }, compareTo: function (other) { return other.category === cat; } }, {\n category: cat,\n }) }, (0,utils/* getDisplayFieldName */.O5)(cat))); })),\n ];\n }, [isGroup, handleCategoryTypeChange]);\n return (react.createElement(Select/* Select */.P, TopologyFilters_assign({}, props, { variant: selectConstants/* SelectVariant.single */.TM.single, onToggle: setIsOpen, onSelect: handleSelect, isDisabled: isDisabled, isOpen: isOpen, selections: TopologyFilters_assign({ toString: function () { return "".concat(isGroup ? \'Group\' : \'Target\', ": ").concat((0,utils/* getDisplayFieldName */.O5)(selected)); }, compareTo: function (other) { return other.category === selected; } }, {\n category: selected,\n }), "aria-label": \'Filter Categories\', placeholderText: \'Select a category\', isGrouped: true }), options));\n};\nvar TopologyFilter = function (_a) {\n var isDisabled = _a.isDisabled, props = TopologyFilters_rest(_a, ["isDisabled"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var _b = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyFilters; }), isGroup = _b.isGroup, groupFilters = _b.groupFilters, targetFilters = _b.targetFilters;\n var discoveryTree = react.useContext(DiscoveryTreeContext);\n var flattenedTree = react.useMemo(function () { return flattenTree(discoveryTree); }, [discoveryTree]);\n var groupNodeTypes = react.useMemo(function () { return getUniqueNodeTypes(flattenedTree.filter(function (n) { return !isTargetNode(n); })); }, [flattenedTree]);\n var generateOnSelect = react.useCallback(function (isGroup) {\n return function (_, _a) {\n var value = _a.value, nodeType = _a.nodeType, category = _a.category;\n dispatch(ReduxStore_topologyAddFilterIntent(isGroup, nodeType, category, value));\n };\n }, [dispatch]);\n var groupInputs = react.useMemo(function () {\n return allowedGroupFilters.map(function (cat) {\n var isShown = isGroup && groupFilters.category === cat;\n var ariaLabel = "Filter by ".concat((0,utils/* getDisplayFieldName */.O5)(cat), "...");\n var optionGroup = groupNodeTypes\n .map(function (type) { return ({\n groupLabel: type,\n options: Array.from(new Set(flattenedTree\n .filter(function (n) { return n.nodeType === type; })\n .map(function (groupNode) { return fieldValueToStrings(groupNode[categoryToNodeField(cat)]); })\n .reduce(function (acc, curr) { return acc.concat(curr); }, [])\n .filter(function (val) {\n var filters = groupFilters.filters[type] || {};\n if (filters) {\n var criteria = filters[cat] || [];\n return !criteria || !criteria.includes(val);\n }\n return true;\n }))),\n }); })\n .filter(function (group) { return group.options && group.options.length; }); // Do show show empty groups\n var selectOptions = optionGroup.map(function (_a) {\n var options = _a.options, groupLabel = _a.groupLabel;\n return (react.createElement(SelectGroup/* SelectGroup */.D, { key: groupLabel, label: groupLabel }, options.map(function (opt) { return (react.createElement(SelectOption/* SelectOption */.$, { key: opt, value: TopologyFilters_assign({ toString: function () { return opt; }, compareTo: function (other) { return other.value === opt; } }, {\n nodeType: groupLabel,\n value: opt,\n category: cat,\n }) }, isLabelOrAnnotation(cat) ? react.createElement(Label/* Label */._, { color: "grey" }, opt) : opt)); })));\n });\n return (react.createElement(ToolbarFilter/* ToolbarFilter */.p, { key: "Group/".concat(cat), showToolbarItem: isShown, categoryName: "Group/".concat(cat) },\n react.createElement(TopologyFilterSelect, { isDisabled: isDisabled, placeholderText: ariaLabel, "aria-label": ariaLabel, typeAheadAriaLabel: ariaLabel, maxHeight: "16em", isGrouped: true, onSelect: generateOnSelect(isGroup) }, selectOptions)));\n });\n }, [isGroup, groupFilters, flattenedTree, groupNodeTypes, isDisabled, generateOnSelect]);\n var targetInputs = react.useMemo(function () {\n return allowedTargetFilters.map(function (cat) {\n var isShown = !isGroup && targetFilters.category === cat;\n var ariaLabel = "Filter by ".concat((0,utils/* getDisplayFieldName */.O5)(cat), "...");\n var options = Array.from(new Set(flattenedTree\n .filter(function (n) { return isTargetNode(n); })\n .map(function (_a) {\n var target = _a.target;\n var value = target[categoryToNodeField(cat)];\n if (isAnnotation(cat)) {\n return TopologyFilters_spreadArray(TopologyFilters_spreadArray([], fieldValueToStrings(value[\'platform\']), true), fieldValueToStrings(value[\'cryostat\']), true);\n }\n return fieldValueToStrings(value);\n })\n .reduce(function (acc, curr) { return acc.concat(curr); }, [])\n .filter(function (val) {\n var criteria = targetFilters.filters[cat];\n return !criteria || !criteria.includes(val);\n })));\n var selectOptions = options.map(function (opt) {\n return (react.createElement(SelectOption/* SelectOption */.$, { key: opt, value: TopologyFilters_assign({ toString: function () { return opt; }, compareTo: function (other) {\n var regex = new RegExp(typeof other === \'string\' ? other : other.value, \'i\');\n return regex.test(opt);\n } }, {\n nodeType: \'Target\',\n value: opt,\n category: cat,\n }) }, isLabelOrAnnotation(cat) ? react.createElement(Label/* Label */._, { color: "grey" }, opt) : opt));\n });\n return (react.createElement(ToolbarFilter/* ToolbarFilter */.p, { key: "Target/".concat(cat), categoryName: "Target/".concat(cat), showToolbarItem: isShown },\n react.createElement(TopologyFilterSelect, { isDisabled: isDisabled, placeholderText: ariaLabel, "aria-label": ariaLabel, typeAheadAriaLabel: ariaLabel, maxHeight: "16em", onSelect: generateOnSelect(false) }, selectOptions)));\n });\n }, [isGroup, targetFilters, flattenedTree, isDisabled, generateOnSelect]);\n return (react.createElement("div", TopologyFilters_assign({}, props),\n groupInputs,\n targetInputs));\n};\nvar TopologyFilterSelect = function (_a) {\n var options = _a.children, onSelect = _a.onSelect, isDisabled = _a.isDisabled, placeholderText = _a.placeholderText, props = TopologyFilters_rest(_a, ["children", "onSelect", "isDisabled", "placeholderText"]);\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n return (react.createElement(Select/* Select */.P, TopologyFilters_assign({}, props, { variant: selectConstants/* SelectVariant.typeahead */.TM.typeahead, isOpen: isOpen, onToggle: setIsOpen, onSelect: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n setIsOpen(false);\n onSelect && onSelect.apply(void 0, args);\n }, isDisabled: isDisabled, placeholderText: placeholderText }), options));\n};\nvar fieldValueToStrings = function (value) {\n if (value === undefined || value === null) {\n return [];\n }\n if (typeof value === \'object\') {\n if (Array.isArray(value)) {\n return value.map(function (v) { return "".concat(v); });\n }\n else {\n return Object.entries(value).map(function (_a) {\n var k = _a[0], v = _a[1];\n return "".concat(k, "=").concat(v);\n });\n }\n }\n else {\n return ["".concat(value)];\n }\n};\nvar isLabelOrAnnotation = function (category) { return /(label|annotation)/i.test(category); };\nvar isAnnotation = function (category) { return /annotation/i.test(category); };\n\n;// CONCATENATED MODULE: ./src/app/Topology/Toolbar/TopologyToolbar.tsx\nvar TopologyToolbar_assign = (undefined && undefined.__assign) || function () {\n TopologyToolbar_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyToolbar_assign.apply(this, arguments);\n};\nvar TopologyToolbar_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar TopologyToolbarVariant;\n(function (TopologyToolbarVariant) {\n TopologyToolbarVariant["Graph"] = "graph";\n TopologyToolbarVariant["List"] = "list";\n})(TopologyToolbarVariant || (TopologyToolbarVariant = {}));\nvar TopologyToolbar = function (_a) {\n var variant = _a.variant, visualization = _a.visualization, isDisabled = _a.isDisabled, props = TopologyToolbar_rest(_a, ["variant", "visualization", "isDisabled"]);\n var isGraphView = variant === TopologyToolbarVariant.Graph;\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = react.useState(false), quicksearchOpen = _b[0], setQuicksearchOpen = _b[1];\n var toggleView = react.useCallback(function () {\n dispatch(ReduxStore_topologyConfigSetViewModeIntent(isGraphView ? \'list\' : \'graph\'));\n }, [dispatch, isGraphView]);\n var handleClearAllFilters = react.useCallback(function () {\n dispatch(ReduxStore_topologyDeleteAllFiltersIntent());\n }, [dispatch]);\n var handleQuickSearch = react.useCallback(function () {\n setQuicksearchOpen(true);\n // Close the mini menu if open\n var contextMenu = document.getElementById(\'topology-context-menu\');\n if (contextMenu) {\n contextMenu.style.display = \'none\';\n }\n }, [setQuicksearchOpen]);\n var modeIcon = react.useMemo(function () { return (react.createElement(Tooltip/* Tooltip */.u, { entryDelay: 0, content: isGraphView ? t(\'Topology.LIST_VIEW\') : t(\'Topology.GRAPH_VIEW\'), aria: "none", "aria-live": "polite", appendTo: utils/* portalRoot */.tO },\n react.createElement(Button_Button/* Button */.zx, { className: "topology__view-switcher", "aria-label": "Clipboard", variant: "plain", onClick: toggleView }, isGraphView ? react.createElement(list_icon/* ListIcon */.DE, null) : react.createElement(topology_icon/* TopologyIcon */["if"], null)))); }, [isGraphView, toggleView, t]);\n var shortcuts = react.useMemo(function () {\n return isGraphView ? (react.createElement(Popover/* Popover */.J, { hasAutoWidth: true, bodyContent: react.createElement(Shared_Shortcuts, { shortcuts: [\n {\n id: \'drag-shortcut\',\n description: \'Move\',\n shortcut: react.createElement(ShortcutCommand, { commands: [{ id: \'drag-command\', command: \'Drag\', icon: react.createElement(mouse_icon/* MouseIcon */.Z0, null) }] }),\n },\n {\n id: \'click-shortcut\',\n description: \'View details in side panel\',\n shortcut: (react.createElement(ShortcutCommand, { commands: [{ id: \'click-command\', command: \'Click\', icon: react.createElement(mouse_icon/* MouseIcon */.Z0, null) }] })),\n },\n {\n id: \'right-click-shortcut\',\n description: \'Access context menu\',\n shortcut: (react.createElement(ShortcutCommand, { commands: [{ id: \'right-click-command\', command: \'Right click\', icon: react.createElement(mouse_icon/* MouseIcon */.Z0, null) }] })),\n },\n {\n id: \'ctrl-space-shortcut\',\n description: \'Open quick search modal\',\n shortcut: (react.createElement(ShortcutCommand, { commands: [\n { id: \'ctrl-command\', command: \'Ctrl\' },\n { id: \'space-command\', command: \'Spacebar\' },\n ] })),\n },\n ] }), position: "left" },\n react.createElement(Button_Button/* Button */.zx, { variant: "link", icon: react.createElement(question_circle_icon/* QuestionCircleIcon */.pT, null) }, "View shortcuts"))) : null;\n }, [isGraphView]);\n react.useEffect(function () {\n var handler = function (event) {\n if (event.ctrlKey && event.code === \'Space\') {\n setQuicksearchOpen(true);\n }\n };\n document.addEventListener(\'keydown\', handler);\n return function () { return document.removeEventListener(\'keydown\', handler); };\n }, [setQuicksearchOpen]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Toolbar/* Toolbar */.o, TopologyToolbar_assign({}, props, { id: "".concat(variant, "-topology-toolbar"), "aria-label": "".concat(variant, "-topology-toolbar"), className: "topology__toolbar-container", clearAllFilters: handleClearAllFilters }),\n react.createElement(ToolbarContent/* ToolbarContent */.c, { className: "topology__toolbar-main-content", key: \'main-content\' },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(QuickSearchButton, { tooltipContent: \'Add to view\', onClick: handleQuickSearch })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(DisplayOptions, { isGraph: isGraphView, isDisabled: isDisabled })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(TopologyFilters, { isDisabled: isDisabled })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(FindByMatchExpression, { isDisabled: isDisabled })),\n isGraphView && !isDisabled ? (react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(HelpButton, { visualization: visualization }))) : null,\n !isDisabled ? react.createElement(ToolbarItem/* ToolbarItem */.E, { alignment: { default: \'alignRight\' } }, shortcuts) : null,\n react.createElement(ToolbarItem/* ToolbarItem */.E, { alignment: isDisabled ? { default: \'alignRight\' } : undefined }, modeIcon))),\n react.createElement(TopologyFilterChips, { className: "topology__toolbar-chip-content" }),\n react.createElement(QuickSearchModal, { isOpen: quicksearchOpen, onClose: function () { return setQuicksearchOpen(false); } })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/GraphView/TopologyGraphView.tsx\nvar TopologyGraphView_assign = (undefined && undefined.__assign) || function () {\n TopologyGraphView_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyGraphView_assign.apply(this, arguments);\n};\nvar TopologyGraphView_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar MAX_NODE_LIMIT = 100;\nvar DEFAULT_SIZEBAR_SIZE = 500;\nvar MIN_SIZEBAR_SIZE = 400;\nvar TOPOLOGY_GRAPH_ID = \'cryostat-target-topology-graph\';\nvar TopologyGraphView = function (_a) {\n var transformConfig = _a.transformConfig, props = TopologyGraphView_rest(_a, ["transformConfig"]);\n var _b = react.useState([]), selectedIds = _b[0], setSelectedIds = _b[1]; // selectedIds is exactly matched by VisualizationSurface\n var _c = react.useState(), selectedEntity = _c[0], setSelectedEntity = _c[1];\n var _d = react.useState(false), showGraphAnyway = _d[0], setShowGraphAnyway = _d[1];\n var filters = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyFilters; });\n var handleDrawerClose = react.useCallback(function () { return setSelectedIds([]); }, [setSelectedIds]);\n var discoveryTree = react.useContext(DiscoveryTreeContext);\n var _transformData = react.useMemo(function () { return transformData(discoveryTree, transformConfig, filters); }, [discoveryTree, transformConfig, filters]);\n var exceedLimit = react.useMemo(function () { return _transformData.nodes.length > MAX_NODE_LIMIT; }, [_transformData]);\n var isEmptyGraph = react.useMemo(function () { return !_transformData.nodes.some(function (node) { return node.type === \'node\'; }); }, [_transformData]);\n var _createVisualization = react.useCallback(function () {\n var _newVisualization = new dist_esm/* Visualization */.FdR();\n // Register factory for a layout variant\n _newVisualization.registerLayoutFactory(layoutFactory);\n // Register factory for each node variant\n _newVisualization.registerComponentFactory(componentFactory);\n // Selection event\n _newVisualization.addEventListener(dist_esm/* SELECTION_EVENT */.fPV, function (ids) {\n setSelectedIds(ids);\n setSelectedEntity(ids[0] ? _newVisualization.getElementById(ids[0]) : undefined);\n });\n _newVisualization.addEventListener(dist_esm/* GRAPH_POSITION_CHANGE_EVENT */.ufV, lodash.debounce(function () {\n var graph = _newVisualization.toModel().graph;\n if (graph) {\n var saved = {\n id: graph.id,\n type: graph.type,\n x: graph.x,\n y: graph.y,\n scale: graph.scale,\n scaleExtent: graph.scaleExtent,\n };\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TOPOLOGY_GRAPH_POSITONS\', saved);\n }\n }, 200));\n _newVisualization.addEventListener(dist_esm/* NODE_POSITIONED_EVENT */.o2D, lodash.debounce(function () {\n var nodes = _newVisualization.toModel().nodes;\n if (nodes) {\n var savedPos = nodes.map(function (n) { return ({\n id: n.id,\n x: n.x,\n y: n.y,\n collapsed: n.collapsed,\n }); });\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TOPOLOGY_NODE_POSITIONS\', savedPos);\n }\n }, 200));\n return _newVisualization;\n }, [setSelectedIds, setSelectedEntity]);\n var visualizationRef = react.useRef(_createVisualization());\n var visualization = visualizationRef.current;\n react.useEffect(function () {\n var graphData = (0,LocalStorage/* getFromLocalStorage */.fp)(\'TOPOLOGY_GRAPH_POSITONS\', {});\n var nodePositions = (0,LocalStorage/* getFromLocalStorage */.fp)(\'TOPOLOGY_NODE_POSITIONS\', []);\n var model = {\n nodes: _transformData.nodes.map(function (n) {\n var savedData = nodePositions.find(function (ps) { return ps.id === n.id; });\n if (savedData) {\n n = TopologyGraphView_assign(TopologyGraphView_assign({}, n), { x: savedData.x, y: savedData.y, collapsed: savedData.collapsed });\n }\n return n;\n }),\n edges: _transformData.edges,\n graph: {\n id: TOPOLOGY_GRAPH_ID,\n type: \'graph\',\n layout: \'Cola\',\n layers: [dist_esm/* BOTTOM_LAYER */.vfm, dist_esm/* GROUPS_LAYER */.F1v, dist_esm/* DEFAULT_LAYER */.DED, dist_esm/* TOP_LAYER */.nAl],\n data: TopologyGraphView_assign({}, discoveryTree),\n x: graphData.x,\n y: graphData.y,\n scale: graphData.scale,\n scaleExtent: graphData.scaleExtent,\n },\n };\n // Initialize the controller with model to create nodes\n visualization.fromModel(model, false);\n }, [_transformData, visualization, discoveryTree]);\n // Note: Do not reorder. Must be called after registering model\n react.useEffect(function () {\n // Clear selection when discovery tree is updated and entity (target) is lost\n setSelectedIds(function (old) {\n if (!getNodeById(_transformData.nodes, old[0])) {\n setSelectedEntity(undefined);\n return [];\n }\n setSelectedEntity(old[0] ? visualization.getElementById(old[0]) : undefined);\n return old;\n });\n }, [setSelectedIds, setSelectedEntity, _transformData, visualization]);\n react.useEffect(function () {\n var hideMenu = function (_) {\n var contextMenu = document.getElementById(\'topology-context-menu\');\n if (contextMenu) {\n contextMenu.style.display = \'none\';\n }\n };\n var showMenu = function (e) {\n e.preventDefault();\n var contextMenu = document.getElementById(\'topology-context-menu\');\n if (contextMenu) {\n contextMenu.style.display = \'block\';\n contextMenu.style.top = "".concat(e.clientY, "px");\n contextMenu.style.left = "".concat(e.clientX, "px");\n }\n };\n // Visualize surface needs time to intialize.\n // Workaround: find drawer body which is already ready and tightly wraps the surface.\n var container = document.querySelector(\'#topology__visualization-container .pf-c-drawer__content\');\n if (container) {\n container.addEventListener(\'contextmenu\', showMenu);\n }\n document.addEventListener(\'click\', hideMenu);\n return function () { return document.removeEventListener(\'click\', hideMenu); };\n }, []);\n var sidebar = react.useMemo(function () { return (react.createElement(TopologySideBar, { onClose: handleDrawerClose },\n react.createElement(Entity_EntityDetails, { entity: selectedEntity }))); }, [handleDrawerClose, selectedEntity]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, null,\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(TopologyToolbar, { variant: TopologyToolbarVariant.Graph, visualization: visualization, isDisabled: exceedLimit && !showGraphAnyway })),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Divider/* Divider */.i, null)),\n react.createElement(StackItem/* StackItem */.v, { isFilled: true }, isEmptyGraph ? (react.createElement(TopologyEmptyState, null)) : exceedLimit && !showGraphAnyway ? (react.createElement(TopologyExceedLimitState, { onShowTopologyAnyway: function () { return setShowGraphAnyway(true); } })) : (react.createElement(dist_esm/* TopologyView */.sgz, TopologyGraphView_assign({}, props, { id: "topology__visualization-container", className: (0,esm.css)(\'topology__main-container\'), controlBar: react.createElement(TopologyControlBar, { visualization: visualization }), sideBar: sidebar, sideBarOpen: selectedIds.length > 0, sideBarResizable: true, minSideBarSize: "".concat(MIN_SIZEBAR_SIZE, "px"), defaultSideBarSize: "".concat(DEFAULT_SIZEBAR_SIZE, "px") }),\n react.createElement(dist_esm/* VisualizationProvider */.AE, { controller: visualization },\n react.createElement(dist_esm/* VisualizationSurface */.HPY, { state: { selectedIds: selectedIds } })))))),\n react.createElement(QuickSearchContextMenu, { id: \'topology-context-menu\' })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/GraphView/CustomNode.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar CustomNode_assign = (undefined && undefined.__assign) || function () {\n CustomNode_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CustomNode_assign.apply(this, arguments);\n};\nvar CustomNode_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar NODE_ICON_PADDING = 5;\nvar renderIcon = function (_data, element, useAlt) {\n var _a = element.getDimensions(), width = _a.width, height = _a.height;\n var contentSize = Math.min(width, height) - NODE_ICON_PADDING * 2;\n var mainContentSize = contentSize * (useAlt ? 0.5 : 0.8);\n var _b = [width / 2, height / 2], cx = _b[0], cy = _b[1];\n var _c = [cx - mainContentSize / 2, cy - mainContentSize / 2], trueCx = _c[0], trueCy = _c[1];\n return (react.createElement(react.Fragment, null,\n react.createElement("circle", { cx: cx, cy: cy, r: contentSize / 2, fill: "var(--pf-global--palette--white)" }),\n useAlt ? (react.createElement("g", { transform: "translate(".concat(trueCx, ", ").concat(trueCy, ")") },\n react.createElement(container_node_icon/* ContainerNodeIcon */.SO, { width: mainContentSize, height: mainContentSize }))) : (react.createElement("image", { x: trueCx, y: trueCy, width: mainContentSize, height: mainContentSize, xlinkHref: openjdk_namespaceObject }))));\n};\nvar NODE_BADGE_COLOR = \'var(--pf-global--palette--blue-500)\';\nvar CustomNode = function (_a) {\n var element = _a.element, onSelect = _a.onSelect, selected = _a.selected, dragNodeRef = _a.dragNodeRef, contextMenuOpen = _a.contextMenuOpen, onContextMenu = _a.onContextMenu, props = CustomNode_rest(_a, ["element", "onSelect", "selected", "dragNodeRef", "contextMenuOpen", "onContextMenu"]);\n (0,dist_esm/* useAnchor */.Wbm)(dist_esm/* EllipseAnchor */.zgX); // For edges\n var _b = (0,dist_esm/* useHover */.XIr)(200, 200), hover = _b[0], hoverRef = _b[1];\n var expression = useSearchExpression()[0];\n var displayOptions = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyConfigs.displayOptions; });\n var _c = displayOptions.show, showBadge = _c.badge, showConnectUrl = _c.connectionUrl, showIcon = _c.icon, showStatus = _c.status;\n var detailsLevel = element.getController().getGraph().getDetailsLevel();\n var labelIcon = react.useMemo(function () { return react.createElement("img", { src: cryostat_icon_rgb_default_namespaceObject }); }, []);\n var data = element.getData();\n var nodeStatus = getStatusTargetNode(data)[0];\n var classNames = react.useMemo(function () {\n var graphId = element.getGraph().getId();\n var matchExprForSearch = graphId === TOPOLOGY_GRAPH_ID;\n var additional = (matchExprForSearch && expression === \'\') || isTargetMatched(data, expression) ? \'\' : \'search-inactive\';\n return (0,esm.css)(\'topology__target-node\', additional);\n }, [data, expression, element]);\n var nodeDecorators = react.useMemo(function () { return (showStatus ? getNodeDecorators(element) : null); }, [element, showStatus]);\n return (react.createElement(dist_esm/* Layer */.mh4, { id: contextMenuOpen ? dist_esm/* TOP_LAYER */.nAl : dist_esm/* DEFAULT_LAYER */.DED },\n react.createElement("g", { className: classNames, id: \'target-node-visual-group\', ref: hoverRef },\n react.createElement(dist_esm/* DefaultNode */.Q3x, CustomNode_assign({}, props, { element: element, onSelect: onSelect, selected: selected, dragNodeRef: dragNodeRef, contextMenuOpen: contextMenuOpen, onContextMenu: onContextMenu, scaleNode: (hover || contextMenuOpen) && detailsLevel !== dist_esm/* ScaleDetailsLevel.high */.Vcx.high, badge: showBadge ? nodeTypeToAbbr(data.nodeType) : undefined, badgeColor: NODE_BADGE_COLOR, badgeClassName: \'topology__node-badge\', nodeStatus: showStatus ? nodeStatus : undefined, showStatusBackground: !hover && detailsLevel === dist_esm/* ScaleDetailsLevel.low */.Vcx.low, truncateLength: RESOURCE_NAME_TRUNCATE_LENGTH, labelIcon: showIcon ? labelIcon : undefined, secondaryLabel: showConnectUrl ? data.target.connectUrl : undefined, showLabel: true, attachments: nodeDecorators }),\n react.createElement("g", { id: \'target-node-visual-inner-icon\' }, renderIcon(data, element, !showIcon))))));\n};\n/* harmony default export */ const GraphView_CustomNode = ((0,dist_esm/* observer */.PiO)(CustomNode));\n\n;// CONCATENATED MODULE: ./src/app/Topology/GraphView/CustomGroup.tsx\nvar CustomGroup_assign = (undefined && undefined.__assign) || function () {\n CustomGroup_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CustomGroup_assign.apply(this, arguments);\n};\nvar CustomGroup_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar DEFAULT_NODE_COLLAPSED_DIAMETER = 100;\nvar CustomGroup_renderIcon = function (width, height) {\n var contentSize = Math.min(width, height) - NODE_ICON_PADDING * 2;\n var mainContentSize = contentSize * 0.8;\n var _a = [width / 2, height / 2], cx = _a[0], cy = _a[1];\n return (react.createElement(react.Fragment, null,\n react.createElement("circle", { cx: cx, cy: cy, r: contentSize / 2, fill: "var(--pf-global--palette--white)" }),\n react.createElement("image", { x: cx - mainContentSize / 2, y: cy - mainContentSize / 2, width: mainContentSize, height: mainContentSize, xlinkHref: openjdk_namespaceObject })));\n};\nvar CustomGroup = function (_a) {\n var element = _a.element, onSelect = _a.onSelect, selected = _a.selected, dragNodeRef = _a.dragNodeRef, contextMenuOpen = _a.contextMenuOpen, onContextMenu = _a.onContextMenu, _b = _a.collapsedHeight, collapsedHeight = _b === void 0 ? DEFAULT_NODE_COLLAPSED_DIAMETER : _b, _c = _a.collapsedWidth, collapsedWidth = _c === void 0 ? DEFAULT_NODE_COLLAPSED_DIAMETER : _c, props = CustomGroup_rest(_a, ["element", "onSelect", "selected", "dragNodeRef", "contextMenuOpen", "onContextMenu", "collapsedHeight", "collapsedWidth"]);\n var positionRef = react.useRef(element.getPosition());\n var data = element.getData();\n var displayOptions = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyConfigs.displayOptions; });\n var showBadge = displayOptions.show.badge;\n var collapsedContent = react.useMemo(function () { return react.createElement("g", { id: \'topology-visual-collapsed-icon\' }, CustomGroup_renderIcon(collapsedWidth, collapsedHeight)); }, [collapsedWidth, collapsedHeight]);\n react.useEffect(function () {\n positionRef.current = element.getPosition();\n });\n return (react.createElement("g", { id: \'topology-visual-group\' }, react.createElement(dist_esm/* DefaultGroup */.HQN, CustomGroup_assign(CustomGroup_assign({}, props), { element: element, selected: selected, onSelect: onSelect, className: data.nodeType === NodeType.REALM ? \'topology__realm-group\' : undefined, dragNodeRef: dragNodeRef, collapsible: true, \n // Workaround to keep group positions between collapses\n onCollapseChange: function (group, _) {\n group.setPosition(positionRef.current);\n }, collapsedHeight: collapsedHeight, collapsedWidth: collapsedWidth, badge: showBadge ? data.nodeType : undefined, showLabel: true, contextMenuOpen: contextMenuOpen, onContextMenu: onContextMenu }), element.isCollapsed() ? collapsedContent : null)));\n};\n/* harmony default export */ const GraphView_CustomGroup = ((0,dist_esm/* observer */.PiO)(CustomGroup));\n\n;// CONCATENATED MODULE: ./src/app/Topology/GraphView/UtilsFactory.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar UtilsFactory_assign = (undefined && undefined.__assign) || function () {\n UtilsFactory_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return UtilsFactory_assign.apply(this, arguments);\n};\nvar UtilsFactory_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n// Unit: px\nvar DEFAULT_NODE_DIAMETER = 80;\nvar DEFAULT_GROUP_PADDING = 30;\nvar DEFAULT_NODE_PADDING = 60;\nvar DEFAULT_NODE_PADDINGS = [0, DEFAULT_NODE_PADDING];\nvar DEFAULT_GROUP_PADDINGS = [\n DEFAULT_GROUP_PADDING,\n DEFAULT_GROUP_PADDING,\n DEFAULT_GROUP_PADDING + 15,\n DEFAULT_GROUP_PADDING,\n];\nvar RESOURCE_NAME_TRUNCATE_LENGTH = 20;\nvar _buildFullNodeModel = function (node, expandMode, filters) {\n if (expandMode === void 0) { expandMode = true; }\n if (isTargetNode(node)) {\n if (!isTargetNodeFiltered(node, filters === null || filters === void 0 ? void 0 : filters.targetFilters.filters)) {\n return [];\n }\n return [\n {\n id: getUniqueTargetId(node),\n type: \'node\',\n label: node.target.alias || node.name,\n shape: dist_esm/* NodeShape.ellipse */.uh0.ellipse,\n width: DEFAULT_NODE_DIAMETER,\n height: DEFAULT_NODE_DIAMETER,\n style: {\n padding: DEFAULT_NODE_PADDINGS,\n },\n data: UtilsFactory_assign({}, node),\n },\n ];\n }\n var INIT = [];\n var directChildNodes = [];\n var allChildNodes = node.children.reduce(function (prev, curr) {\n var next = _buildFullNodeModel(curr, expandMode, filters);\n if (next.length) {\n // First nodes are always direct children\n // If direct child is collapsed (i.e. single grandchild node),\n // that single grandchild is used as if it is direct\n directChildNodes.push(next[0]);\n }\n return prev.concat(next);\n }, INIT);\n // Do show empty or filtered-out groups\n // Note: Do not filter universe node\n if (!allChildNodes.length ||\n (node.nodeType !== NodeType.UNIVERSE && !isGroupNodeFiltered(node, filters === null || filters === void 0 ? void 0 : filters.groupFilters.filters))) {\n return [];\n }\n // Collapse single-child internal nodes (realms and namespaces are exempt)\n if (!COLLAPSE_EXEMPTS.includes(node.nodeType) && !expandMode && directChildNodes.length === 1) {\n return UtilsFactory_spreadArray([], allChildNodes, true);\n }\n var groupNode = {\n id: getUniqueGroupId(node),\n type: \'group\',\n group: true,\n label: node.name,\n children: directChildNodes.map(function (childNode) { return childNode.id; }),\n style: {\n padding: DEFAULT_GROUP_PADDINGS,\n },\n data: UtilsFactory_assign({}, node),\n };\n return UtilsFactory_spreadArray([groupNode], allChildNodes, true);\n};\nvar _transformDataGroupedByTopLevel = function (root, filters) {\n var nodes = [];\n var edges = [];\n // First layer of internal nodes\n var groupNodes = root.children\n .filter(function (realm) { return isGroupNodeFiltered(realm, filters === null || filters === void 0 ? void 0 : filters.groupFilters.filters); }) // Do not show filtered-out groups\n .map(function (group) {\n var realmNode = {\n id: getUniqueGroupId(group),\n type: \'group\',\n group: true,\n label: group.name,\n children: [],\n style: {\n padding: DEFAULT_GROUP_PADDINGS,\n },\n data: UtilsFactory_assign({}, group),\n };\n return realmNode;\n });\n // Extract all leaves\n var leafNodes = [];\n groupNodes.forEach(function (groupNode) {\n var _tNodes = getAllLeaves(groupNode.data)\n .filter(function (tn) { return isTargetNodeFiltered(tn, filters === null || filters === void 0 ? void 0 : filters.targetFilters.filters); })\n .map(function (leaf) {\n return {\n id: getUniqueTargetId(leaf),\n type: \'node\',\n label: leaf.target.alias || leaf.name,\n shape: dist_esm/* NodeShape.ellipse */.uh0.ellipse,\n width: DEFAULT_NODE_DIAMETER,\n height: DEFAULT_NODE_DIAMETER,\n style: {\n padding: DEFAULT_NODE_PADDINGS,\n },\n data: UtilsFactory_assign({}, leaf),\n };\n });\n groupNode.children = _tNodes.map(function (n) { return n.id; }); // Add nodes id to group\n leafNodes = leafNodes.concat(_tNodes);\n });\n nodes = nodes.concat(groupNodes.filter(function (gn) { return gn.children && gn.children.length; })); // Do not empty groups\n nodes = nodes.concat(leafNodes);\n return {\n nodes: nodes,\n edges: edges,\n };\n};\nvar _transformDataFull = function (root, expandMode, filters) {\n if (expandMode === void 0) { expandMode = true; }\n var edges = [];\n var nodes = _buildFullNodeModel(root, expandMode, filters).slice(1); // Remove universe node\n return {\n nodes: nodes,\n edges: edges,\n };\n};\nvar transformData = function (universe, _a, filters) {\n var _b = _a === void 0 ? {} : _a, _c = _b.showOnlyTopGroup, showOnlyTopGroup = _c === void 0 ? false : _c, _d = _b.expandMode, expandMode = _d === void 0 ? true : _d;\n return showOnlyTopGroup\n ? _transformDataGroupedByTopLevel(universe, filters)\n : _transformDataFull(universe, expandMode, filters);\n};\nvar getNodeById = function (nodes, id) {\n if (id === undefined)\n return undefined;\n return nodes.find(function (node) { return node.id === id; });\n};\n// This method sets the layout of your topology view (e.g. Force, Dagre, Cola, etc.).\n// OCP is supporting only Cola\nvar layoutFactory = function (type, graph) {\n switch (type) {\n case \'Cola\':\n return new dist_esm/* ColaLayout */.wc(graph, { layoutOnDrag: false });\n default:\n console.warn("".concat(type, " layout is not supported"));\n return undefined;\n }\n};\n// This method lets you customize the components in your topology view (e.g. nodes, groups, and edges)\nvar componentFactory = function (kind, type) {\n switch (type) {\n case \'group\':\n return (0,dist_esm/* withContextMenu */.XhD)(actionFactory)((0,dist_esm/* withDragNode */.Nb6)((0,dist_esm/* nodeDragSourceSpec */.Rti)(\'group\', false, false))((0,dist_esm/* withSelection */.YOU)({ multiSelect: false, controlled: true })(GraphView_CustomGroup)));\n default:\n switch (kind) {\n case dist_esm/* ModelKind.graph */.DlE.graph:\n return (0,dist_esm/* withPanZoom */.Zo5)()(dist_esm/* GraphComponent */.B$W);\n case dist_esm/* ModelKind.node */.DlE.node:\n return (0,dist_esm/* withContextMenu */.XhD)(actionFactory)((0,dist_esm/* withDragNode */.Nb6)((0,dist_esm/* nodeDragSourceSpec */.Rti)(\'node\', false, false))((0,dist_esm/* withSelection */.YOU)({ multiSelect: false, controlled: true })(GraphView_CustomNode)));\n case dist_esm/* ModelKind.edge */.DlE.edge:\n return dist_esm/* DefaultEdge */.wmY;\n default:\n return undefined;\n }\n }\n};\n// Support only node details\nvar isRenderable = function (entity) {\n if (isGraphElement(entity)) {\n return (0,dist_esm/* isNode */.UGU)(entity);\n }\n return entity.getData() !== undefined;\n};\nvar nodeDistanceToBounds = function (node, bounds) {\n var nodeBounds = node.getBounds();\n var nodeX = nodeBounds.x + nodeBounds.width / 2;\n var nodeY = nodeBounds.y + nodeBounds.height / 2;\n var dx = Math.max(bounds.x - nodeX, 0, nodeX - (bounds.x + bounds.width));\n var dy = Math.max(bounds.y - nodeY, 0, nodeY - (bounds.y + bounds.height));\n return Math.sqrt(dx * dx + dy * dy);\n};\n// Ensure some nodes are within views in case stored locations are off screen\n// FIXME: Seems to always pan into view\nvar ensureGraphVisible = function (visualization) {\n if (visualization.hasGraph()) {\n var graph_1 = visualization.getGraph();\n var nodes = visualization.getElements().filter(isNode);\n if (nodes.length) {\n var anyVisible = nodes.find(function (n) { return graph_1.isNodeInView(n, { padding: 0 }); });\n if (!anyVisible) {\n var graphBounds_1 = graph_1.getBounds();\n var _a = nodes.reduce(function (_a, nextNode) {\n var closestNode = _a[0], closestDistance = _a[1];\n var distance = nodeDistanceToBounds(nextNode, graphBounds_1);\n if (distance < closestDistance) {\n return [nextNode, distance];\n }\n return [closestNode, closestDistance];\n }, [nodes[0], nodeDistanceToBounds(nodes[0], graphBounds_1)]), toPanNode = _a[0], _ = _a[1];\n graph_1.panIntoView(toPanNode);\n }\n }\n }\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Radio/Radio.js\nvar Radio = __webpack_require__(92504);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListItem.js + 1 modules\nvar DataListItem = __webpack_require__(48490);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListItemRow.js\nvar DataListItemRow = __webpack_require__(81217);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListToggle.js\nvar DataListToggle = __webpack_require__(36293);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListItemCells.js\nvar DataListItemCells = __webpack_require__(14087);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListCell.js\nvar DataListCell = __webpack_require__(27511);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListContent.js\nvar DataListContent = __webpack_require__(80708);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/DataList/DataList.js\nvar DataList = __webpack_require__(31765);\n;// CONCATENATED MODULE: ./src/app/Shared/MatchExpression/utils.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar MatchExpression_utils_assign = (undefined && undefined.__assign) || function () {\n MatchExpression_utils_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return MatchExpression_utils_assign.apply(this, arguments);\n};\n\n\n\n\nvar utils_layoutFactory = function (type, graph) {\n switch (type) {\n case \'Grid\':\n return new dist_esm/* GridLayout */.Mes(graph, { layoutOnDrag: false });\n default:\n console.warn("".concat(type, " layout is not supported"));\n return undefined;\n }\n};\n// This method lets you customize the components in your topology view (e.g. nodes, groups, and edges)\nvar utils_componentFactory = function (kind, type) {\n switch (type) {\n case \'group\':\n return dist_esm/* DefaultGroup */.HQN;\n default:\n switch (kind) {\n case dist_esm/* ModelKind.graph */.DlE.graph:\n return (0,dist_esm/* withPanZoom */.Zo5)()(dist_esm/* GraphComponent */.B$W);\n case dist_esm/* ModelKind.node */.DlE.node:\n return (0,dist_esm/* withDragNode */.Nb6)((0,dist_esm/* nodeDragSourceSpec */.Rti)(\'node\', false, false))((0,dist_esm/* withSelection */.YOU)({ multiSelect: false, controlled: true })(GraphView_CustomNode));\n case dist_esm/* ModelKind.edge */.DlE.edge:\n return dist_esm/* DefaultEdge */.wmY;\n default:\n return undefined;\n }\n }\n};\nvar createTargetNode = function (target) {\n return {\n id: (0,utils/* hashCode */.un)(JSON.stringify(target)),\n name: target.connectUrl,\n nodeType: NodeType.TARGET,\n labels: {},\n target: target,\n };\n};\nvar utils_DEFAULT_NODE_DIAMETER = 50;\nvar utils_DEFAULT_NODE_PADDINGS = [0, 35];\nvar utils_transformData = function (targets) {\n return {\n nodes: targets.map(function (tn) { return ({\n id: tn.target.connectUrl,\n type: \'node\',\n label: tn.target.alias || tn.target.connectUrl,\n shape: dist_esm/* NodeShape.ellipse */.uh0.ellipse,\n width: utils_DEFAULT_NODE_DIAMETER,\n height: utils_DEFAULT_NODE_DIAMETER,\n style: {\n padding: utils_DEFAULT_NODE_PADDINGS,\n },\n data: MatchExpression_utils_assign({}, tn),\n }); }),\n edges: [],\n };\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/MatchExpression/MatchExpressionVisualizer.tsx\nvar MatchExpressionVisualizer_assign = (undefined && undefined.__assign) || function () {\n MatchExpressionVisualizer_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return MatchExpressionVisualizer_assign.apply(this, arguments);\n};\nvar MatchExpressionVisualizer_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar MatchExpressionVisualizer_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar MatchExpressionVisualizer = function (_a) {\n var alertOptions = _a.alertOptions, props = MatchExpressionVisualizer_rest(_a, ["alertOptions"]);\n var _b = react.useState(true), isGraph = _b[0], setIsGraph = _b[1];\n return (react.createElement(Stack/* Stack */.K, MatchExpressionVisualizer_assign({}, props, { hasGutter: true }),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(LayoutRadioGroup, { onChange: setIsGraph })),\n react.createElement(StackItem/* StackItem */.v, { isFilled: true, style: { overflow: \'auto\' } }, isGraph ? react.createElement(GraphView, { alertOptions: alertOptions }) : react.createElement(ListView, { alertOptions: alertOptions }))));\n};\nvar LayoutRadioGroup = function (_a) {\n var onChange = _a.onChange, props = MatchExpressionVisualizer_rest(_a, ["onChange"]);\n var _b = react.useState(true), isGraph = _b[0], setIsGraph = _b[1];\n var configs = react.useMemo(function () { return [\n {\n title: \'Graph View\',\n isGraph: true,\n },\n {\n title: \'List View\',\n isGraph: false,\n },\n ]; }, []);\n react.useEffect(function () { return onChange(isGraph); }, [isGraph, onChange]);\n return (react.createElement(Flex/* Flex */.k, MatchExpressionVisualizer_assign({}, props, { alignItems: { default: \'alignItemsCenter\' } }),\n react.createElement(FlexItem/* FlexItem */.B, { spacer: { default: \'spacerSm\' } },\n react.createElement("span", { style: { fontWeight: \'700\' } }, "Visualize via:")),\n configs.map(function (conf) { return (react.createElement(FlexItem/* FlexItem */.B, { key: conf.title },\n react.createElement(Radio/* Radio */.Y, { isChecked: conf.isGraph === isGraph, name: conf.title, onChange: function () { return setIsGraph(conf.isGraph); }, label: conf.title, id: conf.title }))); })));\n};\nvar MATCH_EXPRES_VIS_GRAPH_ID = \'cryostat-match-expression-visualizer\';\nvar GraphView = function (_a) {\n var alertOptions = _a.alertOptions, props = MatchExpressionVisualizer_rest(_a, ["alertOptions"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var _b = react.useState([]), selectedIds = _b[0], setSelectedIds = _b[1]; // selectedIds is exactly matched by VisualizationSurface\n var _c = react.useState(), selectedEntity = _c[0], setSelectedEntity = _c[1];\n var _d = react.useState([]), targets = _d[0], setTargets = _d[1];\n var _createVisualization = react.useCallback(function () {\n var _newVisualization = new dist_esm/* Visualization */.FdR();\n // Register factory for a layout variant\n _newVisualization.registerLayoutFactory(utils_layoutFactory);\n // Register factory for each node variant\n _newVisualization.registerComponentFactory(utils_componentFactory);\n // Selection event\n _newVisualization.addEventListener(dist_esm/* SELECTION_EVENT */.fPV, function (ids) {\n setSelectedIds(ids);\n setSelectedEntity(ids[0] ? _newVisualization.getElementById(ids[0]) : undefined);\n });\n _newVisualization.addEventListener(dist_esm/* GRAPH_POSITION_CHANGE_EVENT */.ufV, lodash_default().debounce(function () {\n var graph = _newVisualization.toModel().graph;\n if (graph) {\n var saved = {\n id: graph.id,\n type: graph.type,\n x: graph.x,\n y: graph.y,\n scale: graph.scale,\n scaleExtent: graph.scaleExtent,\n };\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'MATCH_EXPRES_VIS_GRAPH_POSITIONS\', saved);\n }\n }, 200));\n _newVisualization.addEventListener(dist_esm/* NODE_POSITIONED_EVENT */.o2D, lodash_default().debounce(function () {\n var nodes = _newVisualization.toModel().nodes;\n if (nodes) {\n var savedPos = nodes.map(function (n) { return ({\n id: n.id,\n x: n.x,\n y: n.y,\n collapsed: n.collapsed,\n }); });\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'MATCH_EXPRES_VIS_NODE_POSITIONS\', savedPos);\n }\n }, 200));\n return _newVisualization;\n }, [setSelectedIds, setSelectedEntity]);\n var visualizationRef = react.useRef(_createVisualization());\n var visualization = visualizationRef.current;\n var targetNodes = react.useMemo(function () { return targets.map(createTargetNode); }, [targets]);\n var _transformedData = react.useMemo(function () { return utils_transformData(targetNodes); }, [targetNodes]);\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n react.useEffect(function () {\n var graphData = (0,LocalStorage/* getFromLocalStorage */.fp)(\'MATCH_EXPRES_VIS_GRAPH_POSITIONS\', {});\n var nodePositions = (0,LocalStorage/* getFromLocalStorage */.fp)(\'MATCH_EXPRES_VIS_NODE_POSITIONS\', []);\n var model = {\n nodes: _transformedData.nodes.map(function (n) {\n var savedData = nodePositions.find(function (ps) { return ps.id === n.id; });\n if (savedData) {\n n = MatchExpressionVisualizer_assign(MatchExpressionVisualizer_assign({}, n), { x: savedData.x, y: savedData.y, collapsed: savedData.collapsed });\n }\n return n;\n }),\n edges: _transformedData.edges,\n graph: {\n id: MATCH_EXPRES_VIS_GRAPH_ID,\n type: \'graph\',\n layout: \'Grid\',\n data: {\n id: (0,utils/* hashCode */.un)(targetNodes.toString()),\n name: \'Universe\',\n nodeType: NodeType.UNIVERSE,\n labels: {},\n children: targetNodes,\n },\n x: graphData.x,\n y: graphData.y,\n scale: graphData.scale,\n scaleExtent: graphData.scaleExtent,\n },\n };\n // Initialize the controller with model to create nodes\n visualization.fromModel(model, false);\n var _id = setTimeout((0,dist_esm/* action */.aDg)(function () {\n if (!graphData.id || !graphData.x || !graphData.y) {\n visualization.getGraph().fit();\n }\n }));\n return function () { return clearTimeout(_id); };\n }, [_transformedData, targetNodes, visualization]);\n // Note: Do not reorder. Must be called after registering model\n react.useEffect(function () {\n // Clear selection when discovery tree is updated and entity (target) is lost\n setSelectedIds(function (old) {\n if (!getNodeById(_transformedData.nodes, old[0])) {\n setSelectedEntity(undefined);\n return [];\n }\n setSelectedEntity(old[0] ? visualization.getElementById(old[0]) : undefined);\n return old;\n });\n }, [setSelectedIds, setSelectedEntity, _transformedData, visualization]);\n var handleDrawerClose = react.useCallback(function () { return setSelectedIds([]); }, [setSelectedIds]);\n var sidebar = react.useMemo(function () {\n if (!selectedEntity) {\n return null;\n }\n return (react.createElement(TopologySideBar, { onClose: handleDrawerClose },\n react.createElement(Entity_EntityDetails, { entity: selectedEntity, alertOptions: alertOptions })));\n }, [handleDrawerClose, selectedEntity, alertOptions]);\n return (react.createElement(dist_esm/* TopologyView */.sgz, MatchExpressionVisualizer_assign({}, props, { id: "match-expression__visualization-container", className: (0,esm.css)(\'topology__main-container\'), controlBar: react.createElement(TopologyControlBar, { visualization: visualization, noCollapse: true }), sideBar: sidebar, sideBarOpen: selectedIds.length > 0, sideBarResizable: true, minSideBarSize: "200px", defaultSideBarSize: "425px" }),\n react.createElement(dist_esm/* VisualizationProvider */.AE, { controller: visualization },\n react.createElement(dist_esm/* VisualizationSurface */.HPY, { state: { selectedIds: selectedIds } }))));\n};\nvar ListView = function (_a) {\n var alertOptions = _a.alertOptions, props = MatchExpressionVisualizer_rest(_a, ["alertOptions"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var matchExpression = useSearchExpression()[0];\n var _b = react.useState([]), targets = _b[0], setTargets = _b[1];\n var _c = react.useState([]), expanded = _c[0], setExpanded = _c[1];\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n var toggleExpand = react.useCallback(function (id) {\n setExpanded(function (old) {\n if (old.includes(id)) {\n return old.filter(function (_id) { return _id !== id; });\n }\n return MatchExpressionVisualizer_spreadArray(MatchExpressionVisualizer_spreadArray([], old, true), [id], false);\n });\n }, [setExpanded]);\n var targetNodes = react.useMemo(function () { return targets.map(createTargetNode); }, [targets]);\n var filtered = react.useMemo(function () {\n return targetNodes.filter(function (_a) {\n var target = _a.target;\n try {\n var res = (0,utils/* evaluateTargetWithExpr */.T9)(target, matchExpression);\n if (typeof res === \'boolean\') {\n return res;\n }\n return false;\n }\n catch (err) {\n return false;\n }\n });\n }, [targetNodes, matchExpression]);\n var content = react.useMemo(function () {\n if (!filtered || !filtered.length) {\n return (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.full */.I.full },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h3", size: "lg" }, "No Targets Matched"),\n react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null,\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "".concat(matchExpression === \'\' ? \'Enter another\' : \'Clear\', " Match Expression and try again."))))));\n }\n return filtered.map(function (tn) {\n var _a = tn.target, connectUrl = _a.connectUrl, alias = _a.alias;\n return (react.createElement(DataListItem/* DataListItem */.L, MatchExpressionVisualizer_assign({}, props, { key: connectUrl, isExpanded: expanded.includes(connectUrl) }),\n react.createElement(DataListItemRow/* DataListItemRow */.V, null,\n react.createElement(DataListToggle/* DataListToggle */.p, { onClick: function () { return toggleExpand(connectUrl); }, isExpanded: expanded.includes(connectUrl), id: "".concat(connectUrl, "-expand-toggle"), "aria-controls": "".concat(connectUrl, "-expand") }),\n react.createElement(DataListItemCells/* DataListItemCells */.p, { dataListCells: [\n react.createElement(DataListCell/* DataListCell */.K, { isIcon: true, key: "icon" },\n react.createElement(container_node_icon/* ContainerNodeIcon */.SO, null)),\n react.createElement(DataListCell/* DataListCell */.K, { key: "".concat(connectUrl, "-identifier") }, !alias || alias === connectUrl ? "".concat(connectUrl) : "".concat(alias, " (").concat(connectUrl, ")")),\n ] })),\n expanded.includes(connectUrl) ? (react.createElement(DataListContent/* DataListContent */.m, { "aria-label": "".concat(connectUrl, " Details"), id: "".concat(connectUrl, "-expand"), isHidden: !expanded.includes(connectUrl) },\n react.createElement(Entity_EntityDetails, { entity: { getData: function () { return tn; } }, columnModifier: { default: \'3Col\' }, alertOptions: alertOptions, className: "topology__list-view__entity-details" }))) : null));\n });\n }, [filtered, expanded, matchExpression, toggleExpand, props, alertOptions]);\n return (react.createElement(DataList/* DataList */.FR, { "aria-label": \'Target List\', style: { height: \'100%\' } }, content));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/TextArea/TextArea.js + 1 modules\nvar TextArea = __webpack_require__(97757);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Tabs/TabTitleIcon.js\nvar TabTitleIcon = __webpack_require__(12097);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/flask-icon.js\nvar flask_icon = __webpack_require__(22125);\n// EXTERNAL MODULE: ./src/app/utils/useSort.ts\nvar useSort = __webpack_require__(73484);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/Table/SortColumn.js + 2 modules\nvar SortColumn = __webpack_require__(83360);\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/Credentials/utils.tsx\n\n\n\nvar CredentialContext = react.createContext(new utils/* StreamOf */.NZ({ username: \'\', password: \'\' }));\n// Each test request registers itself to test pool when initiated. When completed, remove itself from pool.\n// Auth form will poll this pool for a set time to determine if form should is disabled.\nvar TestPoolContext = react.createContext(new Set());\nvar useAuthCredential = function (ignoreEmit, debounceMs) {\n if (debounceMs === void 0) { debounceMs = 50; }\n var _a = react.useState({ username: \'\', password: \'\' }), credential$ = _a[0], setCredential$ = _a[1];\n var authCredentialContext = react.useContext(CredentialContext);\n react.useEffect(function () {\n var sub;\n if (!ignoreEmit) {\n sub = authCredentialContext.get().pipe((0,debounceTime/* debounceTime */.b)(debounceMs)).subscribe(setCredential$);\n }\n return function () { return sub && sub.unsubscribe(); };\n }, [setCredential$, authCredentialContext, debounceMs, ignoreEmit]);\n var setCredential = react.useCallback(function (credential) {\n authCredentialContext.set(credential);\n }, [authCredentialContext]);\n return [credential$, setCredential];\n};\n\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/Credentials/CredentialTestTable.tsx\nvar CredentialTestTable_assign = (undefined && undefined.__assign) || function () {\n CredentialTestTable_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CredentialTestTable_assign.apply(this, arguments);\n};\nvar CredentialTestTable_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar CredentialTestTable_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\nvar tableColumns = [\n {\n title: \'Target\',\n keyPaths: [\'alias\'],\n transform: function (_alias, target) {\n return target.alias === target.connectUrl || !target.alias\n ? "".concat(target.connectUrl)\n : "".concat(target.alias, " (").concat(target.connectUrl, ")");\n },\n sortable: true,\n },\n {\n title: \'Status\',\n },\n];\nvar CredentialTestTable = function (_a) {\n var props = CredentialTestTable_rest(_a, []);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var matchExpression = useSearchExpression()[0];\n var _b = (0,useSort/* useSort */.Z)(), sortBy = _b[0], getSortParams = _b[1];\n var _c = react.useState([]), targets = _c[0], setTargets = _c[1];\n var _d = react.useState([]), filters = _d[0], setFilters = _d[1];\n var _e = react.useState(\'\'), searchText = _e[0], setSearchText = _e[1];\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n var matchedTargets = react.useMemo(function () {\n try {\n return targets.filter(function (t) {\n var res = (0,utils/* evaluateTargetWithExpr */.T9)(t, matchExpression);\n if (typeof res === \'boolean\') {\n return res;\n }\n throw new Error(\'Invalid match expression\');\n });\n }\n catch (err) {\n return [];\n }\n }, [targets, matchExpression]);\n var rows = react.useMemo(function () {\n var _a, _b;\n return (0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, matchedTargets, tableColumns).map(function (t) { return react.createElement(CredentialTestRow, { target: t, key: t.connectUrl, filters: filters, searchText: searchText }); });\n }, [matchedTargets, filters, searchText, sortBy]);\n var toolbar = react.useMemo(function () { return (react.createElement(CredentialToolbar, { onFilter: setFilters, onSearch: setSearchText, filters: filters, searchText: searchText, matchedTargets: matchedTargets })); }, [setFilters, setSearchText, filters, searchText, matchedTargets]);\n return rows.length ? (react.createElement(OuterScrollContainer/* OuterScrollContainer */.U, null,\n toolbar,\n react.createElement(InnerScrollContainer/* InnerScrollContainer */.F, null,\n react.createElement(TableComposable/* TableComposable */.X, CredentialTestTable_assign({}, props),\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, { sort: getSortParams(0) }, "Target"),\n react.createElement(Th.Th, { textCenter: true, width: 20 }, "Status"))),\n react.createElement(Tbody/* Tbody */.p, null, rows))))) : (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.full */.I.full },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h3", size: "lg" }, "No Targets Matched"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "".concat(matchExpression === \'\' ? \'Enter another\' : \'Clear\', " Match Expression and try again.")))));\n};\nvar CredentialTestState;\n(function (CredentialTestState) {\n CredentialTestState["NO_STATUS"] = "No Status";\n CredentialTestState["INVALID"] = "Invalid";\n CredentialTestState["VALID"] = "Valid";\n CredentialTestState["NA"] = "Not Applicable";\n})(CredentialTestState || (CredentialTestState = {}));\nvar getColor = function (state) {\n switch (state) {\n case CredentialTestState.VALID:\n return \'green\';\n case CredentialTestState.INVALID:\n return \'red\';\n case CredentialTestState.NA:\n return \'orange\';\n case CredentialTestState.NO_STATUS:\n default:\n return \'grey\';\n }\n};\nvar CredentialTestRow = function (_a) {\n var _b;\n var target = _a.target, _c = _a.filters, filters = _c === void 0 ? [] : _c, _d = _a.searchText, searchText = _d === void 0 ? \'\' : _d, props = CredentialTestTable_rest(_a, ["target", "filters", "searchText"]);\n var _e = react.useState({\n state: CredentialTestState.NO_STATUS,\n error: undefined,\n }), status = _e[0], setStatus = _e[1];\n var context = react.useContext(Services/* ServiceContext */.o);\n var _f = react.useState(false), loading = _f[0], setLoading = _f[1];\n var credential = useAuthCredential()[0];\n var testPool = react.useContext(TestPoolContext);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var isEmptyCredential = react.useMemo(function () { return credential.password === \'\' || credential.username === \'\'; }, [credential]);\n var isShowed = react.useMemo(function () {\n var regex = new RegExp(searchText, \'i\');\n if (searchText !== \'\' && !(regex.test(target.alias) || regex.test(target.connectUrl))) {\n return false;\n }\n return !filters.length || filters.includes(status.state);\n }, [target, filters, searchText, status.state]);\n var handleTest = react.useCallback(function () {\n if (loading || isEmptyCredential) {\n return; // Do not repeat request or send when input fields are empty\n }\n setLoading(true);\n var test = {\n id: "test-request-for-".concat(target.connectUrl),\n targetUrl: target.connectUrl,\n };\n testPool.add(test);\n addSubscription(context.api.checkCredentialForTarget(target, credential).subscribe(function (err) {\n setLoading(false);\n testPool.delete(test);\n setStatus({\n error: err === null || err === void 0 ? void 0 : err.error,\n state: !err\n ? CredentialTestState.VALID\n : err.severeLevel === constants/* ValidatedOptions.warning */.LD.warning\n ? CredentialTestState.NA\n : CredentialTestState.INVALID,\n });\n }));\n }, [setStatus, addSubscription, context.api, target, credential, isEmptyCredential, loading, testPool]);\n return isShowed ? (react.createElement(Tr.Tr, CredentialTestTable_assign({}, props, { id: "".concat(target.connectUrl, "-test-row") }),\n react.createElement(Td.Td, { dataLabel: "Target" }, !target.alias ? target.connectUrl : "".concat(target.alias, " (").concat(target.connectUrl, ")")),\n react.createElement(Td.Td, { dataLabel: "Status", textCenter: true }, loading ? (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(LinearDotSpinner, null))) : status.state === CredentialTestState.INVALID || status.state === CredentialTestState.NA ? (react.createElement(Popover/* Popover */.J, { "aria-label": "Test Result Details (".concat(target.connectUrl, ")"), alertSeverityVariant: status.state === CredentialTestState.INVALID ? \'danger\' : \'warning\', headerIcon: status.state === CredentialTestState.INVALID ? react.createElement(exclamation_circle_icon/* ExclamationCircleIcon */.$O, null) : react.createElement(warning_triangle_icon/* WarningTriangleIcon */.T6, null), headerContent: react.createElement("div", null, status.state === CredentialTestState.INVALID ? \'Test failed\' : \'Caution\'), bodyContent: react.createElement("div", null, ((_b = status.error) === null || _b === void 0 ? void 0 : _b.message) || \'Unknown error\'), appendTo: utils/* portalRoot */.tO },\n react.createElement(Label/* Label */._, { style: { cursor: \'pointer\' }, color: getColor(status.state) }, status.state))) : (react.createElement(Label/* Label */._, { color: getColor(status.state) }, status.state))),\n react.createElement(Td.Td, { textCenter: true },\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", className: "credential__test-button", isDisabled: loading || isEmptyCredential, onClick: handleTest }, "Test")))) : null;\n};\nvar CredentialToolbar = function (_a) {\n var onFilter = _a.onFilter, onSearch = _a.onSearch, matchedTargets = _a.matchedTargets, filters = _a.filters, searchText = _a.searchText, props = CredentialTestTable_rest(_a, ["onFilter", "onSearch", "matchedTargets", "filters", "searchText"]);\n var credential = useAuthCredential()[0];\n var _b = react.useState(false), disableTest = _b[0], setDisableTest = _b[1];\n var handleTestAll = react.useCallback(function () {\n var buttons = document.getElementsByClassName(\'credential__test-button\');\n for (var i = 0; i < buttons.length; i++) {\n var btn = buttons[i];\n btn.click();\n }\n }, []);\n react.useEffect(function () {\n var buttons = document.getElementsByClassName(\'credential__test-button\');\n var disabled = !matchedTargets.length ||\n ((filters.length || searchText) && (!buttons || !buttons.length)) ||\n credential.username === \'\' ||\n credential.password === \'\';\n setDisableTest(disabled);\n }, [filters, searchText, credential, setDisableTest, matchedTargets]);\n return (react.createElement(Toolbar/* Toolbar */.o, CredentialTestTable_assign({}, props, { isSticky: true, id: "credential-test-table-toolbar", "aria-label": "credential-test-table-toolbar" }),\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarItem/* ToolbarItem */.E, { variant: "search-filter" },\n react.createElement(SearchInput/* SearchInput */.M, { "aria-label": "Items example search input", onChange: onSearch, value: searchText })),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(StatusFilter, { onChange: onFilter, filters: filters })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Tooltip/* Tooltip */.u, { content: \'Test credentials against all matching targets.\', appendTo: utils/* portalRoot */.tO },\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleTestAll, isAriaDisabled: disableTest }, "Test All"))))));\n};\nvar StatusFilter = function (_a) {\n var onChange = _a.onChange, filters = _a.filters, props = CredentialTestTable_rest(_a, ["onChange", "filters"]);\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var handleToggle = react.useCallback(function () { return setIsOpen(function (old) { return !old; }); }, [setIsOpen]);\n var handleSelect = react.useCallback(function (_, value) {\n var old = filters;\n onChange && onChange(old.includes(value) ? old.filter(function (v) { return v !== value; }) : CredentialTestTable_spreadArray(CredentialTestTable_spreadArray([], old, true), [value], false));\n }, [onChange, filters]);\n return (react.createElement(Select/* Select */.P, CredentialTestTable_assign({}, props, { variant: selectConstants/* SelectVariant.checkbox */.TM.checkbox, "aria-label": "Status", onToggle: handleToggle, onSelect: handleSelect, selections: filters, isOpen: isOpen, placeholderText: "Status" }), Object.values(CredentialTestState).map(function (state) { return (react.createElement(SelectOption/* SelectOption */.$, { key: state, value: state },\n react.createElement(Label/* Label */._, { color: getColor(state) }, state))); })));\n};\n\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/Credentials/CreateCredentialModal.tsx\nvar CreateCredentialModal_assign = (undefined && undefined.__assign) || function () {\n CreateCredentialModal_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CreateCredentialModal_assign.apply(this, arguments);\n};\nvar CreateCredentialModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar CreateCredentialModal = function (_a) {\n var visible = _a.visible, onDismiss = _a.onDismiss, onPropsSave = _a.onPropsSave, props = CreateCredentialModal_rest(_a, ["visible", "onDismiss", "onPropsSave"]);\n var matchExpreRef = react.useRef(new SearchExprService());\n var loadingRef = react.useRef(new utils/* StreamOf */.NZ(false));\n var credentialRef = react.useRef(new utils/* StreamOf */.NZ({ username: \'\', password: \'\' }));\n var testPoolRef = react.useRef(new Set());\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState(false), inProgress = _b[0], setInProgress = _b[1];\n react.useEffect(function () {\n addSubscription(loadingRef.current.get().subscribe(setInProgress));\n }, [addSubscription, loadingRef, setInProgress]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: visible, tabIndex: 0, variant: Modal/* ModalVariant.large */.v.large, showClose: !inProgress, className: "add-credential-modal", onClose: onDismiss, title: "Store Credentials", description: "Create stored credentials for target JVMs. Cryostat will use these credentials to connect to Cryostat agents or target JVMs over JMX (if required)." },\n react.createElement(SearchExprServiceContext.Provider, { value: matchExpreRef.current },\n react.createElement(CredentialContext.Provider, { value: credentialRef.current },\n react.createElement(TestPoolContext.Provider, { value: testPoolRef.current },\n react.createElement(Grid/* Grid */.r, { hasGutter: true, style: { height: \'100%\' } },\n react.createElement(GridItem/* GridItem */.P, { xl: 4 },\n react.createElement(Card/* Card */.Z, { isFullHeight: true, isFlat: true },\n react.createElement(CardBody/* CardBody */.e, { className: "overflow-auto" },\n react.createElement(AuthForm, CreateCredentialModal_assign({}, props, { onDismiss: onDismiss, onPropsSave: onPropsSave, progressChange: setInProgress }))))),\n react.createElement(GridItem/* GridItem */.P, { xl: 8 },\n react.createElement(Card/* Card */.Z, { isFullHeight: true, isFlat: true },\n react.createElement(CardBody/* CardBody */.e, { className: "overflow-auto" },\n react.createElement(FormHelper, null))))))))));\n};\nvar AuthForm = function (_a) {\n var onDismiss = _a.onDismiss, onPropsSave = _a.onPropsSave, progressChange = _a.progressChange, props = CreateCredentialModal_rest(_a, ["onDismiss", "onPropsSave", "progressChange"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var matchExprService = react.useContext(SearchExprServiceContext);\n var _b = react.useState(\'\'), matchExpression = _b[0], setMatchExpression = _b[1];\n var _c = react.useState(constants/* ValidatedOptions.default */.LD["default"]), matchExpressionValid = _c[0], setMatchExpressionValid = _c[1];\n var _d = useAuthCredential(true), _ = _d[0], setCredential = _d[1];\n var testPool = react.useContext(TestPoolContext);\n var _e = react.useState(false), saving = _e[0], setSaving = _e[1];\n var _f = react.useState(false), isDisabled = _f[0], setIsDisabled = _f[1];\n var _g = react.useState([]), targets = _g[0], setTargets = _g[1];\n var onSave = react.useCallback(function (username, password) {\n setSaving(true);\n addSubscription(context.api.postCredentials(matchExpression, username, password).subscribe(function (ok) {\n setSaving(false);\n if (ok) {\n onPropsSave();\n }\n }));\n }, [addSubscription, onPropsSave, context.api, matchExpression, setSaving]);\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n react.useEffect(function () {\n var validation = constants/* ValidatedOptions.default */.LD["default"];\n if (matchExpression !== \'\' && targets.length > 0) {\n try {\n var atLeastOne = targets.some(function (t) {\n var res = (0,utils/* evaluateTargetWithExpr */.T9)(t, matchExpression);\n if (typeof res === \'boolean\') {\n return res;\n }\n throw new Error(\'The expression matching failed.\');\n });\n validation = atLeastOne ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.warning */.LD.warning;\n }\n catch (err) {\n validation = constants/* ValidatedOptions.error */.LD.error;\n }\n }\n setMatchExpressionValid(validation);\n }, [matchExpression, targets, setMatchExpressionValid]);\n react.useEffect(function () {\n progressChange && progressChange(saving);\n }, [saving, progressChange]);\n react.useEffect(function () {\n // Polling test pool\n // 16ms gap or 60fps is smooth but not too fast.\n addSubscription((0,interval/* interval */.F)(16)\n .pipe((0,map/* map */.U)(function () { return testPool.size > 0; }), (0,distinctUntilChanged/* distinctUntilChanged */.x)())\n .subscribe(setIsDisabled));\n }, [testPool, setIsDisabled, addSubscription]);\n return (react.createElement(CredentialAuthForm, CreateCredentialModal_assign({}, props, { onSave: onSave, onDismiss: onDismiss, focus: false, loading: saving, isDisabled: isDisabled, onCredentialChange: setCredential }),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Match Expression", labelIcon: react.createElement(Popover/* Popover */.J, { appendTo: utils/* portalRoot */.tO, headerContent: "Match Expression Hint", bodyContent: react.createElement(react.Fragment, null,\n "Try an expression like:",\n react.createElement(MatchExpressionHint, { target: targets[0] })), hasAutoWidth: true },\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", "aria-label": "More info for match expression field", onClick: function (e) { return e.preventDefault(); }, className: "pf-c-form__group-label-help" },\n react.createElement(help_icon/* HelpIcon */.by, null))), isRequired: true, fieldId: "match-expression", helperText: matchExpressionValid === constants/* ValidatedOptions.warning */.LD.warning\n ? "Warning: Match expression matches no targets."\n : "\\n Enter a match expression. This is a Java-like code snippet that is evaluated against each target\\n application to determine whether the rule should be applied.", helperTextInvalid: "IThe expression matching failed.", validated: matchExpressionValid },\n react.createElement(TextArea/* TextArea */.Kx, { value: matchExpression, isDisabled: isDisabled, isRequired: true, type: "text", id: "rule-matchexpr", "aria-describedby": "rule-matchexpr-helper", onChange: function (v) {\n setMatchExpression(v);\n matchExprService.setSearchExpression(v);\n }, validated: matchExpressionValid, autoFocus: true, autoResize: true, resizeOrientation: "vertical" }))));\n};\nvar FormHelper = function (_a) {\n var props = CreateCredentialModal_rest(_a, []);\n var alertOptions = react.useMemo(function () { return ({ hideActions: true }); }, []);\n var _b = react.useState(\'visualizer\'), activeTab = _b[0], setActiveTab = _b[1];\n var handleTabChange = react.useCallback(function (_, key) { return setActiveTab("".concat(key)); }, [setActiveTab]);\n return (react.createElement(Tabs/* Tabs */.m, CreateCredentialModal_assign({}, props, { activeKey: activeTab, onSelect: handleTabChange }),\n react.createElement(Tab/* Tab */.O, { eventKey: \'visualizer\', title: react.createElement(react.Fragment, null,\n react.createElement(TabTitleIcon/* TabTitleIcon */.f, null,\n react.createElement(topology_icon/* TopologyIcon */["if"], null)),\n react.createElement(TabTitleText/* TabTitleText */.T, null, "Visualizer")) },\n react.createElement("div", { style: { marginTop: \'1em\', height: \'100%\' } },\n react.createElement(MatchExpressionVisualizer, { alertOptions: alertOptions }))),\n react.createElement(Tab/* Tab */.O, { eventKey: \'test\', title: react.createElement(react.Fragment, null,\n react.createElement(TabTitleIcon/* TabTitleIcon */.f, null,\n react.createElement(flask_icon/* FlaskIcon */.Vz, null)),\n react.createElement(TabTitleText/* TabTitleText */.T, null, "Test")) },\n react.createElement(CredentialTestTable, null))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/WarningResolver.tsx\nvar WarningResolver_assign = (undefined && undefined.__assign) || function () {\n WarningResolver_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return WarningResolver_assign.apply(this, arguments);\n};\nvar WarningResolver_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar WarningResolverAsLink = function (_a) {\n var to = _a.to, children = _a.children, props = WarningResolver_rest(_a, ["to", "children"]);\n return (React.createElement(Link, WarningResolver_assign({ to: to }, props), children));\n};\nvar WarningResolverAsActionButton = function (_a) {\n var targetNode = _a.targetNode, onClick = _a.onClick, children = _a.children, props = WarningResolver_rest(_a, ["targetNode", "onClick", "children"]);\n var history = useHistory();\n var services = React.useContext(ServiceContext);\n var notifications = React.useContext(NotificationsContext);\n var handleClick = React.useCallback(function () {\n onClick && onClick(targetNode, { history: history, services: services, notifications: notifications });\n }, [onClick, targetNode, history, services, notifications]);\n return (React.createElement(Button, WarningResolver_assign({}, props, { onClick: handleClick }), children));\n};\nvar WarningResolverAsCredModal = function (_a) {\n var children = _a.children, props = WarningResolver_rest(_a, ["children"]);\n var _b = react.useState(false), showAuthModal = _b[0], setShowAuthModal = _b[1];\n var handleAuthModalClose = react.useCallback(function () {\n setShowAuthModal(false);\n }, [setShowAuthModal]);\n var handleAuthModalOpen = react.useCallback(function () {\n setShowAuthModal(true);\n }, [setShowAuthModal]);\n return (react.createElement(react.Fragment, null,\n react.createElement(CreateCredentialModal, WarningResolver_assign({ visible: showAuthModal, onDismiss: handleAuthModalClose, onPropsSave: handleAuthModalClose }, props)),\n react.createElement("div", { onClick: handleAuthModalOpen }, children)));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/utils.tsx\nvar Shared_utils_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\nvar DiscoveryTreeContext = react.createContext(DEFAULT_EMPTY_UNIVERSE);\nvar nodeTypeToAbbr = function (type) {\n // Keep uppercases (or uppercase whole word if none) and retain first 4 charaters.\n return (type.replace(/[^A-Z]/g, \'\') || type.toUpperCase()).slice(0, 4);\n};\nvar getAllLeaves = function (root) {\n if (isTargetNode(root)) {\n return [root];\n }\n var INIT = [];\n return root.children.reduce(function (prev, curr) { return prev.concat(getAllLeaves(curr)); }, INIT);\n};\nvar flattenTree = function (node, includeUniverse) {\n if (isTargetNode(node)) {\n return [node];\n }\n var INIT = [];\n var allChildren = node.children.reduce(function (prev, curr) { return prev.concat(flattenTree(curr)); }, INIT);\n if (node.nodeType === NodeType.UNIVERSE && !includeUniverse) {\n return Shared_utils_spreadArray([], allChildren, true);\n }\n return Shared_utils_spreadArray([node], allChildren, true);\n};\nvar getUniqueNodeTypes = function (nodes) {\n return Array.from(new Set(nodes.map(function (n) { return n.nodeType; })));\n};\nvar getUniqueGroupId = function (group) {\n return "".concat(group.id);\n};\nvar getUniqueTargetId = function (target) {\n return "".concat(target.id);\n};\nvar getStatusTargetNode = function (node) {\n if (isTargetNode(node)) {\n return node.target.jvmId\n ? []\n : [\n dist_esm/* NodeStatus.warning */.e49.warning,\n {\n title: \'Failed to compute JVM ID\',\n description: "Target ".concat(node.target.alias, " might be missing credentials."),\n callForAction: [\n react.createElement(WarningResolverAsCredModal, { key: "".concat(node.target.alias, "-resolver-as-credential-modal") },\n react.createElement(Button_Button/* Button */.zx, { variant: "link", isSmall: true, style: { padding: 0 } }, "Add credentials")),\n ],\n },\n ];\n }\n return [];\n};\nvar actionFactory = function (element, variant, actionFilter) {\n if (variant === void 0) { variant = \'contextMenuItem\'; }\n if (actionFilter === void 0) { actionFilter = function (_) { return true; }; }\n var data = element.getData();\n var isGroup = !isTargetNode(data);\n var filtered = nodeActions.filter(function (action) {\n return (actionFilter(action) &&\n (action.isGroup || false) === isGroup &&\n (!action.includeList || action.includeList.includes(data.nodeType)) &&\n (!action.blockList || !action.blockList.includes(data.nodeType)));\n });\n // Remove trailing separator\n var stop = filtered.length - 1;\n for (; stop >= 0; stop--) {\n if (!filtered[stop].isSeparator) {\n break;\n }\n }\n filtered = stop >= 0 ? filtered.slice(0, stop + 1) : [];\n return filtered.map(function (_a, index) {\n var isSeparator = _a.isSeparator, key = _a.key, title = _a.title, isDisabled = _a.isDisabled, action = _a.action;\n if (isSeparator) {\n return react.createElement(dist_esm/* ContextMenuSeparator */.uPy, { key: "separator-".concat(index) });\n }\n return (react.createElement(ContextMenuItem, { key: key, element: element, onClick: action, variant: variant, isDisabled: isDisabled }, title));\n });\n};\nvar isGraphElement = function (element) {\n return element.getGraph !== undefined;\n};\nvar COLLAPSE_EXEMPTS = [NodeType.NAMESPACE, NodeType.REALM, NodeType.UNIVERSE];\n// For searching\nvar isGroupNodeFiltered = function (groupNode, filters) {\n if (!filters || !filters[groupNode.nodeType]) {\n return true;\n }\n var filter = filters[groupNode.nodeType];\n var matched = true;\n if (filter.Name && filter.Name.length) {\n matched = matched && filter.Name.includes(groupNode.name);\n }\n if (filter.Label && filter.Label.length) {\n matched =\n matched && Object.entries(groupNode.labels).filter(function (_a) {\n var k = _a[0], v = _a[1];\n return filter.Label.includes("".concat(k, "=").concat(v));\n }).length > 0;\n }\n return matched;\n};\nvar isTargetNodeFiltered = function (_a, filters) {\n var target = _a.target;\n if (!filters) {\n return true;\n }\n var matched = true;\n if (filters.Alias && filters.Alias.length) {\n matched = matched && filters.Alias.includes(target.alias);\n }\n if (filters.ConnectionUrl && filters.ConnectionUrl.length) {\n matched = matched && filters.ConnectionUrl.includes(target.connectUrl);\n }\n if (filters.JvmId && filters.JvmId.length) {\n matched = matched && target.jvmId !== undefined && filters.JvmId.includes(target.jvmId);\n }\n if (filters.Label && filters.Label.length) {\n matched =\n matched && Object.entries(target.labels || {}).filter(function (_a) {\n var k = _a[0], v = _a[1];\n return filters.Label.includes("".concat(k, "=").concat(v));\n }).length > 0;\n }\n if (filters.Annotation && filters.Annotation.length) {\n var annotations = target.annotations;\n matched =\n matched &&\n Shared_utils_spreadArray(Shared_utils_spreadArray([], Object.entries((annotations === null || annotations === void 0 ? void 0 : annotations.cryostat) || {}), true), Object.entries((annotations === null || annotations === void 0 ? void 0 : annotations.platform) || {}), true).filter(function (_a) {\n var k = _a[0], v = _a[1];\n return filters.Annotation.includes("".concat(k, "=").concat(v));\n }).length > 0;\n }\n return matched;\n};\nvar SearchExprService = /** @class */ (function () {\n function SearchExprService() {\n this._state$ = new BehaviorSubject/* BehaviorSubject */.X(\'\');\n }\n SearchExprService.prototype.searchExpression = function () {\n return this._state$.asObservable();\n };\n SearchExprService.prototype.setSearchExpression = function (expr) {\n this._state$.next(expr);\n };\n return SearchExprService;\n}());\n\nvar SearchExprServiceContext = react.createContext(new SearchExprService());\nvar useSearchExpression = function (debounceMs) {\n if (debounceMs === void 0) { debounceMs = 0; }\n var _a = react.useState(\'\'), expr = _a[0], setExpr = _a[1];\n var exprSvc = react.useContext(SearchExprServiceContext);\n var _subRef = react.useRef();\n react.useEffect(function () {\n _subRef.current = exprSvc.searchExpression().pipe((0,debounceTime/* debounceTime */.b)(debounceMs)).subscribe(setExpr);\n return function () { var _a; return (_a = _subRef.current) === null || _a === void 0 ? void 0 : _a.unsubscribe(); };\n }, [_subRef, setExpr, exprSvc, debounceMs]);\n var handleChange = react.useCallback(function (value) {\n exprSvc.setSearchExpression(value);\n }, [exprSvc]);\n return [expr, handleChange];\n};\nvar isTargetMatched = function (_a, matchExpression) {\n var target = _a.target;\n try {\n var res = (0,utils/* evaluateTargetWithExpr */.T9)(target, matchExpression);\n if (typeof res === \'boolean\') {\n return res;\n }\n return false;\n }\n catch (err) {\n return false;\n }\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/NodeActions.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar NodeActions_assign = (undefined && undefined.__assign) || function () {\n NodeActions_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return NodeActions_assign.apply(this, arguments);\n};\nvar NodeActions_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ContextMenuItem = function (_a) {\n var children = _a.children, element = _a.element, onClick = _a.onClick, variant = _a.variant, isDisabled = _a.isDisabled, props = NodeActions_rest(_a, ["children", "element", "onClick", "variant", "isDisabled"]);\n var history = (0,react_router/* useHistory */.k6)();\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var services = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var elementSubjRef = react.useRef(new Subject/* Subject */.x());\n var elementSubj = elementSubjRef.current;\n var _b = react.useState(false), disabled = _b[0], setDisabled = _b[1];\n var handleOnclick = react.useCallback(function (e) {\n e.stopPropagation();\n onClick && onClick(element, { history: history, services: services, notifications: notifications });\n }, [onClick, history, services, notifications, element]);\n react.useEffect(function () {\n if (isDisabled) {\n addSubscription(elementSubj\n .pipe((0,switchMap/* switchMap */.w)(function (element) { return isDisabled(element, { services: services, notifications: notifications, history: history }); }))\n .subscribe(setDisabled));\n }\n }, [addSubscription, elementSubj, isDisabled, services, notifications, history]);\n react.useEffect(function () {\n elementSubj.next(element);\n }, [elementSubj, element]);\n var Component;\n switch (variant) {\n case \'contextMenuItem\':\n Component = dist_esm/* ContextMenuItem */.Zox;\n break;\n case \'dropdownItem\':\n Component = DropdownItem/* DropdownItem */.h;\n break;\n default:\n throw new Error("Unknown variant: ".concat(variant));\n }\n return (react.createElement(Component, NodeActions_assign({}, props, { onClick: handleOnclick, isDisabled: disabled }), children));\n};\nvar QUICK_RECORDING_NAME = \'cryostat_topology_action\';\nvar QUICK_RECORDING_LABEL_KEY = \'cryostat.io.topology-group\';\nvar isQuickRecording = function (recording) {\n return recording.name === QUICK_RECORDING_NAME;\n};\nvar isQuickRecordingExist = function (group, _a) {\n var services = _a.services;\n var svcUrls = new Set(getAllLeaves(group).map(function (tn) { return tn.target.connectUrl; }));\n var filterFn = function (e) {\n var targetId = getConnectUrlFromEvent(e);\n var recording = e.message.recording;\n return targetId !== undefined && svcUrls.has(targetId) && isQuickRecording(recording);\n };\n return (0,merge/* merge */.T)(services.api.groupHasRecording(group, { name: QUICK_RECORDING_NAME }), services.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingCreated */.mN.ActiveRecordingCreated).pipe((0,filter/* filter */.h)(filterFn), (0,map/* map */.U)(function (_) { return true; })), services.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingDeleted */.mN.ActiveRecordingDeleted).pipe((0,filter/* filter */.h)(filterFn), (0,debounceTime/* debounceTime */.b)(500), (0,map/* map */.U)(function (_) { return services.api.groupHasRecording(group, { name: QUICK_RECORDING_NAME }); })));\n};\nvar nodeActions = [\n {\n key: \'VIEW_DASHBOARD\',\n action: function (element, _a) {\n var history = _a.history, services = _a.services;\n var targetNode = element.getData();\n services.target.setTarget(targetNode.target);\n history.push(\'/\');\n },\n title: \'View Dashboard\',\n },\n {\n key: \'VIEW_RECORDINGS\',\n action: function (element, _a) {\n var history = _a.history, services = _a.services;\n var targetNode = element.getData();\n services.target.setTarget(targetNode.target);\n history.push(\'/recordings\');\n },\n title: \'View Recordings\',\n },\n { key: \'\', isSeparator: true },\n {\n key: \'CREATE_RECORDINGS\',\n action: function (element, _a) {\n var history = _a.history, services = _a.services;\n var targetNode = element.getData();\n services.target.setTarget(targetNode.target);\n history.push(\'/recordings/create\');\n },\n title: \'Create Recordings\',\n },\n {\n key: \'CREATE_RULES\',\n action: function (element, _a) {\n var history = _a.history, services = _a.services;\n var targetNode = element.getData();\n services.target.setTarget(targetNode.target);\n history.push(\'/rules/create\');\n },\n title: \'Create Automated Rules\',\n },\n { key: \'\', isSeparator: true },\n {\n key: \'DELETE_TARGET\',\n action: function (element, _a) {\n var services = _a.services;\n var targetNode = element.getData();\n services.api.deleteTarget(targetNode.target).subscribe(function () { return undefined; });\n },\n title: \'Delete Target\',\n includeList: [NodeType.CUSTOM_TARGET],\n },\n {\n key: \'GROUP_START_RECORDING\',\n title: \'Start recording\',\n isGroup: true,\n action: function (element, _a) {\n var services = _a.services, notifications = _a.notifications;\n var group = element.getData();\n services.api\n .graphql("\\n query StartRecordingForGroup($filter: EnvironmentNodeFilterInput, $recordingName: String!, $labels: String) {\\n environmentNodes(filter: $filter) {\\n name\\n descendantTargets {\\n name\\n doStartRecording(recording: {\\n name: $recordingName,\\n template: \\"Continuous\\",\\n templateType: \\"TARGET\\",\\n duration: 0,\\n restart: true,\\n metadata: {\\n labels: $labels\\n },\\n }) {\\n name\\n state\\n }\\n }\\n }\\n }\\n ", {\n filter: { id: group.id },\n recordingName: QUICK_RECORDING_NAME,\n labels: services.api.stringifyRecordingLabels([\n {\n key: QUICK_RECORDING_LABEL_KEY,\n value: group.name.replace(/[\\s+-]/g, \'_\'),\n },\n ]),\n }, false, true)\n .subscribe(function (body) {\n notifyGroupActionErrors(\'GROUP_START_RECORDING\', group, body, notifications);\n });\n },\n },\n {\n key: \'GROUP_ARCHIVE_RECORDING\',\n title: \'Archive recording\',\n isGroup: true,\n action: function (element, _a) {\n var services = _a.services, notifications = _a.notifications;\n var group = element.getData();\n services.api\n .graphql("\\n query DeleteRecordingForGroup ($groupFilter: EnvironmentNodeFilterInput, $recordingFilter: ActiveRecordingFilterInput){\\n environmentNodes(filter: $groupFilter) {\\n name\\n descendantTargets {\\n name\\n recordings {\\n active(filter: $recordingFilter) {\\n data {\\n doArchive {\\n name\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n ", {\n groupFilter: { id: group.id },\n recordingFilter: { name: QUICK_RECORDING_NAME },\n }, false, true)\n .subscribe(function (body) {\n notifyGroupActionErrors(\'GROUP_ARCHIVE_RECORDING\', group, body, notifications);\n });\n },\n isDisabled: function (element, utils) {\n return isQuickRecordingExist(element.getData(), utils).pipe((0,map/* map */.U)(function (exist) { return !exist; }));\n },\n },\n {\n key: \'GROUP_STOP_RECORDING\',\n title: \'Stop recording\',\n isGroup: true,\n action: function (element, _a) {\n var services = _a.services, notifications = _a.notifications;\n var group = element.getData();\n services.api\n .graphql("\\n query StopRecordingForGroup ($groupFilter: EnvironmentNodeFilterInput, $recordingFilter: ActiveRecordingFilterInput){\\n environmentNodes(filter: $groupFilter) {\\n name\\n descendantTargets {\\n name\\n recordings {\\n active(filter: $recordingFilter) {\\n data {\\n doStop {\\n name\\n state\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n ", {\n groupFilter: { id: group.id },\n recordingFilter: { name: QUICK_RECORDING_NAME },\n }, false, true)\n .subscribe(function (body) {\n notifyGroupActionErrors(\'GROUP_STOP_RECORDING\', group, body, notifications);\n });\n },\n isDisabled: function (element, utils) {\n return isQuickRecordingExist(element.getData(), utils).pipe((0,map/* map */.U)(function (exist) { return !exist; }));\n },\n },\n { key: \'\', isSeparator: true, isGroup: true },\n {\n key: \'GROUP_DELETE_RECORDING\',\n title: \'Delete recording\',\n isGroup: true,\n action: function (element, _a) {\n var services = _a.services, notifications = _a.notifications;\n var group = element.getData();\n services.api\n .graphql("\\n query DeleteRecordingForGroup ($groupFilter: EnvironmentNodeFilterInput, $recordingFilter: ActiveRecordingFilterInput){\\n environmentNodes(filter: $groupFilter) {\\n name\\n descendantTargets {\\n name\\n recordings {\\n active(filter: $recordingFilter) {\\n data {\\n doDelete {\\n name\\n state\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n ", {\n groupFilter: { id: group.id },\n recordingFilter: { name: QUICK_RECORDING_NAME },\n }, false, true)\n .subscribe(function (body) {\n notifyGroupActionErrors(\'GROUP_DELETE_RECORDING\', group, body, notifications);\n });\n },\n isDisabled: function (element, utils) {\n return isQuickRecordingExist(element.getData(), utils).pipe((0,map/* map */.U)(function (exist) { return !exist; }));\n },\n },\n];\nvar notifyGroupActionErrors = function (type, group, _a, notifications) {\n var errors = _a.errors, data = _a.data;\n if (errors) {\n var actionVerb_1 = type\n .split(\'_\')\n .slice(1)\n .map(function (str) { return str.toLowerCase(); })\n .join(\' \');\n var groupDisplay_1 = "".concat(group.nodeType, " ").concat(group.name);\n errors.forEach(function (err) {\n var _a, _b;\n // Location of failed target node\n var searchIndex = Number(err.path[err.path.indexOf(\'descendantTargets\') + 1]);\n if (searchIndex == undefined) {\n notifications.danger("Could not ".concat(actionVerb_1, " for a Target in ").concat(groupDisplay_1), err.message);\n }\n // Get the name of failed target node\n var name = (_b = (_a = data.environmentNodes[0]) === null || _a === void 0 ? void 0 : _a.descendantTargets[searchIndex]) === null || _b === void 0 ? void 0 : _b.name;\n if (name) {\n notifications.danger("Could not ".concat(actionVerb_1, " for Target ").concat(name, " in ").concat(groupDisplay_1), err.message);\n }\n else {\n notifications.danger("Could not ".concat(actionVerb_1, " for a Target in ").concat(groupDisplay_1), err.message);\n }\n });\n }\n};\nvar ActionDropdown = function (_a) {\n var className = _a.className, actions = _a.actions, position = _a.position, menuAppendTo = _a.menuAppendTo, props = NodeActions_rest(_a, ["className", "actions", "position", "menuAppendTo"]);\n var _b = react.useState(false), actionOpen = _b[0], setActionOpen = _b[1];\n var handleClose = react.useCallback(function () { return setActionOpen(false); }, [setActionOpen]);\n return (react.createElement(Dropdown/* Dropdown */.L, NodeActions_assign({}, props, { className: (0,esm.css)(className), "aria-label": \'entity-action-menu\', position: position || \'right\', menuAppendTo: menuAppendTo || document.body, onSelect: handleClose, isOpen: actionOpen, onClick: function (e) { return e.stopPropagation(); }, toggle: react.createElement(DropdownToggle/* DropdownToggle */.Z, { onToggle: setActionOpen }, "Actions"), dropdownItems: actions })));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Badge/Badge.js\nvar Badge = __webpack_require__(68425);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Alert/Alert.js + 3 modules\nvar Alert = __webpack_require__(88754);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Alert/AlertActionCloseButton.js\nvar AlertActionCloseButton = __webpack_require__(56715);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/Table/ExpandableRowContent.js\nvar ExpandableRowContent = __webpack_require__(2613);\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/Entity/EntityAnnotations.tsx\nvar EntityAnnotations_assign = (undefined && undefined.__assign) || function () {\n EntityAnnotations_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return EntityAnnotations_assign.apply(this, arguments);\n};\nvar EntityAnnotations_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar EntityAnnotations = function (_a) {\n var annotations = _a.annotations, maxDisplay = _a.maxDisplay, props = EntityAnnotations_rest(_a, ["annotations", "maxDisplay"]);\n var _transformedAnnotationGroups = react.useMemo(function () {\n return annotations\n ? Object.keys(annotations).map(function (groupK) { return ({\n groupLabel: groupK,\n annotations: Object.keys(annotations[groupK]).map(function (k) { return "".concat(k, "=").concat(annotations[groupK][k]); }),\n }); })\n : [];\n }, [annotations]);\n return _transformedAnnotationGroups.length ? (react.createElement("div", EntityAnnotations_assign({ className: "entity-overview__displayed-annotations-wrapper" }, props), _transformedAnnotationGroups.map(function (group) { return (react.createElement("div", { className: "entity-overview__displayed-annotations", key: group.groupLabel },\n react.createElement(LabelGroup/* LabelGroup */.e, { numLabels: maxDisplay, categoryName: group.groupLabel }, group.annotations.map(function (a) { return (react.createElement(Label/* Label */._, { color: "blue", key: a, isTruncated: true }, a)); })))); }))) : (react.createElement(EmptyText, { text: "No annotations." }));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/Entity/EntityLabels.tsx\nvar EntityLabels_assign = (undefined && undefined.__assign) || function () {\n EntityLabels_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return EntityLabels_assign.apply(this, arguments);\n};\nvar EntityLabels_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar EntityLabels = function (_a) {\n var labels = _a.labels, maxDisplay = _a.maxDisplay, props = EntityLabels_rest(_a, ["labels", "maxDisplay"]);\n var _transformedLabels = react.useMemo(function () {\n return labels ? Object.keys(labels).map(function (k) { return "".concat(k, "=").concat(labels[k]); }) : [];\n }, [labels]);\n return _transformedLabels.length ? (react.createElement("div", EntityLabels_assign({ className: "entity-overview__displayed-labels-wrapper" }, props),\n react.createElement(LabelGroup/* LabelGroup */.e, { numLabels: maxDisplay }, _transformedLabels.map(function (l) { return (react.createElement(Label/* Label */._, { color: "blue", key: l, isTruncated: true }, l)); })))) : (react.createElement(EmptyText, { text: "No labels." }));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/Entity/EntityTitle.tsx\nvar EntityTitle_assign = (undefined && undefined.__assign) || function () {\n EntityTitle_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return EntityTitle_assign.apply(this, arguments);\n};\nvar EntityTitle_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar EntityTitle = function (_a) {\n var content = _a.content, badge = _a.badge, badgeTooltipContent = _a.badgeTooltipContent, props = EntityTitle_rest(_a, ["content", "badge", "badgeTooltipContent"]);\n return (react.createElement("div", EntityTitle_assign({ className: (0,esm.css)(\'entity-overview__entity-title-wrapper\') }, props),\n badge ? (react.createElement(Tooltip/* Tooltip */.u, { content: badgeTooltipContent, appendTo: utils/* portalRoot */.tO },\n react.createElement("span", { className: "entity-overview__entity-title-badge" }, badge))) : (react.createElement(react.Fragment, null)),\n content));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Shared/Entity/EntityDetails.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar EntityDetails_assign = (undefined && undefined.__assign) || function () {\n EntityDetails_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return EntityDetails_assign.apply(this, arguments);\n};\nvar EntityDetails_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EntityTab;\n(function (EntityTab) {\n EntityTab["DETAIL"] = "detail";\n EntityTab["RESOURCE"] = "resource";\n})(EntityTab || (EntityTab = {}));\nvar EntityDetails = function (_a) {\n var entity = _a.entity, className = _a.className, columnModifier = _a.columnModifier, actionFilter = _a.actionFilter, alertOptions = _a.alertOptions, props = EntityDetails_rest(_a, ["entity", "className", "columnModifier", "actionFilter", "alertOptions"]);\n var _b = react.useState(EntityTab.DETAIL), activeTab = _b[0], setActiveTab = _b[1];\n var viewContent = react.useMemo(function () {\n if (entity && isRenderable(entity)) {\n var data = entity.getData();\n var isTarget = isTargetNode(data);\n var titleContent = isTarget ? data.target.alias : data.name;\n var _actions = actionFactory(entity, \'dropdownItem\', actionFilter);\n return (react.createElement(react.Fragment, null,\n react.createElement(EntityDetailHeader, { titleContent: titleContent, alertOptions: alertOptions, badge: nodeTypeToAbbr(data.nodeType), badgeTooltipContent: data.nodeType, status: isTarget ? getStatusTargetNode(data) : [], actionDropdown: _actions.length ? react.createElement(ActionDropdown, { actions: _actions, className: \'entity-overview__action-menu\' }) : null }),\n react.createElement(Divider/* Divider */.i, null),\n react.createElement(Tabs/* Tabs */.m, { activeKey: activeTab, onSelect: function (_, tab) { return setActiveTab(tab); } },\n react.createElement(Tab/* Tab */.O, { eventKey: EntityTab.DETAIL, title: react.createElement(TabTitleText/* TabTitleText */.T, null, "Details") },\n react.createElement("div", { className: "entity-overview__wrapper" }, isTarget ? (react.createElement(TargetDetails, { targetNode: data, columnModifier: columnModifier })) : (react.createElement(GroupDetails, { envNode: data, columnModifier: columnModifier })))),\n react.createElement(Tab/* Tab */.O, { eventKey: EntityTab.RESOURCE, title: react.createElement(TabTitleText/* TabTitleText */.T, null, \'Resources\') },\n react.createElement("div", { className: "entity-overview__wrapper" }, isTarget ? react.createElement(TargetResources, { targetNode: data }) : react.createElement(GroupResources, { envNode: data }))))));\n }\n return null;\n }, [entity, setActiveTab, activeTab, columnModifier, actionFilter, alertOptions]);\n return (react.createElement("div", EntityDetails_assign({}, props, { className: (0,esm.css)(\'entity-overview\', className) }), viewContent));\n};\nvar constructHelperDescription = function (description, kind, path) {\n return (react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null, description),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(PropertyPath, { kind: kind, path: path }))));\n};\nvar TargetDetails = function (_a) {\n var targetNode = _a.targetNode, columnModifier = _a.columnModifier, props = EntityDetails_rest(_a, ["targetNode", "columnModifier"]);\n var serviceRef = react.useMemo(function () { return targetNode.target; }, [targetNode]);\n var _b = react.useState(false), isExpanded = _b[0], setExpanded = _b[1];\n var _transformedData = react.useMemo(function () {\n return [\n {\n key: \'Connection URL\',\n title: \'Connection URL\',\n helperTitle: \'Connection URL\',\n helperDescription: constructHelperDescription(\'JMX Service URL.\', \'Target\', [\'connectUrl\']),\n content: serviceRef.connectUrl,\n },\n {\n key: \'Alias\',\n title: \'Alias\',\n helperTitle: \'Alias\',\n helperDescription: constructHelperDescription(\'Connection Nickname (same as Connection URL if not specified).\', \'Target\', [\'alias\']),\n content: serviceRef.alias,\n },\n {\n key: \'JVM ID\',\n title: \'JVM ID\',\n helperTitle: \'JVM ID\',\n helperDescription: constructHelperDescription(\'The ID of the current JVM.\', \'Target\', [\'jvmId\']),\n content: serviceRef.jvmId || react.createElement(EmptyText, { text: "No JVM ID" }),\n },\n {\n key: \'Labels\',\n title: \'Labels\',\n helperTitle: \'Labels\',\n helperDescription: constructHelperDescription(\'Map of string keys and values that can be used to organize and categorize targets.\', \'Target\', [\'labels\']),\n content: react.createElement(EntityLabels, { labels: serviceRef.labels, maxDisplay: 3 }),\n },\n {\n key: \'Annotations\',\n title: \'Annotations\',\n helperTitle: \'Annotations\',\n helperDescription: constructHelperDescription(\'Annotations is an unstructured key value map stored with a target that may be set by external tools.\', \'Target\', [\'annotations\']),\n content: react.createElement(EntityAnnotations, { annotations: serviceRef.annotations, maxDisplay: 3 }),\n },\n ];\n }, [serviceRef]);\n var onToggle = react.useCallback(function () { return setExpanded(function (v) { return !v; }); }, [setExpanded]);\n return (react.createElement(react.Fragment, null,\n react.createElement(DescriptionList/* DescriptionList */.o, EntityDetails_assign({}, props, { columnModifier: columnModifier }), _transformedData.map(mapSection)),\n react.createElement(ExpandableSection/* ExpandableSection */.L, { toggleText: isExpanded ? \'Show less\' : \'Show more\', onToggle: onToggle, isExpanded: isExpanded },\n react.createElement(MBeanDetails, { isExpanded: isExpanded, connectUrl: serviceRef.connectUrl, columnModifier: columnModifier }))));\n};\nvar MBeanDetails = function (_a) {\n var isExpanded = _a.isExpanded, connectUrl = _a.connectUrl, columnModifier = _a.columnModifier;\n var context = react.useContext(Services/* ServiceContext */.o);\n var _b = utils_useDayjs(), dayjs = _b[0], dateTimeFormat = _b[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _c = react.useState({}), mbeanMetrics = _c[0], setMbeanMetrics = _c[1];\n react.useEffect(function () {\n if (isExpanded) {\n addSubscription(context.api\n .graphql("\\n query MBeanMXMetricsForTarget($connectUrl: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n mbeanMetrics {\\n runtime {\\n startTime\\n vmVendor\\n vmVersion\\n }\\n os {\\n version\\n arch\\n availableProcessors\\n }\\n }\\n }\\n }", { connectUrl: connectUrl })\n .pipe((0,map/* map */.U)(function (resp) { return resp.data.targetNodes[0].mbeanMetrics || {}; }), (0,catchError/* catchError */.K)(function (_) { return (0,of.of)({}); }))\n .subscribe(setMbeanMetrics));\n }\n }, [isExpanded, addSubscription, connectUrl, context.api, setMbeanMetrics]);\n var _collapsedData = react.useMemo(function () {\n var _a, _b, _c, _d, _e, _f, _g;\n return [\n {\n key: \'Start Time\',\n title: \'Start Time\',\n helperTitle: \'Start Time\',\n helperDescription: \'The time when this JVM process started.\',\n content: (((_a = mbeanMetrics === null || mbeanMetrics === void 0 ? void 0 : mbeanMetrics.runtime) === null || _a === void 0 ? void 0 : _a.startTime) || 0) > 0 ? (dayjs((_b = mbeanMetrics === null || mbeanMetrics === void 0 ? void 0 : mbeanMetrics.runtime) === null || _b === void 0 ? void 0 : _b.startTime).tz(dateTimeFormat.timeZone.full).format(\'LLLL\')) : (react.createElement(EmptyText, { text: "Unknown start time" })),\n },\n {\n key: \'JVM Version\',\n title: \'JVM Version\',\n helperTitle: \'JVM Version\',\n helperDescription: \'The version of the JVM.\',\n content: ((_c = mbeanMetrics.runtime) === null || _c === void 0 ? void 0 : _c.vmVersion) || react.createElement(EmptyText, { text: "Unknown JVM version" }),\n },\n {\n key: \'JVM Vendor\',\n title: \'JVM Vendor\',\n helperTitle: \'JVM Vendor\',\n helperDescription: \'The vendor who supplied this JVM\',\n content: ((_d = mbeanMetrics.runtime) === null || _d === void 0 ? void 0 : _d.vmVendor) || react.createElement(EmptyText, { text: "Unknown JVM vendor" }),\n },\n {\n key: \'Operating System Architecture\',\n title: \'Operating System Architecture\',\n helperTitle: \'Operating System Architecture\',\n helperDescription: \'The CPU architecture of the host system.\',\n content: ((_e = mbeanMetrics.os) === null || _e === void 0 ? void 0 : _e.arch) || react.createElement(EmptyText, { text: "Unknown operating system architecture" }),\n },\n {\n key: \'Operating System Version\',\n title: \'Operating System Version\',\n helperTitle: \'Operating System Version\',\n helperDescription: \'The version of the host operating system.\',\n content: ((_f = mbeanMetrics.os) === null || _f === void 0 ? void 0 : _f.version) || react.createElement(EmptyText, { text: "Unknown operating system version" }),\n },\n {\n key: \'Available Processors\',\n title: \'Available Processors\',\n helperTitle: \'Available Processors\',\n helperDescription: \'The count of total processors available to the JVM process on its host.\',\n content: ((_g = mbeanMetrics.os) === null || _g === void 0 ? void 0 : _g.availableProcessors) || react.createElement(EmptyText, { text: "Unknown number of processors" }),\n },\n ];\n }, [mbeanMetrics, dayjs, dateTimeFormat.timeZone.full]);\n return react.createElement(DescriptionList/* DescriptionList */.o, { columnModifier: columnModifier }, _collapsedData.map(mapSection));\n};\nvar GroupDetails = function (_a) {\n var envNode = _a.envNode, columnModifier = _a.columnModifier, props = EntityDetails_rest(_a, ["envNode", "columnModifier"]);\n var _transformedData = react.useMemo(function () {\n return [\n {\n key: \'Name\',\n title: \'Name\',\n helperTitle: \'Name\',\n helperDescription: \'Name of Realm (group) representing a target discovery mechanism.\',\n content: envNode.name,\n },\n {\n key: \'Labels\',\n title: \'Labels\',\n helperTitle: \'Labels\',\n helperDescription: \'Map of string keys and values that can be used to organize and categorize targets.\',\n content: react.createElement(EntityLabels, { labels: envNode.labels }),\n },\n ];\n }, [envNode]);\n return (react.createElement(DescriptionList/* DescriptionList */.o, EntityDetails_assign({}, props, { columnModifier: columnModifier }), _transformedData.map(mapSection)));\n};\nvar TargetResources = function (_a) {\n var targetNode = _a.targetNode, props = EntityDetails_rest(_a, ["targetNode"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var target = targetNode.target;\n var _b = react.useState(false), agentDetected = _b[0], setAgentDetected = _b[1];\n var checkIfAgentDetected = react.useCallback(function () {\n addSubscription(context.api\n .doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/probes"), \'v2\', undefined, true, true)\n .pipe((0,concatMap/* concatMap */.b)(function () { return (0,of.of)(true); }), (0,catchError/* catchError */.K)(function () { return (0,of.of)(false); }))\n .subscribe(setAgentDetected));\n }, [addSubscription, context.api, setAgentDetected, target]);\n react.useEffect(checkIfAgentDetected, [checkIfAgentDetected]);\n var tableConfigs = react.useMemo(function () { return [\n {\n title: \'Owned Resources\',\n columns: [\'Resource\', \'Total\'],\n rowData: TargetOwnedResourceTypeAsArray.filter(function (r) { return agentDetected || r !== \'agentProbes\'; }),\n },\n {\n title: \'Related Resources\',\n columns: [\'Resource\', \'Matching Total\'],\n rowData: TargetRelatedResourceTypeAsArray,\n },\n ]; }, [agentDetected]);\n return (react.createElement(Stack/* Stack */.K, EntityDetails_assign({}, props, { hasGutter: true }), tableConfigs.map(function (_a) {\n var title = _a.title, columns = _a.columns, rowData = _a.rowData;\n return (react.createElement(StackItem/* StackItem */.v, { key: title },\n react.createElement(Card/* Card */.Z, { isCompact: true, isFlat: true, isRounded: true },\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(CardTitle/* CardTitle */.l, null, title)),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(TableComposable/* TableComposable */.X, { variant: "compact", borders: false },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, null),\n columns.map(function (col, idx) { return (react.createElement(Th.Th, { key: col, textCenter: idx > 0 }, col)); }))),\n rowData.map(function (val) { return (react.createElement(TargetResourceItem, { key: val, targetNode: targetNode, resourceType: val })); }))))));\n })));\n};\nvar TargetResourceItem = function (_a) {\n var targetNode = _a.targetNode, resourceType = _a.resourceType, props = EntityDetails_rest(_a, ["targetNode", "resourceType"]);\n var services = react.useContext(Services/* ServiceContext */.o);\n var _b = useResources(targetNode, resourceType), resources = _b.resources, error = _b.error, loading = _b.loading;\n var _c = react.useState(false), expanded = _c[0], setExpanded = _c[1];\n var switchTarget = react.useCallback(function () { return services.target.setTarget(targetNode.target); }, [targetNode.target, services.target]);\n var ExpandedComponent = react.useMemo(function () {\n if (error || loading) {\n return Nothing;\n }\n return getExpandedResourceDetails(resourceType);\n }, [resourceType, error, loading]);\n return (react.createElement(Tbody/* Tbody */.p, { isExpanded: ExpandedComponent !== null && expanded },\n react.createElement(Tr.Tr, EntityDetails_assign({}, props),\n react.createElement(Td.Td, { expand: {\n rowIndex: (0,utils/* hashCode */.un)("".concat(targetNode.name, "-").concat(resourceType)),\n isExpanded: expanded,\n onToggle: function () { return setExpanded(function (old) { return !old; }); },\n expandId: "".concat(targetNode.name, "-").concat(resourceType, "-expanded-detail"),\n } }),\n react.createElement(Td.Td, { key: "".concat(resourceType, "-resource-name"), dataLabel: \'Resource\' }, react.createElement(react_router_dom.Link, EntityDetails_assign({}, getLinkPropsForTargetResource(resourceType), { onClick: switchTarget }), (0,utils/* splitWordsOnUppercase */.o4)(resourceType, true).join(\' \'))),\n react.createElement(Td.Td, { key: "".concat(resourceType, "-resource-count"), dataLabel: \'Total\', textCenter: true }, loading ? (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(LinearDotSpinner, null))) : error ? (react.createElement(Tooltip/* Tooltip */.u, { content: error.message, appendTo: utils/* portalRoot */.tO },\n react.createElement(warning_triangle_icon/* WarningTriangleIcon */.T6, { color: "var(--pf-global--warning-color--100)" }))) : (react.createElement(Badge/* Badge */.C, null, resources.length)))),\n react.createElement(Tr.Tr, { isExpanded: expanded },\n react.createElement(Td.Td, { colSpan: 3 },\n react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null,\n react.createElement(ExpandedComponent, { resources: resources }))))));\n};\nvar GroupResources = function (_a) {\n var envNode = _a.envNode, props = EntityDetails_rest(_a, ["envNode"]);\n var contents = react.useMemo(function () {\n return envNode.children.map(function (child) {\n var isTarget = isTargetNode(child);\n var _a = getStatusTargetNode(child), status = _a[0], extra = _a[1];\n return (react.createElement(Card/* Card */.Z, { isFlat: true, isCompact: true, key: child.name },\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Flex/* Flex */.k, null,\n react.createElement(FlexItem/* FlexItem */.B, { flex: { default: \'flex_1\' } },\n react.createElement(Tooltip/* Tooltip */.u, { content: isTarget ? child.target.connectUrl : child.name, appendTo: utils/* portalRoot */.tO },\n react.createElement("div", null,\n react.createElement(Badge/* Badge */.C, null, nodeTypeToAbbr(child.nodeType)),\n react.createElement("span", { style: { marginLeft: \'0.5em\' } }, isTarget ? child.target.alias : child.name)))),\n status === dist_esm/* NodeStatus.warning */.e49.warning ? (react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(Tooltip/* Tooltip */.u, { content: extra === null || extra === void 0 ? void 0 : extra.title, appendTo: utils/* portalRoot */.tO },\n react.createElement(warning_triangle_icon/* WarningTriangleIcon */.T6, { color: "var(--pf-global--warning-color--100)" })))) : null))));\n });\n }, [envNode]);\n return (react.createElement(Stack/* Stack */.K, EntityDetails_assign({ hasGutter: true }, props),\n react.createElement(StackItem/* StackItem */.v, { key: 0 },\n react.createElement("span", { style: { fontWeight: \'700\' } }, "Number of children of this group:"),\n react.createElement(Badge/* Badge */.C, { style: { marginLeft: \'0.5em\' } }, envNode.children.length)),\n contents.map(function (content, idx) { return (react.createElement(StackItem/* StackItem */.v, { key: idx + 1 }, content)); })));\n};\nvar EntityDetailHeader = function (_a) {\n var titleContent = _a.titleContent, badge = _a.badge, badgeTooltipContent = _a.badgeTooltipContent, actionDropdown = _a.actionDropdown, statusContent = _a.status, _b = _a.alertOptions, alertOptions = _b === void 0 ? {} : _b, props = EntityDetails_rest(_a, ["titleContent", "badge", "badgeTooltipContent", "actionDropdown", "status", "alertOptions"]);\n var status = statusContent[0], extra = statusContent[1];\n var _c = react.useState(true), showBanner = _c[0], setShowBanner = _c[1];\n return (react.createElement("div", EntityDetails_assign({ className: "entity-overview__header" }, props),\n react.createElement(Flex/* Flex */.k, null,\n react.createElement(FlexItem/* FlexItem */.B, { flex: { default: \'flex_1\' } },\n react.createElement(EntityTitle, { content: titleContent, badge: badge, badgeTooltipContent: badgeTooltipContent })),\n react.createElement(FlexItem/* FlexItem */.B, null, actionDropdown)),\n status && showBanner ? (react.createElement(Alert/* Alert */.b, { variant: status, isInline: true, title: extra === null || extra === void 0 ? void 0 : extra.title, className: \'entity-overview__alert-banner\', actionClose: react.createElement(AlertActionCloseButton/* AlertActionCloseButton */.g, { onClose: function () { return setShowBanner(false); } }) },\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, { key: \'alert-description\' }, extra === null || extra === void 0 ? void 0 : extra.description),\n (extra === null || extra === void 0 ? void 0 : extra.callForAction) && !alertOptions.hideActions ? (react.createElement(StackItem/* StackItem */.v, { key: \'alert-call-for-action\' },\n react.createElement(Flex/* Flex */.k, null, extra.callForAction.map(function (action, index) { return (react.createElement(FlexItem/* FlexItem */.B, { key: index }, action)); })))) : null))) : null));\n};\n/* harmony default export */ const Entity_EntityDetails = (EntityDetails);\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/JvmDetails/JvmDetailsCard.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar JvmDetailsCard_assign = (undefined && undefined.__assign) || function () {\n JvmDetailsCard_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return JvmDetailsCard_assign.apply(this, arguments);\n};\nvar JvmDetailsCard_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\nvar JvmDetailsCard = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState(), target = _a[0], setTarget = _a[1];\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(setTarget));\n }, [addSubscription, context.target, context.api, setTarget]);\n var wrappedTarget = react.useMemo(function () {\n if (!target) {\n return undefined;\n }\n return {\n getData: function () { return ({\n name: target.alias,\n target: target,\n nodeType: NodeType.JVM,\n labels: {},\n }); },\n };\n }, [target]);\n var actionFilter = react.useCallback(function (action) {\n return action.key !== \'VIEW_DASHBOARD\';\n }, []);\n return (react.createElement(DashboardCard, JvmDetailsCard_assign({ id: "".concat(props.dashboardId), cardSizes: JvmDetailsCardSizes, isCompact: true, cardHeader: react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement.apply(react_namespaceObject, JvmDetailsCard_spreadArray([CardActions/* CardActions */.T, null], props.actions || [], false))), style: props.isFullHeight ? {} : { height: \'36em\' } }, props),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Entity_EntityDetails, { entity: wrappedTarget, actionFilter: actionFilter }))));\n};\nvar JvmDetailsCardSizes = {\n span: {\n minimum: 4,\n default: 4,\n maximum: 12,\n },\n height: {\n // TODO: implement height resizing\n minimum: Number.NaN,\n default: Number.NaN,\n maximum: Number.NaN,\n },\n};\nvar JvmDetailsCardDescriptor = {\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n title: \'JvmDetailsCard.CARD_TITLE\',\n cardSizes: JvmDetailsCardSizes,\n description: \'JvmDetailsCard.CARD_DESCRIPTION\',\n descriptionFull: "JvmDetailsCard.CARD_DESCRIPTION_FULL",\n component: JvmDetailsCard,\n propControls: [],\n icon: react.createElement(container_node_icon/* ContainerNodeIcon */.SO, null),\n labels: [\n {\n content: \'Info\',\n color: \'blue\',\n },\n ],\n preview: react.createElement(JvmDetailsCard, { span: 12, isDraggable: false, isFullHeight: false, isResizable: false, dashboardId: 0 }),\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/dashboard-utils.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar dashboard_utils_assign = (undefined && undefined.__assign) || function () {\n dashboard_utils_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return dashboard_utils_assign.apply(this, arguments);\n};\nvar dashboard_utils_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DEFAULT_DASHBOARD_NAME = \'Default\';\nvar DRAGGABLE_REF_KLAZZ = "draggable-ref";\nvar LAYOUT_TEMPLATE_DESCRIPTION_WORD_LIMIT = 100;\nvar DashboardLayoutNamePattern = /^[a-zA-Z0-9_.-]+( [a-zA-Z0-9_.-]+)*$/;\nvar LayoutTemplateDescriptionPattern = /^[a-zA-Z0-9\\s.,\\-\'";?!@#$%^&*()[\\]_+=:{}]*$/;\nvar mockSerialCardConfig = {\n name: \'Default\',\n span: 12,\n props: {},\n};\nvar LayoutTemplateVersion;\n(function (LayoutTemplateVersion) {\n LayoutTemplateVersion["v2.3"] = "v2.3";\n})(LayoutTemplateVersion || (LayoutTemplateVersion = {}));\nvar LayoutTemplateVendor;\n(function (LayoutTemplateVendor) {\n LayoutTemplateVendor["BLANK"] = "Blank";\n LayoutTemplateVendor["CRYOSTAT"] = "Cryostat";\n LayoutTemplateVendor["USER"] = "User-submitted";\n})(LayoutTemplateVendor || (LayoutTemplateVendor = {}));\nvar mockSerialLayoutTemplate = {\n name: \'Default\',\n description: \'Default.\',\n cards: [],\n version: LayoutTemplateVersion[\'v2.3\'],\n};\n// use a provider\nvar LayoutTemplateContext = react.createContext({\n selectedTemplate: undefined,\n setSelectedTemplate: function () { return undefined; },\n isUploadModalOpen: false,\n setIsUploadModalOpen: function () { return undefined; },\n});\nvar iconify = function (vendor) {\n switch (vendor) {\n case LayoutTemplateVendor.CRYOSTAT:\n return react.createElement(ThemedCryostatLogo, null);\n case LayoutTemplateVendor.BLANK:\n return react.createElement(file_icon/* FileIcon */.aA, { style: { paddingRight: \'0.3rem\' } });\n case LayoutTemplateVendor.USER:\n return react.createElement(user_icon/* UserIcon */.tB, null);\n default:\n return react.createElement(unknown_icon/* UnknownIcon */.Tz, null);\n }\n};\nvar ThemedCryostatLogo = withThemedIcon(cryostat_icon_rgb_default_namespaceObject, cryostat_icon_rgb_reverse_namespaceObject, \'Cryostat Logo\');\nvar templatize = function (layout, name, desc) {\n return {\n name: name,\n description: desc || "Custom layout template.",\n cards: layout.cards.map(function (card) {\n var _id = card.id, cardWithoutId = dashboard_utils_rest(card, ["id"]);\n return dashboard_utils_assign({}, cardWithoutId);\n }),\n vendor: LayoutTemplateVendor.USER,\n version: LayoutTemplateVersion[\'v2.3\'],\n };\n};\nvar layoutize = function (template, name) {\n return {\n name: name,\n cards: template.cards.map(function (card) {\n return dashboard_utils_assign(dashboard_utils_assign({}, card), { id: "".concat(card.name, "-").concat((0,redux_toolkit_esm/* nanoid */.x0)()) });\n }),\n favorite: false,\n };\n};\nvar recordToLayoutTemplate = function (record, allTemplates) {\n return allTemplates.find(function (template) { return template.name === record.name && template.vendor === record.vendor; });\n};\nvar getUniqueIncrementingName = function (init, names) {\n if (init === void 0) { init = \'Custom\'; }\n var name;\n var i = 1;\n do {\n name = "".concat(init).concat(i);\n i++;\n } while (names.includes(name));\n return name;\n};\nfunction hasCardDescriptorByName(name) {\n for (var _i = 0, _a = getDashboardCards(); _i < _a.length; _i++) {\n var choice = _a[_i];\n if (choice.component.name === name) {\n return true;\n }\n }\n return false;\n}\nfunction getCardDescriptorByName(name) {\n for (var _i = 0, _a = getDashboardCards(); _i < _a.length; _i++) {\n var choice = _a[_i];\n if (choice.component.name === name) {\n return choice;\n }\n }\n throw new Error("Unknown card type selection: ".concat(name));\n}\nfunction hasCardDescriptorByTitle(title, t) {\n for (var _i = 0, _a = getDashboardCards(); _i < _a.length; _i++) {\n var choice = _a[_i];\n if (t(choice.title) === title) {\n return true;\n }\n }\n return false;\n}\nfunction getCardDescriptorByTitle(title, t) {\n for (var _i = 0, _a = getDashboardCards(); _i < _a.length; _i++) {\n var choice = _a[_i];\n if (t(choice.title) === title) {\n return choice;\n }\n }\n throw new Error("Unknown card type selection: ".concat(title));\n}\nvar getDashboardCards = function (featureLevel) {\n if (featureLevel === void 0) { featureLevel = Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT; }\n var cards = [\n JvmDetailsCardDescriptor,\n AutomatedAnalysisCardDescriptor,\n JFRMetricsChartCardDescriptor,\n MBeanMetricsChartCardDescriptor,\n ];\n return cards.filter(function (card) { return card.featureLevel >= featureLevel; });\n};\nvar RemoveCardAction = function (_a) {\n var cardIndex = _a.cardIndex;\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var handleClick = react.useCallback(function () {\n dispatch(ReduxStore_dashboardConfigDeleteCardIntent(cardIndex));\n }, [dispatch, cardIndex]);\n return (react.createElement(Button_Button/* Button */.zx, { onClick: handleClick, variant: Button_Button/* ButtonVariant.danger */.Wu.danger }, t(\'REMOVE\', { ns: \'common\' })));\n};\nvar validateCardConfig = function (_a, cardIndex) {\n var name = _a.name, props = _a.props;\n // Unsupported card type\n if (!hasCardDescriptorByName(name)) {\n return {\n errors: [\n {\n message: (react.createElement(react.Fragment, null,\n "Unknown card type: ",\n react.createElement("code", null, name),\n ".")),\n },\n ],\n callForAction: react.createElement(RemoveCardAction, { cardIndex: cardIndex }),\n };\n }\n var errs = [];\n var propControls = getCardDescriptorByName(name).propControls;\n var configPropKeys = Object.entries(props);\n // Missing props\n propControls\n .map(function (ctrl) { return ctrl.key; })\n .forEach(function (propKey) {\n var matched = configPropKeys.find(function (_a) {\n var key = _a[0], _ = _a[1];\n return key === propKey;\n });\n if (!matched) {\n errs.push({\n message: (react.createElement(react.Fragment, null,\n "Missing card property: ",\n react.createElement("code", null, propKey),\n ".")),\n });\n }\n });\n // Invalid prop valies\n configPropKeys.forEach(function (_a) {\n var propKey = _a[0], propValue = _a[1];\n var matched = propControls.find(function (crtl) { return crtl.key === propKey; });\n if (matched) {\n var values = matched.values, extras = matched.extras, kind = matched.kind;\n // FIXME: Check dynamic values\n var err = void 0;\n if (propValue === undefined || propValue === null) {\n err = {\n message: (react.createElement(react.Fragment, null,\n "Undefined value for card property: ",\n react.createElement("code", null, propKey))),\n };\n }\n else if (values && Array.isArray(values) && !values.some(function (v) { return v === propValue; })) {\n err = {\n message: (react.createElement(react.Fragment, null,\n "Invalid value ",\n react.createElement("code", null, propValue),\n " for card property: ",\n react.createElement("code", null, propKey),\n ".")),\n };\n }\n else if (extras) {\n if (kind === \'number\') {\n var valAsNum = Number(propValue);\n if (isNaN(valAsNum)) {\n err = {\n message: (react.createElement(react.Fragment, null,\n "Numeric value expected but ",\n react.createElement("code", null, typeof propValue),\n " was given for: ",\n react.createElement(react.Fragment, null, propKey),\n ".")),\n };\n }\n else {\n if ((extras.min !== undefined && valAsNum < extras.min) ||\n (extras.max !== undefined && valAsNum > extras.max)) {\n err = {\n message: (react.createElement(react.Fragment, null,\n "Value exceeding limit for card property: ",\n react.createElement("code", null, propKey),\n ".")),\n };\n }\n }\n }\n }\n err && errs.push(err);\n }\n // Unknown props are ignored\n });\n return {\n errors: errs,\n callForAction: errs.length ? react.createElement(RemoveCardAction, { cardIndex: cardIndex }) : undefined,\n };\n};\nvar transformAADescription = function (description) {\n var splitDesc = description.split(\'\\n\\n\');\n var boldRegex = /^([^:]+:\\s?)/; // match text up to and including the first colon\n return (react.createElement(react.Fragment, null, splitDesc.map(function (item, index) {\n var boldMatch = item.match(boldRegex);\n var boldText = boldMatch ? boldMatch[0] : \'\';\n var restOfText = boldMatch ? item.replace(boldRegex, \'\') : item;\n var style = index > 0 ? { paddingTop: \'0.7rem\' } : {};\n return (react.createElement("p", { key: index, style: style },\n boldText && react.createElement("strong", null, boldText),\n restOfText));\n })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/ResizableRef.tsx\nvar ResizableRef_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\nfunction normalizeAsGridSpans(val, min, max, a, b) {\n if (val < min)\n val = min;\n else if (val > max)\n val = max;\n var ans = Math.round((b - a) * ((val - min) / (max - min)) + a);\n return lodash_default().clamp(ans, a, b);\n}\nfunction handleDisabledElements(disabled) {\n var disabledElements = Array.from(document.querySelectorAll(\'.disabled-pointer\'));\n disabledElements.forEach(function (el) { return (el.style[\'pointer-events\'] = disabled ? \'none\' : \'auto\'); });\n}\nvar ResizableRef = function (_a) {\n var dashboardId = _a.cardId, cardSizes = _a.cardSizes, _props = ResizableRef_rest(_a, ["cardId", "cardSizes"]);\n var cardConfigs = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs.layouts[state.dashboardConfigs.current].cards; });\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var cardRef = react.useContext(DashboardCardContext);\n var isResizing = react.useRef(false);\n var minWidth = react.useRef(undefined);\n var maxWidth = react.useRef(undefined);\n var nearEdgeMultiplier = react.useCallback(function (mousePos) {\n var CLOSE_TO_EDGE = 0.995;\n var EDGE_MULTIPLIER = 0.9;\n if (mousePos > window.innerWidth * CLOSE_TO_EDGE) {\n return EDGE_MULTIPLIER;\n }\n else {\n return 1;\n }\n }, []);\n var callbackMouseMove = react.useCallback(function (e) {\n var mousePos = e.clientX;\n e.stopPropagation();\n if (!isResizing.current) {\n return;\n }\n if (cardRef.current) {\n cardRef.current.scrollIntoView({ behavior: \'smooth\', block: \'center\', inline: \'end\' });\n var cardRect = cardRef.current.getBoundingClientRect();\n if (minWidth.current === undefined) {\n minWidth.current = cardSizes.span.minimum * (cardRect.width / cardConfigs[dashboardId].span);\n }\n if (maxWidth.current === undefined) {\n maxWidth.current = cardSizes.span.maximum * (cardRect.width / cardConfigs[dashboardId].span);\n }\n var minCardRight = cardRect.left + minWidth.current;\n var maxCardRight = cardRect.left + maxWidth.current * nearEdgeMultiplier(mousePos);\n var newSize = mousePos;\n var gridSpan = normalizeAsGridSpans(newSize, minCardRight, maxCardRight, cardSizes.span.minimum, cardSizes.span.maximum);\n dispatch(ReduxStore_dashboardConfigResizeCardIntent(dashboardId, gridSpan));\n }\n else {\n console.error(\'cardRef.current is undefined\');\n }\n }, [dispatch, cardRef, cardConfigs, nearEdgeMultiplier, dashboardId, cardSizes]);\n var callbackMouseUp = react.useCallback(function () {\n if (!isResizing.current) {\n return;\n }\n isResizing.current = false;\n document.body.style.removeProperty(\'cursor\');\n document.removeEventListener(\'mousemove\', callbackMouseMove);\n document.removeEventListener(\'mouseup\', callbackMouseUp);\n handleDisabledElements(false);\n }, [callbackMouseMove]);\n var handleOnMouseDown = react.useCallback(function (e) {\n e.stopPropagation();\n e.preventDefault();\n document.body.style.setProperty(\'cursor\', \'col-resize\');\n document.addEventListener(\'mousemove\', callbackMouseMove);\n document.addEventListener(\'mouseup\', callbackMouseUp);\n isResizing.current = true;\n minWidth.current = undefined;\n maxWidth.current = undefined;\n handleDisabledElements(true);\n }, [callbackMouseMove, callbackMouseUp]);\n return react.createElement("div", { className: "resizable-ref", onMouseDown: handleOnMouseDown });\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/DraggableRef.tsx\nvar DraggableRef_assign = (undefined && undefined.__assign) || function () {\n DraggableRef_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return DraggableRef_assign.apply(this, arguments);\n};\nvar DraggableRef_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar getOverlapScales = function (dragIndex, hoverIndex) {\n var leftScale = OFFSET_SCALE;\n var rightScale = OFFSET_SCALE;\n if (dragIndex - hoverIndex == -1) {\n leftScale = 0;\n }\n if (dragIndex - hoverIndex == 1) {\n rightScale = 0;\n }\n return [leftScale, rightScale];\n};\nvar getBetweenScales = function (dragIndex, gapIndex) {\n var leftScale = OFFSET_SCALE;\n var rightScale = OFFSET_SCALE;\n if (dragIndex - gapIndex == 0) {\n leftScale = 0;\n }\n if (dragIndex - gapIndex == -1) {\n rightScale = 0;\n }\n return [leftScale, rightScale];\n};\nvar overlaps = function (ev, rect, scales) {\n var leftScale = scales[0], rightScale = scales[1];\n return (ev.clientX - rect.width * leftScale > rect.left &&\n ev.clientX + rect.width * rightScale < rect.right &&\n ev.clientY > rect.top &&\n ev.clientY < rect.bottom);\n};\n//\n// |-----------------| mouse |-----------------|\n// | rect1.right ^ ^ rect2.left |\n// | | | |\n// returns [inBetweenTwoRectangles, {insertedOnLeft, insertedOnRight, else}]\nvar inBetween = function (ev, rect1, rect2, scales) {\n var leftScale = scales[0], rightScale = scales[1];\n var withinHeightRect1 = ev.clientY > rect1.top && ev.clientY < rect1.bottom;\n var withinHeightRect2 = ev.clientY > rect2.top && ev.clientY < rect2.bottom;\n // Cases\n // same row -> between: no ends\n var singleRowBetween = rect1.top === rect2.top &&\n rect1.right <= ev.clientX + rect1.width * leftScale &&\n ev.clientX - rect2.width * rightScale <= rect2.left &&\n withinHeightRect1;\n // same row -> before: left end\n var singleRowBefore = rect1.top === rect2.top && ev.clientX <= rect2.left && rect1.left >= rect2.right && withinHeightRect1;\n // same row -> after: right end\n var singleRowAfter = rect1.top === rect2.top && ev.clientX >= rect1.right && rect1.right >= rect2.left && withinHeightRect1;\n // different rows -> before: left end\n var multRowBefore = rect1.top !== rect2.top && ev.clientX <= rect2.left && withinHeightRect2;\n if (multRowBefore || singleRowBefore) {\n return [true, \'left\'];\n }\n // different rows -> after: right end\n var multRowAfter = rect1.top !== rect2.top && ev.clientX >= rect1.right && withinHeightRect1;\n if (multRowAfter || singleRowAfter) {\n return [true, \'right\'];\n }\n // different rows -> between: no ends\n return [singleRowBetween, \'inBetween\'];\n};\nvar INIT_STYLE = {};\nvar OFFSET_SCALE = 0.33;\nvar transitions = [\'overlap\', \'left\', \'right\', \'reset\'];\nvar resetDroppableItem = function (di) {\n function onTransitionEnd(ev) {\n if (ev.propertyName !== \'transform\') {\n return;\n }\n di.node.classList.remove("".concat(DRAGGABLE_REF_KLAZZ, "-wrapper__reset"));\n di.node.removeEventListener(\'transitionend\', onTransitionEnd);\n }\n if (di.node.className\n .split(/\\s+/)\n .some(function (c) { return c.startsWith("".concat(DRAGGABLE_REF_KLAZZ, "-wrapper__")) && c !== "".concat(DRAGGABLE_REF_KLAZZ, "-wrapper__reset"); })) {\n setDroppableItem(di, \'reset\');\n di.node.addEventListener(\'transitionend\', onTransitionEnd);\n di.node.addEventListener(\'transitioncancel\', onTransitionEnd);\n }\n};\nvar setDroppableItem = function (di, transition) {\n for (var _i = 0, transitions_1 = transitions; _i < transitions_1.length; _i++) {\n var tr = transitions_1[_i];\n di.node.classList.remove("".concat(DRAGGABLE_REF_KLAZZ, "-wrapper__").concat(tr));\n }\n di.node.classList.add("".concat(DRAGGABLE_REF_KLAZZ, "-wrapper__").concat(transition));\n};\nvar DraggableRef = function (_a) {\n var children = _a.children, dashboardId = _a.dashboardId, _props = DraggableRef_rest(_a, ["children", "dashboardId"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var wrapperRef = react.useRef(null);\n var startCoords = react.useRef([0, 0]);\n var insertPosition = react.useRef(undefined);\n var mouseMoveListener = react.useRef();\n var mouseUpListener = react.useRef();\n var isMouseDown = react.useRef(false);\n var swap = react.useRef(true);\n var _b = react.useState(INIT_STYLE), refStyle = _b[0], setRefStyle = _b[1];\n var _c = react.useState(false), isDragging = _c[0], setIsDragging = _c[1];\n var onTransitionEnd = react.useCallback(function (ev) {\n if (ev.propertyName === \'transform\' && isDragging && !isMouseDown.current) {\n setIsDragging(false);\n setRefStyle(INIT_STYLE);\n }\n handleDisabledElements(false);\n }, [setIsDragging, setRefStyle, isDragging]);\n var onMouseUpWhileDragging = react.useCallback(function (droppableItems) {\n droppableItems.forEach(resetDroppableItem);\n isMouseDown.current = false;\n if (mouseMoveListener.current && mouseUpListener.current) {\n document.removeEventListener(\'mousemove\', mouseMoveListener.current);\n document.removeEventListener(\'mouseup\', mouseUpListener.current);\n }\n if (insertPosition.current !== undefined) {\n setIsDragging(false);\n setRefStyle(INIT_STYLE);\n dispatch(ReduxStore_dashboardConfigReorderCardIntent(dashboardId, insertPosition.current, swap.current));\n }\n else {\n setRefStyle(DraggableRef_assign({ transition: \'transform 0.5s cubic-bezier(0.2, 1, 0.1, 1) 0s\', transform: \'\' }, refStyle));\n }\n handleDisabledElements(false);\n }, [dispatch, setIsDragging, setRefStyle, refStyle, dashboardId]);\n var onMouseMoveWhileDragging = react.useCallback(function (ev, droppableItems) {\n insertPosition.current = undefined;\n var currDragged = wrapperRef.current;\n if (currDragged) {\n var dragIndex_1 = droppableItems.findIndex(function (di) { return di.isDraggingHost; });\n droppableItems.forEach(function (di, idx) {\n var scales = getOverlapScales(dragIndex_1, idx);\n if (!di.isDraggingHost && overlaps(ev, di.rect, scales)) {\n // mouse is hovering on a card\n setDroppableItem(di, \'overlap\');\n insertPosition.current = idx;\n swap.current = true;\n droppableItems.filter(function (_di, _idx) { return _idx !== dragIndex_1 && _idx !== idx; }).forEach(resetDroppableItem);\n }\n else {\n // mouse is hovering between two cards\n var gapIndex_1 = (idx + 1) % droppableItems.length;\n var nextItem_1 = droppableItems[gapIndex_1];\n scales = getBetweenScales(dragIndex_1, gapIndex_1);\n var _a = inBetween(ev, di.rect, nextItem_1.rect, scales), betweenTwoRects = _a[0], draggedPosition_1 = _a[1];\n // check if hovering right next to each other in the adjacent gap indices\n if (gapIndex_1 - dragIndex_1 == 1 || (gapIndex_1 - dragIndex_1 == 0 && draggedPosition_1 != \'right\')) {\n // check if insertPosition is undefined because then we are no longer hovering\n // and we want to reset any cards that are not being transitioned by the hover\n if (!di.isDraggingHost && insertPosition.current == undefined)\n resetDroppableItem(di);\n return;\n }\n if (betweenTwoRects && droppableItems.length > 1) {\n // [ 0, 1, 2, 3 ] dashboard span array\n // { 0 | 1 | 2 | 3 | 4 } gap indices (drop zones)\n /*\n If we wanted to put 0 between indexes 2 and 3, we would have to specify the gapIndex of 3 (idx + 1)\n */\n // [ 0, 1, 2,\n // 3 ] multi-row dashboard span array\n // { 0 | 1 | 2 | 3(a)\n // 3(b) | 4 } (idealized) gap indices\n //\n // caveat -> gapIndex is always the 0 index when hovering at the end of the last card in the grid\n // (this is not idealized, but it is how it is implemented)\n // that is why there is a special case to set the insertPosition specially\n insertPosition.current = gapIndex_1;\n swap.current = false;\n // check which items should be translated\n droppableItems.forEach(function (_item, _idx) {\n if (_item.isDraggingHost) {\n return;\n }\n // check the position we are hovering the card over\n /* this case needs to be checked so that cards to the left of the dragged card are\n not translated when the dragged card is being dragged to the right, and vice versa */\n // if (dragIndex >= gapIndex) => we are dragging the card "backwards"\n if (dragIndex_1 >= gapIndex_1) {\n if (draggedPosition_1 == \'left\') {\n if (_idx >= gapIndex_1 && _idx < dragIndex_1 && _item.rect.top == nextItem_1.rect.top) {\n setDroppableItem(_item, "right");\n }\n else {\n resetDroppableItem(_item);\n }\n }\n else if (draggedPosition_1 == \'right\') {\n if (_idx < gapIndex_1 && dragIndex_1 !== gapIndex_1 && _item.rect.top == di.rect.top) {\n setDroppableItem(_item, "left");\n }\n // special case: moving non 0th card to end\n else if (gapIndex_1 == 0 && _idx > dragIndex_1 && _item.rect.top == di.rect.top) {\n setDroppableItem(_item, "left");\n insertPosition.current = idx + 1;\n }\n else {\n resetDroppableItem(_item);\n }\n }\n else {\n if (_idx < gapIndex_1 && _item.rect.top == nextItem_1.rect.top) {\n setDroppableItem(_item, "left");\n }\n else if (_idx >= gapIndex_1 && _idx < dragIndex_1 && _item.rect.top == nextItem_1.rect.top) {\n setDroppableItem(_item, "right");\n }\n else {\n resetDroppableItem(_item);\n }\n }\n }\n else {\n // if (dragOrder < gapIndex)\n if (draggedPosition_1 == \'left\') {\n if (_idx >= gapIndex_1 && _item.rect.top == nextItem_1.rect.top) {\n setDroppableItem(_item, "right");\n }\n else {\n resetDroppableItem(_item);\n }\n }\n else if (draggedPosition_1 == \'right\') {\n if (_idx < gapIndex_1 && _idx > dragIndex_1 && _item.rect.top == di.rect.top) {\n setDroppableItem(_item, "left");\n }\n else {\n resetDroppableItem(_item);\n }\n }\n else {\n if (_idx < gapIndex_1 && _idx > dragIndex_1 && _item.rect.top == di.rect.top) {\n setDroppableItem(_item, "left");\n }\n else if (_idx >= gapIndex_1 && _item.rect.top == di.rect.top) {\n setDroppableItem(_item, "right");\n }\n else {\n resetDroppableItem(_item);\n }\n }\n }\n });\n }\n else {\n // reset when the mouse is not hovering on a card or between two cards\n if (!di.isDraggingHost && insertPosition.current == null)\n resetDroppableItem(di);\n }\n }\n });\n }\n setRefStyle(DraggableRef_assign(DraggableRef_assign({}, refStyle), { position: \'relative\', zIndex: 5000, transition: \'\', transform: "translate(".concat(ev.pageX - startCoords.current[0], "px, ").concat(ev.pageY - startCoords.current[1], "px)") }));\n handleDisabledElements(true);\n }, [setRefStyle, refStyle]);\n var onDragStart = react.useCallback(function (ev) {\n ev.preventDefault();\n (0,utils/* clickOutside */.xD)();\n if (isDragging) {\n return;\n }\n isMouseDown.current = true;\n var dragging = ev.target;\n var rect = dragging.getBoundingClientRect();\n var draggableNodes = Array.from(document.querySelectorAll("div.".concat(DRAGGABLE_REF_KLAZZ, "-wrapper")));\n var droppableItems = draggableNodes.map(function (node, index) {\n var isDraggingHost = node.contains(dragging);\n var droppableItem = {\n index: index,\n node: node,\n rect: node.getBoundingClientRect(),\n isDraggingHost: isDraggingHost,\n };\n return droppableItem;\n });\n var initStyle = DraggableRef_assign(DraggableRef_assign({}, refStyle), { position: \'relative\', top: rect.y, left: rect.x, width: rect.width, height: rect.height, zIndex: 5000 });\n startCoords.current = [ev.pageX, ev.pageY];\n setRefStyle(initStyle);\n setIsDragging(true);\n mouseMoveListener.current = function (ev) { return onMouseMoveWhileDragging(ev, droppableItems); };\n mouseUpListener.current = function () { return onMouseUpWhileDragging(droppableItems); };\n document.addEventListener(\'mousemove\', mouseMoveListener.current);\n document.addEventListener(\'mouseup\', mouseUpListener.current);\n handleDisabledElements(true);\n }, [setRefStyle, setIsDragging, onMouseMoveWhileDragging, onMouseUpWhileDragging, refStyle, isDragging]);\n return (react.createElement("div", { ref: wrapperRef, className: (0,esm.css)("".concat(DRAGGABLE_REF_KLAZZ, "-wrapper")), onDragStart: onDragStart, onTransitionEnd: onTransitionEnd, style: DraggableRef_assign({}, refStyle) }, children));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/DashboardCard.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar DashboardCard_assign = (undefined && undefined.__assign) || function () {\n DashboardCard_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return DashboardCard_assign.apply(this, arguments);\n};\nvar DashboardCard_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\nvar DashboardCardContext = react.createContext(react.createRef());\nvar DashboardCard = function (_a) {\n var _b = _a.children, children = _b === void 0 ? null : _b, _c = _a.cardHeader, cardHeader = _c === void 0 ? null : _c, dashboardId = _a.dashboardId, _d = _a.isDraggable, isDraggable = _d === void 0 ? true : _d, _f = _a.isResizable, isResizable = _f === void 0 ? true : _f, cardSizes = _a.cardSizes, props = DashboardCard_rest(_a, ["children", "cardHeader", "dashboardId", "isDraggable", "isResizable", "cardSizes"]);\n var cardRef = react.useRef(null);\n var onMouseEnter = react.useCallback(function (_e) {\n if (cardRef.current) {\n cardRef.current.classList.add("".concat(DRAGGABLE_REF_KLAZZ, "-hover"));\n }\n }, []);\n var onMouseLeave = react.useCallback(function (_e) {\n if (cardRef.current) {\n cardRef.current.classList.remove("".concat(DRAGGABLE_REF_KLAZZ, "-hover"));\n }\n }, []);\n var resizeBar = react.useMemo(function () {\n return isResizable ? react.createElement(ResizableRef, { cardId: dashboardId, cardSizes: cardSizes }) : null;\n }, [isResizable, cardSizes, dashboardId]);\n var content = react.useMemo(function () {\n return isDraggable ? (react.createElement(DraggableRef, { dashboardId: dashboardId },\n react.createElement("div", { className: \'dashboard-card-resizable-wrapper\', ref: cardRef },\n react.createElement(Card/* Card */.Z, DashboardCard_assign({ className: "dashboard-card", isRounded: true }, props),\n react.createElement("div", { className: (0,esm.css)("".concat(DRAGGABLE_REF_KLAZZ, "__grip")), onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, draggable // draggable is required for drag events to fire\n : true, "data-quickstart-id": "card-draggable-grip" }, cardHeader),\n children),\n resizeBar))) : (react.createElement(react.Fragment, null,\n react.createElement(Card/* Card */.Z, DashboardCard_assign({ isRounded: true }, props),\n cardHeader,\n children),\n resizeBar));\n }, [cardRef, props, onMouseEnter, onMouseLeave, cardHeader, children, isDraggable, dashboardId, resizeBar]);\n return react.createElement(DashboardCardContext.Provider, { value: cardRef }, content);\n};\nDashboardCard.displayName = \'DashboardCard\';\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/Charts/mbean/MBeanMetricsChartCard.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar MBeanMetricsChartCard_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar SimpleChart = function (_a) {\n var cryostatTheme = _a.cryostatTheme, themeColor = _a.themeColor, style = _a.style, width = _a.width, samples = _a.samples, units = _a.units, interpolation = _a.interpolation;\n var _b = utils_useDayjs(), dayjs = _b[0], dateTimeFormat = _b[1];\n var data = react.useMemo(function () { return samples.map(function (v) { return ({ x: v.timestamp, y: v.datapoint.value, name: v.datapoint.name }); }); }, [samples]);\n var keys = react.useMemo(function () { return lodash_default().uniqBy(data, function (d) { return d.name; }); }, [data]);\n var render = react.useCallback(function (key, data, style) {\n return style === \'line\' ? (react.createElement(ChartLine/* ChartLine */.m, { key: key, data: data, name: units, interpolation: interpolation })) : (react.createElement(ChartArea/* ChartArea */.A, { key: key, data: data, name: units, interpolation: interpolation }));\n }, [units, interpolation]);\n return (react.createElement(Chart/* Chart */.k, { containerComponent: react.createElement(ChartVoronoiContainer/* ChartVoronoiContainer */.H, { labels: function (_a) {\n var datum = _a.datum;\n return "".concat(dayjs(datum.x).tz(dateTimeFormat.timeZone.full).format(\'LLLL\'), ": ").concat(typeof datum.y === \'number\' ? datum.y.toFixed(2) : datum.y, " ").concat(units || \'\');\n }, constrainToVisibleArea: true }), legendData: keys.length > 1 ? keys.map(function (k) { return ({ name: k.name }); }) : [], legendPosition: \'bottom\', legendComponent: react.createElement(ChartLegend/* ChartLegend */.Qk, { labelComponent: react.createElement(ChartLabel/* ChartLabel */.Df, { style: {\n fill: cryostatTheme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK\n ? \'var(--pf-global--palette--black-200)\'\n : \'var(--pf-chart-global--label--Fill, #151515)\',\n } }) }), themeColor: themeColor, width: width, padding: {\n left: 54,\n right: 30,\n top: 10,\n bottom: 60,\n } },\n react.createElement(ChartAxis/* ChartAxis */.C, { tickFormat: function (t) { return dayjs(t).tz(dateTimeFormat.timeZone.full).format(\'LTS\'); }, fixLabelOverlap: true }),\n react.createElement(ChartAxis/* ChartAxis */.C, { tickFormat: function (t) { return (typeof t !== \'number\' ? t : t.toPrecision(2)); }, dependentAxis: true, showGrid: true, label: units, axisLabelComponent: react.createElement(ChartLabel/* ChartLabel */.Df, { style: {\n fill: cryostatTheme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK\n ? \'var(--pf-global--palette--black-200)\'\n : \'var(--pf-chart-global--label--Fill, #151515)\',\n } }) }),\n react.createElement(ChartGroup/* ChartGroup */.G, null, keys.map(function (k) {\n return render(k, data.filter(function (d) { return d.name === k.name; }), style);\n }))));\n};\n// TODO these need to be localized\nvar chartKinds = [\n {\n displayName: \'Process CPU Load\',\n category: \'os\',\n fields: [\'processCpuLoad\'],\n mapper: function (metrics) { var _a; return [{ name: \'processCpuLoad\', value: (((_a = metrics === null || metrics === void 0 ? void 0 : metrics.os) === null || _a === void 0 ? void 0 : _a.processCpuLoad) || 0) * 100 }]; },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'%\', interpolation: \'monotoneX\', style: \'line\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n {\n displayName: \'System Load Average\',\n category: \'os\',\n fields: [\'systemLoadAverage\'],\n mapper: function (metrics) { var _a; return [{ name: \'systemLoadAverage\', value: ((_a = metrics === null || metrics === void 0 ? void 0 : metrics.os) === null || _a === void 0 ? void 0 : _a.systemLoadAverage) || 0 }]; },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'\', interpolation: \'monotoneX\', style: \'line\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n {\n displayName: \'System CPU Load\',\n category: \'os\',\n fields: [\'systemCpuLoad\'],\n mapper: function (metrics) { var _a; return [{ name: \'systemCpuLoad\', value: (((_a = metrics === null || metrics === void 0 ? void 0 : metrics.os) === null || _a === void 0 ? void 0 : _a.systemCpuLoad) || 0) * 100 }]; },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'%\', style: \'line\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n {\n displayName: \'Physical Memory\',\n category: \'os\',\n fields: [\'freePhysicalMemorySize\', \'totalPhysicalMemorySize\'],\n // TODO scale units automatically and report units dynamically\n mapper: function (metrics) {\n var _a, _b, _c;\n return [\n {\n name: \'usedPhysicalMemorySize\',\n value: ((((_a = metrics === null || metrics === void 0 ? void 0 : metrics.os) === null || _a === void 0 ? void 0 : _a.totalPhysicalMemorySize) || 0) - (((_b = metrics === null || metrics === void 0 ? void 0 : metrics.os) === null || _b === void 0 ? void 0 : _b.freePhysicalMemorySize) || 0)) /\n Math.pow(1024, 2),\n },\n {\n name: \'totalPhysicalMemorySize\',\n value: (((_c = metrics === null || metrics === void 0 ? void 0 : metrics.os) === null || _c === void 0 ? void 0 : _c.totalPhysicalMemorySize) || 0) / Math.pow(1024, 2),\n },\n ];\n },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'MiB\', interpolation: \'step\', style: \'area\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n {\n displayName: \'Heap Memory Usage\',\n category: \'memory\',\n fields: [\'heapMemoryUsage{ used }\'],\n mapper: function (metrics) {\n var _a, _b;\n return [\n {\n name: \'heapMemoryUsed\',\n value: Math.round((((_b = (_a = metrics === null || metrics === void 0 ? void 0 : metrics.memory) === null || _a === void 0 ? void 0 : _a.heapMemoryUsage) === null || _b === void 0 ? void 0 : _b.used) || 0) / Math.pow(1024, 2)),\n },\n ];\n },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'MiB\', interpolation: \'step\', style: \'area\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n {\n displayName: \'Heap Usage Percentage\',\n category: \'memory\',\n fields: [\'heapMemoryUsagePercent\'],\n mapper: function (metrics) {\n var _a;\n return [\n { name: \'heapMemoryUsage\', value: ((_a = metrics === null || metrics === void 0 ? void 0 : metrics.memory) === null || _a === void 0 ? void 0 : _a.heapMemoryUsagePercent) || 0 },\n ];\n },\n singleValue: true,\n visual: function (cryostatTheme, themeColor, width, samples) {\n var value = 0;\n if ((samples === null || samples === void 0 ? void 0 : samples.length) > 0) {\n value = samples.slice(-1)[0].datapoint.value * 100;\n }\n return (react.createElement(ChartDonutUtilization/* ChartDonutUtilization */.ze, { constrainToVisibleArea: true, data: { x: \'Used heap memory\', y: value }, title: "".concat(value.toFixed(2), "%"), labels: function (_a) {\n var datum = _a.datum;\n return (datum.x ? "".concat(datum.x, ": ").concat(datum.y.toFixed(2), "%") : null);\n }, titleComponent: react.createElement(ChartLabel/* ChartLabel */.Df, { style: {\n fill: cryostatTheme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK\n ? \'var(--pf-global--palette--black-200)\'\n : \'var(--pf-chart-donut--label--title--Fill, #151515)\',\n fontSize: \'24px\',\n } }), themeColor: themeColor, width: width }));\n },\n },\n {\n displayName: \'Non-Heap Memory Usage\',\n category: \'memory\',\n fields: [\'nonHeapMemoryUsage{ used }\'],\n mapper: function (metrics) {\n var _a, _b;\n return [\n {\n name: \'nonHeapMemoryUsed\',\n value: Math.round((((_b = (_a = metrics === null || metrics === void 0 ? void 0 : metrics.memory) === null || _a === void 0 ? void 0 : _a.nonHeapMemoryUsage) === null || _b === void 0 ? void 0 : _b.used) || 0) / Math.pow(1024, 2)),\n },\n ];\n },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'MiB\', interpolation: \'step\', style: \'area\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n {\n displayName: \'Threads\',\n category: \'thread\',\n fields: [\'daemonThreadCount\', \'threadCount\'],\n mapper: function (metrics) {\n var _a, _b;\n return [\n {\n name: \'daemonThreadCount\',\n value: ((_a = metrics === null || metrics === void 0 ? void 0 : metrics.thread) === null || _a === void 0 ? void 0 : _a.daemonThreadCount) || 0,\n },\n {\n name: \'threadCount\',\n value: ((_b = metrics === null || metrics === void 0 ? void 0 : metrics.thread) === null || _b === void 0 ? void 0 : _b.threadCount) || 0,\n },\n ];\n },\n visual: function (cryostatTheme, themeColor, width, samples) { return (react.createElement(SimpleChart, { samples: samples, width: width, units: \'threads\', interpolation: \'step\', style: \'line\', themeColor: themeColor, cryostatTheme: cryostatTheme })); },\n },\n];\nfunction getChartKindByName(name) {\n return chartKinds.filter(function (k) { return k.displayName === name; })[0];\n}\nvar MBeanMetricsChartCard = function (props) {\n var t = (0,es/* useTranslation */.$G)().t;\n var theme = useTheme()[0];\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var controllerContext = react.useContext(ChartContext);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState([]), samples = _a[0], setSamples = _a[1];\n var _b = react.useState(true), isLoading = _b[0], setLoading = _b[1];\n var resizeObserver = react.useRef(function () { return undefined; });\n var _c = react.useState(0), cardWidth = _c[0], setCardWidth = _c[1];\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var containerRef = react.createRef();\n react.useEffect(function () {\n var kind = getChartKindByName(props.chartKind);\n addSubscription(controllerContext.mbeanController.attach(kind.category, kind.fields).subscribe(function (v) {\n setSamples(function (old) {\n var timestamp = Date.now();\n var newSamples = kind.mapper(v).map(function (datapoint) { return ({ timestamp: timestamp, datapoint: datapoint }); });\n if (kind.singleValue) {\n return newSamples;\n }\n return MBeanMetricsChartCard_spreadArray(MBeanMetricsChartCard_spreadArray([], old, true), newSamples, true).filter(function (d) { return d.timestamp > timestamp - props.duration * 1000; });\n });\n }));\n }, [addSubscription, controllerContext, props.chartKind, props.duration]);\n var handleResize = react.useCallback(function () {\n if (containerRef.current && containerRef.current.clientWidth) {\n setCardWidth(containerRef.current.clientWidth);\n }\n }, [containerRef, setCardWidth]);\n react.useEffect(function () {\n resizeObserver.current = (0,chart_resize/* getResizeObserver */.p)(containerRef.current, handleResize);\n return resizeObserver.current;\n }, [resizeObserver, containerRef, handleResize]);\n var refresh = react.useCallback(function () {\n controllerContext.mbeanController.requestRefresh();\n }, [controllerContext]);\n react.useEffect(function () {\n addSubscription(serviceContext.target.target().subscribe(function (_) {\n setSamples([]);\n }));\n }, [addSubscription, serviceContext, setSamples, refresh]);\n react.useEffect(function () {\n refresh();\n addSubscription((0,interval/* interval */.F)(props.period * 1000).subscribe(function () { return refresh(); }));\n }, [addSubscription, props.period, refresh]);\n react.useEffect(function () {\n addSubscription(controllerContext.mbeanController.loading().subscribe(setLoading));\n }, [addSubscription, controllerContext, setLoading]);\n var refreshButton = react.useMemo(function () { return (react.createElement(Button_Button/* Button */.zx, { key: 0, "aria-label": t(\'CHART_CARD.BUTTONS.SYNC.LABEL\', { chartKind: props.chartKind }), onClick: refresh, variant: "plain", icon: react.createElement(sync_alt_icon/* SyncAltIcon */.ew, null), isDisabled: isLoading })); }, [t, props.chartKind, refresh, isLoading]);\n var actions = react.useMemo(function () {\n var a = props.actions || [];\n return MBeanMetricsChartCard_spreadArray([refreshButton], a, true);\n }, [props.actions, refreshButton]);\n var header = react.useMemo(function () { return (react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(CardTitle/* CardTitle */.l, null, t(\'CHART_CARD.TITLE\', { chartKind: props.chartKind, duration: props.duration, period: props.period })),\n react.createElement(CardActions/* CardActions */.T, null, actions))); }, [t, props.chartKind, props.duration, props.period, actions]);\n var chartKind = react.useMemo(function () { return getChartKindByName(props.chartKind); }, [props.chartKind]);\n var visual = react.useMemo(function () { return (react.createElement("div", { ref: containerRef, style: { height: props.isFullHeight ? \'100%\' : \'300px\' }, className: "disabled-pointer" }, chartKind.visual(theme, props.themeColor, cardWidth, samples))); }, [theme, containerRef, props.themeColor, props.isFullHeight, chartKind, cardWidth, samples]);\n return (react.createElement(DashboardCard, { id: props.chartKind + \'-chart-card\', dashboardId: props.dashboardId, cardSizes: MBeanMetricsChartCardSizes, isCompact: true, isDraggable: props.isDraggable, isResizable: props.isResizable, isFullHeight: props.isFullHeight, cardHeader: header },\n react.createElement(CardBody/* CardBody */.e, null, visual)));\n};\nvar MBeanMetricsChartCardSizes = {\n span: {\n minimum: 2,\n default: 4,\n maximum: 12,\n },\n height: {\n // TODO: implement height resizing\n minimum: Number.NaN,\n default: Number.NaN,\n maximum: Number.NaN,\n },\n};\nvar MBeanMetricsChartCardDescriptor = {\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n title: \'CHART_CARD.MBEAN_METRICS_CARD_TITLE\',\n cardSizes: MBeanMetricsChartCardSizes,\n description: \'CHART_CARD.MBEAN_METRICS_CARD_DESCRIPTION\',\n descriptionFull: "CHART_CARD.MBEAN_METRICS_CARD_DESCRIPTION_FULL",\n component: MBeanMetricsChartCard,\n propControls: [\n {\n name: \'CHART_CARD.PROP_CONTROLS.PERFORMANCE_METRIC.NAME\',\n key: \'chartKind\',\n values: chartKinds.map(function (k) { return k.displayName; }),\n defaultValue: chartKinds[0].displayName,\n description: \'CHART_CARD.PROP_CONTROLS.PERFORMANCE_METRIC.DESCRIPTION\',\n kind: \'select\',\n },\n {\n name: \'CHART_CARD.PROP_CONTROLS.DATA_WINDOW.NAME\',\n key: \'duration\',\n defaultValue: 60,\n description: \'CHART_CARD.PROP_CONTROLS.DATA_WINDOW.DESCRIPTION\',\n kind: \'number\',\n extras: {\n min: 1,\n max: 300,\n },\n },\n {\n name: \'CHART_CARD.PROP_CONTROLS.REFRESH_PERIOD.NAME\',\n key: \'period\',\n defaultValue: 10,\n description: \'CHART_CARD.PROP_CONTROLS.REFRESH_PERIOD.DESCRIPTION\',\n kind: \'number\',\n extras: {\n min: 1,\n max: 300,\n },\n },\n {\n name: \'CHART_CARD.PROP_CONTROLS.THEME.NAME\',\n key: \'themeColor\',\n values: [\'blue\', \'cyan\', \'gold\', \'gray\', \'green\', \'orange\', \'purple\'],\n defaultValue: \'Blue\',\n description: \'CHART_CARD.PROP_CONTROLS.THEME.DESCRIPTION\',\n kind: \'select\',\n extras: {\n displayMapper: (lodash_default()).startCase,\n },\n },\n ],\n icon: react.createElement(monitoring_icon/* MonitoringIcon */.ml, null),\n labels: [\n {\n content: \'Metrics\',\n color: \'blue\',\n },\n ],\n preview: (react.createElement(MBeanMetricsChartCard, { themeColor: \'blue\', chartKind: chartKinds[0].displayName, duration: 60, period: 1, span: 12, isFullHeight: true, isDraggable: false, isResizable: false, dashboardId: 0 })),\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/Configurations/DashboardConfigSlice.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\nvar _dashboardConfigVersion = \'4\';\n// Common action string format: "resource(s)/action"\nvar DashboardConfigAction;\n(function (DashboardConfigAction) {\n DashboardConfigAction["CARD_ADD"] = "dashboard-card-config/add";\n DashboardConfigAction["CARD_REMOVE"] = "dashboard-card-config/remove";\n DashboardConfigAction["CARD_REORDER"] = "dashboard-card-config/reorder";\n DashboardConfigAction["CARD_RESIZE"] = "dashboard-card-config/resize";\n DashboardConfigAction["FIRST_RUN"] = "dashboard-card-config/first-run";\n DashboardConfigAction["LAYOUT_ADD"] = "layout-config/add";\n DashboardConfigAction["LAYOUT_REMOVE"] = "layout-config/remove";\n DashboardConfigAction["LAYOUT_RENAME"] = "layout-config/rename";\n DashboardConfigAction["LAYOUT_REPLACE"] = "layout-config/replace";\n DashboardConfigAction["LAYOUT_FAVORITE"] = "layout-config/favorite";\n DashboardConfigAction["TEMPLATE_ADD"] = "template-config/add";\n DashboardConfigAction["TEMPLATE_REMOVE"] = "template-config/remove";\n DashboardConfigAction["TEMPLATE_RENAME"] = "template-config/rename";\n DashboardConfigAction["TEMPLATE_HISTORY_PUSH"] = "template-history/push";\n DashboardConfigAction["TEMPLATE_HISTORY_CLEAR"] = "template-history/clear";\n})(DashboardConfigAction || (DashboardConfigAction = {}));\nvar DashboardConfigSlice_enumValues = new Set(Object.values(DashboardConfigAction));\nvar dashboardConfigAddCardIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.CARD_ADD, function (id, name, span, props) { return ({\n payload: {\n id: id,\n name: name,\n span: span,\n props: props,\n },\n}); });\nvar dashboardConfigDeleteCardIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.CARD_REMOVE, function (idx) { return ({\n payload: {\n idx: idx,\n },\n}); });\nvar dashboardConfigResizeCardIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.CARD_RESIZE, function (idx, span) { return ({\n payload: {\n idx: idx,\n span: span,\n },\n}); });\nvar dashboardConfigReorderCardIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.CARD_REORDER, function (prevOrder, nextOrder, swap) {\n if (swap === void 0) { swap = false; }\n return ({\n payload: {\n prevOrder: prevOrder,\n nextOrder: nextOrder,\n swap: swap,\n },\n });\n});\nvar dashboardConfigFirstRunIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.FIRST_RUN, function () { return ({\n payload: {},\n}); });\nvar dashboardConfigCreateLayoutIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.LAYOUT_ADD, function (layout) { return ({\n payload: {\n layout: layout,\n },\n}); });\nvar dashboardConfigDeleteLayoutIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.LAYOUT_REMOVE, function (name) { return ({\n payload: {\n name: name,\n },\n}); });\nvar dashboardConfigRenameLayoutIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.LAYOUT_RENAME, function (oldName, newName) { return ({\n payload: {\n oldName: oldName,\n newName: newName,\n },\n}); });\nvar dashboardConfigReplaceLayoutIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.LAYOUT_REPLACE, function (name) { return ({\n payload: {\n newLayoutName: name,\n },\n}); });\nvar dashboardConfigFavoriteLayoutIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.LAYOUT_FAVORITE, function (name) { return ({\n payload: {\n newLayoutName: name,\n },\n}); });\nvar dashboardConfigCreateTemplateIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.TEMPLATE_ADD, function (template) { return ({\n payload: {\n template: template,\n },\n}); });\nvar dashboardConfigDeleteTemplateIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.TEMPLATE_REMOVE, function (name) { return ({\n payload: {\n name: name,\n },\n}); });\nvar dashboardConfigTemplateHistoryPushIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.TEMPLATE_HISTORY_PUSH, function (template) { return ({\n payload: {\n template: template,\n },\n}); });\nvar dashboardConfigTemplateHistoryClearIntent = (0,redux_toolkit_esm/* createAction */.PH)(DashboardConfigAction.TEMPLATE_HISTORY_CLEAR, function () { return ({\n payload: {},\n}); });\nvar TEMPLATE_HISTORY_LIMIT = 5;\nvar DashboardConfigSlice_INITIAL_STATE = getPersistedState(\'DASHBOARD_CFG\', _dashboardConfigVersion, {\n layouts: [\n {\n name: \'Default\',\n cards: [],\n favorite: true,\n },\n ],\n customTemplates: [],\n templateHistory: [],\n current: 0,\n});\nvar getTemplateHistoryIndexForMutation = function (state, templateName) {\n var idx = state.templateHistory.findIndex(function (t) { return t.name === templateName && t.vendor === LayoutTemplateVendor.USER; });\n return idx;\n};\nvar dashboardConfigReducer = (0,redux_toolkit_esm/* createReducer */.Lq)(DashboardConfigSlice_INITIAL_STATE, function (builder) {\n builder\n .addCase(dashboardConfigAddCardIntent, function (state, _a) {\n var payload = _a.payload;\n state.layouts[state.current].cards.push(payload);\n })\n .addCase(dashboardConfigDeleteCardIntent, function (state, _a) {\n var payload = _a.payload;\n state.layouts[state.current].cards.splice(payload.idx || 0, 1);\n })\n .addCase(dashboardConfigResizeCardIntent, function (state, _a) {\n var payload = _a.payload;\n state.layouts[state.current].cards[payload.idx].span = payload.span;\n })\n .addCase(dashboardConfigReorderCardIntent, function (state, _a) {\n var payload = _a.payload;\n if (payload.swap) {\n (0,utils/* swap */.LF)(state.layouts[state.current].cards, payload.prevOrder, payload.nextOrder);\n }\n else {\n (0,utils/* move */.pB)(state.layouts[state.current].cards, payload.prevOrder, payload.nextOrder);\n }\n })\n .addCase(dashboardConfigFirstRunIntent, function (state) {\n state.layouts[state.current].cards = [\n {\n id: "".concat(MBeanMetricsChartCardDescriptor.component.name, "-1"),\n name: MBeanMetricsChartCardDescriptor.component.name,\n span: MBeanMetricsChartCardDescriptor.cardSizes.span["default"],\n props: {\n themeColor: \'blue\',\n chartKind: \'Process CPU Load\',\n duration: 60,\n period: 10,\n },\n },\n {\n id: "".concat(MBeanMetricsChartCardDescriptor.component.name, "-2"),\n name: MBeanMetricsChartCardDescriptor.component.name,\n span: MBeanMetricsChartCardDescriptor.cardSizes.span["default"],\n props: {\n themeColor: \'purple\',\n chartKind: \'Heap Memory Usage\',\n duration: 60,\n period: 10,\n },\n },\n {\n id: "".concat(MBeanMetricsChartCardDescriptor.component.name, "-3"),\n name: MBeanMetricsChartCardDescriptor.component.name,\n span: MBeanMetricsChartCardDescriptor.cardSizes.span["default"],\n props: {\n themeColor: \'green\',\n chartKind: \'Threads\',\n duration: 60,\n period: 10,\n },\n },\n ];\n })\n .addCase(dashboardConfigCreateLayoutIntent, function (state, _a) {\n var payload = _a.payload;\n if (state.layouts.find(function (layout) { return layout.name === payload.layout.name; })) {\n throw new Error("Layout with name ".concat(payload.layout.name, " already exists."));\n }\n state.layouts.push(payload.layout);\n })\n .addCase(dashboardConfigDeleteLayoutIntent, function (state, _a) {\n var payload = _a.payload;\n var idx = state.layouts.findIndex(function (layout) { return layout.name === payload.name; });\n if (idx < 0) {\n throw new Error("Layout with name ".concat(payload.name, " does not exist."));\n }\n state.layouts.splice(idx || 0, 1);\n })\n .addCase(dashboardConfigRenameLayoutIntent, function (state, _a) {\n var payload = _a.payload;\n var idx = state.layouts.findIndex(function (layout) { return layout.name === payload.oldName; });\n if (idx < 0) {\n throw new Error("Layout with name ".concat(payload.oldName, " does not exist."));\n }\n state.layouts[idx].name = payload.newName;\n })\n .addCase(dashboardConfigReplaceLayoutIntent, function (state, _a) {\n var payload = _a.payload;\n var idx = state.layouts.findIndex(function (layout) { return layout.name === payload.newLayoutName; });\n if (idx < 0) {\n throw new Error("Layout with name ".concat(payload.newLayoutName, " does not exist."));\n }\n state.current = idx;\n })\n .addCase(dashboardConfigFavoriteLayoutIntent, function (state, _a) {\n var payload = _a.payload;\n var idx = state.layouts.findIndex(function (layout) { return layout.name === payload.newLayoutName; });\n if (idx < 0) {\n throw new Error("Layout with name ".concat(payload.newLayoutName, " does not exist."));\n }\n state.layouts[idx].favorite = !state.layouts[idx].favorite;\n })\n .addCase(dashboardConfigCreateTemplateIntent, function (state, _a) {\n var payload = _a.payload;\n var template = payload.template;\n var idx = state.customTemplates.findIndex(function (t) { return t.name === template.name && t.vendor === template.vendor; });\n if (idx >= 0) {\n throw new Error("Template with name ".concat(template.name, " and vendor ").concat(template.vendor, " already exists."));\n }\n state.customTemplates.push(template);\n })\n // template mutations (delete, rename, etc.) should never be called on non-custom templates (vendor !== LayoutTemplateVendor.USER)\n .addCase(dashboardConfigDeleteTemplateIntent, function (state, _a) {\n var payload = _a.payload;\n var idx = state.customTemplates.findIndex(function (t) { return t.name === payload.name; });\n if (idx < 0) {\n throw new Error("Template with name ".concat(payload.name, " does not exist."));\n }\n state.customTemplates.splice(idx, 1);\n var historyIdx = getTemplateHistoryIndexForMutation(state, payload.name);\n if (historyIdx >= 0) {\n state.templateHistory.splice(historyIdx, 1);\n }\n })\n // any template type except for the \'Blank\' template can be pushed to history\n .addCase(dashboardConfigTemplateHistoryPushIntent, function (state, _a) {\n var payload = _a.payload;\n // We only push the template name and vendor to the history\n var template = payload.template;\n if (template.name === \'Blank\' && template.vendor === undefined) {\n return;\n }\n var idx = state.templateHistory.findIndex(function (t) { return t.name === template.name && t.vendor === template.vendor; });\n if (idx >= 0) {\n state.templateHistory.splice(idx, 1);\n }\n else if (state.templateHistory.length >= TEMPLATE_HISTORY_LIMIT) {\n state.templateHistory.pop();\n }\n state.templateHistory.unshift({\n name: template.name,\n vendor: template.vendor,\n });\n })\n .addCase(dashboardConfigTemplateHistoryClearIntent, function (state) {\n state.templateHistory = [];\n });\n});\n/* harmony default export */ const DashboardConfigSlice = (dashboardConfigReducer);\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/Middlewares/PersistMiddleware.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n/* eslint-disable-next-line @typescript-eslint/ban-types*/\nvar persistMiddleware = function (_a) {\n var getState = _a.getState;\n return function (next) {\n return function (action) {\n var result = next(action);\n // Extract new state here\n var rootState = getState();\n if (AutomatedAnalysisFilterSlice_enumValues.has(action.type)) {\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'AUTOMATED_ANALYSIS_FILTERS\', rootState.automatedAnalysisFilters);\n }\n else if (enumValues.has(action.type)) {\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TARGET_RECORDING_FILTERS\', rootState.recordingFilters);\n }\n else if (DashboardConfigSlice_enumValues.has(action.type)) {\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'DASHBOARD_CFG\', rootState.dashboardConfigs);\n }\n else if (TopologyConfigSlice_enumValues.has(action.type)) {\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TOPOLOGY_CONFIG\', rootState.topologyConfigs);\n }\n else if (TopologyFilterSlice_enumValues.has(action.type)) {\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TOPOLOGY_FILTERS\', rootState.topologyFilters);\n }\n else {\n console.warn("Action ".concat(action.type, " does not persist state."));\n }\n return result;\n };\n };\n};\n\n;// CONCATENATED MODULE: ./src/app/Shared/Redux/ReduxStore.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n// Export actions\nvar ReduxStore_dashboardConfigAddCardIntent = dashboardConfigAddCardIntent, ReduxStore_dashboardConfigDeleteCardIntent = dashboardConfigDeleteCardIntent, ReduxStore_dashboardConfigReorderCardIntent = dashboardConfigReorderCardIntent, ReduxStore_dashboardConfigResizeCardIntent = dashboardConfigResizeCardIntent, ReduxStore_dashboardConfigFirstRunIntent = dashboardConfigFirstRunIntent, ReduxStore_dashboardConfigCreateLayoutIntent = dashboardConfigCreateLayoutIntent, ReduxStore_dashboardConfigDeleteLayoutIntent = dashboardConfigDeleteLayoutIntent, ReduxStore_dashboardConfigRenameLayoutIntent = dashboardConfigRenameLayoutIntent, ReduxStore_dashboardConfigReplaceLayoutIntent = dashboardConfigReplaceLayoutIntent, ReduxStore_dashboardConfigFavoriteLayoutIntent = dashboardConfigFavoriteLayoutIntent, ReduxStore_dashboardConfigCreateTemplateIntent = dashboardConfigCreateTemplateIntent, ReduxStore_dashboardConfigDeleteTemplateIntent = dashboardConfigDeleteTemplateIntent, ReduxStore_dashboardConfigTemplateHistoryPushIntent = dashboardConfigTemplateHistoryPushIntent, ReduxStore_dashboardConfigTemplateHistoryClearIntent = dashboardConfigTemplateHistoryClearIntent;\nvar ReduxStore_recordingAddFilterIntent = recordingAddFilterIntent, ReduxStore_recordingDeleteFilterIntent = recordingDeleteFilterIntent, ReduxStore_recordingAddTargetIntent = recordingAddTargetIntent, ReduxStore_recordingDeleteTargetIntent = recordingDeleteTargetIntent, ReduxStore_recordingDeleteCategoryFiltersIntent = recordingDeleteCategoryFiltersIntent, ReduxStore_recordingUpdateCategoryIntent = recordingUpdateCategoryIntent, ReduxStore_recordingDeleteAllFiltersIntent = recordingDeleteAllFiltersIntent;\nvar ReduxStore_automatedAnalysisAddGlobalFilterIntent = automatedAnalysisAddGlobalFilterIntent, ReduxStore_automatedAnalysisAddFilterIntent = automatedAnalysisAddFilterIntent, ReduxStore_automatedAnalysisAddTargetIntent = automatedAnalysisAddTargetIntent, ReduxStore_automatedAnalysisDeleteAllFiltersIntent = automatedAnalysisDeleteAllFiltersIntent, ReduxStore_automatedAnalysisDeleteCategoryFiltersIntent = automatedAnalysisDeleteCategoryFiltersIntent, ReduxStore_automatedAnalysisDeleteFilterIntent = automatedAnalysisDeleteFilterIntent, ReduxStore_automatedAnalysisDeleteTargetIntent = automatedAnalysisDeleteTargetIntent, ReduxStore_automatedAnalysisUpdateCategoryIntent = automatedAnalysisUpdateCategoryIntent;\nvar ReduxStore_topologyConfigSetViewModeIntent = topologyConfigSetViewModeIntent, ReduxStore_topologyDisplayOptionsSetIntent = topologyDisplayOptionsSetIntent;\nvar ReduxStore_topologyUpdateCategoryTypeIntent = topologyUpdateCategoryTypeIntent, ReduxStore_topologyUpdateCategoryIntent = topologyUpdateCategoryIntent, ReduxStore_topologyAddFilterIntent = topologyAddFilterIntent, ReduxStore_topologyDeleteAllFiltersIntent = topologyDeleteAllFiltersIntent, ReduxStore_topologyDeleteCategoryFiltersIntent = topologyDeleteCategoryFiltersIntent, ReduxStore_topologyDeleteFilterIntent = topologyDeleteFilterIntent;\nvar rootReducer = (0,redux/* combineReducers */.UY)({\n dashboardConfigs: DashboardConfigSlice,\n recordingFilters: RecordingFilterSlice,\n automatedAnalysisFilters: AutomatedAnalysisFilterSlice,\n topologyConfigs: TopologyConfigSlice,\n topologyFilters: TopologyFilterSlice,\n});\nvar setupStore = function (preloadedState) {\n return (0,redux_toolkit_esm/* configureStore */.xC)({\n reducer: rootReducer,\n preloadedState: preloadedState,\n middleware: function (getDefaultMiddleware) { return getDefaultMiddleware().concat(persistMiddleware); },\n });\n};\nvar store = setupStore();\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuDropdownItem.js\nvar OverflowMenuDropdownItem = __webpack_require__(89819);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenu.js\nvar OverflowMenu = __webpack_require__(93765);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuContent.js\nvar OverflowMenuContent = __webpack_require__(20450);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuGroup.js\nvar OverflowMenuGroup = __webpack_require__(84544);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuItem.js\nvar OverflowMenuItem = __webpack_require__(30795);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuControl.js\nvar OverflowMenuControl = __webpack_require__(5367);\n;// CONCATENATED MODULE: ./src/app/Recordings/Filters/LabelFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar getLabelDisplay = function (label) { return "".concat(label.key, ":").concat(label.value); };\nvar LabelFilter = function (_a) {\n var recordings = _a.recordings, filteredLabels = _a.filteredLabels, onSubmit = _a.onSubmit;\n var _b = react.useState(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var onSelect = react.useCallback(function (_, selection, isPlaceholder) {\n if (!isPlaceholder) {\n setIsExpanded(false);\n onSubmit(selection);\n }\n }, [onSubmit, setIsExpanded]);\n var labels = react.useMemo(function () {\n var labels = new Set();\n recordings.forEach(function (r) {\n if (!r || !r.metadata || !r.metadata.labels)\n return;\n parseLabels(r.metadata.labels).map(function (label) { return labels.add(getLabelDisplay(label)); });\n });\n return Array.from(labels)\n .filter(function (l) { return !filteredLabels.includes(l); })\n .sort();\n }, [recordings, filteredLabels]);\n return (react.createElement(Select/* Select */.P, { variant: selectConstants/* SelectVariant.typeahead */.TM.typeahead, onToggle: setIsExpanded, onSelect: onSelect, isOpen: isExpanded, "aria-label": "Filter by label", typeAheadAriaLabel: "Filter by label...", placeholderText: "Filter by label...", maxHeight: "16em" }, labels.map(function (option, index) { return (react.createElement(SelectOption/* SelectOption */.$, { key: index, value: option },\n react.createElement(Label/* Label */._, { key: option, color: "grey" }, option))); })));\n};\n\n;// CONCATENATED MODULE: ./src/app/RecordingMetadata/ClickableLabel.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar ClickableLabel_assign = (undefined && undefined.__assign) || function () {\n ClickableLabel_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ClickableLabel_assign.apply(this, arguments);\n};\nvar ClickableLabel_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nvar ClickableLabel = function (_a) {\n var onLabelClick = _a.onLabelClick, props = ClickableLabel_rest(_a, ["onLabelClick"]);\n var _b = react.useState(false), isHoveredOrFocused = _b[0], setIsHoveredOrFocused = _b[1];\n var labelColor = react.useMemo(function () { return (props.isSelected ? \'blue\' : \'grey\'); }, [props.isSelected]);\n var handleHoveredOrFocused = react.useCallback(function () { return setIsHoveredOrFocused(true); }, [setIsHoveredOrFocused]);\n var handleNonHoveredOrFocused = react.useCallback(function () { return setIsHoveredOrFocused(false); }, [setIsHoveredOrFocused]);\n var style = react.useMemo(function () {\n if (isHoveredOrFocused) {\n var defaultStyle = { cursor: \'pointer\', \'--pf-c-label__content--before--BorderWidth\': \'2.5px\' };\n if (props.isSelected) {\n return ClickableLabel_assign(ClickableLabel_assign({}, defaultStyle), { \'--pf-c-label__content--before--BorderColor\': \'#06c\' });\n }\n return ClickableLabel_assign(ClickableLabel_assign({}, defaultStyle), { \'--pf-c-label__content--before--BorderColor\': \'#8a8d90\' });\n }\n return {};\n }, [props.isSelected, isHoveredOrFocused]);\n var handleLabelClicked = react.useCallback(function () { return onLabelClick(props.label); }, [props.label, onLabelClick]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Label/* Label */._, { "aria-label": "".concat(props.label.key, ": ").concat(props.label.value), style: style, onMouseEnter: handleHoveredOrFocused, onMouseLeave: handleNonHoveredOrFocused, onFocus: handleHoveredOrFocused, onClick: handleLabelClicked, key: props.label.key, color: labelColor }, "".concat(props.label.key, ": ").concat(props.label.value))));\n};\n\n;// CONCATENATED MODULE: ./src/app/RecordingMetadata/LabelCell.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar LabelCell = function (props) {\n var isLabelSelected = react.useCallback(function (label) {\n if (props.clickableOptions) {\n var labelFilterSet = new Set(props.clickableOptions.labelFilters);\n return labelFilterSet.has(getLabelDisplay(label));\n }\n return false;\n }, [props.clickableOptions]);\n var getLabelColor = react.useCallback(function (label) { return (isLabelSelected(label) ? \'blue\' : \'grey\'); }, [isLabelSelected]);\n var onLabelSelectToggle = react.useCallback(function (clickedLabel) {\n if (props.clickableOptions) {\n props.clickableOptions.updateFilters(props.target, {\n filterKey: \'Label\',\n filterValue: getLabelDisplay(clickedLabel),\n deleted: isLabelSelected(clickedLabel),\n });\n }\n }, [isLabelSelected, props.clickableOptions, props.target]);\n return (react.createElement(react.Fragment, null, !!props.labels && props.labels.length ? (props.labels.map(function (label) {\n return props.clickableOptions ? (react.createElement(ClickableLabel, { key: label.key, label: label, isSelected: isLabelSelected(label), onLabelClick: onLabelSelectToggle })) : (react.createElement(Label/* Label */._, { "aria-label": "".concat(label.key, ": ").concat(label.value), key: label.key, color: getLabelColor(label) }, "".concat(label.key, ": ").concat(label.value)));\n })) : (react.createElement(Text/* Text */.x, null, "-"))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/RecordingActions.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar RecordingActions = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var _a = react.useState(false), grafanaEnabled = _a[0], setGrafanaEnabled = _a[1];\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n react.useEffect(function () {\n addSubscription(context.api\n .grafanaDatasourceUrl()\n .pipe((0,first/* first */.P)())\n .subscribe(function () { return setGrafanaEnabled(true); }));\n }, [context.api, setGrafanaEnabled, addSubscription]);\n var grafanaUpload = react.useCallback(function () {\n notifications.info(\'Upload Started\', "Recording \\"".concat(props.recording.name, "\\" uploading..."));\n addSubscription(props\n .uploadFn()\n .pipe((0,first/* first */.P)())\n .subscribe(function (success) {\n if (success) {\n notifications.success(\'Upload Success\', "Recording \\"".concat(props.recording.name, "\\" uploaded"));\n context.api\n .grafanaDashboardUrl()\n .pipe((0,first/* first */.P)())\n .subscribe(function (url) { return window.open(url, \'_blank\'); });\n }\n }));\n }, [addSubscription, notifications, props, context.api]);\n var handleDownloadRecording = react.useCallback(function () {\n context.api.downloadRecording(props.recording);\n }, [context.api, props.recording]);\n var handleViewReport = react.useCallback(function () {\n context.api.downloadReport(props.recording);\n }, [context.api, props.recording]);\n var actionItems = react.useMemo(function () {\n var actionItems = [\n {\n title: \'Download Recording\',\n key: \'download-recording\',\n onClick: handleDownloadRecording,\n },\n {\n title: \'View Report ...\',\n key: \'view-report\',\n onClick: handleViewReport,\n },\n ];\n if (grafanaEnabled) {\n actionItems.push({\n title: \'View in Grafana ...\',\n key: \'view-in-grafana\',\n onClick: grafanaUpload,\n });\n }\n return actionItems;\n }, [handleDownloadRecording, handleViewReport, grafanaEnabled, grafanaUpload]);\n var onSelect = react.useCallback(function (action) {\n setIsOpen(false);\n action.onClick();\n }, [setIsOpen]);\n return (react.createElement(Td.Td, { isActionCell: true },\n react.createElement(Dropdown/* Dropdown */.L, { "aria-label": "".concat(props.recording.name, "-actions"), menuAppendTo: document.body, position: "right", direction: "down", toggle: react.createElement(KebabToggle/* KebabToggle */.a, { id: "toggle-kebab", onToggle: setIsOpen, "data-quickstart-id": "recording-kebab" }), isPlain: true, isOpen: isOpen, dropdownItems: actionItems.map(function (action) { return (react.createElement(DropdownItem/* DropdownItem */.h, { key: action.key, onClick: function () { return onSelect(action); }, "data-quickstart-id": action.key }, action.title)); }) })));\n};\n\n;// CONCATENATED MODULE: ./src/app/DateTimePicker/MeridiemPicker.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar MeridiemPicker = function (_a) {\n var _b = _a.onSelect, onSelect = _b === void 0 ? function () { return undefined; } : _b, _c = _a.isAM, isAM = _c === void 0 ? true : _c;\n var t = (0,es/* useTranslation */.$G)()[0];\n var handleSelectAM = react.useCallback(function () {\n onSelect(true);\n }, [onSelect]);\n var handleSelectPM = react.useCallback(function () {\n onSelect(false);\n }, [onSelect]);\n return (react.createElement("div", { role: \'listbox\', "aria-label": t(\'MeridiemPicker.ARIA_LABELS.LISTBOX\') || \'\', className: "datetime-picker__meridiem-title-stack" },\n react.createElement("div", { className: (0,esm.css)(\'datetime-picker__meridiem-tile\', "".concat(isAM ? \'\' : \'un\', "selected")), onClick: handleSelectAM }, t(\'MERIDIEM_AM\', { ns: \'common\' })),\n react.createElement("div", { className: (0,esm.css)(\'datetime-picker__meridiem-tile\', "".concat(isAM ? \'un\' : \'\', "selected")), onClick: handleSelectPM }, t(\'MERIDIEM_PM\', { ns: \'common\' }))));\n};\n\n;// CONCATENATED MODULE: ./src/i18n/datetimeUtils.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar hourIn12HrFormat = function (hourIn24h) {\n // return [hour, isAM]\n hourIn24h = (0,lodash.clamp)(hourIn24h, 0, 23);\n if (hourIn24h > 12) {\n return [hourIn24h - 12, false];\n }\n else if (hourIn24h === 0) {\n return [12, true]; // 12AM\n }\n else {\n return [hourIn24h, true];\n }\n};\nvar hourIn24HrFormat = function (hourIn12h, isAM) {\n hourIn12h = (0,lodash.clamp)(hourIn12h, 0, 12);\n return (0,i18n_datetime/* default */.ZP)("2023-01-01 ".concat(hourIn12h, ":00:00 ").concat(isAM ? \'AM\' : \'PM\'), \'YY-MM-DD H:mm:ss A\').hour();\n};\nvar isHourIn24hAM = function (hourIn24h) {\n hourIn24h = (0,lodash.clamp)(hourIn24h, 0, 23);\n var marker = (0,i18n_datetime/* default */.ZP)("2023-01-01 12:00");\n return (0,i18n_datetime/* default */.ZP)("2023-01-01 ".concat(hourIn24h, ":00")).isBefore(marker);\n};\nvar format2Digit = function (value) {\n return value.toLocaleString(\'en\', {\n minimumIntegerDigits: 2,\n });\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Panel/Panel.js\nvar Panel = __webpack_require__(93774);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Panel/PanelMain.js\nvar PanelMain = __webpack_require__(45529);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Panel/PanelMainBody.js\nvar PanelMainBody = __webpack_require__(32510);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Panel/PanelFooter.js\nvar PanelFooter = __webpack_require__(52845);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/angle-up-icon.js\nvar angle_up_icon = __webpack_require__(20794);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/angle-down-icon.js\nvar angle_down_icon = __webpack_require__(9003);\n;// CONCATENATED MODULE: ./src/app/DateTimePicker/TimePicker.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar TimePicker = function (_a) {\n var onHourSelect = _a.onHourSelect, onMinuteSelect = _a.onMinuteSelect, onSecondSelect = _a.onSecondSelect, onMeridiemSelect = _a.onMeridiemSelect, selected = _a.selected;\n var t = (0,es/* useTranslation */.$G)()[0];\n var _b = react.useState(true), is24h = _b[0], setIs24h = _b[1];\n var meridiemAM = react.useMemo(function () { return isHourIn24hAM(selected.hour24); }, [selected.hour24]);\n var handleHourSelect = react.useCallback(function (rawHour) {\n var hour = is24h ? rawHour : hourIn24HrFormat(rawHour, meridiemAM);\n onHourSelect && onHourSelect(hour);\n }, [is24h, onHourSelect, meridiemAM]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Panel/* Panel */.s, null,\n react.createElement(PanelMain/* PanelMain */.c, null,\n react.createElement(PanelMainBody/* PanelMainBody */.C, null,\n react.createElement(Level/* Level */.a, { hasGutter: true },\n react.createElement(LevelItem/* LevelItem */.Z, { key: \'hour\' },\n react.createElement(TimeSpinner, { variant: is24h ? \'hour24\' : \'hour12\', label: t(\'HOUR\', { ns: \'common\' }), selected: is24h ? selected.hour24 : hourIn12HrFormat(selected.hour24)[0], onChange: handleHourSelect })),\n react.createElement(LevelItem/* LevelItem */.Z, { key: \'splitter-1\' },\n react.createElement("div", { className: "datetime-picker__colon-divider" }, ":")),\n react.createElement(LevelItem/* LevelItem */.Z, { key: \'minute\' },\n react.createElement(TimeSpinner, { variant: \'minute\', label: t(\'MINUTE\', { ns: \'common\' }), selected: selected.minute, onChange: onMinuteSelect })),\n react.createElement(LevelItem/* LevelItem */.Z, { key: \'splitter-2\' },\n react.createElement("div", { className: "datetime-picker__colon-divider" }, ":")),\n react.createElement(LevelItem/* LevelItem */.Z, { key: \'second\' },\n react.createElement(TimeSpinner, { variant: \'second\', label: t(\'SECOND\', { ns: \'common\' }), selected: selected.second, onChange: onSecondSelect })),\n is24h ? (react.createElement(react.Fragment, null)) : (react.createElement(LevelItem/* LevelItem */.Z, { key: \'meridiem\' },\n react.createElement(MeridiemPicker, { isAM: meridiemAM, onSelect: onMeridiemSelect }))))),\n react.createElement(Divider/* Divider */.i, null),\n react.createElement(PanelFooter/* PanelFooter */.j, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'TimePicker.USE_24HR_TIME\'))),\n react.createElement(Switch/* Switch */.r, { id: \'24-hour-switch\', label: t(\'TimePicker.24HOUR\'), isChecked: is24h, onChange: setIs24h }))))));\n};\nvar TimeSpinner = function (_a) {\n var variant = _a.variant, onChange = _a.onChange, selected = _a.selected, label = _a.label;\n var t = (0,es/* useTranslation */.$G)()[0];\n var computedMax = react.useMemo(function () {\n switch (variant) {\n case \'hour12\':\n return 12;\n case \'hour24\':\n return 23;\n default: // minute, second\n return 59;\n }\n }, [variant]);\n var computedMin = react.useMemo(function () {\n switch (variant) {\n case \'hour12\':\n return 1;\n default:\n return 0; // hour24, minute, second\n }\n }, [variant]);\n var _sanitizeValue = react.useCallback(function (value) {\n return lodash_default().clamp(value, computedMin, computedMax);\n }, [computedMax, computedMin]);\n var handleValueChange = react.useCallback(function (value) {\n if (isNaN(Number(value))) {\n return;\n }\n var newVal = _sanitizeValue(Number(value));\n onChange && onChange(newVal);\n }, [onChange, _sanitizeValue]);\n var handleIncrement = react.useCallback(function () {\n var newVal = _sanitizeValue(selected + 1);\n onChange && onChange(newVal);\n }, [selected, _sanitizeValue, onChange]);\n var handleDecrement = react.useCallback(function () {\n var newVal = _sanitizeValue(selected - 1);\n onChange && onChange(newVal);\n }, [selected, _sanitizeValue, onChange]);\n return (react.createElement(Stack/* Stack */.K, { "aria-label": label || variant },\n label ? (react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Title/* Title */.D, { className: "datetime-picker__time-text-top-label", headingLevel: \'h4\' }, label))) : (react.createElement(react.Fragment, null)),\n react.createElement(StackItem/* StackItem */.v, { key: "".concat(variant, "-increment") },\n react.createElement(Button_Button/* Button */.zx, { className: (0,esm.css)(\'datetime-picker__time-spin-box\', \'up\'), onClick: handleIncrement, "aria-label": t("TimeSpinner.INCREMENT_".concat(variant.toUpperCase(), "_VALUE")) || \'\' },\n react.createElement(angle_up_icon/* AngleUpIcon */.Tj, { size: "md" }))),\n react.createElement(StackItem/* StackItem */.v, { key: "".concat(variant, "-input") },\n react.createElement(TextInput/* TextInput */.oi, { id: "".concat(variant, "-input"), "aria-label": t("TimeSpinner.INPUT_".concat(variant.toUpperCase(), "_VALUE")) || \'\', className: "datetime-picker__number-input", type: "number", min: computedMin, max: computedMax, value: format2Digit(selected), onChange: handleValueChange })),\n react.createElement(StackItem/* StackItem */.v, { key: "".concat(variant, "-decrement") },\n react.createElement(Button_Button/* Button */.zx, { className: (0,esm.css)(\'datetime-picker__time-spin-box\', \'down\'), onClick: handleDecrement, "aria-label": t("TimeSpinner.DECREMENT_".concat(variant.toUpperCase(), "_VALUE")) || \'\' },\n react.createElement(angle_down_icon/* AngleDownIcon */.LC, { size: "md" })))));\n};\n/**\n * t(\'TimeSpinner.INPUT_HOUR12_VALUE\')\n * t(\'TimeSpinner.INPUT_HOUR24_VALUE\')\n * t(\'TimeSpinner.INPUT_MINUTE_VALUE\')\n * t(\'TimeSpinner.INPUT_SECOND_VALUE\')\n * t(\'TimeSpinner.INCREMENT_HOUR12_VALUE\')\n * t(\'TimeSpinner.INCREMENT_HOUR24_VALUE\')\n * t(\'TimeSpinner.INCREMENT_MINUTE_VALUE\')\n * t(\'TimeSpinner.INCREMENT_SECOND_VALUE\')\n * t(\'TimeSpinner.DECREMENT_HOUR12_VALUE\')\n * t(\'TimeSpinner.DECREMENT_HOUR24_VALUE\')\n * t(\'TimeSpinner.DECREMENT_MINUTE_VALUE\')\n * t(\'TimeSpinner.DECREMENT_SECOND_VALUE\')\n */\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/CalendarMonth/CalendarMonth.js\nvar CalendarMonth = __webpack_require__(99890);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/globe-icon.js\nvar globe_icon = __webpack_require__(89061);\n;// CONCATENATED MODULE: ./src/app/DateTimePicker/TimezonePicker.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar TimezonePicker_assign = (undefined && undefined.__assign) || function () {\n TimezonePicker_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TimezonePicker_assign.apply(this, arguments);\n};\n\n\n\n\n\n\n\nvar DEFAULT_NUM_OPTIONS = 10;\nvar OPTION_INCREMENT = 15;\nvar TimezonePicker = function (_a) {\n var _b = _a.isFlipEnabled, isFlipEnabled = _b === void 0 ? true : _b, isCompact = _a.isCompact, _c = _a.menuAppendTo, menuAppendTo = _c === void 0 ? \'parent\' : _c, selected = _a.selected, _d = _a.onTimezoneChange, onTimezoneChange = _d === void 0 ? function (_) { return undefined; } : _d;\n var t = (0,es/* useTranslation */.$G)()[0];\n var _f = useDayjs(), dayjs = _f[0], _ = _f[1];\n var _g = react.useState(DEFAULT_NUM_OPTIONS), numOfOptions = _g[0], setNumOfOptions = _g[1];\n var _h = react.useState(false), isTimezoneOpen = _h[0], setIsTimezoneOpen = _h[1];\n var onSelect = react.useCallback(function (_, timezone, isPlaceholder) {\n if (isPlaceholder) {\n return;\n }\n setIsTimezoneOpen(false);\n onTimezoneChange({\n full: timezone.full,\n short: timezone.short,\n });\n }, [onTimezoneChange, setIsTimezoneOpen]);\n var timezones = react.useMemo(function () { return (0,i18n_datetime/* supportedTimezones */.a$)(); }, []);\n var handleViewMore = react.useCallback(function (_e) {\n setNumOfOptions(function (old) { return Math.min(old + OPTION_INCREMENT, timezones.length); });\n }, [setNumOfOptions, timezones]);\n var mapToSelection = react.useCallback(function (timezone, isCompact) {\n return (react.createElement(SelectOption/* SelectOption */.$, { key: timezone.full, value: TimezonePicker_assign(TimezonePicker_assign({}, timezone), { toString: function () { return timezone.full; }, compareTo: function (val) { return timezone.full === val.full; } }), description: isCompact ? timezone.full : timezone.short }, isCompact ? timezone.short : "(UTC".concat(dayjs().tz(timezone.full).format(\'Z\'), ") ").concat(timezone.full)));\n }, [dayjs]);\n var options = react.useMemo(function () {\n return timezones\n .slice(0, numOfOptions)\n .map(function (timezone) { return mapToSelection(timezone, isCompact); })\n .concat(numOfOptions < timezones.length\n ? [\n react.createElement(SelectOption/* SelectOption */.$, { key: "view-more", isPlaceholder: true, onClick: handleViewMore },\n react.createElement("span", { className: (0,esm.css)(\'pf-c-button\', \'pf-m-link\', \'pf-m-inline\') }, t(\'VIEW_MORE\', { ns: \'common\' }))),\n ]\n : []);\n }, [isCompact, timezones, numOfOptions, t, handleViewMore, mapToSelection]);\n var onFilter = react.useCallback(function (_, value) {\n if (!value) {\n return options;\n }\n var matchExp = new RegExp(value.replace(/([+])/gi, "\\\\$1"), \'i\');\n return timezones\n .filter(function (op) { return matchExp.test(op.full) || matchExp.test(op.short); })\n .map(function (t) { return mapToSelection(t, isCompact); });\n }, [timezones, options, isCompact, mapToSelection]);\n return (react.createElement(Select/* Select */.P, { variant: selectConstants/* SelectVariant.single */.TM.single, onToggle: setIsTimezoneOpen, isFlipEnabled: isFlipEnabled, menuAppendTo: menuAppendTo, maxHeight: "16em", width: isCompact ? \'8.5em\' : undefined, selections: TimezonePicker_assign(TimezonePicker_assign({}, selected), { toString: function () { return selected.full; }, compareTo: function (val) { return selected.full === val.full; } }), onSelect: onSelect, onFilter: onFilter, hasInlineFilter: true, "aria-label": t(\'TimezonePicker.ARIA_LABELS.SELECT\') || \'\', typeAheadAriaLabel: t(\'TimezonePicker.ARIA_LABELS.TYPE_AHEAD\') || \'\', isOpen: isTimezoneOpen, toggleIndicator: react.createElement(globe_icon/* GlobeIcon */.n9, null) }, options));\n};\n\n;// CONCATENATED MODULE: ./src/app/DateTimePicker/DateTimePicker.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar DateTimePicker = function (_a) {\n var onSelect = _a.onSelect, onDismiss = _a.onDismiss, prefilledDate = _a.prefilledDate;\n var t = (0,es/* useTranslation */.$G)()[0];\n var _b = useDayjs(), dayjs = _b[0], _ = _b[1];\n var _c = react.useState(\'date\'), activeTab = _c[0], setActiveTab = _c[1];\n var _d = react.useState(new Date()), datetime = _d[0], setDatetime = _d[1];\n var _e = react.useState(i18n_datetime/* defaultDatetimeFormat.timeZone */.wO.timeZone), timezone = _e[0], setTimezone = _e[1]; // Not affected by user preferences\n var handleTabSelect = react.useCallback(function (_, key) { return setActiveTab("".concat(key)); }, [setActiveTab]);\n var handleSubmit = react.useCallback(function () {\n onSelect && onSelect(datetime, timezone);\n }, [datetime, timezone, onSelect]);\n var handleCalendarSelect = react.useCallback(function (date) {\n setDatetime(function (old) {\n var wrappedOld = dayjs(old);\n return dayjs(date).hour(wrappedOld.hour()).minute(wrappedOld.minute()).second(wrappedOld.second()).toDate();\n });\n setActiveTab(\'time\'); // Switch to time\n }, [setDatetime, setActiveTab, dayjs]);\n var handleHourChange = react.useCallback(function (hrIn24h) {\n setDatetime(function (old) { return dayjs(old).hour(hrIn24h).toDate(); });\n }, [setDatetime, dayjs]);\n var handleMinuteChange = react.useCallback(function (m) {\n setDatetime(function (old) { return dayjs(old).minute(m).toDate(); });\n }, [setDatetime, dayjs]);\n var handleSecondChange = react.useCallback(function (s) {\n setDatetime(function (old) { return dayjs(old).second(s).toDate(); });\n }, [setDatetime, dayjs]);\n var handleMeridiemChange = react.useCallback(function (isAM) {\n setDatetime(function (old) {\n var oldDayjs = dayjs(old);\n if (isAM !== isHourIn24hAM(oldDayjs.hour())) {\n return (isAM ? oldDayjs.subtract(12, \'hour\') : oldDayjs.add(12, \'hour\')).toDate();\n }\n return old;\n });\n }, [setDatetime, dayjs]);\n var selectedDatetimeDisplay = react.useMemo(function () { return dayjs(datetime).format(\'L LTS\'); }, [datetime, dayjs]);\n react.useEffect(function () {\n if (prefilledDate) {\n setDatetime(new Date(prefilledDate));\n }\n }, [setDatetime, prefilledDate]);\n return (react.createElement(Form/* Form */.l, null,\n react.createElement(Tabs/* Tabs */.m, { "aria-label": t(\'DateTimePicker.ARIA_LABELS.TABS\') || \'\', onSelect: handleTabSelect, activeKey: activeTab, isFilled: true, role: "region" },\n react.createElement(Tab/* Tab */.O, { key: \'date\', eventKey: \'date\', title: react.createElement(TabTitleText/* TabTitleText */.T, null, t(\'DATE\', { ns: \'common\' })) },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(CalendarMonth/* CalendarMonth */.C, { className: "datetime-picker__calendar", isDateFocused: true, locale: dayjs.locale(), inlineProps: {\n component: \'article\',\n ariaLabelledby: \'start-date\',\n }, style: { padding: 0 }, date: datetime, onChange: handleCalendarSelect })))),\n react.createElement(Tab/* Tab */.O, { key: \'time\', eventKey: \'time\', title: react.createElement(TabTitleText/* TabTitleText */.T, null, t(\'TIME\', { ns: \'common\' })) },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(TimePicker, { selected: {\n hour24: dayjs(datetime).hour(),\n minute: dayjs(datetime).minute(),\n second: dayjs(datetime).second(),\n }, onHourSelect: handleHourChange, onMinuteSelect: handleMinuteChange, onSecondSelect: handleSecondChange, onMeridiemSelect: handleMeridiemChange }))))),\n react.createElement(FormGroup/* FormGroup */.c, { label: t(\'DateTimePicker.SELECTED_DATETIME\') },\n react.createElement(Flex/* Flex */.k, null,\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(TextInput/* TextInput */.oi, { id: "selected-datetime", "aria-label": t(\'DateTimePicker.ARIA_LABELS.DISPLAY_SELECTED_DATETIME\') || \'\', className: "datetime-picker__datetime-selected-display", readOnly: true, value: selectedDatetimeDisplay })),\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(TimezonePicker, { menuAppendTo: document.body, onTimezoneChange: setTimezone, selected: timezone, isCompact: true })))),\n react.createElement(ActionGroup/* ActionGroup */.W, { style: { marginTop: 0 } },\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleSubmit }, t(\'SELECT\', { ns: \'common\' })),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: onDismiss }, t(\'CANCEL\', { ns: \'common\' })))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/outlined-calendar-alt-icon.js\nvar outlined_calendar_alt_icon = __webpack_require__(23698);\n;// CONCATENATED MODULE: ./src/app/Recordings/Filters/DatetimeFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar _emptyDatetimeInput = {\n text: \'\',\n date: undefined,\n validation: constants/* ValidatedOptions.default */.LD["default"],\n};\nvar DateTimeFilter = function (_a) {\n var onSubmit = _a.onSubmit;\n var _b = useDayjs(), dayjs = _b[0], datetimeContext = _b[1];\n var _c = react.useState(_emptyDatetimeInput), datetimeInput = _c[0], setDatetimeInput = _c[1];\n var _d = react.useState(false), isCalendarOpen = _d[0], setIsCalendarOpen = _d[1];\n var onToggleCalendar = react.useCallback(function () { return setIsCalendarOpen(function (open) { return !open; }); }, [setIsCalendarOpen]);\n var onPopoverDismiss = react.useCallback(function () { return setIsCalendarOpen(false); }, [setIsCalendarOpen]);\n var handleSubmit = react.useCallback(function () {\n if (datetimeInput.validation === constants/* ValidatedOptions.success */.LD.success) {\n // internally uses ISOString but display will be localized.\n onSubmit(dayjs(datetimeInput.date).toISOString());\n setDatetimeInput(_emptyDatetimeInput);\n }\n }, [onSubmit, datetimeInput, setDatetimeInput, dayjs]);\n var handleDatetimeSelect = react.useCallback(function (date, timezone) {\n var d = dayjs(date).tz(timezone.full, true);\n setDatetimeInput({\n text: d.toISOString(),\n date: d.toDate(),\n validation: constants/* ValidatedOptions.success */.LD.success,\n });\n onPopoverDismiss();\n }, [setDatetimeInput, onPopoverDismiss, dayjs]);\n var handleTextInput = react.useCallback(function (value) {\n setDatetimeInput(function (_) {\n if (value === \'\') {\n return _emptyDatetimeInput;\n }\n var d = dayjs.utc(value, \'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\', true); // Parse ISO8601, must be in UTC\n if (d.isValid()) {\n return {\n text: value,\n date: d.toDate(),\n validation: constants/* ValidatedOptions.success */.LD.success,\n };\n }\n else {\n return {\n text: value,\n date: undefined,\n validation: constants/* ValidatedOptions.error */.LD.error,\n };\n }\n });\n }, [setDatetimeInput, dayjs]);\n return (react.createElement(Flex/* Flex */.k, null,\n react.createElement(Flex/* Flex */.k, { alignSelf: { default: \'alignSelfFlexStart\' } },\n react.createElement(FlexItem/* FlexItem */.B, { spacer: { default: \'spacerNone\' } },\n react.createElement(Popover/* Popover */.J, { appendTo: utils/* portalRoot */.tO, bodyContent: react.createElement(DateTimePicker, { onSelect: handleDatetimeSelect, onDismiss: onPopoverDismiss, prefilledDate: datetimeInput.date }), isVisible: isCalendarOpen, showClose: false, minWidth: \'28em\', position: Popover/* PopoverPosition.bottom */.I.bottom, flipBehavior: [\'bottom\'] },\n react.createElement(Stack/* Stack */.K, null,\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(InputGroup/* InputGroup */.B, null,\n react.createElement(TextInput/* TextInput */.oi, { type: "text", id: "date-time", placeholder: dayjs().startOf(\'year\').tz(datetimeContext.timeZone.full, true).toISOString(), "aria-label": (0,esm_i18next.t)(\'DatetimeFilter.ARIA_LABELS.DATETIME_INPUT\') || \'\', value: datetimeInput.text, validated: datetimeInput.validation, onChange: handleTextInput }),\n react.createElement(Button_Button/* Button */.zx, { variant: "control", "aria-label": (0,esm_i18next.t)(\'DatetimeFilter.ARIA_LABELS.TOGGLE_CALENDAR\') || \'\', onClick: onToggleCalendar },\n react.createElement(outlined_calendar_alt_icon/* OutlinedCalendarAltIcon */.Yp, null)))),\n datetimeInput.validation === constants/* ValidatedOptions.error */.LD.error ? (react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, { variant: "error" }, (0,esm_i18next.t)(\'DatetimeFilter.INVALID_DATE_TEXT\'))))) : (react.createElement(react.Fragment, null)))))),\n react.createElement(FlexItem/* FlexItem */.B, { alignSelf: { default: \'alignSelfFlexStart\' } },\n react.createElement(Button_Button/* Button */.zx, { variant: Button_Button/* ButtonVariant.control */.Wu.control, "aria-label": (0,esm_i18next.t)(\'DatetimeFilter.ARIA_LABELS.SEARCH_BUTTON\') || \'\', isDisabled: datetimeInput.validation !== constants/* ValidatedOptions.success */.LD.success, onClick: handleSubmit },\n react.createElement(search_icon/* SearchIcon */.W1, null)))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/Filters/DurationFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar DurationFilter = function (_a) {\n var durations = _a.durations, onDurationInput = _a.onDurationInput, onContinuousDurationSelect = _a.onContinuousDurationSelect;\n var _b = react.useState(30), duration = _b[0], setDuration = _b[1];\n var isContinuous = react.useMemo(function () { return durations && durations.includes(\'continuous\'); }, [durations]);\n var handleContinuousCheckBoxChange = react.useCallback(function (checked) {\n onContinuousDurationSelect(checked);\n }, [onContinuousDurationSelect]);\n var handleEnterKey = react.useCallback(function (e) {\n if (e.key && e.key !== \'Enter\') {\n return;\n }\n onDurationInput(duration);\n }, [onDurationInput, duration]);\n return (react.createElement(Flex/* Flex */.k, null,\n react.createElement(FlexItem/* FlexItem */.B, { flex: { default: \'flex_1\' } },\n react.createElement(TextInput/* TextInput */.oi, { type: "number", value: duration, id: "duration-input", "aria-label": "duration filter", onChange: function (e) { return setDuration(Number(e)); }, min: "0", onKeyDown: handleEnterKey })),\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(Checkbox/* Checkbox */.X, { label: "Continuous", id: "continuous-checkbox", isChecked: isContinuous, onChange: handleContinuousCheckBoxChange }))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/Filters/NameFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar NameFilter = function (_a) {\n var recordings = _a.recordings, filteredNames = _a.filteredNames, onSubmit = _a.onSubmit;\n var _b = react.useState(false), isExpanded = _b[0], setIsExpanded = _b[1];\n var onSelect = react.useCallback(function (_, selection, isPlaceholder) {\n if (!isPlaceholder) {\n setIsExpanded(false);\n onSubmit(selection);\n }\n }, [onSubmit, setIsExpanded]);\n var nameOptions = react.useMemo(function () {\n return recordings\n .map(function (r) { return r.name; })\n .filter(function (n) { return !filteredNames.includes(n); })\n .map(function (option, index) { return react.createElement(SelectOption/* SelectOption */.$, { key: index, value: option }); });\n }, [recordings, filteredNames]);\n return (react.createElement(Select/* Select */.P, { variant: selectConstants/* SelectVariant.typeahead */.TM.typeahead, onToggle: setIsExpanded, onSelect: onSelect, isOpen: isExpanded, typeAheadAriaLabel: "Filter by name...", placeholderText: "Filter by name...", "aria-label": "Filter by name", maxHeight: "16em" }, nameOptions));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/Filters/RecordingStateFilter.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar RecordingStateFilter = function (_a) {\n var filteredStates = _a.filteredStates, onSelectToggle = _a.onSelectToggle;\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var onSelect = react.useCallback(function (_, selection) {\n setIsOpen(false);\n onSelectToggle(selection);\n }, [setIsOpen, onSelectToggle]);\n return (react.createElement(Select/* Select */.P, { variant: selectConstants/* SelectVariant.checkbox */.TM.checkbox, onToggle: setIsOpen, onSelect: onSelect, selections: filteredStates, isOpen: isOpen, "aria-label": "Filter by state", placeholderText: "Filter by state" }, Object.values(Api_service/* RecordingState */.SR).map(function (rs) { return (react.createElement(SelectOption/* SelectOption */.$, { "aria-label": "".concat(rs, " State"), key: rs, value: rs })); })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/RecordingFilters.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar RecordingFilters_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar categoriesToDisplayNames = {\n Name: \'Name\',\n Label: \'Label\',\n State: \'Recording State\',\n StartedBeforeDate: \'Started Before Date\',\n StartedAfterDate: \'Started After Date\',\n DurationSeconds: \'Duration (s)\',\n};\nvar categoryIsDate = function (fieldKey) { return /date/i.test(fieldKey); };\nvar RecordingFilters = function (_a) {\n var target = _a.target, isArchived = _a.isArchived, recordings = _a.recordings, filters = _a.filters, _b = _a.breakpoint, breakpoint = _b === void 0 ? \'xl\' : _b, updateFilters = _a.updateFilters;\n var _c = useDayjs(), formatter = _c[0], _ = _c[1];\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var currentCategory = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var targetRecordingFilters = state.recordingFilters.list.filter(function (targetFilter) { return targetFilter.target === target; });\n if (!targetRecordingFilters.length)\n return \'Name\'; // Target is not yet loaded\n return (isArchived ? targetRecordingFilters[0].archived : targetRecordingFilters[0].active).selectedCategory;\n });\n var _d = react.useState(false), isCategoryDropdownOpen = _d[0], setIsCategoryDropdownOpen = _d[1];\n var onCategoryToggle = react.useCallback(function () {\n setIsCategoryDropdownOpen(function (opened) { return !opened; });\n }, [setIsCategoryDropdownOpen]);\n var onCategorySelect = react.useCallback(function (category) {\n setIsCategoryDropdownOpen(false);\n dispatch(ReduxStore_recordingUpdateCategoryIntent(target, category, isArchived));\n }, [dispatch, setIsCategoryDropdownOpen, target, isArchived]);\n var onDelete = react.useCallback(function (category, chip) {\n var value = typeof chip === \'string\' ? chip : chip.key;\n updateFilters(target, { filterKey: category, filterValue: value, deleted: true });\n }, [updateFilters, target]);\n var onDeleteGroup = react.useCallback(function (chip) {\n var category = typeof chip === \'string\' ? chip : chip.key;\n updateFilters(target, { filterKey: category, deleted: true, deleteOptions: { all: true } });\n }, [updateFilters, target]);\n var onNameInput = react.useCallback(function (inputName) { return updateFilters(target, { filterKey: currentCategory, filterValue: inputName }); }, [updateFilters, currentCategory, target]);\n var onLabelInput = react.useCallback(function (inputLabel) { return updateFilters(target, { filterKey: currentCategory, filterValue: inputLabel }); }, [updateFilters, currentCategory, target]);\n var onStartedBeforeInput = react.useCallback(function (searchDate) { return updateFilters(target, { filterKey: currentCategory, filterValue: searchDate }); }, [updateFilters, currentCategory, target]);\n var onStartedAfterInput = react.useCallback(function (searchDate) { return updateFilters(target, { filterKey: currentCategory, filterValue: searchDate }); }, [updateFilters, currentCategory, target]);\n var onDurationInput = react.useCallback(function (duration) { return updateFilters(target, { filterKey: currentCategory, filterValue: "".concat(duration.toString(), " s") }); }, [updateFilters, currentCategory, target]);\n var onRecordingStateSelectToggle = react.useCallback(function (searchState) {\n var deleted = filters.State && filters.State.includes(searchState);\n updateFilters(target, { filterKey: currentCategory, filterValue: searchState, deleted: deleted });\n }, [updateFilters, currentCategory, target, filters.State]);\n var onContinuousDurationSelect = react.useCallback(function (cont) { return updateFilters(target, { filterKey: currentCategory, filterValue: \'continuous\', deleted: !cont }); }, [updateFilters, currentCategory, target]);\n var categoryDropdown = react.useMemo(function () {\n return (react.createElement(Dropdown/* Dropdown */.L, { "aria-label": \'Category Dropdown\', position: dropdownConstants/* DropdownPosition.left */.ir.left, toggle: react.createElement(DropdownToggle/* DropdownToggle */.Z, { "aria-label": currentCategory, onToggle: onCategoryToggle },\n react.createElement(filter_icon/* FilterIcon */.k1, null),\n " ",\n categoriesToDisplayNames[currentCategory]), isOpen: isCategoryDropdownOpen, dropdownItems: (!isArchived ? allowedActiveRecordingFilters : allowedArchivedRecordingFilters).map(function (cat) { return (react.createElement(DropdownItem/* DropdownItem */.h, { "aria-label": categoriesToDisplayNames[cat], key: cat, onClick: function () { return onCategorySelect(cat); } }, categoriesToDisplayNames[cat])); }) }));\n }, [isArchived, isCategoryDropdownOpen, currentCategory, onCategoryToggle, onCategorySelect]);\n var filterDropdownItems = react.useMemo(function () { return RecordingFilters_spreadArray([\n react.createElement(NameFilter, { key: \'name\', recordings: recordings, onSubmit: onNameInput, filteredNames: filters.Name }),\n react.createElement(LabelFilter, { key: \'label\', recordings: recordings, onSubmit: onLabelInput, filteredLabels: filters.Label })\n ], (!isArchived\n ? [\n react.createElement(RecordingStateFilter, { key: \'recording-state\', filteredStates: filters.State, onSelectToggle: onRecordingStateSelectToggle }),\n react.createElement(DateTimeFilter, { key: \'datetime-before\', onSubmit: onStartedBeforeInput }),\n react.createElement(DateTimeFilter, { key: \'datetime-after\', onSubmit: onStartedAfterInput }),\n react.createElement(DurationFilter, { key: \'duration\', durations: filters.DurationSeconds, onContinuousDurationSelect: onContinuousDurationSelect, onDurationInput: onDurationInput }),\n ]\n : []), true); }, [\n isArchived,\n recordings,\n filters.Name,\n filters.Label,\n filters.State,\n filters.DurationSeconds,\n onNameInput,\n onLabelInput,\n onRecordingStateSelectToggle,\n onStartedAfterInput,\n onStartedBeforeInput,\n onContinuousDurationSelect,\n onDurationInput,\n ]);\n return (react.createElement(ToolbarToggleGroup/* ToolbarToggleGroup */.R, { toggleIcon: react.createElement(filter_icon/* FilterIcon */.k1, null), breakpoint: breakpoint },\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, { style: { alignSelf: \'start\' }, key: \'category-select\' }, categoryDropdown),\n Object.keys(filters).map(function (filterKey, i) { return (react.createElement(ToolbarFilter/* ToolbarFilter */.p, { key: "".concat(filterKey, "-filter"), className: "recording-filter__toolbar-filter", chips: categoryIsDate(filterKey)\n ? filters[filterKey].map(function (ISOStr) {\n return {\n node: formatter(ISOStr).format(\'L LTS z\'),\n key: ISOStr,\n };\n })\n : filters[filterKey].map(function (v) { return ({ node: v, key: v }); }), deleteChip: onDelete, deleteChipGroup: onDeleteGroup, categoryName: {\n key: filterKey,\n name: categoriesToDisplayNames[filterKey],\n }, showToolbarItem: filterKey === currentCategory }, filterDropdownItems[i])); }))));\n};\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nvar filterRecordings = function (recordings, filters) {\n if (!recordings || !recordings.length) {\n return recordings;\n }\n var filtered = recordings;\n if (filters.Name.length) {\n filtered = filtered.filter(function (r) { return filters.Name.includes(r.name); });\n }\n if (!!filters.State && !!filters.State.length) {\n filtered = filtered.filter(function (r) { return !!filters.State && filters.State.includes(r.state); });\n }\n if (!!filters.DurationSeconds && !!filters.DurationSeconds.length) {\n filtered = filtered.filter(function (r) {\n if (!filters.DurationSeconds)\n return true;\n return (filters.DurationSeconds.includes("".concat(r.duration / 1000, " s")) ||\n (filters.DurationSeconds.includes(\'continuous\') && r.continuous));\n });\n }\n if (!!filters.StartedBeforeDate && !!filters.StartedBeforeDate.length) {\n filtered = filtered.filter(function (rec) {\n if (!filters.StartedBeforeDate)\n return true;\n return filters.StartedBeforeDate.filter(function (startedBefore) {\n var beforeDate = (0,i18n_datetime/* default */.ZP)(startedBefore);\n return (0,i18n_datetime/* default */.ZP)(rec.startTime).isBefore(beforeDate);\n }).length;\n });\n }\n if (!!filters.StartedAfterDate && !!filters.StartedAfterDate.length) {\n filtered = filtered.filter(function (rec) {\n if (!filters.StartedAfterDate)\n return true;\n return filters.StartedAfterDate.filter(function (startedAfter) {\n var afterDate = (0,i18n_datetime/* default */.ZP)(startedAfter);\n return (0,i18n_datetime/* default */.ZP)(rec.startTime).isSame(afterDate) || (0,i18n_datetime/* default */.ZP)(rec.startTime).isAfter(afterDate);\n }).length;\n });\n }\n if (filters.Label.length) {\n filtered = filtered.filter(function (r) { return Object.entries(r.metadata.labels).filter(function (_a) {\n var k = _a[0], v = _a[1];\n return filters.Label.includes("".concat(k, ":").concat(v));\n }).length; });\n }\n return filtered;\n};\n\n;// CONCATENATED MODULE: ./src/app/RecordingMetadata/BulkEditLabels.tsx\nvar BulkEditLabels_assign = (undefined && undefined.__assign) || function () {\n BulkEditLabels_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return BulkEditLabels_assign.apply(this, arguments);\n};\nvar BulkEditLabels_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar BulkEditLabels = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState([]), recordings = _a[0], setRecordings = _a[1];\n var _b = react.useState(false), editing = _b[0], setEditing = _b[1];\n var _c = react.useState([]), commonLabels = _c[0], setCommonLabels = _c[1];\n var _d = react.useState([]), savedCommonLabels = _d[0], setSavedCommonLabels = _d[1];\n var _e = react.useState(constants/* ValidatedOptions.default */.LD["default"]), valid = _e[0], setValid = _e[1];\n var _f = react.useState(false), loading = _f[0], setLoading = _f[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var getIdxFromRecording = react.useCallback(function (r) { return (props.isTargetRecording ? r.id : (0,utils/* hashCode */.un)(r.name)); }, [props.isTargetRecording]);\n var handlePostUpdate = react.useCallback(function () {\n setEditing(false);\n setLoading(false);\n }, [setLoading, setEditing]);\n var handleUpdateLabels = react.useCallback(function () {\n setLoading(true);\n var tasks = [];\n var toDelete = savedCommonLabels.filter(function (label) { return !includesLabel(commonLabels, label); });\n recordings.forEach(function (r) {\n var idx = getIdxFromRecording(r);\n if (props.checkedIndices.includes(idx)) {\n var updatedLabels = BulkEditLabels_spreadArray(BulkEditLabels_spreadArray([], parseLabels(r.metadata.labels), true), commonLabels, true);\n updatedLabels = updatedLabels.filter(function (label) {\n return !includesLabel(toDelete, label);\n });\n if (props.directory) {\n tasks.push(context.api.postRecordingMetadataFromPath(props.directory.jvmId, r.name, updatedLabels).pipe((0,first/* first */.P)()));\n }\n if (props.isTargetRecording) {\n tasks.push(context.api.postTargetRecordingMetadata(r.name, updatedLabels).pipe((0,first/* first */.P)()));\n }\n else if (props.isUploadsTable) {\n tasks.push(context.api.postUploadedRecordingMetadata(r.name, updatedLabels).pipe((0,first/* first */.P)()));\n }\n else {\n tasks.push(context.api.postRecordingMetadata(r.name, updatedLabels).pipe((0,first/* first */.P)()));\n }\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe({\n next: handlePostUpdate,\n error: handlePostUpdate,\n }));\n }, [\n addSubscription,\n context.api,\n getIdxFromRecording,\n handlePostUpdate,\n commonLabels,\n savedCommonLabels,\n recordings,\n props.checkedIndices,\n props.isTargetRecording,\n props.isUploadsTable,\n props.directory,\n ]);\n var handleEditLabels = react.useCallback(function () {\n setEditing(true);\n }, [setEditing]);\n var handleCancel = react.useCallback(function () {\n setEditing(false);\n setCommonLabels(savedCommonLabels);\n }, [setEditing, setCommonLabels, savedCommonLabels]);\n var updateCommonLabels = react.useCallback(function (setLabels) {\n var allRecordingLabels = [];\n recordings.forEach(function (r) {\n var idx = getIdxFromRecording(r);\n if (props.checkedIndices.includes(idx)) {\n allRecordingLabels.push(parseLabels(r.metadata.labels));\n }\n });\n var updatedCommonLabels = allRecordingLabels.length > 0\n ? allRecordingLabels.reduce(function (prev, curr) { return prev.filter(function (label) { return includesLabel(curr, label); }); }, allRecordingLabels[0])\n : [];\n setLabels(updatedCommonLabels);\n }, [recordings, getIdxFromRecording, props.checkedIndices]);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var refreshRecordingList = react.useCallback(function () {\n var observable;\n if (props.directoryRecordings) {\n observable = (0,of.of)(props.directoryRecordings);\n }\n else if (props.isTargetRecording) {\n observable = context.target.target().pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,concatMap/* concatMap */.b)(function (target) {\n return context.api.doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/recordings"));\n }), (0,first/* first */.P)());\n }\n else {\n observable = props.isUploadsTable\n ? context.api\n .graphql("query GetUploadedRecordings($filter: ArchivedRecordingFilterInput) {\\n archivedRecordings(filter: $filter) {\\n data {\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n }\\n }\\n }", { filter: { sourceTarget: Api_service/* UPLOADS_SUBDIRECTORY */.ld } })\n .pipe((0,map/* map */.U)(function (v) { return v.data.archivedRecordings.data; }), (0,first/* first */.P)())\n : context.target.target().pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,concatMap/* concatMap */.b)(function (target) {\n return context.api.graphql("query ActiveRecordingsForTarget($connectUrl: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n recordings {\\n archived {\\n data {\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n }\\n }\\n }\\n }\\n }", { connectUrl: target.connectUrl });\n }), (0,map/* map */.U)(function (v) { return v.data.targetNodes[0].recordings.archived.data; }), (0,first/* first */.P)());\n }\n addSubscription(observable.subscribe(function (value) { return setRecordings(value); }));\n }, [\n addSubscription,\n props.isTargetRecording,\n props.isUploadsTable,\n props.directoryRecordings,\n context.target,\n context.api,\n setRecordings,\n ]);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var saveButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Saving\',\n spinnerAriaLabel: \'saving-recording-labels\',\n isLoading: loading,\n });\n }, [loading]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(refreshRecordingList));\n }, [addSubscription, context, context.target, refreshRecordingList]);\n // Depends only on RecordingMetadataUpdated notifications\n // since updates on list of recordings will mount a completely new BulkEditLabels.\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n props.isUploadsTable ? (0,of.of)(uploadAsTarget) : context.target.target(),\n context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.RecordingMetadataUpdated */.mN.RecordingMetadataUpdated),\n ]).subscribe(function (parts) {\n var currentTarget = parts[0];\n var event = parts[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) {\n return old.map(function (o) {\n return o.name == event.message.recordingName ? BulkEditLabels_assign(BulkEditLabels_assign({}, o), { metadata: { labels: event.message.metadata.labels } }) : o;\n });\n });\n }));\n }, [addSubscription, context.target, context.notificationChannel, setRecordings, props.isUploadsTable]);\n react.useEffect(function () {\n updateCommonLabels(setCommonLabels);\n updateCommonLabels(setSavedCommonLabels);\n if (!recordings.length && editing) {\n setEditing(false);\n }\n }, [editing, recordings, setCommonLabels, setSavedCommonLabels, updateCommonLabels, setEditing]);\n react.useEffect(function () {\n if (!props.checkedIndices.length) {\n setEditing(false);\n }\n }, [props.checkedIndices, setEditing]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Text/* Text */.x, null, "Edit Recording Labels")),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Tooltip/* Tooltip */.u, { content: react.createElement("div", null, "Labels present on all selected recordings will appear here. Editing the labels will affect ALL selected recordings."), appendTo: utils/* portalRoot */.tO },\n react.createElement(help_icon/* HelpIcon */.by, { noVerticalAlign: true }))))),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(LabelCell, { target: "", labels: savedCommonLabels })),\n react.createElement(StackItem/* StackItem */.v, null, editing ? (react.createElement(react.Fragment, null,\n react.createElement(RecordingLabelFields, { labels: commonLabels, setLabels: setCommonLabels, setValid: setValid, isDisabled: loading }),\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Button_Button/* Button */.zx, BulkEditLabels_assign({ variant: "primary", onClick: handleUpdateLabels, isDisabled: valid != constants/* ValidatedOptions.success */.LD.success || loading }, saveButtonLoadingProps), loading ? \'Saving\' : \'Save\')),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: handleCancel, isDisabled: loading }, "Cancel"))))) : (react.createElement(Button_Button/* Button */.zx, { key: "edit labels", "aria-label": "Edit Labels", variant: "secondary", onClick: handleEditLabels, isDisabled: !props.checkedIndices.length }, "Edit"))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/RecordingLabelsPanel.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar RecordingLabelsPanel = function (props) {\n return (react.createElement(DrawerPanelContent/* DrawerPanelContent */.S, { isResizable: true },\n react.createElement(DrawerHead/* DrawerHead */.h, null,\n react.createElement(DrawerActions/* DrawerActions */.x, null,\n react.createElement(DrawerCloseButton/* DrawerCloseButton */.c, { onClick: function () { return props.setShowPanel(false); }, "data-testid": "hide-table-actions-panel", "aria-label": "hide table actions panel" }))),\n react.createElement(DrawerPanelBody/* DrawerPanelBody */.F, null,\n react.createElement(BulkEditLabels, { isTargetRecording: props.isTargetRecording, checkedIndices: props.checkedIndices, isUploadsTable: props.isUploadsTable, directory: props.directory, directoryRecordings: props.directoryRecordings }))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/RecordingsTable.tsx\nvar RecordingsTable_assign = (undefined && undefined.__assign) || function () {\n RecordingsTable_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return RecordingsTable_assign.apply(this, arguments);\n};\nvar RecordingsTable_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar RecordingsTable = function (_a) {\n var toolbar = _a.toolbar, tableColumns = _a.tableColumns, tableTitle = _a.tableTitle, tableFooter = _a.tableFooter, isEmpty = _a.isEmpty, isEmptyFilterResult = _a.isEmptyFilterResult, isHeaderChecked = _a.isHeaderChecked, isLoading = _a.isLoading, isNestedTable = _a.isNestedTable, errorMessage = _a.errorMessage, onHeaderCheck = _a.onHeaderCheck, clearFilters = _a.clearFilters, children = _a.children, props = RecordingsTable_rest(_a, ["toolbar", "tableColumns", "tableTitle", "tableFooter", "isEmpty", "isEmptyFilterResult", "isHeaderChecked", "isLoading", "isNestedTable", "errorMessage", "onHeaderCheck", "clearFilters", "children"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var view;\n var authRetry = react.useCallback(function () {\n context.target.setAuthRetry();\n }, [context.target]);\n var isError = react.useMemo(function () { return errorMessage != \'\'; }, [errorMessage]);\n if (isError) {\n view = (react.createElement(react.Fragment, null,\n react.createElement(ErrorView, { title: \'Error retrieving recordings\', message: errorMessage, retry: isAuthFail(errorMessage) ? authRetry : undefined })));\n }\n else if (isLoading) {\n view = react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else if (isEmpty) {\n view = (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" },\n "No ",\n tableTitle))));\n }\n else if (isEmptyFilterResult) {\n view = (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" },\n "No ",\n tableTitle,\n " found"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "No results match this filter criteria. Remove all filters or clear all filters to show results."),\n react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: function () { return clearFilters && clearFilters(null); } }, "Clear all filters")))));\n }\n else {\n view = (react.createElement(react.Fragment, null,\n react.createElement(TableComposable/* TableComposable */.X, RecordingsTable_assign({}, props, { isStickyHeader: true, "aria-label": tableTitle, variant: isNestedTable ? \'compact\' : undefined, style: { zIndex: 99 } }),\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, { key: "table-header-check-all", select: {\n onSelect: onHeaderCheck,\n isSelected: isHeaderChecked,\n } }),\n react.createElement(Th.Th, { key: "table-header-expand" }),\n tableColumns.columns.map(function (_a, index) {\n var title = _a.title, sortable = _a.sortable;\n return (react.createElement(Th.Th, { key: "table-header-".concat(title), sort: sortable ? tableColumns.onSort(index) : undefined }, title));\n }),\n react.createElement(Th.Th, { key: "table-header-actions" }))),\n children)));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(OuterScrollContainer/* OuterScrollContainer */.U, { className: "recording-table-outer-container" },\n isError ? null : toolbar,\n react.createElement(InnerScrollContainer/* InnerScrollContainer */.F, { className: "recording-table--inner-container" }, view),\n tableFooter)));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/ReportFrame.tsx\nvar ReportFrame_assign = (undefined && undefined.__assign) || function () {\n ReportFrame_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ReportFrame_assign.apply(this, arguments);\n};\nvar ReportFrame_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar ReportFrame = function (props) {\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(undefined), report = _a[0], setReport = _a[1];\n var _b = react.useState(false), loaded = _b[0], setLoaded = _b[1];\n var isExpanded = props.isExpanded, recording = props.recording, rest = ReportFrame_rest(props, ["isExpanded", "recording"]);\n react.useLayoutEffect(function () {\n if (!props.isExpanded) {\n return;\n }\n addSubscription(context.reports\n .report(recording)\n .pipe((0,first/* first */.P)())\n .subscribe({\n next: setReport,\n error: function (err) {\n if ((0,Report_service/* isGenerationError */.ad)(err)) {\n err.messageDetail.pipe((0,first/* first */.P)()).subscribe(function (detail) { return setReport(detail); });\n }\n else if ((0,Api_service/* isHttpError */.D3)(err)) {\n setReport(err.message);\n }\n else {\n setReport(JSON.stringify(err));\n }\n },\n }));\n }, [addSubscription, context.reports, recording, isExpanded, setReport, props]);\n var onLoad = function () { return setLoaded(true); };\n return (react.createElement(react.Fragment, null,\n !loaded && react.createElement(Spinner/* Spinner */.$, null),\n react.createElement("iframe", ReportFrame_assign({ title: "Automated Analysis", srcDoc: report }, rest, { onLoad: onLoad, hidden: !(loaded && isExpanded) }))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/ArchivedRecordingsTable.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar ArchivedRecordingsTable_assign = (undefined && undefined.__assign) || function () {\n ArchivedRecordingsTable_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ArchivedRecordingsTable_assign.apply(this, arguments);\n};\nvar ArchivedRecordingsTable_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ArchivedRecordingsTable_tableColumns = [\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n transform: function (name, _recording) {\n return name.replace(/\\.[^/.]+$/, \'\');\n },\n },\n {\n title: \'Labels\',\n keyPaths: [\'metadata\', \'labels\'],\n },\n {\n title: \'Size\',\n keyPaths: [\'size\'],\n sortable: true,\n },\n];\nvar ArchivedRecordingsTable = function (_a) {\n var propsTarget = _a.target, isUploadsTable = _a.isUploadsTable, isNestedTable = _a.isNestedTable, propsDirectory = _a.directory, directoryRecordings = _a.directoryRecordings, toolbarBreakReference = _a.toolbarBreakReference;\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var _b = react.useState(\'\'), targetConnectURL = _b[0], setTargetConnectURL = _b[1];\n var _c = react.useState([]), recordings = _c[0], setRecordings = _c[1];\n var _d = react.useState([]), filteredRecordings = _d[0], setFilteredRecordings = _d[1];\n var _e = react.useState(false), headerChecked = _e[0], setHeaderChecked = _e[1];\n var _f = react.useState([]), checkedIndices = _f[0], setCheckedIndices = _f[1];\n var _g = react.useState([]), expandedRows = _g[0], setExpandedRows = _g[1];\n var _h = react.useState(false), showUploadModal = _h[0], setShowUploadModal = _h[1];\n var _j = react.useState(false), showDetailsPanel = _j[0], setShowDetailsPanel = _j[1];\n var _k = react.useState(false), isLoading = _k[0], setIsLoading = _k[1];\n var _l = react.useState(\'\'), errorMessage = _l[0], setErrorMessage = _l[1];\n var _m = react.useState({ DELETE: false }), actionLoadings = _m[0], setActionLoadings = _m[1];\n var _o = (0,useSort/* useSort */.Z)(), sortBy = _o[0], getSortParams = _o[1];\n var targetRecordingFilters = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var filters = state.recordingFilters.list.filter(function (targetFilter) { return targetFilter.target === targetConnectURL; });\n return filters.length > 0 ? filters[0].archived.filters : emptyArchivedRecordingFilters;\n });\n var handleHeaderCheck = react.useCallback(function (event, checked) {\n setHeaderChecked(checked);\n setCheckedIndices(checked ? filteredRecordings.map(function (r) { return (0,utils/* hashCode */.un)(r.name); }) : []);\n }, [setHeaderChecked, setCheckedIndices, filteredRecordings]);\n var handleRowCheck = react.useCallback(function (checked, index) {\n if (checked) {\n setCheckedIndices(function (ci) { return ArchivedRecordingsTable_spreadArray(ArchivedRecordingsTable_spreadArray([], ci, true), [index], false); });\n }\n else {\n setHeaderChecked(false);\n setCheckedIndices(function (ci) { return ci.filter(function (v) { return v !== index; }); });\n }\n }, [setCheckedIndices, setHeaderChecked]);\n var handleEditLabels = react.useCallback(function () {\n setShowDetailsPanel(true);\n }, [setShowDetailsPanel]);\n var handleRecordings = react.useCallback(function (recordings) {\n setRecordings(recordings);\n setIsLoading(false);\n }, [setRecordings, setIsLoading]);\n var handleError = react.useCallback(function (error) {\n setIsLoading(false);\n setErrorMessage(error.message);\n setRecordings([]);\n }, [setIsLoading, setErrorMessage, setRecordings]);\n var queryTargetRecordings = react.useCallback(function (connectUrl) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return context.api.graphql("\\n query ArchivedRecordingsForTarget($connectUrl: String) {\\n archivedRecordings(filter: { sourceTarget: $connectUrl }) {\\n data {\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n size\\n }\\n }\\n }", { connectUrl: connectUrl });\n }, [context.api]);\n var queryUploadedRecordings = react.useCallback(function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return context.api.graphql("query UploadedRecordings($filter: ArchivedRecordingFilterInput){\\n archivedRecordings(filter: $filter) {\\n data {\\n name\\n downloadUrl\\n reportUrl\\n metadata {\\n labels\\n }\\n size\\n }\\n }\\n }", { filter: { sourceTarget: Api_service/* UPLOADS_SUBDIRECTORY */.ld } });\n }, [context.api]);\n var refreshRecordingList = react.useCallback(function () {\n setIsLoading(true);\n if (propsDirectory) {\n handleRecordings(directoryRecordings);\n }\n else if (isUploadsTable) {\n addSubscription(queryUploadedRecordings()\n .pipe((0,map/* map */.U)(function (v) { return v.data.archivedRecordings.data; }))\n .subscribe({\n next: handleRecordings,\n error: handleError,\n }));\n }\n else {\n addSubscription(propsTarget\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,first/* first */.P)(), (0,concatMap/* concatMap */.b)(function (target) { return queryTargetRecordings(target.connectUrl); }), (0,map/* map */.U)(function (v) { return v.data.archivedRecordings.data; }))\n .subscribe({\n next: handleRecordings,\n error: handleError,\n }));\n }\n }, [\n addSubscription,\n setIsLoading,\n handleRecordings,\n handleError,\n queryTargetRecordings,\n queryUploadedRecordings,\n isUploadsTable,\n propsDirectory,\n propsTarget,\n directoryRecordings,\n ]);\n var handleClearFilters = react.useCallback(function () {\n dispatch(ReduxStore_recordingDeleteAllFiltersIntent(targetConnectURL, true));\n }, [dispatch, targetConnectURL]);\n var updateFilters = react.useCallback(function (target, _a) {\n var filterValue = _a.filterValue, filterKey = _a.filterKey, _b = _a.deleted, deleted = _b === void 0 ? false : _b, deleteOptions = _a.deleteOptions;\n if (deleted) {\n if (deleteOptions && deleteOptions.all) {\n dispatch(ReduxStore_recordingDeleteCategoryFiltersIntent(target, filterKey, true));\n }\n else {\n dispatch(ReduxStore_recordingDeleteFilterIntent(target, filterKey, filterValue, true));\n }\n }\n else {\n dispatch(ReduxStore_recordingAddFilterIntent(target, filterKey, filterValue, true));\n }\n }, [dispatch]);\n react.useEffect(function () {\n addSubscription(propsTarget.subscribe(function (target) {\n setTargetConnectURL(target.connectUrl);\n dispatch(ReduxStore_recordingAddTargetIntent(target.connectUrl));\n refreshRecordingList();\n }));\n }, [addSubscription, refreshRecordingList, dispatch, setTargetConnectURL, propsTarget]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n propsTarget,\n (0,merge/* merge */.T)(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ArchivedRecordingCreated */.mN.ArchivedRecordingCreated), context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingSaved */.mN.ActiveRecordingSaved)),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) {\n return old.filter(function (r) { return r.name !== event.message.recording.name; }).concat(event.message.recording);\n });\n }));\n }, [addSubscription, context.notificationChannel, setRecordings, propsTarget]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n propsTarget,\n context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ArchivedRecordingDeleted */.mN.ArchivedRecordingDeleted),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) { return old.filter(function (r) { return r.name !== event.message.recording.name; }); });\n setCheckedIndices(function (old) { return old.filter(function (idx) { return idx !== (0,utils/* hashCode */.un)(event.message.recording.name); }); });\n }));\n }, [addSubscription, context.notificationChannel, setRecordings, setCheckedIndices, propsTarget]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n propsTarget,\n context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.RecordingMetadataUpdated */.mN.RecordingMetadataUpdated),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) {\n return old.map(function (o) {\n return o.name == event.message.recordingName ? ArchivedRecordingsTable_assign(ArchivedRecordingsTable_assign({}, o), { metadata: { labels: event.message.metadata.labels } }) : o;\n });\n });\n }));\n }, [addSubscription, context, context.notificationChannel, setRecordings, propsTarget]);\n react.useEffect(function () {\n var _a, _b;\n setFilteredRecordings((0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, filterRecordings(recordings, targetRecordingFilters), ArchivedRecordingsTable_tableColumns));\n }, [sortBy, recordings, targetRecordingFilters, setFilteredRecordings]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshRecordingList(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context, context.settings, refreshRecordingList]);\n react.useEffect(function () {\n setCheckedIndices(function (ci) {\n var filteredRecordingIdx = new Set(filteredRecordings.map(function (r) { return (0,utils/* hashCode */.un)(r.name); }));\n return ci.filter(function (idx) { return filteredRecordingIdx.has(idx); });\n });\n }, [filteredRecordings, setCheckedIndices]);\n react.useEffect(function () {\n setHeaderChecked(checkedIndices.length === filteredRecordings.length);\n }, [setHeaderChecked, checkedIndices, filteredRecordings.length]);\n var handlePostActions = react.useCallback(function (action) {\n setActionLoadings(function (old) {\n var newActionLoadings = ArchivedRecordingsTable_assign({}, old);\n newActionLoadings[action] = false;\n return newActionLoadings;\n });\n }, [setActionLoadings]);\n var handleDeleteRecordings = react.useCallback(function () {\n setActionLoadings(function (old) { return (ArchivedRecordingsTable_assign(ArchivedRecordingsTable_assign({}, old), { DELETE: true })); });\n var tasks = [];\n if (propsDirectory) {\n var directory_1 = propsDirectory;\n filteredRecordings.forEach(function (r) {\n if (checkedIndices.includes((0,utils/* hashCode */.un)(r.name))) {\n context.reports.delete(r);\n tasks.push(context.api.deleteArchivedRecordingFromPath(directory_1.jvmId, r.name).pipe((0,first/* first */.P)()));\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe());\n }\n else {\n addSubscription(propsTarget.subscribe(function (t) {\n filteredRecordings.forEach(function (r) {\n if (checkedIndices.includes((0,utils/* hashCode */.un)(r.name))) {\n context.reports.delete(r);\n tasks.push(context.api.deleteArchivedRecording(t.connectUrl, r.name).pipe((0,first/* first */.P)()));\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe({\n next: function () { return handlePostActions(\'DELETE\'); },\n error: function () { return handlePostActions(\'DELETE\'); },\n }));\n }));\n }\n }, [\n addSubscription,\n filteredRecordings,\n checkedIndices,\n context.reports,\n context.api,\n propsDirectory,\n propsTarget,\n setActionLoadings,\n handlePostActions,\n ]);\n var toggleExpanded = react.useCallback(function (id) {\n setExpandedRows(function (expandedRows) {\n var idx = expandedRows.indexOf(id);\n return idx >= 0\n ? ArchivedRecordingsTable_spreadArray(ArchivedRecordingsTable_spreadArray([], expandedRows.slice(0, idx), true), expandedRows.slice(idx + 1, expandedRows.length), true) : ArchivedRecordingsTable_spreadArray(ArchivedRecordingsTable_spreadArray([], expandedRows, true), [id], false);\n });\n }, [setExpandedRows]);\n var RecordingsToolbar = react.useMemo(function () { return (react.createElement(ArchivedRecordingsToolbar, { target: targetConnectURL, checkedIndices: checkedIndices, targetRecordingFilters: targetRecordingFilters, recordings: recordings, filteredRecordings: filteredRecordings, updateFilters: updateFilters, handleClearFilters: handleClearFilters, handleEditLabels: handleEditLabels, handleDeleteRecordings: handleDeleteRecordings, handleShowUploadModal: function () { return setShowUploadModal(true); }, isUploadsTable: isUploadsTable, actionLoadings: actionLoadings, toolbarBreakReference: toolbarBreakReference })); }, [\n targetConnectURL,\n checkedIndices,\n targetRecordingFilters,\n recordings,\n filteredRecordings,\n updateFilters,\n handleClearFilters,\n handleEditLabels,\n handleDeleteRecordings,\n setShowUploadModal,\n isUploadsTable,\n actionLoadings,\n toolbarBreakReference,\n ]);\n var handleUploadModalClose = react.useCallback(function () {\n setShowUploadModal(false); // Do nothing else as notifications will handle update\n }, [setShowUploadModal]);\n var LabelsPanel = react.useMemo(function () { return (react.createElement(RecordingLabelsPanel, { setShowPanel: setShowDetailsPanel, isTargetRecording: false, isUploadsTable: isUploadsTable, checkedIndices: checkedIndices, directory: propsDirectory, directoryRecordings: directoryRecordings })); }, [checkedIndices, setShowDetailsPanel, isUploadsTable, propsDirectory, directoryRecordings]);\n var totalArchiveSize = react.useMemo(function () {\n var size = 0;\n filteredRecordings.forEach(function (r) { return (size += r.size); });\n return size;\n }, [filteredRecordings]);\n var columnConfig = react.useMemo(function () { return ({\n columns: ArchivedRecordingsTable_tableColumns,\n onSort: getSortParams,\n }); }, [getSortParams]);\n return (react.createElement(Drawer/* Drawer */.dy, { isExpanded: showDetailsPanel, isInline: true, id: \'archived-recording-drawer\' },\n react.createElement(DrawerContent/* DrawerContent */.s, { panelContent: LabelsPanel, className: "recordings-table-drawer-content" },\n react.createElement(DrawerContentBody/* DrawerContentBody */.s, { hasPadding: true },\n react.createElement(RecordingsTable, { tableTitle: "Archived Flight Recordings", toolbar: RecordingsToolbar, tableColumns: columnConfig, tableFooter: filteredRecordings.length > 0 && (react.createElement(TableComposable/* TableComposable */.X, { borders: false },\n react.createElement(Tbody/* Tbody */.p, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Td.Td, null),\n react.createElement(Td.Td, { width: 15 },\n react.createElement("b", null,\n "Total size: ",\n (0,utils/* formatBytes */.td)(totalArchiveSize))))))), isHeaderChecked: headerChecked, onHeaderCheck: handleHeaderCheck, isLoading: isLoading, isEmpty: !recordings.length, isEmptyFilterResult: !filteredRecordings.length, clearFilters: handleClearFilters, isNestedTable: isNestedTable, errorMessage: errorMessage }, filteredRecordings.map(function (r) { return (react.createElement(ArchivedRecordingRow, { key: r.name, recording: r, labelFilters: targetRecordingFilters.Label, index: (0,utils/* hashCode */.un)(r.name), sourceTarget: propsTarget, propsDirectory: propsDirectory, currentSelectedTargetURL: targetConnectURL, expandedRows: expandedRows, checkedIndices: checkedIndices, toggleExpanded: toggleExpanded, handleRowCheck: handleRowCheck, updateFilters: updateFilters })); })),\n isUploadsTable ? react.createElement(ArchiveUploadModal, { visible: showUploadModal, onClose: handleUploadModalClose }) : null))));\n};\nvar ArchivedRecordingsToolbar = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), warningModalOpen = _a[0], setWarningModalOpen = _a[1];\n var _b = react.useState(false), actionToggleOpen = _b[0], setActionToggleOpen = _b[1];\n var handleActionToggle = react.useCallback(function () { return setActionToggleOpen(function (old) { return !old; }); }, [setActionToggleOpen]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n }, [setWarningModalOpen]);\n var handleDeleteButton = react.useCallback(function () {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteArchivedRecordings */.gF.DeleteArchivedRecordings)) {\n setWarningModalOpen(true);\n }\n else {\n props.handleDeleteRecordings();\n }\n }, [context.settings, setWarningModalOpen, props]);\n var deleteArchivedWarningModal = react.useMemo(function () {\n return (react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteArchivedRecordings */.gF.DeleteArchivedRecordings, visible: warningModalOpen, onAccept: props.handleDeleteRecordings, onClose: handleWarningModalClose }));\n }, [warningModalOpen, props.handleDeleteRecordings, handleWarningModalClose]);\n var actionLoadingProps = react.useMemo(function () { return ({\n DELETE: {\n spinnerAriaValueText: \'Deleting\',\n spinnerAriaLabel: \'deleting-archived-recording\',\n isLoading: props.actionLoadings[\'DELETE\'],\n },\n }); }, [props]);\n var buttons = react.useMemo(function () {\n return [\n {\n default: (react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: props.handleEditLabels, isDisabled: !props.checkedIndices.length }, "Edit Labels")),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Edit Labels\', isShared: true, onClick: props.handleEditLabels }, "Edit Labels")),\n key: \'Edit Labels\',\n },\n {\n default: (react.createElement(Button_Button/* Button */.zx, ArchivedRecordingsTable_assign({ variant: "danger", onClick: handleDeleteButton, isDisabled: !props.checkedIndices.length || props.actionLoadings[\'DELETE\'] }, actionLoadingProps[\'DELETE\']), props.actionLoadings[\'DELETE\'] ? \'Deleting\' : \'Delete\')),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Delete\', isShared: true, onClick: handleDeleteButton }, props.actionLoadings[\'DELETE\'] ? \'Deleting\' : \'Delete\')),\n key: \'Delete\',\n },\n ];\n }, [\n props.handleEditLabels,\n handleDeleteButton,\n props.checkedIndices.length,\n props.actionLoadings,\n actionLoadingProps,\n ]);\n return (react.createElement(Toolbar/* Toolbar */.o, { id: "archived-recordings-toolbar", "aria-label": "archived-recording-toolbar", clearAllFilters: props.handleClearFilters, isSticky: true },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(RecordingFilters, { target: props.target, isArchived: true, recordings: props.recordings, filters: props.targetRecordingFilters, updateFilters: props.updateFilters, breakpoint: \'xl\' }),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "button-group", style: { alignSelf: \'start\' } },\n react.createElement(ToolbarItem/* ToolbarItem */.E, { variant: "overflow-menu" },\n react.createElement(OverflowMenu/* OverflowMenu */.P, { breakpoint: "sm", breakpointReference: props.toolbarBreakReference ||\n (function () { return document.getElementById(\'archived-recordings-toolbar\') || document.body; }) },\n react.createElement(OverflowMenuContent/* OverflowMenuContent */.a, null,\n react.createElement(OverflowMenuGroup/* OverflowMenuGroup */.M, { groupType: "button" }, buttons.map(function (b) { return (react.createElement(OverflowMenuItem/* OverflowMenuItem */.l, { key: b.key }, b.default)); }))),\n react.createElement(OverflowMenuControl/* OverflowMenuControl */.S, null,\n react.createElement(Dropdown/* Dropdown */.L, { "aria-label": \'archive-recording-actions\', isPlain: true, isFlipEnabled: true, onSelect: function () { return setActionToggleOpen(false); }, menuAppendTo: \'parent\', isOpen: actionToggleOpen, toggle: react.createElement(KebabToggle/* KebabToggle */.a, { id: "archive-recording-actions-toggle-kebab", onToggle: handleActionToggle }), dropdownItems: buttons.map(function (b) { return b.collapsed; }) }))))),\n deleteArchivedWarningModal,\n props.isUploadsTable ? (react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", "aria-label": "upload-recording", onClick: props.handleShowUploadModal },\n react.createElement(upload_icon/* UploadIcon */.rG, null))))) : null)));\n};\nvar ArchivedRecordingRow = function (_a) {\n var recording = _a.recording, index = _a.index, propsDirectory = _a.propsDirectory, currentSelectedTargetURL = _a.currentSelectedTargetURL, sourceTarget = _a.sourceTarget, expandedRows = _a.expandedRows, checkedIndices = _a.checkedIndices, labelFilters = _a.labelFilters, toggleExpanded = _a.toggleExpanded, handleRowCheck = _a.handleRowCheck, updateFilters = _a.updateFilters;\n var context = react.useContext(Services/* ServiceContext */.o);\n var parsedLabels = react.useMemo(function () {\n return parseLabels(recording.metadata.labels);\n }, [recording]);\n var expandedRowId = react.useMemo(function () { return "archived-table-row-".concat(index, "-exp"); }, [index]);\n var handleToggle = react.useCallback(function () {\n toggleExpanded(expandedRowId);\n }, [expandedRowId, toggleExpanded]);\n var isExpanded = react.useMemo(function () {\n return expandedRows.includes(expandedRowId);\n }, [expandedRowId, expandedRows]);\n var handleCheck = react.useCallback(function (checked) {\n handleRowCheck(checked, index);\n }, [index, handleRowCheck]);\n var parentRow = react.useMemo(function () {\n return (react.createElement(Tr.Tr, { key: "".concat(index, "_parent") },\n react.createElement(Td.Td, { key: "archived-table-row-".concat(index, "_0") },\n react.createElement(Checkbox/* Checkbox */.X, { name: "archived-table-row-".concat(index, "-check"), onChange: handleCheck, isChecked: checkedIndices.includes(index), id: "archived-table-row-".concat(index, "-check") })),\n react.createElement(Td.Td, { key: "archived-table-row-".concat(index, "_1"), id: "archived-ex-toggle-".concat(index), "aria-controls": "archived-ex-expand-".concat(index), expand: {\n rowIndex: index,\n isExpanded: isExpanded,\n onToggle: handleToggle,\n } }),\n react.createElement(Td.Td, { key: "archived-table-row-".concat(index, "_2"), dataLabel: ArchivedRecordingsTable_tableColumns[0].title }, recording.name),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_3"), dataLabel: ArchivedRecordingsTable_tableColumns[2].title },\n react.createElement(LabelCell, { target: currentSelectedTargetURL, clickableOptions: {\n updateFilters: updateFilters,\n labelFilters: labelFilters,\n }, labels: parsedLabels })),\n react.createElement(Td.Td, { key: "archived-table-row-".concat(index, "_4"), dataLabel: ArchivedRecordingsTable_tableColumns[1].title }, (0,utils/* formatBytes */.td)(recording.size)),\n propsDirectory ? (react.createElement(RecordingActions, { recording: recording, index: index, uploadFn: function () { return context.api.uploadArchivedRecordingToGrafanaFromPath(propsDirectory.jvmId, recording.name); } })) : (react.createElement(RecordingActions, { recording: recording, index: index, uploadFn: function () { return context.api.uploadArchivedRecordingToGrafana(sourceTarget, recording.name); } }))));\n }, [\n index,\n checkedIndices,\n isExpanded,\n parsedLabels,\n labelFilters,\n currentSelectedTargetURL,\n sourceTarget,\n propsDirectory,\n recording,\n context.api,\n updateFilters,\n handleCheck,\n handleToggle,\n ]);\n var childRow = react.useMemo(function () {\n return (react.createElement(Tr.Tr, { key: "".concat(index, "_child"), isExpanded: isExpanded },\n react.createElement(Td.Td, { key: "archived-ex-expand-".concat(index), dataLabel: \'Content Details\', colSpan: ArchivedRecordingsTable_tableColumns.length + 3 },\n react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null,\n react.createElement(ReportFrame, { isExpanded: isExpanded, recording: recording, width: "100%", height: "640" })))));\n }, [recording, index, isExpanded]);\n return (react.createElement(Tbody/* Tbody */.p, { key: index, isExpanded: isExpanded },\n parentRow,\n childRow));\n};\n\n;// CONCATENATED MODULE: ./src/app/Archives/ArchiveDirectoryUtil.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar includesDirectory = function (arr, dir) {\n return arr.some(function (t) { return t.connectUrl === dir.connectUrl; });\n};\nvar indexOfDirectory = function (arr, dir) {\n var index = -1;\n arr.forEach(function (d, idx) {\n if (d.connectUrl === dir.connectUrl) {\n index = idx;\n }\n });\n return index;\n};\nvar getTargetFromDirectory = function (dir) {\n return {\n connectUrl: dir.connectUrl,\n alias: dir.jvmId,\n };\n};\n\n;// CONCATENATED MODULE: ./src/app/Archives/AllArchivedRecordingsTable.tsx\nvar AllArchivedRecordingsTable_assign = (undefined && undefined.__assign) || function () {\n AllArchivedRecordingsTable_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AllArchivedRecordingsTable_assign.apply(this, arguments);\n};\nvar AllArchivedRecordingsTable_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AllArchivedRecordingsTable_tableColumns = [\n {\n title: \'Directory\',\n keyPaths: [\'connectUrl\'],\n sortable: true,\n width: 80,\n },\n {\n title: \'Archives\',\n keyPaths: [\'recordings\'],\n transform: function (recordings, _obj) {\n return recordings.length;\n },\n sortable: true,\n width: 15,\n },\n];\nvar AllArchivedRecordingsTable = function () {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState([]), directories = _a[0], setDirectories = _a[1];\n var _b = react.useState(\'\'), searchText = _b[0], setSearchText = _b[1];\n var _c = react.useState([]), expandedDirectories = _c[0], setExpandedDirectories = _c[1];\n var _d = react.useState(false), isLoading = _d[0], setIsLoading = _d[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _e = (0,useSort/* useSort */.Z)(), sortBy = _e[0], getSortParams = _e[1];\n var handleDirectoriesAndCounts = react.useCallback(function (directories) {\n setDirectories(directories.map(function (dir) { return (AllArchivedRecordingsTable_assign(AllArchivedRecordingsTable_assign({}, dir), { targetAsObs: (0,of.of)(getTargetFromDirectory(dir)) })); }));\n setIsLoading(false);\n }, [setDirectories, setIsLoading]);\n var refreshDirectoriesAndCounts = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api.doGet(\'fs/recordings\', \'beta\').subscribe(handleDirectoriesAndCounts));\n }, [addSubscription, context.api, setIsLoading, handleDirectoriesAndCounts]);\n var handleSearchInput = react.useCallback(function (searchInput) {\n setSearchText(searchInput);\n }, [setSearchText]);\n var handleSearchInputClear = react.useCallback(function () {\n setSearchText(\'\');\n }, [setSearchText]);\n react.useEffect(function () {\n refreshDirectoriesAndCounts();\n }, [refreshDirectoriesAndCounts]);\n var searchedDirectories = react.useMemo(function () {\n var _a, _b;\n var updatedSearchedDirectories;\n if (!searchText) {\n updatedSearchedDirectories = directories;\n }\n else {\n var formattedSearchText_1 = searchText.trim().toLowerCase();\n updatedSearchedDirectories = directories.filter(function (d) {\n return d.jvmId.toLowerCase().includes(formattedSearchText_1) ||\n d.connectUrl.toLowerCase().includes(formattedSearchText_1);\n });\n }\n return (0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, updatedSearchedDirectories, AllArchivedRecordingsTable_tableColumns);\n }, [directories, searchText, sortBy]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshDirectoriesAndCounts(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, refreshDirectoriesAndCounts]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.RecordingMetadataUpdated */.mN.RecordingMetadataUpdated).subscribe(function () {\n refreshDirectoriesAndCounts();\n }));\n }, [addSubscription, context.notificationChannel, refreshDirectoriesAndCounts]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingSaved */.mN.ActiveRecordingSaved).subscribe(function () {\n refreshDirectoriesAndCounts();\n }));\n }, [addSubscription, context.notificationChannel, refreshDirectoriesAndCounts]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ArchivedRecordingCreated */.mN.ArchivedRecordingCreated).subscribe(function () {\n refreshDirectoriesAndCounts();\n }));\n }, [addSubscription, context.notificationChannel, refreshDirectoriesAndCounts]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ArchivedRecordingDeleted */.mN.ArchivedRecordingDeleted).subscribe(function () {\n refreshDirectoriesAndCounts();\n }));\n }, [addSubscription, context.notificationChannel, refreshDirectoriesAndCounts]);\n var toggleExpanded = react.useCallback(function (dir) {\n var idx = indexOfDirectory(expandedDirectories, dir);\n setExpandedDirectories(function (prevExpandedDirectories) {\n return idx >= 0\n ? AllArchivedRecordingsTable_spreadArray(AllArchivedRecordingsTable_spreadArray([], prevExpandedDirectories.slice(0, idx), true), prevExpandedDirectories.slice(idx + 1, prevExpandedDirectories.length), true) : AllArchivedRecordingsTable_spreadArray(AllArchivedRecordingsTable_spreadArray([], prevExpandedDirectories, true), [dir], false);\n });\n }, [expandedDirectories, setExpandedDirectories]);\n var directoryRows = react.useMemo(function () {\n return searchedDirectories.map(function (dir, idx) {\n var isExpanded = includesDirectory(expandedDirectories, dir);\n return (react.createElement(Tr.Tr, { key: "".concat(idx, "_parent") },\n react.createElement(Td.Td, { key: "directory-table-row-".concat(idx, "_1"), id: "directory-ex-toggle-".concat(idx), "aria-controls": "directory-ex-expand-".concat(idx), expand: {\n rowIndex: idx,\n isExpanded: isExpanded,\n onToggle: function () { return toggleExpanded(dir); },\n } }),\n react.createElement(Td.Td, { key: "directory-table-row-".concat(idx, "_2"), dataLabel: AllArchivedRecordingsTable_tableColumns[0].title },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Text/* Text */.x, null, dir.connectUrl)),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Tooltip/* Tooltip */.u, { hidden: !dir.jvmId, content: "JVM hash ID: ".concat(dir.jvmId), appendTo: utils/* portalRoot */.tO },\n react.createElement(help_icon/* HelpIcon */.by, null))))),\n react.createElement(Td.Td, { key: "directory-table-row-".concat(idx, "_3"), dataLabel: AllArchivedRecordingsTable_tableColumns[1].title },\n react.createElement(Badge/* Badge */.C, { key: "".concat(idx, "_count") }, dir.recordings.length || 0))));\n });\n }, [toggleExpanded, searchedDirectories, expandedDirectories]);\n var recordingRows = react.useMemo(function () {\n return searchedDirectories.map(function (dir, idx) {\n var isExpanded = includesDirectory(expandedDirectories, dir);\n return (react.createElement(Tr.Tr, { key: "".concat(idx, "_child"), isExpanded: isExpanded },\n react.createElement(Td.Td, { key: "directory-ex-expand-".concat(idx), dataLabel: \'Content Details\', colSpan: AllArchivedRecordingsTable_tableColumns.length + 1 }, isExpanded ? (react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null,\n react.createElement(ArchivedRecordingsTable, { directory: dir, target: dir.targetAsObs, isUploadsTable: false, isNestedTable: true, directoryRecordings: dir.recordings }))) : null)));\n });\n }, [searchedDirectories, expandedDirectories]);\n var rowPairs = react.useMemo(function () {\n var rowPairs = [];\n for (var i = 0; i < directoryRows.length; i++) {\n rowPairs.push(directoryRows[i]);\n rowPairs.push(recordingRows[i]);\n }\n return rowPairs;\n }, [directoryRows, recordingRows]);\n var view;\n if (isLoading) {\n view = react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else if (!searchedDirectories.length) {\n view = (react.createElement(react.Fragment, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Archived Recordings"))));\n }\n else {\n view = (react.createElement(react.Fragment, null,\n react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "all-archives-table" },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, { key: "table-header-expand" }),\n AllArchivedRecordingsTable_tableColumns.map(function (_a, index) {\n var title = _a.title, width = _a.width;\n return (react.createElement(Th.Th, { key: "table-header-".concat(title), sort: getSortParams(index), width: width }, title));\n }))),\n react.createElement(Tbody/* Tbody */.p, null, rowPairs))));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "all-archives-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(SearchInput/* SearchInput */.M, { placeholder: "Search", value: searchText, onChange: handleSearchInput, onClear: handleSearchInputClear }))))),\n view));\n};\n\n;// CONCATENATED MODULE: ./src/app/Archives/AllTargetsArchivedRecordingsTable.tsx\nvar AllTargetsArchivedRecordingsTable_assign = (undefined && undefined.__assign) || function () {\n AllTargetsArchivedRecordingsTable_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AllTargetsArchivedRecordingsTable_assign.apply(this, arguments);\n};\nvar AllTargetsArchivedRecordingsTable_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AllTargetsArchivedRecordingsTable_tableColumns = [\n {\n title: \'Target\',\n keyPaths: [\'target\'],\n transform: function (target, _obj) {\n return target.alias === target.connectUrl || !target.alias\n ? "".concat(target.connectUrl)\n : "".concat(target.alias, " (").concat(target.connectUrl, ")");\n },\n sortable: true,\n width: 80,\n },\n {\n title: \'Archives\',\n keyPaths: [\'archiveCount\'],\n sortable: true,\n width: 15,\n },\n];\nvar AllTargetsArchivedRecordingsTable = function () {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(\'\'), searchText = _a[0], setSearchText = _a[1];\n var _b = react.useState([]), archivesForTargets = _b[0], setArchivesForTargets = _b[1];\n var _c = react.useState([]), expandedTargets = _c[0], setExpandedTargets = _c[1];\n var _d = react.useState(true), hideEmptyTargets = _d[0], setHideEmptyTargets = _d[1];\n var _e = react.useState(false), isLoading = _e[0], setIsLoading = _e[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _f = (0,useSort/* useSort */.Z)(), sortBy = _f[0], getSortParams = _f[1];\n var updateCount = react.useCallback(function (connectUrl, delta) {\n setArchivesForTargets(function (old) {\n var idx = old.findIndex(function (_a) {\n var target = _a.target;\n return target.connectUrl === connectUrl;\n });\n if (idx >= 0) {\n var matched = old[idx];\n old.splice(idx, 1, AllTargetsArchivedRecordingsTable_assign(AllTargetsArchivedRecordingsTable_assign({}, matched), { archiveCount: matched.archiveCount + delta }));\n return AllTargetsArchivedRecordingsTable_spreadArray([], old, true);\n }\n return old;\n });\n }, [setArchivesForTargets]);\n var handleArchivesForTargets = react.useCallback(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n function (targetNodes) {\n setIsLoading(false);\n setArchivesForTargets(targetNodes.map(function (node) {\n var target = {\n connectUrl: node.target.serviceUri,\n alias: node.target.alias,\n };\n return {\n target: target,\n targetAsObs: (0,of.of)(target),\n archiveCount: node.recordings.archived.aggregate.count,\n };\n }));\n }, [setArchivesForTargets, setIsLoading]);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var refreshArchivesForTargets = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api\n .graphql("query AllTargetsArchives {\\n targetNodes {\\n target {\\n serviceUri\\n alias\\n }\\n recordings {\\n archived {\\n aggregate {\\n count\\n }\\n }\\n }\\n }\\n }")\n .pipe((0,map/* map */.U)(function (v) { return v.data.targetNodes; }))\n .subscribe(handleArchivesForTargets));\n }, [addSubscription, context.api, setIsLoading, handleArchivesForTargets]);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var getCountForNewTarget = react.useCallback(function (target) {\n addSubscription(context.api\n .graphql("\\n query ArchiveCountForTarget($connectUrl: String) {\\n targetNodes(filter: { name: $connectUrl }) {\\n recordings {\\n archived {\\n aggregate {\\n count\\n }\\n }\\n }\\n }\\n }", { connectUrl: target.connectUrl })\n .subscribe(function (v) {\n setArchivesForTargets(function (old) {\n return AllTargetsArchivedRecordingsTable_spreadArray(AllTargetsArchivedRecordingsTable_spreadArray([], old, true), [\n {\n target: target,\n targetAsObs: (0,of.of)(target),\n archiveCount: v.data.targetNodes[0].recordings.archived.aggregate.count,\n },\n ], false);\n });\n }));\n }, [addSubscription, context.api]);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var handleLostTarget = react.useCallback(function (target) {\n setArchivesForTargets(function (old) { return old.filter(function (_a) {\n var t = _a.target;\n return !(0,Target_service/* isEqualTarget */.v4)(t, target);\n }); });\n setExpandedTargets(function (old) { return old.filter(function (t) { return !(0,Target_service/* isEqualTarget */.v4)(t, target); }); });\n }, [setArchivesForTargets, setExpandedTargets]);\n var handleTargetNotification = react.useCallback(function (evt) {\n var target = {\n connectUrl: evt.serviceRef.connectUrl,\n alias: evt.serviceRef.alias,\n };\n if (evt.kind === \'FOUND\') {\n getCountForNewTarget(target);\n }\n else if (evt.kind === \'MODIFIED\') {\n setArchivesForTargets(function (old) {\n var idx = old.findIndex(function (_a) {\n var t = _a.target;\n return (0,Target_service/* isEqualTarget */.v4)(t, target);\n });\n if (idx >= 0) {\n var matched = old[idx];\n if (target.connectUrl === matched.target.connectUrl && target.alias === matched.target.alias) {\n // If alias and connectUrl are not updated, ignore changes.\n return old;\n }\n return old.splice(idx, 1, AllTargetsArchivedRecordingsTable_assign(AllTargetsArchivedRecordingsTable_assign({}, matched), { target: target, targetAsObs: (0,of.of)(target) }));\n }\n return old;\n });\n }\n else if (evt.kind === \'LOST\') {\n handleLostTarget(target);\n }\n }, [setArchivesForTargets, getCountForNewTarget, handleLostTarget]);\n var handleSearchInput = react.useCallback(function (searchInput) {\n setSearchText(searchInput);\n }, [setSearchText]);\n var handleSearchInputClear = react.useCallback(function () {\n setSearchText(\'\');\n }, [setSearchText]);\n react.useEffect(function () {\n refreshArchivesForTargets();\n }, [refreshArchivesForTargets]);\n var searchedArchivesForTargets = react.useMemo(function () {\n var _a, _b;\n var updated;\n if (!searchText) {\n updated = archivesForTargets;\n }\n else {\n var formattedSearchText_1 = searchText.trim().toLowerCase();\n updated = archivesForTargets.filter(function (_a) {\n var t = _a.target;\n return t.alias.toLowerCase().includes(formattedSearchText_1) ||\n t.connectUrl.toLowerCase().includes(formattedSearchText_1);\n });\n }\n return (0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, updated.filter(function (v) { return !hideEmptyTargets || v.archiveCount > 0; }), AllTargetsArchivedRecordingsTable_tableColumns);\n }, [searchText, archivesForTargets, sortBy, hideEmptyTargets]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshArchivesForTargets(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.target, context.settings, refreshArchivesForTargets]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.TargetJvmDiscovery */.mN.TargetJvmDiscovery)\n .subscribe(function (v) { return handleTargetNotification(v.message.event); }));\n }, [addSubscription, context.notificationChannel, handleTargetNotification]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingSaved */.mN.ActiveRecordingSaved).subscribe(function (v) {\n updateCount(v.message.target, 1);\n }));\n }, [addSubscription, context.notificationChannel, updateCount]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ArchivedRecordingCreated */.mN.ArchivedRecordingCreated).subscribe(function (v) {\n updateCount(v.message.target, 1);\n }));\n }, [addSubscription, context.notificationChannel, updateCount]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ArchivedRecordingDeleted */.mN.ArchivedRecordingDeleted).subscribe(function (v) {\n updateCount(v.message.target, -1);\n }));\n }, [addSubscription, context.notificationChannel, updateCount]);\n var toggleExpanded = react.useCallback(function (target) {\n var idx = (0,Target_service/* indexOfTarget */.E4)(expandedTargets, target);\n setExpandedTargets(function (expandedTargets) {\n return idx >= 0\n ? AllTargetsArchivedRecordingsTable_spreadArray(AllTargetsArchivedRecordingsTable_spreadArray([], expandedTargets.slice(0, idx), true), expandedTargets.slice(idx + 1, expandedTargets.length), true) : AllTargetsArchivedRecordingsTable_spreadArray(AllTargetsArchivedRecordingsTable_spreadArray([], expandedTargets, true), [target], false);\n });\n }, [expandedTargets, setExpandedTargets]);\n var targetRows = react.useMemo(function () {\n return searchedArchivesForTargets.map(function (_a, idx) {\n var target = _a.target, archiveCount = _a.archiveCount;\n var isExpanded = (0,Target_service/* includesTarget */.vR)(expandedTargets, target);\n return (react.createElement(Tr.Tr, { key: "".concat(idx, "_parent") },\n react.createElement(Td.Td, { key: "target-table-row-".concat(idx, "_1"), id: "target-ex-toggle-".concat(idx), "aria-controls": "target-ex-expand-".concat(idx), expand: {\n rowIndex: idx,\n isExpanded: isExpanded,\n onToggle: function () {\n toggleExpanded(target);\n },\n } }),\n react.createElement(Td.Td, { key: "target-table-row-".concat(idx, "_2"), dataLabel: AllTargetsArchivedRecordingsTable_tableColumns[0].title }, target.alias == target.connectUrl || !target.alias\n ? "".concat(target.connectUrl)\n : "".concat(target.alias, " (").concat(target.connectUrl, ")")),\n react.createElement(Td.Td, { key: "target-table-row-".concat(idx, "_3"), dataLabel: AllTargetsArchivedRecordingsTable_tableColumns[1].title },\n react.createElement(Badge/* Badge */.C, { key: "".concat(idx, "_count") }, archiveCount))));\n });\n }, [toggleExpanded, searchedArchivesForTargets, expandedTargets]);\n var recordingRows = react.useMemo(function () {\n return searchedArchivesForTargets.map(function (_a) {\n var target = _a.target, targetAsObs = _a.targetAsObs;\n var isExpanded = (0,Target_service/* includesTarget */.vR)(expandedTargets, target);\n var keyBase = (0,utils/* hashCode */.un)(JSON.stringify(target));\n return (react.createElement(Tr.Tr, { key: "child-".concat(keyBase), isExpanded: isExpanded },\n react.createElement(Td.Td, { key: "target-ex-expand-".concat(keyBase), dataLabel: \'Content Details\', colSpan: AllTargetsArchivedRecordingsTable_tableColumns.length + 1 }, isExpanded ? (react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null,\n react.createElement(ArchivedRecordingsTable, { target: targetAsObs, isUploadsTable: false, isNestedTable: true }))) : null)));\n });\n }, [searchedArchivesForTargets, expandedTargets]);\n var rowPairs = react.useMemo(function () {\n var rowPairs = [];\n for (var i = 0; i < targetRows.length; i++) {\n rowPairs.push(targetRows[i]);\n rowPairs.push(recordingRows[i]);\n }\n return rowPairs;\n }, [targetRows, recordingRows]);\n var view;\n if (isLoading) {\n view = react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else if (!searchedArchivesForTargets.length) {\n view = (react.createElement(react.Fragment, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Targets"))));\n }\n else {\n view = (react.createElement(react.Fragment, null,\n react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "all-targets-table" },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, { key: "table-header-expand" }),\n AllTargetsArchivedRecordingsTable_tableColumns.map(function (_a, idx) {\n var title = _a.title, width = _a.width;\n return (react.createElement(Th.Th, { key: "table-header-".concat(title), width: width, sort: getSortParams(idx) }, title));\n }))),\n react.createElement(Tbody/* Tbody */.p, null, rowPairs))));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "all-targets-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(SearchInput/* SearchInput */.M, { placeholder: "Search", value: searchText, onChange: handleSearchInput, onClear: handleSearchInputClear }))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, null,\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Checkbox/* Checkbox */.X, { name: "all-targets-hide-check", label: "Hide targets with zero recordings", onChange: setHideEmptyTargets, isChecked: hideEmptyTargets, id: "all-targets-hide-check", "aria-label": "all-targets-hide-check" }))))),\n view));\n};\n\n;// CONCATENATED MODULE: ./src/app/Archives/Archives.tsx\nvar Archives_assign = (undefined && undefined.__assign) || function () {\n Archives_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Archives_assign.apply(this, arguments);\n};\nvar Archives_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\n This specific target is used as the "source" for the Uploads version of the ArchivedRecordingsTable.\n The connectUrl is the \'uploads\' because for actions performed on uploaded archived recordings,\n the backend issues a notification with the "target" field set to the \'uploads\', signalling that\n these recordings are not associated with any target. We can then match on the \'uploads\' when performing\n notification handling in the ArchivedRecordingsTable.\n*/\nvar uploadAsTarget = {\n connectUrl: Api_service/* UPLOADS_SUBDIRECTORY */.ld,\n alias: \'\',\n};\nvar ArchiveTab;\n(function (ArchiveTab) {\n ArchiveTab["ALL_ARCHIVES"] = "all-archives";\n ArchiveTab["ALL_TARGETS"] = "all-targets";\n ArchiveTab["UPLOADS"] = "uploads";\n})(ArchiveTab || (ArchiveTab = {}));\nvar Archives = function (_a) {\n var props = Archives_rest(_a, []);\n var _b = (0,react_router/* useLocation */.TH)(), search = _b.search, pathname = _b.pathname;\n var history = (0,react_router/* useHistory */.k6)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var activeTab = react.useMemo(function () {\n return (0,utils/* getActiveTab */.fr)(search, \'tab\', Object.values(ArchiveTab), ArchiveTab.ALL_TARGETS);\n }, [search]);\n var _c = react.useState(false), archiveEnabled = _c[0], setArchiveEnabled = _c[1];\n react.useEffect(function () {\n addSubscription(context.api.isArchiveEnabled().subscribe(setArchiveEnabled));\n }, [context.api, addSubscription, setArchiveEnabled]);\n var onTabSelect = react.useCallback(function (_, key) {\n return (0,utils/* switchTab */.MR)(history, pathname, search, { tabKey: \'tab\', tabValue: "".concat(key) });\n }, [history, pathname, search]);\n var uploadTargetAsObs = react.useMemo(function () { return (0,of.of)(uploadAsTarget); }, []);\n var cardBody = react.useMemo(function () {\n return archiveEnabled ? (react.createElement(Tabs/* Tabs */.m, { id: "archives", activeKey: activeTab, onSelect: onTabSelect, unmountOnExit: true },\n react.createElement(Tab/* Tab */.O, { id: "all-targets", eventKey: ArchiveTab.ALL_TARGETS, title: react.createElement(TabTitleText/* TabTitleText */.T, null, "All Targets") },\n react.createElement(AllTargetsArchivedRecordingsTable, null)),\n react.createElement(Tab/* Tab */.O, { id: "all-archives", eventKey: ArchiveTab.ALL_ARCHIVES, title: react.createElement(TabTitleText/* TabTitleText */.T, null, "All Archives") },\n react.createElement(AllArchivedRecordingsTable, null)),\n react.createElement(Tab/* Tab */.O, { id: "uploads", eventKey: ArchiveTab.UPLOADS, title: react.createElement(TabTitleText/* TabTitleText */.T, null, "Uploads") },\n react.createElement(ArchivedRecordingsTable, { target: uploadTargetAsObs, isUploadsTable: true, isNestedTable: false })))) : (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "Archives Unavailable")));\n }, [archiveEnabled, activeTab, uploadTargetAsObs, onTabSelect]);\n return (react.createElement(BreadcrumbPage, Archives_assign({}, props, { pageTitle: "Archives" }),\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardBody/* CardBody */.e, null, cardBody))));\n};\n/* harmony default export */ const Archives_Archives = (Archives);\n\n;// CONCATENATED MODULE: ./src/app/TargetView/TargetContextSelector.tsx\nvar TargetContextSelector_assign = (undefined && undefined.__assign) || function () {\n TargetContextSelector_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TargetContextSelector_assign.apply(this, arguments);\n};\nvar TargetContextSelector_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar TargetContextSelector_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar TargetContextSelector = function (_a) {\n var className = _a.className, props = TargetContextSelector_rest(_a, ["className"]);\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState([]), targets = _b[0], setTargets = _b[1];\n var _c = react.useState(Target_service/* NO_TARGET */.JE), selectedTarget = _c[0], setSelectedTarget = _c[1];\n var _d = react.useState((0,LocalStorage/* getFromLocalStorage */.fp)(\'TARGET_FAVORITES\', [])), favorites = _d[0], setFavorites = _d[1];\n var _e = react.useState(false), isTargetOpen = _e[0], setIsTargetOpen = _e[1];\n var _f = react.useState(false), isLoading = _f[0], setLoading = _f[1];\n var handleSelectToggle = react.useCallback(function () { return setIsTargetOpen(function (old) { return !old; }); }, [setIsTargetOpen]);\n var handleTargetSelect = react.useCallback(function (_, _a, isPlaceholder) {\n var target = _a.target;\n setIsTargetOpen(false);\n var toSelect = isPlaceholder ? Target_service/* NO_TARGET */.JE : target;\n if (!(0,Target_service/* isEqualTarget */.v4)(toSelect, selectedTarget)) {\n context.target.setTarget(toSelect);\n }\n }, [setIsTargetOpen, selectedTarget, context.target]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(function (target) {\n setSelectedTarget(target);\n if (target !== Target_service/* NO_TARGET */.JE) {\n // Only save to local storage when target is valid\n // NO_TARGET will clear storage\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TARGET\', target.connectUrl);\n }\n }));\n }, [addSubscription, context.target, setSelectedTarget]);\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n react.useEffect(function () {\n if (!targets.length) {\n return;\n }\n var cachedTargetUrl = (0,LocalStorage/* getFromLocalStorage */.fp)(\'TARGET\', Target_service/* NO_TARGET */.JE);\n var matchedTarget = targets.find(function (t) { return t.connectUrl === cachedTargetUrl; });\n if (matchedTarget) {\n context.target.setTarget(matchedTarget);\n }\n else {\n context.target.setTarget(Target_service/* NO_TARGET */.JE);\n (0,LocalStorage/* removeFromLocalStorage */.bZ)(\'TARGET\');\n }\n setFavorites(function (old) { return old.filter(function (f) { return targets.some(function (t) { return t.connectUrl === f; }); }); });\n }, [targets, context.target, setFavorites]);\n var refreshTargetList = react.useCallback(function () {\n setLoading(true);\n addSubscription(context.targets.queryForTargets().subscribe(function () { return setLoading(false); }));\n }, [addSubscription, context.targets, setLoading]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshTargetList(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, refreshTargetList]);\n var noOptions = react.useMemo(function () { return targets.length === 0; }, [targets]);\n var selectOptions = react.useMemo(function () {\n if (noOptions) {\n return [\n react.createElement(SelectOption/* SelectOption */.$, { key: \'no-target-found\', isPlaceholder: true, isDisabled: true }, "No target found"),\n ];\n }\n var favSet = new Set(favorites);\n var groupNames = new Set();\n targets.forEach(function (t) { var _a; return groupNames.add(((_a = t.annotations) === null || _a === void 0 ? void 0 : _a.cryostat[\'REALM\']) || \'Others\'); });\n var options = Array.from(groupNames)\n .map(function (name) { return (react.createElement(SelectGroup/* SelectGroup */.D, { key: name, label: name }, targets\n .filter(function (t) { var _a; return (((_a = t.annotations) === null || _a === void 0 ? void 0 : _a.cryostat[\'REALM\']) || \'Others\') === name; })\n .map(function (t) { return (react.createElement(SelectOption/* SelectOption */.$, { isFavorite: favSet.has(t.connectUrl), id: t.connectUrl, key: t.connectUrl, value: TargetContextSelector_assign({ toString: function () { return (0,Target_service/* getTargetRepresentation */.FW)(t); }, compareTo: function (other) { return other.target.connectUrl === t.connectUrl; } }, { target: t }) })); }))); })\n .sort(function (a, b) { return "".concat(a.props[\'label\']).localeCompare("".concat(b.props[\'label\'])); });\n var favGroup = favorites.length\n ? [\n react.createElement(SelectGroup/* SelectGroup */.D, { key: \'Favorites\', label: \'Favorites\' }, favorites\n .map(function (f) { return targets.find(function (t) { return t.connectUrl === f; }); })\n .filter(function (t) { return t !== undefined; })\n .map(function (t) { return (react.createElement(SelectOption/* SelectOption */.$, { isFavorite: true, id: t.connectUrl, key: "favorited-".concat(t.connectUrl), value: TargetContextSelector_assign({ toString: function () { return (0,Target_service/* getTargetRepresentation */.FW)(t); }, compareTo: function (other) { return other.target.connectUrl === t.connectUrl; } }, { target: t }) })); })),\n react.createElement(Divider/* Divider */.i, { key: \'favorite-divider\' }),\n ]\n : [];\n return favGroup.concat(options);\n }, [targets, noOptions, favorites]);\n var handleTargetFilter = react.useCallback(function (_, value) {\n if (!value || noOptions) {\n // In case of empty options, placeholder is returned.\n return selectOptions;\n }\n var matchExp = new RegExp(value, \'i\');\n return selectOptions\n .filter(function (grp) { return grp.props.children; })\n .map(function (grp) {\n return react.cloneElement(grp, {\n children: grp.props.children.filter(function (option) {\n var target = option.props.value.target;\n return matchExp.test(target.connectUrl) || matchExp.test(target.alias);\n }),\n });\n })\n .filter(function (grp) { return grp.props.children.length > 0; });\n }, [selectOptions, noOptions]);\n var handleFavorite = react.useCallback(function (itemId, isFavorite) {\n setFavorites(function (old) {\n var toUpdate = !isFavorite ? TargetContextSelector_spreadArray(TargetContextSelector_spreadArray([], old, true), [itemId], false) : old.filter(function (f) { return f !== itemId; });\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'TARGET_FAVORITES\', toUpdate);\n return toUpdate;\n });\n }, [setFavorites]);\n var selectionPrefix = react.useMemo(function () { return (selectedTarget !== Target_service/* NO_TARGET */.JE ? react.createElement("span", { style: { fontWeight: 700 } }, "Target:") : undefined); }, [selectedTarget]);\n var selectFooter = react.useMemo(function () { return (react.createElement(react_router_dom.Link, { to: \'/topology/create-custom-target\' },\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary" }, "Create Target"))); }, []);\n return (react.createElement(react.Fragment, null,\n react.createElement("div", TargetContextSelector_assign({ className: "target-context-selector__wrapper" }, props, { "data-quickstart-id": \'target-select\' }), isLoading ? (react.createElement(LinearDotSpinner, { className: "target-context-selector__linear-dot-spinner" })) : (react.createElement(Select/* Select */.P, { className: className, isPlain: true, variant: selectConstants/* SelectVariant.single */.TM.single, "aria-label": "Select Target", maxHeight: "30em", isFlipEnabled: true, menuAppendTo: \'parent\', placeholderText: \'Select a target\', isOpen: isTargetOpen, onToggle: handleSelectToggle, onSelect: handleTargetSelect, hasInlineFilter: true, inlineFilterPlaceholderText: "Filter by target...", toggleIcon: selectionPrefix, onFilter: handleTargetFilter, isGrouped: !noOptions, selections: selectedTarget !== Target_service/* NO_TARGET */.JE\n ? TargetContextSelector_assign({ toString: function () { return (0,Target_service/* getTargetRepresentation */.FW)(selectedTarget); }, compareTo: function (other) { return other.target.connectUrl === selectedTarget.connectUrl; } }, { target: selectedTarget }) : undefined, footer: selectFooter, favorites: favorites, onFavorite: handleFavorite }, selectOptions))),\n react.createElement(Divider/* Divider */.i, null)));\n};\n\n;// CONCATENATED MODULE: ./src/app/TargetView/TargetView.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar TargetView = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), hasSelection = _a[0], setHasSelection = _a[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n react.useEffect(function () {\n addSubscription(context.target\n .target()\n .pipe((0,map/* map */.U)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,distinctUntilChanged/* distinctUntilChanged */.x)())\n .subscribe(setHasSelection));\n }, [context.target, addSubscription, setHasSelection]);\n return (react.createElement(react.Fragment, null,\n react.createElement(TargetContextSelector, null),\n props.attachments,\n react.createElement(BreadcrumbPage, { pageTitle: props.pageTitle, breadcrumbs: props.breadcrumbs }, hasSelection ? props.children : react.createElement(NoTargetSelected, null))));\n};\n\n;// CONCATENATED MODULE: ./src/app/DurationPicker/DurationPicker.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar DurationPicker = function (props) {\n return (react.createElement(react.Fragment, null,\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: props.period, isRequired: true, type: "number", id: "duration-picker-period", "aria-label": "Duration Picker Period Input", onChange: function (v) { return props.onPeriodChange(Number(v)); }, isDisabled: !props.enabled, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: props.unitScalar, onChange: function (v) { return props.onUnitScalarChange(Number(v)); }, "aria-label": "Duration Picker Units Input", isDisabled: !props.enabled },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: 1 * 1000, label: "Seconds" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 60 * 1000, label: "Minutes" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 60 * 60 * 1000, label: "Hours" }))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/CreateRecording/CustomRecordingForm.tsx\nvar CustomRecordingForm_assign = (undefined && undefined.__assign) || function () {\n CustomRecordingForm_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CustomRecordingForm_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RecordingNamePattern = /^[\\w_]+$/;\nvar DurationPattern = /^[1-9][0-9]*$/;\nvar CustomRecordingForm = function (_a) {\n var prefilled = _a.prefilled;\n var context = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var history = (0,react_router/* useHistory */.k6)();\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.name) || \'\'), recordingName = _b[0], setRecordingName = _b[1];\n var _c = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.name)\n ? RecordingNamePattern.test(recordingName)\n ? constants/* ValidatedOptions.success */.LD.success\n : constants/* ValidatedOptions.error */.LD.error\n : constants/* ValidatedOptions.default */.LD["default"]), nameValid = _c[0], setNameValid = _c[1];\n var _d = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.restartExisting) || false), restartExisting = _d[0], setRestartExisting = _d[1];\n var _e = react.useState(((prefilled === null || prefilled === void 0 ? void 0 : prefilled.duration) || 30) < 1), continuous = _e[0], setContinuous = _e[1];\n var _f = react.useState(true), archiveOnStop = _f[0], setArchiveOnStop = _f[1];\n var _g = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.duration) || 30), duration = _g[0], setDuration = _g[1];\n var _h = react.useState(1000), durationUnit = _h[0], setDurationUnit = _h[1];\n var _j = react.useState(constants/* ValidatedOptions.success */.LD.success), durationValid = _j[0], setDurationValid = _j[1];\n var _k = react.useState([]), templates = _k[0], setTemplates = _k[1];\n var _l = react.useState({\n name: prefilled === null || prefilled === void 0 ? void 0 : prefilled.templateName,\n type: prefilled === null || prefilled === void 0 ? void 0 : prefilled.templateType,\n }), template = _l[0], setTemplate = _l[1];\n var _m = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.maxAge) || 0), maxAge = _m[0], setMaxAge = _m[1];\n var _o = react.useState(1), maxAgeUnits = _o[0], setMaxAgeUnits = _o[1];\n var _p = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.maxSize) || 0), maxSize = _p[0], setMaxSize = _p[1];\n var _q = react.useState(1), maxSizeUnits = _q[0], setMaxSizeUnits = _q[1];\n var _r = react.useState(true), toDisk = _r[0], setToDisk = _r[1];\n var _s = react.useState((prefilled === null || prefilled === void 0 ? void 0 : prefilled.labels) || []), labels = _s[0], setLabels = _s[1];\n var _t = react.useState(constants/* ValidatedOptions.default */.LD["default"]), labelsValid = _t[0], setLabelsValid = _t[1];\n var _u = react.useState(false), loading = _u[0], setLoading = _u[1];\n var _v = react.useState(\'\'), errorMessage = _v[0], setErrorMessage = _v[1];\n var handleCreateRecording = react.useCallback(function (recordingAttributes) {\n setLoading(true);\n addSubscription(context.api\n .createRecording(recordingAttributes)\n .pipe((0,first/* first */.P)())\n .subscribe(function (resp) {\n setLoading(false);\n if (resp && resp.ok) {\n history.goBack();\n }\n }));\n }, [addSubscription, context.api, history, setLoading]);\n var handleRestartExistingChange = react.useCallback(function (checked) {\n setRestartExisting(checked);\n }, [setRestartExisting]);\n var handleContinuousChange = react.useCallback(function (checked) {\n setContinuous(checked);\n setDuration(0);\n setDurationValid(checked ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error);\n }, [setContinuous, setDuration, setDurationValid]);\n var handleDurationChange = react.useCallback(function (evt) {\n setDuration(Number(evt));\n setDurationValid(DurationPattern.test(evt) ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error);\n }, [setDurationValid, setDuration]);\n var handleDurationUnitChange = react.useCallback(function (evt) {\n setDurationUnit(Number(evt));\n }, [setDurationUnit]);\n var handleTemplateChange = react.useCallback(function (templateName, templateType) {\n setTemplate({\n name: templateName,\n type: templateType,\n });\n }, [setTemplate]);\n var eventSpecifierString = react.useMemo(function () {\n var str = \'\';\n var name = template.name, type = template.type;\n if (name) {\n str += "template=".concat(name);\n }\n if (type) {\n str += ",type=".concat(type);\n }\n return str;\n }, [template]);\n var getFormattedLabels = react.useCallback(function () {\n var obj = {};\n labels.forEach(function (l) {\n if (!!l.key && !!l.value) {\n obj[l.key] = l.value;\n }\n });\n return obj;\n }, [labels]);\n var handleRecordingNameChange = react.useCallback(function (name) {\n setNameValid(RecordingNamePattern.test(name) ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error);\n setRecordingName(name);\n }, [setNameValid, setRecordingName]);\n var handleMaxAgeChange = react.useCallback(function (evt) {\n setMaxAge(Number(evt));\n }, [setMaxAge]);\n var handleMaxAgeUnitChange = react.useCallback(function (evt) {\n setMaxAgeUnits(Number(evt));\n }, [setMaxAgeUnits]);\n var handleMaxSizeChange = react.useCallback(function (evt) {\n setMaxSize(Number(evt));\n }, [setMaxSize]);\n var handleMaxSizeUnitChange = react.useCallback(function (evt) {\n setMaxSizeUnits(Number(evt));\n }, [setMaxSizeUnits]);\n var handleToDiskChange = react.useCallback(function (checked, evt) {\n setToDisk(evt.target.checked);\n }, [setToDisk]);\n var setRecordingOptions = react.useCallback(function (options) {\n // toDisk is not set, and defaults to true because of https://github.com/cryostatio/cryostat/issues/263\n setMaxAge((prefilled === null || prefilled === void 0 ? void 0 : prefilled.maxAge) || options.maxAge || 0);\n setMaxAgeUnits(1);\n setMaxSize((prefilled === null || prefilled === void 0 ? void 0 : prefilled.maxSize) || options.maxSize || 0);\n setMaxSizeUnits(1);\n }, [setMaxAge, setMaxAgeUnits, setMaxSize, setMaxSizeUnits, prefilled]);\n var handleSubmit = react.useCallback(function () {\n var notificationMessages = [];\n if (nameValid !== constants/* ValidatedOptions.success */.LD.success) {\n notificationMessages.push("Recording name ".concat(recordingName, " is invalid"));\n }\n if (notificationMessages.length > 0) {\n var message = notificationMessages.join(\'. \').trim() + \'.\';\n notifications.warning(\'Invalid form data\', message);\n return;\n }\n var options = {\n restart: restartExisting,\n toDisk: toDisk,\n maxAge: toDisk ? (continuous ? maxAge * maxAgeUnits : undefined) : undefined,\n maxSize: toDisk ? maxSize * maxSizeUnits : undefined,\n };\n var recordingAttributes = {\n name: recordingName,\n events: eventSpecifierString,\n duration: continuous ? undefined : duration * (durationUnit / 1000),\n archiveOnStop: archiveOnStop && !continuous,\n options: options,\n metadata: { labels: getFormattedLabels() },\n };\n handleCreateRecording(recordingAttributes);\n }, [\n eventSpecifierString,\n getFormattedLabels,\n archiveOnStop,\n continuous,\n duration,\n durationUnit,\n maxAge,\n maxAgeUnits,\n maxSize,\n maxSizeUnits,\n nameValid,\n notifications,\n recordingName,\n restartExisting,\n toDisk,\n handleCreateRecording,\n ]);\n var refreshFormOptions = react.useCallback(function (target) {\n if (target === Target_service/* NO_TARGET */.JE) {\n return;\n }\n addSubscription((0,forkJoin/* forkJoin */.D)({\n templates: context.api.doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/templates")),\n recordingOptions: context.api.doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/recordingOptions")),\n }).subscribe({\n next: function (_a) {\n var templates = _a.templates, recordingOptions = _a.recordingOptions;\n setErrorMessage(\'\');\n setTemplates(templates);\n setTemplate(function (old) {\n var matched = templates.find(function (t) { return t.name === old.name && t.type === t.type; });\n return matched ? { name: matched.name, type: matched.type } : {};\n });\n setRecordingOptions(recordingOptions);\n },\n error: function (error) {\n setErrorMessage((0,Target_service/* isTargetAgentHttp */.iJ)(target) ? \'Unsupported operation: Create recordings\' : error.message); // If both throw, first error will be shown\n setTemplates([]);\n setTemplate({});\n setRecordingOptions({});\n },\n }));\n }, [addSubscription, context.api, setTemplates, setTemplate, setRecordingOptions, setErrorMessage]);\n react.useEffect(function () {\n addSubscription(context.target.authFailure().subscribe(function () {\n setErrorMessage(authFailMessage);\n setTemplates([]);\n setTemplate({});\n setRecordingOptions({});\n }));\n }, [context.target, setErrorMessage, addSubscription, setTemplates, setTemplate, setRecordingOptions]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(refreshFormOptions));\n }, [addSubscription, context.target, refreshFormOptions]);\n var isFormInvalid = react.useMemo(function () {\n return (nameValid !== constants/* ValidatedOptions.success */.LD.success ||\n durationValid !== constants/* ValidatedOptions.success */.LD.success ||\n !template.name ||\n !template.type ||\n labelsValid !== constants/* ValidatedOptions.success */.LD.success);\n }, [nameValid, durationValid, template, labelsValid]);\n var hasReservedLabels = react.useMemo(function () { return labels.some(function (label) { return label.key === \'template.name\' || label.key === \'template.type\'; }); }, [labels]);\n var createButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Creating\',\n spinnerAriaLabel: \'create-active-recording\',\n isLoading: loading,\n });\n }, [loading]);\n var selectedSpecifier = react.useMemo(function () {\n var name = template.name, type = template.type;\n if (name && type) {\n return "".concat(name, ",").concat(type);\n }\n return \'\';\n }, [template]);\n var authRetry = react.useCallback(function () {\n context.target.setAuthRetry();\n }, [context.target]);\n if (errorMessage != \'\') {\n return (react.createElement(ErrorView, { title: \'Error displaying recording creation form\', message: errorMessage, retry: isAuthFail(errorMessage) ? authRetry : undefined }));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small }, "JDK Flight Recordings are compact records of events which have occurred within the target JVM. Many event types are built in to the JVM itself, while others are user defined."),\n react.createElement(Form/* Form */.l, { isHorizontal: true },\n react.createElement(FormGroup/* FormGroup */.c, { label: "Name", isRequired: true, fieldId: "recording-name", helperText: "Enter a recording name. This will be unique within the target JVM.", helperTextInvalid: "A recording name can contain only letters, numbers, and underscores.", validated: nameValid },\n react.createElement(TextInput/* TextInput */.oi, { value: recordingName, isRequired: true, isDisabled: loading, type: "text", id: "recording-name", "aria-describedby": "recording-name-helper", onChange: handleRecordingNameChange, validated: nameValid, "data-quickstart-id": "crf-name" }),\n react.createElement(Checkbox/* Checkbox */.X, { label: "Restart if recording already exists", isChecked: restartExisting, isDisabled: loading, onChange: handleRestartExistingChange, "aria-label": "restartExisting checkbox", id: "recording-restart-existing", name: "recording-restart-existing" })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Duration", isRequired: true, fieldId: "recording-duration", validated: durationValid, helperText: continuous\n ? \'A continuous recording will never be automatically stopped.\'\n : archiveOnStop\n ? \'Time before the recording is automatically stopped and copied to archive.\'\n : \'Time before the recording is automatically stopped.\', helperTextInvalid: "The recording duration must be a positive integer.", "data-quickstart-id": "crf-duration" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Checkbox/* Checkbox */.X, { label: "Continuous", isChecked: continuous, isDisabled: loading, onChange: handleContinuousChange, "aria-label": "Continuous checkbox", id: "recording-continuous", name: "recording-continuous" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Checkbox/* Checkbox */.X, { label: "Archive on Stop", isDisabled: continuous || loading, isChecked: archiveOnStop && !continuous, onChange: setArchiveOnStop, "aria-label": "ArchiveOnStop checkbox", id: "recording-archive-on-stop", name: "recording-archive-on-stop" }))),\n react.createElement(DurationPicker, { enabled: !continuous && !loading, period: duration, onPeriodChange: handleDurationChange, unitScalar: durationUnit, onUnitScalarChange: handleDurationUnitChange })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Template", isRequired: true, fieldId: "recording-template", validated: !template.name ? constants/* ValidatedOptions.default */.LD["default"] : constants/* ValidatedOptions.success */.LD.success, helperText: \'The Event Template to be applied in this recording\', helperTextInvalid: "A Template must be selected" },\n react.createElement(SelectTemplateSelectorForm, { selected: selectedSpecifier, templates: templates, validated: !template.name ? constants/* ValidatedOptions.default */.LD["default"] : constants/* ValidatedOptions.success */.LD.success, disabled: loading, onSelect: handleTemplateChange })),\n react.createElement(ExpandableSection/* ExpandableSection */.L, { toggleTextExpanded: "Hide metadata options", toggleTextCollapsed: "Show metadata options", "data-quickstart-id": "crf-metadata-opt" },\n react.createElement(FormGroup/* FormGroup */.c, { label: "Labels", fieldId: "labels", labelIcon: react.createElement(Tooltip/* Tooltip */.u, { content: react.createElement(Text/* Text */.x, null, "Unique key-value pairs containing information about the recording."), appendTo: utils/* portalRoot */.tO },\n react.createElement(help_icon/* HelpIcon */.by, { noVerticalAlign: true })), isHelperTextBeforeField: true, helperText: react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, { isDynamic: true, variant: hasReservedLabels ? \'warning\' : undefined, hasIcon: hasReservedLabels },\n "Labels with key ",\n react.createElement(Label/* Label */._, { isCompact: true }, "template.name"),\n " and ",\n react.createElement(Label/* Label */._, { isCompact: true }, "template.type"),\n " are set by Cryostat and will be overwritten if specifed.")) },\n react.createElement(RecordingLabelFields, { labels: labels, setLabels: setLabels, setValid: setLabelsValid, isDisabled: loading }))),\n react.createElement(ExpandableSection/* ExpandableSection */.L, { toggleTextExpanded: "Hide advanced options", toggleTextCollapsed: "Show advanced options", "data-quickstart-id": "crf-advanced-opt" },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small }, "A value of 0 for maximum size or age means unbounded."),\n react.createElement(FormGroup/* FormGroup */.c, { fieldId: "To Disk", helperText: "Write contents of buffer onto disk. If disabled, the buffer acts as circular buffer only keeping the most recent recording information" },\n react.createElement(Checkbox/* Checkbox */.X, { label: "To Disk", id: "toDisk-checkbox", isChecked: toDisk, onChange: handleToDiskChange, isDisabled: loading })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Maximum size", fieldId: "maxSize", helperText: "The maximum size of recording data saved to disk" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: maxSize, isRequired: true, type: "number", id: "maxSize", "aria-label": "max size value", onChange: handleMaxSizeChange, min: "0", isDisabled: !toDisk || loading })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: maxSizeUnits, onChange: handleMaxSizeUnitChange, "aria-label": "Max size units input", isDisabled: !toDisk || loading },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "B" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 1024, label: "KiB" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 1024 * 1024, label: "MiB" }))))),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Maximum age", fieldId: "maxAge", helperText: "The maximum age of recording data stored to disk" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: maxAge, isRequired: true, type: "number", id: "maxAgeDuration", "aria-label": "Max age duration", onChange: handleMaxAgeChange, min: "0", isDisabled: !continuous || !toDisk || loading })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: maxAgeUnits, onChange: handleMaxAgeUnitChange, "aria-label": "Max Age units Input", isDisabled: !continuous || !toDisk || loading },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "Seconds" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 60, label: "Minutes" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 60 * 60, label: "Hours" })))))),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, CustomRecordingForm_assign({ variant: "primary", onClick: handleSubmit, isDisabled: isFormInvalid || loading }, createButtonLoadingProps, { "data-quickstart-id": "crf-create-btn" }), loading ? \'Creating\' : \'Create\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: history.goBack, isDisabled: loading }, "Cancel")))));\n};\n\n;// CONCATENATED MODULE: ./src/app/CreateRecording/SnapshotRecordingForm.tsx\nvar SnapshotRecordingForm_assign = (undefined && undefined.__assign) || function () {\n SnapshotRecordingForm_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return SnapshotRecordingForm_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar SnapshotRecordingForm = function (_) {\n var history = (0,react_router/* useHistory */.k6)();\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), loading = _a[0], setLoading = _a[1];\n var _b = react.useState(\'\'), errorMessage = _b[0], setErrorMessage = _b[1];\n var handleCreateSnapshot = react.useCallback(function () {\n setLoading(true);\n addSubscription(context.api\n .createSnapshot()\n .pipe((0,first/* first */.P)())\n .subscribe(function (success) {\n setLoading(false);\n if (success) {\n history.push(\'/recordings\');\n }\n }));\n }, [addSubscription, context.api, history, setLoading]);\n var createButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Creating\',\n spinnerAriaLabel: \'create-snapshot-recording\',\n isLoading: loading,\n });\n }, [loading]);\n react.useEffect(function () {\n addSubscription(context.target.sslFailure().subscribe(function () {\n // also triggered if api calls in Custom Recording form fail\n setErrorMessage(missingSSLMessage);\n }));\n }, [context.target, setErrorMessage, addSubscription]);\n react.useEffect(function () {\n addSubscription(context.target.authRetry().subscribe(function () {\n setErrorMessage(\'\'); // Reset on retry\n }));\n }, [context.target, setErrorMessage, addSubscription]);\n react.useEffect(function () {\n addSubscription(context.target.authFailure().subscribe(function () {\n // also triggered if api calls in Custom Recording form fail\n setErrorMessage(authFailMessage);\n }));\n }, [context.target, setErrorMessage, addSubscription]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(function () {\n setErrorMessage(\'\'); // Reset on change\n }));\n }, [context.target, setErrorMessage, addSubscription]);\n var authRetry = react.useCallback(function () {\n context.target.setAuthRetry();\n }, [context.target]);\n if (errorMessage != \'\') {\n return (react.createElement(ErrorView, { title: \'Error displaying recording creation form\', message: errorMessage, retry: isAuthFail(errorMessage) ? authRetry : undefined }));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(Form/* Form */.l, { isHorizontal: true },\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p },\n "A Snapshot recording is one which contains all information about all events that have been captured in the current session by ",\n react.createElement("i", null, "other,\\u00A0 non-Snapshot"),\n " recordings. Snapshots do not themselves define which events are enabled, their thresholds, or any other options. A Snapshot is only ever in the STOPPED state from the moment it is created."),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, SnapshotRecordingForm_assign({ variant: "primary", onClick: handleCreateSnapshot, isDisabled: loading }, createButtonLoadingProps), loading ? \'Creating\' : \'Create\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: history.goBack, isDisabled: loading }, "Cancel")))));\n};\n\n;// CONCATENATED MODULE: ./src/app/CreateRecording/CreateRecording.tsx\n\n\n\n\n\n\nvar Comp = function (props) {\n var _a = react.useState(0), activeTab = _a[0], setActiveTab = _a[1];\n var onTabSelect = react.useCallback(function (evt, idx) { return setActiveTab(Number(idx)); }, [setActiveTab]);\n var prefilled = react.useMemo(function () {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;\n return ({\n restartExisting: (_b = (_a = props.location) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.restartExisting,\n name: (_d = (_c = props.location) === null || _c === void 0 ? void 0 : _c.state) === null || _d === void 0 ? void 0 : _d.name,\n templateName: (_f = (_e = props.location) === null || _e === void 0 ? void 0 : _e.state) === null || _f === void 0 ? void 0 : _f.templateName,\n templateType: (_h = (_g = props.location) === null || _g === void 0 ? void 0 : _g.state) === null || _h === void 0 ? void 0 : _h.templateType,\n labels: (_k = (_j = props.location) === null || _j === void 0 ? void 0 : _j.state) === null || _k === void 0 ? void 0 : _k.labels,\n duration: (_m = (_l = props.location) === null || _l === void 0 ? void 0 : _l.state) === null || _m === void 0 ? void 0 : _m.duration,\n maxAge: (_p = (_o = props.location) === null || _o === void 0 ? void 0 : _o.state) === null || _p === void 0 ? void 0 : _p.maxAge,\n maxSize: (_r = (_q = props.location) === null || _q === void 0 ? void 0 : _q.state) === null || _r === void 0 ? void 0 : _r.maxSize,\n });\n }, [props.location]);\n return (react.createElement(TargetView, { pageTitle: "Create Recording", breadcrumbs: [{ title: \'Recordings\', path: \'/recordings\' }] },\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Tabs/* Tabs */.m, { activeKey: activeTab, onSelect: onTabSelect },\n react.createElement(Tab/* Tab */.O, { eventKey: 0, title: "Custom Flight Recording" },\n react.createElement(CustomRecordingForm, { prefilled: prefilled })),\n react.createElement(Tab/* Tab */.O, { eventKey: 1, title: "Snapshot Recording" },\n react.createElement(SnapshotRecordingForm, null)))))));\n};\nvar CreateRecording = (0,react_router/* withRouter */.EN)(Comp);\n/* harmony default export */ const CreateRecording_CreateRecording = (CreateRecording);\n\n;// CONCATENATED MODULE: ./src/app/Shared/FeatureFlag/FeatureFlag.tsx\nvar FeatureFlag_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar DynamicFeatureFlag = function (_a) {\n var levels = _a.levels, component = _a.component, defaultComponent = _a.defaultComponent;\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState(Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION), activeLevel = _b[0], setActiveLevel = _b[1];\n react.useLayoutEffect(function () {\n addSubscription(context.settings.featureLevel().subscribe(function (featureLevel) { return setActiveLevel(featureLevel); }));\n }, [addSubscription, context.settings, setActiveLevel]);\n var toRender = react.useMemo(function () {\n if (levels.includes(activeLevel)) {\n return component(activeLevel);\n }\n return defaultComponent;\n }, [levels, activeLevel, component, defaultComponent]);\n return react.createElement(react.Fragment, null, toRender);\n};\nvar FeatureFlag = function (_a) {\n var level = _a.level, strict = _a.strict, children = _a.children;\n var levels = react.useMemo(function () { return (strict ? [level] : FeatureFlag_spreadArray([], Array.from({ length: level + 1 }, function (_, i) { return i; }), true)); }, [strict, level]);\n var component = react.useCallback(function (_) { return react.createElement(react.Fragment, null, children); }, [children]);\n return (react.createElement(react.Fragment, null,\n react.createElement(DynamicFeatureFlag, { levels: levels, component: component })));\n};\n\n;// CONCATENATED MODULE: ./src/app/utils/fakeData.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== "function" && b !== null)\n throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar fakeData_assign = (undefined && undefined.__assign) || function () {\n fakeData_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return fakeData_assign.apply(this, arguments);\n};\n\n\n\n\n\n\n\n\n\nvar fakeTarget = {\n jvmId: \'rpZeYNB9wM_TEnXoJvAFuR0jdcUBXZgvkXiKhjQGFvY=\',\n connectUrl: \'service:jmx:rmi:///jndi/rmi://10-128-2-25.my-namespace.pod:9097/jmxrmi\',\n alias: \'quarkus-test-77f556586c-25bkv\',\n labels: {\n \'pod-template-hash\': \'77f556586c\',\n deployment: \'quarkus-test\',\n },\n annotations: {\n cryostat: {\n HOST: \'10.128.2.25\',\n PORT: \'9097\',\n POD_NAME: \'quarkus-test-77f556586c-25bkv\',\n REALM: \'KubernetesApi\',\n NAMESPACE: \'my-namespace\',\n },\n platform: {},\n },\n};\nvar fakeAARecording = {\n name: \'automated-analysis\',\n downloadUrl: \'https://clustercryostat-sample-default.apps.ci-ln-25fg5f2-76ef8.origin-ci-int-aws.dev.rhcloud.com:443/api/v1/targets/service:jmx:rmi:%2F%2F%2Fjndi%2Frmi:%2F%2F10-128-2-27.my-namespace.pod:9097%2Fjmxrmi/recordings/automated-analysis\',\n reportUrl: \'https://clustercryostat-sample-default.apps.ci-ln-25fg5f2-76ef8.origin-ci-int-aws.dev.rhcloud.com:443/api/v1/targets/service:jmx:rmi:%2F%2F%2Fjndi%2Frmi:%2F%2F10-128-2-27.my-namespace.pod:9097%2Fjmxrmi/reports/automated-analysis\',\n metadata: {\n labels: {\n \'template.name\': \'Profiling\',\n \'template.type\': \'TARGET\',\n origin: \'automated-analysis\',\n },\n },\n startTime: 1680732807,\n id: 0,\n state: Api_service/* RecordingState.RUNNING */.SR.RUNNING,\n duration: 0,\n continuous: false,\n toDisk: false,\n maxSize: 1048576,\n maxAge: 0,\n};\nvar fakeEvaluations = [\n {\n name: \'Passwords in Environment Variables\',\n description: \'The environment variables in the recording may contain passwords.\',\n score: 100,\n topic: \'environment_variables\',\n },\n {\n name: \'Class Leak\',\n description: \'No classes with identical names have been loaded more times than the limit.\',\n score: 0,\n topic: \'classloading\',\n },\n {\n name: \'Class Loading Pressure\',\n description: \'No significant time was spent loading new classes during this recording.\',\n score: 0,\n topic: \'classloading\',\n },\n {\n name: \'Discouraged Management Agent Settings\',\n description: \'Insecure management agent settings: SSL disabled.\',\n score: 50,\n topic: \'jvm_information\',\n },\n {\n name: \'Thrown Exceptions\',\n description: \'The program generated 31.8 exceptions per second during 1.006 s starting at 1/23/45, 6:78:90 AM.\',\n score: 0.2,\n topic: \'exceptions\',\n },\n];\nvar fakeCachedReport = {\n report: fakeEvaluations,\n timestamp: 1663027200000,\n};\nvar FakeTargetService = /** @class */ (function (_super) {\n __extends(FakeTargetService, _super);\n function FakeTargetService() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FakeTargetService.prototype.target = function () {\n return (0,of.of)(fakeTarget);\n };\n return FakeTargetService;\n}(Target_service/* TargetService */.cH));\nvar FakeReportService = /** @class */ (function (_super) {\n __extends(FakeReportService, _super);\n function FakeReportService(notifications, login) {\n return _super.call(this, login, notifications) || this;\n }\n FakeReportService.prototype.reportJson = function (_recording, _connectUrl) {\n return (0,of.of)(fakeEvaluations);\n };\n FakeReportService.prototype.getCachedAnalysisReport = function (_connectUrl) {\n return fakeCachedReport;\n };\n return FakeReportService;\n}(Report_service/* ReportService */.rM));\nvar FakeSetting = /** @class */ (function (_super) {\n __extends(FakeSetting, _super);\n function FakeSetting() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FakeSetting.prototype.chartControllerConfig = function (_defaultConfig) {\n if (_defaultConfig === void 0) { _defaultConfig = {\n minRefresh: 0.1,\n }; }\n return {\n minRefresh: 0.1,\n };\n };\n return FakeSetting;\n}(Settings_service/* SettingsService */.gb));\nvar FakeApiService = /** @class */ (function (_super) {\n __extends(FakeApiService, _super);\n function FakeApiService(target, notifications, login) {\n return _super.call(this, target, notifications, login) || this;\n }\n // MBean Metrics card\n FakeApiService.prototype.getTargetMBeanMetrics = function (_target, _queries) {\n return (0,of.of)({\n thread: {\n threadCount: Math.ceil(Math.random() * 5),\n daemonThreadCount: Math.ceil(Math.random() * 5),\n },\n os: {\n arch: \'x86_64\',\n availableProcessors: Math.ceil(Math.random() * 8),\n version: \'10.0.1\',\n systemCpuLoad: Math.random(),\n systemLoadAverage: Math.random(),\n processCpuLoad: Math.random(),\n totalPhysicalMemorySize: Math.ceil(Math.random() * 64),\n freePhysicalMemorySize: Math.ceil(Math.random() * 64),\n },\n memory: {\n heapMemoryUsage: {\n init: Math.ceil(Math.random() * 64),\n used: Math.ceil(Math.random() * 64),\n committed: Math.ceil(Math.random() * 64),\n max: Math.ceil(Math.random() * 64),\n },\n nonHeapMemoryUsage: {\n init: Math.ceil(Math.random() * 64),\n used: Math.ceil(Math.random() * 64),\n committed: Math.ceil(Math.random() * 64),\n max: Math.ceil(Math.random() * 64),\n },\n heapMemoryUsagePercent: Math.random(),\n },\n runtime: {\n bootClassPath: \'/path/to/boot/classpath\',\n classPath: \'/path/to/classpath\',\n inputArguments: [\'-Xmx1g\', \'-Djava.security.policy=...\'],\n libraryPath: \'/path/to/library/path\',\n managementSpecVersion: \'1.0\',\n name: \'Java Virtual Machine\',\n specName: \'Java Virtual Machine Specification\',\n specVendor: \'Oracle Corporation\',\n startTime: Date.now(),\n // systemProperties: {...}\n uptime: Date.now(),\n vmName: \'Java HotSpot(TM) 64-Bit Server VM\',\n vmVendor: \'Oracle Corporation\',\n vmVersion: \'25.131-b11\',\n bootClassPathSupported: true,\n },\n });\n };\n // JFR Metrics card\n FakeApiService.prototype.targetHasRecording = function (_target, _filter) {\n return (0,of.of)(true);\n };\n FakeApiService.prototype.uploadActiveRecordingToGrafana = function (_recordingName) {\n return (0,of.of)(true);\n };\n FakeApiService.prototype.grafanaDashboardUrl = function () {\n return (0,of.of)(\'https://grafana-url\');\n };\n // JVM Detail Cards\n // Note T is expected to array due to its usage in EntityDetail component.\n FakeApiService.prototype.getTargetActiveRecordings = function (_target) {\n return (0,of.of)([fakeAARecording]);\n };\n FakeApiService.prototype.getTargetArchivedRecordings = function (_target) {\n return (0,of.of)([]);\n };\n FakeApiService.prototype.getTargetEventTemplates = function (_target) {\n return (0,of.of)([]);\n };\n FakeApiService.prototype.getTargetEventTypes = function (_target) {\n return (0,of.of)([]);\n };\n FakeApiService.prototype.getActiveProbesForTarget = function (_target, _suppressNotifications, _skipStatusCheck) {\n return (0,of.of)([]);\n };\n FakeApiService.prototype.getRules = function (_suppressNotifications, _skipStatusCheck) {\n return (0,of.of)([]);\n };\n FakeApiService.prototype.getCredentials = function (_suppressNotifications, _skipStatusCheck) {\n return (0,of.of)([]);\n };\n // Automatic Analysis Card\n // This fakes the fetch for Automatic Analysis recording to return available.\n // Then subsequent graphql call for archived recording is ignored\n FakeApiService.prototype.graphql = function (_query, _variables, _suppressNotifications, _skipStatusCheck) {\n return (0,of.of)({\n data: {\n targetNodes: [\n {\n recordings: {\n active: {\n data: [fakeAARecording],\n },\n },\n },\n ],\n },\n });\n };\n FakeApiService.prototype.createRecording = function (_recordingAttributes) {\n return (0,of.of)({\n ok: true,\n status: 200,\n });\n };\n FakeApiService.prototype.deleteRecording = function (_recordingName) {\n return (0,of.of)(true);\n };\n return FakeApiService;\n}(Api_service/* ApiService */.sM));\nvar target = new FakeTargetService();\nvar api = new FakeApiService(target, Notifications/* NotificationsInstance */.Bn, Services/* defaultServices.login */.J.login);\nvar reports = new FakeReportService(Notifications/* NotificationsInstance */.Bn, Services/* defaultServices.login */.J.login);\nvar settings = new FakeSetting();\nvar fakeServices = fakeData_assign(fakeData_assign({}, Services/* defaultServices */.J), { target: target, api: api, reports: reports, settings: settings });\nvar fakeChartContext = {\n jfrController: new JFRMetricsChartController(fakeServices.api, fakeServices.target, fakeServices.notificationChannel, fakeServices.settings),\n mbeanController: new MBeanMetricsChartController(fakeServices.api, fakeServices.target, fakeServices.settings),\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NumberInput/NumberInput.js\nvar NumberInput = __webpack_require__(48270);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/js/next/index.js\nvar next = __webpack_require__(96127);\n// EXTERNAL MODULE: ./node_modules/nanoid/index.browser.js\nvar index_browser = __webpack_require__(53416);\n// EXTERNAL MODULE: ./node_modules/rxjs/dist/esm5/internal/Observable.js + 1 modules\nvar Observable = __webpack_require__(19293);\n;// CONCATENATED MODULE: ./src/app/Dashboard/AddCard.tsx\nvar AddCard_assign = (undefined && undefined.__assign) || function () {\n AddCard_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AddCard_assign.apply(this, arguments);\n};\nvar AddCard_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar AddCard_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AddCard = function (_a) {\n var variant = _a.variant, _props = AddCard_rest(_a, ["variant"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = react.useState(false), showWizard = _b[0], setShowWizard = _b[1];\n var _c = react.useState(\'\'), selection = _c[0], setSelection = _c[1];\n var _d = react.useState({}), propsConfig = _d[0], setPropsConfig = _d[1];\n var catalogRef = react.useRef(null);\n var handleSelect = react.useCallback(function (_, selection) {\n setSelection(selection);\n var c = {};\n if (selection) {\n getCardDescriptorByTitle(selection, t).propControls.forEach(function (ctrl) { return (c[ctrl.key] = ctrl.defaultValue); });\n }\n setPropsConfig(c);\n }, [t, setSelection, setPropsConfig]);\n var handleAdd = react.useCallback(function () {\n setShowWizard(false);\n var config = getCardDescriptorByTitle(selection, t);\n var cardConfig = {\n id: "".concat(config.component.name, "-").concat((0,index_browser/* nanoid */.x0)()),\n name: config.component.name,\n span: config.cardSizes.span.default,\n props: propsConfig,\n };\n dispatch(ReduxStore_dashboardConfigAddCardIntent(cardConfig.id, cardConfig.name, cardConfig.span, cardConfig.props));\n }, [dispatch, t, setShowWizard, selection, propsConfig]);\n var handleStart = react.useCallback(function () {\n var _a;\n setShowWizard(true);\n (_a = catalogRef.current) === null || _a === void 0 ? void 0 : _a.blur();\n }, [setShowWizard]);\n var handleStop = react.useCallback(function () {\n setShowWizard(false);\n setSelection(\'\');\n setPropsConfig({});\n }, [setSelection, setShowWizard, setPropsConfig]);\n // custom nav for disabling subsequent steps (ex. configuration) if a card type hasn\'t been selected first\n var customNav = react.useCallback(function (isExpanded, steps, activeStep, goToStepByIndex) {\n return (react.createElement(next.WizardNav, { isExpanded: isExpanded }, steps\n .filter(function (step) { return !step.isHidden; })\n .map(function (step, idx) { return (react.createElement(next.WizardNavItem, { key: step.id, id: step.id, content: step.name, isCurrent: activeStep.id === step.id, isDisabled: step.isDisabled || (idx > 0 && !selection), stepIndex: step.index, onNavItemClick: goToStepByIndex })); })));\n }, [selection]);\n var content = react.useMemo(function () {\n switch (variant) {\n case \'card\':\n return (react.createElement(Card/* Card */.Z, { isRounded: true, isCompact: true, isFullHeight: true },\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.large */.I.large },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: plus_circle_icon/* PlusCircleIcon */.wl }),\n react.createElement(Title/* Title */.D, { headingLevel: "h2", size: "md" }, "Add a new card"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, t(\'Dashboard.CARD_CATALOG_DESCRIPTION\')),\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleStart, "data-quickstart-id": "dashboard-add-btn" }, "Add"))))));\n case \'icon-button\':\n return (react.createElement(Tooltip/* Tooltip */.u, { content: \'Add card\', appendTo: function () { return document.getElementById(\'dashboard-catalog-btn-wrapper\') || document.body; } },\n react.createElement(Button_Button/* Button */.zx, { "aria-label": "Add card", "data-quickstart-id": \'dashboard-add-btn\', variant: "plain", onClick: handleStart, style: { padding: 0 }, ref: catalogRef },\n react.createElement(Shared_QuickSearchIcon, null))));\n default:\n return null;\n }\n }, [handleStart, t, variant]);\n return (react.createElement(react.Fragment, null,\n react.createElement("div", { id: "dashboard-catalog-btn-wrapper" }, content),\n react.createElement(Modal/* Modal */.u, { "aria-label": "Dashboard Card Catalog Modal", isOpen: showWizard, width: \'90%\', className: "card-catalog__wizard-modal", hasNoBodyWrapper: true, showClose: false, appendTo: utils/* portalRoot */.tO },\n react.createElement(next.Wizard, { id: \'card-catalog-wizard\', onClose: handleStop, onSave: handleAdd, nav: customNav, header: react.createElement(next.WizardHeader, { title: t(\'Dashboard.CARD_CATALOG_TITLE\'), onClose: handleStop, closeButtonAriaLabel: "Close add card form", description: t(\'Dashboard.CARD_CATALOG_DESCRIPTION\') }) },\n react.createElement(next.WizardStep, { id: "card-type-select", name: t(\'CARD_TYPE\', { ns: \'common\' }), footer: {\n isNextDisabled: !selection,\n nextButtonText: selection &&\n !getCardDescriptorByTitle(selection, t).propControls.length &&\n !getCardDescriptorByTitle(selection, t).advancedConfig\n ? \'Finish\'\n : \'Next\',\n } },\n react.createElement(Stack/* Stack */.K, null,\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Text/* Text */.x, null, t(\'Dashboard.ADD_CARD_HELPER_TEXT\'))),\n react.createElement(StackItem/* StackItem */.v, { isFilled: true, style: { overflow: \'auto\' } },\n react.createElement(CardGallery, { selection: selection, onSelect: handleSelect })))),\n react.createElement(next.WizardStep, { id: "card-props-config", name: "Configuration", footer: {\n nextButtonText: selection && !getCardDescriptorByTitle(selection, t).advancedConfig ? \'Finish\' : \'Next\',\n }, isHidden: !selection || !getCardDescriptorByTitle(selection, t).propControls.length }, selection && (react.createElement(PropsConfigForm, { cardTitle: selection, config: propsConfig, controls: getCardDescriptorByTitle(selection, t).propControls, onChange: setPropsConfig }))),\n react.createElement(next.WizardStep, { id: "card-adv-config", name: "Advanced Configuration", footer: { nextButtonText: \'Finish\' }, isHidden: !selection || !getCardDescriptorByTitle(selection, t).advancedConfig },\n react.createElement(Title/* Title */.D, { headingLevel: "h5" },\n "Provide advanced configuration for the ",\n selection,\n " card"),\n selection && getCardDescriptorByTitle(selection, t).advancedConfig)))));\n};\nvar getFullDescription = function (selection, t) {\n var config = getCardDescriptorByTitle(selection, t).descriptionFull;\n if (typeof config === \'string\') {\n return t(config);\n }\n else {\n return config;\n }\n};\nvar CardGallery = function (_a) {\n var selection = _a.selection, onSelect = _a.onSelect;\n var t = (0,es/* useTranslation */.$G)().t;\n var activeLevel = useFeatureLevel();\n var _b = react.useState(), toViewCard = _b[0], setToViewCard = _b[1];\n var availableCards = react.useMemo(function () { return getDashboardCards(activeLevel); }, [activeLevel]);\n var items = react.useMemo(function () {\n return availableCards.map(function (card) {\n var icon = card.icon, labels = card.labels, title = card.title, description = card.description;\n return (react.createElement(Card/* Card */.Z, { id: title, key: title, hasSelectableInput: true, isSelectableRaised: true, onClick: function (event) {\n if (selection === t(title)) {\n setToViewCard(availableCards.find(function (card) { return t(card.title) === selection; }));\n }\n else {\n onSelect(event, t(title));\n }\n }, isFullHeight: true, isFlat: true, isSelected: selection === t(title) },\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(Level/* Level */.a, { hasGutter: true },\n icon ? react.createElement(LevelItem/* LevelItem */.Z, null, icon) : null,\n react.createElement(LevelItem/* LevelItem */.Z, null,\n react.createElement(CardTitle/* CardTitle */.l, null, t(title))),\n react.createElement(LevelItem/* LevelItem */.Z, null, labels ? (react.createElement(LabelGroup/* LabelGroup */.e, null, labels.map(function (_a) {\n var content = _a.content, icon = _a.icon, color = _a.color;\n return (react.createElement(Label/* Label */._, { key: content, color: color, icon: icon, isCompact: true }, content));\n }))) : null))),\n react.createElement(CardBody/* CardBody */.e, null, t(description))));\n });\n }, [t, availableCards, selection, onSelect]);\n react.useEffect(function () {\n setToViewCard(availableCards.find(function (card) { return t(card.title) === selection; }));\n }, [selection, availableCards, t]);\n var panelContent = react.useMemo(function () {\n if (!toViewCard) {\n return null;\n }\n var title = toViewCard.title, icon = toViewCard.icon, labels = toViewCard.labels, preview = toViewCard.preview;\n return (react.createElement(DrawerPanelContent/* DrawerPanelContent */.S, { isResizable: true, defaultSize: "50%" },\n react.createElement(DrawerHead/* DrawerHead */.h, null,\n react.createElement(DrawerActions/* DrawerActions */.x, null,\n react.createElement(DrawerCloseButton/* DrawerCloseButton */.c, { onClick: function () { return setToViewCard(undefined); } }))),\n react.createElement(DrawerPanelBody/* DrawerPanelBody */.F, { className: "card-catalog__detail-panel-body" },\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Flex/* Flex */.k, { spacer: { default: \'spacerSm\' } },\n icon ? react.createElement(FlexItem/* FlexItem */.B, null, icon) : null,\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(Title/* Title */.D, { headingLevel: \'h3\' }, t(title))))),\n react.createElement(StackItem/* StackItem */.v, null, labels && labels.length ? (react.createElement(LabelGroup/* LabelGroup */.e, null, labels.map(function (_a) {\n var content = _a.content, icon = _a.icon, color = _a.color;\n return (react.createElement(Label/* Label */._, { key: content, color: color, icon: icon }, content));\n }))) : null),\n react.createElement(StackItem/* StackItem */.v, null, getFullDescription(t(title), t)),\n react.createElement(StackItem/* StackItem */.v, { isFilled: true }, preview ? (react.createElement("div", { className: "dashboard-card-preview" },\n react.createElement("div", { onClick: function (e) {\n e.preventDefault();\n e.stopPropagation();\n }, className: "non-interactive-overlay" }),\n react.createElement(Services/* ServiceContext.Provider */.o.Provider, { value: fakeServices },\n react.createElement(ChartContext.Provider, { value: fakeChartContext }, preview)))) : (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyText, { text: \'No preview\' }))))))));\n }, [t, setToViewCard, toViewCard]);\n return (react.createElement(Drawer/* Drawer */.dy, { isExpanded: !!toViewCard, isInline: true },\n react.createElement(DrawerContent/* DrawerContent */.s, { panelContent: panelContent },\n react.createElement(DrawerContentBody/* DrawerContentBody */.s, null,\n react.createElement(Grid/* Grid */.r, { hasGutter: true, style: { alignItems: \'stretch\', marginTop: \'1em\', marginRight: !toViewCard ? 0 : \'1em\' } }, items.map(function (item) { return (react.createElement(GridItem/* GridItem */.P, { span: 4, key: item.key }, item)); }))))));\n};\nvar PropsConfigForm = function (_a) {\n var onChange = _a.onChange, props = AddCard_rest(_a, ["onChange"]);\n var t = (0,es/* useTranslation */.$G)().t;\n var handleChange = react.useCallback(function (k) { return function (e) {\n var copy = AddCard_assign({}, props.config);\n copy[k] = e;\n onChange(copy);\n }; }, [onChange, props.config]);\n var handleNumeric = react.useCallback(function (k) { return function (e) {\n var value = e.target.value;\n var copy = AddCard_assign({}, props.config);\n copy[k] = value;\n onChange(copy);\n }; }, [onChange, props.config]);\n var handleNumericStep = react.useCallback(function (k, v) { return function (_) {\n var copy = AddCard_assign({}, props.config);\n copy[k] = props.config[k] + v;\n onChange(copy);\n }; }, [onChange, props.config]);\n var createControl = react.useCallback(function (ctrl) {\n var _a, _b;\n var input;\n switch (ctrl.kind) {\n case \'boolean\':\n input = (react.createElement(Switch/* Switch */.r, { label: "On", labelOff: "Off", isChecked: props.config[ctrl.key], onChange: handleChange(ctrl.key) }));\n break;\n case \'number\':\n input = (react.createElement(NumberInput/* NumberInput */.Y, { inputName: t(ctrl.name), inputAriaLabel: "".concat(t(ctrl.name), " input"), value: props.config[ctrl.key], onChange: handleNumeric(ctrl.key), onPlus: handleNumericStep(ctrl.key, 1), onMinus: handleNumericStep(ctrl.key, -1), min: (_a = ctrl.extras) === null || _a === void 0 ? void 0 : _a.min, max: (_b = ctrl.extras) === null || _b === void 0 ? void 0 : _b.max }));\n break;\n case \'string\':\n input = (react.createElement(TextInput/* TextInput */.oi, { type: "text", "aria-label": "".concat(ctrl.key, " input"), value: props.config[ctrl.key], onChange: handleChange(ctrl.key) }));\n break;\n case \'text\':\n input = (react.createElement(TextArea/* TextArea */.Kx, { type: "text", "aria-label": "".concat(ctrl.key, " input"), value: props.config[ctrl.key], onChange: handleChange(ctrl.key) }));\n break;\n case \'select\':\n input = (react.createElement(SelectControl, { handleChange: handleChange(ctrl.key), selectedConfig: props.config[ctrl.key], control: ctrl }));\n break;\n default:\n input = react.createElement(Text/* Text */.x, null, "Bad config");\n break;\n }\n return (react.createElement(FormGroup/* FormGroup */.c, { key: "".concat(ctrl.key), label: t(ctrl.name), helperText: t(ctrl.description), isInline: true, isStack: true }, input));\n }, [t, props.config, handleChange, handleNumeric, handleNumericStep]);\n return (react.createElement(react.Fragment, null, props.controls.length > 0 ? (react.createElement(Form/* Form */.l, null,\n react.createElement(Title/* Title */.D, { headingLevel: \'h5\' },\n "Configure the ",\n props.cardTitle,\n " card"),\n props.controls.map(function (ctrl) { return createControl(ctrl); }))) : (react.createElement(Text/* Text */.x, null, "No configuration required."))));\n};\nvar SelectControl = function (_a) {\n var handleChange = _a.handleChange, control = _a.control, selectedConfig = _a.selectedConfig;\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = react.useState(false), selectOpen = _b[0], setSelectOpen = _b[1];\n var _c = react.useState([]), options = _c[0], setOptions = _c[1];\n var _d = react.useState(false), errored = _d[0], setErrored = _d[1];\n var handleSelect = react.useCallback(function (_, selection, isPlaceholder) {\n if (!isPlaceholder) {\n handleChange(selection);\n }\n setSelectOpen(false);\n }, [handleChange, setSelectOpen]);\n react.useEffect(function () {\n var obs;\n if (control.values instanceof Observable/* Observable */.y) {\n obs = control.values;\n }\n else {\n obs = (0,of.of)(control.values);\n }\n addSubscription(obs.subscribe({\n next: function (v) {\n setErrored(false);\n setOptions(function (old) {\n if (Array.isArray(v)) {\n return v.map(function (s) { return String(s); });\n }\n return AddCard_spreadArray(AddCard_spreadArray([], old, true), [String(v)], false);\n });\n },\n error: function (err) {\n setErrored(true);\n setOptions(["".concat(err)]);\n },\n }));\n }, [addSubscription, setOptions, setErrored, control, control.values]);\n return (react.createElement(Select/* Select */.P, { onToggle: setSelectOpen, isOpen: selectOpen, onSelect: handleSelect, selections: selectedConfig, menuAppendTo: utils/* portalRoot */.tO, isFlipEnabled: true, maxHeight: \'16em\' }, errored\n ? [react.createElement(SelectOption/* SelectOption */.$, { key: 0, value: "Load Error: ".concat(options[0]), isPlaceholder: true, isDisabled: true })]\n : options.map(function (choice, idx) {\n if (control.extras && control.extras.displayMapper) {\n choice = control.extras.displayMapper(choice);\n }\n return react.createElement(SelectOption/* SelectOption */.$, { key: idx + 1, value: choice });\n })));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/DashboardCardActionMenu.tsx\nvar DashboardCardActionMenu_assign = (undefined && undefined.__assign) || function () {\n DashboardCardActionMenu_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return DashboardCardActionMenu_assign.apply(this, arguments);\n};\nvar DashboardCardActionMenu_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar DashboardCardActionMenu = function (_a) {\n var onRemove = _a.onRemove, onResetSize = _a.onResetSize, onView = _a.onView, props = DashboardCardActionMenu_rest(_a, ["onRemove", "onResetSize", "onView"]);\n var _b = react.useState(false), isOpen = _b[0], setOpen = _b[1];\n var t = (0,es/* useTranslation */.$G)()[0];\n var onSelect = react.useCallback(function (_) {\n setOpen(false);\n }, [setOpen]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Dropdown/* Dropdown */.L, DashboardCardActionMenu_assign({}, props, { isPlain: true, isFlipEnabled: true, menuAppendTo: function () { return document.getElementById(\'dashboard-grid\') || utils/* portalRoot */.tO; }, position: \'right\', isOpen: isOpen, toggle: react.createElement(KebabToggle/* KebabToggle */.a, { onToggle: setOpen }), onSelect: onSelect, dropdownItems: [\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "View", onClick: onView }, t(\'VIEW\', { ns: \'common\' })),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "Remove", onClick: onRemove }, t(\'REMOVE\', { ns: \'common\' })),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "Reset Size", onClick: onResetSize }, t(\'DashboardCardActionMenu.RESET_SIZE\')),\n ] }))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownToggleAction.js\nvar DropdownToggleAction = __webpack_require__(54494);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/MenuToggle/MenuToggle.js\nvar MenuToggle = __webpack_require__(23971);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/MenuGroup.js\nvar MenuGroup = __webpack_require__(22025);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/MenuItemAction.js\nvar MenuItemAction = __webpack_require__(44404);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Menu/MenuFooter.js\nvar MenuFooter = __webpack_require__(48088);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/pficon-template-icon.js\nvar pficon_template_icon = __webpack_require__(40568);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon.js\nvar ellipsis_v_icon = __webpack_require__(62165);\n;// CONCATENATED MODULE: ./src/app/Dashboard/cryostat-dashboard-templates.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nvar CURR_VERSION = LayoutTemplateVersion["v2.3"];\nvar BlankLayout = {\n name: \'Blank\',\n description: \'A blank layout template for creating your own dashboard.\',\n cards: [],\n version: CURR_VERSION,\n vendor: LayoutTemplateVendor.BLANK,\n};\nvar GeneralLayout = {\n name: \'General\',\n description: "A general layout template for monitoring a JVM\'s metrics and performance.",\n vendor: LayoutTemplateVendor.CRYOSTAT,\n cards: [\n {\n name: \'MBeanMetricsChartCard\',\n span: 3,\n props: {\n chartKind: \'Heap Usage Percentage\',\n duration: 60,\n period: 10,\n themeColor: \'cyan\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 3,\n props: {\n chartKind: \'System CPU Load\',\n duration: 60,\n period: 10,\n themeColor: \'gold\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 3,\n props: {\n themeColor: \'blue\',\n chartKind: \'Process CPU Load\',\n duration: 60,\n period: 10,\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 3,\n props: {\n chartKind: \'Physical Memory\',\n duration: 60,\n period: 10,\n themeColor: \'orange\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 3,\n props: {\n themeColor: \'purple\',\n chartKind: \'Heap Memory Usage\',\n duration: 60,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Thread Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Compiler Total Time\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Classloading Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Network Utilization\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Exception Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'File I/O\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Recording Duration\',\n duration: 120,\n period: 10,\n },\n },\n ],\n version: CURR_VERSION,\n};\nvar ThreadMonitoringLayout = {\n name: \'Thread Monitoring\',\n description: "A layout template for monitoring a JVM\'s threads.",\n vendor: LayoutTemplateVendor.CRYOSTAT,\n cards: [\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Thread Count\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Thread Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Thread Context Switch Rate\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Core Count\',\n duration: 120,\n period: 10,\n },\n },\n ],\n version: CURR_VERSION,\n};\nvar MemoryMonitoringLayout = {\n name: \'Memory Monitoring\',\n description: "A layout template for monitoring a JVM\'s memory.",\n vendor: LayoutTemplateVendor.CRYOSTAT,\n cards: [\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Memory Usage\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Total Memory\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 3,\n props: {\n chartKind: \'Heap Usage Percentage\',\n duration: 60,\n period: 10,\n themeColor: \'gold\',\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Heap Usage\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Physical Memory\',\n duration: 60,\n period: 10,\n themeColor: \'blue\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Heap Memory Usage\',\n duration: 60,\n period: 10,\n themeColor: \'cyan\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Non-Heap Memory Usage\',\n duration: 60,\n period: 10,\n themeColor: \'purple\',\n },\n },\n ],\n version: CURR_VERSION,\n};\nvar AutomatedAnalysisLayout = {\n name: \'Automated Analysis\',\n description: \'A layout template for identifying and calculating risk scores for common performance issues in a JVM.\',\n vendor: LayoutTemplateVendor.CRYOSTAT,\n cards: [\n {\n name: \'AutomatedAnalysisCard\',\n span: 7,\n props: {},\n },\n {\n name: \'JvmDetailsCard\',\n span: 5,\n props: {},\n },\n ],\n version: CURR_VERSION,\n};\nvar MBeanMetricsLayout = {\n name: \'MBean Metrics\',\n description: "A layout template for monitoring some of a JVM\'s MBean metrics.",\n vendor: LayoutTemplateVendor.CRYOSTAT,\n cards: [\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Process CPU Load\',\n duration: 60,\n period: 10,\n themeColor: \'blue\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'System Load Average\',\n duration: 60,\n period: 10,\n themeColor: \'cyan\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'System CPU Load\',\n duration: 60,\n period: 10,\n themeColor: \'gold\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Heap Usage Percentage\',\n duration: 60,\n period: 10,\n themeColor: \'orange\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Heap Memory Usage\',\n duration: 60,\n period: 10,\n themeColor: \'gray\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Non-Heap Memory Usage\',\n duration: 60,\n period: 10,\n themeColor: \'purple\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Threads\',\n duration: 60,\n period: 10,\n themeColor: \'green\',\n },\n },\n {\n name: \'MBeanMetricsChartCard\',\n span: 4,\n props: {\n chartKind: \'Physical Memory\',\n duration: 60,\n period: 10,\n themeColor: \'gold\',\n },\n },\n ],\n version: CURR_VERSION,\n};\nvar JFRMonitoringLayout = {\n name: \'JFR Monitoring\',\n description: "A layout template for monitoring a JVM\'s JFR events using embedded Grafana charts.",\n vendor: LayoutTemplateVendor.CRYOSTAT,\n cards: [\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Recording Start Time\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'CPU Load\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Heap Usage\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Memory Usage\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Classloading Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Thread Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Network Utilization\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Exception Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Thread Context Switch Rate\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Compiler Statistics\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Compiler Total Time\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Safepoint Duration\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'File I/O\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Compiler Total Time\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Compiler Peak Time\',\n duration: 120,\n period: 10,\n },\n },\n {\n name: \'JFRMetricsChartCard\',\n span: 3,\n props: {\n theme: \'light\',\n chartKind: \'Object Allocation Sample\',\n duration: 120,\n period: 10,\n },\n },\n ],\n version: CURR_VERSION,\n};\nvar CryostatLayoutTemplates = [\n GeneralLayout,\n AutomatedAnalysisLayout,\n MBeanMetricsLayout,\n JFRMonitoringLayout,\n MemoryMonitoringLayout,\n ThreadMonitoringLayout,\n];\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/arrows-alt-v-icon.js\nvar arrows_alt_v_icon = __webpack_require__(11295);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/sort-amount-down-alt-icon.js\nvar sort_amount_down_alt_icon = __webpack_require__(30490);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/sort-amount-up-alt-icon.js\nvar sort_amount_up_alt_icon = __webpack_require__(38119);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-catalog-view-extension/dist/esm/components/CatalogTile/CatalogTile.js + 10 modules\nvar CatalogTile = __webpack_require__(93908);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/layouts/Gallery/Gallery.js\nvar Gallery = __webpack_require__(21877);\n;// CONCATENATED MODULE: ./src/app/Dashboard/LayoutTemplateGroup.tsx\nvar LayoutTemplateGroup_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar smallestFeatureLevel = function (cards) {\n return cards.reduce(function (minFeatureLevel, card) {\n var featureLevel = getCardDescriptorByName(card.name).featureLevel;\n return Math.min(minFeatureLevel, featureLevel);\n }, Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION);\n};\nvar LayoutTemplateGroup = function (_a) {\n var onTemplateSelect = _a.onTemplateSelect, onTemplateDelete = _a.onTemplateDelete, props = LayoutTemplateGroup_rest(_a, ["onTemplateSelect", "onTemplateDelete"]);\n var t = (0,es/* useTranslation */.$G)().t;\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var _b = react.useContext(LayoutTemplateContext), selectedTemplate = _b.selectedTemplate, setSelectedTemplate = _b.setSelectedTemplate;\n var handleTemplateSelect = react.useCallback(function (template) {\n var selected = {\n template: template,\n category: props.title,\n };\n setSelectedTemplate(selected);\n onTemplateSelect(selected);\n }, [setSelectedTemplate, onTemplateSelect, props.title]);\n var handleClearRecent = react.useCallback(function () {\n dispatch(ReduxStore_dashboardConfigTemplateHistoryClearIntent());\n }, [dispatch]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Split/* Split */.P, null,\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Title/* Title */.D, { headingLevel: "h2", size: "lg", style: { padding: \'1em\' } },\n props.title,\n " (",\n t(\'LayoutTemplateGroup.ITEMS\', { count: props.templates.length }),\n ")")),\n props.title === t(\'SUGGESTED\', { ns: \'common\' }) && props.templates.length !== 1 && (react.createElement(react.Fragment, null,\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true }),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClearRecent }, t(\'CLEAR_RECENT\', { ns: \'common\' })))))),\n react.createElement(Gallery/* Gallery */.r, { hasGutter: true, className: "layout-template-picker" }, props.templates.map(function (template) {\n var level = smallestFeatureLevel(template.cards);\n return (react.createElement("div", { key: template.name, className: \n // make sure the selected template that is **clicked** is highlighted and not any copies that may be in other categories (i.e. suggested)\n selectedTemplate &&\n selectedTemplate.template.name === template.name &&\n selectedTemplate.template.vendor == template.vendor &&\n selectedTemplate.category == props.title\n ? \'layout-template-card__featured\'\n : undefined },\n react.createElement(CatalogTile/* CatalogTile */.E, { featured: selectedTemplate &&\n selectedTemplate.template.name === template.name &&\n selectedTemplate.template.vendor == template.vendor &&\n selectedTemplate.category == props.title, id: template.name, key: template.name, icon: iconify(template.vendor), title: template.name, vendor: template.vendor, onClick: function () { return handleTemplateSelect(template); }, badges: [\n level !== Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION && (react.createElement(Label/* Label */._, { key: template.name, isCompact: true, style: {\n textTransform: \'capitalize\',\n marginTop: \'1.1ch\',\n }, color: level === Settings_service/* FeatureLevel.BETA */.Lu.BETA ? \'green\' : \'red\' }, Settings_service/* FeatureLevel */.Lu[level].toLowerCase())),\n react.createElement(KebabCatalogTileBadge, { template: template, onTemplateDelete: onTemplateDelete, key: template.name }),\n ] }, template.description)));\n }))));\n};\nvar KebabCatalogTileBadge = function (_a) {\n var template = _a.template, onTemplateDelete = _a.onTemplateDelete;\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var onSelect = react.useCallback(function (_ev) {\n setIsOpen(false);\n }, [setIsOpen]);\n var openKebab = react.useCallback(function (value, e) {\n e.stopPropagation();\n setIsOpen(value);\n }, [setIsOpen]);\n var handleTemplateDownload = react.useCallback(function (e) {\n e.stopPropagation();\n serviceContext.api.downloadLayoutTemplate(template);\n }, [serviceContext.api, template]);\n var handleTemplateDelete = react.useCallback(function (e) {\n e.stopPropagation();\n onTemplateDelete(template.name);\n }, [onTemplateDelete, template.name]);\n var dropdownItems = react.useMemo(function () {\n return [\n react.createElement(DropdownItem/* DropdownItem */.h, { key: \'download\', onClick: handleTemplateDownload }, t(\'DOWNLOAD\', { ns: \'common\' })),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: \'delete\', onClick: handleTemplateDelete }, t(\'DELETE\', { ns: \'common\' })),\n ];\n }, [t, handleTemplateDownload, handleTemplateDelete]);\n return (react.createElement(Dropdown/* Dropdown */.L, { menuAppendTo: utils/* portalRoot */.tO, onSelect: onSelect, toggle: react.createElement(KebabToggle/* KebabToggle */.a, { isDisabled: template.vendor !== LayoutTemplateVendor.USER, onToggle: openKebab }), isOpen: isOpen, isPlain: true, dropdownItems: dropdownItems }));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/helpers/Popper/Popper.js + 53 modules\nvar Popper = __webpack_require__(60120);\n;// CONCATENATED MODULE: ./src/app/Dashboard/SearchAutocomplete.tsx\nvar SearchAutocomplete_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar SearchAutocomplete = function (_a) {\n var onChange = _a.onChange, props = SearchAutocomplete_rest(_a, ["onChange"]);\n var _b = react.useState(\'\'), value = _b[0], setValue = _b[1];\n var _c = react.useState(\'\'), hint = _c[0], setHint = _c[1];\n var _d = react.useState([]), autocompleteOptions = _d[0], setAutocompleteOptions = _d[1];\n var _e = react.useState(false), isAutocompleteOpen = _e[0], setIsAutocompleteOpen = _e[1];\n var searchInputRef = react.useRef(null);\n var autocompleteRef = react.useRef(null);\n var onClear = react.useCallback(function () {\n setValue(\'\');\n onChange(\'\');\n }, [setValue, onChange]);\n var onSearchChange = react.useCallback(function (newValue) {\n if (newValue !== \'\' && searchInputRef.current && searchInputRef.current.contains(document.activeElement)) {\n // When the value of the search input changes, build a list of no more than 10 autocomplete options.\n var options = props.values\n .filter(function (option) { return option.toLowerCase().startsWith(newValue.toLowerCase()); })\n .map(function (option) { return (react.createElement(MenuItem/* MenuItem */.s, { itemId: option, key: option }, option)); });\n if (options.length > 10) {\n options = options.slice(0, 10);\n }\n // The hint is set whenever there is only one autocomplete option left.\n setHint(options.length === 1 ? newValue + options[0].props.itemId.substring(newValue.length) : \'\');\n // The menu is hidden if there are no options\n setIsAutocompleteOpen(options.length > 0);\n setAutocompleteOptions(options);\n }\n else {\n setIsAutocompleteOpen(false);\n setAutocompleteOptions([]);\n setHint(\'\');\n }\n setValue(newValue);\n onChange(newValue);\n }, [setValue, setHint, setIsAutocompleteOpen, setAutocompleteOptions, onChange, props.values]);\n // Whenever an autocomplete option is selected, set the search input value, close the menu, and put the browser\n // focus back on the search input\n var onSelect = react.useCallback(function (e, itemId) {\n e.stopPropagation();\n setValue(itemId);\n setHint(\'\');\n setIsAutocompleteOpen(false);\n searchInputRef.current && searchInputRef.current.focus();\n }, [setValue, setHint, setIsAutocompleteOpen]);\n var handleMenuKeys = react.useCallback(function (event) {\n // If there is a hint while the browser focus is on the search input, tab or right arrow will \'accept\' the hint value\n // and set it as the search input value\n if (hint && (event.key === \'Tab\' || event.key === \'ArrowRight\') && searchInputRef.current === event.target) {\n setValue(hint);\n setHint(\'\');\n setIsAutocompleteOpen(false);\n if (event.key === \'ArrowRight\') {\n event.preventDefault();\n }\n // if the autocomplete is open and the browser focus is on the search input,\n }\n else if (isAutocompleteOpen && searchInputRef.current && searchInputRef.current === event.target) {\n // the escape key closes the autocomplete menu and keeps the focus on the search input.\n if (event.key === \'Escape\') {\n setIsAutocompleteOpen(false);\n searchInputRef.current.focus();\n // the up and down arrow keys move browser focus into the autocomplete menu\n }\n else if (event.key === \'ArrowDown\' || event.key === \'ArrowUp\') {\n if (autocompleteRef.current) {\n var firstElement = autocompleteRef.current.querySelector(\'li > button:not(:disabled)\');\n firstElement && firstElement.focus();\n }\n event.preventDefault(); // by default, the up and down arrow keys scroll the window\n // the tab, enter, and space keys will close the menu, and the tab key will move browser\n // focus forward one element (by default)\n }\n else if (event.key === \'Tab\' || event.key === \'Enter\' || event.key === \'Space\') {\n setIsAutocompleteOpen(false);\n if (event.key === \'Enter\' || event.key === \'Space\') {\n event.preventDefault();\n }\n }\n // If the autocomplete is open and the browser focus is in the autocomplete menu\n // hitting tab will close the autocomplete and but browser focus back on the search input.\n }\n else if (isAutocompleteOpen &&\n autocompleteRef.current &&\n autocompleteRef.current.contains(event.target) &&\n event.key === \'Tab\') {\n event.preventDefault();\n setIsAutocompleteOpen(false);\n searchInputRef.current && searchInputRef.current.focus();\n }\n }, [hint, isAutocompleteOpen]);\n // The autocomplete menu should close if the user clicks outside the menu.\n var handleClickOutside = react.useCallback(function (event) {\n if (isAutocompleteOpen && autocompleteRef.current && !autocompleteRef.current.contains(event.target)) {\n setIsAutocompleteOpen(false);\n }\n }, [isAutocompleteOpen]);\n react.useEffect(function () {\n window.addEventListener(\'keydown\', handleMenuKeys);\n window.addEventListener(\'click\', handleClickOutside);\n return function () {\n window.removeEventListener(\'keydown\', handleMenuKeys);\n window.removeEventListener(\'click\', handleMenuKeys);\n };\n }, [handleMenuKeys, handleClickOutside]);\n var searchInput = react.useMemo(function () { return (react.createElement(SearchInput/* SearchInput */.M, { value: value, onChange: onSearchChange, onClear: onClear, ref: searchInputRef, hint: hint, id: "cryostat-autocomplete-search" })); }, [value, onSearchChange, onClear, hint]);\n var autocomplete = react.useMemo(function () { return (react.createElement(Menu/* Menu */.v, { ref: autocompleteRef, onSelect: onSelect },\n react.createElement(MenuContent/* MenuContent */.D, null,\n react.createElement(MenuList/* MenuList */.q, null, autocompleteOptions)))); }, [autocompleteOptions, onSelect]);\n return (react.createElement(Popper/* Popper */.r, { trigger: searchInput, popper: autocomplete, isVisible: isAutocompleteOpen, enableFlip: false, \n // append the autocomplete menu to the search input in the DOM for the sake of the keyboard navigation experience\n appendTo: function () { return document.querySelector(\'#cryostat-autocomplete-search\') || utils/* portalRoot */.tO; } }));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/LayoutTemplatePicker.tsx\nvar LayoutTemplatePicker_assign = (undefined && undefined.__assign) || function () {\n LayoutTemplatePicker_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return LayoutTemplatePicker_assign.apply(this, arguments);\n};\nvar LayoutTemplatePicker_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar LayoutTemplateSort;\n(function (LayoutTemplateSort) {\n LayoutTemplateSort["NAME"] = "Name";\n LayoutTemplateSort["CARD_COUNT"] = "Card Count";\n // TODO: add \'Version\' after more version are released\n})(LayoutTemplateSort || (LayoutTemplateSort = {}));\nvar CARD_PREVIEW_LIMIT = 16;\nvar LayoutTemplatePicker = function (_a) {\n var onTemplateSelect = _a.onTemplateSelect;\n var _b = react.useContext(LayoutTemplateContext), selectedTemplate = _b.selectedTemplate, setSelectedTemplate = _b.setSelectedTemplate, setIsUploadModalOpen = _b.setIsUploadModalOpen;\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var activeLevel = useFeatureLevel();\n var _c = react.useState(\'\'), searchFilter = _c[0], setSearchFilter = _c[1];\n var _d = react.useState(false), isFilterSelectOpen = _d[0], setIsFilterSelectOpen = _d[1];\n var _e = react.useState([]), selectedFilters = _e[0], setSelectedFilters = _e[1];\n var _f = react.useState(false), isSortSelectOpen = _f[0], setIsSortSelectOpen = _f[1];\n var _g = react.useState(undefined), selectedSort = _g[0], setSelectedSort = _g[1];\n var _h = react.useState(\'asc\'), sortDirection = _h[0], setSortDirection = _h[1];\n var _j = react.useState(false), isDrawerExpanded = _j[0], setIsDrawerExpanded = _j[1];\n var _k = react.useState(false), isDeleteWarningModalOpen = _k[0], setIsDeleteWarningModalOpen = _k[1];\n var _l = react.useState(\'\'), toDelete = _l[0], setToDelete = _l[1];\n var t = (0,es/* useTranslation */.$G)().t;\n var recentTemplateRecords = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs.templateHistory; });\n var userSubmittedTemplates = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs.customTemplates; });\n var searchFilteredTemplates = react.useCallback(function (templates) {\n if (!searchFilter) {\n return templates;\n }\n return templates.filter(function (t) { return t.name.toLowerCase().includes(searchFilter.toLowerCase()); });\n }, [searchFilter]);\n var allTemplates = react.useMemo(function () {\n return LayoutTemplatePicker_spreadArray(LayoutTemplatePicker_spreadArray([BlankLayout], CryostatLayoutTemplates, true), userSubmittedTemplates, true);\n }, [userSubmittedTemplates]);\n var allSearchableTemplateNames = react.useMemo(function () {\n return Array.from(new Set(searchFilteredTemplates(allTemplates).map(function (t) { return t.name; })));\n }, [searchFilteredTemplates, allTemplates]);\n var onInnerTemplateSelect = react.useCallback(function (template) {\n onTemplateSelect(template);\n setSelectedTemplate(template);\n setIsDrawerExpanded(true);\n }, [onTemplateSelect, setSelectedTemplate, setIsDrawerExpanded]);\n var handleTemplateDelete = react.useCallback(function (name) {\n dispatch(ReduxStore_dashboardConfigDeleteTemplateIntent(name));\n setSelectedTemplate(function (prev) {\n if ((prev === null || prev === void 0 ? void 0 : prev.template.name) === name) {\n return undefined;\n }\n return prev;\n });\n }, [dispatch, setSelectedTemplate]);\n var onInnerTemplateDelete = react.useCallback(function (templateName) {\n if (serviceContext.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteLayoutTemplate */.gF.DeleteLayoutTemplate)) {\n setIsDeleteWarningModalOpen(true);\n setToDelete(templateName);\n }\n else {\n handleTemplateDelete(templateName);\n }\n }, [serviceContext.settings, setIsDeleteWarningModalOpen, setToDelete, handleTemplateDelete]);\n var handleDeleteWarningModalClose = react.useCallback(function () {\n setIsDeleteWarningModalOpen(false);\n setToDelete(\'\');\n }, [setIsDeleteWarningModalOpen, setToDelete]);\n var deleteWarningModal = react.useMemo(function () {\n return (react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteLayoutTemplate */.gF.DeleteLayoutTemplate, visible: isDeleteWarningModalOpen, onClose: handleDeleteWarningModalClose, onAccept: function () { return handleTemplateDelete(toDelete); } }));\n }, [isDeleteWarningModalOpen, toDelete, handleDeleteWarningModalClose, handleTemplateDelete]);\n var handleUploadButton = react.useCallback(function () {\n setIsUploadModalOpen(true);\n }, [setIsUploadModalOpen]);\n var uploadButton = react.useMemo(function () { return (react.createElement(Button_Button/* Button */.zx, { key: "upload", variant: "secondary", "aria-label": t(\'DashboardLayoutToolbar.UPLOAD.LABEL\'), onClick: handleUploadButton, icon: react.createElement(upload_icon/* UploadIcon */.rG, null), "data-quickstart-id": "dashboard-upload-btn" }, t(\'UPLOAD\', { ns: \'common\' }))); }, [t, handleUploadButton]);\n var onSearchChange = react.useCallback(function (value) {\n setSearchFilter(value);\n }, [setSearchFilter]);\n var onDeleteChip = react.useCallback(function (_category, chip) {\n setSelectedFilters(function (prev) { return prev.filter(function (item) { return item !== chip; }); });\n }, [setSelectedFilters]);\n var onFilterSelect = react.useCallback(function (_ev, selection, isPlaceholder) {\n var selected = selection;\n setSelectedFilters(function (prev) {\n if (isPlaceholder) {\n return [];\n }\n if (prev.includes(selected)) {\n return prev.filter(function (item) { return item !== selected; });\n }\n return LayoutTemplatePicker_spreadArray(LayoutTemplatePicker_spreadArray([], prev, true), [selected], false);\n });\n }, [setSelectedFilters]);\n var onFilterSelectToggle = react.useCallback(function (isExpanded) {\n setIsFilterSelectOpen(isExpanded);\n }, [setIsFilterSelectOpen]);\n var onClearAllFilters = react.useCallback(function () {\n setSelectedFilters([]);\n }, [setSelectedFilters]);\n var onSortSelectToggle = react.useCallback(function (isExpanded) {\n setIsSortSelectOpen(isExpanded);\n }, [setIsSortSelectOpen]);\n var onSortSelect = react.useCallback(function (_ev, selection, isPlaceholder) {\n var selected = selection.valueOf();\n setSelectedSort(function (_prev) {\n if (isPlaceholder) {\n return undefined;\n }\n return selected;\n });\n setIsSortSelectOpen(false);\n }, [setSelectedSort, setIsSortSelectOpen]);\n var sortArrowIcon = react.useMemo(function () {\n if (!selectedSort) {\n return react.createElement(arrows_alt_v_icon/* ArrowsAltVIcon */.k_, null);\n }\n return sortDirection === \'asc\' ? react.createElement(sort_amount_down_alt_icon/* SortAmountDownAltIcon */.X3, null) : react.createElement(sort_amount_up_alt_icon/* SortAmountUpAltIcon */.mJ, null);\n }, [selectedSort, sortDirection]);\n var onSortDirectionChange = react.useCallback(function () {\n setSortDirection(function (prev) { return (prev === \'asc\' ? \'desc\' : \'asc\'); });\n }, [setSortDirection]);\n var onDrawerCloseClick = react.useCallback(function () {\n setIsDrawerExpanded(false);\n }, [setIsDrawerExpanded]);\n var panelContent = react.useMemo(function () {\n var _a;\n var template = selectedTemplate === null || selectedTemplate === void 0 ? void 0 : selectedTemplate.template;\n var numCards = (_a = template === null || template === void 0 ? void 0 : template.cards.length) !== null && _a !== void 0 ? _a : 0;\n return (react.createElement(DrawerPanelContent/* DrawerPanelContent */.S, { isResizable: true, defaultSize: "50%", className: \'layout-template-picker-drawer__panel\' },\n react.createElement(DrawerHead/* DrawerHead */.h, null,\n react.createElement(DrawerActions/* DrawerActions */.x, null,\n react.createElement(DrawerCloseButton/* DrawerCloseButton */.c, { onClick: onDrawerCloseClick }))),\n react.createElement(DrawerPanelBody/* DrawerPanelBody */.F, { style: { marginTop: \'-3.5em\' } }, template ? (react.createElement(DescriptionList/* DescriptionList */.o, { isFillColumns: true },\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, "Name"),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, template.name)),\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, "Description"),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, template.description)),\n template.vendor && (react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, "Vendor"),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, template.vendor))),\n (template === null || template === void 0 ? void 0 : template.version) && (react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null, "Version"),\n react.createElement(DescriptionListDescription/* DescriptionListDescription */.b, null, template.version))),\n react.createElement(DescriptionListGroup/* DescriptionListGroup */.g, null,\n react.createElement(DescriptionListTerm/* DescriptionListTerm */.M, null,\n "Preview (",\n numCards,\n " Cards)"),\n react.createElement(Services/* ServiceContext.Provider */.o.Provider, { value: fakeServices },\n react.createElement(ChartContext.Provider, { value: fakeChartContext },\n react.createElement(Grid/* Grid */.r, { id: \'dashboard-layout-preview-grid\', hasGutter: true, onClick: function (e) {\n e.preventDefault();\n e.stopPropagation();\n } }, numCards === 0 ? (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "Empty preview"))) : (react.createElement(react.Fragment, null,\n template.cards\n .slice(0, CARD_PREVIEW_LIMIT)\n .filter(function (cfg) { return hasCardDescriptorByName(cfg.name); })\n .map(function (cfg, idx) { return (react.createElement(GridItem/* GridItem */.P, { span: numCards === 1 ||\n cfg.name === \'AutomatedAnalysisCard\' ||\n cfg.name === \'JvmDetailsCard\'\n ? 12\n : 6, key: idx, order: { default: idx.toString() } }, cfg.name === \'JFRMetricsChartCard\' ? (react.createElement(Card/* Card */.Z, { isFullHeight: true, isCompact: true },\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(Title/* Title */.D, { headingLevel: \'h4\' }, cfg.props[\'chartKind\'])),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "Empty preview")))))) : (react.createElement("div", { className: "preview-card" }, react.createElement(getCardDescriptorByName(cfg.name).component, LayoutTemplatePicker_assign(LayoutTemplatePicker_assign({ span: cfg.span }, cfg.props), { dashboardId: idx, actions: [], isDraggable: false, isResizable: false, isFullHeight: false })))))); }),\n numCards > CARD_PREVIEW_LIMIT && (react.createElement(GridItem/* GridItem */.P, { span: 12, key: CARD_PREVIEW_LIMIT, order: { default: CARD_PREVIEW_LIMIT.toString() } },\n react.createElement(Card/* Card */.Z, { isFullHeight: true, isCompact: true },\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(Title/* Title */.D, { headingLevel: \'h4\' },\n "Remaining cards (",\n numCards - CARD_PREVIEW_LIMIT,\n ")")),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(List/* List */.aV, { variant: List/* ListVariant.inline */.WK.inline, isPlain: true }, template.cards\n .slice(CARD_PREVIEW_LIMIT)\n .filter(function (cfg) { return hasCardDescriptorByName(cfg.name); })\n .map(function (cfg, idx) {\n return (react.createElement(ListItem/* ListItem */.H, { key: idx, icon: getCardDescriptorByName(cfg.name).icon }, cfg.props[\'chartKind\'] || t(getCardDescriptorByName(cfg.name).title)));\n })))))))))))))) : (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.full */.I.full },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: info_circle_icon/* InfoCircleIcon */.uM }),\n react.createElement(Title/* Title */.D, { headingLevel: "h5", size: "lg" }, "No template selected")))))));\n }, [t, onDrawerCloseClick, selectedTemplate]);\n var sortedFilteredFeatureLeveledTemplateLayoutGroup = react.useCallback(function (title, templates) {\n var featuredLevelled = templates.filter(function (t) { return smallestFeatureLevel(t.cards) >= activeLevel; });\n var sortedSearchFilteredTemplates = searchFilteredTemplates(featuredLevelled).sort(function (a, b) {\n switch (selectedSort) {\n case \'Name\':\n if (sortDirection === \'asc\') {\n return a.name.localeCompare(b.name);\n }\n return b.name.localeCompare(a.name);\n // TODO: uncomment version after more versions are added\n // case \'Version\':\n // if (sortDirection === \'asc\') {\n // return a.version.localeCompare(b.version);\n // }\n // return b.version.localeCompare(a.version);\n case \'Card Count\':\n if (sortDirection === \'asc\') {\n return a.cards.length - b.cards.length;\n }\n return b.cards.length - a.cards.length;\n default:\n return 0;\n }\n });\n return sortedSearchFilteredTemplates.length !== 0 &&\n (selectedFilters.includes(title) || selectedFilters.length === 0) ? (react.createElement(react.Fragment, null,\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(LayoutTemplateGroup, { title: title, templates: sortedSearchFilteredTemplates, onTemplateSelect: onInnerTemplateSelect, onTemplateDelete: onInnerTemplateDelete })),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Divider/* Divider */.i, null)))) : (react.createElement(react.Fragment, null));\n }, [\n activeLevel,\n searchFilteredTemplates,\n selectedFilters,\n selectedSort,\n sortDirection,\n onInnerTemplateSelect,\n onInnerTemplateDelete,\n ]);\n var RecentTemplates = react.useMemo(function () {\n return recentTemplateRecords\n .map(function (r) {\n var template = recordToLayoutTemplate(r, allTemplates);\n if (template) {\n return template;\n }\n else {\n console.error("Could not find template for record ".concat(r.name, " with vendor ").concat(r.vendor));\n return undefined;\n }\n })\n .filter(function (t) { return t !== undefined; });\n }, [recentTemplateRecords, allTemplates]);\n react.useLayoutEffect(function () {\n var _a;\n if (selectedTemplate) {\n (_a = document\n .querySelector(\'.layout-template-picker .catalog-tile-pf.featured\')) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: \'smooth\', block: \'center\' });\n }\n }, [selectedTemplate]);\n return (react.createElement(Drawer/* Drawer */.dy, { isExpanded: isDrawerExpanded, isInline: true },\n react.createElement(DrawerContent/* DrawerContent */.s, { panelContent: panelContent },\n react.createElement(DrawerContentBody/* DrawerContentBody */.s, null,\n react.createElement(OuterScrollContainer/* OuterScrollContainer */.U, null,\n react.createElement(InnerScrollContainer/* InnerScrollContainer */.F, null,\n react.createElement(Toolbar/* Toolbar */.o, { isSticky: true, clearAllFilters: onClearAllFilters },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarToggleGroup/* ToolbarToggleGroup */.R, { toggleIcon: react.createElement(filter_icon/* FilterIcon */.k1, null), breakpoint: \'md\' },\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, { variant: "search-filter" },\n react.createElement(SearchAutocomplete, { values: allTemplates.map(function (t) { return t.name; }), onChange: onSearchChange })),\n react.createElement(ToolbarFilter/* ToolbarFilter */.p, { chips: selectedFilters, deleteChip: onDeleteChip, categoryName: "Category" },\n react.createElement(Select/* Select */.P, { menuAppendTo: utils/* portalRoot */.tO, variant: selectConstants/* SelectVariant.checkbox */.TM.checkbox, "aria-label": "Select template category", onToggle: onFilterSelectToggle, onSelect: onFilterSelect, selections: selectedFilters, isOpen: isFilterSelectOpen, placeholderText: "Template Type" },\n react.createElement(SelectOption/* SelectOption */.$, { key: "suggested", value: t(\'SUGGESTED\', { ns: \'common\' }) }),\n react.createElement(SelectOption/* SelectOption */.$, { key: "cryostat", value: "Cryostat" }),\n react.createElement(SelectOption/* SelectOption */.$, { key: "user-submitted", value: t(\'USER_SUBMITTED\', { ns: \'common\' }) }))))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Select/* Select */.P, { menuAppendTo: utils/* portalRoot */.tO, "aria-label": "Select sorting category", onToggle: onSortSelectToggle, onSelect: onSortSelect, selections: selectedSort, isOpen: isSortSelectOpen, placeholderText: t(\'LayoutTemplatePicker.SORT_BY.PLACEHOLDER\') },\n react.createElement(SelectOption/* SelectOption */.$, { key: LayoutTemplateSort.NAME, value: {\n toString: function () { return "".concat(t(\'LayoutTemplatePicker.SORT_BY.NAME\')); },\n valueOf: function () { return LayoutTemplateSort.NAME; },\n } }),\n react.createElement(SelectOption/* SelectOption */.$, { key: LayoutTemplateSort.CARD_COUNT, value: {\n toString: function () { return "".concat(t(\'LayoutTemplatePicker.SORT_BY.CARD_COUNT\')); },\n valueOf: function () { return LayoutTemplateSort.CARD_COUNT; },\n } }))),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", "aria-label": "Sort", onClick: onSortDirectionChange, isAriaDisabled: !selectedSort }, sortArrowIcon))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, null,\n react.createElement(ToolbarItem/* ToolbarItem */.E, null, uploadButton)))),\n react.createElement(Stack/* Stack */.K, null, allSearchableTemplateNames.length !== 0 ? (react.createElement(react.Fragment, null,\n sortedFilteredFeatureLeveledTemplateLayoutGroup(t(\'SUGGESTED\', { ns: \'common\' }), LayoutTemplatePicker_spreadArray([\n BlankLayout\n ], RecentTemplates, true)),\n sortedFilteredFeatureLeveledTemplateLayoutGroup(\'Cryostat\', CryostatLayoutTemplates),\n sortedFilteredFeatureLeveledTemplateLayoutGroup(t(\'USER_SUBMITTED\', { ns: \'common\' }), userSubmittedTemplates))) : (react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: pficon_template_icon/* PficonTemplateIcon */.p3 }),\n react.createElement(Title/* Title */.D, { size: "lg", headingLevel: "h4" }, "No templates found"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "Upload a template and try again."))))))))),\n deleteWarningModal));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/DashboardLayoutCreateModal.tsx\nvar DashboardLayoutCreateModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar DashboardLayoutCreateModal = function (_a) {\n var onClose = _a.onClose, props = DashboardLayoutCreateModal_rest(_a, ["onClose"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var dashboardConfigs = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs; });\n var _b = react.useState(constants/* ValidatedOptions.default */.LD["default"]), nameValidated = _b[0], setNameValidated = _b[1];\n var _c = react.useState(\'\'), errorMessage = _c[0], setErrorMessage = _c[1];\n var _d = react.useState(\'\'), name = _d[0], setName = _d[1];\n var _e = react.useContext(LayoutTemplateContext), selectedTemplate = _e.selectedTemplate, setSelectedTemplate = _e.setSelectedTemplate;\n react.useEffect(function () {\n setName(props.oldName || \'\');\n }, [setName, props.oldName]);\n var isCreateModal = react.useMemo(function () {\n return props.oldName === undefined;\n }, [props.oldName]);\n var handleNameChange = react.useCallback(function (value) {\n setName(value);\n if (value.length === 0) {\n setNameValidated(constants/* ValidatedOptions.error */.LD.error);\n setErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_REQUIRED\'));\n }\n else if (value.length > 20) {\n setNameValidated(constants/* ValidatedOptions.error */.LD.error);\n setErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_TOO_LONG\'));\n }\n else if (dashboardConfigs.layouts.some(function (layout) { return layout.name === value; }) || value === DEFAULT_DASHBOARD_NAME) {\n setNameValidated(constants/* ValidatedOptions.error */.LD.error);\n setErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_TAKEN\'));\n }\n else {\n if (DashboardLayoutNamePattern.test(value)) {\n setNameValidated(constants/* ValidatedOptions.success */.LD.success);\n }\n else {\n setNameValidated(constants/* ValidatedOptions.error */.LD.error);\n setErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_INVALID\'));\n }\n }\n }, [t, setName, setNameValidated, setErrorMessage, dashboardConfigs]);\n var handleClose = react.useCallback(function (ev) {\n ev && ev.stopPropagation();\n setName(props.oldName || \'\');\n setNameValidated(constants/* ValidatedOptions.default */.LD["default"]);\n onClose();\n }, [setName, setNameValidated, onClose, props.oldName]);\n var handleSubmit = react.useCallback(function (ev) {\n ev && ev.stopPropagation();\n if (nameValidated === constants/* ValidatedOptions.success */.LD.success && selectedTemplate) {\n if (isCreateModal) {\n var newLayout = layoutize(selectedTemplate.template, name);\n dispatch(ReduxStore_dashboardConfigCreateLayoutIntent(newLayout));\n if (selectedTemplate.template !== BlankLayout) {\n dispatch(ReduxStore_dashboardConfigTemplateHistoryPushIntent(selectedTemplate.template));\n }\n dispatch(ReduxStore_dashboardConfigReplaceLayoutIntent(newLayout.name));\n }\n else {\n if (props.oldName !== undefined) {\n dispatch(ReduxStore_dashboardConfigRenameLayoutIntent(props.oldName, name));\n }\n }\n }\n handleClose();\n }, [dispatch, handleClose, selectedTemplate, name, nameValidated, isCreateModal, props.oldName]);\n var handleKeyUp = react.useCallback(function (ev) {\n ev.stopPropagation();\n if (ev.code === \'Enter\' && nameValidated === constants/* ValidatedOptions.success */.LD.success) {\n handleSubmit();\n }\n }, [handleSubmit, nameValidated]);\n var onTemplateSelect = react.useCallback(function (template) {\n setSelectedTemplate(template);\n }, [setSelectedTemplate]);\n var formGroup = react.useMemo(function () {\n return (react.createElement(FormSection/* FormSection */.h, null,\n isCreateModal && (react.createElement(FormGroup/* FormGroup */.c, { label: \'Template\', fieldId: "template", isRequired: true, height: "35em", validated: nameValidated },\n react.createElement("div", { style: { border: \'1px solid var(--pf-global--BorderColor--100)\', height: \'33em\' } },\n react.createElement(LayoutTemplatePicker, { onTemplateSelect: onTemplateSelect })))),\n react.createElement(FormGroup/* FormGroup */.c, { label: t(\'DashboardLayoutCreateModal.NAME.LABEL\'), fieldId: "name", helperText: t(\'DashboardLayoutCreateModal.NAME.HELPER_TEXT\'), helperTextInvalid: errorMessage, isRequired: true, validated: nameValidated },\n react.createElement(TextInput/* TextInput */.oi, { isRequired: true, type: "text", id: "name", name: "name", "aria-describedby": \'name-helper\', value: name, onChange: handleNameChange, onKeyUp: handleKeyUp, autoFocus: true, autoComplete: "on", validated: nameValidated }))));\n }, [t, isCreateModal, nameValidated, errorMessage, name, onTemplateSelect, handleNameChange, handleKeyUp]);\n var actionGroup = react.useMemo(function () {\n return (react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleSubmit, isAriaDisabled: nameValidated !== \'success\' }, isCreateModal ? t(\'CREATE\', { ns: \'common\' }) : t(\'RENAME\', { ns: \'common\' })),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, t(\'CANCEL\', { ns: \'common\' }))));\n }, [t, handleSubmit, handleClose, nameValidated, isCreateModal]);\n var header = react.useMemo(function () { return (react.createElement(Title/* Title */.D, { id: "modal-custom-header-label", headingLevel: "h1", size: Title/* TitleSizes.2xl */.H["2xl"] }, isCreateModal ? t(\'DashboardLayoutCreateModal.CREATE_LAYOUT\') : t(\'DashboardLayoutCreateModal.RENAME_LAYOUT\'))); }, [t, isCreateModal]);\n return (react.createElement(Modal/* Modal */.u, { "aria-label": t(\'DashboardLayoutCreateModal.LABEL\'), width: isCreateModal ? \'110em\' : \'40%\', height: isCreateModal ? \'90%\' : \'auto\', appendTo: utils/* portalRoot */.tO, isOpen: props.visible, showClose: true, onClose: handleClose, header: header },\n react.createElement(Form/* Form */.l, { onSubmit: function (e) { return e.preventDefault(); } },\n formGroup,\n actionGroup)));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/js/helpers/index.js\nvar helpers = __webpack_require__(23053);\n;// CONCATENATED MODULE: ./src/app/Dashboard/DashboardLayoutSetAsTemplateModal.tsx\nvar DashboardLayoutSetAsTemplateModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\nvar DashboardLayoutSetAsTemplateModal = function (_a) {\n var onClose = _a.onClose, _b = _a.downloadModal, downloadModal = _b === void 0 ? false : _b, props = DashboardLayoutSetAsTemplateModal_rest(_a, ["onClose", "downloadModal"]);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var dashboardConfigs = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs; });\n var templates = dashboardConfigs.customTemplates;\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var t = (0,es/* useTranslation */.$G)().t;\n var _c = react.useState(\'\'), name = _c[0], setName = _c[1];\n var _d = react.useState(\'\'), description = _d[0], setDescription = _d[1];\n var _e = react.useState(helpers.ValidatedOptions["default"]), nameValidated = _e[0], setNameValidated = _e[1];\n var _f = react.useState(helpers.ValidatedOptions["default"]), descriptionValidated = _f[0], setDescriptionValidated = _f[1];\n var _g = react.useState(\'\'), nameErrorMessage = _g[0], setNameErrorMessage = _g[1];\n var _h = react.useState(\'\'), descriptionErrorMessage = _h[0], setDescriptionErrorMessage = _h[1];\n var currLayout = react.useMemo(function () { return dashboardConfigs.layouts[dashboardConfigs.current]; }, [dashboardConfigs]);\n var handleClose = react.useCallback(function (ev) {\n ev && ev.stopPropagation();\n setName(\'\');\n setDescription(\'\');\n setNameValidated(helpers.ValidatedOptions["default"]);\n setDescriptionValidated(helpers.ValidatedOptions["default"]);\n setNameErrorMessage(\'\');\n setDescriptionErrorMessage(\'\');\n onClose();\n }, [\n onClose,\n setName,\n setDescription,\n setNameValidated,\n setDescriptionValidated,\n setNameErrorMessage,\n setDescriptionErrorMessage,\n ]);\n var handleSubmit = react.useCallback(function (ev) {\n if (downloadModal) {\n serviceContext.api.downloadLayoutTemplate(templatize(currLayout, name, description));\n }\n else {\n dispatch(ReduxStore_dashboardConfigCreateTemplateIntent(templatize(currLayout, name, description)));\n notifications.success(\'Layout Template Created\', "".concat(name, " was created as a layout template"), NotificationChannel_service/* NotificationCategory.LayoutTemplateCreated */.mN.LayoutTemplateCreated);\n }\n handleClose(ev);\n }, [dispatch, handleClose, serviceContext.api, downloadModal, currLayout, name, description, notifications]);\n var handleNameChange = react.useCallback(function (value) {\n setName(value);\n if (value.length === 0) {\n setNameValidated(helpers.ValidatedOptions.error);\n setNameErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_REQUIRED\'));\n }\n else if (templates.some(function (layout) { return layout.name === value; })) {\n setNameValidated(helpers.ValidatedOptions.error);\n setNameErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_TAKEN\'));\n }\n else {\n if (DashboardLayoutNamePattern.test(value)) {\n setNameValidated(helpers.ValidatedOptions.success);\n setNameErrorMessage(\'\');\n }\n else {\n setNameValidated(helpers.ValidatedOptions.error);\n setNameErrorMessage(t(\'DashboardLayoutCreateModal.ERROR.NAME_INVALID\'));\n }\n }\n }, [t, setName, setNameValidated, setNameErrorMessage, templates]);\n var handleDescriptionChange = react.useCallback(function (value) {\n setDescription(value);\n if (value.length === 0) {\n setDescriptionValidated(helpers.ValidatedOptions["default"]);\n setDescriptionErrorMessage(\'\');\n }\n else if (value.length > LAYOUT_TEMPLATE_DESCRIPTION_WORD_LIMIT) {\n setDescriptionValidated(helpers.ValidatedOptions.error);\n setDescriptionErrorMessage(t(\'DashboardLayoutSetAsTemplateModal.ERROR.DESCRIPTION_TOO_LONG\'));\n }\n else if (LayoutTemplateDescriptionPattern.test(value)) {\n setDescriptionValidated(helpers.ValidatedOptions.success);\n setDescriptionErrorMessage(\'\');\n }\n else {\n setDescriptionValidated(helpers.ValidatedOptions.error);\n setDescriptionErrorMessage(t(\'DashboardLayoutSetAsTemplateModal.ERROR.DESCRIPTION_INVALID\'));\n }\n }, [t, setDescription, setDescriptionValidated, setDescriptionErrorMessage]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: props.visible, variant: Modal/* ModalVariant.medium */.v.medium, showClose: true, onClose: handleClose, title: downloadModal\n ? t(\'DashboardLayoutSetAsTemplateModal.DOWNLOAD.TITLE\')\n : t(\'DashboardLayoutSetAsTemplateModal.SET_TEMPLATE.TITLE\'), description: downloadModal\n ? t("DashboardLayoutSetAsTemplateModal.DOWNLOAD.DESCRIPTION")\n : t("DashboardLayoutSetAsTemplateModal.SET_TEMPLATE.DESCRIPTION") },\n react.createElement(Form/* Form */.l, { onSubmit: function (e) { return e.preventDefault(); } },\n react.createElement(FormGroup/* FormGroup */.c, { label: t(\'DashboardLayoutSetAsTemplateModal.FORM_GROUP.NAME.LABEL\'), fieldId: "name", helperText: t(\'DashboardLayoutSetAsTemplateModal.FORM_GROUP.NAME.HELPER_TEXT\'), helperTextInvalid: nameErrorMessage, isRequired: true, validated: nameValidated },\n react.createElement(TextInput/* TextInput */.oi, { isRequired: true, type: "text", id: "name", name: "name", "aria-describedby": \'name-helper\', value: name, onChange: handleNameChange, autoFocus: true, autoComplete: "on", validated: nameValidated, placeholder: currLayout.name })),\n react.createElement(FormGroup/* FormGroup */.c, { label: t(\'DashboardLayoutSetAsTemplateModal.FORM_GROUP.DESCRIPTION.LABEL\'), fieldId: "description", helperText: t(\'DashboardLayoutSetAsTemplateModal.FORM_GROUP.DESCRIPTION.HELPER_TEXT\'), helperTextInvalid: descriptionErrorMessage, validated: descriptionValidated },\n react.createElement(TextArea/* TextArea */.Kx, { type: "text", id: "description", name: "description", "aria-describedby": \'description-helper\', value: description, onChange: handleDescriptionChange, validated: descriptionValidated, placeholder: t(\'DashboardLayoutSetAsTemplateModal.FORM_GROUP.DESCRIPTION.PLACEHOLDER\') })),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleSubmit, isDisabled: nameValidated !== helpers.ValidatedOptions.success || descriptionValidated === helpers.ValidatedOptions.error }, downloadModal ? t(\'DOWNLOAD\', { ns: \'common\' }) : t(\'SUBMIT\', { ns: \'common\' })),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, t(\'CANCEL\', { ns: \'common\' }))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/LayoutTemplateUploadModal.tsx\nvar LayoutTemplateUploadModal_assign = (undefined && undefined.__assign) || function () {\n LayoutTemplateUploadModal_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return LayoutTemplateUploadModal_assign.apply(this, arguments);\n};\nvar LayoutTemplateUploadModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar LayoutTemplateUploadModal = function (_a) {\n var onClose = _a.onClose, props = LayoutTemplateUploadModal_rest(_a, ["onClose"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var setSelectedTemplate = react.useContext(LayoutTemplateContext).setSelectedTemplate;\n var customTemplates = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs.customTemplates; });\n var t = (0,es/* useTranslation */.$G)().t;\n var submitRef = react.useRef(null); // Use ref to refer to submit trigger div\n var abortRef = react.useRef(null); // Use ref to refer to abort trigger div\n var _b = react.useState(0), numOfFiles = _b[0], setNumOfFiles = _b[1];\n var _c = react.useState(false), allOks = _c[0], setAllOks = _c[1];\n var _d = react.useState(false), uploading = _d[0], setUploading = _d[1];\n var validateParseTemplate = react.useCallback(function (file) {\n return (0,from/* from */.D)(file.text().then(function (content) {\n var template;\n try {\n template = JSON.parse(content);\n }\n catch (err) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.PARSE\'));\n }\n if (!(\'name\' in template && \'description\' in template && \'cards\' in template && \'version\' in template) ||\n Object.keys(template).length !== Object.keys(mockSerialLayoutTemplate).length) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.TEMPLATE_INVALID\'));\n }\n if (!template.name || !DashboardLayoutNamePattern.test(template.name)) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.NAME_INVALID\'));\n }\n if (!template.description ||\n !LayoutTemplateDescriptionPattern.test(template.description) ||\n template.description.length > LAYOUT_TEMPLATE_DESCRIPTION_WORD_LIMIT) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.DESCRIPTION_INVALID\'));\n }\n if (customTemplates.some(function (v) { return v.name === template.name; })) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.NAME_TAKEN\', { name: template.name }));\n }\n if (!Array.isArray(template.cards)) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.CONFIG_INVALID\'));\n }\n for (var _i = 0, _a = template.cards; _i < _a.length; _i++) {\n var cardConfig = _a[_i];\n if (Object.keys(cardConfig).length !== Object.keys(mockSerialCardConfig).length ||\n cardConfig.name === undefined ||\n !getDashboardCards()\n .map(function (c) { return c.component.name; })\n .includes(cardConfig.name) ||\n cardConfig.span === undefined ||\n cardConfig.props === undefined) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.CONFIG_INVALID\'));\n }\n }\n if (!(template.version in LayoutTemplateVersion)) {\n throw new Error(t(\'LayoutTemplateUploadModal.ERROR.VERSION_INVALID\'));\n }\n // all uploaded templates are user-submitted\n return {\n name: template.name,\n description: template.description,\n version: template.version,\n cards: template.cards,\n vendor: LayoutTemplateVendor.USER,\n };\n }));\n }, [t, customTemplates]);\n var reset = react.useCallback(function () {\n setNumOfFiles(0);\n setUploading(false);\n }, [setNumOfFiles, setUploading]);\n var handleClose = react.useCallback(function (ev) {\n ev && ev.stopPropagation();\n if (uploading) {\n abortRef.current && abortRef.current.click();\n }\n else {\n reset();\n onClose();\n }\n }, [uploading, reset, onClose]);\n var onFileSubmit = react.useCallback(function (fileUploads, _a) {\n var _getProgressUpdateCallback = _a.getProgressUpdateCallback, onSingleSuccess = _a.onSingleSuccess, onSingleFailure = _a.onSingleFailure;\n setUploading(true);\n var tasks = [];\n fileUploads.forEach(function (fileUpload) {\n tasks.push(validateParseTemplate(fileUpload.file).pipe((0,first/* first */.P)(), (0,concatMap/* concatMap */.b)(function (template) {\n try {\n dispatch(ReduxStore_dashboardConfigCreateTemplateIntent(template));\n var cardLevel = smallestFeatureLevel(template.cards);\n if (cardLevel <= Settings_service/* FeatureLevel.BETA */.Lu.BETA) {\n onSingleSuccess(fileUpload.file.name, react.createElement(Text/* Text */.x, { component: "p", style: { color: \'var(--pf-global--warning-color--200)\' } }, "Warning: To see this template in the template picker, make sure the Cryostat Feature Level is set to BETA."));\n }\n else {\n onSingleSuccess(fileUpload.file.name);\n }\n return (0,of.of)(template);\n }\n catch (err) {\n // template name already taken from previous upload\n onSingleFailure(fileUpload.file.name, new Error(t(\'LayoutTemplateUploadModal.ERROR.DUPLICATE_UPLOAD\', { name: template.name })));\n return (0,of.of)(null);\n }\n }), (0,catchError/* catchError */.K)(function (err) {\n onSingleFailure(fileUpload.file.name, err);\n return (0,of.of)(null);\n })));\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks)\n .pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([null]))\n .subscribe(function (oks) {\n setUploading(false);\n setAllOks(oks.every(function (o) { return o !== null; }));\n var validLayouts = oks.filter(function (o) { return o !== null; });\n if (validLayouts.length > 0) {\n setSelectedTemplate({\n template: validLayouts[0],\n category: \'User-submitted\',\n });\n }\n }));\n }, [addSubscription, dispatch, t, validateParseTemplate, setUploading, setSelectedTemplate, setAllOks]);\n var handleSubmit = react.useCallback(function () {\n submitRef.current && submitRef.current.click();\n }, []);\n var onFilesChange = react.useCallback(function (fileUploads) {\n setAllOks(!fileUploads.some(function (f) { return !f.progress || f.progress.progressVariant !== \'success\'; }));\n setNumOfFiles(fileUploads.length);\n }, [setNumOfFiles, setAllOks]);\n var submitButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: t(\'SUBMITTING\', { ns: \'common\' }),\n spinnerAriaLabel: \'submitting-layout-templates\',\n isLoading: uploading,\n });\n }, [t, uploading]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: props.visible, variant: Modal/* ModalVariant.large */.v.large, showClose: true, onClose: handleClose, title: t(\'LayoutTemplateUploadModal.TITLE\'), description: t("LayoutTemplateUploadModal.DESCRIPTION"), help: react.createElement(Popover/* Popover */.J, { headerContent: react.createElement("div", null, t(\'WHATS_THIS\', { ns: \'common\' })), bodyContent: react.createElement("div", null, t("LayoutTemplateUploadModal.HELP.CONTENT")), appendTo: utils/* portalRoot */.tO },\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", "aria-label": t(\'HELP\', { ns: \'common\' }) },\n react.createElement(help_icon/* HelpIcon */.by, null))) },\n react.createElement(Form/* Form */.l, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: "JSON File", isRequired: true, fieldId: "file" },\n react.createElement(MultiFileUpload, { submitRef: submitRef, abortRef: abortRef, uploading: uploading, dropZoneAccepts: [\'application/json\'], displayAccepts: [\'JSON\'], onFileSubmit: onFileSubmit, onFilesChange: onFilesChange })),\n react.createElement(ActionGroup/* ActionGroup */.W, null, allOks && numOfFiles ? (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClose }, t(\'CLOSE\', { ns: \'common\' }))) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, LayoutTemplateUploadModal_assign({ variant: "primary", onClick: handleSubmit, isDisabled: !numOfFiles || uploading }, submitButtonLoadingProps), t(\'SUBMIT\', { ns: \'common\' })),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, t(\'CANCEL\', { ns: \'common\' }))))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/DashboardLayoutToolbar.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DefaultSelectedTemplate = {\n template: BlankLayout,\n category: \'Suggested\',\n};\nvar DashboardLayoutToolbar = function (_props) {\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var t = (0,es/* useTranslation */.$G)().t;\n var dashboardConfigs = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs; });\n var _a = react.useState({\n template: BlankLayout,\n category: \'Suggested\',\n }), selectedTemplate = _a[0], setSelectedTemplate = _a[1];\n var _b = react.useState(false), isUploadModalOpen = _b[0], setIsUploadModalOpen = _b[1];\n // layout selector\n var _c = react.useState(false), isSelectorOpen = _c[0], setIsSelectorOpen = _c[1];\n // create new / rename layout modal\n var _d = react.useState(false), isCreateModalOpen = _d[0], setIsCreateModalOpen = _d[1];\n var _f = react.useState(undefined), oldName = _f[0], setOldName = _f[1];\n // create new layout dropdown\n var _g = react.useState(false), isCreateDropdownOpen = _g[0], setIsCreateDropdownOpen = _g[1];\n // delete layout\n var _h = react.useState(false), isDeleteWarningModalOpen = _h[0], setIsDeleteWarningModalOpen = _h[1];\n var _j = react.useState(\'\'), selectDelete = _j[0], setSelectDelete = _j[1];\n // toolbar kebab\n var _k = react.useState(false), isKebabOpen = _k[0], setIsKebabOpen = _k[1];\n var _l = react.useState(false), isTemplateModalOpen = _l[0], setIsTemplateModalOpen = _l[1];\n var _m = react.useState(false), isDownloadModal = _m[0], setIsDownloadModal = _m[1];\n var deleteRef = react.useRef(null);\n var currLayout = react.useMemo(function () { return dashboardConfigs.layouts[dashboardConfigs.current]; }, [dashboardConfigs]);\n var handleUploadModalOpen = react.useCallback(function (_ev) {\n setIsUploadModalOpen(true);\n }, [setIsUploadModalOpen]);\n var handleUploadModalClose = react.useCallback(function () {\n setIsUploadModalOpen(false);\n }, [setIsUploadModalOpen]);\n var handleCreateModalOpen = react.useCallback(function (_ev) {\n setOldName(undefined);\n setIsCreateModalOpen(true);\n setIsSelectorOpen(false);\n setSelectedTemplate(DefaultSelectedTemplate);\n }, [setOldName, setIsCreateModalOpen, setIsSelectorOpen]);\n var handleCreateModalClose = react.useCallback(function () {\n setIsCreateModalOpen(false);\n setSelectedTemplate(DefaultSelectedTemplate);\n }, [setIsCreateModalOpen, setSelectedTemplate]);\n var handleDeleteWarningModalOpen = react.useCallback(function (_ev, layout) {\n setSelectDelete(layout);\n setIsDeleteWarningModalOpen(true);\n }, [setSelectDelete, setIsDeleteWarningModalOpen]);\n var handleDeleteWarningModalClose = react.useCallback(function () {\n setIsDeleteWarningModalOpen(false);\n setSelectDelete(\'\');\n }, [setIsDeleteWarningModalOpen]);\n var handleDeleteLayout = react.useCallback(function () {\n dispatch(ReduxStore_dashboardConfigDeleteLayoutIntent(selectDelete));\n dispatch(ReduxStore_dashboardConfigReplaceLayoutIntent(DEFAULT_DASHBOARD_NAME));\n setSelectDelete(\'\');\n }, [dispatch, setSelectDelete, selectDelete]);\n var handleDeleteButton = react.useCallback(function (ev, layout) {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteDashboardLayout */.gF.DeleteDashboardLayout)) {\n handleDeleteWarningModalOpen(ev, layout);\n }\n else {\n dispatch(ReduxStore_dashboardConfigDeleteLayoutIntent(layout));\n dispatch(ReduxStore_dashboardConfigReplaceLayoutIntent(DEFAULT_DASHBOARD_NAME));\n }\n if (deleteRef.current)\n deleteRef.current.blur();\n }, [context.settings, dispatch, handleDeleteWarningModalOpen]);\n var handleRenameLayout = react.useCallback(function (oldName) {\n setOldName(oldName);\n setIsCreateModalOpen(true);\n }, [setOldName, setIsCreateModalOpen]);\n var handleFavoriteLayout = react.useCallback(function (layoutName) {\n dispatch(ReduxStore_dashboardConfigFavoriteLayoutIntent(layoutName));\n }, [dispatch]);\n var onFocus = react.useCallback(function () {\n var element = document.getElementById(\'dashboard-layout-dropdown-toggle\');\n if (element)\n element.focus();\n }, []);\n var onLayoutSelect = react.useCallback(function (_ev, itemId) {\n var found = dashboardConfigs.layouts.find(function (l) { return l.name === itemId; });\n if (found) {\n dispatch(ReduxStore_dashboardConfigReplaceLayoutIntent(found.name));\n }\n else {\n console.error(\'layout not found \' + itemId);\n }\n setIsSelectorOpen(false);\n onFocus();\n }, [dispatch, setIsSelectorOpen, onFocus, dashboardConfigs]);\n var onActionClick = react.useCallback(function (ev, itemId, actionId) {\n ev.stopPropagation(); // prevent the dropdown from closing\n if (actionId === \'rename\') {\n handleRenameLayout(itemId);\n }\n else if (actionId === \'delete\') {\n handleDeleteButton(ev, itemId);\n }\n else if (actionId === \'fav\') {\n handleFavoriteLayout(itemId);\n }\n }, [handleRenameLayout, handleDeleteButton, handleFavoriteLayout]);\n var onToggle = react.useCallback(function (_ev) {\n setIsSelectorOpen(function (open) { return !open; });\n }, [setIsSelectorOpen]);\n var onCreateDropdownSelect = react.useCallback(function () {\n setIsCreateDropdownOpen(false);\n }, [setIsCreateDropdownOpen]);\n var createBlankLayout = react.useCallback(function () {\n var name = getUniqueIncrementingName(\'Custom\', dashboardConfigs.layouts.map(function (l) { return l.name; }));\n var template = {\n name: name,\n cards: [],\n favorite: false,\n };\n dispatch(ReduxStore_dashboardConfigCreateLayoutIntent(template));\n dispatch(ReduxStore_dashboardConfigReplaceLayoutIntent(name));\n setIsCreateDropdownOpen(false);\n }, [dispatch, dashboardConfigs, setIsCreateDropdownOpen]);\n var createTemplateDropdownItems = react.useMemo(function () { return [\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "action", onClick: createBlankLayout, autoFocus: true, icon: react.createElement(file_icon/* FileIcon */.aA, null) }, "Blank Layout"),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "template", onClick: handleCreateModalOpen, icon: react.createElement(pficon_template_icon/* PficonTemplateIcon */.p3, null) }, "Choose Template"),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "upload", onClick: handleUploadModalOpen, icon: react.createElement(upload_icon/* UploadIcon */.rG, null) }, "Upload Template"),\n ]; }, [createBlankLayout, handleCreateModalOpen, handleUploadModalOpen]);\n var createTemplateButton = react.useMemo(function () { return (react.createElement(Dropdown/* Dropdown */.L, { onSelect: onCreateDropdownSelect, toggle: react.createElement(DropdownToggle/* DropdownToggle */.Z, { id: "dashboard-layout-create-dropdown-toggle", splitButtonItems: [\n react.createElement(DropdownToggleAction/* DropdownToggleAction */.k, { key: "action", onClick: function (_e) {\n createBlankLayout();\n setIsSelectorOpen(false);\n } },\n react.createElement("span", { style: { display: \'flex\', alignItems: \'center\' } },\n react.createElement(plus_circle_icon/* PlusCircleIcon */.wl, { style: { marginRight: \'var(--pf-global--spacer--sm)\' } }),\n t(\'DashboardLayoutToolbar.NEW_LAYOUT\'))),\n ], toggleVariant: "primary", splitButtonVariant: "action", onToggle: function (open) { return setIsCreateDropdownOpen(open); } }), isOpen: isCreateDropdownOpen, dropdownItems: createTemplateDropdownItems })); }, [\n t,\n createBlankLayout,\n setIsSelectorOpen,\n onCreateDropdownSelect,\n setIsCreateDropdownOpen,\n isCreateDropdownOpen,\n createTemplateDropdownItems,\n ]);\n var renameButton = react.useMemo(function () { return (react.createElement(Button_Button/* Button */.zx, { key: "rename", variant: "plain", isAriaDisabled: currLayout.name === DEFAULT_DASHBOARD_NAME, "aria-label": t(\'DashboardLayoutToolbar.RENAME.LABEL\'), onClick: function () { return handleRenameLayout(currLayout.name); }, icon: react.createElement(pencil_alt_icon/* PencilAltIcon */.sC, null), "data-quickstart-id": "dashboard-rename-btn" })); }, [t, handleRenameLayout, currLayout.name]);\n var deleteButton = react.useMemo(function () { return (react.createElement(Button_Button/* Button */.zx, { ref: deleteRef, key: "delete", variant: "danger", isAriaDisabled: currLayout.name === DEFAULT_DASHBOARD_NAME, "aria-label": t(\'DashboardLayoutToolbar.DELETE.LABEL\'), onClick: function (ev) { return handleDeleteButton(ev, currLayout.name); }, icon: react.createElement(trash_icon/* TrashIcon */.XH, null), "data-quickstart-id": "dashboard-delete-btn" }, t(\'DELETE\', { ns: \'common\' }))); }, [t, handleDeleteButton, currLayout.name]);\n var dropdownItems = react.useMemo(function () {\n return (react.createElement(next.DropdownList, null,\n react.createElement(next.DropdownItem, { key: "template", itemId: \'template\' }, t(\'DashboardLayoutToolbar.SET_AS_TEMPLATE\')),\n react.createElement(next.DropdownItem, { key: "download", itemId: \'download\' }, t(\'DashboardLayoutToolbar.DOWNLOAD_AS_TEMPLATE\'))));\n }, [t]);\n var handleDownloadTemplateModalOpen = react.useCallback(function () {\n setIsDownloadModal(true);\n setIsTemplateModalOpen(true);\n }, [setIsDownloadModal, setIsTemplateModalOpen]);\n var handleSetAsTemplateModalOpen = react.useCallback(function () {\n setIsDownloadModal(false);\n setIsTemplateModalOpen(true);\n }, [setIsTemplateModalOpen]);\n var handleTemplateModalClose = react.useCallback(function () {\n setIsTemplateModalOpen(false);\n }, [setIsTemplateModalOpen]);\n var onKebabSelect = react.useCallback(function (_event, itemId) {\n switch (itemId) {\n case \'template\':\n handleSetAsTemplateModalOpen();\n break;\n case \'download\':\n handleDownloadTemplateModalOpen();\n break;\n default:\n console.error(\'unknown item id \' + itemId);\n }\n setIsKebabOpen(false);\n }, [handleSetAsTemplateModalOpen, handleDownloadTemplateModalOpen, setIsKebabOpen]);\n var kebabDropdown = react.useMemo(function () { return (react.createElement(next.Dropdown, { isOpen: isKebabOpen, onSelect: onKebabSelect, minWidth: "12em", onOpenChange: function (isOpen) {\n setIsKebabOpen(isOpen);\n }, toggle: function (toggleRef) { return (react.createElement(MenuToggle/* MenuToggle */.O, { ref: toggleRef, "aria-label": t(\'DashboardLayoutToolbar.MENU.LABEL\'), variant: "plain", onClick: function () { return setIsKebabOpen(!isKebabOpen); }, isExpanded: isKebabOpen, "data-quickstart-id": "layout-toolbar-kebab-btn" },\n react.createElement(ellipsis_v_icon/* EllipsisVIcon */.HJ, null))); } }, dropdownItems)); }, [t, onKebabSelect, setIsKebabOpen, isKebabOpen, dropdownItems]);\n var menuGroups = react.useCallback(function (label, favoriteGroup) {\n var layouts = dashboardConfigs.layouts.filter(favoriteGroup ? function (l) { return l.favorite; } : function () { return true; });\n if (layouts.length === 0) {\n return null;\n }\n return (react.createElement(MenuGroup/* MenuGroup */.k, { label: label, labelHeadingLevel: "h3" },\n react.createElement(MenuList/* MenuList */.q, null, layouts.map(function (l) { return (react.createElement(MenuItem/* MenuItem */.s, { key: l.name, itemId: l.name, isSelected: l.name === currLayout.name, isFavorited: l.favorite, actions: react.createElement(react.Fragment, null,\n react.createElement(MenuItemAction/* MenuItemAction */.U, { icon: react.createElement(pencil_alt_icon/* PencilAltIcon */.sC, null), actionId: "rename", isDisabled: l.name === DEFAULT_DASHBOARD_NAME, "aria-label": t(\'DashboardLayoutToolbar.RENAME.LABEL\') }),\n react.createElement(MenuItemAction/* MenuItemAction */.U, { icon: react.createElement(trash_icon/* TrashIcon */.XH, null), actionId: "delete", isDisabled: l.name === DEFAULT_DASHBOARD_NAME, "aria-label": t(\'DashboardLayoutToolbar.DELETE.LABEL\') })) }, l.name)); }))));\n }, [t, currLayout.name, dashboardConfigs.layouts]);\n var onOpenChange = react.useCallback(function (_isOpen) {\n if (isDeleteWarningModalOpen || isCreateModalOpen || isUploadModalOpen) {\n return;\n }\n setIsSelectorOpen(_isOpen);\n }, [setIsSelectorOpen, isDeleteWarningModalOpen, isCreateModalOpen, isUploadModalOpen]);\n var menuDropdown = react.useMemo(function () {\n return (react.createElement(next.Dropdown, { isOpen: isSelectorOpen, onOpenChange: onOpenChange, toggle: function (toggleRef) { return (react.createElement(MenuToggle/* MenuToggle */.O, { ref: toggleRef, id: "dashboard-layout-dropdown-toggle", onClick: onToggle, "data-quickstart-id": "dashboard-layout-selector" }, currLayout.name)); } },\n react.createElement(Menu/* Menu */.v, { "aria-label": t(\'DashboardLayoutToolbar.MENU.LABEL\'), isScrollable: true, onSelect: onLayoutSelect, onActionClick: onActionClick },\n react.createElement(MenuContent/* MenuContent */.D, { maxMenuHeight: "21.5em", id: "dashboard-layout-menu-content" },\n menuGroups(t(\'DashboardLayoutToolbar.MENU.FAVORITES\'), true),\n react.createElement(Divider/* Divider */.i, null),\n menuGroups(t(\'DashboardLayoutToolbar.MENU.OTHERS\'), false)),\n react.createElement(Divider/* Divider */.i, null),\n react.createElement(MenuFooter/* MenuFooter */.d, null, createTemplateButton))));\n }, [\n t,\n onLayoutSelect,\n onActionClick,\n onOpenChange,\n onToggle,\n menuGroups,\n createTemplateButton,\n isSelectorOpen,\n currLayout.name,\n ]);\n var toolbarContent = react.useMemo(function () {\n return (react.createElement(ToolbarContent/* ToolbarContent */.c, { style: { paddingLeft: \'24px\' } },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(AddCard, { variant: "icon-button" })),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, null,\n react.createElement(ToolbarItem/* ToolbarItem */.E, { spacer: { default: \'spacerNone\' } }, menuDropdown),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null, renameButton)),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null, deleteButton),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null, kebabDropdown))));\n }, [menuDropdown, renameButton, deleteButton, kebabDropdown]);\n var deleteWarningModal = react.useMemo(function () {\n return (react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteDashboardLayout */.gF.DeleteDashboardLayout, visible: isDeleteWarningModalOpen, onClose: handleDeleteWarningModalClose, onAccept: handleDeleteLayout }));\n }, [isDeleteWarningModalOpen, handleDeleteWarningModalClose, handleDeleteLayout]);\n return (react.createElement(LayoutTemplateContext.Provider, { value: {\n selectedTemplate: selectedTemplate,\n setSelectedTemplate: setSelectedTemplate,\n isUploadModalOpen: isUploadModalOpen,\n setIsUploadModalOpen: setIsUploadModalOpen,\n } },\n react.createElement(Toolbar/* Toolbar */.o, null,\n toolbarContent,\n react.createElement(DashboardLayoutCreateModal, { visible: isCreateModalOpen, onClose: handleCreateModalClose, oldName: oldName }),\n react.createElement(LayoutTemplateUploadModal, { visible: isUploadModalOpen, onClose: handleUploadModalClose }),\n react.createElement(DashboardLayoutSetAsTemplateModal, { visible: isTemplateModalOpen, onClose: handleTemplateModalClose, downloadModal: isDownloadModal }),\n deleteWarningModal)));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStatePrimary.js\nvar EmptyStatePrimary = __webpack_require__(1417);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/wrench-icon.js\nvar wrench_icon = __webpack_require__(5913);\n;// CONCATENATED MODULE: ./src/app/Dashboard/ErrorCard.tsx\nvar ErrorCard_assign = (undefined && undefined.__assign) || function () {\n ErrorCard_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ErrorCard_assign.apply(this, arguments);\n};\nvar ErrorCard_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n// TODO: Fix title + design body\nvar ErrorCard = function (_a) {\n var validationResult = _a.validationResult, _cardConfig = _a.cardConfig, dashboardId = _a.dashboardId, actions = _a.actions, props = ErrorCard_rest(_a, ["validationResult", "cardConfig", "dashboardId", "actions"]);\n var t = (0,es/* useTranslation */.$G)().t;\n var errors = validationResult.errors, callForAction = validationResult.callForAction;\n var errorDescription = react.useMemo(function () {\n return (react.createElement(DataList/* DataList */.FR, { isCompact: true, "aria-label": \'Card Configuration Errors\', className: \'configuration-error-list\' }, errors.map(function (err, idx) {\n return (react.createElement(DataListItem/* DataListItem */.L, { key: "error-messageitem-".concat(idx) },\n react.createElement(DataListItemRow/* DataListItemRow */.V, null,\n react.createElement(DataListItemCells/* DataListItemCells */.p, { dataListCells: [react.createElement(DataListCell/* DataListCell */.K, { key: "error-message-cell-".concat(idx) }, err.message)] }))));\n })));\n }, [errors]);\n return (react.createElement(DashboardCard, ErrorCard_assign({}, props, { id: "".concat(dashboardId), dashboardId: dashboardId, cardSizes: ErrorCardSizes, isCompact: true, cardHeader: actions }),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.full */.I.full },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: wrench_icon/* WrenchIcon */.R0 }),\n react.createElement(Title/* Title */.D, { headingLevel: \'h4\' }, t(\'Dashboard.INVALID_CARD_CONFIGURATIONS\')),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, errorDescription),\n callForAction ? react.createElement(EmptyStatePrimary/* EmptyStatePrimary */.V, null, callForAction) : null)))));\n};\nvar ErrorCardSizes = {\n span: {\n minimum: 2,\n default: 4,\n maximum: 12,\n },\n height: {\n // TODO: implement height resizing\n minimum: Number.NaN,\n default: Number.NaN,\n maximum: Number.NaN,\n },\n};\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/Dashboard.tsx\nvar Dashboard_assign = (undefined && undefined.__assign) || function () {\n Dashboard_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Dashboard_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dashboard = function (_) {\n var history = (0,react_router/* useHistory */.k6)();\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var t = (0,es/* useTranslation */.$G)().t;\n var dashboardConfigs = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs; });\n var jfrChartController = react.useRef(new JFRMetricsChartController(serviceContext.api, serviceContext.target, serviceContext.notificationChannel, serviceContext.settings));\n var mbeanChartController = react.useRef(new MBeanMetricsChartController(serviceContext.api, serviceContext.target, serviceContext.settings));\n var currLayout = react.useMemo(function () {\n return dashboardConfigs.layouts[dashboardConfigs.current];\n }, [dashboardConfigs]);\n react.useEffect(function () {\n var layouts = (0,LocalStorage/* getFromLocalStorage */.fp)(\'DASHBOARD_CFG\', {});\n if (layouts._version === undefined) {\n dispatch(ReduxStore_dashboardConfigFirstRunIntent());\n }\n }, [dispatch]);\n var chartContext = react.useMemo(function () {\n return {\n jfrController: jfrChartController.current,\n mbeanController: mbeanChartController.current,\n };\n }, [jfrChartController, mbeanChartController]);\n react.useEffect(function () {\n var jfrController = jfrChartController.current;\n var mbeanController = mbeanChartController.current;\n return function () {\n jfrController._tearDown();\n mbeanController._tearDown();\n };\n }, []);\n var handleRemove = react.useCallback(function (idx) {\n dispatch(ReduxStore_dashboardConfigDeleteCardIntent(idx));\n }, [dispatch]);\n var handleResetSize = react.useCallback(function (idx) {\n var defaultSpan = getCardDescriptorByName(currLayout.cards[idx].name).cardSizes.span.default;\n if (defaultSpan === currLayout.cards[idx].span) {\n return;\n }\n dispatch(ReduxStore_dashboardConfigResizeCardIntent(idx, defaultSpan));\n }, [dispatch, currLayout]);\n var emptyLayout = react.useMemo(function () { return !currLayout.cards || !currLayout.cards.length; }, [currLayout.cards]);\n return (react.createElement(TargetView, { pageTitle: t(\'Dashboard.PAGE_TITLE\'), attachments: react.createElement(DashboardLayoutToolbar, null) },\n react.createElement(ChartContext.Provider, { value: chartContext, "data-full-height": true }, emptyLayout ? (react.createElement(AddCard, { variant: "card" })) : (react.createElement(Grid/* Grid */.r, { id: \'dashboard-grid\', hasGutter: true }, currLayout.cards.map(function (cfg, idx) {\n var result = validateCardConfig(cfg, idx);\n var invalid = result.errors && result.errors.length;\n var content = invalid ? (react.createElement(ErrorCard, { validationResult: result, cardConfig: cfg, dashboardId: idx, actions: [], span: cfg.span })) : (react.createElement(getCardDescriptorByName(cfg.name).component, Dashboard_assign(Dashboard_assign({ span: cfg.span }, cfg.props), { dashboardId: idx, actions: [\n react.createElement(DashboardCardActionMenu, { key: "".concat(cfg.name, "-actions"), onRemove: function () { return handleRemove(idx); }, onResetSize: function () { return handleResetSize(idx); }, onView: function () { return history.push("/d-solo?layout=".concat(currLayout.name, "&cardId=").concat(cfg.id)); } }),\n ] })));\n // Always show invalid cards\n var featureLevel = invalid ? Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION : getCardDescriptorByName(cfg.name).featureLevel;\n return (react.createElement(FeatureFlag, { level: featureLevel, key: "".concat(cfg.id, "-wrapper") },\n react.createElement(GridItem/* GridItem */.P, { span: cfg.span, key: cfg.id, order: { default: idx.toString() } }, content)));\n })))),\n react.createElement(react.Fragment, null)));\n};\n/* harmony default export */ const Dashboard_Dashboard = (Dashboard);\n\n;// CONCATENATED MODULE: ./src/app/Dashboard/DashboardSolo.tsx\nvar DashboardSolo_assign = (undefined && undefined.__assign) || function () {\n DashboardSolo_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return DashboardSolo_assign.apply(this, arguments);\n};\nvar DashboardSolo_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nvar DashboardSolo = function (_a) {\n var _props = DashboardSolo_rest(_a, []);\n var search = (0,react_router/* useLocation */.TH)().search;\n var history = (0,react_router/* useHistory */.k6)();\n var dashboardConfigs = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.dashboardConfigs; });\n var layout = react.useMemo(function () {\n return new URLSearchParams(search).get(\'layout\');\n }, [search]);\n var cardConfigs = react.useMemo(function () {\n var _a;\n return ((_a = dashboardConfigs.layouts.find(function (l) { return l.name === layout; })) !== null && _a !== void 0 ? _a : dashboardConfigs.layouts[dashboardConfigs.current])\n .cards;\n }, [dashboardConfigs, layout]);\n var cardConfig = react.useMemo(function () {\n var cardId = new URLSearchParams(search).get(\'cardId\');\n return cardConfigs.find(function (config) { return config.id === cardId; });\n }, [search, cardConfigs]);\n var content = react.useMemo(function () {\n if (!cardConfig) {\n return (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(EmptyState/* EmptyState */.u, { variant: "large" },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: monitoring_icon/* MonitoringIcon */.ml }),\n react.createElement(Title/* Title */.D, { headingLevel: "h3", size: "lg" }, "Dashboard card not found"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null,\n "Provide valid ",\n react.createElement("code", null, "layout"),\n " and ",\n react.createElement("code", null, "cardId"),\n " query parameters and try again."),\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: function () { return history.push(\'/\'); } }, "Back to Dashboard"))));\n }\n else {\n var id = cardConfig.id, name = cardConfig.name, span = cardConfig.span, props = cardConfig.props;\n return (\n // Use default chart controller\n react.createElement(TargetView, { pageTitle: cardConfig.id, breadcrumbs: [{ path: \'/\', title: \'Dashboard\' }] },\n react.createElement("div", { "data-full-height": true, style: { height: \'100%\' } }, react.createElement(getCardDescriptorByName(name).component, DashboardSolo_assign(DashboardSolo_assign({ span: span }, props), { isDraggable: false, isResizable: false, isFullHeight: true, dashboardId: id }))),\n react.createElement(react.Fragment, null)));\n }\n }, [cardConfig, history]);\n return content;\n};\n/* harmony default export */ const Dashboard_DashboardSolo = ((0,react_router/* withRouter */.EN)(DashboardSolo));\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/Table/TableTypes.js\nvar TableTypes = __webpack_require__(75863);\n;// CONCATENATED MODULE: ./src/app/Agent/AboutAgentCard.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar AboutAgentCard = function (_) {\n return (react.createElement(Card/* Card */.Z, null,\n react.createElement(CardTitle/* CardTitle */.l, null, "About the JMC Agent"),\n react.createElement(CardBody/* CardBody */.e, null, "The JMC Agent allows users to dynamically inject custom JFR events into running JVMs. In order to make use of the JMC Agent, the agent jar must be present in the same container as the target, and the target must be started with the agent (-javaagent:/path/to/agent.jar). Once these pre-requisites are met, the user can upload probe templates to Cryostat and insert them to the target, as well as view or remove currently active probes.")));\n};\n\n;// CONCATENATED MODULE: ./src/app/Agent/AgentLiveProbes.tsx\nvar AgentLiveProbes_assign = (undefined && undefined.__assign) || function () {\n AgentLiveProbes_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AgentLiveProbes_assign.apply(this, arguments);\n};\nvar AgentLiveProbes_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AgentLiveProbes_tableColumns = [\n {\n title: \'ID\',\n keyPaths: [\'id\'],\n sortable: true,\n },\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n },\n {\n title: \'Class\',\n keyPaths: [\'clazz\'],\n sortable: true,\n },\n {\n title: \'Description\',\n keyPaths: [\'description\'],\n sortable: true,\n },\n {\n title: \'Method\',\n keyPaths: [\'methodName\'],\n sortable: true,\n },\n];\nvar AgentLiveProbes = function (_) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState([]), probes = _a[0], setProbes = _a[1];\n var _b = react.useState([]), filteredProbes = _b[0], setFilteredProbes = _b[1];\n var _c = react.useState(\'\'), filterText = _c[0], setFilterText = _c[1];\n var _d = react.useState({}), sortBy = _d[0], setSortBy = _d[1];\n var _e = react.useState(false), isLoading = _e[0], setIsLoading = _e[1];\n var _f = react.useState(\'\'), errorMessage = _f[0], setErrorMessage = _f[1];\n var _g = react.useState(false), warningModalOpen = _g[0], setWarningModalOpen = _g[1];\n var _h = react.useState({ REMOVE: false }), actionLoadings = _h[0], setActionLoadings = _h[1];\n var getSortParams = react.useCallback(function (columnIndex) { return ({\n sortBy: sortBy,\n onSort: function (_event, index, direction) {\n setSortBy({\n index: index,\n direction: direction,\n });\n },\n columnIndex: columnIndex,\n }); }, [sortBy, setSortBy]);\n var handleProbes = react.useCallback(function (probes) {\n setProbes(probes);\n setErrorMessage(\'\');\n setIsLoading(false);\n }, [setProbes, setIsLoading, setErrorMessage]);\n var handleError = react.useCallback(function (error) {\n setErrorMessage(error.message);\n setIsLoading(false);\n }, [setIsLoading, setErrorMessage]);\n var refreshProbes = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api.getActiveProbes(true).subscribe({\n next: function (value) { return handleProbes(value); },\n error: function (err) { return handleError(err); },\n }));\n }, [addSubscription, context.api, setIsLoading, handleProbes, handleError]);\n var authRetry = react.useCallback(function () {\n context.target.setAuthRetry();\n }, [context.target]);\n var handleDeleteAllProbes = react.useCallback(function () {\n setActionLoadings(function (old) {\n return AgentLiveProbes_assign(AgentLiveProbes_assign({}, old), { REMOVE: true });\n });\n addSubscription(context.api.removeProbes().subscribe(function () {\n setActionLoadings(function (old) {\n return AgentLiveProbes_assign(AgentLiveProbes_assign({}, old), { REMOVE: false });\n });\n }));\n }, [addSubscription, context.api, setActionLoadings]);\n var handleWarningModalAccept = react.useCallback(function () { return handleDeleteAllProbes(); }, [handleDeleteAllProbes]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n }, [setWarningModalOpen]);\n var handleDeleteButton = react.useCallback(function () {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteActiveProbes */.gF.DeleteActiveProbes)) {\n setWarningModalOpen(true);\n }\n else {\n handleDeleteAllProbes();\n }\n }, [context.settings, setWarningModalOpen, handleDeleteAllProbes]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(function () {\n setFilterText(\'\');\n refreshProbes();\n }));\n }, [context, context.target, addSubscription, setFilterText, refreshProbes]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshProbes(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, refreshProbes]);\n react.useEffect(function () {\n addSubscription(context.target.authFailure().subscribe(function () {\n setErrorMessage(authFailMessage);\n }));\n }, [addSubscription, context.target, setErrorMessage]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n context.target.target(),\n context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ProbeTemplateApplied */.mN.ProbeTemplateApplied),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], e = _a[1];\n if (currentTarget.connectUrl != e.message.targetId) {\n return;\n }\n setProbes(function (old) {\n var probes = e.message.events;\n var probeIds = probes.map(function (p) { return p.id; });\n if ((probes === null || probes === void 0 ? void 0 : probes.length) > 0) {\n return AgentLiveProbes_spreadArray(AgentLiveProbes_spreadArray([], old.filter(function (probe) { return !probeIds.includes(probe.id); }), true), probes, true);\n }\n return old;\n });\n }));\n }, [addSubscription, context, context.notificationChannel, context.target, setProbes]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ProbesRemoved */.mN.ProbesRemoved).subscribe(function (_) { return setProbes([]); }));\n }, [addSubscription, context, context.notificationChannel, setProbes]);\n react.useEffect(function () {\n var _a, _b;\n var filtered;\n if (!filterText) {\n filtered = probes;\n }\n else {\n var ft_1 = filterText.trim().toLowerCase();\n filtered = probes.filter(function (t) {\n return t.name.toLowerCase().includes(ft_1) ||\n t.description.toLowerCase().includes(ft_1) ||\n t.clazz.toLowerCase().includes(ft_1) ||\n t.methodDescriptor.toLowerCase().includes(ft_1) ||\n t.methodName.toLowerCase().includes(ft_1);\n });\n }\n setFilteredProbes((0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, filtered, AgentLiveProbes_tableColumns));\n }, [filterText, probes, sortBy, setFilteredProbes]);\n var probeRows = react.useMemo(function () {\n return filteredProbes.map(function (t, index) { return (react.createElement(Tr.Tr, { key: "active-probe-".concat(index) },\n react.createElement(Td.Td, { key: "active-probe-id-".concat(index), dataLabel: AgentLiveProbes_tableColumns[0].title }, t.id),\n react.createElement(Td.Td, { key: "active-probe-name-".concat(index), dataLabel: AgentLiveProbes_tableColumns[1].title }, t.name),\n react.createElement(Td.Td, { key: "active-probe-clazz-".concat(index), dataLabel: AgentLiveProbes_tableColumns[2].title }, t.clazz),\n react.createElement(Td.Td, { key: "active-probe-description-".concat(index), dataLabel: AgentLiveProbes_tableColumns[3].title }, t.description),\n react.createElement(Td.Td, { key: "active-probe-methodname-".concat(index), dataLabel: AgentLiveProbes_tableColumns[4].title }, t.methodName))); });\n }, [filteredProbes]);\n var actionLoadingProps = react.useMemo(function () { return ({\n REMOVE: {\n spinnerAriaValueText: \'Removing\',\n spinnerAriaLabel: \'removing-all-probes\',\n isLoading: actionLoadings[\'REMOVE\'],\n },\n }); }, [actionLoadings]);\n if (errorMessage != \'\') {\n return (react.createElement(ErrorView, { title: \'Error retrieving active probes\', message: "".concat(errorMessage, ". Note: This error is generally caused when the agent is not loaded or is not active. Check that the target was started with the agent (-javaagent:/path/to/agent.jar)."), retry: isAuthFail(errorMessage) ? authRetry : undefined }));\n }\n else if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else {\n return (react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true, style: { marginTop: \'1em\' } },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(AboutAgentCard, null)),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "active-probes-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(TextInput/* TextInput */.oi, { name: "activeProbeFilter", id: "activeProbeFilter", type: "search", placeholder: "Filter...", "aria-label": "Active probe filter", onChange: setFilterText }))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, AgentLiveProbes_assign({ key: "delete", variant: "danger", onClick: handleDeleteButton, isDisabled: !filteredProbes.length || actionLoadings[\'REMOVE\'] }, actionLoadingProps[\'REMOVE\']),\n actionLoadings[\'REMOVE\'] ? \'Removing\' : \'Remove\',\n " All Probes")))),\n react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteActiveProbes */.gF.DeleteActiveProbes, visible: warningModalOpen, onAccept: handleWarningModalAccept, onClose: handleWarningModalClose })),\n probeRows.length ? (react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "Active Probe Table", variant: TableTypes/* TableVariant.compact */.B.compact },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null, AgentLiveProbes_tableColumns.map(function (_a, index) {\n var title = _a.title, sortable = _a.sortable;\n return (react.createElement(Th.Th, { key: "active-probe-header-".concat(title), sort: sortable ? getSortParams(index) : undefined }, title));\n }))),\n react.createElement(Tbody/* Tbody */.p, null, probeRows))) : (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Active Probes")))))));\n }\n};\n\n;// CONCATENATED MODULE: ./src/app/Agent/AgentProbeTemplates.tsx\nvar AgentProbeTemplates_assign = (undefined && undefined.__assign) || function () {\n AgentProbeTemplates_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AgentProbeTemplates_assign.apply(this, arguments);\n};\nvar AgentProbeTemplates_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar AgentProbeTemplates_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AgentProbeTemplates_tableColumns = [\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n },\n {\n title: \'XML\',\n keyPaths: [\'xml\'],\n sortable: true,\n },\n];\nvar AgentProbeTemplates = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState([]), templates = _a[0], setTemplates = _a[1];\n var _b = react.useState([]), filteredTemplates = _b[0], setFilteredTemplates = _b[1];\n var _c = react.useState(\'\'), filterText = _c[0], setFilterText = _c[1];\n var _d = react.useState(false), uploadModalOpen = _d[0], setUploadModalOpen = _d[1];\n var _e = react.useState({}), sortBy = _e[0], setSortBy = _e[1];\n var _f = react.useState(false), isLoading = _f[0], setIsLoading = _f[1];\n var _g = react.useState(\'\'), errorMessage = _g[0], setErrorMessage = _g[1];\n var _h = react.useState(undefined), templateToDelete = _h[0], setTemplateToDelete = _h[1];\n var _j = react.useState(false), warningModalOpen = _j[0], setWarningModalOpen = _j[1];\n var getSortParams = react.useCallback(function (columnIndex) { return ({\n sortBy: sortBy,\n onSort: function (_event, index, direction) {\n setSortBy({\n index: index,\n direction: direction,\n });\n },\n columnIndex: columnIndex,\n }); }, [sortBy, setSortBy]);\n var handleTemplates = react.useCallback(function (templates) {\n setTemplates(templates);\n setIsLoading(false);\n setErrorMessage(\'\');\n }, [setTemplates, setIsLoading, setErrorMessage]);\n var handleError = react.useCallback(function (error) {\n setIsLoading(false);\n setErrorMessage(error.message);\n }, [setIsLoading, setErrorMessage]);\n var refreshTemplates = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api.getProbeTemplates().subscribe({\n next: function (value) { return handleTemplates(value); },\n error: function (err) { return handleError(err); },\n }));\n }, [addSubscription, context.api, setIsLoading, handleTemplates, handleError]);\n var handleDelete = react.useCallback(function (template) {\n addSubscription(context.api.deleteCustomProbeTemplate(template.name).subscribe(function () {\n /** Do nothing. Notifications hook will handle */\n }));\n }, [addSubscription, context.api]);\n var handleWarningModalAccept = react.useCallback(function () {\n if (templateToDelete) {\n handleDelete(templateToDelete);\n }\n else {\n console.error(\'No template to delete\');\n }\n }, [handleDelete, templateToDelete]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n }, [setWarningModalOpen]);\n var handleTemplateUpload = react.useCallback(function () {\n setUploadModalOpen(true);\n }, [setUploadModalOpen]);\n var handleUploadModalClose = react.useCallback(function () {\n setUploadModalOpen(false);\n }, [setUploadModalOpen]);\n react.useEffect(function () {\n refreshTemplates();\n }, [refreshTemplates]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshTemplates(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, refreshTemplates]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ProbeTemplateUploaded */.mN.ProbeTemplateUploaded).subscribe(function (event) {\n setTemplates(function (old) {\n return AgentProbeTemplates_spreadArray(AgentProbeTemplates_spreadArray([], old, true), [\n {\n name: event.message.templateName,\n xml: event.message.templateContent,\n },\n ], false);\n });\n }));\n }, [addSubscription, context.notificationChannel, setTemplates]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ProbeTemplateDeleted */.mN.ProbeTemplateDeleted).subscribe(function (event) {\n setTemplates(function (old) { return old.filter(function (t) { return t.name !== event.message.probeTemplate; }); });\n }));\n }, [addSubscription, context.notificationChannel, setTemplates]);\n react.useEffect(function () {\n var _a, _b;\n var filtered;\n if (!filterText) {\n filtered = templates;\n }\n else {\n var ft_1 = filterText.trim().toLowerCase();\n filtered = templates.filter(function (t) { return t.name.toLowerCase().includes(ft_1) || t.xml.toLowerCase().includes(ft_1); });\n }\n setFilteredTemplates((0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, filtered, AgentProbeTemplates_tableColumns));\n }, [filterText, templates, sortBy, setFilteredTemplates]);\n var handleDeleteAction = react.useCallback(function (template) {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteEventTemplates */.gF.DeleteEventTemplates)) {\n setTemplateToDelete(template);\n setWarningModalOpen(true);\n }\n else {\n handleDelete(template);\n }\n }, [context.settings, setWarningModalOpen, setTemplateToDelete, handleDelete]);\n var handleInsertAction = react.useCallback(function (template) {\n addSubscription(context.api\n .insertProbes(template.name)\n .pipe((0,first/* first */.P)())\n .subscribe(function () { return undefined; }));\n }, [addSubscription, context.api]);\n var templateRows = react.useMemo(function () {\n return filteredTemplates.map(function (t, index) {\n return (react.createElement(Tr.Tr, { key: "probe-template-".concat(index) },\n react.createElement(Td.Td, { key: "probe-template-name-".concat(index), dataLabel: AgentProbeTemplates_tableColumns[0].title }, t.name),\n react.createElement(Td.Td, { key: "probe-template-xml-".concat(index), dataLabel: AgentProbeTemplates_tableColumns[1].title }, t.xml),\n react.createElement(Td.Td, { key: "probe-template-action-".concat(index), isActionCell: true, style: { paddingRight: \'0\' } },\n react.createElement(AgentTemplateAction, { template: t, onDelete: handleDeleteAction, onInsert: props.agentDetected ? handleInsertAction : undefined }))));\n });\n }, [filteredTemplates, props.agentDetected, handleInsertAction, handleDeleteAction]);\n if (errorMessage != \'\') {\n return (react.createElement(ErrorView, { title: \'Error retrieving probe templates\', message: "".concat(errorMessage, ". Note: This error is generally caused when the agent is not loaded or is not active. Check that the target was started with the agent (-javaagent:/path/to/agent.jar).") }));\n }\n else if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else {\n return (react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true, style: { marginTop: \'1em\', marginBottom: \'1.5em\' } },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(AboutAgentCard, null)),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "probe-templates-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(TextInput/* TextInput */.oi, { name: "templateFilter", id: "templateFilter", type: "search", placeholder: "Filter...", "aria-label": "Probe template filter", onChange: setFilterText, value: filterText }))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { key: "upload", variant: "secondary", "aria-label": "Upload", onClick: handleTemplateUpload },\n react.createElement(upload_icon/* UploadIcon */.rG, null)))),\n react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteProbeTemplates */.gF.DeleteProbeTemplates, visible: warningModalOpen, onAccept: handleWarningModalAccept, onClose: handleWarningModalClose }))),\n templateRows.length ? (react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "Probe Templates Table", variant: TableTypes/* TableVariant.compact */.B.compact },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null, AgentProbeTemplates_tableColumns.map(function (_a, index) {\n var title = _a.title, sortable = _a.sortable;\n return (react.createElement(Th.Th, { key: "probe-template-header-".concat(title), sort: sortable ? getSortParams(index) : undefined }, title));\n }))),\n react.createElement.apply(react_namespaceObject, AgentProbeTemplates_spreadArray([Tbody/* Tbody */.p, null], templateRows, false)))) : (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Probe Templates"))),\n react.createElement(AgentProbeTemplateUploadModal, { isOpen: uploadModalOpen, onClose: handleUploadModalClose })))));\n }\n};\nvar AgentProbeTemplateUploadModal = function (_a) {\n var onClose = _a.onClose, props = AgentProbeTemplates_rest(_a, ["onClose"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var submitRef = react.useRef(null); // Use ref to refer to submit trigger div\n var abortRef = react.useRef(null); // Use ref to refer to abort trigger div\n var _b = react.useState(0), numOfFiles = _b[0], setNumOfFiles = _b[1];\n var _c = react.useState(false), allOks = _c[0], setAllOks = _c[1];\n var _d = react.useState(false), uploading = _d[0], setUploading = _d[1];\n var reset = react.useCallback(function () {\n setNumOfFiles(0);\n setUploading(false);\n }, [setNumOfFiles, setUploading]);\n var handleClose = react.useCallback(function () {\n if (uploading) {\n abortRef.current && abortRef.current.click();\n }\n else {\n reset();\n onClose();\n }\n }, [uploading, abortRef, reset, onClose]);\n var onFileSubmit = react.useCallback(function (fileUploads, _a) {\n var getProgressUpdateCallback = _a.getProgressUpdateCallback, onSingleSuccess = _a.onSingleSuccess, onSingleFailure = _a.onSingleFailure;\n setUploading(true);\n var tasks = [];\n fileUploads.forEach(function (fileUpload) {\n tasks.push(context.api\n .addCustomProbeTemplate(fileUpload.file, getProgressUpdateCallback(fileUpload.file.name), fileUpload.abortSignal)\n .pipe((0,tap/* tap */.b)({\n next: function (_) {\n onSingleSuccess(fileUpload.file.name);\n },\n error: function (err) {\n onSingleFailure(fileUpload.file.name, err);\n },\n }), (0,catchError/* catchError */.K)(function (_) { return (0,of.of)(false); })));\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks)\n .pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([true]))\n .subscribe(function (oks) {\n setUploading(false);\n setAllOks(oks.reduce(function (prev, curr, _) { return prev && curr; }, true));\n }));\n }, [addSubscription, context.api, setAllOks, setUploading]);\n var handleSubmit = react.useCallback(function () {\n submitRef.current && submitRef.current.click();\n }, [submitRef]);\n var onFilesChange = react.useCallback(function (fileUploads) {\n setAllOks(!fileUploads.some(function (f) { return !f.progress || f.progress.progressVariant !== \'success\'; }));\n setNumOfFiles(fileUploads.length);\n }, [setNumOfFiles, setAllOks]);\n var submitButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Submitting\',\n spinnerAriaLabel: \'submitting-probe-template\',\n isLoading: uploading,\n });\n }, [uploading]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: props.isOpen, variant: Modal/* ModalVariant.large */.v.large, showClose: true, onClose: handleClose, title: "Create Custom Probe Template", description: "Create a customized probe template. This is a specialized XML file typically created using JDK Mission Control, which defines a set of events to inject and their options to configure." },\n react.createElement(Form/* Form */.l, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: "Template XML", isRequired: true, fieldId: "template" },\n react.createElement(MultiFileUpload, { submitRef: submitRef, abortRef: abortRef, uploading: uploading, displayAccepts: [\'XML\'], onFileSubmit: onFileSubmit, onFilesChange: onFilesChange })),\n react.createElement(ActionGroup/* ActionGroup */.W, null, allOks && numOfFiles ? (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClose }, "Close")) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, AgentProbeTemplates_assign({ variant: "primary", onClick: handleSubmit, isDisabled: !numOfFiles || uploading }, submitButtonLoadingProps), "Submit"),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, "Cancel")))))));\n};\nvar AgentTemplateAction = function (_a) {\n var onInsert = _a.onInsert, onDelete = _a.onDelete, props = AgentProbeTemplates_rest(_a, ["onInsert", "onDelete"]);\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var actionItems = react.useMemo(function () {\n return [\n {\n key: \'insert-template\',\n title: \'Insert Probes...\',\n onClick: function () { return onInsert && onInsert(props.template); },\n isDisabled: !onInsert,\n },\n {\n key: \'delete-template\',\n title: \'Delete\',\n onClick: function () { return onDelete(props.template); },\n },\n ];\n }, [onInsert, onDelete, props.template]);\n return (react.createElement(Dropdown/* Dropdown */.L, { isPlain: true, isOpen: isOpen, toggle: react.createElement(KebabToggle/* KebabToggle */.a, { id: "probe-template-toggle-kebab", onToggle: setIsOpen }), menuAppendTo: document.body, position: dropdownConstants/* DropdownPosition.right */.ir.right, isFlipEnabled: true, dropdownItems: actionItems.map(function (action) { return (react.createElement(DropdownItem/* DropdownItem */.h, { key: action.key, onClick: function () {\n setIsOpen(false);\n action.onClick();\n }, isDisabled: action.isDisabled }, action.title)); }) }));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-table/dist/esm/components/Table/ActionsColumn.js + 10 modules\nvar ActionsColumn = __webpack_require__(52914);\n;// CONCATENATED MODULE: ./src/app/Events/EventTemplates.tsx\nvar EventTemplates_assign = (undefined && undefined.__assign) || function () {\n EventTemplates_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return EventTemplates_assign.apply(this, arguments);\n};\nvar EventTemplates_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventTemplates_tableColumns = [\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n },\n {\n title: \'Description\',\n keyPaths: [\'description\'],\n sortable: true,\n },\n {\n title: \'Provider\',\n keyPaths: [\'provider\'],\n sortable: true,\n },\n {\n title: \'Type\',\n keyPaths: [\'type\'],\n sortable: true,\n },\n];\nvar EventTemplates = function (_) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var history = (0,react_router/* useHistory */.k6)();\n var _a = react.useState([]), templates = _a[0], setTemplates = _a[1];\n var _b = react.useState([]), filteredTemplates = _b[0], setFilteredTemplates = _b[1];\n var _c = react.useState(\'\'), filterText = _c[0], setFilterText = _c[1];\n var _d = react.useState(false), warningModalOpen = _d[0], setWarningModalOpen = _d[1];\n var _e = react.useState(false), uploadModalOpen = _e[0], setUploadModalOpen = _e[1];\n var _f = react.useState({}), sortBy = _f[0], setSortBy = _f[1];\n var _g = react.useState(false), isLoading = _g[0], setIsLoading = _g[1];\n var _h = react.useState(\'\'), errorMessage = _h[0], setErrorMessage = _h[1];\n var _j = react.useState(undefined), templateToDelete = _j[0], setTemplateToDelete = _j[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var getSortParams = react.useCallback(function (columnIndex) { return ({\n sortBy: sortBy,\n onSort: function (_event, index, direction) {\n setSortBy({\n index: index,\n direction: direction,\n });\n },\n columnIndex: columnIndex,\n }); }, [sortBy, setSortBy]);\n react.useEffect(function () {\n var _a, _b;\n var filtered;\n if (!filterText) {\n filtered = templates;\n }\n else {\n var ft_1 = filterText.trim().toLowerCase();\n filtered = templates.filter(function (t) {\n return t.name.toLowerCase().includes(ft_1) ||\n t.description.toLowerCase().includes(ft_1) ||\n t.provider.toLowerCase().includes(ft_1);\n });\n }\n setFilteredTemplates((0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, filtered, EventTemplates_tableColumns));\n }, [filterText, templates, sortBy]);\n var handleTemplates = react.useCallback(function (templates) {\n setTemplates(templates);\n setIsLoading(false);\n setErrorMessage(\'\');\n }, [setTemplates, setIsLoading, setErrorMessage]);\n var handleError = react.useCallback(function (error) {\n setIsLoading(false);\n setErrorMessage(error.message);\n }, [setIsLoading, setErrorMessage]);\n var refreshTemplates = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.target\n .target()\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,first/* first */.P)(), (0,concatMap/* concatMap */.b)(function (target) {\n return context.api.doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/templates"));\n }))\n .subscribe({\n next: handleTemplates,\n error: handleError,\n }));\n }, [addSubscription, context.api, context.target, setIsLoading, handleTemplates, handleError]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(function () {\n setFilterText(\'\');\n refreshTemplates();\n }));\n }, [context.target, addSubscription, refreshTemplates]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.TemplateUploaded */.mN.TemplateUploaded)\n .subscribe(function (v) { return setTemplates(function (old) { return old.concat(v.message.template); }); }));\n }, [addSubscription, context, context.notificationChannel, setTemplates]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.TemplateDeleted */.mN.TemplateDeleted)\n .subscribe(function (v) {\n return setTemplates(function (old) {\n return old.filter(function (o) { return o.name != v.message.template.name || o.type != v.message.template.type; });\n });\n }));\n }, [addSubscription, context, context.notificationChannel, setTemplates]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshTemplates(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, refreshTemplates]);\n react.useEffect(function () {\n addSubscription(context.target.authFailure().subscribe(function () {\n setErrorMessage(authFailMessage);\n }));\n }, [addSubscription, context.target, setErrorMessage]);\n var handleDelete = react.useCallback(function (t) {\n addSubscription(context.api\n .deleteCustomEventTemplate(t.name)\n .pipe((0,first/* first */.P)())\n .subscribe(function () { return undefined; } /* do nothing - notification will handle updating state */));\n }, [addSubscription, context.api]);\n var handleDeleteButton = react.useCallback(function (t) {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteEventTemplates */.gF.DeleteEventTemplates)) {\n setTemplateToDelete(t);\n setWarningModalOpen(true);\n }\n else {\n handleDelete(t);\n }\n }, [context.settings, setWarningModalOpen, setTemplateToDelete, handleDelete]);\n var actionsResolver = react.useCallback(function (t) {\n var actions = [\n {\n title: \'Create Recording...\',\n onClick: function () {\n return history.push({\n pathname: \'/recordings/create\',\n state: { templateName: t.name, templateType: t.type },\n });\n },\n },\n ];\n if (t.name !== \'ALL\' || t.type !== \'TARGET\') {\n actions = actions.concat([\n {\n title: \'Download\',\n onClick: function () { return context.api.downloadTemplate(t); },\n },\n ]);\n }\n if (t.type === \'CUSTOM\') {\n actions = actions.concat([\n {\n isSeparator: true,\n },\n {\n title: \'Delete\',\n onClick: function () { return handleDeleteButton(t); },\n },\n ]);\n }\n return actions;\n }, [context.api, history, handleDeleteButton]);\n var handleUploadModalClose = react.useCallback(function () {\n setUploadModalOpen(false);\n }, [setUploadModalOpen]);\n var handleUploadModalOpen = react.useCallback(function () {\n setUploadModalOpen(true);\n }, [setUploadModalOpen]);\n var templateRows = react.useMemo(function () {\n return filteredTemplates.map(function (t, index) { return (react.createElement(Tr.Tr, { key: "event-template-".concat(index) },\n react.createElement(Td.Td, { key: "event-template-name-".concat(index), dataLabel: EventTemplates_tableColumns[0].title }, t.name),\n react.createElement(Td.Td, { key: "event-template-description-".concat(index), dataLabel: EventTemplates_tableColumns[1].title }, t.description),\n react.createElement(Td.Td, { key: "event-template-provider-".concat(index), dataLabel: EventTemplates_tableColumns[2].title }, t.provider),\n react.createElement(Td.Td, { key: "event-template-type-".concat(index), dataLabel: EventTemplates_tableColumns[3].title }, t.type.charAt(0).toUpperCase() + t.type.slice(1).toLowerCase()),\n react.createElement(Td.Td, { key: "event-template-action-".concat(index), isActionCell: true, style: { paddingRight: \'0\' } },\n react.createElement(ActionsColumn/* ActionsColumn */.k, { items: actionsResolver(t) })))); });\n }, [actionsResolver, filteredTemplates]);\n var handleWarningModalAccept = react.useCallback(function () {\n if (templateToDelete) {\n handleDelete(templateToDelete);\n }\n else {\n console.error(\'No template to delete\');\n }\n }, [handleDelete, templateToDelete]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n }, [setWarningModalOpen]);\n var authRetry = react.useCallback(function () {\n context.target.setAuthRetry();\n }, [context.target]);\n if (errorMessage != \'\') {\n return (react.createElement(ErrorView, { title: \'Error retrieving event templates\', message: errorMessage, retry: isAuthFail(errorMessage) ? authRetry : undefined }));\n }\n else if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else {\n return (react.createElement(react.Fragment, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "event-templates-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "filter-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(TextInput/* TextInput */.oi, { name: "templateFilter", id: "templateFilter", type: "search", placeholder: "Filter...", "aria-label": "Event template filter", onChange: setFilterText, value: filterText, isDisabled: errorMessage != \'\' }))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { key: "upload", "aria-label": "Upload", variant: "secondary", onClick: handleUploadModalOpen, isDisabled: errorMessage != \'\' },\n react.createElement(upload_icon/* UploadIcon */.rG, null)))),\n react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteEventTemplates */.gF.DeleteEventTemplates, visible: warningModalOpen, onAccept: handleWarningModalAccept, onClose: handleWarningModalClose }))),\n templateRows.length ? (react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "Event Templates Table", variant: TableTypes/* TableVariant.compact */.B.compact },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null, EventTemplates_tableColumns.map(function (_a, index) {\n var title = _a.title, sortable = _a.sortable;\n return (react.createElement(Th.Th, { key: "event-template-header-".concat(title), sort: sortable ? getSortParams(index) : undefined }, title));\n }))),\n react.createElement(Tbody/* Tbody */.p, null, templateRows))) : (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Event Templates"))),\n react.createElement(EventTemplatesUploadModal, { isOpen: uploadModalOpen, onClose: handleUploadModalClose })));\n }\n};\nvar EventTemplatesUploadModal = function (_a) {\n var onClose = _a.onClose, props = EventTemplates_rest(_a, ["onClose"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var submitRef = react.useRef(null); // Use ref to refer to submit trigger div\n var abortRef = react.useRef(null); // Use ref to refer to abort trigger div\n var _b = react.useState(0), numOfFiles = _b[0], setNumOfFiles = _b[1];\n var _c = react.useState(false), allOks = _c[0], setAllOks = _c[1];\n var _d = react.useState(false), uploading = _d[0], setUploading = _d[1];\n var reset = react.useCallback(function () {\n setNumOfFiles(0);\n setUploading(false);\n }, [setNumOfFiles, setUploading]);\n var handleClose = react.useCallback(function () {\n if (uploading) {\n abortRef.current && abortRef.current.click();\n }\n else {\n reset();\n onClose();\n }\n }, [uploading, abortRef, reset, onClose]);\n var onFileSubmit = react.useCallback(function (fileUploads, _a) {\n var getProgressUpdateCallback = _a.getProgressUpdateCallback, onSingleSuccess = _a.onSingleSuccess, onSingleFailure = _a.onSingleFailure;\n setUploading(true);\n var tasks = [];\n fileUploads.forEach(function (fileUpload) {\n tasks.push(context.api\n .addCustomEventTemplate(fileUpload.file, getProgressUpdateCallback(fileUpload.file.name), fileUpload.abortSignal)\n .pipe((0,tap/* tap */.b)({\n next: function (_) {\n onSingleSuccess(fileUpload.file.name);\n },\n error: function (err) {\n onSingleFailure(fileUpload.file.name, err);\n },\n }), (0,catchError/* catchError */.K)(function (_) { return (0,of.of)(false); })));\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks)\n .pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([true]))\n .subscribe(function (oks) {\n setUploading(false);\n setAllOks(oks.reduce(function (prev, curr, _) { return prev && curr; }, true));\n }));\n }, [addSubscription, context.api, setUploading, setAllOks]);\n var handleSubmit = react.useCallback(function () {\n submitRef.current && submitRef.current.click();\n }, [submitRef]);\n var onFilesChange = react.useCallback(function (fileUploads) {\n setAllOks(!fileUploads.some(function (f) { return !f.progress || f.progress.progressVariant !== \'success\'; }));\n setNumOfFiles(fileUploads.length);\n }, [setNumOfFiles, setAllOks]);\n var submitButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Submitting\',\n spinnerAriaLabel: \'submitting-custom-event-template\',\n isLoading: uploading,\n });\n }, [uploading]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: props.isOpen, variant: Modal/* ModalVariant.large */.v.large, showClose: true, onClose: handleClose, title: "Create Custom Event Template", description: "Create a customized event template. This is a specialized XML file with the extension .jfc, typically created using JDK Mission Control, which defines a set of events and their options to configure. Not all customized templates are applicable to all targets -- a template may specify a custom application event type, which is only available in targets running the associated application." },\n react.createElement(Form/* Form */.l, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: "Template XML", isRequired: true, fieldId: "template" },\n react.createElement(MultiFileUpload, { submitRef: submitRef, abortRef: abortRef, uploading: uploading, displayAccepts: [\'XML\', \'JFC\'], onFileSubmit: onFileSubmit, onFilesChange: onFilesChange })),\n react.createElement(ActionGroup/* ActionGroup */.W, null, allOks && numOfFiles ? (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClose }, "Close")) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, EventTemplates_assign({ variant: "primary", onClick: handleSubmit, isDisabled: !numOfFiles || uploading }, submitButtonLoadingProps), uploading ? \'Submitting\' : \'Submit\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, "Cancel")))))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Pagination/Pagination.js + 6 modules\nvar Pagination = __webpack_require__(38305);\n;// CONCATENATED MODULE: ./src/app/Events/EventTypes.tsx\nvar EventTypes_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\nvar getCategoryString = function (eventType) {\n return eventType.category.join(\', \').trim();\n};\nvar includesSubstr = function (a, b) { return !!a && !!b && a.toLowerCase().includes(b.trim().toLowerCase()); };\nvar EventTypes_tableColumns = [\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n },\n {\n title: \'Type ID\',\n keyPaths: [\'typeId\'],\n sortable: true,\n },\n {\n title: \'Description\',\n keyPaths: [\'description\'],\n sortable: true,\n },\n {\n title: \'Categories\',\n keyPaths: [\'category\'],\n sortable: true,\n },\n];\nvar EventTypes = function (_) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var prevPerPage = react.useRef(10);\n var _a = react.useState([]), types = _a[0], setTypes = _a[1];\n var _b = react.useState(1), currentPage = _b[0], setCurrentPage = _b[1];\n var _c = react.useState(10), perPage = _c[0], setPerPage = _c[1];\n var _d = react.useState([]), openRows = _d[0], setOpenRows = _d[1];\n var _e = react.useState(\'\'), filterText = _e[0], setFilterText = _e[1];\n var _f = react.useState(false), isLoading = _f[0], setIsLoading = _f[1];\n var _g = react.useState(\'\'), errorMessage = _g[0], setErrorMessage = _g[1];\n var _h = (0,useSort/* useSort */.Z)(), sortBy = _h[0], getSortParams = _h[1];\n var handleTypes = react.useCallback(function (types) {\n setTypes(types);\n setIsLoading(false);\n setErrorMessage(\'\');\n }, [setTypes, setIsLoading, setErrorMessage]);\n var handleError = react.useCallback(function (error) {\n setIsLoading(false);\n setErrorMessage(error.message);\n }, [setIsLoading, setErrorMessage]);\n var refreshEvents = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.target\n .target()\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,first/* first */.P)(), (0,concatMap/* concatMap */.b)(function (target) {\n return context.api.doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/events"));\n }))\n .subscribe({\n next: handleTypes,\n error: handleError,\n }));\n }, [addSubscription, context.target, context.api, handleTypes, handleError]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(function () {\n setFilterText(\'\');\n refreshEvents();\n }));\n }, [addSubscription, context, context.target, refreshEvents]);\n react.useEffect(function () {\n addSubscription(context.target.authFailure().subscribe(function () { return setErrorMessage(authFailMessage); }));\n }, [addSubscription, context.target]);\n var filterTypesByText = react.useMemo(function () {\n var _a, _b;\n var withFilters = function (t) {\n return filterText === \'\' ||\n includesSubstr(t.name, filterText) ||\n includesSubstr(t.typeId, filterText) ||\n includesSubstr(t.description, filterText) ||\n includesSubstr(getCategoryString(t), filterText);\n };\n return (0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, types.filter(withFilters), EventTypes_tableColumns);\n }, [types, filterText, sortBy]);\n var displayedTypeRowData = react.useMemo(function () {\n var offset = (currentPage - 1) * perPage;\n var visibleTypes = filterTypesByText.slice(offset, offset + perPage);\n var rows = [];\n visibleTypes.forEach(function (t) {\n var child = \'\';\n for (var opt in t.options) {\n child += "".concat(opt, "=[").concat(t.options[opt].defaultValue, "]\\t");\n }\n rows.push({\n eventType: t,\n cellContents: [t.name, t.typeId, t.description, getCategoryString(t)],\n isExpanded: openRows.some(function (id) { return id === (0,utils/* hashCode */.un)(t.typeId); }),\n children: react.createElement(Text/* Text */.x, null, child),\n });\n });\n return rows;\n }, [currentPage, perPage, filterTypesByText, openRows]);\n var onCurrentPage = react.useCallback(function (_, currentPage) {\n setCurrentPage(currentPage);\n }, [setCurrentPage]);\n var onPerPage = react.useCallback(function (_, perPage) {\n var offset = (currentPage - 1) * prevPerPage.current;\n prevPerPage.current = perPage;\n setPerPage(perPage);\n setCurrentPage(1 + Math.floor(offset / perPage));\n }, [currentPage, prevPerPage, setPerPage, setCurrentPage]);\n var onToggle = react.useCallback(function (t) {\n setOpenRows(function (old) {\n var typeId = (0,utils/* hashCode */.un)(t.typeId);\n if (old.some(function (id) { return id === typeId; })) {\n return old.filter(function (id) { return id !== typeId; });\n }\n return EventTypes_spreadArray(EventTypes_spreadArray([], old, true), [typeId], false);\n });\n }, [setOpenRows]);\n var onFilterTextChange = react.useCallback(function (filterText) {\n setFilterText(filterText);\n setCurrentPage(1);\n }, [setFilterText, setCurrentPage]);\n var authRetry = react.useCallback(function () {\n context.target.setAuthRetry();\n }, [context.target]);\n var typeRowPairs = react.useMemo(function () {\n return displayedTypeRowData.map(function (rowData, index) { return (react.createElement(Tbody/* Tbody */.p, { key: "event-type-row-pair-".concat(index), isExpanded: rowData.isExpanded },\n react.createElement(Tr.Tr, { key: "event-type-".concat(index) },\n react.createElement(Td.Td, { key: "event-type-expandable-".concat(index), expand: {\n rowIndex: index,\n isExpanded: rowData.isExpanded,\n expandId: "expandable-event-type-row-".concat(index),\n onToggle: function () { return onToggle(rowData.eventType); },\n } }),\n rowData.cellContents.map(function (content, idx) { return (react.createElement(Td.Td, { key: "event-type-".concat(EventTypes_tableColumns[idx].title, "-").concat(idx), dataLabel: EventTypes_tableColumns[idx].title }, content)); })),\n react.createElement(Tr.Tr, { key: "event-type-".concat(index, "-expandable-child"), isExpanded: rowData.isExpanded },\n react.createElement(Td.Td, { dataLabel: "event-details", colSpan: EventTypes_tableColumns.length },\n react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null, rowData.children))))); });\n }, [displayedTypeRowData, onToggle]);\n if (errorMessage != \'\') {\n return (react.createElement(ErrorView, { title: \'Error retrieving event types\', message: errorMessage, retry: isAuthFail(errorMessage) ? authRetry : undefined }));\n }\n else if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else {\n return (react.createElement(react.Fragment, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "event-types-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(TextInput/* TextInput */.oi, { name: "eventFilter", id: "eventFilter", type: "search", placeholder: "Filter...", "aria-label": "Event filter", onChange: onFilterTextChange, isDisabled: errorMessage != \'\' })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, { variant: ToolbarItem/* ToolbarItemVariant.pagination */.A.pagination },\n react.createElement(Pagination/* Pagination */.t, { itemCount: filterTypesByText.length, page: currentPage, perPage: perPage, onSetPage: onCurrentPage, widgetId: "event-types-pagination", onPerPageSelect: onPerPage })))),\n typeRowPairs.length ? (\n // TODO replace table with data list so collapsed event options can be custom formatted\n react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "Event Types Table", variant: TableTypes/* TableVariant.compact */.B.compact },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, null),\n EventTypes_tableColumns.map(function (_a, index) {\n var title = _a.title;\n return (react.createElement(Th.Th, { key: "event-type-header-".concat(title), sort: getSortParams(index) }, title));\n }))),\n typeRowPairs)) : (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Event Types")))));\n }\n};\n\n;// CONCATENATED MODULE: ./src/app/Events/Events.tsx\nvar Events_assign = (undefined && undefined.__assign) || function () {\n Events_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Events_assign.apply(this, arguments);\n};\nvar Events_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Events = function (_a) {\n var props = Events_rest(_a, []);\n return (react.createElement(TargetView, Events_assign({}, props, { pageTitle: "Events" }),\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(EventTabs, null)))),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(AgentTabs, null)))))));\n};\nvar EventTab;\n(function (EventTab) {\n EventTab["EVENT_TEMPLATE"] = "event-template";\n EventTab["EVENT_TYPE"] = "event-type";\n})(EventTab || (EventTab = {}));\nvar EventTabs = function () {\n var _a = (0,react_router/* useLocation */.TH)(), search = _a.search, pathname = _a.pathname;\n var history = (0,react_router/* useHistory */.k6)();\n var activeTab = react.useMemo(function () {\n return (0,utils/* getActiveTab */.fr)(search, \'eventTab\', Object.values(EventTab), EventTab.EVENT_TEMPLATE);\n }, [search]);\n var onTabSelect = react.useCallback(function (_, key) {\n return (0,utils/* switchTab */.MR)(history, pathname, search, { tabKey: \'eventTab\', tabValue: "".concat(key) });\n }, [history, pathname, search]);\n return (react.createElement(Tabs/* Tabs */.m, { activeKey: activeTab, onSelect: onTabSelect },\n react.createElement(Tab/* Tab */.O, { eventKey: EventTab.EVENT_TEMPLATE, title: "Event Templates" },\n react.createElement(EventTemplates, null)),\n react.createElement(Tab/* Tab */.O, { eventKey: EventTab.EVENT_TYPE, title: "Event Types" },\n react.createElement(EventTypes, null))));\n};\nvar AgentTab;\n(function (AgentTab) {\n AgentTab["AGENT_TEMPLATE"] = "agent-template";\n AgentTab["AGENT_PROBE"] = "agent-probe";\n})(AgentTab || (AgentTab = {}));\nvar AgentTabs = function () {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = (0,react_router/* useLocation */.TH)(), search = _a.search, pathname = _a.pathname;\n var history = (0,react_router/* useHistory */.k6)();\n var activeTab = react.useMemo(function () {\n return (0,utils/* getActiveTab */.fr)(search, \'agentTab\', Object.values(AgentTab), AgentTab.AGENT_TEMPLATE);\n }, [search]);\n var _b = react.useState(false), agentDetected = _b[0], setAgentDetected = _b[1];\n var onTabSelect = react.useCallback(function (_, key) {\n return (0,utils/* switchTab */.MR)(history, pathname, search, { tabKey: \'agentTab\', tabValue: "".concat(key) });\n }, [history, pathname, search]);\n react.useEffect(function () {\n addSubscription(context.target\n .target()\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,concatMap/* concatMap */.b)(function (_) { return context.api.isProbeEnabled(); }))\n .subscribe(setAgentDetected));\n }, [addSubscription, context.target, context.api, setAgentDetected]);\n return (react.createElement(Tabs/* Tabs */.m, { activeKey: activeTab, onSelect: onTabSelect },\n react.createElement(Tab/* Tab */.O, { eventKey: AgentTab.AGENT_TEMPLATE, title: "Probe Templates" },\n react.createElement(AgentProbeTemplates, { agentDetected: agentDetected })),\n react.createElement(Tab/* Tab */.O, { eventKey: AgentTab.AGENT_PROBE, title: "Live Configuration", isAriaDisabled: !agentDetected, tooltip: agentDetected ? undefined : (react.createElement(Tooltip/* Tooltip */.u, { content: "JMC ByteCode Instrumentation Agent not detected for the selected Target JVM" })) },\n react.createElement(AgentLiveProbes, null))));\n};\n/* harmony default export */ const Events_Events = (Events);\n\n;// CONCATENATED MODULE: ./src/i18n/i18nextUtil.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar localeReadable = function (locale) {\n return new Intl.DisplayNames([locale], { type: \'language\', languageDisplay: \'standard\' }).of(locale) || locale;\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/Language.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar Component = function () {\n var _a = (0,es/* useTranslation */.$G)(), t = _a[0], i18n = _a[1];\n var _b = react.useState(false), open = _b[0], setOpen = _b[1];\n var handleLanguageToggle = react.useCallback(function () { return setOpen(function (v) { return !v; }); }, [setOpen]);\n var handleLanguageSelect = react.useCallback(function (_, v) {\n i18n.changeLanguage(v);\n setOpen(false);\n }, [i18n, setOpen]);\n react.useEffect(function () {\n if (!i18nLanguages.includes(i18n.language)) {\n i18n.changeLanguage(\'en\');\n }\n }, [i18n, i18n.language]);\n return (react.createElement(Select/* Select */.P, { isOpen: open, "aria-label": t(\'SETTINGS.LANGUAGE.ARIA_LABELS.SELECT\') || \'\', onToggle: handleLanguageToggle, onSelect: handleLanguageSelect, selections: localeReadable(i18n.language), isFlipEnabled: true, menuAppendTo: "parent" }, Object.keys(i18nResources).map(function (l) { return (react.createElement(SelectOption/* SelectOption */.$, { key: l, value: l }, localeReadable(l))); })));\n};\nvar Language = {\n titleKey: \'SETTINGS.LANGUAGE.TITLE\',\n descConstruct: \'SETTINGS.LANGUAGE.DESCRIPTION\',\n content: Component,\n category: SettingsUtils/* SettingTab.GENERAL */.BM.GENERAL,\n orderInGroup: 1,\n featureLevel: Settings_service/* FeatureLevel.BETA */.Lu.BETA,\n};\n\n// EXTERNAL MODULE: ./src/app/Shared/Services/Login.service.tsx\nvar Login_service = __webpack_require__(63470);\n// EXTERNAL MODULE: ./node_modules/js-base64/base64.mjs\nvar base64 = __webpack_require__(52300);\n;// CONCATENATED MODULE: ./src/app/Login/BasicAuthForm.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar BasicAuthForm = function (_a) {\n var onSubmit = _a.onSubmit;\n var context = react.useContext(Services/* ServiceContext */.o);\n var _b = react.useState(\'\'), username = _b[0], setUsername = _b[1];\n var _c = react.useState(\'\'), password = _c[0], setPassword = _c[1];\n var _d = react.useState(true), rememberMe = _d[0], setRememberMe = _d[1];\n react.useEffect(function () {\n var sub = context.login\n .getToken()\n .pipe((0,map/* map */.U)(base64/* Base64.decode */.DS.decode))\n .subscribe(function (creds) {\n if (!creds.includes(\':\')) {\n setUsername(creds);\n return;\n }\n var parts = creds.split(\':\');\n setUsername(parts[0]);\n setPassword(parts[1]);\n });\n return function () { return sub.unsubscribe(); };\n }, [context, context.api, setUsername, setPassword]);\n var handleUserChange = react.useCallback(function (evt) {\n setUsername(evt);\n }, [setUsername]);\n var handlePasswordChange = react.useCallback(function (evt) {\n setPassword(evt);\n }, [setPassword]);\n var handleRememberMeToggle = react.useCallback(function (evt) {\n setRememberMe(evt);\n }, [setRememberMe]);\n var handleSubmit = react.useCallback(function (evt) {\n onSubmit(evt, "".concat(username, ":").concat(password), Login_service/* AuthMethod.BASIC */.Hi.BASIC, rememberMe);\n }, [onSubmit, username, password, rememberMe]);\n // FIXME Patternfly Form component onSubmit is not triggered by Enter keydown when the Form contains\n // multiple FormGroups. This key handler is a workaround to allow keyboard-driven use of the form\n var handleKeyDown = react.useCallback(function (evt) {\n if (evt.key === \'Enter\') {\n handleSubmit(evt);\n }\n }, [handleSubmit]);\n return (react.createElement(Form/* Form */.l, { onSubmit: handleSubmit },\n react.createElement(FormGroup/* FormGroup */.c, { label: "Username", isRequired: true, fieldId: "username", helperText: "Please provide your username" },\n react.createElement(TextInput/* TextInput */.oi, { isRequired: true, type: "text", id: "username", name: "username", "aria-describedby": "username-helper", value: username, onChange: handleUserChange, onKeyDown: handleKeyDown })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Password", isRequired: true, fieldId: "password", helperText: "Please provide your password" },\n react.createElement(TextInput/* TextInput */.oi, { isRequired: true, type: "password", id: "password", name: "password", "aria-describedby": "password-helper", value: password, onChange: handlePasswordChange, onKeyDown: handleKeyDown })),\n react.createElement(Checkbox/* Checkbox */.X, { id: "remember-me", label: "Remember Me", isChecked: rememberMe, onChange: handleRememberMeToggle }),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleSubmit }, "Login"))));\n};\nvar BasicAuthDescriptionText = function () {\n return react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, "The Cryostat server is configured with Basic authentication.");\n};\n\n;// CONCATENATED MODULE: ./src/app/Login/ConnectionError.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar ConnectionError = function () { return (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: exclamation_circle_icon/* ExclamationCircleIcon */.$O }),\n react.createElement(Title/* Title */.D, { size: "lg", headingLevel: "h4" }, "Unable to connect to the server"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "Check your connection and reload the page."))); };\n\n;// CONCATENATED MODULE: ./src/app/Login/NoopAuthForm.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar NoopAuthForm = function (_a) {\n var onSubmit = _a.onSubmit;\n react.useEffect(function () {\n var noopEvt = {\n preventDefault: function () { return undefined; },\n };\n onSubmit(noopEvt, \'\', Login_service/* AuthMethod.NONE */.Hi.NONE, false);\n }, [onSubmit]);\n return react.createElement(react.Fragment, null);\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/lock-icon.js\nvar lock_icon = __webpack_require__(99332);\n;// CONCATENATED MODULE: ./src/app/Login/OpenShiftPlaceholderAuthForm.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar OpenShiftPlaceholderAuthForm = function (_a) {\n var onSubmit = _a.onSubmit;\n var context = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var _b = react.useState(false), showPermissionDenied = _b[0], setShowPermissionDenied = _b[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([context.login.getSessionState(), notifications.problemsNotifications()]).subscribe(function (parts) {\n var sessionState = parts[0];\n var errors = parts[1];\n var missingCryostatPermissions = errors.find(function (error) { return error.title.includes(\'401\'); }) !== undefined;\n setShowPermissionDenied(sessionState === Login_service/* SessionState.NO_USER_SESSION */.sM.NO_USER_SESSION && missingCryostatPermissions);\n }));\n }, [addSubscription, notifications, context.login, setShowPermissionDenied]);\n var handleSubmit = react.useCallback(function (evt) {\n // Triggers a redirect to OpenShift Container Platform login page\n onSubmit(evt, \'anInvalidToken\', Login_service/* AuthMethod.BEARER */.Hi.BEARER, true);\n }, [onSubmit]);\n var permissionDenied = (react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { variant: "container", component: lock_icon/* LockIcon */.mB }),\n react.createElement(Title/* Title */.D, { size: "lg", headingLevel: "h4" }, "Access permissions required"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null,\n react.createElement(Text/* Text */.x, null, "To continue, add permissions to your current account or login with a\\n different account. For more information, see the User Authentication section of the "),\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: "https://github.com/cryostatio/cryostat-operator#user-authentication" }, "Cryostat Operator README.")),\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleSubmit }, "Retry Login")));\n return react.createElement(react.Fragment, null, showPermissionDenied && permissionDenied);\n};\nvar OpenShiftAuthDescriptionText = function () {\n return (react.createElement(Text/* Text */.x, { component: Text/* TextVariants.p */.q.p }, "The Cryostat server is configured to use OpenShift OAuth authentication."));\n};\n\n;// CONCATENATED MODULE: ./src/app/Login/Login.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Login = function (_) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var _a = react.useState(\'\'), authMethod = _a[0], setAuthMethod = _a[1];\n var handleSubmit = react.useCallback(function (evt, token, authMethod, rememberMe) {\n setAuthMethod(authMethod);\n addSubscription(context.login.checkAuth(token, authMethod, rememberMe).subscribe(function (authSuccess) {\n if (!authSuccess) {\n notifications.danger(\'Authentication Failure\', "".concat(authMethod, " authentication failed"));\n }\n }));\n evt.preventDefault();\n }, [addSubscription, context.login, notifications, setAuthMethod]);\n react.useEffect(function () {\n addSubscription(context.login.getAuthMethod().subscribe(setAuthMethod));\n }, [addSubscription, context.login, setAuthMethod]);\n var loginForm = react.useMemo(function () {\n switch (authMethod) {\n case Login_service/* AuthMethod.BASIC */.Hi.BASIC:\n return react.createElement(BasicAuthForm, { onSubmit: handleSubmit });\n case Login_service/* AuthMethod.BEARER */.Hi.BEARER:\n return react.createElement(OpenShiftPlaceholderAuthForm, { onSubmit: handleSubmit });\n case Login_service/* AuthMethod.NONE */.Hi.NONE:\n return react.createElement(NoopAuthForm, { onSubmit: handleSubmit });\n default:\n return react.createElement(ConnectionError, null);\n }\n }, [handleSubmit, authMethod]);\n var descriptionText = react.useMemo(function () {\n switch (authMethod) {\n case Login_service/* AuthMethod.BASIC */.Hi.BASIC:\n return react.createElement(BasicAuthDescriptionText, null);\n case Login_service/* AuthMethod.BEARER */.Hi.BEARER:\n return react.createElement(OpenShiftAuthDescriptionText, null);\n default:\n return react.createElement(Text/* Text */.x, null);\n }\n }, [authMethod]);\n return (react.createElement(PageSection/* PageSection */.NP, null,\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardHeader/* CardHeader */.O, null,\n react.createElement(CardTitle/* CardTitle */.l, null, "Login"),\n react.createElement(CardActions/* CardActions */.T, null,\n react.createElement(FeatureFlag, { level: Settings_service/* FeatureLevel.BETA */.Lu.BETA }, react.createElement(Language.content, null)))),\n react.createElement(CardBody/* CardBody */.e, null, loginForm),\n react.createElement(CardFooter/* CardFooter */.e, null, descriptionText))));\n};\n/* harmony default export */ const Login_Login = (Login);\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/map-marked-alt-icon.js\nvar map_marked_alt_icon = __webpack_require__(53049);\n;// CONCATENATED MODULE: ./src/app/NotFound/NotFoundCard.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar NotFoundCard = function (_a) {\n var title = _a.title, bodyText = _a.bodyText, linkText = _a.linkText, linkPath = _a.linkPath;\n return (react.createElement(react.Fragment, null,\n react.createElement(Card/* Card */.Z, { className: "pf-c-card-not-found" },\n react.createElement(CardTitle/* CardTitle */.l, null, title),\n react.createElement(CardBody/* CardBody */.e, null, bodyText),\n react.createElement(CardFooter/* CardFooter */.e, { className: "pf-c-card-not-found__footer" },\n react.createElement(react_router_dom.Link, { to: linkPath }, linkText)))));\n};\n\n;// CONCATENATED MODULE: ./src/app/NotFound/NotFound.tsx\nvar NotFound_assign = (undefined && undefined.__assign) || function () {\n NotFound_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return NotFound_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar NotFound = function (_) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState(Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION), activeLevel = _a[0], setActiveLevel = _a[1];\n react.useLayoutEffect(function () {\n addSubscription(context.settings.featureLevel().subscribe(function (featureLevel) { return setActiveLevel(featureLevel); }));\n }, [addSubscription, context.settings, setActiveLevel]);\n var cards = flatten(routes)\n .filter(function (route) { return !!route.description; })\n .filter(function (r) { return r.featureLevel === undefined || r.featureLevel >= activeLevel; })\n .sort(function (a, b) { return a.title.localeCompare(b.title); })\n .map(function (route) { return (react.createElement(NotFoundCard, { key: route.title, title: route.title, bodyText: route.description, linkText: "View ".concat(route.title.toLocaleLowerCase()), linkPath: route.path })); });\n return (react.createElement(react.Fragment, null,\n react.createElement(EmptyState/* EmptyState */.u, { className: "pf-c-empty-state-not-found" },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: map_marked_alt_icon/* MapMarkedAltIcon */.Nd }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "404: We couldn\'t find that page"),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null, "One of the following pages might have what you\'re looking for."),\n react.createElement(EmptyStateSecondaryActions/* EmptyStateSecondaryActions */.i, null, cards),\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", component: function (props) { return react.createElement(react_router_dom.Link, NotFound_assign({}, props, { to: "/" })); } }, "Take me home"))));\n};\n/* harmony default export */ const NotFound_NotFound = (NotFound);\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/quickstarts/dist/index.es.js + 2 modules\nvar index_es = __webpack_require__(62108);\n;// CONCATENATED MODULE: ./src/app/QuickStarts/QuickStartsCatalogPage.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar QuickStartsCatalogPage = function (_) {\n var t = (0,es/* useTranslation */.$G)().t;\n // TODO: Quick start categories (patternfly/quickstarts supports this through individual components)\n // e.g. Dashboard Quick Starts, Topology Quick Starts, Recording Quick Starts, etc.\n return (react.createElement(index_es/* QuickStartCatalogPage */.Gf, { title: t(\'QuickStarts.CATALOG_PAGE.TITLE\'), hint: t(\'QuickStarts.CATALOG_PAGE.HINT\'), showTitle: true, showFilter: true, sortFnc: function (a, b) { return a.metadata.order - b.metadata.order; } }));\n};\n/* harmony default export */ const QuickStarts_QuickStartsCatalogPage = ((0,react_router/* withRouter */.EN)(QuickStartsCatalogPage));\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Timestamp/Timestamp.js\nvar Timestamp = __webpack_require__(75066);\n;// CONCATENATED MODULE: ./src/app/Recordings/ActiveRecordingsTable.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar ActiveRecordingsTable_assign = (undefined && undefined.__assign) || function () {\n ActiveRecordingsTable_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ActiveRecordingsTable_assign.apply(this, arguments);\n};\nvar ActiveRecordingsTable_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PanelContent;\n(function (PanelContent) {\n PanelContent[PanelContent["LABELS"] = 0] = "LABELS";\n})(PanelContent || (PanelContent = {}));\nvar ActiveRecordingsTable_tableColumns = [\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n },\n {\n title: \'Start Time\',\n keyPaths: [\'startTime\'],\n sortable: true,\n },\n {\n title: \'Duration\',\n keyPaths: [\'duration\'],\n transform: function (duration, _rec) {\n if (duration === 0) {\n return Number.MAX_VALUE;\n }\n return duration;\n },\n sortable: true,\n },\n {\n title: \'State\',\n keyPaths: [\'state\'],\n sortable: true,\n },\n {\n title: \'Labels\',\n keyPaths: [\'metadata\', \'labels\'],\n },\n];\nvar ActiveRecordingsTable = function (props) {\n var _a;\n var context = react.useContext(Services/* ServiceContext */.o);\n var routerHistory = (0,react_router/* useHistory */.k6)();\n var url = (0,react_router/* useRouteMatch */.$B)().url;\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var dispatch = (0,react_redux_es/* useDispatch */.I0)();\n var _b = react.useState(\'\'), targetConnectURL = _b[0], setTargetConnectURL = _b[1];\n var _c = react.useState([]), recordings = _c[0], setRecordings = _c[1];\n var _d = react.useState([]), filteredRecordings = _d[0], setFilteredRecordings = _d[1];\n var _e = react.useState(false), headerChecked = _e[0], setHeaderChecked = _e[1];\n var _f = react.useState([]), checkedIndices = _f[0], setCheckedIndices = _f[1];\n var _g = react.useState([]), expandedRows = _g[0], setExpandedRows = _g[1];\n var _h = react.useState(false), showDetailsPanel = _h[0], setShowDetailsPanel = _h[1];\n var _j = react.useState(PanelContent.LABELS), panelContent = _j[0], setPanelContent = _j[1];\n var _k = react.useState(false), isLoading = _k[0], setIsLoading = _k[1];\n var _l = react.useState(\'\'), errorMessage = _l[0], setErrorMessage = _l[1];\n var _m = react.useState({\n ARCHIVE: false,\n DELETE: false,\n STOP: false,\n }), actionLoadings = _m[0], setActionLoadings = _m[1];\n var _o = (0,useSort/* useSort */.Z)(), sortBy = _o[0], getSortParams = _o[1];\n var targetRecordingFilters = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var filters = state.recordingFilters.list.filter(function (targetFilter) { return targetFilter.target === targetConnectURL; });\n return filters.length > 0 ? filters[0].active.filters : emptyActiveRecordingFilters;\n });\n var handleRowCheck = react.useCallback(function (checked, index) {\n if (checked) {\n setCheckedIndices(function (ci) { return ActiveRecordingsTable_spreadArray(ActiveRecordingsTable_spreadArray([], ci, true), [index], false); });\n }\n else {\n setHeaderChecked(false);\n setCheckedIndices(function (ci) { return ci.filter(function (v) { return v !== index; }); });\n }\n }, [setCheckedIndices, setHeaderChecked]);\n var handleHeaderCheck = react.useCallback(function (_, checked) {\n setHeaderChecked(checked);\n setCheckedIndices(checked ? filteredRecordings.map(function (r) { return r.id; }) : []);\n }, [setHeaderChecked, setCheckedIndices, filteredRecordings]);\n var handleCreateRecording = react.useCallback(function () {\n routerHistory.push("".concat(url, "/create"));\n }, [routerHistory, url]);\n var handleEditLabels = react.useCallback(function () {\n setShowDetailsPanel(true);\n setPanelContent(PanelContent.LABELS);\n }, [setShowDetailsPanel, setPanelContent]);\n var handleRecordings = react.useCallback(function (recordings) {\n setRecordings(recordings);\n setIsLoading(false);\n setErrorMessage(\'\');\n }, [setRecordings, setIsLoading, setErrorMessage]);\n var handleError = react.useCallback(function (error) {\n setIsLoading(false);\n setErrorMessage(error.message);\n setRecordings([]);\n }, [setIsLoading, setErrorMessage, setRecordings]);\n var refreshRecordingList = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.target\n .target()\n .pipe((0,filter/* filter */.h)(function (target) { return target !== Target_service/* NO_TARGET */.JE; }), (0,concatMap/* concatMap */.b)(function (target) {\n return context.api.doGet("targets/".concat(encodeURIComponent(target.connectUrl), "/recordings"));\n }), (0,first/* first */.P)())\n .subscribe({\n next: handleRecordings,\n error: handleError,\n }));\n }, [addSubscription, context.target, context.api, setIsLoading, handleRecordings, handleError]);\n react.useEffect(function () {\n addSubscription(context.target.target().subscribe(function (target) {\n setTargetConnectURL(target.connectUrl);\n dispatch(ReduxStore_recordingAddTargetIntent(target.connectUrl));\n refreshRecordingList();\n }));\n }, [addSubscription, context, context.target, refreshRecordingList, setTargetConnectURL, dispatch]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n context.target.target(),\n (0,merge/* merge */.T)(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingCreated */.mN.ActiveRecordingCreated), context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.SnapshotCreated */.mN.SnapshotCreated)),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) { return old.concat([event.message.recording]); });\n }));\n }, [addSubscription, context, context.notificationChannel, setRecordings]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n context.target.target(),\n (0,merge/* merge */.T)(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingDeleted */.mN.ActiveRecordingDeleted), context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.SnapshotDeleted */.mN.SnapshotDeleted)),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) { return old.filter(function (r) { return r.name !== event.message.recording.name; }); });\n setCheckedIndices(function (old) { return old.filter(function (idx) { return idx !== event.message.recording.id; }); });\n }));\n }, [addSubscription, context, context.notificationChannel, setRecordings, setCheckedIndices]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n context.target.target(),\n context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.ActiveRecordingStopped */.mN.ActiveRecordingStopped),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) {\n var updated = ActiveRecordingsTable_spreadArray([], old, true);\n for (var _i = 0, updated_1 = updated; _i < updated_1.length; _i++) {\n var r = updated_1[_i];\n if (r.name === event.message.recording.name) {\n r.state = Api_service/* RecordingState.STOPPED */.SR.STOPPED;\n }\n }\n return updated;\n });\n }));\n }, [addSubscription, context, context.notificationChannel, setRecordings]);\n react.useEffect(function () {\n addSubscription(context.target.authFailure().subscribe(function () {\n setErrorMessage(authFailMessage);\n setRecordings([]);\n }));\n }, [context, context.target, setErrorMessage, addSubscription, setRecordings]);\n react.useEffect(function () {\n addSubscription((0,combineLatest/* combineLatest */.a)([\n context.target.target(),\n context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.RecordingMetadataUpdated */.mN.RecordingMetadataUpdated),\n ]).subscribe(function (_a) {\n var currentTarget = _a[0], event = _a[1];\n if (currentTarget.connectUrl != event.message.target) {\n return;\n }\n setRecordings(function (old) {\n return old.map(function (o) {\n return o.name == event.message.recordingName ? ActiveRecordingsTable_assign(ActiveRecordingsTable_assign({}, o), { metadata: { labels: event.message.metadata.labels } }) : o;\n });\n });\n }));\n }, [addSubscription, context, context.notificationChannel, setRecordings]);\n react.useEffect(function () {\n var _a, _b;\n setFilteredRecordings((0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 0,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, filterRecordings(recordings, targetRecordingFilters), ActiveRecordingsTable_tableColumns));\n }, [sortBy, recordings, targetRecordingFilters, setFilteredRecordings]);\n react.useEffect(function () {\n setCheckedIndices(function (ci) {\n var filteredRecordingIdx = new Set(filteredRecordings.map(function (r) { return r.id; }));\n return ci.filter(function (idx) { return filteredRecordingIdx.has(idx); });\n });\n }, [filteredRecordings, setCheckedIndices]);\n react.useEffect(function () {\n setHeaderChecked(checkedIndices.length === filteredRecordings.length);\n }, [setHeaderChecked, checkedIndices, filteredRecordings.length]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshRecordingList(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [refreshRecordingList, context, context.settings]);\n var handlePostActions = react.useCallback(function (action) {\n setActionLoadings(function (old) {\n var newActionLoadings = ActiveRecordingsTable_assign({}, old);\n newActionLoadings[action] = false;\n return newActionLoadings;\n });\n }, [setActionLoadings]);\n var handleArchiveRecordings = react.useCallback(function () {\n setActionLoadings(function (old) { return (ActiveRecordingsTable_assign(ActiveRecordingsTable_assign({}, old), { ARCHIVE: true })); });\n var tasks = [];\n filteredRecordings.forEach(function (r) {\n if (checkedIndices.includes(r.id)) {\n handleRowCheck(false, r.id);\n tasks.push(context.api.archiveRecording(r.name).pipe((0,first/* first */.P)()));\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe({\n next: function () { return handlePostActions(\'ARCHIVE\'); },\n error: function () { return handlePostActions(\'ARCHIVE\'); },\n }));\n }, [\n filteredRecordings,\n checkedIndices,\n handleRowCheck,\n context.api,\n addSubscription,\n setActionLoadings,\n handlePostActions,\n ]);\n var handleStopRecordings = react.useCallback(function () {\n setActionLoadings(function (old) { return (ActiveRecordingsTable_assign(ActiveRecordingsTable_assign({}, old), { STOP: true })); });\n var tasks = [];\n filteredRecordings.forEach(function (r) {\n if (checkedIndices.includes(r.id)) {\n handleRowCheck(false, r.id);\n if (r.state === Api_service/* RecordingState.RUNNING */.SR.RUNNING || r.state === Api_service/* RecordingState.STARTING */.SR.STARTING) {\n tasks.push(context.api.stopRecording(r.name).pipe((0,first/* first */.P)()));\n }\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe({\n next: function () { return handlePostActions(\'STOP\'); },\n error: function () { return handlePostActions(\'STOP\'); },\n }));\n }, [\n filteredRecordings,\n checkedIndices,\n handleRowCheck,\n context.api,\n addSubscription,\n setActionLoadings,\n handlePostActions,\n ]);\n var handleDeleteRecordings = react.useCallback(function () {\n setActionLoadings(function (old) { return (ActiveRecordingsTable_assign(ActiveRecordingsTable_assign({}, old), { DELETE: true })); });\n var tasks = [];\n filteredRecordings.forEach(function (r) {\n if (checkedIndices.includes(r.id)) {\n context.reports.delete(r);\n tasks.push(context.api.deleteRecording(r.name).pipe((0,first/* first */.P)()));\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe({\n next: function () { return handlePostActions(\'DELETE\'); },\n error: function () { return handlePostActions(\'DELETE\'); },\n }));\n }, [\n filteredRecordings,\n checkedIndices,\n context.reports,\n context.api,\n addSubscription,\n setActionLoadings,\n handlePostActions,\n ]);\n var handleClearFilters = react.useCallback(function () {\n dispatch(ReduxStore_recordingDeleteAllFiltersIntent(targetConnectURL, false));\n }, [dispatch, targetConnectURL]);\n var updateFilters = react.useCallback(function (target, _a) {\n var filterValue = _a.filterValue, filterKey = _a.filterKey, _b = _a.deleted, deleted = _b === void 0 ? false : _b, deleteOptions = _a.deleteOptions;\n if (deleted) {\n if (deleteOptions && deleteOptions.all) {\n dispatch(ReduxStore_recordingDeleteCategoryFiltersIntent(target, filterKey, false));\n }\n else {\n dispatch(ReduxStore_recordingDeleteFilterIntent(target, filterKey, filterValue, false));\n }\n }\n else {\n dispatch(ReduxStore_recordingAddFilterIntent(target, filterKey, filterValue, false));\n }\n }, [dispatch]);\n var toggleExpanded = react.useCallback(function (id) {\n setExpandedRows(function (expandedRows) {\n var idx = expandedRows.indexOf(id);\n return idx >= 0\n ? ActiveRecordingsTable_spreadArray(ActiveRecordingsTable_spreadArray([], expandedRows.slice(0, idx), true), expandedRows.slice(idx + 1, expandedRows.length), true) : ActiveRecordingsTable_spreadArray(ActiveRecordingsTable_spreadArray([], expandedRows, true), [id], false);\n });\n }, [setExpandedRows]);\n var RecordingsToolbar = react.useMemo(function () { return (react.createElement(ActiveRecordingsToolbar, { target: targetConnectURL, checkedIndices: checkedIndices, targetRecordingFilters: targetRecordingFilters, recordings: recordings, filteredRecordings: filteredRecordings, updateFilters: updateFilters, handleClearFilters: handleClearFilters, archiveEnabled: props.archiveEnabled, handleCreateRecording: handleCreateRecording, handleArchiveRecordings: handleArchiveRecordings, handleEditLabels: handleEditLabels, handleStopRecordings: handleStopRecordings, handleDeleteRecordings: handleDeleteRecordings, actionLoadings: actionLoadings, toolbarBreakReference: props.toolbarBreakReference })); }, [\n targetConnectURL,\n checkedIndices,\n targetRecordingFilters,\n recordings,\n filteredRecordings,\n updateFilters,\n handleClearFilters,\n props.archiveEnabled,\n handleCreateRecording,\n handleArchiveRecordings,\n handleEditLabels,\n handleStopRecordings,\n handleDeleteRecordings,\n actionLoadings,\n props.toolbarBreakReference,\n ]);\n var LabelsPanel = react.useMemo(function () { return (react.createElement(RecordingLabelsPanel, { setShowPanel: setShowDetailsPanel, isTargetRecording: true, checkedIndices: checkedIndices })); }, [checkedIndices, setShowDetailsPanel]);\n var columnConfig = react.useMemo(function () { return ({\n columns: ActiveRecordingsTable_tableColumns,\n onSort: getSortParams,\n }); }, [getSortParams]);\n return (react.createElement(Drawer/* Drawer */.dy, { isExpanded: showDetailsPanel, isInline: true, id: \'active-recording-drawer\' },\n react.createElement(DrawerContent/* DrawerContent */.s, { panelContent: (_a = {}, _a[PanelContent.LABELS] = LabelsPanel, _a)[panelContent], className: "recordings-table-drawer-content" },\n react.createElement(DrawerContentBody/* DrawerContentBody */.s, { hasPadding: true },\n react.createElement(RecordingsTable, { tableTitle: "Active Flight Recordings", toolbar: RecordingsToolbar, tableColumns: columnConfig, isHeaderChecked: headerChecked, onHeaderCheck: handleHeaderCheck, isEmpty: !recordings.length, isEmptyFilterResult: !filteredRecordings.length, clearFilters: handleClearFilters, isLoading: isLoading, isNestedTable: false, errorMessage: errorMessage }, filteredRecordings.map(function (r) { return (react.createElement(ActiveRecordingRow, { key: r.name, recording: r, labelFilters: targetRecordingFilters.Label, index: r.id, currentSelectedTargetURL: targetConnectURL, expandedRows: expandedRows, checkedIndices: checkedIndices, toggleExpanded: toggleExpanded, handleRowCheck: handleRowCheck, updateFilters: updateFilters })); }))))));\n};\nvar ActiveRecordingsToolbar = function (props) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), warningModalOpen = _a[0], setWarningModalOpen = _a[1];\n var _b = react.useState(false), actionToggleOpen = _b[0], setActionToggleOpen = _b[1];\n var handleActionToggle = react.useCallback(function () { return setActionToggleOpen(function (old) { return !old; }); }, [setActionToggleOpen]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n }, [setWarningModalOpen]);\n var handleDeleteButton = react.useCallback(function () {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteActiveRecordings */.gF.DeleteActiveRecordings)) {\n setWarningModalOpen(true);\n }\n else {\n props.handleDeleteRecordings();\n }\n }, [context.settings, setWarningModalOpen, props]);\n var isStopDisabled = react.useMemo(function () {\n if (!props.checkedIndices.length || props.actionLoadings[\'STOP\']) {\n return true;\n }\n var filtered = props.filteredRecordings.filter(function (r) { return props.checkedIndices.includes(r.id); });\n var anyRunning = filtered.some(function (r) { return r.state === Api_service/* RecordingState.RUNNING */.SR.RUNNING || r.state == Api_service/* RecordingState.STARTING */.SR.STARTING; });\n return !anyRunning;\n }, [props.actionLoadings, props.checkedIndices, props.filteredRecordings]);\n var actionLoadingProps = react.useMemo(function () { return ({\n ARCHIVE: {\n spinnerAriaValueText: \'Archiving\',\n spinnerAriaLabel: \'archive-active-recording\',\n isLoading: props.actionLoadings[\'ARCHIVE\'],\n },\n STOP: {\n spinnerAriaValueText: \'Stopping\',\n spinnerAriaLabel: \'stop-active-recording\',\n isLoading: props.actionLoadings[\'STOP\'],\n },\n DELETE: {\n spinnerAriaValueText: \'Deleting\',\n spinnerAriaLabel: \'deleting-active-recording\',\n isLoading: props.actionLoadings[\'DELETE\'],\n },\n }); }, [props.actionLoadings]);\n var buttons = react.useMemo(function () {\n var arr = [\n {\n default: (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: props.handleCreateRecording, "data-quickstart-id": "recordings-create-btn" }, "Create")),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Create\', isShared: true, onClick: props.handleCreateRecording }, "Create")),\n key: \'Create\',\n },\n ];\n if (props.archiveEnabled) {\n arr.push({\n default: (react.createElement(Button_Button/* Button */.zx, ActiveRecordingsTable_assign({ variant: "secondary", onClick: props.handleArchiveRecordings, isDisabled: !props.checkedIndices.length || props.actionLoadings[\'ARCHIVE\'], "data-quickstart-id": "recordings-archive-btn" }, actionLoadingProps[\'ARCHIVE\']), props.actionLoadings[\'ARCHIVE\'] ? \'Archiving\' : \'Archive\')),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Archive\', isShared: true, onClick: props.handleArchiveRecordings }, props.actionLoadings[\'ARCHIVE\'] ? \'Archiving\' : \'Archive\')),\n key: \'Archive\',\n });\n }\n arr = ActiveRecordingsTable_spreadArray(ActiveRecordingsTable_spreadArray([], arr, true), [\n {\n default: (react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: props.handleEditLabels, isDisabled: !props.checkedIndices.length, "data-quickstart-id": "recordings-labels-btn" }, "Edit Labels")),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Edit Labels\', isShared: true, onClick: props.handleEditLabels }, "Edit Labels")),\n key: \'Edit Labels\',\n },\n {\n default: (react.createElement(Button_Button/* Button */.zx, ActiveRecordingsTable_assign({ variant: "tertiary", onClick: props.handleStopRecordings, isDisabled: isStopDisabled, "data-quickstart-id": "recordings-stop-btn" }, actionLoadingProps[\'STOP\']), props.actionLoadings[\'STOP\'] ? \'Stopping\' : \'Stop\')),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Stop\', isShared: true, onClick: props.handleStopRecordings }, props.actionLoadings[\'STOP\'] ? \'Stopping\' : \'Stop\')),\n key: \'Stop\',\n },\n {\n default: (react.createElement(Button_Button/* Button */.zx, ActiveRecordingsTable_assign({ variant: "danger", onClick: handleDeleteButton, isDisabled: !props.checkedIndices.length || props.actionLoadings[\'DELETE\'], "data-quickstart-id": "recordings-delete-btn" }, actionLoadingProps[\'DELETE\']), props.actionLoadings[\'DELETE\'] ? \'Deleting\' : \'Delete\')),\n collapsed: (react.createElement(OverflowMenuDropdownItem/* OverflowMenuDropdownItem */.z, { key: \'Delete\', isShared: true, onClick: handleDeleteButton }, props.actionLoadings[\'DELETE\'] ? \'Deleting\' : \'Delete\')),\n key: \'Delete\',\n },\n ], false);\n return arr;\n }, [\n handleDeleteButton,\n isStopDisabled,\n actionLoadingProps,\n props.handleCreateRecording,\n props.handleArchiveRecordings,\n props.handleEditLabels,\n props.handleStopRecordings,\n props.actionLoadings,\n props.archiveEnabled,\n props.checkedIndices,\n ]);\n var deleteActiveWarningModal = react.useMemo(function () {\n return (react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteActiveRecordings */.gF.DeleteActiveRecordings, visible: warningModalOpen, onAccept: props.handleDeleteRecordings, onClose: handleWarningModalClose }));\n }, [warningModalOpen, props.handleDeleteRecordings, handleWarningModalClose]);\n return (react.createElement(Toolbar/* Toolbar */.o, { id: "active-recordings-toolbar", "aria-label": "active-recording-toolbar", clearAllFilters: props.handleClearFilters, isSticky: true },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(RecordingFilters, { target: props.target, isArchived: false, recordings: props.recordings, filters: props.targetRecordingFilters, updateFilters: props.updateFilters, breakpoint: \'xl\' }),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { style: { alignSelf: \'start\' }, variant: "button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, { variant: "overflow-menu" },\n react.createElement(OverflowMenu/* OverflowMenu */.P, { breakpoint: "lg", breakpointReference: props.toolbarBreakReference ||\n (function () { return document.getElementById(\'active-recordings-toolbar\') || document.body; }) },\n react.createElement(OverflowMenuContent/* OverflowMenuContent */.a, null,\n react.createElement(OverflowMenuGroup/* OverflowMenuGroup */.M, { groupType: "button" }, buttons.map(function (b) { return (react.createElement(OverflowMenuItem/* OverflowMenuItem */.l, { key: b.key }, b.default)); }))),\n react.createElement(OverflowMenuControl/* OverflowMenuControl */.S, null,\n react.createElement(Dropdown/* Dropdown */.L, { "aria-label": \'active-recording-actions\', isPlain: true, isFlipEnabled: true, onSelect: function () { return setActionToggleOpen(false); }, menuAppendTo: document.body, isOpen: actionToggleOpen, toggle: react.createElement(KebabToggle/* KebabToggle */.a, { id: "active-recording-actions-toggle-kebab", onToggle: handleActionToggle }), dropdownItems: buttons.map(function (b) { return b.collapsed; }) }))))),\n deleteActiveWarningModal)));\n};\nvar ActiveRecordingRow = function (_a) {\n var recording = _a.recording, index = _a.index, currentSelectedTargetURL = _a.currentSelectedTargetURL, expandedRows = _a.expandedRows, checkedIndices = _a.checkedIndices, labelFilters = _a.labelFilters, toggleExpanded = _a.toggleExpanded, handleRowCheck = _a.handleRowCheck, updateFilters = _a.updateFilters;\n var _b = useDayjs(), dayjs = _b[0], datetimeContext = _b[1];\n var context = react.useContext(Services/* ServiceContext */.o);\n var parsedLabels = react.useMemo(function () {\n return parseLabels(recording.metadata.labels);\n }, [recording]);\n var expandedRowId = react.useMemo(function () { return "active-table-row-".concat(recording.name, "-").concat(recording.startTime, "-exp"); }, [recording]);\n var handleToggle = react.useCallback(function () { return toggleExpanded(expandedRowId); }, [expandedRowId, toggleExpanded]);\n var isExpanded = react.useMemo(function () {\n return expandedRows.includes(expandedRowId);\n }, [expandedRowId, expandedRows]);\n var handleCheck = react.useCallback(function (checked) {\n handleRowCheck(checked, index);\n }, [index, handleRowCheck]);\n var parentRow = react.useMemo(function () {\n var RecordingDuration = function (props) {\n var str = react.useMemo(function () { return (props.duration === 0 ? \'Continuous\' : "".concat(props.duration / 1000, "s")); }, [props.duration]);\n return react.createElement("span", null, str);\n };\n return (react.createElement(Tr.Tr, { key: "".concat(index, "_parent") },\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_0") },\n react.createElement(Checkbox/* Checkbox */.X, { name: "active-table-row-".concat(index, "-check"), onChange: handleCheck, isChecked: checkedIndices.includes(index), id: "active-table-row-".concat(index, "-check"), "data-quickstart-id": "active-recordings-checkbox" })),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_1"), id: "active-ex-toggle-".concat(index), "aria-controls": "active-ex-expand-".concat(index), expand: {\n rowIndex: index,\n isExpanded: isExpanded,\n onToggle: handleToggle,\n } }),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_2"), dataLabel: ActiveRecordingsTable_tableColumns[0].title }, recording.name),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_3"), dataLabel: ActiveRecordingsTable_tableColumns[1].title },\n react.createElement(Timestamp/* Timestamp */.EK, { className: "recording-table__timestamp", tooltip: { variant: Timestamp/* TimestampTooltipVariant.custom */.UQ.custom, content: dayjs(recording.startTime).toISOString() } }, dayjs(recording.startTime).tz(datetimeContext.timeZone.full).format(\'L LTS z\'))),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_4"), dataLabel: ActiveRecordingsTable_tableColumns[2].title },\n react.createElement(RecordingDuration, { duration: recording.duration })),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_5"), dataLabel: ActiveRecordingsTable_tableColumns[3].title }, recording.state),\n react.createElement(Td.Td, { key: "active-table-row-".concat(index, "_6"), dataLabel: ActiveRecordingsTable_tableColumns[4].title },\n react.createElement(LabelCell, { target: currentSelectedTargetURL, clickableOptions: {\n updateFilters: updateFilters,\n labelFilters: labelFilters,\n }, labels: parsedLabels })),\n react.createElement(RecordingActions, { index: index, recording: recording, uploadFn: function () { return context.api.uploadActiveRecordingToGrafana(recording.name); } })));\n }, [\n index,\n dayjs,\n datetimeContext.timeZone.full,\n checkedIndices,\n isExpanded,\n recording,\n labelFilters,\n currentSelectedTargetURL,\n parsedLabels,\n context.api,\n handleCheck,\n handleToggle,\n updateFilters,\n ]);\n var childRow = react.useMemo(function () {\n return (react.createElement(Tr.Tr, { key: "".concat(index, "_child"), isExpanded: isExpanded },\n react.createElement(Td.Td, { key: "active-ex-expand-".concat(index), dataLabel: \'Content Details\', colSpan: ActiveRecordingsTable_tableColumns.length + 3 },\n react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null,\n react.createElement(Text/* Text */.x, null, "Recording Options:"),\n react.createElement(Text/* Text */.x, null,\n "toDisk = ",\n String(recording.toDisk),\n " \\u2003 maxAge = ",\n recording.maxAge / 1000,\n "s \\u2003 maxSize =",\n \' \',\n recording.maxSize,\n "B"),\n react.createElement("br", null),\n react.createElement("hr", null),\n react.createElement("br", null),\n react.createElement(Text/* Text */.x, null, "Automated Analysis:"),\n react.createElement(ReportFrame, { isExpanded: isExpanded, recording: recording, width: "100%", height: "640" })))));\n }, [recording, index, isExpanded]);\n return (react.createElement(Tbody/* Tbody */.p, { key: index, isExpanded: isExpanded },\n parentRow,\n childRow));\n};\n\n;// CONCATENATED MODULE: ./src/app/Recordings/Recordings.tsx\nvar Recordings_assign = (undefined && undefined.__assign) || function () {\n Recordings_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Recordings_assign.apply(this, arguments);\n};\nvar Recordings_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar RecordingTab;\n(function (RecordingTab) {\n RecordingTab["ACTIVE_RECORDING"] = "active-recording";\n RecordingTab["ARCHIVED_RECORDING"] = "archived-recording";\n})(RecordingTab || (RecordingTab = {}));\nvar Recordings = function (_a) {\n var props = Recordings_rest(_a, []);\n var _b = (0,react_router/* useLocation */.TH)(), search = _b.search, pathname = _b.pathname;\n var history = (0,react_router/* useHistory */.k6)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var activeTab = react.useMemo(function () {\n return (0,utils/* getActiveTab */.fr)(search, \'tab\', Object.values(RecordingTab), RecordingTab.ACTIVE_RECORDING);\n }, [search]);\n var _c = react.useState(false), archiveEnabled = _c[0], setArchiveEnabled = _c[1];\n react.useEffect(function () {\n addSubscription(context.api.isArchiveEnabled().subscribe(setArchiveEnabled));\n }, [context.api, addSubscription, setArchiveEnabled]);\n var onTabSelect = react.useCallback(function (_, key) {\n return (0,utils/* switchTab */.MR)(history, pathname, search, { tabKey: \'tab\', tabValue: "".concat(key) });\n }, [history, pathname, search]);\n var targetAsObs = react.useMemo(function () { return context.target.target(); }, [context.target]);\n var cardBody = react.useMemo(function () {\n return archiveEnabled ? (react.createElement(Tabs/* Tabs */.m, { id: "recordings", activeKey: activeTab, onSelect: onTabSelect, unmountOnExit: true },\n react.createElement(Tab/* Tab */.O, { id: "active-recordings", eventKey: RecordingTab.ACTIVE_RECORDING, title: react.createElement(TabTitleText/* TabTitleText */.T, null, "Active Recordings"), "data-quickstart-id": "active-recordings-tab" },\n react.createElement(ActiveRecordingsTable, { archiveEnabled: true })),\n react.createElement(Tab/* Tab */.O, { id: "archived-recordings", eventKey: RecordingTab.ARCHIVED_RECORDING, title: react.createElement(TabTitleText/* TabTitleText */.T, null, "Archived Recordings"), "data-quickstart-id": "archived-recordings-tab" },\n react.createElement(ArchivedRecordingsTable, { target: targetAsObs, isUploadsTable: false, isNestedTable: false })))) : (react.createElement(react.Fragment, null,\n react.createElement(CardTitle/* CardTitle */.l, null, "Active Recordings"),\n react.createElement(ActiveRecordingsTable, { archiveEnabled: false })));\n }, [archiveEnabled, activeTab, onTabSelect, targetAsObs]);\n return (react.createElement(TargetView, Recordings_assign({}, props, { pageTitle: "Recordings" }),\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardBody/* CardBody */.e, null, cardBody))));\n};\n/* harmony default export */ const Recordings_Recordings = (Recordings);\n\n;// CONCATENATED MODULE: ./src/app/Rules/CreateRule.tsx\nvar CreateRule_assign = (undefined && undefined.__assign) || function () {\n CreateRule_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CreateRule_assign.apply(this, arguments);\n};\nvar CreateRule_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// FIXME check if this is correct/matches backend name validation\nvar RuleNamePattern = /^[\\w_]+$/;\nvar CreateRuleForm = function (_a) {\n var props = CreateRule_rest(_a, []);\n var context = react.useContext(Services/* ServiceContext */.o);\n var notifications = react.useContext(Notifications/* NotificationsContext */.cJ);\n var history = (0,react_router/* useHistory */.k6)();\n // Note: Do not use useSearchExpression(). This causes the cursor to jump to the end due to async updates.\n var matchExprService = react.useContext(SearchExprServiceContext);\n var _b = react.useState(\'\'), matchExpression = _b[0], setMatchExpression = _b[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _c = react.useState(\'\'), name = _c[0], setName = _c[1];\n var _d = react.useState(constants/* ValidatedOptions.default */.LD["default"]), nameValid = _d[0], setNameValid = _d[1];\n var _e = react.useState(\'\'), description = _e[0], setDescription = _e[1];\n var _f = react.useState(true), enabled = _f[0], setEnabled = _f[1];\n var _g = react.useState(constants/* ValidatedOptions.default */.LD["default"]), matchExpressionValid = _g[0], setMatchExpressionValid = _g[1];\n var _h = react.useState([]), templates = _h[0], setTemplates = _h[1];\n var _j = react.useState({}), template = _j[0], setTemplate = _j[1];\n var _k = react.useState(0), maxAge = _k[0], setMaxAge = _k[1];\n var _l = react.useState(1), maxAgeUnits = _l[0], setMaxAgeUnits = _l[1];\n var _m = react.useState(0), maxSize = _m[0], setMaxSize = _m[1];\n var _o = react.useState(1), maxSizeUnits = _o[0], setMaxSizeUnits = _o[1];\n var _p = react.useState(0), archivalPeriod = _p[0], setArchivalPeriod = _p[1];\n var _q = react.useState(1), archivalPeriodUnits = _q[0], setArchivalPeriodUnits = _q[1];\n var _r = react.useState(0), initialDelay = _r[0], setInitialDelay = _r[1];\n var _s = react.useState(1), initialDelayUnits = _s[0], setInitialDelayUnits = _s[1];\n var _t = react.useState(0), preservedArchives = _t[0], setPreservedArchives = _t[1];\n var _u = react.useState(false), loading = _u[0], setLoading = _u[1];\n var _v = react.useState([]), targets = _v[0], setTargets = _v[1];\n var matchedTargetsRef = react.useRef(new Subject/* Subject */.x());\n var matchedTargets = matchedTargetsRef.current;\n var handleNameChange = react.useCallback(function (name) {\n setNameValid(RuleNamePattern.test(name) ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error);\n setName(name);\n }, [setNameValid, setName]);\n var eventSpecifierString = react.useMemo(function () {\n var str = \'\';\n var name = template.name, type = template.type;\n if (name) {\n str += "template=".concat(name);\n }\n if (type) {\n str += ",type=".concat(type);\n }\n return str;\n }, [template]);\n var handleTemplateChange = react.useCallback(function (templateName, templateType) {\n setTemplate({\n name: templateName,\n type: templateType,\n });\n }, [setTemplate]);\n var handleMaxAgeChange = react.useCallback(function (maxAge) { return setMaxAge(Number(maxAge)); }, [setMaxAge]);\n var handleMaxAgeUnitChange = react.useCallback(function (maxAgeUnit) { return setMaxAgeUnits(Number(maxAgeUnit)); }, [setMaxAgeUnits]);\n var handleMaxSizeChange = react.useCallback(function (maxSize) { return setMaxSize(Number(maxSize)); }, [setMaxSize]);\n var handleMaxSizeUnitChange = react.useCallback(function (maxSizeUnit) { return setMaxSizeUnits(Number(maxSizeUnit)); }, [setMaxSizeUnits]);\n var handleArchivalPeriodChange = react.useCallback(function (archivalPeriod) { return setArchivalPeriod(Number(archivalPeriod)); }, [setArchivalPeriod]);\n var handleArchivalPeriodUnitsChange = react.useCallback(function (evt) { return setArchivalPeriodUnits(Number(evt)); }, [setArchivalPeriodUnits]);\n var handleInitialDelayChange = react.useCallback(function (initialDelay) { return setInitialDelay(Number(initialDelay)); }, [setInitialDelay]);\n var handleInitialDelayUnitsChanged = react.useCallback(function (initialDelayUnit) { return setInitialDelayUnits(Number(initialDelayUnit)); }, [setInitialDelayUnits]);\n var handlePreservedArchivesChange = react.useCallback(function (preservedArchives) { return setPreservedArchives(Number(preservedArchives)); }, [setPreservedArchives]);\n var handleSubmit = react.useCallback(function () {\n setLoading(true);\n var notificationMessages = [];\n if (nameValid !== constants/* ValidatedOptions.success */.LD.success) {\n notificationMessages.push("Rule name ".concat(name, " is invalid"));\n }\n if (notificationMessages.length > 0) {\n var message = notificationMessages.join(\'. \').trim() + \'.\';\n notifications.warning(\'Invalid form data\', message);\n return;\n }\n var rule = {\n name: name,\n description: description,\n enabled: enabled,\n matchExpression: matchExpression,\n eventSpecifier: eventSpecifierString,\n archivalPeriodSeconds: archivalPeriod * archivalPeriodUnits,\n initialDelaySeconds: initialDelay * initialDelayUnits,\n preservedArchives: preservedArchives,\n maxAgeSeconds: maxAge * maxAgeUnits,\n maxSizeBytes: maxSize * maxSizeUnits,\n };\n addSubscription(context.api.createRule(rule).subscribe(function (success) {\n setLoading(false);\n if (success) {\n history.push(\'/rules\');\n }\n }));\n }, [\n setLoading,\n addSubscription,\n context.api,\n history,\n notifications,\n name,\n nameValid,\n description,\n enabled,\n matchExpression,\n eventSpecifierString,\n archivalPeriod,\n archivalPeriodUnits,\n initialDelay,\n initialDelayUnits,\n preservedArchives,\n maxAge,\n maxAgeUnits,\n maxSize,\n maxSizeUnits,\n ]);\n react.useEffect(function () {\n addSubscription(matchedTargets\n .pipe((0,debounceTime/* debounceTime */.b)(100), (0,switchMap/* switchMap */.w)(function (targets) {\n return (0,iif/* iif */.s)(function () { return targets.length > 0; }, (0,forkJoin/* forkJoin */.D)(targets.map(function (t) {\n return context.api\n .doGet("targets/".concat(encodeURIComponent(t.connectUrl), "/templates"), \'v1\', undefined, true, true)\n .pipe((0,catchError/* catchError */.K)(function (_) { return (0,of.of)([]); }) // Fail silently\n );\n })).pipe((0,map/* map */.U)(function (allTemplates) {\n var allFiltered = allTemplates.filter(function (ts) { return ts.length; });\n return allFiltered.length\n ? allFiltered.reduce(function (acc, curr) { return lodash_default().intersectionWith(acc, curr, (lodash_default()).isEqual); })\n : [];\n })), (0,of.of)([]));\n }))\n .subscribe(function (templates) {\n setTemplates(templates);\n setTemplate(function (old) {\n var matched = templates.find(function (t) { return t.name === old.name && t.type === t.type; });\n return matched ? { name: matched.name, type: matched.type } : {};\n });\n }));\n }, [addSubscription, context.api, matchedTargets]);\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(setTargets));\n }, [addSubscription, context.targets, setTargets]);\n react.useEffect(function () {\n // Set validations\n var validation = constants/* ValidatedOptions.default */.LD["default"];\n var matches = [];\n if (matchExpression !== \'\' && targets.length > 0) {\n try {\n matches = targets.filter(function (t) {\n var res = (0,utils/* evaluateTargetWithExpr */.T9)(t, matchExpression);\n if (typeof res === \'boolean\') {\n return res;\n }\n throw new Error(\'The expression matching failed.\');\n });\n validation = matches.length ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.warning */.LD.warning;\n }\n catch (err) {\n validation = constants/* ValidatedOptions.error */.LD.error;\n }\n }\n setMatchExpressionValid(validation);\n matchedTargets.next(matches);\n }, [matchExpression, targets, matchedTargets, setMatchExpressionValid]);\n var createButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Creating\',\n spinnerAriaLabel: \'creating-automated-rule\',\n isLoading: loading,\n });\n }, [loading]);\n var selectedSpecifier = react.useMemo(function () {\n var name = template.name, type = template.type;\n if (name && type) {\n return "".concat(name, ",").concat(type);\n }\n return \'\';\n }, [template]);\n return (react.createElement(Form/* Form */.l, CreateRule_assign({}, props),\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small }, "Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently Cryostat should copy the application recording buffer into Cryostat\'s own archived storage."),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Name", isRequired: true, fieldId: "rule-name", helperText: "Enter a rule name.", helperTextInvalid: "A rule name can contain only letters, numbers, and underscores.", validated: nameValid, "data-quickstart-id": "rule-name" },\n react.createElement(TextInput/* TextInput */.oi, { value: name, isDisabled: loading, isRequired: true, type: "text", id: "rule-name", "aria-describedby": "rule-name-helper", onChange: handleNameChange, validated: nameValid })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Description", fieldId: "rule-description", helperText: "Enter a rule description. This is only used for display purposes to aid in identifying rules and their intentions.", "data-quickstart-id": "rule-description" },\n react.createElement(TextArea/* TextArea */.Kx, { value: description, isDisabled: loading, type: "text", id: "rule-description", "aria-describedby": "rule-description-helper", resizeOrientation: "vertical", autoResize: true, onChange: setDescription })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Match Expression", labelIcon: react.createElement(Popover/* Popover */.J, { appendTo: utils/* portalRoot */.tO, headerContent: "Match Expression Hint", bodyContent: react.createElement(react.Fragment, null,\n "Try an expression like:",\n react.createElement(MatchExpressionHint, { target: targets[0] })), hasAutoWidth: true },\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", "aria-label": "More info for match expression field", onClick: function (e) { return e.preventDefault(); }, className: "pf-c-form__group-label-help", "data-quickstart-id": "rule-matchexpr-help" },\n react.createElement(help_icon/* HelpIcon */.by, null))), isRequired: true, fieldId: "rule-matchexpr", helperText: matchExpressionValid === constants/* ValidatedOptions.warning */.LD.warning\n ? "Warning: Match expression matches no targets."\n : "\\n Enter a match expression. This is a Java-like code snippet that is evaluated against each target\\n application to determine whether the rule should be applied.", helperTextInvalid: "The expression matching failed.", validated: matchExpressionValid, "data-quickstart-id": "rule-matchexpr" },\n react.createElement(TextArea/* TextArea */.Kx, { value: matchExpression, isDisabled: loading, isRequired: true, type: "text", id: "rule-matchexpr", "aria-describedby": "rule-matchexpr-helper", resizeOrientation: "vertical", autoResize: true, onChange: function (value) {\n setMatchExpression(value);\n matchExprService.setSearchExpression(value);\n }, validated: matchExpressionValid })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Enabled", isRequired: true, fieldId: "rule-enabled", helperText: "Rules take effect when created if enabled and will be matched against all\\ndiscovered target applications immediately. When new target applications appear they are\\nchecked against all enabled rules. Disabled rules have no effect but are available to be\\nenabled in the future." },\n react.createElement(Switch/* Switch */.r, { id: "rule-enabled", isDisabled: loading, "aria-label": "Apply this rule to matching targets", isChecked: enabled, onChange: setEnabled })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Template", isRequired: true, fieldId: "recording-template", validated: !template.name ? constants/* ValidatedOptions.default */.LD["default"] : constants/* ValidatedOptions.success */.LD.success, helperText: "The Event Template to be applied by this Rule against matching target applications.", helperTextInvalid: "A Template must be selected", "data-quickstart-id": "rule-evt-template" },\n react.createElement(SelectTemplateSelectorForm, { selected: selectedSpecifier, disabled: loading, validated: !template.name ? constants/* ValidatedOptions.default */.LD["default"] : constants/* ValidatedOptions.success */.LD.success, templates: templates, onSelect: handleTemplateChange })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Maximum Size", fieldId: "maxSize", helperText: "The maximum size of recording data retained in the target application\'s recording buffer.", "data-quickstart-id": "rule-max-size" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: maxSize, isDisabled: loading, isRequired: true, type: "number", id: "maxSize", "aria-label": "max size value", onChange: handleMaxSizeChange, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: maxSizeUnits, isDisabled: loading, onChange: handleMaxSizeUnitChange, "aria-label": "Max size units input" },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "B" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 1024, label: "KiB" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 1024 * 1024, label: "MiB" }))))),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Maximum Age", fieldId: "maxAge", helperText: "The maximum age of recording data retained in the target application\'s recording buffer.", "data-quickstart-id": "rule-max-age" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: maxAge, isDisabled: loading, isRequired: true, type: "number", id: "maxAge", "aria-label": "Max age duration", onChange: handleMaxAgeChange, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: maxAgeUnits, isDisabled: loading, onChange: handleMaxAgeUnitChange, "aria-label": "Max Age units Input" },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "Seconds" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 60, label: "Minutes" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 60 * 60, label: "Hours" }))))),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Archival Period", fieldId: "archivalPeriod", helperText: "Time between copies of active recording data being pulled into Cryostat archive storage.", "data-quickstart-id": "rule-archival-period" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: archivalPeriod, isDisabled: loading, isRequired: true, type: "number", id: "archivalPeriod", "aria-label": "archival period", onChange: handleArchivalPeriodChange, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: archivalPeriodUnits, isDisabled: loading, onChange: handleArchivalPeriodUnitsChange, "aria-label": "archival period units input" },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "Seconds" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 60, label: "Minutes" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 60 * 60, label: "Hours" }))))),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Initial Delay", fieldId: "initialDelay", helperText: "Initial delay before archiving starts. The first archived copy will be made this long after the recording is started. The second archived copy will occur one Archival Period later.", "data-quickstart-id": "rule-initial-delay" },\n react.createElement(Split/* Split */.P, { hasGutter: true },\n react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextInput/* TextInput */.oi, { value: initialDelay, isDisabled: loading, isRequired: true, type: "number", id: "initialDelay", "aria-label": "initial delay", onChange: handleInitialDelayChange, min: "0" })),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(FormSelect/* FormSelect */.i, { value: initialDelayUnits, isDisabled: loading, onChange: handleInitialDelayUnitsChanged, "aria-label": "initial delay units input" },\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "1", value: "1", label: "Seconds" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "2", value: 60, label: "Minutes" }),\n react.createElement(FormSelectOption/* FormSelectOption */.j, { key: "3", value: 60 * 60, label: "Hours" }))))),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Preserved Archives", fieldId: "preservedArchives", helperText: "The number of archived recording copies to preserve in archives for each target application affected by this rule.", "data-quickstart-id": "rule-preserved-archives" },\n react.createElement(TextInput/* TextInput */.oi, { value: preservedArchives, isDisabled: loading, isRequired: true, type: "number", id: "preservedArchives", "aria-label": "preserved archives", onChange: handlePreservedArchivesChange, min: "0" })),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, CreateRule_assign({ variant: "primary", onClick: handleSubmit, isDisabled: loading || nameValid !== constants/* ValidatedOptions.success */.LD.success || !template.name || !template.type || !matchExpression, "data-quickstart-id": "rule-create-btn" }, createButtonLoadingProps), loading ? \'Creating\' : \'Create\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: history.goBack, isAriaDisabled: loading }, "Cancel"))));\n};\nvar CreateRule_Comp = function () {\n var matchExpreRef = react.useRef(new SearchExprService());\n var breadcrumbs = react.useMemo(function () { return [\n {\n title: \'Automated Rules\',\n path: \'/rules\',\n },\n ]; }, []);\n var gridStyles = react.useMemo(function () { return ({\n // viewportHeight - masterheadHeight - pageSectionPadding - breadcrumbHeight\n height: \'calc(100vh - 4.375rem - 48px - 1.5rem)\',\n }); }, []);\n return (react.createElement(BreadcrumbPage, { pageTitle: "Create", breadcrumbs: breadcrumbs },\n react.createElement(SearchExprServiceContext.Provider, { value: matchExpreRef.current, "data-full-height": true },\n react.createElement(Grid/* Grid */.r, { hasGutter: true, style: gridStyles },\n react.createElement(GridItem/* GridItem */.P, { xl: 5, order: { xl: \'0\', default: \'1\' } },\n react.createElement(Card/* Card */.Z, { isFullHeight: true },\n react.createElement(CardBody/* CardBody */.e, { className: "overflow-auto" },\n react.createElement(CreateRuleForm, null)))),\n react.createElement(GridItem/* GridItem */.P, { xl: 7, order: { xl: \'1\', default: \'0\' } },\n react.createElement(Card/* Card */.Z, { isFullHeight: true },\n react.createElement(CardBody/* CardBody */.e, { className: "overflow-auto", "data-quickstart-id": "match-expr-card" },\n react.createElement(MatchExpressionVisualizer, null))))))));\n};\nvar CreateRule = (0,react_router/* withRouter */.EN)(CreateRule_Comp);\n/* harmony default export */ const Rules_CreateRule = (CreateRule);\n\n;// CONCATENATED MODULE: ./src/app/Rules/RuleDeleteWarningModal.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar RuleDeleteWarningModal = function (_a) {\n var visible = _a.visible, ruleName = _a.ruleName, warningType = _a.warningType, onAccept = _a.onAccept, onClose = _a.onClose, clean = _a.clean, setClean = _a.setClean;\n var context = react.useContext(Services/* ServiceContext */.o);\n var _b = (0,react.useState)(false), doNotAsk = _b[0], setDoNotAsk = _b[1];\n var warningContents = react.useMemo(function () { return (0,DeleteWarningUtils/* getFromWarningMap */.Y1)(warningType); }, [warningType]);\n var onAcceptClose = react.useCallback(function () {\n onAccept();\n onClose();\n if (doNotAsk) {\n context.settings.setDeletionDialogsEnabledFor(warningType, false);\n }\n }, [onAccept, onClose, doNotAsk, context.settings, warningType]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, title: warningContents === null || warningContents === void 0 ? void 0 : warningContents.title, description: warningContents === null || warningContents === void 0 ? void 0 : warningContents.description, "aria-label": warningContents === null || warningContents === void 0 ? void 0 : warningContents.ariaLabel, titleIconVariant: "warning", variant: Modal/* ModalVariant.small */.v.small, isOpen: visible, showClose: true, onClose: onClose, actions: [\n react.createElement(Stack/* Stack */.K, { hasGutter: true, key: "modal-footer-stack" },\n react.createElement(Split/* Split */.P, { key: "modal-footer-split" },\n react.createElement(Button_Button/* Button */.zx, { variant: "danger", onClick: onAcceptClose }, warningType.match(/disable/i) ? \'Disable\' : \'Delete\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: onClose }, "Cancel"))),\n ] },\n react.createElement(Stack/* Stack */.K, { hasGutter: true, key: "modal-checkboxes-stack" },\n react.createElement(Checkbox/* Checkbox */.X, { id: "clean-rule-enabled", label: "Clean", description: "Clean will stop any Active Recordings that ".concat(ruleName, " created."), isChecked: clean, onChange: setClean }),\n react.createElement(Checkbox/* Checkbox */.X, { id: "do-not-ask-enabled", label: "Don\'t ask me again", isChecked: doNotAsk, onChange: setDoNotAsk }))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Rules/RulesUploadModal.tsx\nvar RulesUploadModal_assign = (undefined && undefined.__assign) || function () {\n RulesUploadModal_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return RulesUploadModal_assign.apply(this, arguments);\n};\nvar RulesUploadModal_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar parseRule = function (file) {\n return (0,from/* from */.D)(file.text().then(function (content) {\n var obj = JSON.parse(content);\n if (isRule(obj)) {\n return obj;\n }\n else {\n throw new Error(\'Automated rule content is invalid.\');\n }\n }));\n};\nvar RuleUploadModal = function (_a) {\n var onClose = _a.onClose, props = RulesUploadModal_rest(_a, ["onClose"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var submitRef = react.useRef(null); // Use ref to refer to submit trigger div\n var abortRef = react.useRef(null); // Use ref to refer to abort trigger div\n var _b = react.useState(0), numOfFiles = _b[0], setNumOfFiles = _b[1];\n var _c = react.useState(false), allOks = _c[0], setAllOks = _c[1];\n var _d = react.useState(false), uploading = _d[0], setUploading = _d[1];\n var reset = react.useCallback(function () {\n setNumOfFiles(0);\n setUploading(false);\n }, [setNumOfFiles, setUploading]);\n var handleClose = react.useCallback(function () {\n if (uploading) {\n abortRef.current && abortRef.current.click();\n }\n else {\n reset();\n onClose();\n }\n }, [uploading, reset, onClose]);\n var onFileSubmit = react.useCallback(function (fileUploads, _a) {\n var getProgressUpdateCallback = _a.getProgressUpdateCallback, onSingleSuccess = _a.onSingleSuccess, onSingleFailure = _a.onSingleFailure;\n setUploading(true);\n var tasks = [];\n fileUploads.forEach(function (fileUpload) {\n tasks.push(parseRule(fileUpload.file).pipe((0,first/* first */.P)(), (0,concatMap/* concatMap */.b)(function (rule) {\n return context.api.uploadRule(rule, getProgressUpdateCallback(fileUpload.file.name), fileUpload.abortSignal);\n }), (0,tap/* tap */.b)({\n next: function (_) {\n onSingleSuccess(fileUpload.file.name);\n },\n error: function (err) {\n onSingleFailure(fileUpload.file.name, err);\n },\n }), (0,catchError/* catchError */.K)(function (_) { return (0,of.of)(false); })));\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks)\n .pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([true]))\n .subscribe(function (oks) {\n setUploading(false);\n setAllOks(oks.reduce(function (prev, curr, _) { return prev && curr; }, true));\n }));\n }, [setUploading, context.api, addSubscription, setAllOks]);\n var handleSubmit = react.useCallback(function () {\n submitRef.current && submitRef.current.click();\n }, []);\n var onFilesChange = react.useCallback(function (fileUploads) {\n setAllOks(!fileUploads.some(function (f) { return !f.progress || f.progress.progressVariant !== \'success\'; }));\n setNumOfFiles(fileUploads.length);\n }, [setNumOfFiles, setAllOks]);\n var submitButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Submitting\',\n spinnerAriaLabel: \'submitting-automated-rule\',\n isLoading: uploading,\n });\n }, [uploading]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: props.visible, variant: Modal/* ModalVariant.large */.v.large, showClose: true, onClose: handleClose, title: "Upload Automated Rules", description: "Select an Automated Rules definition file to upload. File must be in valid JSON format.", help: react.createElement(Popover/* Popover */.J, { appendTo: utils/* portalRoot */.tO, headerContent: react.createElement("div", null, "What\\"s this?"), bodyContent: react.createElement("div", null, "Automated Rules are configurations that instruct Cryostat to create JDK Flight Recordings on matching target JVM applications. Each Automated Rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently Cryostat should copy the application recording buffer into Cryostat\\"s own archived storage.") },\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", "aria-label": "Help" },\n react.createElement(help_icon/* HelpIcon */.by, null))) },\n react.createElement(Form/* Form */.l, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: "JSON File", isRequired: true, fieldId: "file" },\n react.createElement(MultiFileUpload, { submitRef: submitRef, abortRef: abortRef, uploading: uploading, dropZoneAccepts: [\'application/json\'], displayAccepts: [\'JSON\'], onFileSubmit: onFileSubmit, onFilesChange: onFilesChange })),\n react.createElement(ActionGroup/* ActionGroup */.W, null, allOks && numOfFiles ? (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClose }, "Close")) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, RulesUploadModal_assign({ variant: "primary", onClick: handleSubmit, isDisabled: !numOfFiles || uploading }, submitButtonLoadingProps), "Submit"),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, "Cancel")))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Rules/Rules.tsx\nvar Rules_assign = (undefined && undefined.__assign) || function () {\n Rules_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Rules_assign.apply(this, arguments);\n};\nvar Rules_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ruleObjKeys = [\n \'name\',\n \'description\',\n \'matchExpression\',\n \'enabled\',\n \'eventSpecifier\',\n \'archivalPeriodSeconds\',\n \'initialDelaySeconds\',\n \'preservedArchives\',\n \'maxAgeSeconds\',\n \'maxSizeBytes\',\n];\nvar isRule = function (obj) {\n for (var _i = 0, ruleObjKeys_1 = ruleObjKeys; _i < ruleObjKeys_1.length; _i++) {\n var key = ruleObjKeys_1[_i];\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n return false;\n }\n } // Ignore unknown fields\n return true;\n};\nvar Rules_tableColumns = [\n {\n title: \'Enabled\',\n keyPaths: [\'enabled\'],\n },\n {\n title: \'Name\',\n keyPaths: [\'name\'],\n sortable: true,\n },\n {\n title: \'Description\',\n keyPaths: [\'description\'],\n },\n {\n title: \'Match Expression\',\n keyPaths: [\'matchExpression\'],\n sortable: true,\n tooltip: \'A code-snippet expression which must evaluate to a boolean when applied to a given target. If the expression evaluates to true then the rule applies to that target.\',\n },\n {\n title: \'Event Specifier\',\n keyPaths: [\'eventSpecifier\'],\n tooltip: \'The name and location of the Event Template applied by this rule.\',\n },\n {\n title: \'Archival Period\',\n keyPaths: [\'archivalPeriodSeconds\'],\n tooltip: \'Period in seconds. Cryostat will connect to matching targets at this interval and copy the relevant recording data into its archives. Values less than 1 prevent data from being repeatedly copied into archives - recordings will be started and remain only in target JVM memory.\',\n },\n {\n title: \'Initial Delay\',\n keyPaths: [\'initialDelaySeconds\'],\n tooltip: \'Initial delay in seconds. Cryostat will wait this amount of time before first copying recording data into its archives. Values less than 0 default to equal to the Archival Period. You can set a non-zero Initial Delay with a zero Archival Period, which will start a recording and copy it into archives exactly once after a set delay.\',\n },\n {\n title: \'Preserved Archives\',\n keyPaths: [\'preservedArchives\'],\n tooltip: \'The number of recording copies to be maintained in the Cryostat archives. Cryostat will continue retrieving further archived copies and trimming the oldest copies from the archive to maintain this limit. Values less than 1 prevent data from being copied into archives - recordings will be started and remain only in target JVM memory.\',\n },\n {\n title: \'Maximum Age\',\n keyPaths: [\'maxAgeSeconds\'],\n tooltip: \'The maximum age in seconds for data kept in the JFR recordings started by this rule. Values less than 1 indicate no limit.\',\n },\n {\n title: \'Maximum Size\',\n keyPaths: [\'maxSizeBytes\'],\n tooltip: \'The maximum size in bytes for JFR recordings started by this rule. Values less than 1 indicate no limit.\',\n },\n];\nvar Rules = function (_) {\n var context = react.useContext(Services/* ServiceContext */.o);\n var routerHistory = (0,react_router/* useHistory */.k6)();\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var url = (0,react_router/* useRouteMatch */.$B)().url;\n var _a = react.useState(false), isLoading = _a[0], setIsLoading = _a[1];\n var _b = react.useState({}), sortBy = _b[0], setSortBy = _b[1];\n var _c = react.useState([]), rules = _c[0], setRules = _c[1];\n var _d = react.useState(false), warningModalOpen = _d[0], setWarningModalOpen = _d[1];\n var _e = react.useState(false), isUploadModalOpen = _e[0], setIsUploadModalOpen = _e[1];\n var _f = react.useState(undefined), ruleToWarn = _f[0], setRuleToWarn = _f[1];\n var _g = react.useState(true), cleanRuleEnabled = _g[0], setCleanRuleEnabled = _g[1];\n var getSortParams = react.useCallback(function (columnIndex) { return ({\n sortBy: sortBy,\n onSort: function (_event, index, direction) {\n setSortBy({\n index: index,\n direction: direction,\n });\n },\n columnIndex: columnIndex,\n }); }, [sortBy, setSortBy]);\n var refreshRules = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api.getRules().subscribe(function (rules) {\n setRules(rules);\n setIsLoading(false);\n }));\n }, [setIsLoading, addSubscription, context.api, setRules]);\n react.useEffect(function () {\n refreshRules();\n }, [refreshRules]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.RuleCreated */.mN.RuleCreated)\n .subscribe(function (v) { return setRules(function (old) { return old.concat(v.message); }); }));\n }, [addSubscription, context, context.notificationChannel, setRules]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.RuleDeleted */.mN.RuleDeleted)\n .subscribe(function (v) { return setRules(function (old) { return old.filter(function (o) { return o.name != v.message.name; }); }); }));\n }, [addSubscription, context, context.notificationChannel, setRules]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.RuleUpdated */.mN.RuleUpdated).subscribe(function (msg) {\n setRules(function (old) {\n var matchIndex = old.findIndex(function (r) { return r.name === msg.message.name; });\n if (matchIndex >= 0) {\n var newArray = Rules_spreadArray([], old, true);\n newArray.splice(matchIndex, 1, Rules_assign(Rules_assign({}, old[matchIndex]), { enabled: msg.message.enabled }));\n return newArray;\n }\n return old;\n });\n }));\n }, [addSubscription, context, context.notificationChannel, setRules]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshRules(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, refreshRules]);\n var handleCreateRule = react.useCallback(function () {\n routerHistory.push("".concat(url, "/create"));\n }, [routerHistory, url]);\n var handleUploadRule = react.useCallback(function () {\n setIsUploadModalOpen(true);\n }, [setIsUploadModalOpen]);\n var handleDisableRule = react.useCallback(function (rule, cleanRuleEnabled) {\n addSubscription(context.api.updateRule(Rules_assign(Rules_assign({}, rule), { enabled: false }), cleanRuleEnabled).subscribe());\n }, [context.api, addSubscription]);\n var handleToggle = react.useCallback(function (rule, enabled) {\n if (enabled) {\n addSubscription(context.api.updateRule(Rules_assign(Rules_assign({}, rule), { enabled: enabled })).subscribe());\n }\n else {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DisableAutomatedRules */.gF.DisableAutomatedRules)) {\n setRuleToWarn({ rule: rule, type: \'DISABLE\' });\n setWarningModalOpen(true);\n }\n else {\n handleDisableRule(rule, cleanRuleEnabled);\n }\n }\n }, [\n context.api,\n context.settings,\n cleanRuleEnabled,\n addSubscription,\n handleDisableRule,\n setRuleToWarn,\n setWarningModalOpen,\n ]);\n var handleDelete = react.useCallback(function (rule, clean) {\n if (clean === void 0) { clean = true; }\n addSubscription(context.api\n .deleteRule(rule.name, clean)\n .pipe((0,first/* first */.P)())\n .subscribe(function () { return undefined; } /* do nothing - notification will handle updating state */));\n }, [addSubscription, context.api]);\n var handleDeleteButton = react.useCallback(function (rule) {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteAutomatedRules */.gF.DeleteAutomatedRules)) {\n setRuleToWarn({ rule: rule, type: \'DELETE\' });\n setWarningModalOpen(true);\n }\n else {\n handleDelete(rule, cleanRuleEnabled);\n }\n }, [context.settings, setWarningModalOpen, handleDelete, setRuleToWarn, cleanRuleEnabled]);\n var handleWarningModalAccept = react.useCallback(function () {\n if (ruleToWarn) {\n if ((ruleToWarn === null || ruleToWarn === void 0 ? void 0 : ruleToWarn.type) === \'DELETE\') {\n handleDelete(ruleToWarn.rule, cleanRuleEnabled);\n }\n else {\n handleDisableRule(ruleToWarn.rule, cleanRuleEnabled);\n }\n }\n else {\n console.error(\'ruleToWarn is undefined\');\n }\n }, [handleDelete, handleDisableRule, ruleToWarn, cleanRuleEnabled]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n setRuleToWarn(undefined);\n }, [setWarningModalOpen, setRuleToWarn]);\n var actionResolver = react.useCallback(function (rule) {\n return [\n {\n title: \'Download\',\n onClick: function () { return context.api.downloadRule(rule.name); },\n },\n {\n isSeparator: true,\n },\n {\n title: \'Delete\',\n onClick: function () { return handleDeleteButton(rule); },\n },\n ];\n }, [context.api, handleDeleteButton]);\n var handleUploadModalClose = react.useCallback(function () {\n setIsUploadModalOpen(false);\n }, [setIsUploadModalOpen]);\n var ruleRows = react.useMemo(function () {\n var _a, _b;\n var sorted = (0,utils/* sortResources */.rg)({\n index: (_a = sortBy.index) !== null && _a !== void 0 ? _a : 1,\n direction: (_b = sortBy.direction) !== null && _b !== void 0 ? _b : SortColumn/* SortByDirection.asc */.B.asc,\n }, rules, Rules_tableColumns);\n return sorted.map(function (r, index) { return (react.createElement(Tr.Tr, { key: "automatic-rule-".concat(index) },\n react.createElement(Td.Td, { key: "automatic-rule-enabled-".concat(index), dataLabel: Rules_tableColumns[0].title },\n react.createElement(Switch/* Switch */.r, { "aria-label": "".concat(r.name, " is enabled"), className: \'switch-toggle-\' + String(r.enabled), isChecked: r.enabled, onChange: function (state) { return handleToggle(r, state); } })),\n react.createElement(Td.Td, { key: "automatic-rule-name-".concat(index), dataLabel: Rules_tableColumns[1].title }, r.name),\n react.createElement(Td.Td, { key: "automatic-rule-description-".concat(index), dataLabel: Rules_tableColumns[2].title }, r.description),\n react.createElement(Td.Td, { key: "automatic-rule-matchExpression-".concat(index), dataLabel: Rules_tableColumns[3].title }, r.matchExpression),\n react.createElement(Td.Td, { key: "automatic-rule-eventSpecifier-".concat(index), dataLabel: Rules_tableColumns[4].title }, r.eventSpecifier),\n react.createElement(Td.Td, { key: "automatic-rule-archivalPeriodSeconds-".concat(index), dataLabel: Rules_tableColumns[5].title }, r.archivalPeriodSeconds),\n react.createElement(Td.Td, { key: "automatic-rule-initialDelaySeconds-".concat(index), dataLabel: Rules_tableColumns[6].title }, r.initialDelaySeconds),\n react.createElement(Td.Td, { key: "automatic-rule-preservedArchives-".concat(index), dataLabel: Rules_tableColumns[7].title }, r.preservedArchives),\n react.createElement(Td.Td, { key: "automatic-rule-maxAgeSeconds-".concat(index), dataLabel: Rules_tableColumns[8].title }, r.maxAgeSeconds),\n react.createElement(Td.Td, { key: "automatic-rule-maxSizeBytes-".concat(index), dataLabel: Rules_tableColumns[9].title }, r.maxSizeBytes),\n react.createElement(Td.Td, { key: "automatic-rule-action-".concat(index), isActionCell: true, style: { paddingRight: \'0\' } },\n react.createElement(ActionsColumn/* ActionsColumn */.k, { items: actionResolver(r), menuAppendTo: function () { return document.getElementById(\'automated-rule-toolbar\') || document.body; } })))); });\n }, [rules, sortBy, handleToggle, actionResolver]);\n var viewContent = react.useMemo(function () {\n if (isLoading) {\n return react.createElement(LoadingView/* LoadingView */.J, null);\n }\n else if (!rules.length) {\n return (react.createElement(react.Fragment, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" }, "No Automated Rules"))));\n }\n else {\n return (react.createElement(InnerScrollContainer/* InnerScrollContainer */.F, null,\n react.createElement(TableComposable/* TableComposable */.X, { "aria-label": "Automated Rules Table", variant: TableTypes/* TableVariant.compact */.B.compact },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null, Rules_tableColumns.map(function (_a, index) {\n var title = _a.title, tooltip = _a.tooltip, sortable = _a.sortable;\n return (react.createElement(Th.Th, { key: "automatic-rule-header-".concat(title), sort: sortable ? getSortParams(index) : undefined, info: tooltip\n ? {\n tooltip: tooltip,\n }\n : undefined }, title));\n }))),\n react.createElement(Tbody/* Tbody */.p, null, ruleRows))));\n }\n }, [getSortParams, isLoading, rules, ruleRows]);\n return (react.createElement(react.Fragment, null,\n react.createElement(BreadcrumbPage, { pageTitle: "Automated Rules" },\n react.createElement(Card/* Card */.Z, { "data-quickstart-id": "about-rules" },\n react.createElement(CardTitle/* CardTitle */.l, null, "About Automated Rules"),\n react.createElement(CardBody/* CardBody */.e, null,\n "Automated Rules define a dynamic set of Target JVMs to connect to and start",\n \' \',\n react.createElement(react_router_dom.Link, { to: "/recordings" }, "Active Recordings"),\n " using a specific ",\n react.createElement(react_router_dom.Link, { to: "/events" }, "Event Template"),\n \' \',\n "when the Automated Rule is created and when any new matching Target JVMs appear. If your Target JVM connections require JMX Credentials, you can configure these in ",\n react.createElement(react_router_dom.Link, { to: "/security" }, "Security"),\n ". Automated Rules can be configured to periodically copy the contents of the Active Recording to",\n \' \',\n react.createElement(react_router_dom.Link, { to: "/archives" }, "Archives"),\n " to ensure you always have up-to-date information about your JVMs.")),\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Toolbar/* Toolbar */.o, { id: "automated-rule-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { key: "create", variant: "primary", onClick: handleCreateRule, "data-quickstart-id": "create-rule-btn" }, "Create"),\n \' \',\n react.createElement(Button_Button/* Button */.zx, { key: "upload", variant: "secondary", "aria-label": "Upload", onClick: handleUploadRule },\n react.createElement(upload_icon/* UploadIcon */.rG, null)))),\n ruleToWarn ? (react.createElement(RuleDeleteWarningModal, { warningType: ruleToWarn.type === \'DELETE\'\n ? DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteAutomatedRules */.gF.DeleteAutomatedRules\n : DeleteWarningUtils/* DeleteOrDisableWarningType.DisableAutomatedRules */.gF.DisableAutomatedRules, ruleName: ruleToWarn.rule.name, visible: warningModalOpen, onAccept: handleWarningModalAccept, onClose: handleWarningModalClose, clean: cleanRuleEnabled, setClean: setCleanRuleEnabled })) : (react.createElement(react.Fragment, null)))),\n viewContent))),\n react.createElement(RuleUploadModal, { visible: isUploadModalOpen, onClose: handleUploadModalClose })));\n};\n/* harmony default export */ const Rules_Rules = (Rules);\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownToggleCheckbox.js\nvar DropdownToggleCheckbox = __webpack_require__(9571);\n// EXTERNAL MODULE: ./src/app/SecurityPanel/Credentials/MatchedTargetsTable.tsx\nvar MatchedTargetsTable = __webpack_require__(22345);\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/Credentials/StoreCredentials.tsx\nvar StoreCredentials_assign = (undefined && undefined.__assign) || function () {\n StoreCredentials_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return StoreCredentials_assign.apply(this, arguments);\n};\nvar StoreCredentials_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar StoreCredentials_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Actions;\n(function (Actions) {\n Actions[Actions["HANDLE_REFRESH"] = 0] = "HANDLE_REFRESH";\n Actions[Actions["HANDLE_TARGET_NOTIFICATION"] = 1] = "HANDLE_TARGET_NOTIFICATION";\n Actions[Actions["HANDLE_CREDENTIALS_STORED_NOTIFICATION"] = 2] = "HANDLE_CREDENTIALS_STORED_NOTIFICATION";\n Actions[Actions["HANDLE_CREDENTIALS_DELETED_NOTIFICATION"] = 3] = "HANDLE_CREDENTIALS_DELETED_NOTIFICATION";\n Actions[Actions["HANDLE_ROW_CHECK"] = 4] = "HANDLE_ROW_CHECK";\n Actions[Actions["HANDLE_HEADER_CHECK"] = 5] = "HANDLE_HEADER_CHECK";\n Actions[Actions["HANDLE_NO_MATCH_ROW_CHECK"] = 6] = "HANDLE_NO_MATCH_ROW_CHECK";\n Actions[Actions["HANDLE_ATLEAST_ONE_MATCH_ROW_CHECK"] = 7] = "HANDLE_ATLEAST_ONE_MATCH_ROW_CHECK";\n Actions[Actions["HANDLE_TOGGLE_EXPANDED"] = 8] = "HANDLE_TOGGLE_EXPANDED";\n})(Actions || (Actions = {}));\nvar reducer = function (state, action) {\n switch (action.type) {\n case Actions.HANDLE_REFRESH: {\n var credentials = action.payload.credentials;\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { credentials: credentials });\n }\n case Actions.HANDLE_TARGET_NOTIFICATION: {\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { credentials: state.credentials.map(function (credential) {\n var matched = false;\n try {\n var res = (0,utils/* evaluateTargetWithExpr */.T9)(action.payload.target, credential.matchExpression);\n if (typeof res === \'boolean\') {\n matched = res;\n }\n }\n catch (_error) {\n matched = false;\n }\n if (matched) {\n var delta = action.payload.kind === \'FOUND\' ? 1 : -1;\n return StoreCredentials_assign(StoreCredentials_assign({}, credential), { numMatchingTargets: credential.numMatchingTargets + delta });\n }\n return credential;\n }) });\n }\n case Actions.HANDLE_CREDENTIALS_STORED_NOTIFICATION: {\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { credentials: state.credentials.concat(action.payload.credential) });\n }\n case Actions.HANDLE_CREDENTIALS_DELETED_NOTIFICATION: {\n var deletedCredential_1 = action.payload.credential;\n var deletedIdx = void 0;\n for (deletedIdx = 0; deletedIdx < state.credentials.length; deletedIdx++) {\n if (lodash_default().isEqual(deletedCredential_1, state.credentials[deletedIdx]))\n break;\n }\n var updatedCheckedCredentials = state.checkedCredentials.filter(function (o) { return !lodash_default().isEqual(o, deletedCredential_1); });\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { credentials: state.credentials.filter(function (o) { return !lodash_default().isEqual(o, deletedCredential_1); }), expandedCredentials: state.expandedCredentials.filter(function (o) { return !lodash_default().isEqual(o, deletedCredential_1); }), checkedCredentials: updatedCheckedCredentials, isHeaderChecked: updatedCheckedCredentials.length === 0 ? false : state.isHeaderChecked });\n }\n case Actions.HANDLE_ROW_CHECK: {\n if (action.payload.checked) {\n var checkedCredentials = state.checkedCredentials.concat(action.payload.credential);\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { checkedCredentials: checkedCredentials, isHeaderChecked: checkedCredentials.length === state.credentials.length });\n }\n else {\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { checkedCredentials: state.checkedCredentials.filter(function (o) { return !lodash_default().isEqual(o, action.payload.credential); }), isHeaderChecked: false });\n }\n }\n case Actions.HANDLE_HEADER_CHECK: {\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { checkedCredentials: action.payload.checked ? StoreCredentials_spreadArray([], state.credentials, true) : [], isHeaderChecked: action.payload.checked });\n }\n case Actions.HANDLE_ATLEAST_ONE_MATCH_ROW_CHECK:\n case Actions.HANDLE_NO_MATCH_ROW_CHECK: {\n var noMatch_1 = action.payload.noMatch;\n var checkedCredentials = state.credentials.filter(function (_a) {\n var numMatchingTargets = _a.numMatchingTargets;\n return noMatch_1 ? numMatchingTargets === 0 : numMatchingTargets > 0;\n });\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { checkedCredentials: checkedCredentials, isHeaderChecked: checkedCredentials.length === state.credentials.length });\n }\n case Actions.HANDLE_TOGGLE_EXPANDED: {\n var credential = action.payload.credential;\n var idx = state.expandedCredentials.indexOf(credential);\n var updated = idx >= 0\n ? StoreCredentials_spreadArray(StoreCredentials_spreadArray([], state.expandedCredentials.slice(0, idx), true), state.expandedCredentials.slice(idx + 1, state.expandedCredentials.length), true) : StoreCredentials_spreadArray(StoreCredentials_spreadArray([], state.expandedCredentials, true), [credential], false);\n return StoreCredentials_assign(StoreCredentials_assign({}, state), { expandedCredentials: updated });\n }\n default: {\n return state;\n }\n }\n};\nvar StoreCredentials_tableColumns = [\n {\n title: \'Match Expression\',\n keyPaths: [\'matchExpression\'],\n sortable: true,\n },\n {\n title: \'Matches\',\n keyPaths: [\'numMatchingTargets\'],\n sortable: true,\n },\n];\nvar tableTitle = \'Stored Credentials\';\nvar StoreCredentials = function () {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useReducer(reducer, {\n credentials: [],\n expandedCredentials: [],\n checkedCredentials: [],\n isHeaderChecked: false,\n }), state = _a[0], dispatch = _a[1];\n var _b = (0,useSort/* useSort */.Z)(), sortBy = _b[0], getSortParams = _b[1];\n var _c = react.useState(false), showAuthModal = _c[0], setShowAuthModal = _c[1];\n var _d = react.useState(false), warningModalOpen = _d[0], setWarningModalOpen = _d[1];\n var _e = react.useState(false), isLoading = _e[0], setIsLoading = _e[1];\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var refreshStoredCredentialsAndCounts = react.useCallback(function () {\n setIsLoading(true);\n addSubscription(context.api.getCredentials().subscribe(function (credentials) {\n dispatch({ type: Actions.HANDLE_REFRESH, payload: { credentials: credentials } });\n setIsLoading(false);\n }));\n }, [addSubscription, context.api, setIsLoading]);\n react.useEffect(function () {\n refreshStoredCredentialsAndCounts();\n }, [refreshStoredCredentialsAndCounts]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return refreshStoredCredentialsAndCounts(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.target, context.settings, refreshStoredCredentialsAndCounts]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel.messages(NotificationChannel_service/* NotificationCategory.CredentialsStored */.mN.CredentialsStored).subscribe(function (v) {\n dispatch({ type: Actions.HANDLE_CREDENTIALS_STORED_NOTIFICATION, payload: { credential: v.message } });\n }));\n }, [addSubscription, context, context.notificationChannel]);\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.CredentialsDeleted */.mN.CredentialsDeleted)\n .pipe((0,concatMap/* concatMap */.b)(function (v) {\n return (0,of.of)(dispatch({ type: Actions.HANDLE_CREDENTIALS_DELETED_NOTIFICATION, payload: { credential: v.message } }));\n }))\n .subscribe(function () { return undefined; } /* do nothing - dispatch will have already handled updating state */));\n }, [addSubscription, context, context.notificationChannel]);\n var handleTargetNotification = function (evt) {\n dispatch({ type: Actions.HANDLE_TARGET_NOTIFICATION, payload: { target: evt.serviceRef, kind: evt.kind } });\n };\n react.useEffect(function () {\n addSubscription(context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.TargetJvmDiscovery */.mN.TargetJvmDiscovery)\n .pipe((0,concatMap/* concatMap */.b)(function (v) { return (0,of.of)(handleTargetNotification(v.message.event)); }))\n .subscribe(function () { return undefined; } /* do nothing - dispatch will have already handled updating state */));\n }, [addSubscription, context, context.notificationChannel]);\n var handleHeaderCheck = react.useCallback(function (checked) {\n dispatch({ type: Actions.HANDLE_HEADER_CHECK, payload: { checked: checked } });\n }, []);\n var handleDeleteCredentials = react.useCallback(function () {\n var tasks = [];\n state.credentials.forEach(function (credential) {\n if (state.checkedCredentials.includes(credential)) {\n tasks.push(context.api.deleteCredentials(credential.id));\n }\n });\n addSubscription((0,forkJoin/* forkJoin */.D)(tasks).subscribe());\n }, [state.credentials, state.checkedCredentials, context.api, addSubscription]);\n var handleAuthModalOpen = react.useCallback(function () {\n setShowAuthModal(true);\n }, [setShowAuthModal]);\n var handleAuthModalClose = react.useCallback(function () {\n setShowAuthModal(false);\n }, [setShowAuthModal]);\n var handleDeleteButton = react.useCallback(function () {\n if (context.settings.deletionDialogsEnabledFor(DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteCredentials */.gF.DeleteCredentials)) {\n setWarningModalOpen(true);\n }\n else {\n handleDeleteCredentials();\n }\n }, [context.settings, setWarningModalOpen, handleDeleteCredentials]);\n var handleWarningModalClose = react.useCallback(function () {\n setWarningModalOpen(false);\n }, [setWarningModalOpen]);\n var TargetCredentialsToolbar = function () {\n var buttons = react.useMemo(function () {\n var arr = [\n react.createElement(Button_Button/* Button */.zx, { key: "add", variant: "primary", "aria-label": "add-credential", onClick: handleAuthModalOpen }, "Add"),\n react.createElement(Button_Button/* Button */.zx, { key: "delete", variant: "danger", "aria-label": "delete-selected-credential", onClick: handleDeleteButton, isDisabled: !state.checkedCredentials.length }, "Delete"),\n ];\n return (react.createElement(react.Fragment, null, arr.map(function (btn, idx) { return (react.createElement(ToolbarItem/* ToolbarItem */.E, { key: idx }, btn)); })));\n }, []);\n var deleteCredentialModal = react.useMemo(function () {\n return (react.createElement(DeleteWarningModal, { warningType: DeleteWarningUtils/* DeleteOrDisableWarningType.DeleteCredentials */.gF.DeleteCredentials, visible: warningModalOpen, onAccept: handleDeleteCredentials, onClose: handleWarningModalClose }));\n }, []);\n return (react.createElement(Toolbar/* Toolbar */.o, { id: "target-credentials-toolbar" },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null, buttons),\n deleteCredentialModal));\n };\n var matchExpressionRows = react.useMemo(function () {\n return (0,utils/* sortResources */.rg)(sortBy, state.credentials, StoreCredentials_tableColumns).map(function (credential, idx) {\n var isExpanded = state.expandedCredentials.includes(credential);\n var isChecked = state.checkedCredentials.includes(credential);\n var handleToggleExpanded = function () {\n dispatch({ type: Actions.HANDLE_TOGGLE_EXPANDED, payload: { credential: credential } });\n };\n var handleRowCheck = function (checked) {\n dispatch({ type: Actions.HANDLE_ROW_CHECK, payload: { checked: checked, credential: credential } });\n };\n return (react.createElement(Tr.Tr, { key: "".concat(idx, "_parent") },\n react.createElement(Td.Td, { key: "credentials-table-row-".concat(idx, "_0"), id: "credentials-ex-toggle-".concat(idx), "aria-controls": "credentials-ex-expand-".concat(idx), expand: {\n rowIndex: idx,\n isExpanded: isExpanded,\n onToggle: handleToggleExpanded,\n } }),\n react.createElement(Td.Td, { key: "credentials-table-row-".concat(idx, "_1") },\n react.createElement(Checkbox/* Checkbox */.X, { name: "credentials-table-row-".concat(idx, "-check"), onChange: handleRowCheck, isChecked: isChecked, id: "credentials-table-row-".concat(idx, "-check"), "aria-label": "credentials-table-row-".concat(idx, "-check") })),\n react.createElement(Td.Td, { key: "credentials-table-row-".concat(idx, "_2"), dataLabel: StoreCredentials_tableColumns[0].title }, credential.matchExpression),\n react.createElement(Td.Td, { key: "credentials-table-row-".concat(idx, "_3"), dataLabel: StoreCredentials_tableColumns[1].title },\n react.createElement(Badge/* Badge */.C, { key: "".concat(idx, "_count") }, credential.numMatchingTargets))));\n });\n }, [state.credentials, state.expandedCredentials, state.checkedCredentials, sortBy]);\n var targetRows = react.useMemo(function () {\n return state.credentials.map(function (credential, idx) {\n var isExpanded = state.expandedCredentials.includes(credential);\n return (react.createElement(Tr.Tr, { key: "".concat(idx, "_child"), isExpanded: isExpanded },\n react.createElement(Td.Td, { key: "credentials-ex-expand-".concat(idx), dataLabel: \'Content Details\', colSpan: StoreCredentials_tableColumns.length + 2 }, isExpanded ? (react.createElement(ExpandableRowContent/* ExpandableRowContent */.G, null,\n react.createElement(MatchedTargetsTable/* MatchedTargetsTable */.a, { id: credential.id, matchExpression: credential.matchExpression }))) : null)));\n });\n }, [state.credentials, state.expandedCredentials]);\n var rowPairs = react.useMemo(function () {\n var rowPairs = [];\n for (var i = 0; i < matchExpressionRows.length; i++) {\n rowPairs.push(matchExpressionRows[i]);\n rowPairs.push(targetRows[i]);\n }\n return rowPairs;\n }, [matchExpressionRows, targetRows]);\n var handleNoMatchSelect = react.useCallback(function () {\n dispatch({ type: Actions.HANDLE_NO_MATCH_ROW_CHECK, payload: { noMatch: true } });\n }, [dispatch]);\n var handleAtLeatOneSelect = react.useCallback(function () {\n dispatch({ type: Actions.HANDLE_ATLEAST_ONE_MATCH_ROW_CHECK, payload: { noMatch: false } });\n }, []);\n var content;\n if (isLoading) {\n content = (react.createElement(react.Fragment, null,\n react.createElement(LoadingView/* LoadingView */.J, null)));\n }\n else if (state.credentials.length === 0) {\n content = (react.createElement(react.Fragment, null,\n react.createElement(EmptyState/* EmptyState */.u, null,\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: search_icon/* SearchIcon */.W1 }),\n react.createElement(Title/* Title */.D, { headingLevel: "h4", size: "lg" },\n "No ",\n tableTitle))));\n }\n else {\n content = (react.createElement(react.Fragment, null,\n react.createElement(TableComposable/* TableComposable */.X, { "aria-label": tableTitle },\n react.createElement(Thead/* Thead */.h, null,\n react.createElement(Tr.Tr, null,\n react.createElement(Th.Th, { key: "table-header-expand" }),\n react.createElement(Th.Th, { key: "table-header-check-all" },\n react.createElement(CheckBoxActions, { isSelectAll: state.isHeaderChecked, onSelectAll: handleHeaderCheck, onAtLeastOneMatchSelect: handleAtLeatOneSelect, onNoMatchSelect: handleNoMatchSelect })),\n StoreCredentials_tableColumns.map(function (_a, index) {\n var title = _a.title;\n return (react.createElement(Th.Th, { key: "table-header-".concat(title), width: title === \'Match Expression\' ? 80 : 10, sort: getSortParams(index) }, title));\n }))),\n react.createElement(Tbody/* Tbody */.p, null, rowPairs))));\n }\n return (react.createElement(react.Fragment, null,\n react.createElement(TargetCredentialsToolbar, null),\n content,\n react.createElement(CreateCredentialModal, { visible: showAuthModal, onDismiss: handleAuthModalClose, onPropsSave: handleAuthModalClose })));\n};\nvar CheckBoxActions = function (_a) {\n var onNoMatchSelect = _a.onNoMatchSelect, onAtLeastOneMatchSelect = _a.onAtLeastOneMatchSelect, onSelectAll = _a.onSelectAll, isSelectAll = _a.isSelectAll, props = StoreCredentials_rest(_a, ["onNoMatchSelect", "onAtLeastOneMatchSelect", "onSelectAll", "isSelectAll"]);\n var _b = react.useState(false), isOpen = _b[0], setIsOpen = _b[1];\n var handleToggle = react.useCallback(function () { return setIsOpen(function (old) { return !old; }); }, [setIsOpen]);\n var dropdownItems = react.useMemo(function () {\n return [\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "action", onClick: onNoMatchSelect }, "No Match Only"),\n react.createElement(DropdownItem/* DropdownItem */.h, { key: "action", onClick: onAtLeastOneMatchSelect }, ">= 1 Match Only"),\n ];\n }, [onNoMatchSelect, onAtLeastOneMatchSelect]);\n return (react.createElement(Dropdown/* Dropdown */.L, StoreCredentials_assign({}, props, { onSelect: function () {\n setIsOpen(false);\n }, toggle: react.createElement(DropdownToggle/* DropdownToggle */.Z, { splitButtonItems: [\n react.createElement(DropdownToggleCheckbox/* DropdownToggleCheckbox */.o, { id: "select-all-credentials", key: "select-all-credentials", "aria-label": "Select all", isChecked: isSelectAll, onChange: onSelectAll }),\n ], onToggle: handleToggle, id: "select-all-toggle" }), isOpen: isOpen, dropdownItems: dropdownItems, menuAppendTo: document.body })));\n};\nvar StoreCredentialsCard = {\n title: \'Store Credentials\',\n description: (react.createElement(Text/* Text */.x, null,\n "Credentials that Cryostat uses to connect to Cryostat agents or target JVMs over JMX are stored here. These are stored in encrypted storage managed by the Cryostat backend. These credentials may be used for manually managing recordings and event templates on target JVMs, as well as for Automated Rules which run in the background and open unattended target connections. Any locally-stored client credentials held by your browser session are not displayed here. See ",\n react.createElement(react_router_dom.Link, { to: "/settings" }, "Settings"),\n " to configure locally-stored credentials.")),\n content: StoreCredentials,\n};\n\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/CertificateUploadModal.tsx\nvar CertificateUploadModal_assign = (undefined && undefined.__assign) || function () {\n CertificateUploadModal_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CertificateUploadModal_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar CertificateUploadModal = function (_a) {\n var visible = _a.visible, onClose = _a.onClose;\n var addSubscriptions = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var submitRef = react.useRef(null); // Use ref to refer to submit trigger div\n var abortRef = react.useRef(null); // Use ref to refer to abort trigger div\n var _b = react.useState(false), allOks = _b[0], setAllOks = _b[1];\n var _c = react.useState(false), uploading = _c[0], setUploading = _c[1];\n var _d = react.useState(0), numOfFiles = _d[0], setNumOfFiles = _d[1];\n var reset = react.useCallback(function () {\n setUploading(false);\n setNumOfFiles(0);\n }, [setUploading, setNumOfFiles]);\n var onFilesChange = react.useCallback(function (fileUploads) {\n setAllOks(!fileUploads.some(function (f) { return !f.progress || f.progress.progressVariant !== \'success\'; }));\n setNumOfFiles(fileUploads.length);\n }, [setNumOfFiles, setAllOks]);\n var handleClose = react.useCallback(function () {\n if (uploading) {\n abortRef.current && abortRef.current.click();\n }\n else {\n reset();\n onClose();\n }\n }, [uploading, reset, onClose]);\n var handleSubmit = react.useCallback(function () {\n submitRef.current && submitRef.current.click();\n }, []);\n var onFileSubmit = react.useCallback(function (fileUploads, _a) {\n var getProgressUpdateCallback = _a.getProgressUpdateCallback, onSingleSuccess = _a.onSingleSuccess, onSingleFailure = _a.onSingleFailure;\n setUploading(true);\n var tasks = [];\n fileUploads.forEach(function (fileUpload) {\n tasks.push(context.api\n .uploadSSLCertificate(fileUpload.file, getProgressUpdateCallback(fileUpload.file.name), fileUpload.abortSignal)\n .pipe((0,tap/* tap */.b)({\n next: function () {\n onSingleSuccess(fileUpload.file.name);\n },\n error: function (err) {\n onSingleFailure(fileUpload.file.name, err);\n },\n }), (0,catchError/* catchError */.K)(function (_) { return (0,of.of)(false); })));\n });\n addSubscriptions((0,forkJoin/* forkJoin */.D)(tasks)\n .pipe((0,defaultIfEmpty/* defaultIfEmpty */.d)([true]))\n .subscribe(function (oks) {\n setUploading(false);\n setAllOks(oks.reduce(function (prev, curr, _) { return prev && curr; }, true));\n }));\n }, [setUploading, context.api, addSubscriptions, setAllOks]);\n var submitButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Submitting\',\n spinnerAriaLabel: \'submitting-ssl-certificates\',\n isLoading: uploading,\n });\n }, [uploading]);\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: visible, variant: Modal/* ModalVariant.large */.v.large, showClose: true, onClose: handleClose, title: "Upload SSL certificate", description: "Select a certificate file to upload. Certificates must be DER-encoded (can be binary or base64) and can have .der or .cer extensions." },\n react.createElement(Form/* Form */.l, null,\n react.createElement(FormGroup/* FormGroup */.c, { label: "Certificate File", isRequired: true, fieldId: "file" },\n react.createElement(MultiFileUpload, { submitRef: submitRef, abortRef: abortRef, uploading: uploading, dropZoneAccepts: [\'application/x-x509-ca-cert\', \'application/pkix-cert\'], displayAccepts: [\'CER\', \'DER\'], onFileSubmit: onFileSubmit, onFilesChange: onFilesChange })),\n react.createElement(ActionGroup/* ActionGroup */.W, null, allOks && numOfFiles ? (react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClose }, "Close")) : (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, CertificateUploadModal_assign({ variant: "primary", onClick: handleSubmit, isDisabled: !numOfFiles || uploading }, submitButtonLoadingProps), uploading ? \'Submitting\' : \'Submit\'),\n react.createElement(Button_Button/* Button */.zx, { variant: "link", onClick: handleClose }, "Cancel")))))));\n};\n\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/ImportCertificate.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar ImportCertificate_Component = function () {\n var _a = react.useState(false), showModal = _a[0], setShowModal = _a[1];\n var handleModalClose = function () {\n setShowModal(false);\n };\n return (react.createElement(react.Fragment, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", "aria-label": "import", onClick: function () { return setShowModal(true); } }, "Upload"),\n react.createElement(CertificateUploadModal, { visible: showModal, onClose: handleModalClose })));\n};\nvar ImportCertificate = {\n title: \'Import SSL Certificates\',\n description: \'Restart is needed to apply changes.\',\n content: ImportCertificate_Component,\n};\n\n;// CONCATENATED MODULE: ./src/app/SecurityPanel/SecurityPanel.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\nvar SecurityPanel = function (_) {\n var securityCards = [ImportCertificate, StoreCredentialsCard].map(function (c) { return ({\n title: c.title,\n description: c.description,\n element: react.createElement(c.content, null),\n }); });\n return (react.createElement(BreadcrumbPage, { pageTitle: "Security" }, securityCards.map(function (s) { return (react.createElement(Card/* Card */.Z, { key: s.title },\n react.createElement(CardTitle/* CardTitle */.l, null,\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.h1 */.q.h1 }, s.title),\n react.createElement(Text/* Text */.x, { component: Text/* TextVariants.small */.q.small }, s.description)),\n react.createElement(CardBody/* CardBody */.e, null, s.element))); })));\n};\n/* harmony default export */ const SecurityPanel_SecurityPanel = (SecurityPanel);\n\n;// CONCATENATED MODULE: ./src/app/utils/useLogin.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar useLogin = function () {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), loggedIn = _a[0], setLoggedIn = _a[1];\n react.useEffect(function () {\n var sub = context.login\n .getSessionState()\n .subscribe(function (sessionState) { return setLoggedIn(sessionState === Login_service/* SessionState.USER_SESSION */.sM.USER_SESSION); });\n return function () { return sub.unsubscribe(); };\n }, [context.login, setLoggedIn]);\n return loggedIn;\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/AutomatedAnalysisConfig.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar AutomatedAnalysisConfig_Component = function () {\n return react.createElement(AutomatedAnalysisConfigForm, { inlineForm: true });\n};\nvar AutomatedAnalysisConfig = {\n titleKey: \'SETTINGS.AUTOMATED_ANALYSIS_CONFIG.TITLE\',\n descConstruct: \'SETTINGS.AUTOMATED_ANALYSIS_CONFIG.DESCRIPTION\',\n content: AutomatedAnalysisConfig_Component,\n category: SettingsUtils/* SettingTab.DASHBOARD */.BM.DASHBOARD,\n authenticated: true,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/AutoRefresh.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar AutoRefresh_assign = (undefined && undefined.__assign) || function () {\n AutoRefresh_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return AutoRefresh_assign.apply(this, arguments);\n};\n\n\n\n\n\n\nvar defaultPreferences = {\n autoRefreshEnabled: true,\n autoRefreshPeriod: 30,\n autoRefreshUnits: 1000,\n};\nvar AutoRefresh_Component = function () {\n var t = (0,es/* useTranslation */.$G)()[0];\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(defaultPreferences), state = _a[0], setState = _a[1];\n react.useLayoutEffect(function () {\n setState({\n autoRefreshEnabled: context.settings.autoRefreshEnabled(),\n autoRefreshPeriod: context.settings.autoRefreshPeriod(),\n autoRefreshUnits: context.settings.autoRefreshUnits(),\n });\n }, [setState, context.settings]);\n var handleAutoRefreshEnabledChange = react.useCallback(function (autoRefreshEnabled) {\n setState(function (state) { return (AutoRefresh_assign(AutoRefresh_assign({}, state), { autoRefreshEnabled: autoRefreshEnabled })); });\n context.settings.setAutoRefreshEnabled(autoRefreshEnabled);\n }, [setState, context.settings]);\n var handleAutoRefreshPeriodChange = react.useCallback(function (autoRefreshPeriod) {\n setState(function (state) { return (AutoRefresh_assign(AutoRefresh_assign({}, state), { autoRefreshPeriod: autoRefreshPeriod })); });\n context.settings.setAutoRefreshPeriod(autoRefreshPeriod);\n }, [setState, context.settings]);\n var handleAutoRefreshUnitScalarChange = react.useCallback(function (autoRefreshUnits) {\n setState(function (state) { return (AutoRefresh_assign(AutoRefresh_assign({}, state), { autoRefreshUnits: autoRefreshUnits })); });\n context.settings.setAutoRefreshUnits(autoRefreshUnits);\n }, [setState, context.settings]);\n return (react.createElement(react.Fragment, null,\n react.createElement(DurationPicker, { enabled: state.autoRefreshEnabled, period: state.autoRefreshPeriod, onPeriodChange: handleAutoRefreshPeriodChange, unitScalar: state.autoRefreshUnits, onUnitScalarChange: handleAutoRefreshUnitScalarChange }),\n react.createElement(Checkbox/* Checkbox */.X, { id: "auto-refresh-enabled", label: t(\'SETTINGS.AUTO_REFRESH.CHECKBOX_LABEL\'), isChecked: state.autoRefreshEnabled, onChange: handleAutoRefreshEnabledChange, "data-quickstart-id": "settings-connectivity-tab-auto-refresh" })));\n};\nvar AutoRefresh = {\n titleKey: \'SETTINGS.AUTO_REFRESH.TITLE\',\n descConstruct: \'SETTINGS.AUTO_REFRESH.DESCRIPTION\',\n content: AutoRefresh_Component,\n category: SettingsUtils/* SettingTab.CONNECTIVITY */.BM.CONNECTIVITY,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/ChartCardsConfig.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\nvar min = 1;\nvar ChartCardsConfig_Component = function () {\n var t = (0,es/* useTranslation */.$G)()[0];\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(context.settings.chartControllerConfig().minRefresh), minRefresh = _a[0], setMinRefresh = _a[1];\n var handleChange = react.useCallback(function (evt) {\n setMinRefresh(function (prev) {\n var value = isNaN(evt.target.value) ? prev : Number(evt.target.value);\n if (value < min) {\n value = min;\n }\n context.settings.setChartControllerConfig({ minRefresh: value });\n return value;\n });\n }, [setMinRefresh, context.settings]);\n var handleVisibleStep = react.useCallback(function (delta) { return function () {\n var v = minRefresh + delta;\n context.settings.setChartControllerConfig({ minRefresh: v });\n setMinRefresh(v);\n }; }, [minRefresh, context.settings]);\n return (react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'SETTINGS.CHARTS_CONFIG.REFRESH_RATE_SETTING\'))),\n react.createElement(NumberInput/* NumberInput */.Y, { inputName: "minRefresh", value: minRefresh, min: min, onChange: handleChange, onMinus: handleVisibleStep(-1), onPlus: handleVisibleStep(1), unit: t(\'SECOND\', { ns: \'common\' }) })))));\n};\nvar ChartCardsConfig = {\n titleKey: \'SETTINGS.CHARTS_CONFIG.TITLE\',\n descConstruct: \'SETTINGS.CHARTS_CONFIG.DESCRIPTION\',\n content: ChartCardsConfig_Component,\n category: SettingsUtils/* SettingTab.DASHBOARD */.BM.DASHBOARD,\n};\n\n// EXTERNAL MODULE: ./src/app/Settings/CredentialsStorage.tsx\nvar CredentialsStorage = __webpack_require__(74841);\n;// CONCATENATED MODULE: ./src/app/Settings/DatetimeControl.tsx\nvar DatetimeControl_assign = (undefined && undefined.__assign) || function () {\n DatetimeControl_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return DatetimeControl_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\nvar DatetimeControl_Component = function () {\n var t = (0,es/* useTranslation */.$G)()[0];\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), dateLocaleOpen = _a[0], setDateLocaleOpen = _a[1];\n var _b = utils_useDayjs(), _ = _b[0], datetimeFormat = _b[1];\n var handleDateLocaleSelect = react.useCallback(function (_, locale) {\n setDateLocaleOpen(false);\n context.settings.setDatetimeFormat(DatetimeControl_assign(DatetimeControl_assign({}, datetimeFormat), { dateLocale: {\n name: locale.name,\n key: locale.key,\n } }));\n }, [context.settings, datetimeFormat, setDateLocaleOpen]);\n var handleTimezoneSelect = react.useCallback(function (timezone) {\n context.settings.setDatetimeFormat(DatetimeControl_assign(DatetimeControl_assign({}, datetimeFormat), { timeZone: {\n short: timezone.short,\n full: timezone.full,\n } }));\n }, [context.settings, datetimeFormat]);\n var dateLocaleOptions = react.useMemo(function () {\n return i18n_datetime/* locales.map */.k1.map(function (locale) { return (react.createElement(SelectOption/* SelectOption */.$, { key: locale.key, description: locale.key, value: DatetimeControl_assign(DatetimeControl_assign({}, locale), { toString: function () { return locale.name; }, compareTo: function (val) { return locale.name === val.name; } }) }, locale.name)); });\n }, []);\n var handleDateLocaleFilter = react.useCallback(function (_, value) {\n if (!value) {\n return dateLocaleOptions;\n }\n var matchExp = new RegExp(value, \'i\');\n return dateLocaleOptions.filter(function (opt) { return matchExp.test(opt.props.value.name) || matchExp.test(opt.props.description); });\n }, [dateLocaleOptions]);\n return (react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, { key: \'date-locale-select\' },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'SETTINGS.DATETIME_CONTROL.LOCALE_SELECT_DESCRIPTION\'))),\n react.createElement(Select/* Select */.P, { "aria-label": t(\'SETTINGS.DATETIME_CONTROL.ARIA_LABELS.LOCALE_SELECT\') || \'\', isOpen: dateLocaleOpen, onToggle: setDateLocaleOpen, isFlipEnabled: true, menuAppendTo: "parent", selections: DatetimeControl_assign(DatetimeControl_assign({}, datetimeFormat.dateLocale), { toString: function () { return datetimeFormat.dateLocale.name; }, compareTo: function (val) { return datetimeFormat.dateLocale.name === val.name; } }), hasInlineFilter: true, maxHeight: \'16em\', onFilter: handleDateLocaleFilter, onSelect: handleDateLocaleSelect }, dateLocaleOptions))),\n react.createElement(StackItem/* StackItem */.v, { key: \'timezone-select\' },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'SETTINGS.DATETIME_CONTROL.TIMEZONE_SELECT_DESCRIPTION\'))),\n react.createElement(TimezonePicker, { selected: datetimeFormat.timeZone, menuAppendTo: "parent", isFlipEnabled: true, onTimezoneChange: handleTimezoneSelect })))));\n};\nvar DatetimeControl = {\n titleKey: \'SETTINGS.DATETIME_CONTROL.TITLE\',\n descConstruct: \'SETTINGS.DATETIME_CONTROL.DESCRIPTION\',\n content: DatetimeControl_Component,\n category: SettingsUtils/* SettingTab.GENERAL */.BM.GENERAL,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/DeletionDialogControl.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar DeletionDialogControl_Component = function () {\n var t = (0,es/* useTranslation */.$G)()[0];\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(context.settings.deletionDialogsEnabled()), state = _a[0], setState = _a[1];\n var _b = react.useState(false), expanded = _b[0], setExpanded = _b[1];\n var handleCheckboxChange = react.useCallback(function (checked, element) {\n state.set(DeleteWarningUtils/* DeleteOrDisableWarningType */.gF[element.target.id], checked);\n context.settings.setDeletionDialogsEnabled(state);\n setState(new Map(state));\n }, [state, setState, context.settings]);\n var handleCheckAll = react.useCallback(function (checked) {\n var newState = new Map();\n Array.from(state.entries()).forEach(function (v) { return newState.set(v[0], checked); });\n context.settings.setDeletionDialogsEnabled(newState);\n setState(newState);\n }, [context.settings, setState, state]);\n var allChecked = react.useMemo(function () {\n return Array.from(state.entries())\n .map(function (e) { return e[1]; })\n .reduce(function (a, b) { return a && b; });\n }, [state]);\n var switches = react.useMemo(function () {\n return Array.from(state.entries(), function (_a) {\n var _b;\n var key = _a[0], value = _a[1];\n return (react.createElement(StackItem/* StackItem */.v, { key: key },\n react.createElement(Switch/* Switch */.r, { id: key, label: ((_b = (0,DeleteWarningUtils/* getFromWarningMap */.Y1)(key)) === null || _b === void 0 ? void 0 : _b.label) || key.toString(), isChecked: value, onChange: handleCheckboxChange })));\n });\n }, [handleCheckboxChange, state]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, { key: "all-deletion-warnings" },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'SETTINGS.DELETION_DIALOG_CONTROL.SWITCH_DESCRIPTION\'))),\n react.createElement(Switch/* Switch */.r, { id: "all-deletion-warnings", label: t(\'SETTINGS.DELETION_DIALOG_CONTROL.SWITCH_LABEL\'), isChecked: allChecked, onChange: handleCheckAll }))),\n react.createElement(StackItem/* StackItem */.v, { key: \'expandable-delete-warning-switch-list\' },\n react.createElement(ExpandableSection/* ExpandableSection */.L, { toggleText: (expanded ? t(\'SHOW_LESS\', { ns: \'common\' }) : t(\'SHOW_MORE\', { ns: \'common\' })) || \'\', onToggle: setExpanded, isExpanded: expanded }, switches)))));\n};\nvar DeletionDialogControl = {\n titleKey: \'SETTINGS.DELETION_DIALOG_CONTROL.TITLE\',\n descConstruct: \'SETTINGS.DELETION_DIALOG_CONTROL.DESCRIPTION\',\n content: DeletionDialogControl_Component,\n category: SettingsUtils/* SettingTab.NOTIFICATION_MESSAGE */.BM.NOTIFICATION_MESSAGE,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/FeatureLevels.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar FeatureLevels_assign = (undefined && undefined.__assign) || function () {\n FeatureLevels_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return FeatureLevels_assign.apply(this, arguments);\n};\n\n\n\n\n\n\n\nvar FeatureLevels_Component = function () {\n var t = (0,es/* useTranslation */.$G)()[0];\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState(Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION), state = _a[0], setState = _a[1];\n var _b = react.useState(false), open = _b[0], setOpen = _b[1];\n react.useLayoutEffect(function () {\n addSubscription(context.settings.featureLevel().subscribe(function (level) { return setState(level); }));\n }, [addSubscription, context.settings, setState]);\n var handleToggle = react.useCallback(function () {\n setOpen(function (v) { return !v; });\n }, [setOpen]);\n var handleSelect = react.useCallback(function (_, v) {\n setState(v.value);\n context.settings.setFeatureLevel(v.value);\n setOpen(false);\n }, [setState, setOpen, context.settings]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Select/* Select */.P, { isOpen: open, onToggle: handleToggle, selections: FeatureLevels_assign({ value: state }, { toString: function () { return t(Settings_service/* FeatureLevel */.Lu[state]); }, compareTo: function (val) { return val.value === state; } }), onSelect: handleSelect, isFlipEnabled: true, menuAppendTo: "parent" }, Object.values(Settings_service/* FeatureLevel */.Lu)\n .filter(function (v) { return typeof v === \'string\'; })\n .map(function (v) { return ({ key: String(v), value: Settings_service/* FeatureLevel */.Lu[v] }); })\n .filter(function (v) {\n if (true) {\n return v.value !== Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT;\n }\n return true;\n })\n .map(function (level) { return (react.createElement(SelectOption/* SelectOption */.$, { key: level.key, value: FeatureLevels_assign({ value: level.value }, { toString: function () { return t(level.key); }, compareTo: function (val) { return val.value === level.value; } }) }, level.key)); }))));\n};\nvar FeatureLevels = {\n titleKey: \'SETTINGS.FEATURE_LEVEL.TITLE\',\n descConstruct: \'SETTINGS.FEATURE_LEVEL.DESCRIPTION\',\n content: FeatureLevels_Component,\n category: SettingsUtils/* SettingTab.ADVANCED */.BM.ADVANCED,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/NotificationControl.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\nvar NotificationControl_min = 0;\nvar max = 10;\nvar NotificationControl_Component = function () {\n var t = (0,es/* useTranslation */.$G)()[0];\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _a = react.useState(context.settings.notificationsEnabled()), state = _a[0], setState = _a[1];\n var _b = react.useState(5), visibleNotificationsCount = _b[0], setVisibleNotificationsCount = _b[1];\n var _c = react.useState(false), expanded = _c[0], setExpanded = _c[1];\n react.useEffect(function () {\n addSubscription(context.settings.visibleNotificationsCount().subscribe(setVisibleNotificationsCount));\n }, [addSubscription, context.settings, setVisibleNotificationsCount]);\n var handleCheckboxChange = react.useCallback(function (checked, element) {\n state.set(NotificationChannel_service/* NotificationCategory */.mN[element.target.id], checked);\n context.settings.setNotificationsEnabled(state);\n setState(new Map(state));\n }, [state, setState, context.settings]);\n var handleCheckAll = react.useCallback(function (checked) {\n var newState = new Map();\n Array.from(state.entries()).forEach(function (v) { return newState.set(v[0], checked); });\n context.settings.setNotificationsEnabled(newState);\n setState(newState);\n }, [context.settings, setState, state]);\n var handleChange = react.useCallback(function (evt) {\n var value = isNaN(evt.target.value) ? visibleNotificationsCount : Number(evt.target.value);\n if (value < NotificationControl_min) {\n value = NotificationControl_min;\n }\n else if (value > max) {\n value = max;\n }\n context.settings.setVisibleNotificationCount(value);\n }, [visibleNotificationsCount, context.settings]);\n var handleVisibleStep = react.useCallback(function (delta) { return function () {\n var v = visibleNotificationsCount + delta;\n context.settings.setVisibleNotificationCount(v);\n }; }, [visibleNotificationsCount, context.settings]);\n var allChecked = react.useMemo(function () {\n return Array.from(state.entries())\n .map(function (e) { return e[1]; })\n .reduce(function (a, b) { return a && b; });\n }, [state]);\n var labels = react.useMemo(function () {\n var result = new Map();\n NotificationChannel_service/* messageKeys.forEach */.NB.forEach(function (v, k) {\n result.set(k, (v === null || v === void 0 ? void 0 : v.title) || k);\n });\n return result;\n }, []);\n var switches = react.useMemo(function () {\n return Array.from(state.entries(), function (_a) {\n var key = _a[0], value = _a[1];\n return (react.createElement(StackItem/* StackItem */.v, { key: key },\n react.createElement(Switch/* Switch */.r, { id: key, label: labels.get(key), isChecked: value, onChange: handleCheckboxChange })));\n });\n }, [handleCheckboxChange, state, labels]);\n return (react.createElement(react.Fragment, null,\n react.createElement(Stack/* Stack */.K, { hasGutter: true },\n react.createElement(StackItem/* StackItem */.v, { key: "all-notifications" },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'SETTINGS.NOTIFICATION_CONTROL.INPUT_DESCRIPTION\'))),\n react.createElement(Switch/* Switch */.r, { id: "all-notifications", label: t(\'SETTINGS.NOTIFICATION_CONTROL.SWITCH_LABEL\'), isChecked: allChecked, onChange: handleCheckAll }))),\n react.createElement(StackItem/* StackItem */.v, { key: "notifications-notification-count" },\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, t(\'SETTINGS.NOTIFICATION_CONTROL.INPUT\'))),\n react.createElement(NumberInput/* NumberInput */.Y, { inputName: "alert count", value: visibleNotificationsCount, min: NotificationControl_min, max: max, onChange: handleChange, onMinus: handleVisibleStep(-1), onPlus: handleVisibleStep(1) }))),\n react.createElement(StackItem/* StackItem */.v, { key: \'expandable-noti-switch-list\' },\n react.createElement(ExpandableSection/* ExpandableSection */.L, { toggleText: (expanded ? t(\'SHOW_LESS\', { ns: \'common\' }) : t(\'SHOW_MORE\', { ns: \'common\' })) || \'\', onToggle: setExpanded, isExpanded: expanded }, switches)))));\n};\nvar NotificationControl = {\n titleKey: \'SETTINGS.NOTIFICATION_CONTROL.TITLE\',\n descConstruct: \'SETTINGS.NOTIFICATION_CONTROL.DESCRIPTION\',\n content: NotificationControl_Component,\n category: SettingsUtils/* SettingTab.NOTIFICATION_MESSAGE */.BM.NOTIFICATION_MESSAGE,\n orderInGroup: 1,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/Theme.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\nvar Theme_Component = function () {\n var t = (0,es/* useTranslation */.$G)().t;\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(false), open = _a[0], setOpen = _a[1];\n var _b = useTheme(), _theme = _b[0], setting = _b[1];\n var handleThemeToggle = react.useCallback(function () { return setOpen(function (v) { return !v; }); }, [setOpen]);\n var handleThemeSelect = react.useCallback(function (_, v) {\n context.settings.setThemeSetting(v);\n setOpen(false);\n }, [context.settings, setOpen]);\n return (react.createElement(Select/* Select */.P, { isOpen: open, "aria-label": t(\'SETTINGS.THEME.SELECT.LABEL\'), onToggle: handleThemeToggle, onSelect: handleThemeSelect, selections: setting, isFlipEnabled: true, menuAppendTo: "parent" },\n react.createElement(SelectOption/* SelectOption */.$, { key: "auto", value: "auto" }, t(\'SETTINGS.THEME.AUTO\')),\n react.createElement(SelectOption/* SelectOption */.$, { key: "light", value: "light" }, t(\'SETTINGS.THEME.LIGHT\')),\n react.createElement(SelectOption/* SelectOption */.$, { key: "dark", value: "dark" }, t(\'SETTINGS.THEME.DARK\'))));\n};\nvar Theme = {\n titleKey: \'SETTINGS.THEME.TITLE\',\n descConstruct: \'SETTINGS.THEME.DESCRIPTION\',\n content: Theme_Component,\n category: SettingsUtils/* SettingTab.GENERAL */.BM.GENERAL,\n orderInGroup: 2,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/WebSocketDebounce.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar WebSocketDebounce_assign = (undefined && undefined.__assign) || function () {\n WebSocketDebounce_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return WebSocketDebounce_assign.apply(this, arguments);\n};\n\n\n\n\nvar WebSocketDebounce_defaultPreferences = {\n webSocketDebounceMs: 100,\n};\nvar debounceMin = 1;\nvar debounceMax = 1000;\nvar WebSocketDebounce_Component = function () {\n var context = react.useContext(Services/* ServiceContext */.o);\n var _a = react.useState(WebSocketDebounce_defaultPreferences), state = _a[0], setState = _a[1];\n react.useLayoutEffect(function () {\n setState({\n webSocketDebounceMs: context.settings.webSocketDebounceMs(),\n });\n }, [setState, context.settings]);\n var handleWebSocketDebounceMinus = react.useCallback(function () {\n setState(function (state) {\n var newState = WebSocketDebounce_assign({}, state);\n var debounce = (state.webSocketDebounceMs || 1) - 1;\n if (debounce < debounceMin) {\n debounce = debounceMin;\n }\n newState.webSocketDebounceMs = debounce;\n context.settings.setWebSocketDebounceMs(newState.webSocketDebounceMs);\n return newState;\n });\n }, [setState, context.settings]);\n var handleWebSocketDebouncePlus = react.useCallback(function () {\n setState(function (state) {\n var newState = WebSocketDebounce_assign({}, state);\n var debounce = (state.webSocketDebounceMs || 1) + 1;\n if (debounce > debounceMax) {\n debounce = debounceMax;\n }\n newState.webSocketDebounceMs = debounce;\n context.settings.setWebSocketDebounceMs(newState.webSocketDebounceMs);\n return newState;\n });\n }, [setState, context.settings]);\n var handleWebSocketDebounceChange = react.useCallback(function (event) {\n setState(function (state) {\n var next = isNaN(event.target.value) ? state.webSocketDebounceMs : Number(event.target.value);\n if (state.webSocketDebounceMs < debounceMin) {\n next = debounceMin;\n }\n else if (state.webSocketDebounceMs > debounceMax) {\n next = debounceMax;\n }\n context.settings.setWebSocketDebounceMs(next);\n return WebSocketDebounce_assign(WebSocketDebounce_assign({}, state), { webSocketDebounceMs: next });\n });\n }, [setState, context.settings]);\n return (react.createElement(react.Fragment, null,\n react.createElement(NumberInput/* NumberInput */.Y, { value: state.webSocketDebounceMs, min: debounceMin, max: debounceMax, onChange: handleWebSocketDebounceChange, onMinus: handleWebSocketDebounceMinus, onPlus: handleWebSocketDebouncePlus, unit: "ms" })));\n};\nvar WebSocketDebounce = {\n titleKey: \'SETTINGS.WEBSOCKET_CONNECTION_DEBOUNCE.TITLE\',\n descConstruct: \'SETTINGS.WEBSOCKET_CONNECTION_DEBOUNCE.DESCRIPTION\',\n content: WebSocketDebounce_Component,\n category: SettingsUtils/* SettingTab.CONNECTIVITY */.BM.CONNECTIVITY,\n};\n\n;// CONCATENATED MODULE: ./src/app/Settings/Settings.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar allSettings = [\n NotificationControl,\n AutomatedAnalysisConfig,\n ChartCardsConfig,\n CredentialsStorage/* CredentialsStorage */.G,\n DeletionDialogControl,\n WebSocketDebounce,\n AutoRefresh,\n FeatureLevels,\n Language,\n DatetimeControl,\n Theme,\n];\nvar _getGroupFeatureLevel = function (settings) {\n if (!settings.length) {\n return Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT;\n }\n return settings.slice().sort(function (a, b) { return b.featureLevel - a.featureLevel; })[0].featureLevel;\n};\nvar Settings = function (_) {\n var t = (0,es/* useTranslation */.$G)()[0];\n var loggedIn = useLogin();\n var settings = react.useMemo(function () {\n return allSettings\n .filter(function (s) { return !s.authenticated || loggedIn; })\n .map(function (c) {\n return ({\n title: t(c.titleKey) || \'\',\n description: typeof c.descConstruct === \'string\' ? (t(c.descConstruct)) : (\n // Use children prop to avoid i18n parses body as key\n /* eslint react/no-children-prop: 0 */\n react.createElement(es/* Trans */.cC, { i18nKey: c.descConstruct.key, children: c.descConstruct.parts })),\n element: react.createElement(c.content, null),\n category: c.category,\n disabled: c.disabled,\n orderInGroup: c.orderInGroup || -1,\n featureLevel: c.featureLevel || Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n });\n });\n }, [t, loggedIn]);\n var history = (0,react_router/* useHistory */.k6)();\n var _a = (0,react_router/* useLocation */.TH)(), search = _a.search, pathname = _a.pathname;\n var activeTab = react.useMemo(function () {\n return (0,SettingsUtils/* paramAsTab */.l0)((0,utils/* getActiveTab */.fr)(search, \'tab\', Object.values(SettingsUtils/* SettingTab */.BM).map(function (v) { return (0,SettingsUtils/* tabAsParam */.lt)(v); }), (0,SettingsUtils/* tabAsParam */.lt)(SettingsUtils/* SettingTab.GENERAL */.BM.GENERAL)));\n }, [search]);\n var onTabSelect = react.useCallback(function (_, key) {\n return (0,utils/* switchTab */.MR)(history, pathname, search, { tabKey: \'tab\', tabValue: "".concat((0,SettingsUtils/* tabAsParam */.lt)(key)) });\n }, [history, pathname, search]);\n var settingGroups = react.useMemo(function () {\n return Object.values(SettingsUtils/* SettingTab */.BM).map(function (cat) {\n var panels = settings.filter(function (s) { return s.category === cat; }).sort(function (a, b) { return b.orderInGroup - a.orderInGroup; });\n return {\n groupLabel: t(cat),\n groupKey: cat,\n settings: panels,\n featureLevel: _getGroupFeatureLevel(panels),\n };\n });\n }, [settings, t]);\n return (react.createElement(react.Fragment, null,\n react.createElement(BreadcrumbPage, { pageTitle: "Settings" },\n react.createElement(Card/* Card */.Z, { isFullHeight: true },\n react.createElement(Sidebar/* Sidebar */.Y, { tabIndex: 0 },\n react.createElement(SidebarPanel/* SidebarPanel */.p, null,\n react.createElement(Tabs/* Tabs */.m, { isVertical: true, isExpanded: true, "aria-label": "Select setting category", activeKey: activeTab, onSelect: onTabSelect }, settingGroups.map(function (grp) { return (react.createElement(WrappedTab, { key: "".concat(grp.groupLabel, "-tab"), eventKey: grp.groupKey, title: react.createElement(TabTitleText/* TabTitleText */.T, null, grp.groupLabel), featureLevelConfig: {\n level: grp.featureLevel,\n } })); }))),\n react.createElement(SidebarContent/* SidebarContent */.T, null, settingGroups\n .filter(function (grp) { return grp.groupKey === activeTab; })\n .map(function (grp) { return (react.createElement(Form/* Form */.l, { key: "".concat(grp.groupKey, "-setting"), className: "settings__content" }, grp.settings.map(function (s, index) { return (react.createElement(FeatureFlag, { level: s.featureLevel, key: "".concat(grp.groupLabel, "-").concat(s.title, "-").concat(index, "-flag") },\n react.createElement(FormGroup/* FormGroup */.c, { label: react.createElement(Title/* Title */.D, { headingLevel: \'h2\', size: \'lg\' },\n s.title,\n s.featureLevel !== Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION && (react.createElement(Label/* Label */._, { isCompact: true, style: {\n marginLeft: \'1ch\',\n textTransform: \'capitalize\',\n }, color: s.featureLevel === Settings_service/* FeatureLevel.BETA */.Lu.BETA ? \'green\' : \'red\' }, Settings_service/* FeatureLevel */.Lu[s.featureLevel].toLowerCase()))), helperText: react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, s.description)), isHelperTextBeforeField: true, key: "".concat(grp.groupLabel, "-").concat(s.title, "-").concat(index) }, s.element))); }))); })))),\n react.createElement(react.Fragment, null))));\n};\n// Workaround to the Tabs component requiring children to be React.FC\nvar WrappedTab = function (_a) {\n var featureLevelConfig = _a.featureLevelConfig, eventKey = _a.eventKey, title = _a.title, children = _a.children;\n var t = (0,es/* useTranslation */.$G)().t;\n return (react.createElement(FeatureFlag, { level: featureLevelConfig.level, strict: featureLevelConfig.strict },\n react.createElement(Tab/* Tab */.O, { eventKey: eventKey, title: title, id: "".concat((0,utils/* hashCode */.un)("".concat(eventKey))), "data-quickstart-id": (0,utils/* cleanDataId */.BP)("settings-".concat(t(eventKey.toString()), "-tab")) }, children)));\n};\n/* harmony default export */ const Settings_Settings = (Settings);\n\n;// CONCATENATED MODULE: ./src/app/Shared/ErrorBoundary.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar ErrorBoundary_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== "function" && b !== null)\n throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar ErrorBoundary_assign = (undefined && undefined.__assign) || function () {\n ErrorBoundary_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ErrorBoundary_assign.apply(this, arguments);\n};\nvar ErrorBoundary_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nvar ErrorBoundary = /** @class */ (function (_super) {\n ErrorBoundary_extends(ErrorBoundary, _super);\n function ErrorBoundary(props) {\n var _this = _super.call(this, props) || this;\n _this.state = { error: undefined };\n return _this;\n }\n ErrorBoundary.getDerivedStateFromError = function (error) {\n // Update state so the next render will show the fallback UI.\n return { error: error };\n };\n ErrorBoundary.prototype.componentDidCatch = function (error, info) {\n console.warn(error, info.componentStack);\n };\n ErrorBoundary.prototype.render = function () {\n if (this.state.error) {\n return this.props.renderFallback(this.state.error);\n }\n return this.props.children;\n };\n return ErrorBoundary;\n}(react.Component));\n\nvar DefaultFallBack = function (_a) {\n var error = _a.error, props = ErrorBoundary_rest(_a, ["error"]);\n var t = (0,es/* useTranslation */.$G)().t;\n var addSubcription = (0,useSubscriptions/* useSubscriptions */.P)();\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var _b = react.useState(undefined), cryostatVersion = _b[0], setCryostatVersion = _b[1];\n react.useEffect(function () {\n addSubcription(serviceContext.api.cryostatVersion().subscribe(setCryostatVersion));\n }, [serviceContext, setCryostatVersion, addSubcription]);\n return (react.createElement(Bullseye/* Bullseye */.b, ErrorBoundary_assign({}, props),\n react.createElement(EmptyState/* EmptyState */.u, { variant: EmptyState/* EmptyStateVariant.large */.I.large },\n react.createElement(EmptyStateIcon/* EmptyStateIcon */.k, { icon: exclamation_circle_icon/* ExclamationCircleIcon */.$O, color: "red" }),\n react.createElement(Title/* Title */.D, { headingLevel: \'h1\' }, t(\'SOMETHING_WENT_WRONG\', { ns: \'common\' })),\n react.createElement(EmptyStateBody/* EmptyStateBody */.B, null,\n react.createElement("p", null, t(\'ERROR_BOUNDARY.ERROR_MESSAGE\', { message: (error === null || error === void 0 ? void 0 : error.message) || \'Unknown error.\' })),\n react.createElement(es/* Trans */.cC, { t: t, values: {\n knownIssue: t(\'AboutDescription.KNOWN_ISSUES\'),\n fileReport: t(\'AboutDescription.FILE_A_REPORT\'),\n }, components: {\n issue: react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.aT }),\n report: (react.createElement(Text/* Text */.x, { component: Text/* TextVariants.a */.q.a, target: "_blank", href: build_namespaceObject.S3.replace(\'__REPLACE_VERSION__\', cryostatVersion || \'unknown\') })),\n } }, "ERROR_BOUNDARY.RESOLVE_MESSAGE")))));\n};\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Form/FormAlert.js\nvar FormAlert = __webpack_require__(40083);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ClipboardCopy/ClipboardCopy.js + 2 modules\nvar ClipboardCopy = __webpack_require__(30046);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Accordion/Accordion.js\nvar Accordion = __webpack_require__(96760);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionItem.js\nvar AccordionItem = __webpack_require__(70863);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionToggle.js\nvar AccordionToggle = __webpack_require__(63275);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionContent.js + 1 modules\nvar AccordionContent = __webpack_require__(56555);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/pending-icon.js\nvar pending_icon = __webpack_require__(43957);\n;// CONCATENATED MODULE: ./src/app/Topology/Actions/CreateTarget.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar CreateTarget_assign = (undefined && undefined.__assign) || function () {\n CreateTarget_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return CreateTarget_assign.apply(this, arguments);\n};\nvar CreateTarget_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar CreateTarget_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar isValidTargetConnectURL = function (connectUrl) { return connectUrl && !connectUrl.match(/\\s+/); };\nvar CreateTarget = function (_a) {\n var prefilled = _a.prefilled, _props = CreateTarget_rest(_a, ["prefilled"]);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var history = (0,react_router/* useHistory */.k6)();\n var t = (0,es/* useTranslation */.$G)()[0];\n var _b = react.useState(\'\'), example = _b[0], setExample = _b[1];\n var _c = react.useState({\n connectUrl: \'\',\n alias: \'\',\n validConnectUrl: constants/* ValidatedOptions.default */.LD["default"],\n username: \'\',\n password: \'\',\n }), _d = _c[0], connectUrl = _d.connectUrl, alias = _d.alias, validConnectUrl = _d.validConnectUrl, username = _d.username, password = _d.password, setFormData = _c[1];\n var _e = react.useState(false), loading = _e[0], setLoading = _e[1];\n var _f = react.useState(false), testing = _f[0], setTesting = _f[1];\n var _g = react.useState({\n option: constants/* ValidatedOptions.default */.LD["default"],\n errorMessage: \'\',\n }), validation = _g[0], setValidation = _g[1];\n var _h = react.useState([]), expandedSections = _h[0], setExpandedSections = _h[1]; // Array of ids\n var target = react.useMemo(function () { return ({ connectUrl: connectUrl, alias: alias }); }, [connectUrl, alias]);\n var credentials = react.useMemo(function () { return ({ username: username, password: password }); }, [username, password]);\n var createButtonLoadingProps = react.useMemo(function () {\n return ({\n spinnerAriaValueText: \'Creating\',\n spinnerAriaLabel: \'creating-custom-target\',\n isLoading: loading,\n });\n }, [loading]);\n var toggleCredentialForm = react.useCallback(function (toggleId) {\n return setExpandedSections(function (old) {\n var matched = old.find(function (id) { return id === toggleId; });\n if (matched) {\n return old.filter(function (id) { return id !== matched; });\n }\n else {\n return CreateTarget_spreadArray(CreateTarget_spreadArray([], old, true), [toggleId], false);\n }\n });\n }, [setExpandedSections]);\n var resetTestState = react.useCallback(function () { return setValidation({ option: constants/* ValidatedOptions.default */.LD["default"], errorMessage: \'\' }); }, [setValidation]);\n var handleConnectUrlChange = react.useCallback(function (connectUrl) {\n setFormData(function (old) { return (CreateTarget_assign(CreateTarget_assign({}, old), { connectUrl: connectUrl, validConnectUrl: connectUrl === \'\'\n ? constants/* ValidatedOptions.default */.LD["default"]\n : isValidTargetConnectURL(connectUrl)\n ? constants/* ValidatedOptions.success */.LD.success\n : constants/* ValidatedOptions.error */.LD.error })); });\n resetTestState();\n }, [setFormData, resetTestState]);\n var handleAliasChange = react.useCallback(function (alias) {\n setFormData(function (old) { return (CreateTarget_assign(CreateTarget_assign({}, old), { alias: alias })); });\n resetTestState();\n }, [setFormData, resetTestState]);\n var handleUsernameChange = react.useCallback(function (username) {\n setFormData(function (old) { return (CreateTarget_assign(CreateTarget_assign({}, old), { username: username })); });\n resetTestState();\n }, [setFormData, resetTestState]);\n var handlePasswordChange = react.useCallback(function (password) {\n setFormData(function (old) { return (CreateTarget_assign(CreateTarget_assign({}, old), { password: password })); });\n resetTestState();\n }, [setFormData, resetTestState]);\n var handleSubmit = react.useCallback(function () {\n setLoading(true);\n // Get storage location\n var locationKey = (0,LocalStorage/* getFromLocalStorage */.fp)(\'CREDENTIAL_LOCATION\', CredentialsStorage/* Locations.BACKEND.key */.t.BACKEND.key);\n addSubscription(context.api\n .createTarget({\n connectUrl: connectUrl,\n alias: alias.trim() || connectUrl,\n }, credentials, locationKey === CredentialsStorage/* Locations.BACKEND.key */.t.BACKEND.key)\n .subscribe(function (_a) {\n var status = _a.status, body = _a.body;\n setLoading(false);\n var option = (0,Api_service/* isHttpOk */.Vy)(status) ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error;\n if (option === constants/* ValidatedOptions.success */.LD.success) {\n history.push(\'/topology\');\n }\n else {\n setValidation({\n option: option,\n errorMessage: body[\'data\'][\'reason\'],\n });\n }\n }));\n }, [setLoading, setValidation, addSubscription, context.api, connectUrl, alias, history, credentials]);\n var testTarget = react.useCallback(function () {\n if (!isValidTargetConnectURL(connectUrl)) {\n return;\n }\n addSubscription(context.api\n .createTarget({\n connectUrl: connectUrl,\n alias: alias.trim() || connectUrl,\n }, credentials, false, true)\n .subscribe(function (_a) {\n var status = _a.status, body = _a.body;\n setTesting(false);\n var option = (0,Api_service/* isHttpOk */.Vy)(status) ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error;\n setValidation({\n option: option,\n errorMessage: option !== constants/* ValidatedOptions.success */.LD.success ? body[\'data\'][\'reason\'] : \'\',\n });\n }));\n setTesting(true);\n resetTestState();\n }, [connectUrl, alias, credentials, addSubscription, context.api, resetTestState, setTesting]);\n var handleCancel = react.useCallback(function () { return history.goBack(); }, [history]);\n react.useEffect(function () {\n if (prefilled) {\n var connectUrl_1 = prefilled.connectUrl, alias_1 = prefilled.alias, username_1 = prefilled.username, password_1 = prefilled.password;\n setFormData({\n connectUrl: connectUrl_1,\n alias: alias_1 || \'\',\n validConnectUrl: isValidTargetConnectURL(connectUrl_1) ? constants/* ValidatedOptions.success */.LD.success : constants/* ValidatedOptions.error */.LD.error,\n username: username_1 || \'\',\n password: password_1 || \'\',\n });\n }\n }, [prefilled]);\n react.useEffect(function () {\n addSubscription(context.targets.targets().subscribe(function (ts) {\n var discoveredTargets = ts.filter(function (t) { var _a; return ((_a = t.annotations) === null || _a === void 0 ? void 0 : _a.cryostat[\'REALM\']) !== \'Custom Targets\'; });\n if (discoveredTargets.length) {\n setExample(discoveredTargets[0].connectUrl);\n }\n }));\n }, [addSubscription, context.targets, setExample]);\n var responsiveSpans = react.useMemo(function () { return [\n {\n xl2: 7,\n xl: 7,\n lg: 7,\n md: 12,\n sm: 12,\n },\n {\n xl2: 5,\n xl: 5,\n lg: 5,\n md: 12,\n sm: 12,\n },\n ]; }, []);\n return (react.createElement(BreadcrumbPage, { pageTitle: \'Create Custom Target\', breadcrumbs: [{ title: \'Topology\', path: \'/topology\' }] },\n react.createElement(Card/* Card */.Z, { isFullHeight: true },\n react.createElement(CardTitle/* CardTitle */.l, null, "Create Custom Target"),\n react.createElement(CardBody/* CardBody */.e, null,\n react.createElement(Form/* Form */.l, { className: "console-form-group" },\n react.createElement(Grid/* Grid */.r, { hasGutter: true },\n react.createElement(GridItem/* GridItem */.P, CreateTarget_assign({}, responsiveSpans[0], { order: { default: \'0\', lg: \'0\', xl: \'0\' } }),\n react.createElement(FormAlert/* FormAlert */.b, null,\n react.createElement(Alert/* Alert */.b, { variant: "info", title: \'Note: If the target requires authentication, use JMX Credential Options to provide credentials.\', "aria-live": "polite", isInline: true })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Connection URL", isRequired: true, fieldId: "connect-url", helperText: react.createElement(FormHelperText/* FormHelperText */.Q, { isHidden: false, component: "div" },\n "JMX Service URL.",\n \' \',\n example && (react.createElement(react.Fragment, null,\n "For example,",\n react.createElement(ClipboardCopy/* ClipboardCopy */.M5, { hoverTip: "Click to copy to clipboard", clickTip: "Copied!", variant: "inline-compact" }, example)))), helperTextInvalid: \'JMX Service URL must not contain empty spaces.\', validated: validConnectUrl },\n react.createElement(TextInput/* TextInput */.oi, { "aria-label": \'Connection URL\', value: connectUrl, isRequired: true, type: "text", id: "connect-url", placeholder: example, onChange: handleConnectUrlChange, isDisabled: loading || testing, validated: validConnectUrl, "data-quickstart-id": "ct-connecturl-input" })),\n react.createElement(FormGroup/* FormGroup */.c, { label: "Alias", fieldId: "alias", helperText: react.createElement(FormHelperText/* FormHelperText */.Q, { isHidden: false }, "Connection Nickname (same as Connection URL if not specified).") },\n react.createElement(TextInput/* TextInput */.oi, { value: alias, type: "text", id: "alias", onChange: handleAliasChange, isDisabled: loading || testing, "data-quickstart-id": "ct-alias-input" })),\n react.createElement(FormGroup/* FormGroup */.c, null,\n react.createElement(Accordion/* Accordion */.U, { asDefinitionList: false, "data-quickstart-id": "ct-credential-expand" },\n react.createElement(AccordionItem/* AccordionItem */.Q, null,\n react.createElement(AccordionToggle/* AccordionToggle */.B, { className: "expandable-form__accordion-toggle-block", id: \'jmx-credential-option\', isExpanded: expandedSections.includes(\'jmx-credential-option\'), onClick: function () { return toggleCredentialForm(\'jmx-credential-option\'); }, type: \'button\' },\n react.createElement("span", { className: "expandable-form__title" }, "JMX Credential Options")),\n react.createElement("div", { className: "expandable-form__help-block ", id: \'jmx-credential-option-description\' }, "Creates credentials that Cryostat uses to connect to target JVMs over JMX."),\n react.createElement(AccordionContent/* AccordionContent */.v, { isHidden: !expandedSections.includes(\'jmx-credential-option\'), id: \'expanded-jmx-credential-option\' },\n react.createElement(FormGroup/* FormGroup */.c, { label: \'Username\', fieldId: "username", className: "expandable-form__form-group", helperText: react.createElement(FormHelperText/* FormHelperText */.Q, { isHidden: false }, "Username for JMX connection.") },\n react.createElement(TextInput/* TextInput */.oi, { "aria-label": \'Username\', value: username, isRequired: true, type: "text", id: "username", onChange: handleUsernameChange, isDisabled: loading || testing, "data-quickstart-id": "ct-username-input" })),\n react.createElement(FormGroup/* FormGroup */.c, { label: \'Password\', fieldId: "password", className: "expandable-form__form-group", helperText: react.createElement(FormHelperText/* FormHelperText */.Q, { isHidden: false }, "Password for JMX connection.") },\n react.createElement(TextInput/* TextInput */.oi, { value: password, isDisabled: loading || testing, isRequired: true, type: "password", id: "password", onChange: handlePasswordChange, "data-quickstart-id": "ct-password-input" }))))))),\n react.createElement(GridItem/* GridItem */.P, CreateTarget_assign({}, responsiveSpans[1], { order: { default: \'1\', lg: \'1\', xl: \'1\', md: \'1\' } }),\n react.createElement(SampleNodeDonut, { target: target, validation: validation, testing: testing, onClick: testTarget }))),\n react.createElement(ActionGroup/* ActionGroup */.W, null,\n react.createElement(Button_Button/* Button */.zx, CreateTarget_assign({ variant: "primary", isDisabled: !connectUrl || validConnectUrl !== constants/* ValidatedOptions.success */.LD.success || loading || testing, onClick: handleSubmit }, createButtonLoadingProps, { "data-quickstart-id": "ct-create-btn" }), loading ? t(\'CREATING\', { ns: \'common\' }) : t(\'CREATE\', { ns: \'common\' })),\n react.createElement(Button_Button/* Button */.zx, { variant: "secondary", onClick: handleCancel }, t(\'CANCEL\', { ns: \'common\' })))))),\n react.createElement(react.Fragment, null)));\n};\nvar SampleNodeDonut = function (_a) {\n var target = _a.target, className = _a.className, testing = _a.testing, validation = _a.validation, onClick = _a.onClick;\n var _transformedTarget = react.useMemo(function () { return ({ connectUrl: target.connectUrl, alias: target.alias.trim() || target.connectUrl }); }, [target]);\n var _actionEnabled = react.useMemo(function () { return isValidTargetConnectURL(target.connectUrl); }, [target]);\n var statusIcon = react.useMemo(function () {\n if (testing) {\n return { icon: react.createElement(sync_alt_icon/* SyncAltIcon */.ew, null), message: \'Testing custom target definition.\' };\n }\n return validation.option === constants/* ValidatedOptions.success */.LD.success\n ? {\n icon: react.createElement(check_circle_icon/* CheckCircleIcon */.rE, { color: "var(--pf-global--success-color--100)" }),\n message: \'Target definition is valid.\',\n }\n : validation.option === constants/* ValidatedOptions.error */.LD.error\n ? {\n icon: react.createElement(exclamation_circle_icon/* ExclamationCircleIcon */.$O, { color: "var(--pf-global--danger-color--100)" }),\n message: validation.errorMessage,\n }\n : { icon: react.createElement(pending_icon/* PendingIcon */.tu, null), message: \'\' };\n }, [validation, testing]);\n return (react.createElement(react.Fragment, null,\n validation.option === constants/* ValidatedOptions.error */.LD.error && (react.createElement(FormAlert/* FormAlert */.b, null,\n react.createElement(Alert/* Alert */.b, { "aria-live": "polite", isInline: true, title: validation.errorMessage, variant: "danger" }, \'Check if the connection URL is valid. Specify the correct credentials in case of authentication failure.\'))),\n react.createElement(Flex/* Flex */.k, { className: (0,esm.css)(className), direction: { default: \'column\' } },\n react.createElement(Flex/* Flex */.k, { alignSelf: { default: \'alignSelfCenter\' }, direction: { default: \'column\' }, "data-quickstart-id": "ct-sample-testnode" },\n react.createElement(FlexItem/* FlexItem */.B, { alignSelf: { default: \'alignSelfCenter\' } },\n react.createElement(Tooltip/* Tooltip */.u, { appendTo: utils/* portalRoot */.tO, content: _actionEnabled\n ? "Click to test".concat(validation.option !== constants/* ValidatedOptions.default */.LD["default"] ? \' again\' : \'\', ".")\n : \'Please provide a valid Connection URL.\' },\n react.createElement("div", { className: (0,esm.css)(\'sample-node-donut__node-wrapper\', "".concat(_actionEnabled ? \'active\' : \'\')), onClick: _actionEnabled ? onClick : undefined, "data-quickstart-id": "ct-sample-testnode-icon" },\n react.createElement("div", { className: (0,esm.css)(\'sample-node-donut__node-icon\', validation.option !== constants/* ValidatedOptions.default */.LD["default"] ? validation.option : \'\') },\n react.createElement(Bullseye/* Bullseye */.b, null, testing ? react.createElement(LinearDotSpinner, null) : react.createElement("img", { src: openjdk_namespaceObject, alt: "Cryostat Logo" }))),\n react.createElement("div", { className: \'sample-node-donut__status-indicator\' }, statusIcon.icon)))),\n react.createElement(FlexItem/* FlexItem */.B, { alignSelf: { default: \'alignSelfCenter\' } },\n react.createElement("div", { className: (0,esm.css)(\'sample-node-donut__node-label\') },\n react.createElement(Tooltip/* Tooltip */.u, { content: \'Custom Target\', appendTo: utils/* portalRoot */.tO },\n react.createElement("span", { className: "sample-node-donut__node-label-badge" }, \'CT\')),\n _transformedTarget.alias || \'\'))),\n react.createElement(FlexItem/* FlexItem */.B, { alignSelf: { default: \'alignSelfCenter\' } },\n react.createElement(HelperText/* HelperText */.p, null,\n react.createElement(HelperTextItem/* HelperTextItem */.u, null, "Click on the sample node above to test custom target definition."))))));\n};\n/* harmony default export */ const Actions_CreateTarget = (CreateTarget);\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/TreeView/TreeView.js + 3 modules\nvar TreeView = __webpack_require__(114);\n;// CONCATENATED MODULE: ./src/app/Topology/ListView/UtilsFactory.tsx\nvar ListView_UtilsFactory_assign = (undefined && undefined.__assign) || function () {\n ListView_UtilsFactory_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return ListView_UtilsFactory_assign.apply(this, arguments);\n};\nvar ListView_UtilsFactory_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\n\nvar UtilsFactory_transformDataGroupedByTopLevel = function (universe, filters, searchExpression) {\n if (searchExpression === void 0) { searchExpression = \'\'; }\n return universe.children\n .filter(function (realm) { return isGroupNodeFiltered(realm, filters === null || filters === void 0 ? void 0 : filters.groupFilters.filters); })\n .map(function (realm) {\n var base = {\n id: getUniqueGroupId(realm),\n name: (react.createElement(LabelGroup/* LabelGroup */.e, { categoryName: "Labels" }, Object.keys(realm.labels)\n .map(function (k) { return "".concat(k, "=").concat(realm.labels[k]); })\n .map(function (l) { return (react.createElement(Label/* Label */._, { key: l, isCompact: true, color: "blue" }, l)); }))),\n children: getAllLeaves(realm)\n .filter(function (child) {\n return isTargetNodeFiltered(child, filters === null || filters === void 0 ? void 0 : filters.targetFilters.filters) &&\n (searchExpression === \'\' || isTargetMatched(child, searchExpression));\n })\n .map(function (child) { return ({\n id: "".concat(child.name, "-wrapper"),\n name: null,\n children: [\n {\n id: child.name,\n name: (react.createElement(Entity_EntityDetails, { className: "topology__list-view__entity-details", entity: { getData: function () { return child; } }, columnModifier: { default: \'3Col\' } })),\n },\n ],\n title: (react.createElement(react.Fragment, null,\n child.target.alias,\n react.createElement(Badge/* Badge */.C, { style: { marginLeft: \'0.5em\' } }, child.nodeType))),\n }); }),\n };\n return ListView_UtilsFactory_assign(ListView_UtilsFactory_assign({}, base), { title: (react.createElement(Flex/* Flex */.k, null,\n react.createElement(FlexItem/* FlexItem */.B, { flex: { default: \'flex_1\' } },\n react.createElement("span", { className: "topology-listview__realm-title" },\n realm.nodeType,\n ": ",\n realm.name),\n react.createElement(Badge/* Badge */.C, null, base.children.length)),\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(ActionDropdown, { className: "entity-overview__action-menu", actions: actionFactory({ getData: function () { return realm; } }, \'dropdownItem\') })))) });\n })\n .filter(function (_transformRealm) { return _transformRealm.children && _transformRealm.children.length; });\n};\nvar _buildFullData = function (node, expandMode, filters, searchExpression) {\n if (expandMode === void 0) { expandMode = true; }\n if (searchExpression === void 0) { searchExpression = \'\'; }\n if (isTargetNode(node)) {\n if (!isTargetNodeFiltered(node, filters === null || filters === void 0 ? void 0 : filters.targetFilters.filters) ||\n (searchExpression !== \'\' && !isTargetMatched(node, searchExpression))) {\n return [];\n }\n return [\n {\n id: "".concat(node.name, "-wrapper"),\n name: null,\n // Break target details to another level to allow expand/collapse\n children: [\n {\n id: getUniqueTargetId(node),\n name: (react.createElement(Entity_EntityDetails, { className: "topology__list-view__entity-details", entity: { getData: function () { return node; } }, columnModifier: { default: \'3Col\' } })),\n },\n ],\n title: (react.createElement(react.Fragment, null,\n node.target.alias,\n react.createElement(Badge/* Badge */.C, { style: { marginLeft: \'0.5em\' } }, node.nodeType))),\n },\n ];\n }\n var INIT = [];\n var children = node.children.reduce(function (prev, curr) { return prev.concat(_buildFullData(curr, expandMode, filters, searchExpression)); }, INIT);\n // Do show empty or filtered-out groups\n if (!children.length ||\n (node.nodeType !== NodeType.UNIVERSE && !isGroupNodeFiltered(node, filters === null || filters === void 0 ? void 0 : filters.groupFilters.filters))) {\n return [];\n }\n // Collapse single-child internal nodes (realms and namespaces are exempt)\n if (!COLLAPSE_EXEMPTS.includes(node.nodeType) && !expandMode && children.length === 1) {\n return ListView_UtilsFactory_spreadArray([], children, true);\n }\n return [\n {\n id: getUniqueGroupId(node),\n title: (react.createElement(Flex/* Flex */.k, null,\n react.createElement(FlexItem/* FlexItem */.B, { flex: { default: \'flex_1\' } },\n react.createElement("span", { className: "topology-listview__realm-title" },\n node.nodeType,\n ": ",\n node.name),\n react.createElement(Badge/* Badge */.C, null, children.length)),\n react.createElement(FlexItem/* FlexItem */.B, null,\n react.createElement(ActionDropdown, { className: "entity-overview__action-menu", actions: actionFactory({ getData: function () { return node; } }, \'dropdownItem\') })))),\n name: (react.createElement(LabelGroup/* LabelGroup */.e, { categoryName: "Labels" }, Object.keys(node.labels)\n .map(function (k) { return "".concat(k, "=").concat(node.labels[k]); })\n .map(function (l) { return (react.createElement(Label/* Label */._, { key: l, isCompact: true, color: "blue" }, l)); }))),\n children: children,\n },\n ];\n};\nvar UtilsFactory_transformDataFull = function (root, expandMode, filters, searchExpression) {\n if (expandMode === void 0) { expandMode = true; }\n if (searchExpression === void 0) { searchExpression = \'\'; }\n var _transformedRoot = _buildFullData(root, expandMode, filters, searchExpression)[0];\n return _transformedRoot && _transformedRoot.children ? _transformedRoot.children : [];\n};\nvar UtilsFactory_transformData = function (universe, _a, filters, searchExpression) {\n var _b = _a === void 0 ? {} : _a, _c = _b.showOnlyTopGroup, showOnlyTopGroup = _c === void 0 ? false : _c, _d = _b.expandMode, expandMode = _d === void 0 ? true : _d;\n if (searchExpression === void 0) { searchExpression = \'\'; }\n return showOnlyTopGroup\n ? UtilsFactory_transformDataGroupedByTopLevel(universe, filters, searchExpression)\n : UtilsFactory_transformDataFull(universe, expandMode, filters, searchExpression);\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/ListView/TopologyListView.tsx\nvar TopologyListView_assign = (undefined && undefined.__assign) || function () {\n TopologyListView_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return TopologyListView_assign.apply(this, arguments);\n};\nvar TopologyListView_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nvar TopologyListView = function (_a) {\n var transformConfig = _a.transformConfig, props = TopologyListView_rest(_a, ["transformConfig"]);\n var discoveryTree = react.useContext(DiscoveryTreeContext);\n var filters = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyFilters; });\n var expression = useSearchExpression(100)[0];\n var _treeViewData = react.useMemo(function () { return UtilsFactory_transformData(discoveryTree, transformConfig, filters, expression); }, [discoveryTree, transformConfig, filters, expression]);\n var isEmptyList = react.useMemo(function () { return !_treeViewData.length; }, [_treeViewData]);\n return (react.createElement(Stack/* Stack */.K, TopologyListView_assign({}, props),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(TopologyToolbar, { variant: TopologyToolbarVariant.List })),\n react.createElement(StackItem/* StackItem */.v, null,\n react.createElement(Divider/* Divider */.i, null)),\n react.createElement(StackItem/* StackItem */.v, { isFilled: true }, isEmptyList ? (react.createElement(TopologyEmptyState, null)) : (react.createElement(TreeView/* TreeView */.L, { className: "topology__treeview-container", data: _treeViewData, variant: "compact", hasGuides: true, allExpanded: expression !== \'\' })))));\n};\n\n;// CONCATENATED MODULE: ./src/app/Topology/Topology.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar Topology_assign = (undefined && undefined.__assign) || function () {\n Topology_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Topology_assign.apply(this, arguments);\n};\nvar Topology_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Topology = function (_a) {\n var _props = Topology_rest(_a, []);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var context = react.useContext(Services/* ServiceContext */.o);\n var matchExpreRef = react.useRef(new SearchExprService());\n var firstFetchRef = react.useRef(false);\n var firstFetched = firstFetchRef.current;\n var displayOptions = (0,react_redux_es/* useSelector */.v9)(function (state) { return state.topologyConfigs.displayOptions; });\n var groupings = displayOptions.groupings;\n var transformConfig = react.useMemo(function () { return ({ showOnlyTopGroup: groupings.realmOnly, expandMode: !groupings.collapseSingles }); }, [groupings]);\n var _b = react.useState(DEFAULT_EMPTY_UNIVERSE), discoveryTree = _b[0], setDiscoveryTree = _b[1];\n var isGraphView = (0,react_redux_es/* useSelector */.v9)(function (state) {\n var _currentMode = state.topologyConfigs.viewMode;\n return _currentMode === \'graph\';\n });\n var _c = react.useState(), error = _c[0], setError = _c[1];\n var _refreshDiscoveryTree = react.useCallback(function (onSuccess) {\n addSubscription(context.api.getDiscoveryTree().subscribe({\n next: function (tree) {\n onSuccess && onSuccess();\n setError(undefined);\n setDiscoveryTree(tree);\n },\n error: function (err) {\n setError(err);\n },\n }));\n }, [addSubscription, context.api, setDiscoveryTree, setError]);\n react.useEffect(function () {\n addSubscription(\n // Credentials will trigger modifed target event if any\n context.notificationChannel\n .messages(NotificationChannel_service/* NotificationCategory.TargetJvmDiscovery */.mN.TargetJvmDiscovery)\n .subscribe(function (_) { return _refreshDiscoveryTree(); }));\n }, [addSubscription, context.notificationChannel, _refreshDiscoveryTree]);\n react.useEffect(function () {\n _refreshDiscoveryTree(function () { return (firstFetchRef.current = true); });\n }, [_refreshDiscoveryTree, firstFetchRef]);\n react.useEffect(function () {\n if (!context.settings.autoRefreshEnabled()) {\n return;\n }\n var id = window.setInterval(function () { return _refreshDiscoveryTree(); }, context.settings.autoRefreshPeriod() * context.settings.autoRefreshUnits());\n return function () { return window.clearInterval(id); };\n }, [context.settings, _refreshDiscoveryTree]);\n var content = react.useMemo(function () {\n if (error) {\n return (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(ErrorView, { title: \'Unable load topology view\', message: error.message, retry: function () {\n // Start from initial state\n firstFetchRef.current = false;\n setError(undefined);\n _refreshDiscoveryTree(function () { return (firstFetchRef.current = true); });\n } })));\n }\n if (!firstFetched) {\n return (react.createElement(Bullseye/* Bullseye */.b, null,\n react.createElement(LinearDotSpinner, null)));\n }\n return (react.createElement(SearchExprServiceContext.Provider, { value: matchExpreRef.current }, isGraphView ? (react.createElement(TopologyGraphView, { transformConfig: transformConfig })) : (react.createElement(TopologyListView, { transformConfig: transformConfig }))));\n }, [\n isGraphView,\n transformConfig,\n firstFetched,\n error,\n firstFetchRef,\n matchExpreRef,\n setError,\n _refreshDiscoveryTree,\n ]);\n return (react.createElement(react.Fragment, null,\n react.createElement(BreadcrumbPage, Topology_assign({ pageTitle: \'Topology\' }, _props),\n react.createElement(Card/* Card */.Z, { isFullHeight: true, id: "topology-card" },\n react.createElement(CardBody/* CardBody */.e, { style: { padding: 0 } },\n react.createElement(DiscoveryTreeContext.Provider, { value: discoveryTree }, content))),\n react.createElement(react.Fragment, null))));\n};\n/* harmony default export */ const Topology_Topology = ((0,react_router/* withRouter */.EN)(Topology));\n\n;// CONCATENATED MODULE: ./src/app/utils/useDocumentTitle.ts\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n// a custom hook for setting the page title\nfunction useDocumentTitle(title) {\n react.useEffect(function () {\n var originalTitle = document.title;\n document.title = title;\n return function () {\n document.title = originalTitle;\n };\n }, [title]);\n}\n\n;// CONCATENATED MODULE: ./src/app/routes.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar routes_assign = (undefined && undefined.__assign) || function () {\n routes_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return routes_assign.apply(this, arguments);\n};\nvar routes_rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar routeFocusTimer;\nvar OVERVIEW = \'Overview\';\nvar CONSOLE = \'Console\';\nvar navGroups = [OVERVIEW, CONSOLE];\nvar routes = [\n {\n component: About_About,\n exact: true,\n label: \'About\',\n path: \'/about\',\n title: \'About\',\n description: \'Get information, help, or support for Cryostat.\',\n navGroup: OVERVIEW,\n anonymous: true,\n },\n {\n component: Dashboard_Dashboard,\n exact: true,\n label: \'Dashboard\',\n path: \'/\',\n title: \'Dashboard\',\n navGroup: OVERVIEW,\n children: [\n {\n component: Dashboard_DashboardSolo,\n exact: true,\n path: \'/d-solo\',\n title: \'Dashboard\',\n },\n ],\n },\n {\n component: QuickStarts_QuickStartsCatalogPage,\n exact: true,\n label: \'Quick Starts\',\n path: \'/quickstarts\',\n title: \'Quick Starts\',\n description: \'Get started with Cryostat.\',\n },\n {\n component: Topology_Topology,\n exact: true,\n label: \'Topology\',\n path: \'/topology\',\n title: \'Topology\',\n navGroup: OVERVIEW,\n children: [\n {\n component: Actions_CreateTarget,\n exact: true,\n path: \'/topology/create-custom-target\',\n title: \'Create Custom Target\',\n },\n ],\n },\n {\n component: Rules_Rules,\n exact: true,\n label: \'Automated Rules\',\n path: \'/rules\',\n title: \'Automated Rules\',\n description: \'Create recordings on multiple target JVMs at once using Automated Rules consisting of a name, match expression, template, archival period, and more.\',\n navGroup: CONSOLE,\n children: [\n {\n component: Rules_CreateRule,\n exact: true,\n path: \'/rules/create\',\n title: \'Create Automated Rule\',\n },\n ],\n },\n {\n component: Recordings_Recordings,\n exact: true,\n label: \'Recordings\',\n path: \'/recordings\',\n title: \'Recordings\',\n description: \'Create, view and archive JFR recordings on single target JVMs.\',\n navGroup: CONSOLE,\n children: [\n {\n component: CreateRecording_CreateRecording,\n exact: true,\n path: \'/recordings/create\',\n title: \'Create Recording\',\n },\n ],\n },\n {\n component: Archives_Archives,\n exact: true,\n label: \'Archives\',\n path: \'/archives\',\n title: \'Archives\',\n description: \'View archived recordings across all target JVMs, as well as upload recordings directly to the archive.\',\n navGroup: CONSOLE,\n },\n {\n component: Events_Events,\n exact: true,\n label: \'Events\',\n path: \'/events\',\n title: \'Events\',\n description: \'View available JFR event templates and types for target JVMs, as well as upload custom templates.\',\n navGroup: CONSOLE,\n },\n {\n component: SecurityPanel_SecurityPanel,\n exact: true,\n label: \'Security\',\n path: \'/security\',\n title: \'Security\',\n description: \'Upload SSL certificates for Cryostat to trust when communicating with target applications.\',\n navGroup: CONSOLE,\n },\n {\n anonymous: true,\n component: Settings_Settings,\n exact: true,\n path: \'/settings\',\n title: \'Settings\',\n description: \'View or modify Cryostat web-client application settings.\',\n },\n {\n anonymous: true,\n component: Login_Login,\n // this is only displayed if the user is not logged in and is the last route matched against the current path, so it will always match\n exact: false,\n path: \'/\',\n title: \'Cryostat\',\n description: \'Log in to Cryostat\',\n },\n];\nvar flatten = function (routes) {\n var ret = [];\n for (var _i = 0, routes_1 = routes; _i < routes_1.length; _i++) {\n var r = routes_1[_i];\n ret.push(r);\n if (r.children) {\n ret.push.apply(ret, flatten(r.children));\n }\n }\n return ret;\n};\n// a custom hook for sending focus to the primary content container\n// after a view has loaded so that subsequent press of tab key\n// sends focus directly to relevant content\nvar useA11yRouteChange = function (isAsync) {\n var lastNavigation = (0,dist.useLastLocation)();\n react.useEffect(function () {\n if (!isAsync && lastNavigation !== null) {\n routeFocusTimer = (0,utils/* accessibleRouteChangeHandler */.mh)();\n }\n return function () {\n window.clearTimeout(routeFocusTimer);\n };\n }, [isAsync, lastNavigation]);\n};\nvar RouteWithTitleUpdates = function (_a) {\n var Component = _a.component, _b = _a.isAsync, isAsync = _b === void 0 ? false : _b, path = _a.path, title = _a.title, rest = routes_rest(_a, ["component", "isAsync", "path", "title"]);\n useA11yRouteChange(isAsync);\n useDocumentTitle(title);\n var renderFallback = react.useCallback(function (error) {\n return react.createElement(DefaultFallBack, { error: error });\n }, []);\n function routeWithTitle(routeProps) {\n return (react.createElement(ErrorBoundary, { renderFallback: renderFallback },\n react.createElement(Component, routes_assign({}, rest, routeProps))));\n }\n return react.createElement(react_router/* Route */.AW, { render: routeWithTitle, path: path });\n};\nvar PageNotFound = function (_a) {\n var title = _a.title;\n useDocumentTitle(title);\n return react.createElement(react_router/* Route */.AW, { component: NotFound_NotFound });\n};\nvar AppRoutes = function (_) {\n var loggedIn = useLogin();\n var activeLevel = useFeatureLevel();\n return (react.createElement(dist.LastLocationProvider, null,\n react.createElement(react_router/* Switch */.rs, null,\n flatten(routes)\n .filter(function (r) { return (loggedIn ? r.component !== Login_Login : r.anonymous); })\n .filter(function (r) { return r.featureLevel === undefined || r.featureLevel >= activeLevel; })\n .map(function (_a, idx) {\n var path = _a.path, exact = _a.exact, component = _a.component, title = _a.title, isAsync = _a.isAsync;\n return (react.createElement(RouteWithTitleUpdates, { path: path, exact: exact, component: component, key: idx, title: title, isAsync: isAsync }));\n }),\n react.createElement(PageNotFound, { title: "404 Page Not Found" }))));\n};\n\n\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownGroup.js\nvar DropdownGroup = __webpack_require__(92245);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherItem.js + 4 modules\nvar ApplicationLauncherItem = __webpack_require__(86380);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/NotificationBadge/NotificationBadge.js + 1 modules\nvar NotificationBadge = __webpack_require__(44893);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncher.js + 2 modules\nvar ApplicationLauncher = __webpack_require__(89081);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Masthead/Masthead.js\nvar Masthead = __webpack_require__(11355);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Masthead/MastheadToggle.js\nvar MastheadToggle = __webpack_require__(7289);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Page/PageToggleButton.js\nvar PageToggleButton = __webpack_require__(14661);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Masthead/MastheadMain.js\nvar MastheadMain = __webpack_require__(82274);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Masthead/MastheadBrand.js\nvar MastheadBrand = __webpack_require__(68042);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Masthead/MastheadContent.js\nvar MastheadContent = __webpack_require__(13096);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Nav/Nav.js\nvar Nav = __webpack_require__(60092);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Nav/NavGroup.js\nvar NavGroup = __webpack_require__(20213);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Nav/NavItem.js\nvar NavItem = __webpack_require__(96894);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Page/PageSidebar.js\nvar PageSidebar = __webpack_require__(50442);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/SkipToContent/SkipToContent.js\nvar SkipToContent = __webpack_require__(53327);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/AlertGroup/AlertGroup.js + 1 modules\nvar AlertGroup = __webpack_require__(71516);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/Page/Page.js\nvar Page = __webpack_require__(16488);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/caret-down-icon.js\nvar caret_down_icon = __webpack_require__(5964);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/bell-icon.js\nvar bell_icon = __webpack_require__(34143);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-icons/dist/esm/icons/bars-icon.js\nvar bars_icon = __webpack_require__(7669);\n;// CONCATENATED MODULE: ./src/app/assets/cryostat_logo_vert_rgb_default.svg\nconst cryostat_logo_vert_rgb_default_namespaceObject = __webpack_require__.p + "images/cryostat_logo_vert_rgb_default.svg";\n;// CONCATENATED MODULE: ./src/app/assets/cryostat_logo_vert_rgb_reverse.svg\nconst cryostat_logo_vert_rgb_reverse_namespaceObject = __webpack_require__.p + "images/cryostat_logo_vert_rgb_reverse.svg";\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ActionList/ActionList.js\nvar ActionList = __webpack_require__(47814);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ActionList/ActionListGroup.js\nvar ActionListGroup = __webpack_require__(11942);\n// EXTERNAL MODULE: ./node_modules/@patternfly/react-core/dist/esm/components/ActionList/ActionListItem.js\nvar ActionListItem = __webpack_require__(53129);\n;// CONCATENATED MODULE: ./src/app/Joyride/JoyrideTooltip.tsx\nvar JoyrideTooltip_assign = (undefined && undefined.__assign) || function () {\n JoyrideTooltip_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return JoyrideTooltip_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nvar JoyrideTooltip = function (_a) {\n var backProps = _a.backProps, primaryProps = _a.primaryProps, skipProps = _a.skipProps, tooltipProps = _a.tooltipProps, index = _a.index, isLastStep = _a.isLastStep, step = _a.step, size = _a.size;\n var title = step.title, content = step.content;\n var isFirstStep = react.useMemo(function () {\n return index == 0;\n }, [index]);\n var footer = react.useMemo(function () {\n return (react.createElement(Split/* Split */.P, { hasGutter: true, style: { alignItems: \'center\', justifyContent: \'flex-end\' } },\n !isFirstStep && !isLastStep && (react.createElement(SplitItem/* SplitItem */.J, { isFilled: true },\n react.createElement(TextContent/* TextContent */.D, null,\n react.createElement(Text/* Text */.x, { component: "small" }, "Step ".concat(index - 1, "/").concat(size - 3) // Index starts at 0, tour starts at 2, there are 3 steps that don\'t need a footer\n )))),\n react.createElement(SplitItem/* SplitItem */.J, null,\n react.createElement(ActionList/* ActionList */.S, null,\n react.createElement(ActionListGroup/* ActionListGroup */.X, null,\n react.createElement(ActionListItem/* ActionListItem */.F, null, isFirstStep ? (react.createElement(Button_Button/* Button */.zx, JoyrideTooltip_assign({}, skipProps, { variant: "secondary" }), "Skip tour")) : (react.createElement(Button_Button/* Button */.zx, JoyrideTooltip_assign({}, backProps, { variant: "secondary" }), "Back"))),\n react.createElement(ActionListItem/* ActionListItem */.F, null, react.createElement(Button_Button/* Button */.zx, JoyrideTooltip_assign({}, primaryProps), isLastStep ? \'Okay, got it!\' : isFirstStep ? \'Get Started\' : \'Next\')))))));\n }, [isFirstStep, isLastStep, backProps, primaryProps, skipProps, index, size]);\n return (react.createElement("div", JoyrideTooltip_assign({ className: "joyride-tooltip" }, tooltipProps, { style: { maxWidth: isFirstStep || isLastStep ? \'50vh\' : \'34vh\' } }),\n react.createElement(Card/* Card */.Z, null,\n react.createElement(CardTitle/* CardTitle */.l, { style: { textAlign: \'center\' } }, title),\n react.createElement(CardBody/* CardBody */.e, { style: { fontSize: \'1em\' } }, content),\n index !== 1 && react.createElement(CardFooter/* CardFooter */.e, null, footer))));\n};\n/* harmony default export */ const Joyride_JoyrideTooltip = (JoyrideTooltip);\n\n// EXTERNAL MODULE: ./node_modules/react-joyride/es/index.js + 1 modules\nvar react_joyride_es = __webpack_require__(50408);\n;// CONCATENATED MODULE: ./src/app/Joyride/CryostatJoyride.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\nvar CryostatJoyride = function (props) {\n var _a = useJoyride(), setState = _a.setState, _b = _a.state, run = _b.run, stepIndex = _b.stepIndex, steps = _b.steps, isNavBarOpen = _a.isNavBarOpen;\n var theme = useTheme()[0];\n react.useEffect(function () {\n setState({\n steps: [\n {\n content: (react.createElement("div", null,\n react.createElement("p", null,\n react.createElement("strong", null, "Cryostat"),\n " is a cloud-based profiling application for managing JFR recordings in containerized Java environments."),\n react.createElement("br", null),\n react.createElement("p", null,\n "There are many other features that ",\n react.createElement("strong", null, "Cryostat"),\n " provides, such as the ability to download recordings, generate reports, and more."))),\n placement: \'center\',\n title: (react.createElement("div", { style: { padding: \'1em\' } },\n react.createElement("img", { src: theme === SettingsUtils/* ThemeSetting.LIGHT */.LZ.LIGHT ? cryostat_logo_vert_rgb_default_namespaceObject : cryostat_logo_vert_rgb_reverse_namespaceObject, alt: "Cryostat Logo", style: { paddingBottom: \'1em\' }, height: 300, width: 300 }),\n react.createElement("h1", null,\n "Welcome to ",\n react.createElement("strong", null,\n "Cryostat ",\n build_namespaceObject.i8),\n "!"))),\n target: \'body\',\n disableBeacon: true,\n },\n {\n content: react.createElement("p", null, "Open the navigation bar!"),\n target: \'*[data-tour-id="nav-toggle-btn"]\',\n disableBeacon: true,\n placement: \'bottom\',\n spotlightClicks: true,\n placementBeacon: \'right\',\n },\n {\n title: \'Dashboard View\',\n content: (react.createElement("div", null,\n react.createElement("p", null,\n "The ",\n react.createElement("strong", null, "Dashboard"),\n " provides a high-level overview of Cryostat and the target JVM with the use of ",\n react.createElement("strong", null, "Dashboard Cards"),\n "."),\n react.createElement("br", null),\n react.createElement("p", null, "There are various dashboard cards that can be configured to display different metrics and charts."))),\n target: \'*[data-tour-id="dashboard"]\',\n placement: \'right\',\n },\n {\n title: \'Topology View\',\n content: (react.createElement("div", null,\n react.createElement("p", null,\n "The ",\n react.createElement("strong", null, "Topology"),\n " view provides a visual representation of Cryostat and the deployment model. Start, stop, and delete recordings on multiple targets at a time from this view."))),\n target: \'*[data-tour-id="topology"]\',\n placement: \'right\',\n },\n {\n title: \'Automated Rules\',\n content: (react.createElement("p", null,\n "Create, delete, enable, and view Cryostat ",\n react.createElement("strong", null, "Automated Rules"),\n " in this view. Automated Rules allow you start recordings on target JVMs based on a set of conditions.")),\n target: \'*[data-tour-id="automatedrules"]\',\n placement: \'right\',\n },\n {\n title: \'JFR Recordings\',\n content: (react.createElement("p", null,\n "The ",\n react.createElement("strong", null, "Recordings"),\n " view provides a list of all active recordings that are currently being recorded on the target JVM. Start, stop, download, delete recordings from this view.")),\n target: \'*[data-tour-id="recordings"]\',\n placement: \'right\',\n },\n {\n title: \'Archives View\',\n content: (react.createElement("p", null,\n "The ",\n react.createElement("strong", null, "Archives"),\n " view provides a list of all saved recordings that have been saved to Cryostat. Download, delete, and generate reports from this view.")),\n target: \'*[data-tour-id="archives"]\',\n placement: \'right\',\n },\n {\n title: \'Events\',\n content: (react.createElement("p", null,\n "The ",\n react.createElement("strong", null, "Events"),\n " page lists the ",\n react.createElement("strong", null, "Event Templates"),\n " that can be used for creating Flight Recordings. It also details the JFR ",\n react.createElement("strong", null, "Event Types"),\n " that can be recorded within each target JVM.")),\n target: \'*[data-tour-id="events"]\',\n placement: \'right\',\n },\n {\n title: \'Security\',\n content: (react.createElement("p", null,\n "The ",\n react.createElement("strong", null, "Security"),\n " tab allows you to add ",\n react.createElement("strong", null, "Credentials"),\n " and",\n \' \',\n react.createElement("strong", null, "SSL Certificates"),\n " for Cryostat to use when connecting to remote targets.")),\n target: \'*[data-tour-id="security"]\',\n placement: \'right\',\n },\n {\n title: \'Settings\',\n content: (react.createElement("p", null,\n "Set your ",\n react.createElement("strong", null, "Cryostat preferences"),\n ", such as the theme, locale, notification settings, and more.")),\n target: \'*[data-tour-id="settings-link"]\',\n },\n {\n title: \'Help\',\n content: (react.createElement("p", null,\n "Restart this tour or access our new ",\n react.createElement("strong", null, "quick starts"),\n " where you can learn more about using Cryostat in your environment.")),\n target: \'*[data-tour-id="application-launcher"]\',\n },\n {\n title: \'You’re ready to go!\',\n content: (react.createElement("p", null,\n "Stay up-to-date with everything Cryostat on our",\n \' \',\n react.createElement("a", { target: "_blank", href: "".concat(build_namespaceObject.Un), rel: "noreferrer" }, "blog"),\n \' \',\n "or continue to learn more in our",\n \' \',\n react.createElement("a", { target: "_blank", href: "".concat(build_namespaceObject.R1), rel: "noreferrer" }, "documentation guides"),\n ".")),\n placement: \'center\',\n target: \'body\',\n disableBeacon: true,\n },\n ],\n });\n }, [setState, theme]);\n // index 0 -> Get Started\n // index 1 -> Navigation\n // index 2 -> Dashboard\n // etc...\n var callback = react.useCallback(function (data) {\n var action = data.action, index = data.index, status = data.status, type = data.type;\n if ([react_joyride_es/* STATUS.FINISHED */.Q_.FINISHED, react_joyride_es/* STATUS.SKIPPED */.Q_.SKIPPED].includes(status)) {\n setState({ run: false, stepIndex: 0 });\n }\n else if (action === \'close\' && type === \'step:before\') {\n setState({ run: false, stepIndex: 0 });\n }\n else if ([react_joyride_es/* EVENTS.STEP_AFTER */.FP.STEP_AFTER, react_joyride_es/* EVENTS.TARGET_NOT_FOUND */.FP.TARGET_NOT_FOUND].includes(type)) {\n if (action === react_joyride_es/* ACTIONS.PREV */.aO.PREV) {\n switch (index) {\n case 0:\n case 2:\n setState({ stepIndex: 0 });\n break;\n default:\n setState({ stepIndex: index - 1 });\n }\n }\n else {\n switch (index) {\n case 0:\n if (isNavBarOpen) {\n setState({ stepIndex: 2 });\n }\n else {\n setState({ stepIndex: 1 });\n }\n break;\n default:\n setState({ stepIndex: index + 1 });\n }\n }\n }\n }, [setState, isNavBarOpen]);\n return (react.createElement(react.Fragment, null,\n react.createElement(react_joyride_es/* default */.ZP, { tooltipComponent: Joyride_JoyrideTooltip, callback: callback, continuous: true, run: run, stepIndex: stepIndex, steps: steps, disableOverlayClose: true, disableCloseOnEsc: true, spotlightPadding: 0, styles: {\n options: {\n arrowColor: theme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK\n ? \'var(--pf-global--BackgroundColor--dark-100)\'\n : \'var(--pf-global--BackgroundColor--light-100)\',\n },\n } }),\n props.children));\n};\n/* harmony default export */ const Joyride_CryostatJoyride = (CryostatJoyride);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstart-utils.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar conclusion = function (quickstartName, feature, closingMessage) { return "\\n
\\n
You completed the ".concat(quickstartName, " quick start!
\\n
\\n \\n
cryostat
\\n
\\n ").concat(closingMessage\n ? "
".concat(closingMessage, "
")\n : "
If you would like to learn more about the ".concat(feature, " feature, check out the [APP] documentation for detailed guides and information.
"), "\\n
"); };\nvar CryostatIcon = withThemedIcon(cryostat_icon_rgb_default_namespaceObject, cryostat_icon_rgb_reverse_namespaceObject, \'Cryostat Icon\');\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/automated-rules-quickstart.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar displayName = \'Get started with Automated Rules\';\nvar AutomatedRulesQuickStart = {\n metadata: {\n name: \'automated-rules-quickstart\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n order: 3,\n },\n spec: {\n version: 2.3,\n displayName: displayName,\n durationMinutes: 5,\n icon: react.createElement(CryostatIcon, null),\n description: "Learn about automated rules in **[APP]** and how to create one.",\n prerequisites: [\'Start a Recording\'],\n introduction: "\\n## Automated Rules\\nAutomated Rules are configurations that instruct [APP] to create JDK Flight Recordings on matching target JVM applications. Each rule specifies parameters for which Event Template to use, how much data should be kept in the application recording buffer, and how frequently [APP] should copy the application recording buffer into [APP]\'s own archived storage.\\n\\n### What you\'ll learn\\n\\n- How to create an automated rule in [APP]\\n- How to use match expressions to match one or more target JVMs\\n\\n### What you\'ll need\\n\\n- A running instance of [APP] which has discovered at least one target JVM\\n- JMX auth credentials for the target JVM (if required)\\n\\n ",\n tasks: [\n {\n title: \'Create a new Automated Rule\',\n description: "\\n1. In the [APP] console navigation bar, click [Automated Rules]{{highlight nav-automatedrules-tab}}.\\n2. Click [Create]{{highlight create-rule-btn}}.\\n ",\n review: {\n instructions: \'#### Verify that you see the Automated Rules creation form.\',\n failedTaskHelp: \'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.\',\n },\n },\n {\n title: \'Fill out the Automated Rule form\',\n description: "\\nTo create a new rule, use the Automated Rule creation form to fill in the required fields.\\n\\nThe [Match Expression]{{highlight rule-matchexpr}} field is a Java-like code snippet that is matched against each target JVM. This allows you to create rules that run on specific target JVMs. For example, you can create a rule that runs on all target JVMs with the match expression: `true`{{copy}}. You can also match targets more specifically with a match expression like `target.annotations.cryostat[\'PORT\'] == 9091`{{copy}}, which will match targets that are connected to [APP] on port 9091.\\n\\n\\nTo create a new rule, you must fill out the following required fields:\\n1. Enter a name for the rule in the [Name]{{highlight rule-name}} field.\\n2. Enter an expression in the [Match Expression]{{highlight rule-matchexpr}} field. To see an example match expression, click the [match hint]{{highlight rule-matchexpr-help}}.\\n[Use the [Match Expression Visualizer]{{highlight match-expr-card}} to test your match expression against the target JVMs currently discovered by [APP]. Any matched targets will appear unfaded in the Graph view and will be listed in the List view.]{{admonition tip}}\\n\\n3. Select an [Event Template]{{highlight rule-evt-template}}.\\n\\n[There may be no available templates if there are no targets currently matched, or if there is a failure to connect to all matched targets.]{{admonition warning}}\\n\\n4. Click [Create]{{highlight rule-create-btn}}.\\n\\n",\n review: {\n instructions: \'#### Verify that you see the new rule in the Automated Rules table.\',\n failedTaskHelp: "If you do not see the new rule, follow the previous steps again.\\n If you cannot create the rule, check that you have entered valid values for each required field.",\n },\n },\n {\n title: \'View the generated recording\',\n description: "\\nThe rule that was created will have started a new recording on any matched target JVMs.\\n1. In the [APP] console navigation bar, click [Recordings]{{highlight nav-recordings-tab}}.\\n2. Click the [Target Selector]{{highlight target-select}} dropdown menu and select a target JVM that was matched from the created automated rule, if not already selected.\\n\\nThere should now be a new recording in the list of active recordings on the selected target JVM.\\n\\nThe recording should be named according to the rule-name format, such as `auto_`.\\n\\n[If you set any other attributes on the rule, you should see those attributes reflected in the recording.]{{admonition note}}\\n",\n review: {\n instructions: \'#### Verify that you see the new recording with the correct Automated Rule recording naming scheme in the list of recordings.\',\n failedTaskHelp: \'If you do not see the new recording, go back to the Rule Creation form, and try verifying that your rule match expression correctly matches the intended target JVMs in this task.\',\n },\n },\n ],\n conclusion: conclusion(displayName, \'Automated Rules\'),\n type: {\n text: \'Advanced\',\n color: \'red\',\n },\n },\n};\n/* harmony default export */ const automated_rules_quickstart = (AutomatedRulesQuickStart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/dashboard-quickstart.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar dashboard_quickstart_displayName = \'Get started with the Dashboard\';\n// TODO: Split quick start into multiple quick starts under Dashboard category\n// e.g. dashboard cards, layouts/templates, automated analysis, etc.\nvar DashboardQuickStart = {\n metadata: {\n name: \'dashboard-quickstart\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n order: 2,\n },\n spec: {\n version: 2.3,\n displayName: dashboard_quickstart_displayName,\n durationMinutes: 10,\n icon: react.createElement(CryostatIcon, null),\n description: "Learn about what you can do with the **[APP]** Dashboard.",\n prerequisites: [\'\'],\n introduction: "\\n## Dashboard\\nThe **[APP] Dashboard** is the main page of the [APP] console. The [APP] dashboard provides a high-level overview of the connected target JVMs and the instance itself through the use of **Dashboard Cards**.\\n\\nDashboard Cards are displayed in **Dashboard Layouts**, which can be customized by adding, removing, or rearranging cards. The layout can also be saved and restored at a later time. \\n\\n### What you\'ll learn\\n- How to create a simple Dashboard Layout\\n- How to add and remove a Dashboard Card to/from a Dashboard Layout\\n- How to move and resize Dashboard Cards\\n- How to rename, upload, download, and delete Dashboard Layouts\\n\\n ",\n tasks: [\n {\n title: \'Go to the Dashboard page\',\n description: "\\n1. In the [APP] console navigation bar, click [Dashboard]{{highlight nav-dashboard-tab}}.\\n2. From the [Target Selector]{{highlight target-select}}, select a target JVM.\\n",\n review: {\n instructions: \'#### Verify that you see the Dashboard page.\',\n failedTaskHelp: \'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.\',\n },\n },\n {\n title: \'Create a new Dashboard Layout\',\n description: "\\n**Dashboard Layouts** are used to organize the Dashboard Cards that are displayed in the Dashboard.\\n\\n1. Click the [Layout Selector]{{highlight dashboard-layout-selector}} on the toolbar.\\n\\n This will open a dropdown menu. Click **New Layout**.\\n\\nThe new layout is automatically selected and should be named `Custom1`, assuming you have not created any other layouts.\\n\\n[You can also rename the layout with the pencil icon next to the name.]{{admonition tip}}\\n",\n review: {\n instructions: \'#### Verify that the new layout is created and selected.\',\n failedTaskHelp: \'Try the steps again. Make sure that the the new layout is named `Custom` with a numeric suffix.\',\n },\n },\n {\n title: \'Add Dashboard Cards to the layout\',\n description: "\\nThe following Dashboard Cards are available:\\n\\n- **Target JVM Details**\\n- **Automated Analysis**\\n- **JFR Metrics Chart (BETA)**\\n- **MBean Metrics Chart**\\n\\nEach card displays a different set of information about the currently selected target JVM, such as the heap usage, thread statistics, JVM vendor, and more.\\n\\n[Learn more about each Dashboard Card in the [Cryostat documentation](".concat(build_namespaceObject.rj, ").]{{admonition tip}}\\n\\nTo create a card, go through a creation wizard that guides the process of selecting and configuring the desired card.\\n\\n1. Click the [Catalog Icon]{{highlight dashboard-add-btn}}.\\n \\n This will open a modal. From the card catalog, select the **Target JVM Details** card. Full details and any available preview will be shown on the drawer panel.\\n\\n2. Click **Finish**.\\n3. Repeat steps 1-2 to add the **MBeans Metrics Chart** card to the current layout.\\n4. This time, click **Next** to go to the next configuration step of the creation wizard.\\n[The default metric selected for the card is the `Process CPU Load` metric. You can change this by clicking the **Performance Metric** dropdown menu within the **MBeans Chart Card** configuration step and selecting a different metric. Try other metrics and settings!]{{admonition tip}}\\n5. Click **Finish** once more.\\n"),\n review: {\n instructions: \'#### Verify that you see the two new cards in the Dashboard.\',\n failedTaskHelp: "If you do not see the cards, follow the previous steps again.",\n },\n },\n {\n title: \'Rearrange and resize Dashboard Cards\',\n description: "\\n1. Click and drag the **Target JVM Details** [card\'s header]{{highlight card-draggable-grip}} on top or to the right of the **MBeans Metrics Chart** card to swap their positions.\\n2. Click and drag the right edge of the **MBeans Metrics Chart** card to resize it.\\n[You can also drag and drop between cards between other cards to rearrange them.]{{admonition tip}}\\n",\n review: {\n instructions: \'#### Verify that you are able to rearrange and resize the cards.\',\n failedTaskHelp: \'Make sure you are clicking and dragging the card header to move the card, not the body. To resize cards, hover over the right edge of the card until the cursor changes to a double-sided arrow `↔`, then click and drag to resize.\',\n },\n },\n {\n title: \'Modify a Dashboard Layout\',\n description: "\\nYou can rename, delete and quickly switch between **Dashboard Layouts** for different sets of information about the target JVMs. Customize these layouts to suit your needs!\\n1. Rename the current Dashboard Layout by clicking the [Pencil icon]{{highlight dashboard-rename-btn}} on the **Layout Selector** toolbar. You cannot rename the `Default` layout.\\n2. To switch between Dashboard Layouts, click the [Layout Selector]{{highlight dashboard-layout-selector}} dropdown on the **Layout Selector** toolbar and select the `Default` layout.\\n3. You are able to delete Dashboard Layouts by clicking the [Trash icon]{{highlight dashboard-delete-btn}} on the **Layout Selector** toolbar. You cannot delete the `Default` layout.\\n\\n[You can also favorite Dashboard Layouts by clicking on the [Layout Selector]{{highlight dashboard-layout-selector}} dropdown and clicking the Star Icon `\\u2605` next to the layout you want to favorite. Renaming and deletion can also be done in a similar fashion.]{{admonition tip}}\\n",\n review: {\n instructions: \'#### Verify that you are able to rename, and switch between Dashboard Layouts.\',\n failedTaskHelp: \'Make sure you are clicking the correct actions and buttons. Note that you cannot rename or delete the `Default` layout.\',\n },\n },\n {\n title: \'Use Layout Templates\',\n description: "\\n**Layout Templates** are pre-configured Dashboard Layouts that are used to quickly create new Dashboard Layouts. You can also download and upload your own Dashboard Layouts as templates. [APP] provides a few templates that you can use to get started.\\n1. To create a new Dashboard Layout from a template, click the [Layout Selector]{{highlight dashboard-layout-selector}} dropdown on the **Layout Selector** toolbar and click the caret icon next to the **New Layout** button.\\n \\n This will open a dropdown menu. \\n2. Select **Choose Template**.\\n A modal will open with a list of available templates. There will be two template categories: **Suggested** and **Cryostat**.\\n3. From the **Cryostat** category, select the **Automated Analysis** template.\\n4. Enter a name for the new layout in the **Name** field.\\n5. Click **Create** to finish.\\n",\n review: {\n instructions: \'#### Verify that you are able to create a dashboard layout from template.\',\n failedTaskHelp: \'If you are having trouble creating a dashboard layout from a template, make sure that you have selected a template from the Template Picker and entered a name for the new layout.\',\n },\n },\n ],\n conclusion: conclusion(dashboard_quickstart_displayName, \'Dashboard\', "For more information about the new Dashboard and Dashboard Cards in [APP] ".concat(build_namespaceObject.i8, ", read our guides on the Cryostat documentation.")),\n type: {\n text: \'Introduction\',\n color: \'blue\',\n },\n },\n};\n/* harmony default export */ const dashboard_quickstart = (DashboardQuickStart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/generic-quickstart.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n// Quick start name (currently cannot use [APP], there is a bug with how the title gets rendered in the quick start panel)\nvar generic_quickstart_displayName = \'Getting started with quick starts in Cryostat\';\n// Additional info: https://docs.openshift.com/container-platform/4.9/web_console/creating-quick-start-tutorials.html\nvar GenericQuickStart = {\n metadata: {\n name: \'generic-quickstart\',\n featureLevel: Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT,\n order: 0,\n // you can add additional metadata here\n },\n spec: {\n version: 2.3,\n displayName: generic_quickstart_displayName,\n durationMinutes: 10,\n type: {\n text: \'Placeholder\',\n // \'blue\' | \'cyan\' | \'green\' | \'orange\' | \'purple\' | \'red\' | \'grey\'\n color: \'grey\',\n },\n /*- The icon defined as a base64 value. Example flow:\n # 1. Find an .svg you want to use, like from here: https://www.patternfly.org/v4/guidelines/icons/#all-icons\n # 2. Upload the file here and encode it (output format - plain text): https://base64.guru/converter/encode/image\n # 3. compose - `icon: data:image/svg+xml;base64,`\n # - If empty string (icon: \'\'), will use a default rocket icon\n # - If set to null (icon: ~) will not show an icon\n */\n icon: react.createElement(pficon_template_icon/* PficonTemplateIcon */.p3, null),\n prerequisites: [\n \'You can optionally list prerequisites\',\n \'Another prerequisite\',\n \'These prerequisites are also displayed on the introduction step\',\n ],\n description: "This description appears on the card in the quick starts catalog.",\n // NOTE: markdown par will acknowledge indents and new lines\n introduction: "\\n**This introduction is shown at the beginning of the quick start**\\n- It introduces the quick start and lists the tasks within it.\\n- You can view the [source for this quick start](https://github.com/patternfly/patternfly-quickstarts/blob/main/packages/dev/src/quickstarts-data/yaml/template.yaml) for additional help and information.",\n tasks: [\n {\n title: \'Get started\',\n description: "\\n## Text\\n 1. The main body of the task. You can use markdown syntax here to create list items and more.\\n\\n This is a paragraph. \\n This is another paragraph. Add an empty line between paragraphs for line breaks or two spaces at the end.\\n 1. For more information on markdown syntax you can visit [this resource](https://www.markdownguide.org/basic-syntax/).\\n 1. A limited set of HTML tags [are also supported](https://docs.openshift.com/container-platform/4.9/web_console/creating-quick-start-tutorials.html#supported-tags-for-quick-starts_creating-quick-start-tutorials)\\n \\n## Images\\n HTML img tag: \\n\\n > Markdown would work as well but cannot add height/width style\\n\\n Ellipsis icon (visible if font-awesome is installed): \\n\\n PF icon: \\n\\n## Highlighting\\n To enable highlighting, the markdown syntax should contain:\\n - Bracketed link text\\n - The highlight keyword, followed by the ID of the element that you want to animate\\n - The element to be highlighted, needs a `data-quickstart-id` attribute\\n\\n**Example**\\n
[Recordings nav item]{{highlight nav-recordings-tab}}
\\n\\n will highlight an element with the `data-quickstart-id=\\"quickstarts\\"` attribute\\n \\n### Code snippets\\nThe syntax for an inline code snippet contains:\\n- Text between back quotes, followed by `{{copy}}`\\n#### Example 1\\nThe following text demonstates an inline-copy element `https://github.com/sclorg/ruby-ex.git`{{copy}}\\n#### Example 2\\nAnd another one `https://patternfly.org`{{copy}} here!\\nThe syntax for multi-line code snippets:\\n- Text between triple back quotes, followed by `{{copy}}`\\n#### Example 1\\n ```\\noc new-app ruby~https://github.com/sclorg/ruby-ex.git\\necho \\"Expose route using oc expose svc/ruby-ex\\"\\noc expose svc/ruby-ex\\n ```{{copy}}\\n#### Example 2\\n```\\nHello\\nworld\\n```{{copy}} \\n - Clicking the _Next_ button will display the **Check your work** module.\\n### Admonition blocks\\n The syntax for rendering \\"Admonition Blocks\\" to Patternfly React Alerts:\\n - Bracketed alert text contents\\n - The admonition keyword, followed by the alert variant you want\\n - Variants are: note, tip, important, caution, and warning\\n\\n**Examples**\\n [This is the note contents with **some bold** text]{{admonition note}}\\n [This is the tip contents]{{admonition tip}}\\n [This is the important contents]{{admonition important}}\\n [This is the caution contents]{{admonition caution}}\\n [This is the warning contents]{{admonition warning}}\\n "),\n // optional - the task\'s Check your work module\n review: {\n instructions: "Did you complete the task successfully?",\n failedTaskHelp: "This task isn\'t verified yet. Try the task again.",\n // optional - the task\'s success and failure messages\n },\n summary: {\n success: \'Shows a success message in the task header\',\n failed: \'Shows a failed message in the task header\',\n },\n },\n ],\n conclusion: conclusion(generic_quickstart_displayName, \'[APP]\', "To learn more about [APP]\'s extensive features and capabilities, please visit our website at ").concat(build_namespaceObject.R1, ".")),\n nextQuickStart: [\'start-a-recording-quickstart\'],\n },\n};\n/* harmony default export */ const generic_quickstart = (GenericQuickStart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/settings-quickstart.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar settings_quickstart_displayName = \'Using Settings\';\nvar SettingsQuickStart = {\n metadata: {\n name: \'settings-quickstart\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n order: 100,\n },\n spec: {\n version: 2.3,\n displayName: settings_quickstart_displayName,\n durationMinutes: 5,\n icon: react.createElement(cog_icon/* CogIcon */.IE, null),\n description: "Learn about the settings page in **[APP]** and how to use it.",\n prerequisites: [\'\'],\n introduction: "\\n## Using Settings\\n \\n[APP] provides a settings page that lets you configure various aspects of the application. This quick start will show you how to use the settings page.\\n\\n### What you\'ll learn\\n - How to navigate to the settings page\\n - How to configure settings in [APP]\\n ",\n tasks: [\n {\n title: \'Navigate to the Settings page\',\n description: "\\n1. On the masthead, click the [Settings]{{highlight settings-link}} cog.",\n },\n {\n title: \'Go to the **General** tab\',\n description: "\\nThe **General** settings tab is where you can adjust various general settings to tailor your experience with the application. You can select a preferred theme, the date locale, and the current timezone.\\n\\n1. Click [General]{{highlight settings-general-tab}}.\\n2. Configure the theme.\\n3. Configure the date locale and current timezone.\\n[[APP] currently only supports English. We are planning on adding support for other languages in the future.]{{admonition note}}",\n },\n {\n title: \'Go to the **Connectivity** tab\',\n description: "\\nThe **Connectivity** tab enables you to configure the WebSocket connection between the browser and the [APP] backend.\\n\\n1. Click [Connectivity]{{highlight settings-connectivity-tab}}.\\n2. Configure the **WebSocket Connection Debounce** time.\\n3. Configure the **Auto-Refresh** period for content-views.\\n[To use the **Auto-Refresh** feature, make sure to enable the [Auto-Refresh]{{highlight settings-connectivity-tab-auto-refresh}} checkbox.]{{admonition tip}}\\n",\n },\n {\n title: \'Go to the **Notifications & Messages** tab\',\n description: "\\nThe **Notifications & Messages** tab allows you to configure the notifications and deletion warnings.\\n\\n1. Click [Notifications & Messages]{{highlight settings-notifications&messages-tab}}.\\n2. You can enable or disable notifications from various categories. Click `Show more` for the full list of notifications.\\n To control the maximum number of notifications, configure the input control.\\n3. You are also able to enable or disable deletion dialog warnings for various destructive actions. Click `Show more` for the full list of deletion warnings.\\n",\n },\n {\n title: \'Go to the **Dashboard** tab\',\n description: "\\nThe **Dashboard** tab allows you to configure settings for the various Dashboard Cards that you can add to the Dashboard.\\n\\nThe **Automated Analysis** dashboard card allows you to automatically start an analysis on the recording with a click of a button. You can configure the recording that is started by this card.\\n\\n1. From the list of settings tabs, click [Dashboard]{{highlight settings-dashboard-tab}}.\\n2. Configure the **Automated Analysis Recording Configuration** settings.\\n3. Configure the **Dashboard Metrics Configuration** settings.\\n\\n[When using the **Automated Analysis Card**, make sure the **Event Template** is compatible with the target JVM.]{{admonition warning}}\\n[Setting both an infinite maximum size and age may result in an **Out Of Memory** error during report generation.]{{admonition caution}}\\n",\n },\n {\n title: \'Go to the **Advanced** tab\',\n description: "\\n[APP] has a few advanced settings that can be configured.\\n\\n1. Click [Advanced]{{highlight settings-advanced-tab}}.\\n2. Configure the **Credentials Storage** settings.\\n \\n Credentials are necessary to authenticate with the target JVMs that [APP] communicates with, if JMX auth is enabled or if a [APP] agent authenticated connection is required. If you prefer not to store these credentials in the [APP] backend, you can opt to store them in local session storage instead.\\n3. Configure the **Feature Level** settings.\\n \\n The **Feature Level** setting enables you to enable or disable beta features.\\n\\n",\n },\n ],\n conclusion: conclusion(settings_quickstart_displayName, \'Settings\'),\n type: {\n text: \'Introduction\',\n color: \'blue\',\n },\n },\n};\n/* harmony default export */ const settings_quickstart = (SettingsQuickStart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/start-a-recording.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar start_a_recording_displayName = \'Start a Recording\';\nvar RecordingQuickStart = {\n metadata: {\n name: \'start-a-recording-quickstart\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n order: 1,\n },\n spec: {\n version: 2.3,\n displayName: start_a_recording_displayName,\n durationMinutes: 10,\n icon: react.createElement(CryostatIcon, null),\n description: "Learn how to start a recording with Java Flight Recorder (JFR) with **[APP]**.",\n prerequisites: [\'\'],\n introduction: "\\n## Start a Recording\\n**Java Flight Recorder (JFR)** is a profiling tool that is built into the JVM. It allows you to record events that happen in the JVM and then analyze the recording to find performance issues. [APP] leverages JFR to provide a simple way to start, stop, and download recordings from a containerized target JVM.\\n\\n### What you\'ll learn\\n\\n- How to start/stop a JFR recording on a target JVM\\n- How to download a recording from [APP] to your local machine\\n- How to view an automated analysis report of a recording with [APP]\'s capabilities\\n\\n### What you\'ll need\\n\\n- A running instance of [APP] which has discovered at least one target JVM\\n- JMX auth credentials for the target JVM (if required)\\n\\n",\n tasks: [\n {\n title: \'Go to the Recordings page\',\n description: \'1. In the [APP] console navigation bar, click [Recordings]{{highlight nav-recordings-tab}}.\',\n review: {\n instructions: \'#### Verify that you see the Recordings page.\',\n failedTaskHelp: \'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.\',\n },\n },\n {\n title: \'Select a target JVM\',\n description: " \\nSelect a target JVM from the list of available targets that [APP] has discovered.\\n\\n1. Click the [Target Select]{{highlight target-select}} dropdown menu.\\n2. Select a target from the list of available targets.\\n\\n\\n[If JMX Auth username and password is required, you will be prompted to enter them.]{{admonition note}}",\n review: {\n instructions: \'#### Verify that you can see the Recordings table.\',\n failedTaskHelp: \'If you do not see the table, try the above steps again.\',\n },\n },\n {\n title: \'Start a recording\',\n description: "\\nThere are two tabs within the Recordings page:\\n\\n[Active Recordings]{{highlight active-recordings-tab}} and [Archived Recordings]{{highlight archived-recordings-tab}}.\\n\\n**Active recordings** are recordings that only exist only within the target JVM. **Archived recordings** are recordings that have been saved from the target JVM and copied to [APP]\'s storage volume.\\n\\nTo start an active recording:\\n\\n1. Click [Create]{{highlight recordings-create-btn}} to open the **Custom Flight Recording Form**. \\n[If you have a smaller viewport, the `Create` button may not be immediately visible. In this case, you can click on the kebab button (three vertical dots) to reveal additional options, including `Create`.\\"]{{admonition note}}\\n2. Enter a name for the recording in the [Name]{{highlight crf-name}} field.\\n3. Select the [Duration]{{highlight crf-duration}} for the recording. You can select `CONTINUOUS` to record until the recording is stopped.\\n4. Select an [Event Template]{{highlight template-selector}} to use for the recording.\\n5. Click [Create]{{highlight crf-create-btn}}.\\n\\nAfter the creation of a recording, the recording will be displayed in the **Active Recordings** tab. You should be able to see the recording\'s name, start time, duration, state, and any attached labels.\\n\\n[You may also attach metadata labels to the recordings under the [Metadata]{{highlight crf-metadata-opt}} options or configure your custom recording further under the [Advanced]{{highlight crf-advanced-opt}} options.]{{admonition tip}}",\n review: {\n instructions: \'#### Verify that you see the recording within the table.\',\n failedTaskHelp: \'If you do not see the recording, try the above steps again.\',\n },\n },\n {\n title: \'Stop a recording\',\n description: "\\nStopping a recording will cut off the recording at the time that the recording is stopped.\\n\\n1. Select the [checkbox]{{highlight active-recordings-checkbox}} \\u2610 next to the recording.\\n2. Click [Stop]{{highlight recordings-stop-btn}} to stop the recording.",\n review: {\n instructions: \'#### Verify that the STATE field of the recording has changed to STOPPED.\',\n failedTaskHelp: \'If you do not see the recording, try the **Start a recording** task again.\',\n },\n },\n {\n title: \'Download a recording\',\n description: "\\nDownloading a recording will save the recording to your local machine as a JFR file. You can then use **JDK Mission Control (JMC)** to analyze the recording.\\n1. Open the [kebab menu]{{highlight recording-kebab}} next to the recording that you want to download.\\n2. Click `Download Recording` to prompt your browser to open a dialog to save the recording to your local machine.\\n3. Choose what to do with the file.\\n ",\n review: {\n instructions: \'#### Verify that you have downloaded the recording to your local machine.\',\n failedTaskHelp: \'If you do not see the recording, try the **Start a recording** task again.\',\n },\n },\n {\n title: \'View an analysis report\',\n description: "\\n[APP] is able to generate an **Automated Analysis Report** using a JFR recording. The **Java Mission Control** rules engine analyzes your recording, looks for common problems, and assigns a severity score from 0 (no problem) to 100 (potentially severe problem) to each problem.\\n1. Click the [kebab menu]{{highlight recording-kebab}} next to the recording that you want to view an analysis report for.\\n2. Click `View Report ...` to view an analysis report of the recording in a new tab.\\n3. *Optional:* Right click on the page and select `Save Page As...` to download the report HTML file to your local machine.\\n",\n review: {\n instructions: \'#### Verify that you can see an analysis report of the recording.\',\n failedTaskHelp: \'The kebab `⁝` should be next to the recording row in the active recordings table. Clicking the kebab icon should show a menu with the `View Report ...` option.\',\n },\n },\n {\n title: \'Archive a recording\',\n description: "\\nArchiving a recording will save the recording to [APP]\'s archival storage, and will persist even after either the target JVM, or [APP], has stopped. These recordings will appear in the target JVM\'s **Archived Recordings** tab, as well as in the [Archives]{{highlight nav-archives-tab}} view on the [APP] console navigation bar.\\n\\n1. Click [Archive]{{highlight recordings-archive-btn}} to archive the recording.\\n2. To view the archived recording in [APP]\'s storage, go to the [Archived Recordings]{{highlight archived-recordings-tab}} tab.\\n\\n[You can download archived recordings and view an analysis report of the archived recording from the [Archived Recordings]{{highlight archived-recordings-tab}} tab, similar to active recordings.]{{admonition tip}}",\n review: {\n instructions: \'#### Verify that the recording has been archived in the **Archived Recordings** tab.\',\n failedTaskHelp: \'The recording name should have been saved in the format `__.jfr`. If you still cannot find the recording, please try the above steps again.\',\n },\n },\n ],\n conclusion: conclusion(start_a_recording_displayName, \'Start a recording\', "To learn more about [APP]\'s extensive features and capabilities, please visit our website at ").concat(build_namespaceObject.R1, ".")),\n type: {\n text: \'Introduction\',\n color: \'blue\',\n },\n nextQuickStart: [\'automated-rules-quickstart\'],\n },\n};\n/* harmony default export */ const start_a_recording = (RecordingQuickStart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/topology/custom-target-quickstart.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar CustomTargetQuickstart = {\n metadata: {\n name: \'topology/create-custom-target-quickstart\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n },\n spec: {\n version: 2.3,\n displayName: \'Create a Custom Target\',\n durationMinutes: 10,\n icon: react.createElement(CryostatIcon, null),\n description: "Don\'t see your applications? Use Custom Targets to tell Cryostat about them!",\n introduction: "\\n## Custom Targets\\nBy default, target JVMs are automatically discovered over remote Java Management Extensions (JMX) by **Cryostat**, using various mechanisms (e.g. **Kubernetes API**, **JDP**).\\nHowever, in some cases (e.g. for **Kubernetes API**, JMX port is not 9091 and port name is not jfr-jmx), Cryostat might not see your applications. Fortunately, you can tell Cryostat about them by specifying **Custom Targets**.\\n\\n### What you\'ll learn\\n- How to test and create a Custom Target definition\\n\\n### What you\'ll need\\n\\n- A Java application that Cryostat cannot automatically discover\\n- The connection URL and JMX credentials, if required, for that application\\n",\n tasks: [\n {\n title: \'Go to the Topology page\',\n description: "1. In the [APP] console navigation bar, click [Topology]{{highlight nav-topology-tab}}.",\n review: {\n instructions: \'#### Verify that you see the Topology page.\',\n failedTaskHelp: \'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.\',\n },\n },\n {\n title: \'Open Custom Target Creation Form\',\n description: "\\n\\n1. From the toolbar, click on the [catalog icon]{{highlight topology-catalog-btn}}.\\n\\n This will open a modal containing the **Topology Entity Catalog**.\\n\\n[Alternatively, press Ctrl + Space or right click the topology view. This will open a mini catalog for quick access.]{{admonition tip}}\\n\\n2. Find and select the **Custom Target** option. To aid your search, use the search bar.\\n3. Click on the **Create** button to open the **Custom Target Creation Form**.\\n",\n review: {\n instructions: \'#### Verify that you can open the catalog and select Custom Target.\',\n failedTaskHelp: \'If you do not see the Custom Target option, use the search bar to find it.\',\n },\n },\n {\n title: \'Fill out the Custom Target form\',\n description: "\\n1. Enter the JMX **Connection URL** for the target into the [Connection URL]{{highlight ct-connecturl-input}} field.\\n2. Optionally assign an **Alias** to the target by using the [Alias]{{highlight ct-alias-input}} field.\\n3. If the target has **JMX authentication** enabled, click the [JMX Credential Option]{{highlight ct-credential-expand}} to expand the form.\\n4. Use the [Username]{{highlight ct-username-input}} and [Password]{{highlight ct-password-input}} fields to enter the username and password.\\n",\n review: {\n instructions: \'#### Verify that you have filled out the form.\',\n failedTaskHelp: \'Click the [JMX Credential Option]{{highlight ct-credential-expand}} to expand the form to reveal the username and password fields.\',\n },\n },\n {\n title: \'Test the custom target definition.\',\n description: "\\nAfter form is filled, the [sample node]{{highlight ct-sample-testnode}} will be populated with those information.\\n\\nTo test the **Custom Target** definition:\\n\\n1. Click on the [sample node icon]{{highlight ct-sample-testnode-icon}} to test your custom target definition. **Cryostat** will attempt a connection to the target defined by the form data.\\n2. If the attempt succeeds, a **Checkmark** icon is shown. Otherwise, an **Exclaimation** icon along with an alert banner that describes the error.\\n3. Re-enter the form and repeat step 1-2 until you have a valid definition.\\n",\n review: {\n instructions: \'#### Verify that you can test the custom target definition.\',\n failedTaskHelp: \'You must provide a valid **Connection URL** to enable testing.\',\n },\n },\n {\n title: \'Create the Custom Target.\',\n description: "\\nTo create the **Custom Target** definition:\\n\\n1. Click [Create]{{highlight ct-create-btn}}.\\n2. If the submission is successful, the view will automatically be directed to the **Topology** page. Otherwise, revise your form inputs.\\n",\n review: {\n instructions: \'#### Verify that you can create the custom target and redirected to Topology View.\',\n failedTaskHelp: \'Revise your **Custom Target** definition to ensure it is valid.\',\n },\n },\n {\n title: \'View the Custom Target.\',\n description: "\\nThe **Custom Target** will appear under **Custom Targets Realm**.\\n[In Graph View, use the toolbar to filter out the **Custom Targets Realm** and the control bar to fit graph into screen, if needed.]{{admonition tip}}\\n",\n review: {\n instructions: \'#### Verify that you can can see the Custom Target.\',\n failedTaskHelp: \'In a clustered graph, use the filter and control bar to adjust the view.\',\n },\n },\n ],\n conclusion: conclusion(\'Create a Custom Target\', \'Custom Targets\'),\n type: {\n text: \'Featured\',\n color: \'blue\',\n },\n },\n};\n/* harmony default export */ const custom_target_quickstart = (CustomTargetQuickstart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/quickstarts/topology/group-start-recordings.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nvar GroupStartRecordingQuickStart = {\n apiVersion: \'v2.3.0\',\n metadata: {\n name: \'topology/start-group-recording\',\n featureLevel: Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION,\n },\n spec: {\n version: 2.3,\n displayName: \'Start recording on multiple target JVMs\',\n durationMinutes: 5,\n icon: react.createElement(CryostatIcon, null),\n description: \'Learn how to start recordings on multiple targets at once.\',\n introduction: "\\n## Topology View\\nThe **Cryostat Topology** provides a visual presentation of all targets discovered by **Cryostat**, using various mechanisms (e.g. **Kubernetes API**, **JDP**) that are represented by **Realms**.\\n\\nWith **Topology** view, you can perform actions (i.e. start recording) on an individual target or a group of targets, using either **Graph View** or **List View**.\\n\\n### What you\'ll learn\\n- How to start recording on a group of targets\\n\\n### What you\'ll need\\n\\n- A running instance of Cryostat which has discovered at least one target JVM\\n- JMX auth credentials for the target JVM (if required)\\n",\n tasks: [\n {\n title: \'Go to the Topology page\',\n description: "1. In the [APP] console navigation bar, click [Topology]{{highlight nav-topology-tab}}.",\n review: {\n instructions: \'#### Verify that you see the Topology page.\',\n failedTaskHelp: \'If you do not see the navigation bar, click the [menu button]{{highlight nav-toggle-btn}} on the masthead.\',\n },\n },\n {\n title: \'Open action menu for a group\',\n description: "\\nTo open the action menu for a target group:\\n\\n- *Graph View*: Right-click a target group to display the **Action** menu.\\n\\n- *List View*: Click the **Action** dropdown menu next to the group name.\\n",\n review: {\n instructions: \'#### Verify that you see action menu.\',\n failedTaskHelp: "\\nIn *Graph View*, the line surronding the targets represents the group.\\n\\nIn *List View*, to reveal nested groups, click on list rows.",\n },\n },\n {\n title: \'Start recording for a group of targets.\',\n description: "\\nTo start a recording for targets under the selected group, select the `Start recording` option.\\n\\nOn each descendant target, **Cryostat** will create an active recording named `cryostat_topology_action` with the label\\n`cryostat.io.topology-group=` which represents the group the action is invoked on.\\n\\n[In some cases (e.g. missing JMX Credentials), **Cryostat** will fail to start recording on some targets.]{{admonition warning}}\\n",\n review: {\n instructions: \'#### Verify that you can start recording on a group of targets.\',\n failedTaskHelp: "If you do not see the **Action** menu, follow the previous steps again.",\n },\n },\n {\n title: \'Check the started recordings.\',\n description: "\\nTo check the started recordings in the previous step:\\n\\n1. In the [APP] console navigation bar, click [Recordings]{{highlight nav-recordings-tab}} to go to **Recording** page.\\n2. Click the [Target Select]{{highlight target-select}} dropdown menu.\\n3. Select a target that belong to the selected group.\\n4. The recording will be displayed with name `cryostat_topology_action` and a label `cryostat.io.topology-group=`\\n\\n[In the **Topology Graph View**, targets (i.e. nodes) that have any `RUNNING` active recordings will have a decorator on their top-right corner to indicate so.]{{admonition tip}}\\n",\n review: {\n instructions: \'#### Verify that you can start recording on a group of targets.\',\n failedTaskHelp: "If you do not see the recording, follow the previous steps again.",\n },\n },\n ],\n conclusion: conclusion(\'Start recording on multiple target JVMs\', \'Topology\'),\n type: {\n text: \'Featured\',\n color: \'blue\',\n },\n nextQuickStart: [\'custom-target-quickstart\'],\n },\n};\n/* harmony default export */ const group_start_recordings = (GroupStartRecordingQuickStart);\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/all-quickstarts.ts\n\n\n\n\n\n\n\n// Add your quick start here e.g. [GenericQuickStart, ...]\nvar allQuickStarts = [\n automated_rules_quickstart,\n dashboard_quickstart,\n generic_quickstart,\n start_a_recording,\n settings_quickstart,\n group_start_recordings,\n custom_target_quickstart,\n];\n\n;// CONCATENATED MODULE: ./src/app/QuickStarts/QuickStartDrawer.tsx\nvar QuickStartDrawer_assign = (undefined && undefined.__assign) || function () {\n QuickStartDrawer_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return QuickStartDrawer_assign.apply(this, arguments);\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\nvar LINK_LABEL = "[\\\\d\\\\w\\\\s-()$!&\']+"; // has extra &\' in matcher\nvar HIGHLIGHT_ACTIONS = [\'highlight\']; // use native quickstarts highlight markdown extension\nvar SELECTOR_ID = "[\\\\w-&]+"; // has extra &\'\n// [linkLabel]{{action id}}\nvar HIGHLIGHT_REGEXP = new RegExp("\\\\[(".concat(LINK_LABEL, ")\\\\]{{(").concat(HIGHLIGHT_ACTIONS.join(\'|\'), ") (").concat(SELECTOR_ID, ")}}"), \'g\');\nvar GlobalQuickStartDrawer = function (_a) {\n var children = _a.children;\n var i18n = (0,es/* useTranslation */.$G)().i18n;\n var context = react.useContext(Services/* ServiceContext */.o);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var _b = (0,index_es/* useLocalStorage */._)(\'quickstartId\', \'\'), activeQuickStartID = _b[0], setActiveQuickStartID = _b[1];\n var _c = (0,index_es/* useLocalStorage */._)(\'quickstarts\', {}), allQuickStartStates = _c[0], setAllQuickStartStates = _c[1];\n var activeLevel = useFeatureLevel();\n react.useEffect(function () {\n addSubscription(context.login.getSessionState().subscribe(function (s) {\n if (s == Login_service/* SessionState.NO_USER_SESSION */.sM.NO_USER_SESSION) {\n setActiveQuickStartID(\'\');\n }\n }));\n }, [addSubscription, context.login, setActiveQuickStartID]);\n var filteredQuickStarts = react.useMemo(function () {\n return allQuickStarts.filter(function (qs) { return qs.metadata.featureLevel >= activeLevel; });\n }, [activeLevel]);\n // useValues... hook seems to use first render value of allQuickStarts, so we need to re-render on activeLevel change\n var valuesForQuickStartContext = QuickStartDrawer_assign(QuickStartDrawer_assign({}, (0,index_es/* useValuesForQuickStartContext */.Ii)({\n activeQuickStartID: activeQuickStartID,\n setActiveQuickStartID: setActiveQuickStartID,\n allQuickStartStates: allQuickStartStates,\n setAllQuickStartStates: setAllQuickStartStates,\n language: i18n.language,\n markdown: {\n extensions: [\n {\n // this only takes into effect if the regex matches the HIGHLIGHT_REGEXP i.e. contains the extra matching tokens the patternfly/quickstarts highlight extension regex does not\n type: \'lang\',\n regex: HIGHLIGHT_REGEXP,\n replace: function (text, linkLabel, linkType, linkId) {\n if (!linkLabel || !linkType || !linkId)\n return text;\n return "");\n },\n },\n {\n // replace [APP] with productName like Cryostat\n type: \'output\',\n regex: new RegExp("\\\\[APP\\\\]", \'g\'),\n replace: function (_text) {\n return "".concat(build_namespaceObject.N$);\n },\n },\n ],\n },\n })), { allQuickStarts: filteredQuickStarts });\n return (react.createElement(react.Suspense, { fallback: react.createElement(LoadingView/* LoadingView */.J, null) },\n react.createElement(index_es/* QuickStartContext.Provider */.H.Provider, { value: valuesForQuickStartContext },\n react.createElement(index_es/* QuickStartDrawer */.ix, null, children))));\n};\n\n;// CONCATENATED MODULE: ./src/app/AppLayout/SslErrorModal.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\nvar SslErrorModal = function (props) {\n var routerHistory = (0,react_router/* useHistory */.k6)();\n var handleClick = function () {\n routerHistory.push(\'/security\');\n props.onDismiss();\n };\n return (react.createElement(Modal/* Modal */.u, { appendTo: utils/* portalRoot */.tO, isOpen: props.visible, variant: Modal/* ModalVariant.medium */.v.medium, showClose: true, onClose: props.onDismiss, title: "SSL Error", description: "The connection failed because the SSL Certificate for the target is not trusted." },\n react.createElement(Text/* Text */.x, null,\n "To add the SSL certificate for this target, go to \\u00A0",\n react.createElement(Button_Button/* Button */.zx, { variant: "primary", onClick: handleClick }, "Security"))));\n};\n\n;// CONCATENATED MODULE: ./src/app/AppLayout/AppLayout.tsx\nvar AppLayout_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AppLayout = function (_a) {\n var children = _a.children;\n var serviceContext = react.useContext(Services/* ServiceContext */.o);\n var notificationsContext = react.useContext(Notifications/* NotificationsContext */.cJ);\n var addSubscription = (0,useSubscriptions/* useSubscriptions */.P)();\n var routerHistory = (0,react_router/* useHistory */.k6)();\n var t = (0,es/* useTranslation */.$G)().t;\n var _b = useJoyride(), setJoyState = _b.setState, joyState = _b.state, joyNavOpen = _b.isNavBarOpen, setJoyNavOpen = _b.setIsNavBarOpen;\n var _c = [joyNavOpen, setJoyNavOpen], isNavOpen = _c[0], setIsNavOpen = _c[1];\n var _d = react.useState(true), isMobileView = _d[0], setIsMobileView = _d[1];\n var _e = react.useState(false), showAuthModal = _e[0], setShowAuthModal = _e[1];\n var _f = react.useState(false), showSslErrorModal = _f[0], setShowSslErrorModal = _f[1];\n var _g = react.useState(false), aboutModalOpen = _g[0], setAboutModalOpen = _g[1];\n var _h = react.useState(false), isNotificationDrawerExpanded = _h[0], setNotificationDrawerExpanded = _h[1];\n var showUserIcon = useLogin();\n var _j = react.useState(false), showUserInfoDropdown = _j[0], setShowUserInfoDropdown = _j[1];\n var _k = react.useState(false), showHelpDropdown = _k[0], setShowHelpDropdown = _k[1];\n var _l = react.useState(\'\'), username = _l[0], setUsername = _l[1];\n var _m = react.useState([]), notifications = _m[0], setNotifications = _m[1];\n var _o = react.useState(5), visibleNotificationsCount = _o[0], setVisibleNotificationsCount = _o[1];\n var _p = react.useState(0), unreadNotificationsCount = _p[0], setUnreadNotificationsCount = _p[1];\n var _q = react.useState(0), errorNotificationsCount = _q[0], setErrorNotificationsCount = _q[1];\n var _r = react.useState(Settings_service/* FeatureLevel.PRODUCTION */.Lu.PRODUCTION), activeLevel = _r[0], setActiveLevel = _r[1];\n var location = (0,react_router/* useLocation */.TH)();\n var theme = useTheme()[0];\n react.useEffect(function () {\n if (theme === SettingsUtils/* ThemeSetting.DARK */.LZ.DARK) {\n document.documentElement.classList.add(\'pf-theme-dark\');\n }\n else {\n document.documentElement.classList.remove(\'pf-theme-dark\');\n }\n }, [theme]);\n react.useEffect(function () {\n addSubscription(serviceContext.target.authFailure().subscribe(function () {\n setShowAuthModal(true);\n }));\n }, [serviceContext.target, setShowAuthModal, addSubscription]);\n react.useEffect(function () {\n addSubscription(notificationsContext.notifications().subscribe(function (n) { return setNotifications(AppLayout_spreadArray([], n, true)); }));\n }, [notificationsContext, addSubscription]);\n react.useEffect(function () {\n addSubscription(notificationsContext.drawerState().subscribe(setNotificationDrawerExpanded));\n }, [addSubscription, notificationsContext, setNotificationDrawerExpanded]);\n react.useEffect(function () {\n addSubscription(serviceContext.settings.visibleNotificationsCount().subscribe(setVisibleNotificationsCount));\n }, [addSubscription, serviceContext.settings, setVisibleNotificationsCount]);\n react.useLayoutEffect(function () {\n addSubscription(serviceContext.settings.featureLevel().subscribe(function (featureLevel) { return setActiveLevel(featureLevel); }));\n }, [addSubscription, serviceContext.settings, setActiveLevel]);\n var notificationsToDisplay = react.useMemo(function () {\n return notifications\n .filter(function (n) { return !n.read && !n.hidden; })\n .filter(function (n) { return serviceContext.settings.notificationsEnabledFor(NotificationChannel_service/* NotificationCategory */.mN[n.category || \'\']); })\n .sort(function (prev, curr) {\n if (!prev.timestamp)\n return -1;\n if (!curr.timestamp)\n return 1;\n return prev.timestamp - curr.timestamp;\n });\n }, [notifications, serviceContext.settings]);\n var overflowMessage = react.useMemo(function () {\n if (isNotificationDrawerExpanded) {\n return \'\';\n }\n var overflow = notificationsToDisplay.length - visibleNotificationsCount;\n if (overflow > 0) {\n return "View ".concat(overflow, " more");\n }\n return \'\';\n }, [isNotificationDrawerExpanded, notificationsToDisplay, visibleNotificationsCount]);\n react.useEffect(function () {\n addSubscription(notificationsContext.unreadNotifications().subscribe(function (s) { return setUnreadNotificationsCount(s.length); }));\n }, [notificationsContext, unreadNotificationsCount, setUnreadNotificationsCount, addSubscription]);\n react.useEffect(function () {\n addSubscription(notificationsContext\n .unreadNotifications()\n .pipe((0,map/* map */.U)(function (notifications) {\n return lodash_default().filter(notifications, function (n) { return n.variant === Alert/* AlertVariant.danger */.U.danger || n.variant === Alert/* AlertVariant.warning */.U.warning; });\n }))\n .subscribe(function (s) { return setErrorNotificationsCount(s.length); }));\n }, [\n notificationsContext,\n notificationsContext.unreadNotifications,\n unreadNotificationsCount,\n setUnreadNotificationsCount,\n addSubscription,\n ]);\n var dismissAuthModal = react.useCallback(function () {\n setShowAuthModal(false);\n }, [setShowAuthModal]);\n var authModalOnSave = react.useCallback(function () {\n serviceContext.target.setAuthRetry();\n dismissAuthModal();\n }, [serviceContext.target, dismissAuthModal]);\n var handleMarkNotificationRead = react.useCallback(function (key) { return function () { return notificationsContext.setRead(key, true); }; }, [notificationsContext]);\n var handleTimeout = react.useCallback(function (key) { return function () { return notificationsContext.setHidden(key); }; }, [notificationsContext]);\n react.useEffect(function () {\n addSubscription(serviceContext.target.sslFailure().subscribe(function () {\n setShowSslErrorModal(true);\n }));\n }, [serviceContext.target, serviceContext.target.sslFailure, setShowSslErrorModal, addSubscription]);\n var dismissSslErrorModal = react.useCallback(function () { return setShowSslErrorModal(false); }, [setShowSslErrorModal]);\n var onNavToggle = react.useCallback(function () {\n setIsNavOpen(function (isNavOpen) {\n if (joyState.run === true && joyState.stepIndex === 1 && !isNavOpen) {\n setJoyState({ stepIndex: 2 });\n }\n return !isNavOpen;\n });\n }, [setIsNavOpen, joyState, setJoyState]);\n // prevent page resize to close nav during tour\n var onPageResize = react.useCallback(function (props) {\n if (joyState.run === false) {\n setIsMobileView(props.mobileView);\n setIsNavOpen(!props.mobileView);\n }\n }, [joyState, setIsMobileView, setIsNavOpen]);\n var mobileOnSelect = react.useCallback(function (_) {\n if (isMobileView) {\n setIsNavOpen(false);\n }\n }, [isMobileView, setIsNavOpen]);\n var handleSettingsButtonClick = react.useCallback(function () {\n routerHistory.push(\'/settings\');\n }, [routerHistory]);\n var handleNotificationCenterToggle = react.useCallback(function () {\n notificationsContext.setDrawerState(!isNotificationDrawerExpanded);\n }, [isNotificationDrawerExpanded, notificationsContext]);\n var handleCloseNotificationCenter = react.useCallback(function () {\n notificationsContext.setDrawerState(false);\n }, [notificationsContext]);\n var handleOpenNotificationCenter = react.useCallback(function () {\n notificationsContext.setDrawerState(true);\n }, [notificationsContext]);\n var handleLogout = react.useCallback(function () {\n addSubscription(serviceContext.login.setLoggedOut().subscribe());\n }, [serviceContext.login, addSubscription]);\n var handleLanguagePref = react.useCallback(function () {\n if (routerHistory.location.pathname === \'/settings\') {\n (0,SettingsUtils/* selectTab */.x2)(SettingsUtils/* SettingTab.GENERAL */.BM.GENERAL);\n }\n else {\n var query = new URLSearchParams({ tab: (0,SettingsUtils/* tabAsParam */.lt)(SettingsUtils/* SettingTab.GENERAL */.BM.GENERAL) });\n routerHistory.push("/settings?".concat(query));\n }\n }, [routerHistory]);\n var handleUserInfoToggle = react.useCallback(function () { return setShowUserInfoDropdown(function (v) { return !v; }); }, [setShowUserInfoDropdown]);\n react.useEffect(function () {\n addSubscription(serviceContext.login.getUsername().subscribe(setUsername));\n }, [serviceContext, serviceContext.login, addSubscription, setUsername]);\n var userInfoItems = react.useMemo(function () { return [\n react.createElement(FeatureFlag, { level: Settings_service/* FeatureLevel.BETA */.Lu.BETA, key: \'language-preferences-feature-flag\' },\n react.createElement(DropdownGroup/* DropdownGroup */.p, { key: \'language-preferences\' },\n react.createElement(DropdownItem/* DropdownItem */.h, { onClick: handleLanguagePref }, "Language preference"))),\n react.createElement(DropdownGroup/* DropdownGroup */.p, { key: \'log-out\' },\n react.createElement(DropdownItem/* DropdownItem */.h, { onClick: handleLogout }, "Log out")),\n ]; }, [handleLogout, handleLanguagePref]);\n var UserInfoToggle = react.useMemo(function () { return (react.createElement(DropdownToggle/* DropdownToggle */.Z, { onToggle: handleUserInfoToggle, toggleIndicator: caret_down_icon/* CaretDownIcon */.VA }, username || react.createElement(user_icon/* UserIcon */.tB, { color: "white", size: "sm" }))); }, [username, handleUserInfoToggle]);\n var handleHelpToggle = react.useCallback(function () { return setShowHelpDropdown(function (v) { return !v; }); }, [setShowHelpDropdown]);\n var handleOpenAboutModal = react.useCallback(function () {\n setAboutModalOpen(true);\n }, [setAboutModalOpen]);\n var handleCloseAboutModal = react.useCallback(function () {\n setAboutModalOpen(false);\n }, [setAboutModalOpen]);\n var handleOpenDocumentation = react.useCallback(function () {\n (0,utils/* openTabForUrl */.QX)(build_namespaceObject.e6);\n }, []);\n var handleOpenDiscussion = react.useCallback(function () {\n (0,utils/* openTabForUrl */.QX)(build_namespaceObject.dk);\n }, []);\n var handleOpenGuidedTour = react.useCallback(function () {\n setJoyState({ run: true });\n }, [setJoyState]);\n var helpItems = react.useMemo(function () {\n return [\n react.createElement(ApplicationLauncherItem/* ApplicationLauncherItem */.e, { key: \'Quickstarts\', component: react.createElement(react_router_dom.NavLink, { to: "/quickstarts" }, t(\'AppLayout.APP_LAUNCHER.QUICKSTARTS\')) }),\n react.createElement(ApplicationLauncherItem/* ApplicationLauncherItem */.e, { key: \'Documentation\', onClick: handleOpenDocumentation },\n react.createElement("span", null, t(\'AppLayout.APP_LAUNCHER.DOCUMENTATION\')),\n react.createElement(Icon/* Icon */.J, { isInline: true, size: "lg", iconSize: "sm", style: { marginLeft: \'auto\', paddingLeft: \'1ch\' } },\n react.createElement(external_link_alt_icon/* ExternalLinkAltIcon */.LA, { color: "grey" }))),\n react.createElement(ApplicationLauncherItem/* ApplicationLauncherItem */.e, { key: \'Guided tour\', onClick: handleOpenGuidedTour }, t(\'AppLayout.APP_LAUNCHER.GUIDED_TOUR\')),\n react.createElement(ApplicationLauncherItem/* ApplicationLauncherItem */.e, { key: \'Help\', onClick: handleOpenDiscussion },\n t(\'AppLayout.APP_LAUNCHER.HELP\'),\n react.createElement(Icon/* Icon */.J, { isInline: true, size: "lg", iconSize: "sm", style: { marginLeft: \'auto\', paddingLeft: \'1ch\' } },\n react.createElement(external_link_alt_icon/* ExternalLinkAltIcon */.LA, { color: "grey" }))),\n react.createElement(ApplicationLauncherItem/* ApplicationLauncherItem */.e, { key: \'About\', onClick: handleOpenAboutModal }, t(\'AppLayout.APP_LAUNCHER.ABOUT\')),\n ];\n }, [t, handleOpenDocumentation, handleOpenGuidedTour, handleOpenDiscussion, handleOpenAboutModal]);\n var levelBadge = react.useCallback(function (level) {\n return (react.createElement(Label/* Label */._, { isCompact: true, style: { marginLeft: \'2ch\', textTransform: \'capitalize\', paddingTop: \'0.125ch\', paddingBottom: \'0.125ch\' }, color: level === Settings_service/* FeatureLevel.BETA */.Lu.BETA ? \'green\' : \'red\' }, Settings_service/* FeatureLevel */.Lu[level].toLowerCase()));\n }, []);\n var HeaderToolbar = react.useMemo(function () { return (react.createElement(react.Fragment, null,\n react.createElement(Toolbar/* Toolbar */.o, { isFullHeight: true, isStatic: true },\n react.createElement(ToolbarContent/* ToolbarContent */.c, null,\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group", alignment: { default: \'alignRight\' } },\n react.createElement(FeatureFlag, { strict: true, level: Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { variant: "plain", onClick: function () { return notificationsContext.info("test ".concat(+Date.now())); }, icon: react.createElement(plus_circle_icon/* PlusCircleIcon */.wl, { size: "sm" }) }))),\n react.createElement(ToolbarGroup/* ToolbarGroup */.k, { variant: "icon-button-group" },\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(NotificationBadge/* NotificationBadge */.C, { count: unreadNotificationsCount, variant: errorNotificationsCount > 0 ? \'attention\' : unreadNotificationsCount === 0 ? \'read\' : \'unread\', onClick: handleNotificationCenterToggle, "aria-label": "Notifications" },\n react.createElement(bell_icon/* BellIcon */.Dk, null))),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(Button_Button/* Button */.zx, { onClick: handleSettingsButtonClick, variant: "plain", icon: react.createElement(cog_icon/* CogIcon */.IE, { size: "sm" }), "aria-label": "Settings", "data-tour-id": "settings-link", "data-quickstart-id": "settings-link" })),\n react.createElement(ToolbarItem/* ToolbarItem */.E, null,\n react.createElement(ApplicationLauncher/* ApplicationLauncher */.G, { onSelect: handleHelpToggle, onToggle: handleHelpToggle, isOpen: showHelpDropdown, items: helpItems, position: "right", toggleIcon: react.createElement(question_circle_icon/* QuestionCircleIcon */.pT, null), "data-tour-id": "application-launcher", "data-quickstart-id": "application-launcher" }))),\n react.createElement(ToolbarItem/* ToolbarItem */.E, { visibility: { default: showUserIcon ? \'visible\' : \'hidden\' } },\n react.createElement(Dropdown/* Dropdown */.L, { isPlain: true, onSelect: function () { return setShowUserInfoDropdown(false); }, isOpen: showUserInfoDropdown, toggle: UserInfoToggle, position: "right", dropdownItems: userInfoItems }))))))); }, [\n notificationsContext,\n unreadNotificationsCount,\n errorNotificationsCount,\n handleNotificationCenterToggle,\n handleSettingsButtonClick,\n handleHelpToggle,\n setShowUserInfoDropdown,\n showUserIcon,\n showUserInfoDropdown,\n showHelpDropdown,\n UserInfoToggle,\n userInfoItems,\n helpItems,\n ]);\n var Header = react.useMemo(function () { return (react.createElement(react.Fragment, null,\n react.createElement(Masthead/* Masthead */.H, null,\n react.createElement(MastheadToggle/* MastheadToggle */.C, null,\n react.createElement(PageToggleButton/* PageToggleButton */.H, { variant: "plain", "aria-label": "Navigation", isNavOpen: isNavOpen, onNavToggle: onNavToggle, "data-quickstart-id": "nav-toggle-btn", "data-tour-id": "nav-toggle-btn" },\n react.createElement(bars_icon/* BarsIcon */.KQ, null))),\n react.createElement(MastheadMain/* MastheadMain */.d, null,\n react.createElement(MastheadBrand/* MastheadBrand */.x, { component: \'div\' },\n react.createElement(react_router_dom.Link, { to: "/" },\n react.createElement(Brand/* Brand */.H, { alt: "Cryostat", src: cryostat_logo_hori_rgb_reverse_namespaceObject, className: "cryostat-logo" }))),\n react.createElement(DynamicFeatureFlag, { levels: [Settings_service/* FeatureLevel.DEVELOPMENT */.Lu.DEVELOPMENT, Settings_service/* FeatureLevel.BETA */.Lu.BETA], component: levelBadge })),\n react.createElement(MastheadContent/* MastheadContent */.f, null, HeaderToolbar)),\n react.createElement(AboutCryostatModal, { isOpen: aboutModalOpen, onClose: handleCloseAboutModal }))); }, [isNavOpen, aboutModalOpen, HeaderToolbar, handleCloseAboutModal, onNavToggle, levelBadge]);\n var isActiveRoute = react.useCallback(function (route) {\n var match = (0,react_router/* matchPath */.LX)(location.pathname, route.path);\n if (match && match.isExact) {\n return true;\n }\n else if (route.children) {\n var childMatch = false;\n for (var _i = 0, _a = route.children; _i < _a.length; _i++) {\n var r = _a[_i];\n childMatch = childMatch || isActiveRoute(r);\n }\n return childMatch;\n }\n return false;\n }, [location]);\n var Navigation = react.useMemo(function () { return (react.createElement(Nav/* Nav */.JL, { id: "nav-primary-simple", theme: "dark", variant: "default", onSelect: mobileOnSelect, "aria-label": "Global nav" }, navGroups.map(function (title) {\n return (react.createElement(NavGroup/* NavGroup */.w, { title: title, key: title }, routes.filter(function (route) { return route.navGroup === title; })\n .filter(function (r) { return r.featureLevel === undefined || r.featureLevel >= activeLevel; })\n .map(function (route, idx) {\n return (route.label && (react.createElement(NavItem/* NavItem */.L, { key: "".concat(route.label, "-").concat(idx), id: "".concat(route.label, "-").concat(idx), isActive: isActiveRoute(route) },\n react.createElement(react_router_dom.NavLink, { exact: true, to: route.path, activeClassName: "pf-m-current", "data-quickstart-id": "nav-".concat((0,utils/* cleanDataId */.BP)(route.label), "-tab"), "data-tour-id": "".concat((0,utils/* cleanDataId */.BP)(route.label)) },\n route.label,\n route.featureLevel !== undefined && levelBadge(route.featureLevel)))));\n })));\n }))); }, [mobileOnSelect, isActiveRoute, levelBadge, activeLevel]);\n var Sidebar = react.useMemo(function () { return react.createElement(PageSidebar/* PageSidebar */.$E, { theme: "dark", nav: Navigation, isNavOpen: isNavOpen }); }, [Navigation, isNavOpen]);\n var PageSkipToContent = react.useMemo(function () { return react.createElement(SkipToContent/* SkipToContent */.z, { href: "#primary-app-container" }, "Skip to Content"); }, []);\n var NotificationDrawer = react.useMemo(function () { return react.createElement(NotificationCenter, { onClose: handleCloseNotificationCenter }); }, [handleCloseNotificationCenter]);\n react.useEffect(function () {\n if (showUserIcon && (0,utils/* isAssetNew */.IU)(build_namespaceObject.i8)) {\n handleOpenGuidedTour();\n (0,LocalStorage/* saveToLocalStorage */.m8)(\'ASSET_VERSION\', build_namespaceObject.i8);\n }\n }, [handleOpenGuidedTour, showUserIcon]);\n return (react.createElement(GlobalQuickStartDrawer, null,\n react.createElement(Joyride_CryostatJoyride, null,\n react.createElement(AlertGroup/* AlertGroup */.y, { appendTo: utils/* portalRoot */.tO, isToast: true, isLiveRegion: true, overflowMessage: overflowMessage, onOverflowClick: handleOpenNotificationCenter }, notificationsToDisplay.slice(0, visibleNotificationsCount).map(function (_a) {\n var key = _a.key, title = _a.title, message = _a.message, variant = _a.variant;\n return (react.createElement(Alert/* Alert */.b, { isLiveRegion: true, variant: variant, key: title, title: title, actionClose: react.createElement(AlertActionCloseButton/* AlertActionCloseButton */.g, { onClose: handleMarkNotificationRead(key) }), timeout: true, onTimeout: handleTimeout(key) }, message === null || message === void 0 ? void 0 : message.toString()));\n })),\n react.createElement(Page/* Page */.T, { mainContainerId: "primary-app-container", header: Header, sidebar: Sidebar, notificationDrawer: NotificationDrawer, isNotificationDrawerExpanded: isNotificationDrawerExpanded, onPageResize: onPageResize, skipToContent: PageSkipToContent }, children),\n react.createElement(AuthModal, { visible: showAuthModal, onDismiss: dismissAuthModal, onSave: authModalOnSave, targetObs: serviceContext.target.target() }),\n react.createElement(SslErrorModal, { visible: showSslErrorModal, onDismiss: dismissSslErrorModal }))));\n};\n\n\n;// CONCATENATED MODULE: ./src/app/index.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar App = function () { return (react.createElement(Services/* ServiceContext.Provider */.o.Provider, { value: Services/* defaultServices */.J },\n react.createElement(Notifications/* NotificationsContext.Provider */.cJ.Provider, { value: Notifications/* NotificationsInstance */.Bn },\n react.createElement(react_redux_es/* Provider */.zt, { store: store },\n react.createElement(react_router_dom.BrowserRouter, null,\n react.createElement(JoyrideProvider, null,\n react.createElement(AppLayout, null,\n react.createElement(AppRoutes, null)))))))); };\n\n\n// EXTERNAL MODULE: ./node_modules/react-dom/index.js\nvar react_dom = __webpack_require__(73935);\n;// CONCATENATED MODULE: ./src/index.tsx\n/*\n * Copyright The Cryostat Authors\n *\n * The Universal Permissive License (UPL), Version 1.0\n *\n * Subject to the condition set forth below, permission is hereby granted to any\n * person obtaining a copy of this software, associated documentation and/or data\n * (collectively the "Software"), free of charge and under any and all copyright\n * rights in the Software, and any and all patent rights owned or freely\n * licensable by each licensor hereunder covering either (i) the unmodified\n * Software as contributed to or provided by such licensor, or (ii) the Larger\n * Works (as defined below), to deal in both\n *\n * (a) the Software, and\n * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if\n * one is included with the Software (each a "Larger Work" to which the Software\n * is contributed by such licensors),\n *\n * without restriction, including without limitation the rights to copy, create\n * derivative works of, display, perform, and distribute the Software and make,\n * use, sell, offer for sale, import, export, have made, and have sold the\n * Software and the Larger Work(s), and to sublicense the foregoing rights on\n * either these or other terms.\n *\n * This license is subject to the following condition:\n * The above copyright notice and either this complete permission notice or at\n * a minimum a reference to the UPL must be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nif (false) { var axe, src_config; }\nreact_dom.render(react.createElement(App, null), document.getElementById(\'root\'));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGdCQUFnQixFQUMzQixNQUFNLEVBQUUsZUFBZSxFQUN2QixTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FDekM7WUFDRixvQkFBQyxhQUFhLElBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxvQkFBb0IsR0FBSSxDQUM5RCxDQUNLLENBQzFCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFbUI7OztBQ3puQnJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFFa0Q7QUFDQztBQUNBO0FBQ2hDO0FBQ2lCO0FBQ2pCO0FBQytCO0FBQzBDO0FBQ3ZEO0FBQ2E7QUFDMkI7QUFDakQ7QUFDUTtBQUNvQjtBQUNDO0FBRTVELElBQU0sR0FBRyxHQUE0QixjQUFNLFFBQ3pDLG9CQUFDLGdEQUF1QixJQUFDLEtBQUssRUFBRSwrQkFBZTtJQUM3QyxvQkFBQyw0REFBNkIsSUFBQyxLQUFLLEVBQUUsMkNBQXFCO1FBQ3pELG9CQUFDLCtCQUFRLElBQUMsS0FBSyxFQUFFLEtBQUs7WUFDcEIsb0JBQUMsOEJBQU07Z0JBQ0wsb0JBQUMsZUFBZTtvQkFDZCxvQkFBQyxTQUFTO3dCQUNSLG9CQUFDLFNBQVMsT0FBRyxDQUNILENBQ0ksQ0FDWCxDQUNBLENBQ21CLENBQ1IsQ0FDM0IsRUFkMEMsQ0FjMUMsQ0FBQztBQUVhOzs7OztBQ3RFZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBQzhCO0FBQ1A7QUFDTztBQUVqQyxJQUFJLEtBQXFDLEVBQUUsd0JBWTFDO0FBRUQsZ0JBQWUsQ0FBQyxvQkFBQyxHQUFHLE9BQUcsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBZ0IsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2kxOG4vY29uZmlnLnRzP2RkM2UiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9BYm91dC9BYm91dERlc2NyaXB0aW9uLnRzeD85ZmUxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQWJvdXQvQWJvdXRDcnlvc3RhdE1vZGFsLnRzeD85NjdmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvdXRpbHMvdXNlU2V0U3RhdGUudHM/NTMwZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0pveXJpZGUvSm95cmlkZVByb3ZpZGVyLnRzeD81YTk0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvdXRpbHMvdXNlRGF5anMudHM/NGEzNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLnRzeD8wOTEzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQnJlYWRjcnVtYlBhZ2UvQnJlYWRjcnVtYlBhZ2UudHN4PzA5MzQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC91dGlscy91c2VUaGVtZS50cz85MDBmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQWJvdXQvQWJvdXQudHN4P2VjMmEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9SZWNvcmRpbmdNZXRhZGF0YS9SZWNvcmRpbmdMYWJlbC50c3g/ZDhhYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ01ldGFkYXRhL1JlY29yZGluZ0xhYmVsRmllbGRzLnRzeD80ZGQyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvTW9kYWwvQ2FuY2VsVXBsb2FkTW9kYWwudHN4PzdiZWIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvRmlsZVVwbG9hZHMudHN4PzY5OTEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9BcmNoaXZlcy9BcmNoaXZlVXBsb2FkTW9kYWwudHN4PzYyMTUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Nb2RhbC9EZWxldGVXYXJuaW5nTW9kYWwudHN4PzYwNGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvUmVkdXgvdXRpbHMudHN4PzhhMzciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvUmVkdXgvRmlsdGVycy9SZWNvcmRpbmdGaWx0ZXJTbGljZS50c3g/ZmExNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL3dpdGhUaGVtZWRJY29uLnRzeD83MTJkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRXJyb3JWaWV3L0Vycm9yVmlldy50c3g/ZDI1NSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU2xpY2UudHN4P2RiM2YiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvQXV0b21hdGVkQW5hbHlzaXMvQXV0b21hdGVkQW5hbHlzaXNDYXJkTGlzdC50c3g/ZWE1YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0FwcExheW91dC9DcmVkZW50aWFsQXV0aEZvcm0udHN4PzU0NGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9BcHBMYXlvdXQvQXV0aE1vZGFsLnRzeD80Zjc1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL1NlbGVjdFRlbXBsYXRlU2VsZWN0b3JGb3JtLnRzeD9mYzFmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVGFyZ2V0Vmlldy9Ob1RhcmdldFNlbGVjdGVkLnRzeD9jZmM4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL1NlcmlhbGl6ZWRUYXJnZXQudHN4PzNmMDAiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvVGFyZ2V0U2VsZWN0LnRzeD9kMGNjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0F1dG9tYXRlZEFuYWx5c2lzL0F1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRm9ybS50c3g/MjVjYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9BdXRvbWF0ZWRBbmFseXNpcy9BdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0RyYXdlci50c3g/MmQ2MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9BdXRvbWF0ZWRBbmFseXNpcy9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzTmFtZUZpbHRlci50c3g/MTRkNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9BdXRvbWF0ZWRBbmFseXNpcy9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzVG9waWNGaWx0ZXIudHN4P2Y0NjAiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvQXV0b21hdGVkQW5hbHlzaXMvQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzLnRzeD84OTQ1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0F1dG9tYXRlZEFuYWx5c2lzL0NsaWNrYWJsZUF1dG9tYXRlZEFuYWx5c2lzTGFiZWwudHN4PzFiNDQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvQXV0b21hdGVkQW5hbHlzaXMvRmlsdGVycy9BdXRvbWF0ZWRBbmFseXNpc1Njb3JlRmlsdGVyLnRzeD85Mzc1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0F1dG9tYXRlZEFuYWx5c2lzL0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC50c3g/NmQ1MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9DaGFydHMvamZyL0pGUk1ldHJpY3NDaGFydENvbnRyb2xsZXIudHN4P2RmM2QiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvQ2hhcnRzL21iZWFuL01CZWFuTWV0cmljc0NoYXJ0Q29udHJvbGxlci50c3g/MmRlNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9DaGFydHMvQ2hhcnRDb250ZXh0LnRzeD82NjE1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0NoYXJ0cy9qZnIvSkZSTWV0cmljc0NoYXJ0Q2FyZC50c3g/Mzg2OSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9MaW5lYXJEb3RTcGlubmVyLnRzeD9jNTA0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL1Byb3BlcnR5UGF0aC50c3g/NzQ3ZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1NoYXJlZC9FbXB0eVRleHQudHN4PzVmMTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9TaGFyZWQvRW50aXR5L3V0aWxzLnRzeD81NTZkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL01hdGNoRXhwcmVzc2lvbi9NYXRjaEV4cHJlc3Npb25IaW50LnRzeD9iM2RiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvU2hhcmVkL0NvbGxhcHNlSWNvbi50c3g/ZjgyOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L0dyYXBoVmlldy9Ub3BvbG9neUNvbnRyb2xCYXIudHN4PzA2NDEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS90eXBpbmdzLnRzPzkxZWIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9HcmFwaFZpZXcvTm9kZURlY29yYXRvci50c3g/MTEwYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL3VzZUZlYXR1cmVMZXZlbC50cz84NDkyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvU2hhcmVkL1F1aWNrU2VhcmNoSWNvbi50c3g/NjkxYyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L0FjdGlvbnMvcXVpY2tzZWFyY2hlcy9jdXN0b20tdGFyZ2V0LnRzeD8zMjBkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvQWN0aW9ucy9xdWlja3NlYXJjaGVzL2Rldi1zYW1wbGUudHN4P2VkZmEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9BY3Rpb25zL3F1aWNrc2VhcmNoZXMvYWxsLXF1aWNrLXNlYXJjaGVzLnRzP2ZjNWYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9BY3Rpb25zL1F1aWNrU2VhcmNoUGFuZWwudHN4P2IxMGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9TaGFyZWQvVG9wb2xvZ3lFbXB0eVN0YXRlLnRzeD8xOGI5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvU2hhcmVkL1RvcG9sb2d5RXhjZWVkTGltaXRTdGF0ZS50c3g/MTRkOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1NpZGVCYXIvVG9wb2xvZ3lTaWRlQmFyLnRzeD85NWE0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvU2hhcmVkL1Nob3J0Y3V0cy50c3g/YWY4ZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9SZWR1eC9Db25maWd1cmF0aW9ucy9Ub3BvbG9neUNvbmZpZ1NsaWNlLnRzeD9kNmQyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvVG9vbGJhci9EaXNwbGF5T3B0aW9ucy50c3g/MmMzNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1Rvb2xiYXIvRmluZEJ5TWF0Y2hFeHByZXNzaW9uLnRzeD9jNTA3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvVG9vbGJhci9IZWxwQnV0dG9uLnRzeD8yM2E2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvVG9vbGJhci9RdWlja1NlYXJjaEJ1dHRvbi50c3g/Yjk1ZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1Rvb2xiYXIvVG9wb2xvZ3lGaWx0ZXJDaGlwcy50c3g/MGIxNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL1RvcG9sb2d5RmlsdGVyU2xpY2UudHN4PzcwZDciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9Ub29sYmFyL1RvcG9sb2d5RmlsdGVycy50c3g/Mzk1YyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1Rvb2xiYXIvVG9wb2xvZ3lUb29sYmFyLnRzeD84ZGUyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvR3JhcGhWaWV3L1RvcG9sb2d5R3JhcGhWaWV3LnRzeD81YjA2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvR3JhcGhWaWV3L0N1c3RvbU5vZGUudHN4PzIxNjAiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9HcmFwaFZpZXcvQ3VzdG9tR3JvdXAudHN4P2I0MTQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9HcmFwaFZpZXcvVXRpbHNGYWN0b3J5LnRzeD84ZDFiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL01hdGNoRXhwcmVzc2lvbi91dGlscy50c3g/NGE1ZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9NYXRjaEV4cHJlc3Npb24vTWF0Y2hFeHByZXNzaW9uVmlzdWFsaXplci50c3g/NDAxMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NlY3VyaXR5UGFuZWwvQ3JlZGVudGlhbHMvdXRpbHMudHN4P2EwYjMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZWN1cml0eVBhbmVsL0NyZWRlbnRpYWxzL0NyZWRlbnRpYWxUZXN0VGFibGUudHN4P2E2MGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZWN1cml0eVBhbmVsL0NyZWRlbnRpYWxzL0NyZWF0ZUNyZWRlbnRpYWxNb2RhbC50c3g/ZmI3ZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L0FjdGlvbnMvV2FybmluZ1Jlc29sdmVyLnRzeD8yOTIwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvU2hhcmVkL3V0aWxzLnRzeD8yMWJjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvVG9wb2xvZ3kvQWN0aW9ucy9Ob2RlQWN0aW9ucy50c3g/YmIzZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1NoYXJlZC9FbnRpdHkvRW50aXR5QW5ub3RhdGlvbnMudHN4PzVjNTEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9TaGFyZWQvRW50aXR5L0VudGl0eUxhYmVscy50c3g/MWRkNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L1NoYXJlZC9FbnRpdHkvRW50aXR5VGl0bGUudHN4P2ZkZDIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9TaGFyZWQvRW50aXR5L0VudGl0eURldGFpbHMudHN4P2IyYWQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvSnZtRGV0YWlscy9Kdm1EZXRhaWxzQ2FyZC50c3g/MmMxNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9kYXNoYm9hcmQtdXRpbHMudHN4PzhmYjIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvUmVzaXphYmxlUmVmLnRzeD84OTk1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0RyYWdnYWJsZVJlZi50c3g/YmIwYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9EYXNoYm9hcmRDYXJkLnRzeD8zNDg2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0NoYXJ0cy9tYmVhbi9NQmVhbk1ldHJpY3NDaGFydENhcmQudHN4P2EwNzgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvUmVkdXgvQ29uZmlndXJhdGlvbnMvRGFzaGJvYXJkQ29uZmlnU2xpY2UudHN4PzM1YzMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvUmVkdXgvTWlkZGxld2FyZXMvUGVyc2lzdE1pZGRsZXdhcmUudHN4PzkzMjUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZS50c3g/NGFjOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ3MvRmlsdGVycy9MYWJlbEZpbHRlci50c3g/NzhjMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ01ldGFkYXRhL0NsaWNrYWJsZUxhYmVsLnRzeD8xMmM2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUmVjb3JkaW5nTWV0YWRhdGEvTGFiZWxDZWxsLnRzeD9jY2FjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUmVjb3JkaW5ncy9SZWNvcmRpbmdBY3Rpb25zLnRzeD8wM2FkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGF0ZVRpbWVQaWNrZXIvTWVyaWRpZW1QaWNrZXIudHN4P2VkMTIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2kxOG4vZGF0ZXRpbWVVdGlscy50cz82MjY1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGF0ZVRpbWVQaWNrZXIvVGltZVBpY2tlci50c3g/NWY0NiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0RhdGVUaW1lUGlja2VyL1RpbWV6b25lUGlja2VyLnRzeD9jNjNiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGF0ZVRpbWVQaWNrZXIvRGF0ZVRpbWVQaWNrZXIudHN4PzdiMjYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9SZWNvcmRpbmdzL0ZpbHRlcnMvRGF0ZXRpbWVGaWx0ZXIudHN4PzU4ZDciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9SZWNvcmRpbmdzL0ZpbHRlcnMvRHVyYXRpb25GaWx0ZXIudHN4P2VlZTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9SZWNvcmRpbmdzL0ZpbHRlcnMvTmFtZUZpbHRlci50c3g/MDhmZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ3MvRmlsdGVycy9SZWNvcmRpbmdTdGF0ZUZpbHRlci50c3g/Mjk1MCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ3MvUmVjb3JkaW5nRmlsdGVycy50c3g/NWM0YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ01ldGFkYXRhL0J1bGtFZGl0TGFiZWxzLnRzeD9iM2QyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUmVjb3JkaW5ncy9SZWNvcmRpbmdMYWJlbHNQYW5lbC50c3g/MmU5OCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ3MvUmVjb3JkaW5nc1RhYmxlLnRzeD82YTdjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUmVjb3JkaW5ncy9SZXBvcnRGcmFtZS50c3g/NjEyMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ3MvQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGUudHN4PzcxNTYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9BcmNoaXZlcy9BcmNoaXZlRGlyZWN0b3J5VXRpbC50c3g/M2I2OCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0FyY2hpdmVzL0FsbEFyY2hpdmVkUmVjb3JkaW5nc1RhYmxlLnRzeD9hNTJjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQXJjaGl2ZXMvQWxsVGFyZ2V0c0FyY2hpdmVkUmVjb3JkaW5nc1RhYmxlLnRzeD9lOGFlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQXJjaGl2ZXMvQXJjaGl2ZXMudHN4PzIxYWQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9UYXJnZXRWaWV3L1RhcmdldENvbnRleHRTZWxlY3Rvci50c3g/NjY1NCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RhcmdldFZpZXcvVGFyZ2V0Vmlldy50c3g/MWNmNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0R1cmF0aW9uUGlja2VyL0R1cmF0aW9uUGlja2VyLnRzeD85ZGJlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQ3JlYXRlUmVjb3JkaW5nL0N1c3RvbVJlY29yZGluZ0Zvcm0udHN4PzVjNTYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9DcmVhdGVSZWNvcmRpbmcvU25hcHNob3RSZWNvcmRpbmdGb3JtLnRzeD8zMDc1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQ3JlYXRlUmVjb3JkaW5nL0NyZWF0ZVJlY29yZGluZy50c3g/ZTZhMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NoYXJlZC9GZWF0dXJlRmxhZy9GZWF0dXJlRmxhZy50c3g/NDhlYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL2Zha2VEYXRhLnRzP2YzNWIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvQWRkQ2FyZC50c3g/ODc4YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9EYXNoYm9hcmRDYXJkQWN0aW9uTWVudS50c3g/ZjNlMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9jcnlvc3RhdC1kYXNoYm9hcmQtdGVtcGxhdGVzLnRzeD8yOWVhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0xheW91dFRlbXBsYXRlR3JvdXAudHN4P2Q3ZTIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvU2VhcmNoQXV0b2NvbXBsZXRlLnRzeD84ZTQ5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0xheW91dFRlbXBsYXRlUGlja2VyLnRzeD84NDcyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0Rhc2hib2FyZExheW91dENyZWF0ZU1vZGFsLnRzeD9lM2NlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0Rhc2hib2FyZExheW91dFNldEFzVGVtcGxhdGVNb2RhbC50c3g/OTA0MyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9MYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsLnRzeD9lMTI5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0Rhc2hib2FyZExheW91dFRvb2xiYXIudHN4PzJiYTIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9EYXNoYm9hcmQvRXJyb3JDYXJkLnRzeD9jNmRhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRGFzaGJvYXJkL0Rhc2hib2FyZC50c3g/NDI3MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0Rhc2hib2FyZC9EYXNoYm9hcmRTb2xvLnRzeD8yNzE4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQWdlbnQvQWJvdXRBZ2VudENhcmQudHN4Pzc2Y2UiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9BZ2VudC9BZ2VudExpdmVQcm9iZXMudHN4PzE5ZjMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9BZ2VudC9BZ2VudFByb2JlVGVtcGxhdGVzLnRzeD80MTMzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRXZlbnRzL0V2ZW50VGVtcGxhdGVzLnRzeD83NGE0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvRXZlbnRzL0V2ZW50VHlwZXMudHN4PzFhOGMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9FdmVudHMvRXZlbnRzLnRzeD8xNzQ2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9pMThuL2kxOG5leHRVdGlsLnRzPzQ2YTEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZXR0aW5ncy9MYW5ndWFnZS50c3g/YjIyYyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0xvZ2luL0Jhc2ljQXV0aEZvcm0udHN4Pzk5NzUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Mb2dpbi9Db25uZWN0aW9uRXJyb3IudHN4PzhmODYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Mb2dpbi9Ob29wQXV0aEZvcm0udHN4P2M0ZjEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Mb2dpbi9PcGVuU2hpZnRQbGFjZWhvbGRlckF1dGhGb3JtLnRzeD81MjM4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvTG9naW4vTG9naW4udHN4Pzc0MzUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ob3RGb3VuZC9Ob3RGb3VuZENhcmQudHN4PzkwMTIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ob3RGb3VuZC9Ob3RGb3VuZC50c3g/MWVkMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1F1aWNrU3RhcnRzL1F1aWNrU3RhcnRzQ2F0YWxvZ1BhZ2UudHN4PzdmZDgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9SZWNvcmRpbmdzL0FjdGl2ZVJlY29yZGluZ3NUYWJsZS50c3g/NWIzYyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1JlY29yZGluZ3MvUmVjb3JkaW5ncy50c3g/MDAyMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1J1bGVzL0NyZWF0ZVJ1bGUudHN4PzYxMjciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9SdWxlcy9SdWxlRGVsZXRlV2FybmluZ01vZGFsLnRzeD9jMWRmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUnVsZXMvUnVsZXNVcGxvYWRNb2RhbC50c3g/MjhlOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1J1bGVzL1J1bGVzLnRzeD8xZTZhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2VjdXJpdHlQYW5lbC9DcmVkZW50aWFscy9TdG9yZUNyZWRlbnRpYWxzLnRzeD8wYzZkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2VjdXJpdHlQYW5lbC9DZXJ0aWZpY2F0ZVVwbG9hZE1vZGFsLnRzeD9hMmJhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2VjdXJpdHlQYW5lbC9JbXBvcnRDZXJ0aWZpY2F0ZS50c3g/MDg0YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NlY3VyaXR5UGFuZWwvU2VjdXJpdHlQYW5lbC50c3g/YzRkMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL3VzZUxvZ2luLnRzPzIyNGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZXR0aW5ncy9BdXRvbWF0ZWRBbmFseXNpc0NvbmZpZy50c3g/ZDA2NCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NldHRpbmdzL0F1dG9SZWZyZXNoLnRzeD8xOGIyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2V0dGluZ3MvQ2hhcnRDYXJkc0NvbmZpZy50c3g/ZDk1NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NldHRpbmdzL0RhdGV0aW1lQ29udHJvbC50c3g/MzQyNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NldHRpbmdzL0RlbGV0aW9uRGlhbG9nQ29udHJvbC50c3g/ZjVhNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NldHRpbmdzL0ZlYXR1cmVMZXZlbHMudHN4P2QzMDEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZXR0aW5ncy9Ob3RpZmljYXRpb25Db250cm9sLnRzeD84OGY4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2V0dGluZ3MvVGhlbWUudHN4PzgyYjQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9TZXR0aW5ncy9XZWJTb2NrZXREZWJvdW5jZS50c3g/ZjZlOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1NldHRpbmdzL1NldHRpbmdzLnRzeD8xNmQ2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvU2hhcmVkL0Vycm9yQm91bmRhcnkudHN4PzQxMTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9BY3Rpb25zL0NyZWF0ZVRhcmdldC50c3g/M2NlNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L0xpc3RWaWV3L1V0aWxzRmFjdG9yeS50c3g/ZmQzMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1RvcG9sb2d5L0xpc3RWaWV3L1RvcG9sb2d5TGlzdFZpZXcudHN4P2U5MmYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Ub3BvbG9neS9Ub3BvbG9neS50c3g/YjI2YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3V0aWxzL3VzZURvY3VtZW50VGl0bGUudHM/ZmNlNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL3JvdXRlcy50c3g/ZTAwZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0pveXJpZGUvSm95cmlkZVRvb2x0aXAudHN4PzljMDciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9Kb3lyaWRlL0NyeW9zdGF0Sm95cmlkZS50c3g/ZWRmMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1F1aWNrU3RhcnRzL3F1aWNrc3RhcnQtdXRpbHMudHN4P2IxMzciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vc3JjL2FwcC9RdWlja1N0YXJ0cy9xdWlja3N0YXJ0cy9hdXRvbWF0ZWQtcnVsZXMtcXVpY2tzdGFydC50c3g/NjEzOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1F1aWNrU3RhcnRzL3F1aWNrc3RhcnRzL2Rhc2hib2FyZC1xdWlja3N0YXJ0LnRzeD8zZTk5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUXVpY2tTdGFydHMvcXVpY2tzdGFydHMvZ2VuZXJpYy1xdWlja3N0YXJ0LnRzeD80MjdhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUXVpY2tTdGFydHMvcXVpY2tzdGFydHMvc2V0dGluZ3MtcXVpY2tzdGFydC50c3g/MGIzNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1F1aWNrU3RhcnRzL3F1aWNrc3RhcnRzL3N0YXJ0LWEtcmVjb3JkaW5nLnRzeD83ZDQxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUXVpY2tTdGFydHMvcXVpY2tzdGFydHMvdG9wb2xvZ3kvY3VzdG9tLXRhcmdldC1xdWlja3N0YXJ0LnRzeD9mYWViIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUXVpY2tTdGFydHMvcXVpY2tzdGFydHMvdG9wb2xvZ3kvZ3JvdXAtc3RhcnQtcmVjb3JkaW5ncy50c3g/YjhlYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL1F1aWNrU3RhcnRzL2FsbC1xdWlja3N0YXJ0cy50cz8zZTFlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvUXVpY2tTdGFydHMvUXVpY2tTdGFydERyYXdlci50c3g/YjcwYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL0FwcExheW91dC9Tc2xFcnJvck1vZGFsLnRzeD82ZWEzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9hcHAvQXBwTGF5b3V0L0FwcExheW91dC50c3g/OTgxOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9zcmMvYXBwL2luZGV4LnRzeD8xYjg2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL3NyYy9pbmRleC50c3g/NDc0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgSTE4bmV4dEJyb3dzZXJMYW5ndWFnZURldGVjdG9yIGZyb20gJ2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yJztcbmltcG9ydCB7IGluaXRSZWFjdEkxOG5leHQgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcblxuaW1wb3J0IGVuX2NvbW1vbiBmcm9tICcuLi8uLi9sb2NhbGVzL2VuL2NvbW1vbi5qc29uJztcbmltcG9ydCBlbl9wdWJsaWMgZnJvbSAnLi4vLi4vbG9jYWxlcy9lbi9wdWJsaWMuanNvbic7XG4vLyBpbXBvcnQgemhfY29tbW9uIGZyb20gJy4uLy4uL2xvY2FsZXMvemgvY29tbW9uLmpzb24nO1xuLy8gaW1wb3J0IHpoX3B1YmxpYyBmcm9tICcuLi8uLi9sb2NhbGVzL3poL3B1YmxpYy5qc29uJztcblxuLy8gVE9ETzogLnVzZShCYWNrZW5kKSBldmVudHVhbGx5IHN0b3JlIHRyYW5zbGF0aW9ucyBvbiBiYWNrZW5kP1xuLy8gT3BlbnNoaWZ0IGNvbnNvbGUgZG9lcyB0aGlzIGFscmVhZHk6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNoaWZ0L2NvbnNvbGUvYmxvYi9tYXN0ZXIvZnJvbnRlbmQvcHVibGljL2kxOG4uanNcbmV4cG9ydCBjb25zdCBpMThuUmVzb3VyY2VzID0ge1xuICBlbjoge1xuICAgIHB1YmxpYzogZW5fcHVibGljLFxuICAgIGNvbW1vbjogZW5fY29tbW9uLFxuICB9LFxuICAvLyB6aDoge1xuICAvLyAgIC8vIFRPRE86IGFkZCB6aCB0cmFuc2xhdGlvbiAoYW5kIG90aGVyIGxhbmd1YWdlcyk/XG4gIC8vICAgLy8gcHVibGljOiB6aF9wdWJsaWMsXG4gIC8vICAgLy8gY29tbW9uOiB6aF9jb21tb24sXG4gIC8vIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgaTE4bk5hbWVzcGFjZXMgPSBbJ3B1YmxpYycsICdjb21tb24nXTtcblxuZXhwb3J0IGNvbnN0IGkxOG5MYW5ndWFnZXMgPSBPYmplY3Qua2V5cyhpMThuUmVzb3VyY2VzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlclxuaTE4bmV4dFxuICAudXNlKEkxOG5leHRCcm93c2VyTGFuZ3VhZ2VEZXRlY3RvcilcbiAgLnVzZShpbml0UmVhY3RJMThuZXh0KVxuICAuaW5pdCh7XG4gICAgcmVzb3VyY2VzOiBpMThuUmVzb3VyY2VzLFxuICAgIG5zOiBpMThuTmFtZXNwYWNlcyxcbiAgICBkZWZhdWx0TlM6ICdwdWJsaWMnLFxuICAgIGZhbGxiYWNrTlM6IFsnY29tbW9uJ10sXG4gICAgZmFsbGJhY2tMbmc6IFsnZW4nXSxcbiAgICBkZWJ1ZzogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcsXG4gICAgcmV0dXJuTnVsbDogZmFsc2UsXG4gICAgaW50ZXJwb2xhdGlvbjoge1xuICAgICAgZXNjYXBlVmFsdWU6IGZhbHNlLCAvLyByZWFjdCBhbHJlYWR5IHNhZmVzIGZyb20geHNzID0+IGh0dHBzOi8vd3d3LmkxOG5leHQuY29tL3RyYW5zbGF0aW9uLWZ1bmN0aW9uL2ludGVycG9sYXRpb24jdW5lc2NhcGVcbiAgICB9LFxuICAgIHJlYWN0OiB7XG4gICAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bmV4dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgYnVpbGQgZnJvbSAnQGFwcC9idWlsZC5qc29uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNDb250ZXh0IH0gZnJvbSAnQGFwcC9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBUZXh0LCBUZXh0Q29udGVudCwgVGV4dExpc3QsIFRleHRMaXN0SXRlbSwgVGV4dFZhcmlhbnRzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcblxuZXhwb3J0IGNvbnN0IEFib3V0RGVzY3JpcHRpb24gPSAoKSA9PiB7XG4gIGNvbnN0IHNlcnZpY2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnNDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChOb3RpZmljYXRpb25zQ29udGV4dCk7XG4gIGNvbnN0IFtjcnlvc3RhdFZlcnNpb24sIHNldENyeW9zdGF0VmVyc2lvbl0gPSBSZWFjdC51c2VTdGF0ZSh1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3ViID0gc2VydmljZUNvbnRleHQuYXBpLmNyeW9zdGF0VmVyc2lvbigpLnN1YnNjcmliZShzZXRDcnlvc3RhdFZlcnNpb24pO1xuICAgIHJldHVybiAoKSA9PiBzdWIudW5zdWJzY3JpYmUoKTtcbiAgfSwgW3NlcnZpY2VDb250ZXh0XSk7XG5cbiAgY29uc3QgY3J5b3N0YXRDb21taXRIYXNoID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjcnlvc3RhdFZlcnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhwciA9IC9eKD88ZGVzY3JpYmU+W2EtekEtWjAtOS1fLl0rLVswLTldKy1bYS16MC05XSspKD86LWRpcnR5KT8kLztcbiAgICBjb25zdCByZXN1bHQgPSBjcnlvc3RhdFZlcnNpb24ubWF0Y2goZXhwcik7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIG5vdGlmaWNhdGlvbnNDb250ZXh0Lndhcm5pbmcoXG4gICAgICAgICdDcnlvc3RhdCBWZXJzaW9uIFBhcnNlIEZhaWx1cmUnLFxuICAgICAgICBgQ291bGQgbm90IHBhcnNlIENyeW9zdGF0IHZlcnNpb24gc3RyaW5nICcke2NyeW9zdGF0VmVyc2lvbn0nLmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gJ21haW4nO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0Lmdyb3Vwcz8uZGVzY3JpYmUgfHwgJ21haW4nO1xuICB9LCBbY3J5b3N0YXRWZXJzaW9uLCBub3RpZmljYXRpb25zQ29udGV4dF0pO1xuXG4gIGNvbnN0IHZlcnNpb25Db21wb25lbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoYnVpbGQuY29tbWl0SGFzaFVybCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHRcbiAgICAgICAgICBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5hfVxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgaHJlZj17YnVpbGQuY29tbWl0SGFzaFVybC5yZXBsYWNlKCdfX1JFUExBQ0VfSEFTSF9fJywgY3J5b3N0YXRDb21taXRIYXNoIHx8ICcnKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjcnlvc3RhdFZlcnNpb259XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5wfT57Y3J5b3N0YXRWZXJzaW9ufTwvVGV4dD47XG4gICAgfVxuICB9LCBbY3J5b3N0YXRWZXJzaW9uLCBjcnlvc3RhdENvbW1pdEhhc2hdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dENvbnRlbnQ+XG4gICAgICAgIDxUZXh0TGlzdCBjb21wb25lbnQ9XCJkbFwiPlxuICAgICAgICAgIDxUZXh0TGlzdEl0ZW0gY29tcG9uZW50PVwiZHRcIj57dCgnQWJvdXREZXNjcmlwdGlvbi5WRVJTSU9OJyl9PC9UZXh0TGlzdEl0ZW0+XG4gICAgICAgICAgPFRleHRMaXN0SXRlbSBjb21wb25lbnQ9XCJkZFwiPnt2ZXJzaW9uQ29tcG9uZW50fTwvVGV4dExpc3RJdGVtPlxuICAgICAgICAgIDxUZXh0TGlzdEl0ZW0gY29tcG9uZW50PVwiZHRcIj57dCgnQWJvdXREZXNjcmlwdGlvbi5IT01FUEFHRScpfTwvVGV4dExpc3RJdGVtPlxuICAgICAgICAgIDxUZXh0TGlzdEl0ZW0gY29tcG9uZW50PVwiZGRcIj5cbiAgICAgICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLmF9IHRhcmdldD1cIl9ibGFua1wiIGhyZWY9e2J1aWxkLmhvbWVQYWdlVXJsfT5cbiAgICAgICAgICAgICAgY3J5b3N0YXQuaW9cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHRMaXN0SXRlbT5cbiAgICAgICAgICA8VGV4dExpc3RJdGVtIGNvbXBvbmVudD1cImR0XCI+e3QoJ0Fib3V0RGVzY3JpcHRpb24uQlVHUycpfTwvVGV4dExpc3RJdGVtPlxuICAgICAgICAgIDxUZXh0TGlzdEl0ZW0gY29tcG9uZW50PVwiZGRcIj5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5hfSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPXtidWlsZC5rbm93bklzc3Vlc1VybH0+XG4gICAgICAgICAgICAgICAge3QoJ0Fib3V0RGVzY3JpcHRpb24uS05PV05fSVNTVUVTJyl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgJm5ic3A7fCZuYnNwO1xuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLmF9XG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICBocmVmPXtidWlsZC5maWxlSXNzdWVVcmwucmVwbGFjZSgnX19SRVBMQUNFX1ZFUlNJT05fXycsIGNyeW9zdGF0VmVyc2lvbiB8fCAndW5rbm93bicpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoJ0Fib3V0RGVzY3JpcHRpb24uRklMRV9BX1JFUE9SVCcpfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9UZXh0TGlzdEl0ZW0+XG4gICAgICAgICAgPFRleHRMaXN0SXRlbSBjb21wb25lbnQ9XCJkdFwiPnt0KCdBYm91dERlc2NyaXB0aW9uLk1BSUxJTkdfTElTVCcpfTwvVGV4dExpc3RJdGVtPlxuICAgICAgICAgIDxUZXh0TGlzdEl0ZW0gY29tcG9uZW50PVwiZGRcIj5cbiAgICAgICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLmF9IHRhcmdldD1cIl9ibGFua1wiIGhyZWY9e2J1aWxkLm1haWxpbmdMaXN0VXJsfT5cbiAgICAgICAgICAgICAge2J1aWxkLm1haWxpbmdMaXN0TmFtZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1RleHRMaXN0SXRlbT5cbiAgICAgICAgICA8VGV4dExpc3RJdGVtIGNvbXBvbmVudD1cImR0XCI+e3QoJ0Fib3V0RGVzY3JpcHRpb24uT1BFTl9TT1VSQ0VfTElDRU5TRScpfTwvVGV4dExpc3RJdGVtPlxuICAgICAgICAgIDxUZXh0TGlzdEl0ZW0gY29tcG9uZW50PVwiZGRcIj5cbiAgICAgICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLmF9IHRhcmdldD1cIl9ibGFua1wiIGhyZWY9e2J1aWxkLmxpY2Vuc2VVcmx9PlxuICAgICAgICAgICAgICB7dCgnQWJvdXREZXNjcmlwdGlvbi5MSUNFTlNFJyl9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9UZXh0TGlzdEl0ZW0+XG4gICAgICAgIDwvVGV4dExpc3Q+XG4gICAgICA8L1RleHRDb250ZW50PlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IGJrZ0ltZyBmcm9tICdAYXBwL2Fzc2V0cy9hYm91dF9iYWNrZ3JvdW5kLnBuZyc7XG5pbXBvcnQgY3J5b3N0YXRMb2dvIGZyb20gJ0BhcHAvYXNzZXRzL2NyeW9zdGF0X2ljb25fcmdiX3JldmVyc2Uuc3ZnJztcbmltcG9ydCBidWlsZCBmcm9tICdAYXBwL2J1aWxkLmpzb24nO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQWJvdXRNb2RhbCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBBYm91dERlc2NyaXB0aW9uIH0gZnJvbSAnLi9BYm91dERlc2NyaXB0aW9uJztcblxuZXhwb3J0IGNvbnN0IEFib3V0Q3J5b3N0YXRNb2RhbCA9ICh7IGlzT3Blbiwgb25DbG9zZSB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8QWJvdXRNb2RhbFxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICBwcm9kdWN0TmFtZT17YCR7YnVpbGQucHJvZHVjdE5hbWV9ICR7YnVpbGQudmVyc2lvbn1gfVxuICAgICAgYnJhbmRJbWFnZVNyYz17Y3J5b3N0YXRMb2dvfVxuICAgICAgYnJhbmRJbWFnZUFsdD1cIkNyeW9zdGF0IExvZ29cIlxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgdHJhZGVtYXJrPXt0KCdDUllPU1RBVF9UUkFERU1BUksnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgIGJhY2tncm91bmRJbWFnZVNyYz17YmtnSW1nfVxuICAgID5cbiAgICAgIDxBYm91dERlc2NyaXB0aW9uIC8+XG4gICAgPC9BYm91dE1vZGFsPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG4vLyB0YWtlbiBmcm9tIHN0cmVhbWljaC5naXRodWIuaW8vcmVhY3QtdXNlXG5jb25zdCB1c2VTZXRTdGF0ZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgaW5pdGlhbFN0YXRlOiBUID0ge30gYXMgVFxuKTogW1QsIChwYXRjaDogUGFydGlhbDxUPiB8ICgocHJldlN0YXRlOiBUKSA9PiBQYXJ0aWFsPFQ+KSkgPT4gdm9pZF0gPT4ge1xuICBjb25zdCBbc3RhdGUsIHNldF0gPSB1c2VTdGF0ZTxUPihpbml0aWFsU3RhdGUpO1xuICBjb25zdCBzZXRTdGF0ZSA9IHVzZUNhbGxiYWNrKChwYXRjaCkgPT4ge1xuICAgIHNldCgocHJldlN0YXRlKSA9PiBPYmplY3QuYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhdGNoIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBwYXRjaChwcmV2U3RhdGUpIDogcGF0Y2gpKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBbc3RhdGUsIHNldFN0YXRlXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVNldFN0YXRlO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgdXNlU2V0U3RhdGUgZnJvbSAnQGFwcC91dGlscy91c2VTZXRTdGF0ZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3RlcCB9IGZyb20gJ3JlYWN0LWpveXJpZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEpveXJpZGVTdGF0ZSB7XG4gIHJ1bjogYm9vbGVhbjtcbiAgc3RlcEluZGV4OiBudW1iZXI7XG4gIHN0ZXBzOiBTdGVwW107XG59XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgcnVuOiBmYWxzZSxcbiAgc3RlcEluZGV4OiAwLFxuICBzdGVwczogW10gYXMgU3RlcFtdLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBKb3lyaWRlQ29udGV4dFR5cGUge1xuICBzdGF0ZTogSm95cmlkZVN0YXRlO1xuICBzZXRTdGF0ZTogKHBhdGNoOiBQYXJ0aWFsPEpveXJpZGVTdGF0ZT4gfCAoKHByZXZpb3VzU3RhdGU6IEpveXJpZGVTdGF0ZSkgPT4gUGFydGlhbDxKb3lyaWRlU3RhdGU+KSkgPT4gdm9pZDtcbiAgaXNOYXZCYXJPcGVuOiBib29sZWFuO1xuICBzZXRJc05hdkJhck9wZW46IChpc09wZW46IFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+KSA9PiB2b2lkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbmV4cG9ydCBjb25zdCBKb3lyaWRlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Sm95cmlkZUNvbnRleHRUeXBlPih7XG4gIHN0YXRlOiBkZWZhdWx0U3RhdGUsXG4gIHNldFN0YXRlOiAoKSA9PiB1bmRlZmluZWQsXG4gIGlzTmF2QmFyT3BlbjogdHJ1ZSxcbiAgc2V0SXNOYXZCYXJPcGVuOiAoKSA9PiB1bmRlZmluZWQsXG59KTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uICovXG5cbmV4cG9ydCBjb25zdCBKb3lyaWRlUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW4gfT4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTZXRTdGF0ZShkZWZhdWx0U3RhdGUpO1xuICBjb25zdCBbaXNOYXZCYXJPcGVuLCBzZXRJc05hdkJhck9wZW5dID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoeyBzdGF0ZSwgc2V0U3RhdGUsIGlzTmF2QmFyT3Blbiwgc2V0SXNOYXZCYXJPcGVuIH0pLFxuICAgIFtzdGF0ZSwgc2V0U3RhdGUsIGlzTmF2QmFyT3Blbiwgc2V0SXNOYXZCYXJPcGVuXVxuICApO1xuICByZXR1cm4gKFxuICAgIDxKb3lyaWRlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9IHsuLi5wcm9wc30+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9Kb3lyaWRlQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VKb3lyaWRlID0gKCk6IEpveXJpZGVDb250ZXh0VHlwZSA9PiB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEpveXJpZGVDb250ZXh0KTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgZGF5anMsIHsgRGF0ZXRpbWVGb3JtYXQsIGRlZmF1bHREYXRldGltZUZvcm1hdCwgZ2V0TG9jYWxlIH0gZnJvbSAnQGkxOG4vZGF0ZXRpbWUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBmcm9tLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXlqcygpOiBbdHlwZW9mIGRheWpzLCBEYXRldGltZUZvcm1hdF0ge1xuICBjb25zdCBfbG9jYWxlU3ViUmVmID0gUmVhY3QudXNlUmVmPFN1YnNjcmlwdGlvbltdPihbXSk7XG4gIGNvbnN0IF9zZXJ2aWNlcyA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBbZGF0ZXRpbWVDb250ZXh0LCBzZXREYXRldGltZUNvbnRleHRdID0gUmVhY3QudXNlU3RhdGU8RGF0ZXRpbWVGb3JtYXQ+KGRlZmF1bHREYXRldGltZUZvcm1hdCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+ICgpID0+IF9sb2NhbGVTdWJSZWYuY3VycmVudC5mb3JFYWNoKChzOiBTdWJzY3JpcHRpb24pOiB2b2lkID0+IHMudW5zdWJzY3JpYmUoKSksIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIF9sb2NhbGVTdWJSZWYuY3VycmVudCA9IF9sb2NhbGVTdWJSZWYuY3VycmVudC5jb25jYXQoW1xuICAgICAgX3NlcnZpY2VzLnNldHRpbmdzXG4gICAgICAgIC5kYXRldGltZUZvcm1hdCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNvbmNhdE1hcCgoZjogRGF0ZXRpbWVGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGdldExvY2FsZShmLmRhdGVMb2NhbGUua2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRheWpzLmxvY2FsZSgpID09PSBmLmRhdGVMb2NhbGUua2V5IC8vIG9ubHkgbG9hZCBpZiBub3QgeWV0XG4gICAgICAgICAgICAgICAgPyBvZihmKVxuICAgICAgICAgICAgICAgIDogZnJvbShcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgLmxvYWQoKVxuICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheWpzLmxvY2FsZShsb2NhbGUua2V5KTsgLy8gTG9hZCBnbG9iYWxseVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtmLmRhdGVMb2NhbGUubmFtZX0gKCR7Zi5kYXRlTG9jYWxlLmtleX0pIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgICAgICAgIHJldHVybiBvZihmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoc2V0RGF0ZXRpbWVDb250ZXh0KSxcbiAgICBdKTtcbiAgfSwgW19zZXJ2aWNlcy5zZXR0aW5ncywgc2V0RGF0ZXRpbWVDb250ZXh0LCBfbG9jYWxlU3ViUmVmXSk7XG5cbiAgcmV0dXJuIFtkYXlqcywgZGF0ZXRpbWVDb250ZXh0XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF5anM7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB1c2VEYXlqcyBmcm9tICdAYXBwL3V0aWxzL3VzZURheWpzJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duSXRlbSxcbiAgRHJvcGRvd25Qb3NpdGlvbixcbiAgS2ViYWJUb2dnbGUsXG4gIE5vdGlmaWNhdGlvbkRyYXdlcixcbiAgTm90aWZpY2F0aW9uRHJhd2VyQm9keSxcbiAgTm90aWZpY2F0aW9uRHJhd2VyR3JvdXAsXG4gIE5vdGlmaWNhdGlvbkRyYXdlckdyb3VwTGlzdCxcbiAgTm90aWZpY2F0aW9uRHJhd2VySGVhZGVyLFxuICBOb3RpZmljYXRpb25EcmF3ZXJMaXN0LFxuICBOb3RpZmljYXRpb25EcmF3ZXJMaXN0SXRlbSxcbiAgTm90aWZpY2F0aW9uRHJhd2VyTGlzdEl0ZW1Cb2R5LFxuICBOb3RpZmljYXRpb25EcmF3ZXJMaXN0SXRlbUhlYWRlcixcbiAgVGV4dCxcbiAgVGV4dFZhcmlhbnRzLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25zQ29udGV4dCB9IGZyb20gJy4vTm90aWZpY2F0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ2VudGVyUHJvcHMge1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkRyYXdlckNhdGVnb3J5IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW107XG4gIHVucmVhZENvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb25DZW50ZXI6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PE5vdGlmaWNhdGlvbkNlbnRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbZGF5anMsIGRhdGV0aW1lQ29udGV4dF0gPSB1c2VEYXlqcygpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChOb3RpZmljYXRpb25zQ29udGV4dCk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcblxuICBjb25zdCBbdG90YWxVbnJlYWROb3RpZmljYXRpb25zQ291bnQsIHNldFRvdGFsVW5yZWFkTm90aWZpY2F0aW9uc0NvdW50XSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBbaXNIZWFkZXJEcm9wZG93bk9wZW4sIHNldEhlYWRlckRyb3Bkb3duT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFBST0JMRU1TX0NBVEVHT1JZX0lEWCA9IDI7XG4gIGNvbnN0IFtkcmF3ZXJDYXRlZ29yaWVzLCBzZXREcmF3ZXJDYXRlZ29yaWVzXSA9IFJlYWN0LnVzZVN0YXRlKFtcbiAgICB7IHRpdGxlOiAnQ29tcGxldGVkIEFjdGlvbnMnLCBpc0V4cGFuZGVkOiB0cnVlLCBub3RpZmljYXRpb25zOiBbXSBhcyBOb3RpZmljYXRpb25bXSwgdW5yZWFkQ291bnQ6IDAgfSxcbiAgICB7IHRpdGxlOiAnQ3J5b3N0YXQgU3RhdHVzJywgaXNFeHBhbmRlZDogZmFsc2UsIG5vdGlmaWNhdGlvbnM6IFtdIGFzIE5vdGlmaWNhdGlvbltdLCB1bnJlYWRDb3VudDogMCB9LFxuICAgIHsgdGl0bGU6ICdQcm9ibGVtcycsIGlzRXhwYW5kZWQ6IGZhbHNlLCBub3RpZmljYXRpb25zOiBbXSBhcyBOb3RpZmljYXRpb25bXSwgdW5yZWFkQ291bnQ6IDAgfSxcbiAgXSBhcyBOb3RpZmljYXRpb25EcmF3ZXJDYXRlZ29yeVtdKTtcblxuICBjb25zdCBjb3VudFVucmVhZE5vdGlmaWNhdGlvbnMgPSAobm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW10pID0+IHtcbiAgICByZXR1cm4gbm90aWZpY2F0aW9ucy5maWx0ZXIoKG4pID0+ICFuLnJlYWQpLmxlbmd0aDtcbiAgfTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBjb250ZXh0LmFjdGlvbnNOb3RpZmljYXRpb25zKCksXG4gICAgICAgIGNvbnRleHQuY3J5b3N0YXRTdGF0dXNOb3RpZmljYXRpb25zKCksXG4gICAgICAgIGNvbnRleHQucHJvYmxlbXNOb3RpZmljYXRpb25zKCksXG4gICAgICBdKS5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbkxpc3RzKSA9PiB7XG4gICAgICAgIHNldERyYXdlckNhdGVnb3JpZXMoKGRyYXdlckNhdGVnb3JpZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gZHJhd2VyQ2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5OiBOb3RpZmljYXRpb25EcmF3ZXJDYXRlZ29yeSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBjYXRlZ29yeS5ub3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9uTGlzdHNbaWR4XTtcbiAgICAgICAgICAgIGNhdGVnb3J5LnVucmVhZENvdW50ID0gY291bnRVbnJlYWROb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbkxpc3RzW2lkeF0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC5ub3RpZmljYXRpb25zLCBzZXREcmF3ZXJDYXRlZ29yaWVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnVucmVhZE5vdGlmaWNhdGlvbnMoKS5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgc2V0VG90YWxVbnJlYWROb3RpZmljYXRpb25zQ291bnQocy5sZW5ndGgpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0LnVucmVhZE5vdGlmaWNhdGlvbnMsIHNldFRvdGFsVW5yZWFkTm90aWZpY2F0aW9uc0NvdW50XSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRHJvcGRvd24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SGVhZGVyRHJvcGRvd25PcGVuKCh2KSA9PiAhdik7XG4gIH0sIFtzZXRIZWFkZXJEcm9wZG93bk9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVUb2dnbGVFeHBhbmRDYXRlZ29yeSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjYXRlZ29yeUlkeCkgPT4ge1xuICAgICAgc2V0RHJhd2VyQ2F0ZWdvcmllcygoZHJhd2VyQ2F0ZWdvcmllcykgPT4ge1xuICAgICAgICByZXR1cm4gZHJhd2VyQ2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5OiBOb3RpZmljYXRpb25EcmF3ZXJDYXRlZ29yeSwgaWR4KSA9PiB7XG4gICAgICAgICAgY2F0ZWdvcnkuaXNFeHBhbmRlZCA9IGlkeCA9PT0gY2F0ZWdvcnlJZHggPyAhY2F0ZWdvcnkuaXNFeHBhbmRlZCA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBjYXRlZ29yeTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXREcmF3ZXJDYXRlZ29yaWVzXVxuICApO1xuXG4gIC8vIEV4cGFuZHMgdGhlIFByb2JsZW1zIHRhYiB3aGVuIHVucmVhZCBlcnJvcnMvd2FybmluZ3MgYXJlIHByZXNlbnRcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZHJhd2VyQ2F0ZWdvcmllc1tQUk9CTEVNU19DQVRFR09SWV9JRFhdLnVucmVhZENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0RHJhd2VyQ2F0ZWdvcmllcygoZHJhd2VyQ2F0ZWdvcmllcykgPT4ge1xuICAgICAgcmV0dXJuIGRyYXdlckNhdGVnb3JpZXMubWFwKChjYXRlZ29yeTogTm90aWZpY2F0aW9uRHJhd2VyQ2F0ZWdvcnksIGlkeCkgPT4ge1xuICAgICAgICBjYXRlZ29yeS5pc0V4cGFuZGVkID0gaWR4ID09PSBQUk9CTEVNU19DQVRFR09SWV9JRFg7XG4gICAgICAgIHJldHVybiBjYXRlZ29yeTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBbc2V0RHJhd2VyQ2F0ZWdvcmllcywgZHJhd2VyQ2F0ZWdvcmllc10pO1xuXG4gIGNvbnN0IGhhbmRsZU1hcmtBbGxSZWFkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnRleHQubWFya0FsbFJlYWQoKTtcbiAgfSwgW2NvbnRleHRdKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFsbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb250ZXh0LmNsZWFyQWxsKCk7XG4gIH0sIFtjb250ZXh0XSk7XG5cbiAgY29uc3QgbWFya1JlYWQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoa2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgICBjb250ZXh0LnNldFJlYWQoa2V5KTtcbiAgICB9LFxuICAgIFtjb250ZXh0XVxuICApO1xuXG4gIGNvbnN0IHRpbWVzdGFtcFRvRGF0ZVRpbWVTdHJpbmcgPSAodGltZXN0YW1wPzogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIXRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZGF5anModGltZXN0YW1wKS50eihkYXRldGltZUNvbnRleHQudGltZVpvbmUuZnVsbCkuZm9ybWF0KCdMIExUUyB6Jyk7XG4gIH07XG5cbiAgY29uc3QgZHJhd2VyRHJvcGRvd25JdGVtcyA9IFtcbiAgICA8RHJvcGRvd25JdGVtIGtleT1cIm1hcmtBbGxSZWFkXCIgb25DbGljaz17aGFuZGxlTWFya0FsbFJlYWR9IGNvbXBvbmVudD1cImJ1dHRvblwiPlxuICAgICAgTWFyayBhbGwgcmVhZFxuICAgIDwvRHJvcGRvd25JdGVtPixcbiAgICA8RHJvcGRvd25JdGVtIGtleT1cImNsZWFyQWxsXCIgb25DbGljaz17aGFuZGxlQ2xlYXJBbGx9IGNvbXBvbmVudD1cImJ1dHRvblwiPlxuICAgICAgQ2xlYXIgYWxsXG4gICAgPC9Ecm9wZG93bkl0ZW0+LFxuICBdO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxOb3RpZmljYXRpb25EcmF3ZXI+XG4gICAgICAgIDxOb3RpZmljYXRpb25EcmF3ZXJIZWFkZXIgY291bnQ9e3RvdGFsVW5yZWFkTm90aWZpY2F0aW9uc0NvdW50fSBvbkNsb3NlPXtwcm9wcy5vbkNsb3NlfT5cbiAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgIGlzUGxhaW5cbiAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVUb2dnbGVEcm9wZG93bn1cbiAgICAgICAgICAgIHRvZ2dsZT17PEtlYmFiVG9nZ2xlIG9uVG9nZ2xlPXtoYW5kbGVUb2dnbGVEcm9wZG93bn0gLz59XG4gICAgICAgICAgICBpc09wZW49e2lzSGVhZGVyRHJvcGRvd25PcGVufVxuICAgICAgICAgICAgcG9zaXRpb249e0Ryb3Bkb3duUG9zaXRpb24ucmlnaHR9XG4gICAgICAgICAgICBkcm9wZG93bkl0ZW1zPXtkcmF3ZXJEcm9wZG93bkl0ZW1zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvTm90aWZpY2F0aW9uRHJhd2VySGVhZGVyPlxuICAgICAgICA8Tm90aWZpY2F0aW9uRHJhd2VyQm9keT5cbiAgICAgICAgICA8Tm90aWZpY2F0aW9uRHJhd2VyR3JvdXBMaXN0PlxuICAgICAgICAgICAge2RyYXdlckNhdGVnb3JpZXMubWFwKCh7IHRpdGxlLCBpc0V4cGFuZGVkLCBub3RpZmljYXRpb25zLCB1bnJlYWRDb3VudCB9LCBpZHgpID0+IChcbiAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkRyYXdlckdyb3VwXG4gICAgICAgICAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgY291bnQ9e3VucmVhZENvdW50fVxuICAgICAgICAgICAgICAgIG9uRXhwYW5kPXsoKSA9PiBoYW5kbGVUb2dnbGVFeHBhbmRDYXRlZ29yeShpZHgpfVxuICAgICAgICAgICAgICAgIGtleT17aWR4fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkRyYXdlckxpc3QgaXNIaWRkZW49eyFpc0V4cGFuZGVkfT5cbiAgICAgICAgICAgICAgICAgIHtub3RpZmljYXRpb25zLm1hcCgoeyBrZXksIHRpdGxlLCBtZXNzYWdlLCB2YXJpYW50LCB0aW1lc3RhbXAsIHJlYWQgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uRHJhd2VyTGlzdEl0ZW0ga2V5PXtrZXl9IHZhcmlhbnQ9e3ZhcmlhbnR9IG9uQ2xpY2s9eygpID0+IG1hcmtSZWFkKGtleSl9IGlzUmVhZD17cmVhZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkRyYXdlckxpc3RJdGVtSGVhZGVyIHRpdGxlPXt0aXRsZX0gdmFyaWFudD17dmFyaWFudH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uRHJhd2VyTGlzdEl0ZW1Cb2R5IHRpbWVzdGFtcD17dGltZXN0YW1wVG9EYXRlVGltZVN0cmluZyh0aW1lc3RhbXApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnB9PnttZXNzYWdlPy50b1N0cmluZygpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L05vdGlmaWNhdGlvbkRyYXdlckxpc3RJdGVtQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ob3RpZmljYXRpb25EcmF3ZXJMaXN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvTm90aWZpY2F0aW9uRHJhd2VyTGlzdD5cbiAgICAgICAgICAgICAgPC9Ob3RpZmljYXRpb25EcmF3ZXJHcm91cD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvTm90aWZpY2F0aW9uRHJhd2VyR3JvdXBMaXN0PlxuICAgICAgICA8L05vdGlmaWNhdGlvbkRyYXdlckJvZHk+XG4gICAgICA8L05vdGlmaWNhdGlvbkRyYXdlcj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIEJyZWFkY3J1bWJIZWFkaW5nLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgUGFnZUdyb3VwLFxuICBQYWdlU2VjdGlvbixcbiAgU3RhY2ssXG4gIFN0YWNrSXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmludGVyZmFjZSBCcmVhZGNydW1iUGFnZVByb3BzIHtcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIGJyZWFkY3J1bWJzPzogQnJlYWRjcnVtYlRyYWlsW107XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWJUcmFpbCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJyZWFkY3J1bWJQYWdlOiBSZWFjdC5GQzxCcmVhZGNydW1iUGFnZVByb3BzPiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxQYWdlR3JvdXA+XG4gICAgICA8UGFnZVNlY3Rpb24+XG4gICAgICAgIDxCcmVhZGNydW1iPlxuICAgICAgICAgIHsocHJvcHMuYnJlYWRjcnVtYnMgfHwgW10pLm1hcCgoeyB0aXRsZSwgcGF0aCB9KSA9PiAoXG4gICAgICAgICAgICA8QnJlYWRjcnVtYkl0ZW0ga2V5PXtwYXRofT5cbiAgICAgICAgICAgICAgPExpbmsgdG89e3BhdGh9Pnt0aXRsZX08L0xpbms+XG4gICAgICAgICAgICA8L0JyZWFkY3J1bWJJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxCcmVhZGNydW1iSGVhZGluZz57cHJvcHMucGFnZVRpdGxlfTwvQnJlYWRjcnVtYkhlYWRpbmc+XG4gICAgICAgIDwvQnJlYWRjcnVtYj5cbiAgICAgICAgPFN0YWNrIGhhc0d1dHRlcj17dHJ1ZX0+XG4gICAgICAgICAge1JlYWN0LkNoaWxkcmVuLm1hcChwcm9wcy5jaGlsZHJlbiwgKGNoaWxkKSA9PiAoXG4gICAgICAgICAgICA8U3RhY2tJdGVtIGlzRmlsbGVkPXtpc0l0ZW1GaWxsZWQoY2hpbGQpfT57Y2hpbGR9PC9TdGFja0l0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3RhY2s+XG4gICAgICA8L1BhZ2VTZWN0aW9uPlxuICAgIDwvUGFnZUdyb3VwPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSXRlbUZpbGxlZCA9IChpdGVtOiBSZWFjdC5SZWFjdE5vZGUpOiBib29sZWFuID0+IHtcbiAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHRvQ2hlY2sgPSBpdGVtWydwcm9wcyddID8gaXRlbVsncHJvcHMnXSA6IGl0ZW07XG4gIHJldHVybiB0b0NoZWNrWydpc0ZpbGxlZCddIHx8IHRvQ2hlY2tbJ2lzRnVsbEhlaWdodCddIHx8IHRvQ2hlY2tbJ2RhdGEtZnVsbC1oZWlnaHQnXTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFRoZW1lU2V0dGluZywgVGhlbWVUeXBlIH0gZnJvbSAnQGFwcC9TZXR0aW5ncy9TZXR0aW5nc1V0aWxzJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8vIHNldHRpbmcgaXMgdGhlIG9wdGlvbiwgYnV0IHRoZW1lIGlzIHRoZSBjb2xvciBzY2hlbWUgd2hhdCB3ZSBhY3R1YWxseSByZW5kZXJcbmV4cG9ydCBmdW5jdGlvbiB1c2VUaGVtZSgpOiBbVGhlbWVUeXBlLCBUaGVtZVNldHRpbmddIHtcbiAgY29uc3QgW3NldHRpbmcsIHNldFNldHRpbmddID0gUmVhY3QudXNlU3RhdGU8VGhlbWVTZXR0aW5nPihUaGVtZVNldHRpbmcuTElHSFQpO1xuICBjb25zdCBbdGhlbWUsIHNldFRoZW1lXSA9IFJlYWN0LnVzZVN0YXRlPFRoZW1lVHlwZT4oVGhlbWVTZXR0aW5nLkxJR0hUKTtcbiAgY29uc3QgdGhlbWVSZWYgPSBSZWFjdC51c2VSZWY8U3Vic2NyaXB0aW9uPigpO1xuICBjb25zdCBtZWRpYVJlZiA9IFJlYWN0LnVzZVJlZjxTdWJzY3JpcHRpb24+KCk7XG4gIGNvbnN0IHNlcnZpY2VzID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB0aGVtZVJlZi5jdXJyZW50ID0gc2VydmljZXMuc2V0dGluZ3MudGhlbWVTZXR0aW5nKCkuc3Vic2NyaWJlKCh0aGVtZSkgPT4ge1xuICAgICAgc2V0U2V0dGluZyh0aGVtZSk7XG4gICAgICBpZiAodGhlbWUgPT09IFRoZW1lU2V0dGluZy5BVVRPKSB7XG4gICAgICAgIHNldFRoZW1lKFxuICAgICAgICAgIHdpbmRvdy5tYXRjaE1lZGlhICYmIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlc1xuICAgICAgICAgICAgPyBUaGVtZVNldHRpbmcuREFSS1xuICAgICAgICAgICAgOiBUaGVtZVNldHRpbmcuTElHSFRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRoZW1lKHRoZW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gdGhlbWVSZWYuY3VycmVudCAmJiB0aGVtZVJlZi5jdXJyZW50LnVuc3Vic2NyaWJlKCk7XG4gIH0sIFtzZXJ2aWNlcy5zZXR0aW5ncywgdGhlbWVSZWZdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIG1lZGlhUmVmLmN1cnJlbnQgPSBzZXJ2aWNlcy5zZXR0aW5ncy5tZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLnN1YnNjcmliZSgoZGFyaykgPT4ge1xuICAgICAgc2V0U2V0dGluZygoc2V0dGluZykgPT4ge1xuICAgICAgICBpZiAoc2V0dGluZyA9PT0gVGhlbWVTZXR0aW5nLkFVVE8pIHtcbiAgICAgICAgICBzZXRUaGVtZShkYXJrLm1hdGNoZXMgPyBUaGVtZVNldHRpbmcuREFSSyA6IFRoZW1lU2V0dGluZy5MSUdIVCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldHRpbmc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gbWVkaWFSZWYuY3VycmVudCAmJiBtZWRpYVJlZi5jdXJyZW50LnVuc3Vic2NyaWJlKCk7XG4gIH0sIFtzZXJ2aWNlcy5zZXR0aW5ncywgbWVkaWFSZWZdKTtcblxuICByZXR1cm4gW3RoZW1lLCBzZXR0aW5nXTtcbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgY3J5b3N0YXRMb2dvIGZyb20gJ0BhcHAvYXNzZXRzL2NyeW9zdGF0X2xvZ29faG9yaV9yZ2JfZGVmYXVsdC5zdmcnO1xuaW1wb3J0IGNyeW9zdGF0TG9nb0RhcmsgZnJvbSAnQGFwcC9hc3NldHMvY3J5b3N0YXRfbG9nb19ob3JpX3JnYl9yZXZlcnNlLnN2Zyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iUGFnZSB9IGZyb20gJ0BhcHAvQnJlYWRjcnVtYlBhZ2UvQnJlYWRjcnVtYlBhZ2UnO1xuaW1wb3J0IGJ1aWxkIGZyb20gJ0BhcHAvYnVpbGQuanNvbic7XG5pbXBvcnQgeyBUaGVtZVNldHRpbmcgfSBmcm9tICdAYXBwL1NldHRpbmdzL1NldHRpbmdzVXRpbHMnO1xuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVRoZW1lJztcbmltcG9ydCB7IEJyYW5kLCBDYXJkLCBDYXJkQm9keSwgQ2FyZEZvb3RlciwgQ2FyZEhlYWRlciB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBBYm91dERlc2NyaXB0aW9uIH0gZnJvbSAnLi9BYm91dERlc2NyaXB0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBBYm91dFByb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBBYm91dDogUmVhY3QuRkM8QWJvdXRQcm9wcz4gPSAoXykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdwdWJsaWMnKTtcbiAgY29uc3QgW3RoZW1lXSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3QgbG9nbyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHRoZW1lID09PSBUaGVtZVNldHRpbmcuREFSSyA/IGNyeW9zdGF0TG9nb0RhcmsgOiBjcnlvc3RhdExvZ28pLCBbdGhlbWVdKTtcblxuICByZXR1cm4gKFxuICAgIDxCcmVhZGNydW1iUGFnZSBwYWdlVGl0bGU9e3QoJ0Fib3V0LkFCT1VUJyl9PlxuICAgICAgPENhcmQ+XG4gICAgICAgIDxDYXJkSGVhZGVyPlxuICAgICAgICAgIDxCcmFuZCBhbHQ9e2J1aWxkLnByb2R1Y3ROYW1lfSBzcmM9e2xvZ299IGNsYXNzTmFtZT1cImNyeW9zdGF0LWxvZ29cIiAvPlxuICAgICAgICA8L0NhcmRIZWFkZXI+XG4gICAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgICA8QWJvdXREZXNjcmlwdGlvbiAvPlxuICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgICA8Q2FyZEZvb3Rlcj57dCgnQ1JZT1NUQVRfVFJBREVNQVJLJywgeyBuczogJ2NvbW1vbicgfSl9PC9DYXJkRm9vdGVyPlxuICAgICAgPC9DYXJkPlxuICAgIDwvQnJlYWRjcnVtYlBhZ2U+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBYm91dDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nTGFiZWwge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlTGFiZWxzID0gKGpzb25MYWJlbHM6IG9iamVjdCkgPT4ge1xuICBpZiAoIWpzb25MYWJlbHMpIHJldHVybiBbXTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoanNvbkxhYmVscykubWFwKChbaywgdl0pID0+IHtcbiAgICByZXR1cm4geyBrZXk6IGssIHZhbHVlOiB2IH0gYXMgUmVjb3JkaW5nTGFiZWw7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTGFiZWxzRnJvbUZpbGUgPSAoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8UmVjb3JkaW5nTGFiZWxbXT4gPT4ge1xuICByZXR1cm4gZnJvbShcbiAgICBmaWxlXG4gICAgICAudGV4dCgpXG4gICAgICAudGhlbihKU09OLnBhcnNlKVxuICAgICAgLnRoZW4oKG9iaikgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbHM6IFJlY29yZGluZ0xhYmVsW10gPSBbXTtcbiAgICAgICAgY29uc3QgbGFiZWxPYmogPSBvYmpbJ2xhYmVscyddO1xuICAgICAgICBpZiAobGFiZWxPYmopIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhsYWJlbE9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBsYWJlbHMucHVzaCh7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogbGFiZWxPYmpba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBsYWJlbHMgZm91bmQgaW4gZmlsZScpO1xuICAgICAgfSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmNsdWRlc0xhYmVsID0gKGFycjogUmVjb3JkaW5nTGFiZWxbXSwgc2VhcmNoTGFiZWw6IFJlY29yZGluZ0xhYmVsKSA9PiB7XG4gIHJldHVybiBhcnIuc29tZSgobCkgPT4gaXNFcXVhbExhYmVsKHNlYXJjaExhYmVsLCBsKSk7XG59O1xuXG5jb25zdCBpc0VxdWFsTGFiZWwgPSAoYTogUmVjb3JkaW5nTGFiZWwsIGI6IFJlY29yZGluZ0xhYmVsKSA9PiB7XG4gIHJldHVybiBhLmtleSA9PT0gYi5rZXkgJiYgYS52YWx1ZSA9PT0gYi52YWx1ZTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IExvYWRpbmdWaWV3IH0gZnJvbSAnQGFwcC9Mb2FkaW5nVmlldy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgeyBwYXJzZUxhYmVsc0Zyb21GaWxlLCBSZWNvcmRpbmdMYWJlbCB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvUmVjb3JkaW5nTGFiZWwnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIEZvcm1IZWxwZXJUZXh0LFxuICBIZWxwZXJUZXh0LFxuICBIZWxwZXJUZXh0SXRlbSxcbiAgTGlzdCxcbiAgTGlzdEl0ZW0sXG4gIFBvcG92ZXIsXG4gIFNwbGl0LFxuICBTcGxpdEl0ZW0sXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVmFsaWRhdGVkT3B0aW9ucyxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBDbG9zZUljb24sIEV4Y2xhbWF0aW9uQ2lyY2xlSWNvbiwgRmlsZUljb24sIFBsdXNDaXJjbGVJY29uLCBVcGxvYWRJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRpbmdMYWJlbEZpZWxkc1Byb3BzIHtcbiAgbGFiZWxzOiBSZWNvcmRpbmdMYWJlbFtdO1xuICBzZXRMYWJlbHM6IChsYWJlbHM6IFJlY29yZGluZ0xhYmVsW10pID0+IHZvaWQ7XG4gIHNldFZhbGlkOiAoaXNWYWxpZDogVmFsaWRhdGVkT3B0aW9ucykgPT4gdm9pZDtcbiAgaXNVcGxvYWRhYmxlPzogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBMYWJlbFBhdHRlcm4gPSAvXlxcUyskLztcblxuY29uc3QgZ2V0VmFsaWRhdGVkT3B0aW9uID0gKGlzVmFsaWQ6IGJvb2xlYW4pID0+IHtcbiAgcmV0dXJuIGlzVmFsaWQgPyBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MgOiBWYWxpZGF0ZWRPcHRpb25zLmVycm9yO1xufTtcblxuY29uc3QgbWF0Y2hlc0xhYmVsU3ludGF4ID0gKGw6IFJlY29yZGluZ0xhYmVsKSA9PiB7XG4gIHJldHVybiBsICYmIExhYmVsUGF0dGVybi50ZXN0KGwua2V5KSAmJiBMYWJlbFBhdHRlcm4udGVzdChsLnZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSZWNvcmRpbmdMYWJlbEZpZWxkczogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVjb3JkaW5nTGFiZWxGaWVsZHNQcm9wcz4gPSAoe1xuICBzZXRMYWJlbHMsXG4gIHNldFZhbGlkLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTsgLy8gVXNlIHJlZiB0byByZWZlciB0byBjaGlsZCBjb21wb25lbnRcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaW52YWxpZFVwbG9hZHMsIHNldEludmFsaWRVcGxvYWRzXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5Q2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGlkeCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkTGFiZWxzID0gWy4uLnByb3BzLmxhYmVsc107XG4gICAgICB1cGRhdGVkTGFiZWxzW2lkeF0ua2V5ID0ga2V5O1xuICAgICAgc2V0TGFiZWxzKHVwZGF0ZWRMYWJlbHMpO1xuICAgIH0sXG4gICAgW3Byb3BzLmxhYmVscywgc2V0TGFiZWxzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVZhbHVlQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGlkeCwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRMYWJlbHMgPSBbLi4ucHJvcHMubGFiZWxzXTtcbiAgICAgIHVwZGF0ZWRMYWJlbHNbaWR4XS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc2V0TGFiZWxzKHVwZGF0ZWRMYWJlbHMpO1xuICAgIH0sXG4gICAgW3Byb3BzLmxhYmVscywgc2V0TGFiZWxzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUFkZExhYmVsQnV0dG9uQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0TGFiZWxzKFsuLi5wcm9wcy5sYWJlbHMsIHsga2V5OiAnJywgdmFsdWU6ICcnIH0gYXMgUmVjb3JkaW5nTGFiZWxdKTtcbiAgfSwgW3Byb3BzLmxhYmVscywgc2V0TGFiZWxzXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlTGFiZWxCdXR0b25DbGljayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpZHgpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBbLi4ucHJvcHMubGFiZWxzXTtcbiAgICAgIHVwZGF0ZWQuc3BsaWNlKGlkeCwgMSk7XG4gICAgICBzZXRMYWJlbHModXBkYXRlZCk7XG4gICAgfSxcbiAgICBbcHJvcHMubGFiZWxzLCBzZXRMYWJlbHNdXG4gICk7XG5cbiAgY29uc3QgaXNMYWJlbFZhbGlkID0gUmVhY3QudXNlQ2FsbGJhY2sobWF0Y2hlc0xhYmVsU3ludGF4LCBbbWF0Y2hlc0xhYmVsU3ludGF4XSk7XG5cbiAgY29uc3QgaXNEdXBsaWNhdGVLZXkgPSBSZWFjdC51c2VDYWxsYmFjaygoa2V5OiBzdHJpbmcsIGxhYmVsczogUmVjb3JkaW5nTGFiZWxbXSkgPT4ge1xuICAgIHJldHVybiBsYWJlbHMuZmlsdGVyKChsYWJlbCkgPT4gbGFiZWwua2V5ID09PSBrZXkpLmxlbmd0aCA+IDE7XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbGxMYWJlbHNWYWxpZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcHJvcHMubGFiZWxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBwcm9wcy5sYWJlbHMucmVkdWNlKFxuICAgICAgKHByZXYsIGN1cnIpID0+IGlzTGFiZWxWYWxpZChjdXJyKSAmJiAhaXNEdXBsaWNhdGVLZXkoY3Vyci5rZXksIHByb3BzLmxhYmVscykgJiYgcHJldixcbiAgICAgIHRydWVcbiAgICApO1xuICB9LCBbcHJvcHMubGFiZWxzLCBpc0xhYmVsVmFsaWQsIGlzRHVwbGljYXRlS2V5XSk7XG5cbiAgY29uc3QgdmFsaWRLZXlzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYXJyID0gQXJyYXkocHJvcHMubGFiZWxzLmxlbmd0aCkuZmlsbChWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICAgIHByb3BzLmxhYmVscy5mb3JFYWNoKChsYWJlbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChsYWJlbC5rZXkubGVuZ3RoID4gMCkge1xuICAgICAgICBhcnJbaW5kZXhdID0gZ2V0VmFsaWRhdGVkT3B0aW9uKExhYmVsUGF0dGVybi50ZXN0KGxhYmVsLmtleSkgJiYgIWlzRHVwbGljYXRlS2V5KGxhYmVsLmtleSwgcHJvcHMubGFiZWxzKSk7XG4gICAgICB9IC8vIElnbm9yZSBpbml0aWFsIGVtcHR5IGtleSBpbnB1dHNcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9LCBbcHJvcHMubGFiZWxzLCBpc0R1cGxpY2F0ZUtleV0pO1xuXG4gIGNvbnN0IHZhbGlkVmFsdWVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYXJyID0gQXJyYXkocHJvcHMubGFiZWxzLmxlbmd0aCkuZmlsbChWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICAgIHByb3BzLmxhYmVscy5mb3JFYWNoKChsYWJlbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChsYWJlbC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFycltpbmRleF0gPSBnZXRWYWxpZGF0ZWRPcHRpb24oTGFiZWxQYXR0ZXJuLnRlc3QobGFiZWwudmFsdWUpKTtcbiAgICAgIH0gLy8gSWdub3JlIGluaXRpYWwgZW1wdHkgdmFsdWUgaW5wdXRzXG4gICAgfSk7XG4gICAgcmV0dXJuIGFycjtcbiAgfSwgW3Byb3BzLmxhYmVsc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VmFsaWQoZ2V0VmFsaWRhdGVkT3B0aW9uKGFsbExhYmVsc1ZhbGlkKSk7XG4gIH0sIFtzZXRWYWxpZCwgYWxsTGFiZWxzVmFsaWRdKTtcblxuICBjb25zdCBoYW5kbGVVcGxvYWRMYWJlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzO1xuICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0YXNrczogT2JzZXJ2YWJsZTxSZWNvcmRpbmdMYWJlbFtdPltdID0gW107XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIGZvciAoY29uc3QgbGFiZWxGaWxlIG9mIGUudGFyZ2V0LmZpbGVzKSB7XG4gICAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIHBhcnNlTGFiZWxzRnJvbUZpbGUobGFiZWxGaWxlKS5waXBlKFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0SW52YWxpZFVwbG9hZHMoKG9sZCkgPT4gb2xkLmNvbmNhdChbbGFiZWxGaWxlLm5hbWVdKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgICB6aXAodGFza3MpLnN1YnNjcmliZSgobGFiZWxBcnJheXM6IFJlY29yZGluZ0xhYmVsW11bXSkgPT4ge1xuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbEFycmF5cy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gYWNjLmNvbmNhdChuZXh0KSwgW10pO1xuICAgICAgICAgICAgc2V0TGFiZWxzKFsuLi5wcm9wcy5sYWJlbHMsIC4uLmxhYmVsc10pO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0TGFiZWxzLCBwcm9wcy5sYWJlbHMsIGFkZFN1YnNjcmlwdGlvbiwgc2V0TG9hZGluZ11cbiAgKTtcblxuICBjb25zdCBjbG9zZVdhcm5pbmdQb3BvdmVyID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0SW52YWxpZFVwbG9hZHMoW10pLCBbc2V0SW52YWxpZFVwbG9hZHNdKTtcblxuICBjb25zdCBvcGVuTGFiZWxGaWxlQnJvd3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlucHV0UmVmLmN1cnJlbnQgJiYgaW5wdXRSZWYuY3VycmVudC5jbGljaygpO1xuICB9LCBbaW5wdXRSZWZdKTtcblxuICByZXR1cm4gbG9hZGluZyA/IChcbiAgICA8TG9hZGluZ1ZpZXcgLz5cbiAgKSA6IChcbiAgICA8PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBhcmlhLWxhYmVsPVwiQWRkIExhYmVsXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlQWRkTGFiZWxCdXR0b25DbGlja31cbiAgICAgICAgdmFyaWFudD1cImxpbmtcIlxuICAgICAgICBpY29uPXs8UGx1c0NpcmNsZUljb24gLz59XG4gICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICA+XG4gICAgICAgIEFkZCBMYWJlbFxuICAgICAgPC9CdXR0b24+XG4gICAgICB7cHJvcHMuaXNVcGxvYWRhYmxlICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICAgICAgICBpc1Zpc2libGU9eyEhaW52YWxpZFVwbG9hZHMubGVuZ3RofVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cInVwbG9hZGluZyB3YXJuaW5nXCJcbiAgICAgICAgICAgIGFsZXJ0U2V2ZXJpdHlWYXJpYW50PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGhlYWRlckNvbnRlbnQ9XCJJbnZhbGlkIFNlbGVjdGlvblwiXG4gICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ9XCJoMVwiXG4gICAgICAgICAgICBzaG91bGRDbG9zZT17Y2xvc2VXYXJuaW5nUG9wb3Zlcn1cbiAgICAgICAgICAgIGhlYWRlckljb249ezxFeGNsYW1hdGlvbkNpcmNsZUljb24gLz59XG4gICAgICAgICAgICBib2R5Q29udGVudD17XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFRleHQgY29tcG9uZW50PVwiaDRcIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdSZWNvcmRpbmdMYWJlbEZpZWxkcy5JTlZBTElEX1VQTE9BRFMnLCB7IGNvdW50OiBpbnZhbGlkVXBsb2Fkcy5sZW5ndGggfSl9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxMaXN0PlxuICAgICAgICAgICAgICAgICAge2ludmFsaWRVcGxvYWRzLm1hcCgodXBsb2FkTmFtZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW0ga2V5PXt1cGxvYWROYW1lfSBpY29uPXs8RmlsZUljb24gLz59PlxuICAgICAgICAgICAgICAgICAgICAgIHt1cGxvYWROYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L0xpc3RJdGVtPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJVcGxvYWQgTGFiZWxzXCJcbiAgICAgICAgICAgICAgb25DbGljaz17b3BlbkxhYmVsRmlsZUJyb3dzZX1cbiAgICAgICAgICAgICAgdmFyaWFudD1cImxpbmtcIlxuICAgICAgICAgICAgICBpY29uPXs8VXBsb2FkSWNvbiAvPn1cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVXBsb2FkIExhYmVsc1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgIGFjY2VwdD17Jy5qc29uJ31cbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVVwbG9hZExhYmVsfVxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgICB7cHJvcHMubGFiZWxzLm1hcCgobGFiZWwsIGlkeCkgPT4gKFxuICAgICAgICA8U3BsaXQgaGFzR3V0dGVyIGtleT17aWR4fT5cbiAgICAgICAgICA8U3BsaXRJdGVtIGlzRmlsbGVkPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgaWQ9XCJsYWJlbC1rZXktaW5wdXRcIlxuICAgICAgICAgICAgICBuYW1lPVwibGFiZWwta2V5LWlucHV0XCJcbiAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImxhYmVsLWtleS1pbnB1dC1oZWxwZXJcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGFiZWwgS2V5XCJcbiAgICAgICAgICAgICAgdmFsdWU9e2xhYmVsLmtleSA/PyAnJ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhrZXkpID0+IGhhbmRsZUtleUNoYW5nZShpZHgsIGtleSl9XG4gICAgICAgICAgICAgIHZhbGlkYXRlZD17dmFsaWRLZXlzW2lkeF19XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFRleHQ+S2V5PC9UZXh0PlxuICAgICAgICAgICAgPEZvcm1IZWxwZXJUZXh0XG4gICAgICAgICAgICAgIGlzSGlkZGVuPXt2YWxpZEtleXNbaWR4XSAhPT0gVmFsaWRhdGVkT3B0aW9ucy5lcnJvciAmJiB2YWxpZFZhbHVlc1tpZHhdICE9PSBWYWxpZGF0ZWRPcHRpb25zLmVycm9yfVxuICAgICAgICAgICAgICBjb21wb25lbnQ9XCJkaXZcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SGVscGVyVGV4dCBpZD1cImxhYmVsLWVycm9yLXRleHRcIj5cbiAgICAgICAgICAgICAgICA8SGVscGVyVGV4dEl0ZW0gdmFyaWFudD1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgICBLZXlzIG11c3QgYmUgdW5pcXVlLiBMYWJlbHMgc2hvdWxkIG5vdCBjb250YWluIGVtcHR5IHNwYWNlcy5cbiAgICAgICAgICAgICAgICA8L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgICAgICA8L0hlbHBlclRleHQ+XG4gICAgICAgICAgICA8L0Zvcm1IZWxwZXJUZXh0PlxuICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgIDxTcGxpdEl0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBpZD1cImxhYmVsLXZhbHVlLWlucHV0XCJcbiAgICAgICAgICAgICAgbmFtZT1cImxhYmVsLXZhbHVlLWlucHV0XCJcbiAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImxhYmVsLXZhbHVlLWlucHV0LWhlbHBlclwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMYWJlbCBWYWx1ZVwiXG4gICAgICAgICAgICAgIHZhbHVlPXtsYWJlbC52YWx1ZSA/PyAnJ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gaGFuZGxlVmFsdWVDaGFuZ2UoaWR4LCB2YWx1ZSl9XG4gICAgICAgICAgICAgIHZhbGlkYXRlZD17dmFsaWRWYWx1ZXNbaWR4XX1cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VGV4dD5WYWx1ZTwvVGV4dD5cbiAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgICA8U3BsaXRJdGVtPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVMYWJlbEJ1dHRvbkNsaWNrKGlkeCl9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJsaW5rXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBMYWJlbFwiXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGljb249ezxDbG9zZUljb24gY29sb3I9XCJncmF5XCIgc2l6ZT1cInNtXCIgLz59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICA8L1NwbGl0PlxuICAgICAgKSl9XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbiwgTW9kYWwgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxVcGxvYWRNb2RhbFByb3BzIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgb25ZZXM6ICgpID0+IHZvaWQ7XG4gIG9uTm86ICgpID0+IHZvaWQ7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IENhbmNlbFVwbG9hZE1vZGFsOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxDYW5jZWxVcGxvYWRNb2RhbFByb3BzPiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICB3aWR0aD17JzQwJSd9XG4gICAgICBpc09wZW49e3Byb3BzLnZpc2libGV9XG4gICAgICBzaG93Q2xvc2U9e3RydWV9XG4gICAgICBvbkNsb3NlPXtwcm9wcy5vbk5vfVxuICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgYWN0aW9ucz17W1xuICAgICAgICA8QnV0dG9uIGtleT17J1llcyd9IHZhcmlhbnQ9XCJwcmltYXJ5XCIgb25DbGljaz17cHJvcHMub25ZZXN9PlxuICAgICAgICAgIFllc1xuICAgICAgICA8L0J1dHRvbj4sXG4gICAgICAgIDxCdXR0b24ga2V5PXsnTm8nfSB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17cHJvcHMub25Ob30+XG4gICAgICAgICAgTm9cbiAgICAgICAgPC9CdXR0b24+LFxuICAgICAgXX1cbiAgICA+XG4gICAgICB7cHJvcHMubWVzc2FnZX1cbiAgICA8L01vZGFsPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBDYW5jZWxVcGxvYWRNb2RhbCB9IGZyb20gJ0BhcHAvTW9kYWwvQ2FuY2VsVXBsb2FkTW9kYWwnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc0NvbnRleHQgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQge1xuICBNdWx0aXBsZUZpbGVVcGxvYWQsXG4gIE11bHRpcGxlRmlsZVVwbG9hZE1haW4sXG4gIE11bHRpcGxlRmlsZVVwbG9hZFN0YXR1cyxcbiAgTXVsdGlwbGVGaWxlVXBsb2FkU3RhdHVzSXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBJblByb2dyZXNzSWNvbiwgVXBsb2FkSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm9tcHQgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NWYXJpYW50ID0gJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRlVwbG9hZCB7XG4gIGZpbGU6IEZpbGU7XG4gIGFib3J0U2lnbmFsOiBTdWJqZWN0PHZvaWQ+O1xuICBwcm9ncmVzcz86IHtcbiAgICBwcm9ncmVzc1ZhbHVlOiBudW1iZXI7XG4gICAgcHJvZ3Jlc3NWYXJpYW50OiBQcm9ncmVzc1ZhcmlhbnQ7XG4gIH07XG4gIGhlbHBlclRleHQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGVycm9yPzogRXJyb3I7IC8vIGVycm9yLm1lc3NhZ2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgaGVscGVyVGV4dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZENhbGxiYWNrcyB7XG4gIGdldFByb2dyZXNzVXBkYXRlQ2FsbGJhY2s6IChmaWxlbmFtZTogc3RyaW5nKSA9PiAocHJvZ3Jlc3M6IG51bWJlciB8IHN0cmluZykgPT4gdm9pZDtcbiAgb25TaW5nbGVTdWNjZXNzOiAoZmlsZW5hbWU6IHN0cmluZywgbWVzc2FnZT86IFJlYWN0LlJlYWN0Tm9kZSkgPT4gdm9pZDtcbiAgb25TaW5nbGVGYWlsdXJlOiAoZmlsZW5hbWU6IHN0cmluZywgZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmlsZVVwbG9hZFByb3BzIHtcbiAgc3VibWl0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgYWJvcnRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB1cGxvYWRpbmc6IGJvb2xlYW47XG4gIGRpc3BsYXlBY2NlcHRzOiBzdHJpbmdbXTtcbiAgZHJvcFpvbmVBY2NlcHRzPzogc3RyaW5nW107IC8vIEluZmVyIGZyb20gZGlzcGxheUFjY2VwdHMsIGlmIG5vdCBzcGVjaWZpZWRcbiAgb25GaWxlc0NoYW5nZT86IChmaWxlczogRlVwbG9hZFtdKSA9PiB2b2lkO1xuICBvbkZpbGVTdWJtaXQ6IChmaWxlVXBsb2FkczogRlVwbG9hZFtdLCB1cGxvYWRDYWxsYmFja3M6IFVwbG9hZENhbGxiYWNrcykgPT4gdm9pZDtcbiAgdGl0bGVJY29uPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZVRleHQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlVGV4dFNlcGFyYXRvcj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaW5mb1RleHQ/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBNdWx0aUZpbGVVcGxvYWQ6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PE11bHRpRmlsZVVwbG9hZFByb3BzPiA9ICh7XG4gIHRpdGxlSWNvbixcbiAgdGl0bGVUZXh0LFxuICB0aXRsZVRleHRTZXBhcmF0b3IsXG4gIGluZm9UZXh0LFxuICBkaXNwbGF5QWNjZXB0cyxcbiAgZHJvcFpvbmVBY2NlcHRzLFxuICBvbkZpbGVTdWJtaXQsXG4gIHVwbG9hZGluZyxcbiAgb25GaWxlc0NoYW5nZSxcbiAgc3VibWl0UmVmLFxuICBhYm9ydFJlZixcbn0pID0+IHtcbiAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IFJlYWN0LnVzZUNvbnRleHQoTm90aWZpY2F0aW9uc0NvbnRleHQpO1xuICBjb25zdCBbZmlsZVVwbG9hZHMsIHNldEZpbGVVcGxvYWRzXSA9IFJlYWN0LnVzZVN0YXRlPEZVcGxvYWRbXT4oW10pO1xuICBjb25zdCBbc2hvd0NhbmNlbFByb21wdCwgc2V0U2hvd0NhbmNlbFByb21wdF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgZHpBY2NlcHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZHJvcFpvbmVBY2NlcHRzICYmIGRyb3Bab25lQWNjZXB0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkcm9wWm9uZUFjY2VwdHMuam9pbignLCcpO1xuICAgIH1cbiAgICByZXR1cm4gZGlzcGxheUFjY2VwdHMubWFwKCh0KSA9PiBgLiR7dC50b0xvY2FsZUxvd2VyQ2FzZSgpfWApLmpvaW4oJywnKTtcbiAgfSwgW2Ryb3Bab25lQWNjZXB0cywgZGlzcGxheUFjY2VwdHNdKTtcblxuICBjb25zdCBoYW5kbGVGaWxlRHJvcCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChkcm9wcGVkRmlsZXM6IEZpbGVbXSkgPT4ge1xuICAgICAgc2V0RmlsZVVwbG9hZHMoKG9sZCkgPT4ge1xuICAgICAgICAvLyBDaGVjayBmb3IgcmUtdXBsb2Fkc1xuICAgICAgICBjb25zdCBjdXJyZW50RmlsZW5hbWVzID0gb2xkLm1hcCgoZmlsZVVwbG9hZCkgPT4gZmlsZVVwbG9hZC5maWxlLm5hbWUpO1xuICAgICAgICBjb25zdCByZVVwbG9hZEZpbGVuYW1lcyA9IGRyb3BwZWRGaWxlcy5maWx0ZXIoKGYpID0+IGN1cnJlbnRGaWxlbmFtZXMuaW5jbHVkZXMoZi5uYW1lKSkubWFwKChmKSA9PiBmLm5hbWUpO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZpbGVVcGxvYWRzID0gW1xuICAgICAgICAgIC4uLm9sZC5maWx0ZXIoKGZpbGVVcGxvYWQpID0+ICFyZVVwbG9hZEZpbGVuYW1lcy5pbmNsdWRlcyhmaWxlVXBsb2FkLmZpbGUubmFtZSkpLFxuICAgICAgICAgIC4uLmRyb3BwZWRGaWxlcy5tYXAoXG4gICAgICAgICAgICAoZikgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBmaWxlOiBmLFxuICAgICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBuZXcgU3ViamVjdDx2b2lkPigpLFxuICAgICAgICAgICAgICB9IGFzIEZVcGxvYWQpXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgICAgb25GaWxlc0NoYW5nZSAmJiBvbkZpbGVzQ2hhbmdlKG5ld0ZpbGVVcGxvYWRzKTtcbiAgICAgICAgcmV0dXJuIG5ld0ZpbGVVcGxvYWRzO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0RmlsZVVwbG9hZHMsIG9uRmlsZXNDaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRmlsZVJlamVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChyZWplY3RlZEZpbGVzOiBGaWxlW10pID0+IHtcbiAgICAgIHJlamVjdGVkRmlsZXMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICBpZiAoIWR6QWNjZXB0LmluY2x1ZGVzKGYudHlwZSkgfHwgZi50eXBlID09PSAnJykge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZmlsZSBmb3JtYXQ6ICR7ZHpBY2NlcHR9LCBidXQgcmVjZWl2ZWQgJHtcbiAgICAgICAgICAgIGYudHlwZSA9PT0gJycgPyAndW5rbm93biB0eXBlJyA6IGYudHlwZVxuICAgICAgICAgIH0gZm9yICR7Zi5uYW1lfWA7XG4gICAgICAgICAgbm90aWZpY2F0aW9ucy53YXJuaW5nKGBJbmNvbXBhdGlibGUgZmlsZSBmb3JtYXRgLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub3RpZmljYXRpb25zLndhcm5pbmcoYEZhaWxlZCB0byBsb2FkIGZpbGVgLCBmLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtub3RpZmljYXRpb25zLCBkekFjY2VwdF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVGaWxlUmVtb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHJlbW92ZWRGaWxlbmFtZTogc3RyaW5nLCBhYm9ydCA9IGZhbHNlKSA9PiB7XG4gICAgICBpZiAoYWJvcnQpIHtcbiAgICAgICAgY29uc3QgZmlsZVRvQWJvcnQgPSBmaWxlVXBsb2Fkcy5maW5kKChmaWxlVXBsb2FkKSA9PiBmaWxlVXBsb2FkLmZpbGUubmFtZSA9PT0gcmVtb3ZlZEZpbGVuYW1lKTtcbiAgICAgICAgZmlsZVRvQWJvcnQ/LmFib3J0U2lnbmFsLm5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEZpbGVVcGxvYWRzKChvbGQpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdGaWxlVXBsb2FkcyA9IG9sZC5maWx0ZXIoKGZpbGVVcGxvYWQpID0+IGZpbGVVcGxvYWQuZmlsZS5uYW1lICE9PSByZW1vdmVkRmlsZW5hbWUpO1xuICAgICAgICAgIG9uRmlsZXNDaGFuZ2UgJiYgb25GaWxlc0NoYW5nZShuZXdGaWxlVXBsb2Fkcyk7XG4gICAgICAgICAgcmV0dXJuIG5ld0ZpbGVVcGxvYWRzO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmaWxlVXBsb2Fkcywgc2V0RmlsZVVwbG9hZHMsIG9uRmlsZXNDaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgZ2V0UHJvZ3Jlc3NVcGRhdGVDYWxsYmFjayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChmaWxlbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gKHByb2dyZXNzOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgc2V0RmlsZVVwbG9hZHMoKG9sZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gb2xkLmZpbmQoKGYpID0+IGYuZmlsZS5uYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAuLi5vbGQuZmlsdGVyKChmKSA9PiBmLmZpbGUubmFtZSAhPT0gZmlsZW5hbWUpLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ubWF0Y2gsXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICAgIHByb2dyZXNzVmFsdWU6IHByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NWYXJpYW50OiBgJHtwcm9ncmVzc31gID09ICcxMDAnID8gJ3N1Y2Nlc3MnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0gYXMgRlVwbG9hZCxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvbGQ7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIFtzZXRGaWxlVXBsb2Fkc11cbiAgKTtcblxuICBjb25zdCBvblNpbmdsZUZhaWx1cmUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmlsZW5hbWU6IHN0cmluZywgZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBzZXRGaWxlVXBsb2Fkcygob2xkKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gb2xkLmZpbmQoKGYpID0+IGYuZmlsZS5uYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5vbGQuZmlsdGVyKChmKSA9PiBmLmZpbGUubmFtZSAhPT0gZmlsZW5hbWUpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5tYXRjaCxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBwcm9ncmVzc1ZhbHVlOiBtYXRjaC5wcm9ncmVzcz8ucHJvZ3Jlc3NWYWx1ZSB8fCAwLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzVmFyaWFudDogJ2RhbmdlcicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgIH0gYXMgRlVwbG9hZCxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvbGQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRGaWxlVXBsb2Fkc11cbiAgKTtcblxuICBjb25zdCBvblNpbmdsZVN1Y2Nlc3MgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmlsZW5hbWU6IHN0cmluZywgbWVzc2FnZT86IFJlYWN0LlJlYWN0Tm9kZSkgPT4ge1xuICAgICAgc2V0RmlsZVVwbG9hZHMoKG9sZCkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IG9sZC5maW5kKChmKSA9PiBmLmZpbGUubmFtZSA9PT0gZmlsZW5hbWUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ub2xkLmZpbHRlcigoZikgPT4gZi5maWxlLm5hbWUgIT09IGZpbGVuYW1lKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ubWF0Y2gsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogMTAwLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzVmFyaWFudDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBoZWxwZXJUZXh0OiBtZXNzYWdlLFxuICAgICAgICAgICAgfSBhcyBGVXBsb2FkLFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9sZDtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3NldEZpbGVVcGxvYWRzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRGaWxlVXBsb2Fkcygob2xkKSA9PiB7XG4gICAgICBjb25zdCB0b1VwbG9hZHMgPSBvbGQuZmlsdGVyKChmKSA9PiBmLmVycm9yIHx8ICFmLnByb2dyZXNzKTsgLy8gRmFpbGVkIG9yIG5ld2x5IHVwbG9hZGVkXG4gICAgICBvbkZpbGVTdWJtaXQodG9VcGxvYWRzLCB7IGdldFByb2dyZXNzVXBkYXRlQ2FsbGJhY2ssIG9uU2luZ2xlU3VjY2Vzcywgb25TaW5nbGVGYWlsdXJlIH0pO1xuXG4gICAgICBjb25zdCBuZXdGaWxlVXBsb2FkcyA9IG9sZC5tYXAoXG4gICAgICAgIChmKSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHByb2dyZXNzOiBmLnByb2dyZXNzPy5wcm9ncmVzc1ZhcmlhbnQgPT09ICdzdWNjZXNzJyA/IGYucHJvZ3Jlc3MgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWxwZXJUZXh0OiBmLnByb2dyZXNzPy5wcm9ncmVzc1ZhcmlhbnQgPT09ICdzdWNjZXNzJyA/ICdBbHJlYWR5IHVwbG9hZGVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9IGFzIEZVcGxvYWQpXG4gICAgICApO1xuICAgICAgcmV0dXJuIG5ld0ZpbGVVcGxvYWRzO1xuICAgIH0pO1xuICB9LCBbb25GaWxlU3VibWl0LCBnZXRQcm9ncmVzc1VwZGF0ZUNhbGxiYWNrLCBvblNpbmdsZVN1Y2Nlc3MsIG9uU2luZ2xlRmFpbHVyZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlQ2FuY2VsTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRTaG93Q2FuY2VsUHJvbXB0KGZhbHNlKSwgW3NldFNob3dDYW5jZWxQcm9tcHRdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuQ2FuY2VsTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRTaG93Q2FuY2VsUHJvbXB0KHRydWUpLCBbc2V0U2hvd0NhbmNlbFByb21wdF0pO1xuXG4gIGNvbnN0IGhhbmRsZUFib3J0QWxsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGZpbGVVcGxvYWRzXG4gICAgICAuZmlsdGVyKChmaWxlVXBsb2FkKSA9PiAhZmlsZVVwbG9hZC5wcm9ncmVzcz8ucHJvZ3Jlc3NWYXJpYW50KVxuICAgICAgLm1hcCgoZmlsZVVwbG9hZCkgPT4ge1xuICAgICAgICBmaWxlVXBsb2FkLmFib3J0U2lnbmFsLm5leHQoKTsgLy8gdHJpZ2dlciBhYm9ydFxuICAgICAgfSk7XG5cbiAgICBoYW5kbGVDbG9zZUNhbmNlbE1vZGFsKCk7XG4gIH0sIFtmaWxlVXBsb2FkcywgaGFuZGxlQ2xvc2VDYW5jZWxNb2RhbF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXBsb2FkaW5nKSB7XG4gICAgICBoYW5kbGVPcGVuQ2FuY2VsTW9kYWwoKTtcbiAgICB9XG4gIH0sIFtoYW5kbGVPcGVuQ2FuY2VsTW9kYWwsIHVwbG9hZGluZ10pO1xuXG4gIGNvbnN0IG51bU9mU3VjY2Vzc1VwbG9hZHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsZVVwbG9hZHMuZmlsdGVyKChmVXBsb2FkKSA9PiBmVXBsb2FkLnByb2dyZXNzICYmIGZVcGxvYWQucHJvZ3Jlc3MucHJvZ3Jlc3NWYXJpYW50ID09PSAnc3VjY2VzcycpLmxlbmd0aDtcbiAgfSwgW2ZpbGVVcGxvYWRzXSk7XG5cbiAgY29uc3Qgc29ydGVkRmlsZVVwbG9hZHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsZVVwbG9hZHMuc29ydCgoYSwgYikgPT4gYS5maWxlLm5hbWUubG9jYWxlQ29tcGFyZShiLmZpbGUubmFtZSwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSkpO1xuICB9LCBbZmlsZVVwbG9hZHNdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8UHJvbXB0IHdoZW49e3VwbG9hZGluZ30gbWVzc2FnZT1cIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBjYW5jZWwgdGhlIGZpbGUgdXBsb2FkP1wiIC8+XG4gICAgICA8Q2FuY2VsVXBsb2FkTW9kYWxcbiAgICAgICAgdmlzaWJsZT17c2hvd0NhbmNlbFByb21wdH1cbiAgICAgICAgdGl0bGU9XCJVcGxvYWQgaW4gUHJvZ3Jlc3NcIlxuICAgICAgICBtZXNzYWdlPVwiQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNhbmNlbCB0aGUgZmlsZSB1cGxvYWRzPyBTdWNjZXNzZnVsbHkgdXBsb2FkZWQgZmlsZXMgd29uJ3QgYmUgYWJvcnRlZC5cIlxuICAgICAgICBvblllcz17aGFuZGxlQWJvcnRBbGx9XG4gICAgICAgIG9uTm89e2hhbmRsZUNsb3NlQ2FuY2VsTW9kYWx9XG4gICAgICAvPlxuICAgICAgPE11bHRpcGxlRmlsZVVwbG9hZFxuICAgICAgICBvbkZpbGVEcm9wPXtoYW5kbGVGaWxlRHJvcH1cbiAgICAgICAgZHJvcHpvbmVQcm9wcz17e1xuICAgICAgICAgIGFjY2VwdDogZHpBY2NlcHQsXG4gICAgICAgICAgb25Ecm9wUmVqZWN0ZWQ6IGhhbmRsZUZpbGVSZWplY3QsXG4gICAgICAgIH19XG4gICAgICAgIGRpc2FibGVkPXt1cGxvYWRpbmd9XG4gICAgICA+XG4gICAgICAgIDxNdWx0aXBsZUZpbGVVcGxvYWRNYWluXG4gICAgICAgICAgdGl0bGVJY29uPXt0aXRsZUljb24gfHwgPFVwbG9hZEljb24gLz59XG4gICAgICAgICAgdGl0bGVUZXh0PXt0aXRsZVRleHQgfHwgJ0RyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSd9XG4gICAgICAgICAgdGl0bGVUZXh0U2VwYXJhdG9yPXt0aXRsZVRleHRTZXBhcmF0b3IgfHwgJ29yJ31cbiAgICAgICAgICBpbmZvVGV4dD17aW5mb1RleHQgfHwgYEFjY2VwdGVkIGZpbGUgdHlwZXM6ICR7ZGlzcGxheUFjY2VwdHMuam9pbignLCAnKX1gfVxuICAgICAgICAvPlxuICAgICAgICB7ZmlsZVVwbG9hZHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxNdWx0aXBsZUZpbGVVcGxvYWRTdGF0dXNcbiAgICAgICAgICAgIHN0YXR1c1RvZ2dsZVRleHQ9e2Ake251bU9mU3VjY2Vzc1VwbG9hZHN9IG9mICR7ZmlsZVVwbG9hZHMubGVuZ3RofSBmaWxlcyB1cGxvYWRlZGB9XG4gICAgICAgICAgICBzdGF0dXNUb2dnbGVJY29uPXs8SW5Qcm9ncmVzc0ljb24gLz59XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3NvcnRlZEZpbGVVcGxvYWRzLm1hcCgoZmlsZVVwbG9hZCkgPT4gKFxuICAgICAgICAgICAgICA8TXVsdGlwbGVGaWxlVXBsb2FkU3RhdHVzSXRlbVxuICAgICAgICAgICAgICAgIGZpbGU9e2ZpbGVVcGxvYWQuZmlsZX1cbiAgICAgICAgICAgICAgICBrZXk9e2ZpbGVVcGxvYWQuZmlsZS5uYW1lfVxuICAgICAgICAgICAgICAgIG9uQ2xlYXJDbGljaz17KCkgPT4gaGFuZGxlRmlsZVJlbW92ZShmaWxlVXBsb2FkLmZpbGUubmFtZSwgdXBsb2FkaW5nKX1cbiAgICAgICAgICAgICAgICBjdXN0b21GaWxlSGFuZGxlcj17KF8pID0+IHVuZGVmaW5lZH0gLy8gVG8gZGlzYWJsZSBidWlsdC1pbiBmaWxlIHJlYWRlciBhbmQgZGVmYXVsdCBzdHlsaW5nXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZT17ZmlsZVVwbG9hZC5wcm9ncmVzcz8ucHJvZ3Jlc3NWYWx1ZX1cbiAgICAgICAgICAgICAgICBwcm9ncmVzc1ZhcmlhbnQ9e2ZpbGVVcGxvYWQucHJvZ3Jlc3M/LnByb2dyZXNzVmFyaWFudH1cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0hlbHBlclRleHQ9e2ZpbGVVcGxvYWQuZXJyb3I/Lm1lc3NhZ2UgfHwgZmlsZVVwbG9hZC5oZWxwZXJUZXh0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9NdWx0aXBsZUZpbGVVcGxvYWRTdGF0dXM+XG4gICAgICAgICkgOiB1bmRlZmluZWR9XG4gICAgICA8L011bHRpcGxlRmlsZVVwbG9hZD5cbiAgICAgIHsvKiBmYWtlIGFjdGlvbiBidXR0b25zICovfVxuICAgICAgPGRpdiByZWY9e3N1Ym1pdFJlZn0gaWQ9eydzdGFydC11cGxvYWQtZmlsZXMnfSBoaWRkZW4gb25DbGljaz17aGFuZGxlU3VibWl0fSAvPlxuICAgICAgPGRpdiByZWY9e2Fib3J0UmVmfSBpZD17J2Fib3J0LXVwbG9hZC1maWxlcyd9IGhpZGRlbiBvbkNsaWNrPXtoYW5kbGVDYW5jZWx9IC8+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBSZWNvcmRpbmdMYWJlbCB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvUmVjb3JkaW5nTGFiZWwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nTGFiZWxGaWVsZHMgfSBmcm9tICdAYXBwL1JlY29yZGluZ01ldGFkYXRhL1JlY29yZGluZ0xhYmVsRmllbGRzJztcbmltcG9ydCB7IEZVcGxvYWQsIE11bHRpRmlsZVVwbG9hZCwgVXBsb2FkQ2FsbGJhY2tzIH0gZnJvbSAnQGFwcC9TaGFyZWQvRmlsZVVwbG9hZHMnO1xuaW1wb3J0IHsgTG9hZGluZ1Byb3BzVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1Byb2dyZXNzSW5kaWNhdG9yJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBBY3Rpb25Hcm91cCxcbiAgQnV0dG9uLFxuICBFeHBhbmRhYmxlU2VjdGlvbixcbiAgRm9ybSxcbiAgRm9ybUdyb3VwLFxuICBNb2RhbCxcbiAgTW9kYWxWYXJpYW50LFxuICBUZXh0LFxuICBUb29sdGlwLFxuICBWYWxpZGF0ZWRPcHRpb25zLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEhlbHBJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWZhdWx0SWZFbXB0eSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyY2hpdmVVcGxvYWRNb2RhbFByb3BzIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEFyY2hpdmVVcGxvYWRNb2RhbDogUmVhY3QuRkM8QXJjaGl2ZVVwbG9hZE1vZGFsUHJvcHM+ID0gKHsgb25DbG9zZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb25zID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IHN1Ym1pdFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7IC8vIFVzZSByZWYgdG8gcmVmZXIgdG8gc3VibWl0IHRyaWdnZXIgZGl2XG4gIGNvbnN0IGFib3J0UmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTsgLy8gVXNlIHJlZiB0byByZWZlciB0byBhYm9ydCB0cmlnZ2VyIGRpdlxuXG4gIGNvbnN0IFt1cGxvYWRpbmcsIHNldFVwbG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtudW1PZkZpbGVzLCBzZXROdW1PZkZpbGVzXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBbYWxsT2tzLCBzZXRBbGxPa3NdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbGFiZWxzLCBzZXRMYWJlbHNdID0gUmVhY3QudXNlU3RhdGUoW10gYXMgUmVjb3JkaW5nTGFiZWxbXSk7XG4gIGNvbnN0IFt2YWxpZCwgc2V0VmFsaWRdID0gUmVhY3QudXNlU3RhdGUoVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzKTtcblxuICBjb25zdCBnZXRGb3JtYXR0ZWRMYWJlbHMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZm9ybWF0dGVkTGFiZWxzID0ge307XG4gICAgbGFiZWxzLmZvckVhY2goKGwpID0+IHtcbiAgICAgIGlmIChsLmtleSAmJiBsLnZhbHVlKSB7XG4gICAgICAgIGZvcm1hdHRlZExhYmVsc1tsLmtleV0gPSBsLnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRMYWJlbHM7XG4gIH0sIFtsYWJlbHNdKTtcblxuICBjb25zdCByZXNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRVcGxvYWRpbmcoZmFsc2UpO1xuICAgIHNldExhYmVscyhbXSBhcyBSZWNvcmRpbmdMYWJlbFtdKTtcbiAgICBzZXRWYWxpZChWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MpO1xuICAgIHNldE51bU9mRmlsZXMoMCk7XG4gIH0sIFtzZXRVcGxvYWRpbmcsIHNldExhYmVscywgc2V0VmFsaWQsIHNldE51bU9mRmlsZXNdKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXBsb2FkaW5nKSB7XG4gICAgICBhYm9ydFJlZi5jdXJyZW50ICYmIGFib3J0UmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXQoKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFt1cGxvYWRpbmcsIGFib3J0UmVmLCByZXNldCwgb25DbG9zZV0pO1xuXG4gIGNvbnN0IG9uRmlsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChmaWxlVXBsb2FkczogRlVwbG9hZFtdLCB7IGdldFByb2dyZXNzVXBkYXRlQ2FsbGJhY2ssIG9uU2luZ2xlU3VjY2Vzcywgb25TaW5nbGVGYWlsdXJlIH06IFVwbG9hZENhbGxiYWNrcykgPT4ge1xuICAgICAgc2V0VXBsb2FkaW5nKHRydWUpO1xuXG4gICAgICBjb25zdCB0YXNrczogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+W10gPSBbXTtcblxuICAgICAgZmlsZVVwbG9hZHMuZm9yRWFjaCgoZmlsZVVwbG9hZCkgPT4ge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgIGNvbnRleHQuYXBpXG4gICAgICAgICAgICAudXBsb2FkUmVjb3JkaW5nKFxuICAgICAgICAgICAgICBmaWxlVXBsb2FkLmZpbGUsXG4gICAgICAgICAgICAgIGdldEZvcm1hdHRlZExhYmVscygpLFxuICAgICAgICAgICAgICBnZXRQcm9ncmVzc1VwZGF0ZUNhbGxiYWNrKGZpbGVVcGxvYWQuZmlsZS5uYW1lKSxcbiAgICAgICAgICAgICAgZmlsZVVwbG9hZC5hYm9ydFNpZ25hbFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCh7XG4gICAgICAgICAgICAgICAgbmV4dDogKF8pID0+IHtcbiAgICAgICAgICAgICAgICAgIG9uU2luZ2xlU3VjY2VzcyhmaWxlVXBsb2FkLmZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgb25TaW5nbGVGYWlsdXJlKGZpbGVVcGxvYWQuZmlsZS5uYW1lLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChfKSA9PiBvZih1bmRlZmluZWQpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGFkZFN1YnNjcmlwdGlvbnMoXG4gICAgICAgIGZvcmtKb2luKHRhc2tzKVxuICAgICAgICAgIC5waXBlKGRlZmF1bHRJZkVtcHR5KFsnJ10pKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHNhdmVkTmFtZXMpID0+IHtcbiAgICAgICAgICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRBbGxPa3MoIXNhdmVkTmFtZXMuc29tZSgobmFtZSkgPT4gbmFtZSA9PT0gdW5kZWZpbmVkKSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9ucywgY29udGV4dC5hcGksIHNldFVwbG9hZGluZywgZ2V0Rm9ybWF0dGVkTGFiZWxzLCBzZXRBbGxPa3NdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN1Ym1pdFJlZi5jdXJyZW50ICYmIHN1Ym1pdFJlZi5jdXJyZW50LmNsaWNrKCk7XG4gIH0sIFtzdWJtaXRSZWZdKTtcblxuICBjb25zdCBvbkZpbGVzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVVcGxvYWRzOiBGVXBsb2FkW10pID0+IHtcbiAgICAgIHNldEFsbE9rcyghZmlsZVVwbG9hZHMuc29tZSgoZikgPT4gIWYucHJvZ3Jlc3MgfHwgZi5wcm9ncmVzcy5wcm9ncmVzc1ZhcmlhbnQgIT09ICdzdWNjZXNzJykpO1xuICAgICAgc2V0TnVtT2ZGaWxlcyhmaWxlVXBsb2Fkcy5sZW5ndGgpO1xuICAgIH0sXG4gICAgW3NldE51bU9mRmlsZXMsIHNldEFsbE9rc11cbiAgKTtcblxuICBjb25zdCBzdWJtaXRCdXR0b25Mb2FkaW5nUHJvcHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBzcGlubmVyQXJpYVZhbHVlVGV4dDogJ1N1Ym1pdHRpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnc3VibWl0dGluZy11cGxvYWRlZC1yZWNvcmRpbmcnLFxuICAgICAgICBpc0xvYWRpbmc6IHVwbG9hZGluZyxcbiAgICAgIH0gYXMgTG9hZGluZ1Byb3BzVHlwZSksXG4gICAgW3VwbG9hZGluZ11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgaXNPcGVuPXtwcm9wcy52aXNpYmxlfVxuICAgICAgdmFyaWFudD17TW9kYWxWYXJpYW50LmxhcmdlfVxuICAgICAgc2hvd0Nsb3NlPXt0cnVlfVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICB0aXRsZT1cIlJlLVVwbG9hZCBBcmNoaXZlZCBSZWNvcmRpbmdcIlxuICAgICAgZGVzY3JpcHRpb249e1xuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIFNlbGVjdCBhIEpESyBGbGlnaHQgUmVjb3JkZXIgZmlsZSB0byByZS11cGxvYWQuIEZpbGVzIG11c3QgYmUgLmpmciBiaW5hcnkgZm9ybWF0IGFuZCBmb2xsb3cgdGhlIG5hbWluZ1xuICAgICAgICAgICAgY29udmVudGlvbiB1c2VkIGJ5IENyeW9zdGF0IHdoZW4gYXJjaGl2aW5nIHJlY29yZGluZ3NcbiAgICAgICAgICA8L3NwYW4+eycgJ31cbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgY29udGVudD17XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEFyY2hpdmUgbmFtaW5nIGNvbnZlbnRpb25zOiA8Yj50YXJnZXQtbmFtZV9yZWNvcmRpbmdOYW1lX3RpbWVzdGFtcC5qZnI8L2I+LlxuICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOiBpby1jcnlvc3RhdC1Dcnlvc3RhdF9wcm9maWxpbmdfdGltZXN0YW1wLmpmclxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcHBlbmRUbz17cG9ydGFsUm9vdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3VwIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgICAgICA8Yj5bP108L2I+XG4gICAgICAgICAgICA8L3N1cD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgfVxuICAgID5cbiAgICAgIDxGb3JtPlxuICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPVwiSkZSIEZpbGVcIiBpc1JlcXVpcmVkIGZpZWxkSWQ9XCJmaWxlXCI+XG4gICAgICAgICAgPE11bHRpRmlsZVVwbG9hZFxuICAgICAgICAgICAgc3VibWl0UmVmPXtzdWJtaXRSZWZ9XG4gICAgICAgICAgICBhYm9ydFJlZj17YWJvcnRSZWZ9XG4gICAgICAgICAgICB1cGxvYWRpbmc9e3VwbG9hZGluZ31cbiAgICAgICAgICAgIGRpc3BsYXlBY2NlcHRzPXtbJ0pGUiddfVxuICAgICAgICAgICAgb25GaWxlU3VibWl0PXtvbkZpbGVTdWJtaXR9XG4gICAgICAgICAgICBvbkZpbGVzQ2hhbmdlPXtvbkZpbGVzQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8RXhwYW5kYWJsZVNlY3Rpb24gdG9nZ2xlVGV4dEV4cGFuZGVkPVwiSGlkZSBtZXRhZGF0YSBvcHRpb25zXCIgdG9nZ2xlVGV4dENvbGxhcHNlZD1cIlNob3cgbWV0YWRhdGEgb3B0aW9uc1wiPlxuICAgICAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgICAgIGxhYmVsPVwiTGFiZWxzXCJcbiAgICAgICAgICAgIGZpZWxkSWQ9XCJsYWJlbHNcIlxuICAgICAgICAgICAgbGFiZWxJY29uPXtcbiAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICBjb250ZW50PXs8VGV4dD5VbmlxdWUga2V5LXZhbHVlIHBhaXJzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY29yZGluZy48L1RleHQ+fVxuICAgICAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEhlbHBJY29uIG5vVmVydGljYWxBbGlnbiAvPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFJlY29yZGluZ0xhYmVsRmllbGRzXG4gICAgICAgICAgICAgIGlzVXBsb2FkYWJsZVxuICAgICAgICAgICAgICBsYWJlbHM9e2xhYmVsc31cbiAgICAgICAgICAgICAgc2V0TGFiZWxzPXtzZXRMYWJlbHN9XG4gICAgICAgICAgICAgIHNldFZhbGlkPXtzZXRWYWxpZH1cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17dXBsb2FkaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPC9FeHBhbmRhYmxlU2VjdGlvbj5cbiAgICAgICAgPEFjdGlvbkdyb3VwPlxuICAgICAgICAgIHthbGxPa3MgJiYgbnVtT2ZGaWxlcyA/IChcbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+XG4gICAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17IW51bU9mRmlsZXMgfHwgdmFsaWQgIT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyB8fCB1cGxvYWRpbmd9XG4gICAgICAgICAgICAgICAgey4uLnN1Ym1pdEJ1dHRvbkxvYWRpbmdQcm9wc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt1cGxvYWRpbmcgPyAnU3VibWl0dGluZycgOiAnU3VibWl0J31cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImxpbmtcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICAgIDwvRm9ybT5cbiAgICA8L01vZGFsPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBNb2RhbCwgTW9kYWxWYXJpYW50LCBCdXR0b24sIENoZWNrYm94LCBTdGFjaywgU3BsaXQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUsIGdldEZyb21XYXJuaW5nTWFwIH0gZnJvbSAnLi9EZWxldGVXYXJuaW5nVXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZVdhcm5pbmdQcm9wcyB7XG4gIHdhcm5pbmdUeXBlOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZTtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgb25BY2NlcHQ6ICgpID0+IHZvaWQ7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBEZWxldGVXYXJuaW5nTW9kYWwgPSAoeyBvbkFjY2VwdCwgb25DbG9zZSwgLi4ucHJvcHMgfTogRGVsZXRlV2FybmluZ1Byb3BzKTogSlNYLkVsZW1lbnQgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFtkb05vdEFzaywgc2V0RG9Ob3RBc2tdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlYWxXYXJuaW5nVHlwZSA9IGdldEZyb21XYXJuaW5nTWFwKHByb3BzLndhcm5pbmdUeXBlKTtcblxuICBjb25zdCBvbkFjY2VwdENsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uQWNjZXB0KCk7XG4gICAgICBvbkNsb3NlKCk7XG4gICAgICBpZiAoZG9Ob3RBc2sgJiYgISFyZWFsV2FybmluZ1R5cGUpIHtcbiAgICAgICAgY29udGV4dC5zZXR0aW5ncy5zZXREZWxldGlvbkRpYWxvZ3NFbmFibGVkRm9yKHJlYWxXYXJuaW5nVHlwZS5pZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbnRleHQuc2V0dGluZ3MsIG9uQWNjZXB0LCBvbkNsb3NlLCBkb05vdEFzaywgcmVhbFdhcm5pbmdUeXBlXVxuICApO1xuXG4gIGNvbnN0IG9uSW5uZXJDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldj86IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGV2ICYmIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb25DbG9zZSgpO1xuICAgIH0sXG4gICAgW29uQ2xvc2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgdGl0bGU9e2Ake3JlYWxXYXJuaW5nVHlwZT8udGl0bGV9YH1cbiAgICAgIGRlc2NyaXB0aW9uPXtyZWFsV2FybmluZ1R5cGU/LmRlc2NyaXB0aW9ufVxuICAgICAgYXJpYS1sYWJlbD17cmVhbFdhcm5pbmdUeXBlPy5hcmlhTGFiZWx9XG4gICAgICB0aXRsZUljb25WYXJpYW50PVwid2FybmluZ1wiXG4gICAgICB2YXJpYW50PXtNb2RhbFZhcmlhbnQubWVkaXVtfVxuICAgICAgaXNPcGVuPXtwcm9wcy52aXNpYmxlfVxuICAgICAgc2hvd0Nsb3NlXG4gICAgICBvbkNsb3NlPXtvbklubmVyQ2xvc2V9XG4gICAgICBhY3Rpb25zPXtbXG4gICAgICAgIDxTdGFjayBoYXNHdXR0ZXIga2V5PVwibW9kYWwtZm9vdGVyLXN0YWNrXCI+XG4gICAgICAgICAgPFNwbGl0IGtleT1cIm1vZGFsLWZvb3Rlci1zcGxpdFwiPlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwiZGFuZ2VyXCIgb25DbGljaz17b25BY2NlcHRDbG9zZX0+XG4gICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17b25Jbm5lckNsb3NlfT5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1NwbGl0PlxuICAgICAgICA8L1N0YWNrPixcbiAgICAgIF19XG4gICAgPlxuICAgICAgPENoZWNrYm94IGlkPVwiZG8tbm90LWFzay1lbmFibGVkXCIgbGFiZWw9XCJEb24ndCBhc2sgbWUgYWdhaW5cIiBpc0NoZWNrZWQ9e2RvTm90QXNrfSBvbkNoYW5nZT17c2V0RG9Ob3RBc2t9IC8+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgZ2V0RnJvbUxvY2FsU3RvcmFnZSwgTG9jYWxTdG9yYWdlS2V5U3RyaW5ncyB9IGZyb20gJ0BhcHAvdXRpbHMvTG9jYWxTdG9yYWdlJztcblxuLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCBjb25zdCBnZXRQZXJzaXN0ZWRTdGF0ZSA9IChrZXk6IExvY2FsU3RvcmFnZUtleVN0cmluZ3MsIF92ZXJzaW9uOiBzdHJpbmcsIGRlZmF1bHRDb25maWc6IGFueSk6IGFueSA9PiB7XG4gIGNvbnN0IHBlcnNpc3RlZCA9IGdldEZyb21Mb2NhbFN0b3JhZ2Uoa2V5LCB1bmRlZmluZWQpO1xuICBpZiAoIXBlcnNpc3RlZCB8fCBwZXJzaXN0ZWQuX3ZlcnNpb24gIT09IF92ZXJzaW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRDb25maWcsXG4gICAgICBfdmVyc2lvbixcbiAgICB9O1xuICB9XG4gIHJldHVybiBwZXJzaXN0ZWQ7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbiAqL1xuaW1wb3J0IHsgUmVjb3JkaW5nRmlsdGVyc0NhdGVnb3JpZXMgfSBmcm9tICdAYXBwL1JlY29yZGluZ3MvUmVjb3JkaW5nRmlsdGVycyc7XG5pbXBvcnQgeyBjcmVhdGVBY3Rpb24sIGNyZWF0ZVJlZHVjZXIgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcbmltcG9ydCB7IFdyaXRhYmxlRHJhZnQgfSBmcm9tICdpbW1lci9kaXN0L2ludGVybmFsJztcbmltcG9ydCB7IGdldFBlcnNpc3RlZFN0YXRlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgVXBkYXRlRmlsdGVyT3B0aW9ucyB9IGZyb20gJy4vQ29tbW9uJztcblxuY29uc3QgX3ZlcnNpb24gPSAnMSc7XG5cbi8vIENvbW1vbiBhY3Rpb24gc3RyaW5nIGZvcm1hdDogXCJyZXNvdXJjZShzKS9hY3Rpb25cIlxuZXhwb3J0IGVudW0gUmVjb3JkaW5nRmlsdGVyQWN0aW9uIHtcbiAgRklMVEVSX0FERCA9ICdyZWNvcmRpbmctZmlsdGVyL2FkZCcsXG4gIEZJTFRFUl9ERUxFVEUgPSAncmVjb3JkaW5nLWZpbHRlci9kZWxldGUnLFxuICBGSUxURVJfREVMRVRFX0FMTCA9ICdyZWNvcmRpbmctZmlsdGVyL2RlbGV0ZS1hbGwnLCAvLyBEZWxldGUgYWxsIGZpbHRlcnMgaW4gYWxsIGNhdGVnb3JpZXNcbiAgQ0FURUdPUllfRklMVEVSU19ERUxFVEUgPSAncmVjb3JkaW5nLWZpbHRlci9kZWxldGUtY2F0ZWdvcnknLCAvLyBEZWxldGUgYWxsIGZpbHRlcnMgb2YgdGhlIHNhbWUgY2F0ZWdvcnlcbiAgQ0FURUdPUllfVVBEQVRFID0gJ3JlY29yZGluZy1maWx0ZXItY2F0ZWdvcnkvdXBkYXRlJyxcbiAgVEFSR0VUX0FERCA9ICdyZWNvcmRpbmctZmlsdGVyLXRhcmdldC9hZGQnLFxuICBUQVJHRVRfREVMRVRFID0gJ3JlY29yZGluZy1maWx0ZXItdGFyZ2V0L2RlbGV0ZScsXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtVmFsdWVzID0gbmV3IFNldChPYmplY3QudmFsdWVzKFJlY29yZGluZ0ZpbHRlckFjdGlvbikpO1xuXG5leHBvcnQgY29uc3QgZW1wdHlBY3RpdmVSZWNvcmRpbmdGaWx0ZXJzID0ge1xuICBOYW1lOiBbXSxcbiAgTGFiZWw6IFtdLFxuICBTdGF0ZTogW10sXG4gIFN0YXJ0ZWRCZWZvcmVEYXRlOiBbXSxcbiAgU3RhcnRlZEFmdGVyRGF0ZTogW10sXG4gIER1cmF0aW9uU2Vjb25kczogW10sXG59IGFzIFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzO1xuXG5leHBvcnQgY29uc3QgYWxsb3dlZEFjdGl2ZVJlY29yZGluZ0ZpbHRlcnMgPSBPYmplY3Qua2V5cyhlbXB0eUFjdGl2ZVJlY29yZGluZ0ZpbHRlcnMpO1xuXG5leHBvcnQgY29uc3QgZW1wdHlBcmNoaXZlZFJlY29yZGluZ0ZpbHRlcnMgPSB7XG4gIE5hbWU6IFtdLFxuICBMYWJlbDogW10sXG59IGFzIFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzO1xuXG5leHBvcnQgY29uc3QgYWxsb3dlZEFyY2hpdmVkUmVjb3JkaW5nRmlsdGVycyA9IE9iamVjdC5rZXlzKGVtcHR5QXJjaGl2ZWRSZWNvcmRpbmdGaWx0ZXJzKTtcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRpbmdGaWx0ZXJBY3Rpb25QYXlsb2FkIHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBmaWx0ZXI/OiB1bmtub3duO1xuICBpc0FyY2hpdmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IHJlY29yZGluZ0FkZEZpbHRlckludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgUmVjb3JkaW5nRmlsdGVyQWN0aW9uLkZJTFRFUl9BREQsXG4gICh0YXJnZXQ6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZmlsdGVyOiB1bmtub3duLCBpc0FyY2hpdmVkOiBib29sZWFuKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICBpc0FyY2hpdmVkOiBpc0FyY2hpdmVkLFxuICAgIH0gYXMgUmVjb3JkaW5nRmlsdGVyQWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCByZWNvcmRpbmdEZWxldGVGaWx0ZXJJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIFJlY29yZGluZ0ZpbHRlckFjdGlvbi5GSUxURVJfREVMRVRFLFxuICAodGFyZ2V0OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGZpbHRlcjogdW5rbm93biwgaXNBcmNoaXZlZDogYm9vbGVhbikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgaXNBcmNoaXZlZDogaXNBcmNoaXZlZCxcbiAgICB9IGFzIFJlY29yZGluZ0ZpbHRlckFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgcmVjb3JkaW5nRGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBSZWNvcmRpbmdGaWx0ZXJBY3Rpb24uQ0FURUdPUllfRklMVEVSU19ERUxFVEUsXG4gICh0YXJnZXQ6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaXNBcmNoaXZlZDogYm9vbGVhbikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgIGlzQXJjaGl2ZWQ6IGlzQXJjaGl2ZWQsXG4gICAgfSBhcyBSZWNvcmRpbmdGaWx0ZXJBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IHJlY29yZGluZ0RlbGV0ZUFsbEZpbHRlcnNJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIFJlY29yZGluZ0ZpbHRlckFjdGlvbi5GSUxURVJfREVMRVRFX0FMTCxcbiAgKHRhcmdldDogc3RyaW5nLCBpc0FyY2hpdmVkOiBib29sZWFuKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgaXNBcmNoaXZlZDogaXNBcmNoaXZlZCxcbiAgICB9IGFzIFJlY29yZGluZ0ZpbHRlckFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgcmVjb3JkaW5nVXBkYXRlQ2F0ZWdvcnlJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIFJlY29yZGluZ0ZpbHRlckFjdGlvbi5DQVRFR09SWV9VUERBVEUsXG4gICh0YXJnZXQ6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaXNBcmNoaXZlZDogYm9vbGVhbikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgIGlzQXJjaGl2ZWQ6IGlzQXJjaGl2ZWQsXG4gICAgfSBhcyBSZWNvcmRpbmdGaWx0ZXJBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IHJlY29yZGluZ0FkZFRhcmdldEludGVudCA9IGNyZWF0ZUFjdGlvbihSZWNvcmRpbmdGaWx0ZXJBY3Rpb24uVEFSR0VUX0FERCwgKHRhcmdldDogc3RyaW5nKSA9PiAoe1xuICBwYXlsb2FkOiB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gIH0gYXMgUmVjb3JkaW5nRmlsdGVyQWN0aW9uUGF5bG9hZCxcbn0pKTtcblxuZXhwb3J0IGNvbnN0IHJlY29yZGluZ0RlbGV0ZVRhcmdldEludGVudCA9IGNyZWF0ZUFjdGlvbihSZWNvcmRpbmdGaWx0ZXJBY3Rpb24uVEFSR0VUX0RFTEVURSwgKHRhcmdldDogc3RyaW5nKSA9PiAoe1xuICBwYXlsb2FkOiB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gIH0gYXMgUmVjb3JkaW5nRmlsdGVyQWN0aW9uUGF5bG9hZCxcbn0pKTtcblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzIHtcbiAgdGFyZ2V0OiBzdHJpbmc7IC8vIGNvbm5lY3RVUkxcbiAgYWN0aXZlOiB7XG4gICAgLy8gYWN0aXZlIHJlY29yZGluZ3NcbiAgICBzZWxlY3RlZENhdGVnb3J5Pzogc3RyaW5nO1xuICAgIGZpbHRlcnM6IFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzO1xuICB9O1xuICBhcmNoaXZlZDoge1xuICAgIC8vIGFyY2hpdmVkIHJlY29yZGluZ3NcbiAgICBzZWxlY3RlZENhdGVnb3J5Pzogc3RyaW5nO1xuICAgIGZpbHRlcnM6IFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVSZWNvcmRpbmdGaWx0ZXIgPSAoXG4gIG9sZDogUmVjb3JkaW5nRmlsdGVyc0NhdGVnb3JpZXMsXG4gIHsgZmlsdGVyVmFsdWUsIGZpbHRlcktleSwgZGVsZXRlZCA9IGZhbHNlLCBkZWxldGVPcHRpb25zIH06IFVwZGF0ZUZpbHRlck9wdGlvbnNcbik6IFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzID0+IHtcbiAgbGV0IG5ld0ZpbHRlclZhbHVlczogdW5rbm93bltdO1xuICBpZiAoIW9sZFtmaWx0ZXJLZXldKSB7XG4gICAgbmV3RmlsdGVyVmFsdWVzID0gW2ZpbHRlclZhbHVlXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvbGRGaWx0ZXJWYWx1ZXMgPSBvbGRbZmlsdGVyS2V5XSBhcyB1bmtub3duW107XG4gICAgaWYgKGRlbGV0ZWQpIHtcbiAgICAgIGlmIChkZWxldGVPcHRpb25zICYmIGRlbGV0ZU9wdGlvbnMuYWxsKSB7XG4gICAgICAgIG5ld0ZpbHRlclZhbHVlcyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RmlsdGVyVmFsdWVzID0gb2xkRmlsdGVyVmFsdWVzLmZpbHRlcigodmFsKSA9PiB2YWwgIT09IGZpbHRlclZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RmlsdGVyVmFsdWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5vbGRGaWx0ZXJWYWx1ZXMsIGZpbHRlclZhbHVlXSkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSB7IC4uLm9sZCB9O1xuICBuZXdGaWx0ZXJzW2ZpbHRlcktleV0gPSBuZXdGaWx0ZXJWYWx1ZXM7XG4gIHJldHVybiBuZXdGaWx0ZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhcmdldFJlY29yZGluZ0ZpbHRlciA9IChcbiAgc3RhdGU6IFdyaXRhYmxlRHJhZnQ8eyBsaXN0OiBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzW10gfT4sXG4gIHRhcmdldDogc3RyaW5nXG4pOiBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzID0+IHtcbiAgY29uc3QgdGFyZ2V0RmlsdGVyID0gc3RhdGUubGlzdC5maWx0ZXIoKHRhcmdldEZpbHRlcnMpID0+IHRhcmdldEZpbHRlcnMudGFyZ2V0ID09PSB0YXJnZXQpO1xuICByZXR1cm4gdGFyZ2V0RmlsdGVyLmxlbmd0aCA+IDAgPyB0YXJnZXRGaWx0ZXJbMF0gOiBjcmVhdGVFbXB0eVRhcmdldFJlY29yZGluZ0ZpbHRlcnModGFyZ2V0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFbXB0eVRhcmdldFJlY29yZGluZ0ZpbHRlcnMgPSAodGFyZ2V0OiBzdHJpbmcpID0+XG4gICh7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgYWN0aXZlOiB7XG4gICAgICBzZWxlY3RlZENhdGVnb3J5OiAnTmFtZScsXG4gICAgICBmaWx0ZXJzOiBlbXB0eUFjdGl2ZVJlY29yZGluZ0ZpbHRlcnMsXG4gICAgfSxcbiAgICBhcmNoaXZlZDoge1xuICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogJ05hbWUnLFxuICAgICAgZmlsdGVyczogZW1wdHlBcmNoaXZlZFJlY29yZGluZ0ZpbHRlcnMsXG4gICAgfSxcbiAgfSBhcyBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzKTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUFsbFRhcmdldFJlY29yZGluZ0ZpbHRlcnMgPSAodGFyZ2V0UmVjb3JkaW5nRmlsdGVyOiBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzLCBpc0FyY2hpdmVkOiBib29sZWFuKSA9PiB7XG4gIGlmIChpc0FyY2hpdmVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhcmdldFJlY29yZGluZ0ZpbHRlcixcbiAgICAgIGFyY2hpdmVkOiB7XG4gICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IHRhcmdldFJlY29yZGluZ0ZpbHRlci5hcmNoaXZlZC5zZWxlY3RlZENhdGVnb3J5LFxuICAgICAgICBmaWx0ZXJzOiBlbXB0eUFyY2hpdmVkUmVjb3JkaW5nRmlsdGVycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnRhcmdldFJlY29yZGluZ0ZpbHRlcixcbiAgICBhY3RpdmU6IHtcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IHRhcmdldFJlY29yZGluZ0ZpbHRlci5hY3RpdmUuc2VsZWN0ZWRDYXRlZ29yeSxcbiAgICAgIGZpbHRlcnM6IGVtcHR5QWN0aXZlUmVjb3JkaW5nRmlsdGVycyxcbiAgICB9LFxuICB9O1xufTtcblxuY29uc3QgSU5JVElBTF9TVEFURSA9IGdldFBlcnNpc3RlZFN0YXRlKCdUQVJHRVRfUkVDT1JESU5HX0ZJTFRFUlMnLCBfdmVyc2lvbiwge1xuICBsaXN0OiBbXSBhcyBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzW10sXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlY29yZGluZ0ZpbHRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKElOSVRJQUxfU1RBVEUsIChidWlsZGVyKSA9PiB7XG4gIGJ1aWxkZXJcbiAgICAuYWRkQ2FzZShyZWNvcmRpbmdBZGRGaWx0ZXJJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZFRhcmdldFJlY29yZGluZ0ZpbHRlciA9IGdldFRhcmdldFJlY29yZGluZ0ZpbHRlcihzdGF0ZSwgcGF5bG9hZC50YXJnZXQpO1xuXG4gICAgICBsZXQgbmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyOiBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzO1xuICAgICAgaWYgKHBheWxvYWQuaXNBcmNoaXZlZCkge1xuICAgICAgICBuZXdUYXJnZXRSZWNvcmRpbmdGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4ub2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLFxuICAgICAgICAgIGFyY2hpdmVkOiB7XG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVSZWNvcmRpbmdGaWx0ZXIob2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLmFyY2hpdmVkLmZpbHRlcnMsIHtcbiAgICAgICAgICAgICAgZmlsdGVyS2V5OiBwYXlsb2FkLmNhdGVnb3J5ISxcbiAgICAgICAgICAgICAgZmlsdGVyVmFsdWU6IHBheWxvYWQuZmlsdGVyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlciA9IHtcbiAgICAgICAgICAuLi5vbGRUYXJnZXRSZWNvcmRpbmdGaWx0ZXIsXG4gICAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVSZWNvcmRpbmdGaWx0ZXIob2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLmFjdGl2ZS5maWx0ZXJzLCB7XG4gICAgICAgICAgICAgIGZpbHRlcktleTogcGF5bG9hZC5jYXRlZ29yeSEsXG4gICAgICAgICAgICAgIGZpbHRlclZhbHVlOiBwYXlsb2FkLmZpbHRlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmxpc3QgPSBzdGF0ZS5saXN0LmZpbHRlcigodGFyZ2V0RmlsdGVycykgPT4gdGFyZ2V0RmlsdGVycy50YXJnZXQgIT09IG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlci50YXJnZXQpO1xuICAgICAgc3RhdGUubGlzdC5wdXNoKG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlcik7XG4gICAgfSlcbiAgICAuYWRkQ2FzZShyZWNvcmRpbmdEZWxldGVGaWx0ZXJJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZFRhcmdldFJlY29yZGluZ0ZpbHRlciA9IGdldFRhcmdldFJlY29yZGluZ0ZpbHRlcihzdGF0ZSwgcGF5bG9hZC50YXJnZXQpO1xuXG4gICAgICBsZXQgbmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyOiBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzO1xuICAgICAgaWYgKHBheWxvYWQuaXNBcmNoaXZlZCkge1xuICAgICAgICBuZXdUYXJnZXRSZWNvcmRpbmdGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4ub2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLFxuICAgICAgICAgIGFyY2hpdmVkOiB7XG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVSZWNvcmRpbmdGaWx0ZXIob2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLmFyY2hpdmVkLmZpbHRlcnMsIHtcbiAgICAgICAgICAgICAgZmlsdGVyS2V5OiBwYXlsb2FkLmNhdGVnb3J5ISxcbiAgICAgICAgICAgICAgZmlsdGVyVmFsdWU6IHBheWxvYWQuZmlsdGVyLFxuICAgICAgICAgICAgICBkZWxldGVkOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlciA9IHtcbiAgICAgICAgICAuLi5vbGRUYXJnZXRSZWNvcmRpbmdGaWx0ZXIsXG4gICAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVSZWNvcmRpbmdGaWx0ZXIob2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLmFjdGl2ZS5maWx0ZXJzLCB7XG4gICAgICAgICAgICAgIGZpbHRlcktleTogcGF5bG9hZC5jYXRlZ29yeSEsXG4gICAgICAgICAgICAgIGZpbHRlclZhbHVlOiBwYXlsb2FkLmZpbHRlcixcbiAgICAgICAgICAgICAgZGVsZXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmxpc3QgPSBzdGF0ZS5saXN0LmZpbHRlcigodGFyZ2V0RmlsdGVycykgPT4gdGFyZ2V0RmlsdGVycy50YXJnZXQgIT09IG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlci50YXJnZXQpO1xuICAgICAgc3RhdGUubGlzdC5wdXNoKG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlcik7XG4gICAgfSlcbiAgICAuYWRkQ2FzZShyZWNvcmRpbmdEZWxldGVDYXRlZ29yeUZpbHRlcnNJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZFRhcmdldFJlY29yZGluZ0ZpbHRlciA9IGdldFRhcmdldFJlY29yZGluZ0ZpbHRlcihzdGF0ZSwgcGF5bG9hZC50YXJnZXQpO1xuXG4gICAgICBsZXQgbmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyOiBUYXJnZXRSZWNvcmRpbmdGaWx0ZXJzO1xuICAgICAgaWYgKHBheWxvYWQuaXNBcmNoaXZlZCkge1xuICAgICAgICBuZXdUYXJnZXRSZWNvcmRpbmdGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4ub2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLFxuICAgICAgICAgIGFyY2hpdmVkOiB7XG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVSZWNvcmRpbmdGaWx0ZXIob2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLmFyY2hpdmVkLmZpbHRlcnMsIHtcbiAgICAgICAgICAgICAgZmlsdGVyS2V5OiBwYXlsb2FkLmNhdGVnb3J5ISxcbiAgICAgICAgICAgICAgZGVsZXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVsZXRlT3B0aW9uczogeyBhbGw6IHRydWUgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdUYXJnZXRSZWNvcmRpbmdGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4ub2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyLFxuICAgICAgICAgIGFjdGl2ZToge1xuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogcGF5bG9hZC5jYXRlZ29yeSxcbiAgICAgICAgICAgIGZpbHRlcnM6IGNyZWF0ZU9yVXBkYXRlUmVjb3JkaW5nRmlsdGVyKG9sZFRhcmdldFJlY29yZGluZ0ZpbHRlci5hY3RpdmUuZmlsdGVycywge1xuICAgICAgICAgICAgICBmaWx0ZXJLZXk6IHBheWxvYWQuY2F0ZWdvcnkhLFxuICAgICAgICAgICAgICBkZWxldGVkOiB0cnVlLFxuICAgICAgICAgICAgICBkZWxldGVPcHRpb25zOiB7IGFsbDogdHJ1ZSB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUubGlzdCA9IHN0YXRlLmxpc3QuZmlsdGVyKCh0YXJnZXRGaWx0ZXJzKSA9PiB0YXJnZXRGaWx0ZXJzLnRhcmdldCAhPT0gbmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyLnRhcmdldCk7XG4gICAgICBzdGF0ZS5saXN0LnB1c2gobmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyKTtcbiAgICB9KVxuICAgIC5hZGRDYXNlKHJlY29yZGluZ0RlbGV0ZUFsbEZpbHRlcnNJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZFRhcmdldFJlY29yZGluZ0ZpbHRlciA9IGdldFRhcmdldFJlY29yZGluZ0ZpbHRlcihzdGF0ZSwgcGF5bG9hZC50YXJnZXQpO1xuICAgICAgY29uc3QgbmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyID0gZGVsZXRlQWxsVGFyZ2V0UmVjb3JkaW5nRmlsdGVycyhvbGRUYXJnZXRSZWNvcmRpbmdGaWx0ZXIsIHBheWxvYWQuaXNBcmNoaXZlZCEpO1xuICAgICAgc3RhdGUubGlzdCA9IHN0YXRlLmxpc3QuZmlsdGVyKCh0YXJnZXRGaWx0ZXJzKSA9PiB0YXJnZXRGaWx0ZXJzLnRhcmdldCAhPT0gbmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyLnRhcmdldCk7XG4gICAgICBzdGF0ZS5saXN0LnB1c2gobmV3VGFyZ2V0UmVjb3JkaW5nRmlsdGVyKTtcbiAgICB9KVxuICAgIC5hZGRDYXNlKHJlY29yZGluZ1VwZGF0ZUNhdGVnb3J5SW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCBvbGRUYXJnZXRSZWNvcmRpbmdGaWx0ZXIgPSBnZXRUYXJnZXRSZWNvcmRpbmdGaWx0ZXIoc3RhdGUsIHBheWxvYWQudGFyZ2V0KTtcbiAgICAgIGNvbnN0IG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlciA9IHsgLi4ub2xkVGFyZ2V0UmVjb3JkaW5nRmlsdGVyIH07XG4gICAgICBpZiAocGF5bG9hZC5pc0FyY2hpdmVkKSB7XG4gICAgICAgIG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlci5hcmNoaXZlZC5zZWxlY3RlZENhdGVnb3J5ID0gcGF5bG9hZC5jYXRlZ29yeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1RhcmdldFJlY29yZGluZ0ZpbHRlci5hY3RpdmUuc2VsZWN0ZWRDYXRlZ29yeSA9IHBheWxvYWQuY2F0ZWdvcnk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5saXN0ID0gc3RhdGUubGlzdC5maWx0ZXIoKHRhcmdldEZpbHRlcnMpID0+IHRhcmdldEZpbHRlcnMudGFyZ2V0ICE9PSBuZXdUYXJnZXRSZWNvcmRpbmdGaWx0ZXIudGFyZ2V0KTtcbiAgICAgIHN0YXRlLmxpc3QucHVzaChuZXdUYXJnZXRSZWNvcmRpbmdGaWx0ZXIpO1xuICAgIH0pXG4gICAgLmFkZENhc2UocmVjb3JkaW5nQWRkVGFyZ2V0SW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRSZWNvcmRpbmdGaWx0ZXIgPSBnZXRUYXJnZXRSZWNvcmRpbmdGaWx0ZXIoc3RhdGUsIHBheWxvYWQudGFyZ2V0KTtcbiAgICAgIHN0YXRlLmxpc3QgPSBzdGF0ZS5saXN0LmZpbHRlcigodGFyZ2V0RmlsdGVycykgPT4gdGFyZ2V0RmlsdGVycy50YXJnZXQgIT09IHBheWxvYWQudGFyZ2V0KTtcbiAgICAgIHN0YXRlLmxpc3QucHVzaCh0YXJnZXRSZWNvcmRpbmdGaWx0ZXIpO1xuICAgIH0pXG4gICAgLmFkZENhc2UocmVjb3JkaW5nRGVsZXRlVGFyZ2V0SW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBzdGF0ZS5saXN0ID0gc3RhdGUubGlzdC5maWx0ZXIoKHRhcmdldEZpbHRlcnMpID0+IHRhcmdldEZpbHRlcnMudGFyZ2V0ICE9PSBwYXlsb2FkLnRhcmdldCk7XG4gICAgfSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcmVjb3JkaW5nRmlsdGVyUmVkdWNlcjtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgVGhlbWVTZXR0aW5nIH0gZnJvbSAnQGFwcC9TZXR0aW5ncy9TZXR0aW5nc1V0aWxzJztcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSAnQGFwcC91dGlscy91c2VUaGVtZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgY29uc3Qgd2l0aFRoZW1lZEljb24gPSAoaWNvbjogc3RyaW5nLCBkYXJrSWNvbjogc3RyaW5nLCBhbHQ6IHN0cmluZyk6IFJlYWN0LkZDID0+IHtcbiAgY29uc3QgV2l0aFRoZW1lZEljb246IFJlYWN0LkZDID0gKCkgPT4ge1xuICAgIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpO1xuICAgIGlmICh0aGVtZSA9PT0gVGhlbWVTZXR0aW5nLkRBUkspIHtcbiAgICAgIHJldHVybiA8aW1nIHNyYz17ZGFya0ljb259IGFsdD17YWx0fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxpbWcgc3JjPXtpY29ufSBhbHQ9e2FsdH0gLz47XG4gICAgfVxuICB9O1xuICByZXR1cm4gV2l0aFRoZW1lZEljb247XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBCdXR0b24sIEVtcHR5U3RhdGUsIEVtcHR5U3RhdGVCb2R5LCBFbXB0eVN0YXRlSWNvbiwgVGl0bGUsIFN0YWNrSXRlbSwgU3RhY2sgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEV4Y2xhbWF0aW9uQ2lyY2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IGF1dGhGYWlsTWVzc2FnZSA9ICdBdXRoZW50aWNhdGlvbiBmYWlsdXJlJztcblxuZXhwb3J0IGNvbnN0IG1pc3NpbmdTU0xNZXNzYWdlID0gJ0JhZCBHYXRld2F5JztcblxuZXhwb3J0IGNvbnN0IGlzQXV0aEZhaWwgPSAobWVzc2FnZTogc3RyaW5nKSA9PiBtZXNzYWdlID09PSBhdXRoRmFpbE1lc3NhZ2U7XG5leHBvcnQgaW50ZXJmYWNlIEVycm9yVmlld1Byb3BzIHtcbiAgdGl0bGU6IHN0cmluZyB8IFJlYWN0LlJlYWN0Tm9kZTtcbiAgbWVzc2FnZTogc3RyaW5nIHwgUmVhY3QuUmVhY3ROb2RlO1xuICByZXRyeUJ1dHRvbk1lc3NhZ2U/OiBzdHJpbmc7XG4gIHJldHJ5PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yVmlldzogUmVhY3QuRkM8RXJyb3JWaWV3UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFbXB0eVN0YXRlPlxuICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17RXhjbGFtYXRpb25DaXJjbGVJY29ufSBjb2xvcj17JyNhMzAwMDAnfSAvPlxuICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICB7cHJvcHMudGl0bGV9XG4gICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDxFbXB0eVN0YXRlQm9keT5cbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFN0YWNrPlxuICAgICAgICAgICAgICA8U3RhY2tJdGVtPntwcm9wcy5tZXNzYWdlfTwvU3RhY2tJdGVtPlxuICAgICAgICAgICAgICB7cHJvcHMucmV0cnkgJiYgKFxuICAgICAgICAgICAgICAgIDxTdGFja0l0ZW0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17cHJvcHMucmV0cnl9PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMucmV0cnlCdXR0b25NZXNzYWdlIHx8ICdSZXRyeSd9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU3RhY2s+XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvRW1wdHlTdGF0ZUJvZHk+XG4gICAgICA8L0VtcHR5U3RhdGU+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uICovXG5pbXBvcnQge1xuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzLFxuICBBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnNDYXRlZ29yaWVzLFxufSBmcm9tICdAYXBwL0Rhc2hib2FyZC9BdXRvbWF0ZWRBbmFseXNpcy9BdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMnO1xuaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBjcmVhdGVSZWR1Y2VyIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQgeyBXcml0YWJsZURyYWZ0IH0gZnJvbSAnaW1tZXIvZGlzdC9pbnRlcm5hbCc7XG5pbXBvcnQgeyBnZXRQZXJzaXN0ZWRTdGF0ZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFVwZGF0ZUZpbHRlck9wdGlvbnMgfSBmcm9tICcuL0NvbW1vbic7XG5cbmNvbnN0IF92ZXJzaW9uID0gJzEnO1xuXG4vLyBDb21tb24gYWN0aW9uIHN0cmluZyBmb3JtYXQ6IFwicmVzb3VyY2UocykvYWN0aW9uXCJcbmV4cG9ydCBlbnVtIEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyQWN0aW9uIHtcbiAgR0xPQkFMX0ZJTFRFUl9BREQgPSAnYXV0b21hdGVkLWFuYWx5c2lzLWdsb2JhbC1maWx0ZXIvYWRkJyxcbiAgRklMVEVSX0FERCA9ICdhdXRvbWF0ZWQtYW5hbHlzaXMtZmlsdGVyL2FkZCcsXG4gIEZJTFRFUl9ERUxFVEUgPSAnYXV0b21hdGVkLWFuYWx5c2lzLWZpbHRlci9kZWxldGUnLFxuICBGSUxURVJfREVMRVRFX0FMTCA9ICdhdXRvbWF0ZWQtYW5hbHlzaXMtZmlsdGVyL2RlbGV0ZV9hbGwnLCAvLyBEZWxldGUgYWxsIGZpbHRlcnMgaW4gYWxsIGNhdGVnb3JpZXNcbiAgQ0FURUdPUllfRklMVEVSU19ERUxFVEUgPSAnYXV0b21hdGVkLWFuYWx5c2lzLWZpbHRlcnMvZGVsZXRlJywgLy8gRGVsZXRlIGFsbCBmaWx0ZXJzIG9mIHRoZSBzYW1lIGNhdGVnb3J5XG4gIENBVEVHT1JZX1VQREFURSA9ICdhdXRvbWF0ZWQtYW5hbHlzaXMtY2F0ZWdvcnkvdXBkYXRlJyxcbiAgVEFSR0VUX0FERCA9ICdhdXRvbWF0ZWQtYW5hbHlzaXMtdGFyZ2V0L2FkZCcsXG4gIFRBUkdFVF9ERUxFVEUgPSAnYXV0b21hdGVkLWFuYWx5c2lzLXRhcmdldC9kZWxldGUnLFxufVxuXG5leHBvcnQgY29uc3QgZW51bVZhbHVlcyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbikpO1xuXG5leHBvcnQgY29uc3QgZW1wdHlBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMgPSB7XG4gIE5hbWU6IFtdLFxuICBUb3BpYzogW10sXG59IGFzIEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyc0NhdGVnb3JpZXM7XG5cbmV4cG9ydCBjb25zdCBhbGxvd2VkQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzID0gT2JqZWN0LmtleXMoZW1wdHlBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyQWN0aW9uUGF5bG9hZCB7XG4gIHRhcmdldDogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgZmlsdGVyPzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlZEFuYWx5c2lzQWRkR2xvYmFsRmlsdGVySW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbi5HTE9CQUxfRklMVEVSX0FERCxcbiAgKGNhdGVnb3J5OiBzdHJpbmcsIGZpbHRlcjogdW5rbm93bikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBjYXRlZ29yeTogY2F0ZWdvcnksXG4gICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICB9LFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlZEFuYWx5c2lzQWRkRmlsdGVySW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbi5GSUxURVJfQURELFxuICAodGFyZ2V0OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGZpbHRlcjogdW5rbm93bikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIH0gYXMgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlRmlsdGVySW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbi5GSUxURVJfREVMRVRFLFxuICAodGFyZ2V0OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGZpbHRlcjogdW5rbm93bikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIH0gYXMgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbi5DQVRFR09SWV9GSUxURVJTX0RFTEVURSxcbiAgKHRhcmdldDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgIH0gYXMgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlQWxsRmlsdGVyc0ludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJBY3Rpb24uRklMVEVSX0RFTEVURV9BTEwsXG4gICh0YXJnZXQ6IHN0cmluZykgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICB9IGFzIEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyQWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBhdXRvbWF0ZWRBbmFseXNpc1VwZGF0ZUNhdGVnb3J5SW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbi5DQVRFR09SWV9VUERBVEUsXG4gICh0YXJnZXQ6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZykgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICB9IGFzIEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyQWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBhdXRvbWF0ZWRBbmFseXNpc0FkZFRhcmdldEludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJBY3Rpb24uVEFSR0VUX0FERCxcbiAgKHRhcmdldDogc3RyaW5nKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIH0gYXMgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlVGFyZ2V0SW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbi5UQVJHRVRfREVMRVRFLFxuICAodGFyZ2V0OiBzdHJpbmcpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgfSBhcyBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU3RhdGUge1xuICB0YXJnZXRGaWx0ZXJzOiBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNbXTtcbiAgZ2xvYmFsRmlsdGVyczogVGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNHbG9iYWxGaWx0ZXJzO1xufVxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnMge1xuICBmaWx0ZXJzOiBBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnNDYXRlZ29yaWVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMge1xuICB0YXJnZXQ6IHN0cmluZzsgLy8gY29ubmVjdFVSTFxuICBzZWxlY3RlZENhdGVnb3J5Pzogc3RyaW5nO1xuICBmaWx0ZXJzOiBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlciA9IChcbiAgb2xkOiBBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnNDYXRlZ29yaWVzLFxuICB7IGZpbHRlclZhbHVlLCBmaWx0ZXJLZXkgfVxuKTogQXV0b21hdGVkQW5hbHlzaXNHbG9iYWxGaWx0ZXJzQ2F0ZWdvcmllcyA9PiB7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSB7IC4uLm9sZCB9O1xuICBuZXdGaWx0ZXJzW2ZpbHRlcktleV0gPSBmaWx0ZXJWYWx1ZTtcbiAgcmV0dXJuIG5ld0ZpbHRlcnM7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlciA9IChcbiAgb2xkOiBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzLFxuICB7IGZpbHRlclZhbHVlLCBmaWx0ZXJLZXksIGRlbGV0ZWQgPSBmYWxzZSwgZGVsZXRlT3B0aW9ucyB9OiBVcGRhdGVGaWx0ZXJPcHRpb25zXG4pOiBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzID0+IHtcbiAgbGV0IG5ld0ZpbHRlclZhbHVlczogdW5rbm93bltdO1xuXG4gIGlmICghb2xkW2ZpbHRlcktleV0pIHtcbiAgICBuZXdGaWx0ZXJWYWx1ZXMgPSBbZmlsdGVyVmFsdWVdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG9sZEZpbHRlclZhbHVlcyA9IG9sZFtmaWx0ZXJLZXldO1xuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICBpZiAoZGVsZXRlT3B0aW9ucyAmJiBkZWxldGVPcHRpb25zLmFsbCkge1xuICAgICAgICBuZXdGaWx0ZXJWYWx1ZXMgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0ZpbHRlclZhbHVlcyA9IG9sZEZpbHRlclZhbHVlcy5maWx0ZXIoKHZhbCkgPT4gdmFsICE9PSBmaWx0ZXJWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0ZpbHRlclZhbHVlcyA9IEFycmF5LmZyb20obmV3IFNldChbLi4ub2xkRmlsdGVyVmFsdWVzLCBmaWx0ZXJWYWx1ZV0pKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJzID0geyAuLi5vbGQgfTtcbiAgbmV3RmlsdGVyc1tmaWx0ZXJLZXldID0gbmV3RmlsdGVyVmFsdWVzO1xuICByZXR1cm4gbmV3RmlsdGVycztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlciA9IChcbiAgc3RhdGU6IFdyaXRhYmxlRHJhZnQ8eyBnbG9iYWxGaWx0ZXJzOiBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnMgfT5cbikgPT4ge1xuICByZXR1cm4gc3RhdGUuZ2xvYmFsRmlsdGVycztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlciA9IChcbiAgc3RhdGU6IFdyaXRhYmxlRHJhZnQ8eyB0YXJnZXRGaWx0ZXJzOiBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNbXSB9PixcbiAgdGFyZ2V0OiBzdHJpbmdcbik6IFRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyA9PiB7XG4gIGNvbnN0IHRhcmdldEZpbHRlciA9IHN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyKCh0YXJnZXRGaWx0ZXJzKSA9PiB0YXJnZXRGaWx0ZXJzLnRhcmdldCA9PT0gdGFyZ2V0KTtcbiAgcmV0dXJuIHRhcmdldEZpbHRlci5sZW5ndGggPiAwID8gdGFyZ2V0RmlsdGVyWzBdIDogY3JlYXRlRW1wdHlBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnModGFyZ2V0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFbXB0eUF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyA9ICh0YXJnZXQ6IHN0cmluZykgPT5cbiAgKHtcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBzZWxlY3RlZENhdGVnb3J5OiAnTmFtZScsXG4gICAgZmlsdGVyczogZW1wdHlBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMsXG4gIH0gYXMgVGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzKTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUFsbEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyA9IChhdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcjogVGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIsXG4gICAgc2VsZWN0ZWRDYXRlZ29yeTogYXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIuc2VsZWN0ZWRDYXRlZ29yeSxcbiAgICBmaWx0ZXJzOiBlbXB0eUF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyxcbiAgfTtcbn07XG5cbmNvbnN0IElOSVRJQUxfU1RBVEUgPSBnZXRQZXJzaXN0ZWRTdGF0ZSgnQVVUT01BVEVEX0FOQUxZU0lTX0ZJTFRFUlMnLCBfdmVyc2lvbiwge1xuICBzdGF0ZToge1xuICAgIHRhcmdldEZpbHRlcnM6IFtdLFxuICAgIGdsb2JhbEZpbHRlcnM6IHsgZmlsdGVyczogeyBTY29yZTogMCB9IH0sXG4gIH0gYXMgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJTdGF0ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgYXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihJTklUSUFMX1NUQVRFLCAoYnVpbGRlcikgPT4ge1xuICBidWlsZGVyXG4gICAgLmFkZENhc2UoYXV0b21hdGVkQW5hbHlzaXNBZGRHbG9iYWxGaWx0ZXJJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZEF1dG9tYXRlZEFuYWx5c2lzR2xvYmFsRmlsdGVyID0gZ2V0QXV0b21hdGVkQW5hbHlzaXNHbG9iYWxGaWx0ZXIoc3RhdGUuc3RhdGUpO1xuICAgICAgc3RhdGUuc3RhdGUuZ2xvYmFsRmlsdGVycyA9IHtcbiAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcihvbGRBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlci5maWx0ZXJzLCB7XG4gICAgICAgICAgZmlsdGVyS2V5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICAgIGZpbHRlclZhbHVlOiBwYXlsb2FkLmZpbHRlcixcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmFkZENhc2UoYXV0b21hdGVkQW5hbHlzaXNBZGRGaWx0ZXJJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyID0gZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIoc3RhdGUuc3RhdGUsIHBheWxvYWQudGFyZ2V0KTtcbiAgICAgIGNvbnN0IG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyOiBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMgPSB7XG4gICAgICAgIC4uLm9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLFxuICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICBmaWx0ZXJzOiBjcmVhdGVPclVwZGF0ZUF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKG9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLmZpbHRlcnMsIHtcbiAgICAgICAgICBmaWx0ZXJLZXk6IHBheWxvYWQuY2F0ZWdvcnkhLFxuICAgICAgICAgIGZpbHRlclZhbHVlOiBwYXlsb2FkLmZpbHRlcixcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycyA9IHN0YXRlLnN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAodGFyZ2V0RmlsdGVycykgPT4gdGFyZ2V0RmlsdGVycy50YXJnZXQgIT09IG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLnRhcmdldFxuICAgICAgKTtcbiAgICAgIHN0YXRlLnN0YXRlLnRhcmdldEZpbHRlcnMucHVzaChuZXdBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcik7XG4gICAgfSlcbiAgICAuYWRkQ2FzZShhdXRvbWF0ZWRBbmFseXNpc0RlbGV0ZUZpbHRlckludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgY29uc3Qgb2xkQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIgPSBnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcihzdGF0ZS5zdGF0ZSwgcGF5bG9hZC50YXJnZXQpO1xuXG4gICAgICBjb25zdCBuZXdBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcjogVGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzID0ge1xuICAgICAgICAuLi5vbGRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcixcbiAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogcGF5bG9hZC5jYXRlZ29yeSxcbiAgICAgICAgZmlsdGVyczogY3JlYXRlT3JVcGRhdGVBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcihvbGRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlci5maWx0ZXJzLCB7XG4gICAgICAgICAgZmlsdGVyS2V5OiBwYXlsb2FkLmNhdGVnb3J5ISxcbiAgICAgICAgICBmaWx0ZXJWYWx1ZTogcGF5bG9hZC5maWx0ZXIsXG4gICAgICAgICAgZGVsZXRlZDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzID0gc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycy5maWx0ZXIoXG4gICAgICAgICh0YXJnZXRGaWx0ZXJzKSA9PiB0YXJnZXRGaWx0ZXJzLnRhcmdldCAhPT0gbmV3QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIudGFyZ2V0XG4gICAgICApO1xuICAgICAgc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycy5wdXNoKG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKTtcbiAgICB9KVxuICAgIC5hZGRDYXNlKGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCBvbGRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlciA9IGdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKHN0YXRlLnN0YXRlLCBwYXlsb2FkLnRhcmdldCk7XG5cbiAgICAgIGNvbnN0IG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyOiBUYXJnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMgPSB7XG4gICAgICAgIC4uLm9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLFxuICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBwYXlsb2FkLmNhdGVnb3J5LFxuICAgICAgICBmaWx0ZXJzOiBjcmVhdGVPclVwZGF0ZUF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKG9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLmZpbHRlcnMsIHtcbiAgICAgICAgICBmaWx0ZXJLZXk6IHBheWxvYWQuY2F0ZWdvcnkhLFxuICAgICAgICAgIGRlbGV0ZWQ6IHRydWUsXG4gICAgICAgICAgZGVsZXRlT3B0aW9uczogeyBhbGw6IHRydWUgfSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycyA9IHN0YXRlLnN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAodGFyZ2V0RmlsdGVycykgPT4gdGFyZ2V0RmlsdGVycy50YXJnZXQgIT09IG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLnRhcmdldFxuICAgICAgKTtcbiAgICAgIHN0YXRlLnN0YXRlLnRhcmdldEZpbHRlcnMucHVzaChuZXdBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcik7XG4gICAgfSlcbiAgICAuYWRkQ2FzZShhdXRvbWF0ZWRBbmFseXNpc0RlbGV0ZUFsbEZpbHRlcnNJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IG9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyID0gZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIoc3RhdGUuc3RhdGUsIHBheWxvYWQudGFyZ2V0KTtcbiAgICAgIGNvbnN0IG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyID0gZGVsZXRlQWxsQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzKG9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKTtcbiAgICAgIHN0YXRlLnN0YXRlLnRhcmdldEZpbHRlcnMgPSBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzLmZpbHRlcihcbiAgICAgICAgKHRhcmdldEZpbHRlcnMpID0+IHRhcmdldEZpbHRlcnMudGFyZ2V0ICE9PSBuZXdBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlci50YXJnZXRcbiAgICAgICk7XG4gICAgICBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzLnB1c2gobmV3QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIpO1xuICAgIH0pXG4gICAgLmFkZENhc2UoYXV0b21hdGVkQW5hbHlzaXNVcGRhdGVDYXRlZ29yeUludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgY29uc3Qgb2xkQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIgPSBnZXRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcihzdGF0ZS5zdGF0ZSwgcGF5bG9hZC50YXJnZXQpO1xuICAgICAgY29uc3QgbmV3QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIgPSB7IC4uLm9sZEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyIH07XG5cbiAgICAgIG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyLnNlbGVjdGVkQ2F0ZWdvcnkgPSBwYXlsb2FkLmNhdGVnb3J5O1xuXG4gICAgICBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzID0gc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycy5maWx0ZXIoXG4gICAgICAgICh0YXJnZXRGaWx0ZXJzKSA9PiB0YXJnZXRGaWx0ZXJzLnRhcmdldCAhPT0gbmV3QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIudGFyZ2V0XG4gICAgICApO1xuICAgICAgc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycy5wdXNoKG5ld0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKTtcbiAgICB9KVxuICAgIC5hZGRDYXNlKGF1dG9tYXRlZEFuYWx5c2lzQWRkVGFyZ2V0SW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlciA9IGdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyKHN0YXRlLnN0YXRlLCBwYXlsb2FkLnRhcmdldCk7XG4gICAgICBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzID0gc3RhdGUuc3RhdGUudGFyZ2V0RmlsdGVycy5maWx0ZXIoXG4gICAgICAgICh0YXJnZXRGaWx0ZXJzKSA9PiB0YXJnZXRGaWx0ZXJzLnRhcmdldCAhPT0gcGF5bG9hZC50YXJnZXRcbiAgICAgICk7XG4gICAgICBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzLnB1c2goQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXIpO1xuICAgIH0pXG4gICAgLmFkZENhc2UoYXV0b21hdGVkQW5hbHlzaXNEZWxldGVUYXJnZXRJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN0YXRlLnN0YXRlLnRhcmdldEZpbHRlcnMgPSBzdGF0ZS5zdGF0ZS50YXJnZXRGaWx0ZXJzLmZpbHRlcihcbiAgICAgICAgKHRhcmdldEZpbHRlcnMpID0+IHRhcmdldEZpbHRlcnMudGFyZ2V0ICE9PSBwYXlsb2FkLnRhcmdldFxuICAgICAgKTtcbiAgICB9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdXRvbWF0ZWRBbmFseXNpc0ZpbHRlclJlZHVjZXI7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNTY29yZSwgQ2F0ZWdvcml6ZWRSdWxlRXZhbHVhdGlvbnMgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBGbGV4LCBGbGV4SXRlbSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHtcbiAgQ2hlY2tDaXJjbGVJY29uLFxuICBFeGNsYW1hdGlvbkNpcmNsZUljb24sXG4gIEV4Y2xhbWF0aW9uVHJpYW5nbGVJY29uLFxuICBJbmZvQ2lyY2xlSWNvbixcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3Qtc3R5bGVzJztcbmltcG9ydCB7XG4gIElubmVyU2Nyb2xsQ29udGFpbmVyLFxuICBJU29ydEJ5LFxuICBPdXRlclNjcm9sbENvbnRhaW5lcixcbiAgVGFibGVDb21wb3NhYmxlLFxuICBUYm9keSxcbiAgVGQsXG4gIFRoLFxuICBUaGVhZCxcbiAgVGhQcm9wcyxcbiAgVHIsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1BQURlc2NyaXB0aW9uIH0gZnJvbSAnLi4vZGFzaGJvYXJkLXV0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc0NhcmRMaXN0UHJvcHMge1xuICBldmFsdWF0aW9uczogQ2F0ZWdvcml6ZWRSdWxlRXZhbHVhdGlvbnNbXTtcbn1cblxuZXhwb3J0IGNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzQ2FyZExpc3Q6IFJlYWN0LkZDPEF1dG9tYXRlZEFuYWx5c2lzQ2FyZExpc3RQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSBSZWFjdC51c2VTdGF0ZTxJU29ydEJ5Pih7fSk7XG5cbiAgY29uc3QgaWNvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKChzY29yZTogbnVtYmVyKTogSlNYLkVsZW1lbnQgPT4ge1xuICAgIHJldHVybiBzY29yZSA9PSBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk5BX1NDT1JFID8gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3MoJ3BmLW0tZ3JleScsICdwZi1jLWxhYmVsX19pY29uJyl9PlxuICAgICAgICA8SW5mb0NpcmNsZUljb24gLz5cbiAgICAgIDwvc3Bhbj5cbiAgICApIDogc2NvcmUgPCBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk9SQU5HRV9TQ09SRV9USFJFU0hPTEQgPyAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2NzcygncGYtbS1ncmVlbicsICdwZi1jLWxhYmVsX19pY29uJyl9PlxuICAgICAgICA8Q2hlY2tDaXJjbGVJY29uIC8+XG4gICAgICA8L3NwYW4+XG4gICAgKSA6IHNjb3JlIDwgQXV0b21hdGVkQW5hbHlzaXNTY29yZS5SRURfU0NPUkVfVEhSRVNIT0xEID8gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3MoJ3BmLW0tb3JhbmdlJywgJ3BmLWMtbGFiZWxfX2ljb24nKX0+XG4gICAgICAgIDxFeGNsYW1hdGlvblRyaWFuZ2xlSWNvbiAvPlxuICAgICAgPC9zcGFuPlxuICAgICkgOiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2NzcygncGYtbS1yZWQnLCAncGYtYy1sYWJlbF9faWNvbicpfT5cbiAgICAgICAgPEV4Y2xhbWF0aW9uQ2lyY2xlSWNvbiAvPlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBnZXRTb3J0UGFyYW1zID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNvbHVtbkluZGV4OiBudW1iZXIpOiBUaFByb3BzWydzb3J0J10gPT4gKHtcbiAgICAgIHNvcnRCeTogc29ydEJ5LFxuICAgICAgb25Tb3J0OiAoX2V2ZW50LCBpbmRleCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIHNldFNvcnRCeSh7IGluZGV4LCBkaXJlY3Rpb24gfSk7XG4gICAgICB9LFxuICAgICAgY29sdW1uSW5kZXgsXG4gICAgfSksXG4gICAgW3NldFNvcnRCeSwgc29ydEJ5XVxuICApO1xuXG4gIGNvbnN0IGZsYXRGaWx0ZXJlZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBwcm9wcy5ldmFsdWF0aW9uc1xuICAgICAgLmZsYXRNYXAoKFtfLCBldmFsdWF0aW9uc10pID0+IHtcbiAgICAgICAgcmV0dXJuIGV2YWx1YXRpb25zLm1hcCgoZXZhbHVhdGlvbikgPT4gZXZhbHVhdGlvbik7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYVZhbHVlID0gc29ydEJ5LmluZGV4ID09PSAwID8gYS5uYW1lIDogYS5zY29yZTtcbiAgICAgICAgY29uc3QgYlZhbHVlID0gc29ydEJ5LmluZGV4ID09PSAwID8gYi5uYW1lIDogYi5zY29yZTtcbiAgICAgICAgaWYgKHR5cGVvZiBhVmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBiVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHNvcnRCeS5kaXJlY3Rpb24gPT09ICdhc2MnKSB7XG4gICAgICAgICAgICByZXR1cm4gYVZhbHVlLmxvY2FsZUNvbXBhcmUoYlZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJWYWx1ZS5sb2NhbGVDb21wYXJlKGFWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhVmFsdWUgPT09ICdudW1iZXInICYmIHR5cGVvZiBiVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgaWYgKHNvcnRCeS5kaXJlY3Rpb24gPT09ICdhc2MnKSB7XG4gICAgICAgICAgICBpZiAoYVZhbHVlID09PSBiVmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYVZhbHVlIC0gYlZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYVZhbHVlID09PSBiVmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGIubmFtZS5sb2NhbGVDb21wYXJlKGEubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYlZhbHVlIC0gYVZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICB9LCBbc29ydEJ5LCBwcm9wcy5ldmFsdWF0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPE91dGVyU2Nyb2xsQ29udGFpbmVyIGNsYXNzTmFtZT1cImF1dG9tYXRlZC1hbmFseXNpcy1kYXRhbGlzdC1vdXRlcnNjcm9sbFwiPlxuICAgICAgPElubmVyU2Nyb2xsQ29udGFpbmVyIGNsYXNzTmFtZT1cImF1dG9tYXRlZC1hbmFseXNpcy1kYXRhbGlzdC1pbm5lcnNjcm9sbFwiPlxuICAgICAgICA8VGFibGVDb21wb3NhYmxlIGFyaWEtbGFiZWw9eydBdXRvbWF0ZWQgQW5hbHlzaXMgRGF0YSBMaXN0J30gZ3JpZEJyZWFrUG9pbnQ9eydncmlkLW1kJ30gaXNTdGlja3lIZWFkZXI+XG4gICAgICAgICAgPFRoZWFkPlxuICAgICAgICAgICAgPFRyPlxuICAgICAgICAgICAgICA8VGggc29ydD17Z2V0U29ydFBhcmFtcygwKX0+e3QoJ05BTUUnLCB7IG5zOiAnY29tbW9uJyB9KX08L1RoPlxuICAgICAgICAgICAgICA8VGggbW9kaWZpZXI9XCJ3cmFwXCIgc29ydD17Z2V0U29ydFBhcmFtcygxKX0+XG4gICAgICAgICAgICAgICAge3QoJ1NDT1JFJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICAgIDwvVGg+XG4gICAgICAgICAgICAgIDxUaCBtb2RpZmllcj1cInRydW5jYXRlXCI+e3QoJ0RFU0NSSVBUSU9OJywgeyBuczogJ2NvbW1vbicgfSl9PC9UaD5cbiAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgPC9UaGVhZD5cbiAgICAgICAgICA8VGJvZHk+XG4gICAgICAgICAgICB7ZmxhdEZpbHRlcmVkLm1hcCgoZXZhbHVhdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUciBrZXk9e2V2YWx1YXRpb24ubmFtZX0+XG4gICAgICAgICAgICAgICAgICA8VGQgZGF0YUxhYmVsPXt0KCdOQU1FJywgeyBuczogJ2NvbW1vbicgfSl9IHdpZHRoPXsxMH0+XG4gICAgICAgICAgICAgICAgICAgIHtldmFsdWF0aW9uLm5hbWV9XG4gICAgICAgICAgICAgICAgICA8L1RkPlxuICAgICAgICAgICAgICAgICAgPFRkIGRhdGFMYWJlbD17dCgnU0NPUkUnLCB7IG5zOiAnY29tbW9uJyB9KX0gbW9kaWZpZXI9XCJ3cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxGbGV4IHNwYWNlSXRlbXM9e3sgZGVmYXVsdDogJ3NwYWNlSXRlbXNTbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAge2V2YWx1YXRpb24uc2NvcmUgPT0gQXV0b21hdGVkQW5hbHlzaXNTY29yZS5OQV9TQ09SRVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHQoJ04vQScsIHsgbnM6ICdjb21tb24nIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogZXZhbHVhdGlvbi5zY29yZS50b0ZpeGVkKDEpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPEZsZXhJdGVtPntpY29uKGV2YWx1YXRpb24uc2NvcmUpfTwvRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDwvRmxleD5cbiAgICAgICAgICAgICAgICAgIDwvVGQ+XG4gICAgICAgICAgICAgICAgICA8VGQgbW9kaWZpZXI9XCJicmVha1dvcmRcIiBkYXRhTGFiZWw9e3QoJ0RFU0NSSVBUSU9OJywgeyBuczogJ2NvbW1vbicgfSl9PlxuICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtQUFEZXNjcmlwdGlvbihldmFsdWF0aW9uLmRlc2NyaXB0aW9uKX1cbiAgICAgICAgICAgICAgICAgIDwvVGQ+XG4gICAgICAgICAgICAgICAgPC9Ucj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVGJvZHk+XG4gICAgICAgIDwvVGFibGVDb21wb3NhYmxlPlxuICAgICAgPC9Jbm5lclNjcm9sbENvbnRhaW5lcj5cbiAgICA8L091dGVyU2Nyb2xsQ29udGFpbmVyPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTG9hZGluZ1Byb3BzVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1Byb2dyZXNzSW5kaWNhdG9yJztcbmltcG9ydCB7IEFjdGlvbkdyb3VwLCBCdXR0b24sIEZvcm0sIEZvcm1Hcm91cCwgVGV4dElucHV0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENyZWRlbnRpYWwge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxBdXRoRm9ybVByb3BzIHtcbiAgb25EaXNtaXNzOiAoKSA9PiB2b2lkO1xuICBvblNhdmU6ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiB2b2lkO1xuICBmb2N1cz86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uQ3JlZGVudGlhbENoYW5nZT86IChjcmVkZW50aWFsOiBBdXRoQ3JlZGVudGlhbCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENyZWRlbnRpYWxBdXRoRm9ybTogUmVhY3QuRkM8Q3JlZGVudGlhbEF1dGhGb3JtUHJvcHM+ID0gKHtcbiAgb25EaXNtaXNzLFxuICBvblNhdmUsXG4gIG9uQ3JlZGVudGlhbENoYW5nZSxcbiAgbG9hZGluZyxcbiAgaXNEaXNhYmxlZCxcbiAgZm9jdXMsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBbdXNlcm5hbWUsIHNldFVzZXJuYW1lXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Bhc3N3b3JkLCBzZXRQYXNzd29yZF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG5cbiAgY29uc3QgaGFuZGxlU2F2ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvblNhdmUodXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgfSwgW29uU2F2ZSwgdXNlcm5hbWUsIHBhc3N3b3JkXSk7XG5cbiAgY29uc3QgaGFuZGxlRGlzbWlzcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBEbyBub3Qgc2V0IHN0YXRlIGFzIGZvcm0gaXMgdW5tb3VudGVkIGFmdGVyIGNhbmNlbFxuICAgIG9uRGlzbWlzcygpO1xuICB9LCBbb25EaXNtaXNzXSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5VXAgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInICYmIHVzZXJuYW1lICE9PSAnJyAmJiBwYXNzd29yZCAhPT0gJycpIHtcbiAgICAgICAgaGFuZGxlU2F2ZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVNhdmUsIHVzZXJuYW1lLCBwYXNzd29yZF1cbiAgKTtcblxuICBjb25zdCBzYXZlQnV0dG9uTG9hZGluZ1Byb3BzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgKHtcbiAgICAgICAgc3Bpbm5lckFyaWFWYWx1ZVRleHQ6ICdTYXZpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnc2F2aW5nLWNyZWRlbnRpYWxzJyxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nLFxuICAgICAgfSBhcyBMb2FkaW5nUHJvcHNUeXBlKSxcbiAgICBbbG9hZGluZ11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxGb3JtIHsuLi5wcm9wc30+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8Rm9ybUdyb3VwIGlzUmVxdWlyZWQgbGFiZWw9XCJVc2VybmFtZVwiIGZpZWxkSWQ9XCJ1c2VybmFtZVwiPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgdmFsdWU9e3VzZXJuYW1lfVxuICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWQgfHwgbG9hZGluZ31cbiAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGlkPVwidXNlcm5hbWVcIlxuICAgICAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICAgICAgc2V0VXNlcm5hbWUodik7XG4gICAgICAgICAgICBvbkNyZWRlbnRpYWxDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgb25DcmVkZW50aWFsQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdixcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgYXV0b0ZvY3VzPXtmb2N1c31cbiAgICAgICAgLz5cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgPEZvcm1Hcm91cCBpc1JlcXVpcmVkIGxhYmVsPVwiUGFzc3dvcmRcIiBmaWVsZElkPVwicGFzc3dvcmRcIj5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHZhbHVlPXtwYXNzd29yZH1cbiAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgaWQ9XCJwYXNzd29yZFwiXG4gICAgICAgICAgb25DaGFuZ2U9eyh2KSA9PiB7XG4gICAgICAgICAgICBzZXRQYXNzd29yZCh2KTtcbiAgICAgICAgICAgIG9uQ3JlZGVudGlhbENoYW5nZSAmJlxuICAgICAgICAgICAgICBvbkNyZWRlbnRpYWxDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogdixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgLz5cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgPEFjdGlvbkdyb3VwPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgey4uLnNhdmVCdXR0b25Mb2FkaW5nUHJvcHN9XG4gICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZCB8fCBsb2FkaW5nIHx8IHVzZXJuYW1lID09PSAnJyB8fCBwYXNzd29yZCA9PT0gJyd9XG4gICAgICAgID5cbiAgICAgICAgICB7bG9hZGluZyA/ICdTYXZpbmcnIDogJ1NhdmUnfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17aGFuZGxlRGlzbWlzc30gaXNEaXNhYmxlZD17aXNEaXNhYmxlZCB8fCBsb2FkaW5nfT5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0FjdGlvbkdyb3VwPlxuICAgIDwvRm9ybT5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgTk9fVEFSR0VULCBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IE1vZGFsLCBNb2RhbFZhcmlhbnQsIFRleHQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENyZWRlbnRpYWxBdXRoRm9ybSB9IGZyb20gJy4vQ3JlZGVudGlhbEF1dGhGb3JtJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRoTW9kYWxQcm9wcyB7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIG9uRGlzbWlzczogKCkgPT4gdm9pZDtcbiAgb25TYXZlOiAoKSA9PiB2b2lkO1xuICB0YXJnZXRPYnM6IE9ic2VydmFibGU8VGFyZ2V0Pjtcbn1cblxuZXhwb3J0IGNvbnN0IEF1dGhNb2RhbDogUmVhY3QuRkM8QXV0aE1vZGFsUHJvcHM+ID0gKHsgb25EaXNtaXNzLCBvblNhdmU6IG9uUHJvcHNTYXZlLCB0YXJnZXRPYnMsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcblxuICBjb25zdCBvblNhdmUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgdGFyZ2V0T2JzXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0ICE9PSBOT19UQVJHRVQpLFxuICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgIG1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuY29ubmVjdFVybCksXG4gICAgICAgICAgICBtZXJnZU1hcCgoY29ubmVjdFVybCkgPT4gY29udGV4dC5hdXRoQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbChjb25uZWN0VXJsLCB1c2VybmFtZSwgcGFzc3dvcmQpKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChvaykgPT4ge1xuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgb25Qcm9wc1NhdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXV0aENyZWRlbnRpYWxzLCB0YXJnZXRPYnMsIHNldExvYWRpbmcsIG9uUHJvcHNTYXZlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBpc09wZW49e3Byb3BzLnZpc2libGV9XG4gICAgICB2YXJpYW50PXtNb2RhbFZhcmlhbnQubGFyZ2V9XG4gICAgICBzaG93Q2xvc2U9eyFsb2FkaW5nfVxuICAgICAgb25DbG9zZT17b25EaXNtaXNzfVxuICAgICAgdGl0bGU9XCJBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiXG4gICAgICBkZXNjcmlwdGlvbj17XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFRoaXMgdGFyZ2V0IEpWTSByZXF1aXJlcyBhdXRoZW50aWNhdGlvbi4gVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIGhlcmUgd2lsbCBiZSBwYXNzZWQgZnJvbSBDcnlvc3RhdCB0byB0aGVcbiAgICAgICAgICB0YXJnZXQgd2hlbiBlc3RhYmxpc2hpbmcgSk1YIGNvbm5lY3Rpb25zLiBFbnRlciBjcmVkZW50aWFscyBzcGVjaWZpYyB0byB0aGlzIHRhcmdldCwgb3IgZ28gdG97JyAnfVxuICAgICAgICAgIDxMaW5rIG9uQ2xpY2s9e29uRGlzbWlzc30gdG89XCIvc2VjdXJpdHlcIj5cbiAgICAgICAgICAgIFNlY3VyaXR5XG4gICAgICAgICAgPC9MaW5rPnsnICd9XG4gICAgICAgICAgdG8gYWRkIGEgY3JlZGVudGlhbCBtYXRjaGluZyBtdWx0aXBsZSB0YXJnZXRzLiBWaXNpdHsnICd9XG4gICAgICAgICAgPExpbmsgb25DbGljaz17b25EaXNtaXNzfSB0bz1cIi9zZXR0aW5nc1wiPlxuICAgICAgICAgICAgU2V0dGluZ3NcbiAgICAgICAgICA8L0xpbms+eycgJ31cbiAgICAgICAgICB0byBjb25maXJtIGFuZCBjb25maWd1cmUgd2hldGhlciB0aGVzZSBjcmVkZW50aWFscyB3aWxsIGJlIGhlbGQgb25seSBmb3IgdGhpcyBicm93c2VyIHNlc3Npb24gb3Igc3RvcmVkXG4gICAgICAgICAgZW5jcnlwdGVkIGluIHRoZSBDcnlvc3RhdCBiYWNrZW5kLlxuICAgICAgICA8L1RleHQ+XG4gICAgICB9XG4gICAgPlxuICAgICAgPENyZWRlbnRpYWxBdXRoRm9ybSBvblNhdmU9e29uU2F2ZX0gb25EaXNtaXNzPXtvbkRpc21pc3N9IGZvY3VzPXt0cnVlfSBsb2FkaW5nPXtsb2FkaW5nfSAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG4vL1xuaW1wb3J0IHsgRXZlbnRUZW1wbGF0ZSB9IGZyb20gJ0BhcHAvQ3JlYXRlUmVjb3JkaW5nL0NyZWF0ZVJlY29yZGluZyc7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU2VsZWN0LCBGb3JtU2VsZWN0T3B0aW9uLCBGb3JtU2VsZWN0T3B0aW9uR3JvdXAsIFZhbGlkYXRlZE9wdGlvbnMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVNlbGVjdGlvbkdyb3VwIHtcbiAgZ3JvdXBMYWJlbDogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9wdGlvbnM6IHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0VGVtcGxhdGVTZWxlY3RvckZvcm1Qcm9wcyB7XG4gIHNlbGVjdGVkOiBzdHJpbmc7IC8vIGUuZy4gXCJDb250aW51b3VzLFRBUkdFVFwiXG4gIHRlbXBsYXRlczogRXZlbnRUZW1wbGF0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHZhbGlkYXRlZD86IFZhbGlkYXRlZE9wdGlvbnM7XG4gIG9uU2VsZWN0OiAodGVtcGxhdGU/OiBzdHJpbmcsIHRlbXBsYXRlVHlwZT86IFRlbXBsYXRlVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFNlbGVjdFRlbXBsYXRlU2VsZWN0b3JGb3JtOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxTZWxlY3RUZW1wbGF0ZVNlbGVjdG9yRm9ybVByb3BzPiA9ICh7XG4gIHNlbGVjdGVkLFxuICB0ZW1wbGF0ZXMsXG4gIGRpc2FibGVkLFxuICB2YWxpZGF0ZWQsXG4gIG9uU2VsZWN0LFxufSkgPT4ge1xuICBjb25zdCBncm91cHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cExhYmVsOiAnVGFyZ2V0IFRlbXBsYXRlcycsXG4gICAgICAgICAgb3B0aW9uczogdGVtcGxhdGVzXG4gICAgICAgICAgICAuZmlsdGVyKCh0KSA9PiB0LnR5cGUgPT09ICdUQVJHRVQnKVxuICAgICAgICAgICAgLm1hcCgodCkgPT4gKHtcbiAgICAgICAgICAgICAgdmFsdWU6IGAke3QubmFtZX0sJHt0LnR5cGV9YCxcbiAgICAgICAgICAgICAgbGFiZWw6IHQubmFtZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwTGFiZWw6ICdDdXN0b20gVGVtcGxhdGVzJyxcbiAgICAgICAgICBvcHRpb25zOiB0ZW1wbGF0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gJ0NVU1RPTScpXG4gICAgICAgICAgICAubWFwKCh0KSA9PiAoe1xuICAgICAgICAgICAgICB2YWx1ZTogYCR7dC5uYW1lfSwke3QudHlwZX1gLFxuICAgICAgICAgICAgICBsYWJlbDogdC5uYW1lLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgXSBhcyBUZW1wbGF0ZVNlbGVjdGlvbkdyb3VwW10sXG4gICAgW3RlbXBsYXRlc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUZW1wbGF0ZVNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICBvblNlbGVjdCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdHIgPSBzZWxlY3RlZC5zcGxpdCgnLCcpO1xuICAgICAgICBvblNlbGVjdChzdHJbMF0sIHN0clsxXSBhcyBUZW1wbGF0ZVR5cGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uU2VsZWN0XVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxGb3JtU2VsZWN0XG4gICAgICAgIGlzRGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICB2YWx1ZT17c2VsZWN0ZWR9XG4gICAgICAgIHZhbGlkYXRlZD17dmFsaWRhdGVkIHx8IFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRlbXBsYXRlU2VsZWN0fVxuICAgICAgICBhcmlhLWxhYmVsPVwiRXZlbnQgVGVtcGxhdGUgSW5wdXRcIlxuICAgICAgICBpZD1cInJlY29yZGluZy10ZW1wbGF0ZVwiXG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInRlbXBsYXRlLXNlbGVjdG9yXCJcbiAgICAgID5cbiAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiLTFcIiB2YWx1ZT1cIlwiIGxhYmVsPVwiU2VsZWN0IGEgVGVtcGxhdGVcIiBpc1BsYWNlaG9sZGVyIC8+XG4gICAgICAgIHtncm91cHMubWFwKChncm91cCwgaW5kZXgpID0+IChcbiAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbkdyb3VwIGlzRGlzYWJsZWQ9e2dyb3VwLmRpc2FibGVkfSBrZXk9e2luZGV4fSBsYWJlbD17Z3JvdXAuZ3JvdXBMYWJlbH0+XG4gICAgICAgICAgICB7Z3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbiwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT17aWR4fSBsYWJlbD17b3B0aW9uLmxhYmVsfSB2YWx1ZT17b3B0aW9uLnZhbHVlfSBpc0Rpc2FibGVkPXtvcHRpb24uZGlzYWJsZWR9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0Zvcm1TZWxlY3RPcHRpb25Hcm91cD5cbiAgICAgICAgKSl9XG4gICAgICA8L0Zvcm1TZWxlY3Q+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBDYXJkLCBDYXJkQm9keSwgQ2FyZFRpdGxlLCBUZXh0LCBUZXh0VmFyaWFudHMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IERpc2Nvbm5lY3RlZEljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBOb1RhcmdldFNlbGVjdGVkOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPENhcmQ+XG4gICAgICAgIDxDYXJkVGl0bGU+XG4gICAgICAgICAgPERpc2Nvbm5lY3RlZEljb24gLz5cbiAgICAgICAgICAmbmJzcDsgTm8gdGFyZ2V0IHNlbGVjdGVkXG4gICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICA8Q2FyZEJvZHk+XG4gICAgICAgICAgPFRleHQgY29tcG9uZW50PXtUZXh0VmFyaWFudHMucH0+VG8gdmlldyB0aGlzIGNvbnRlbnQsIHNlbGVjdCBhIEpWTSB0YXJnZXQuPC9UZXh0PlxuICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgPC9DYXJkPlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9UYXJnZXRTZWxlY3RlZCB9IGZyb20gJ0BhcHAvVGFyZ2V0Vmlldy9Ob1RhcmdldFNlbGVjdGVkJztcbmltcG9ydCB7IENvZGVCbG9jaywgQ29kZUJsb2NrQ29kZSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRUYXJnZXRQcm9wcyB7XG4gIHRhcmdldD86IFRhcmdldDtcbiAgaW5kZW50TGV2ZWw/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBTZXJpYWxpemVkVGFyZ2V0OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxTZXJpYWxpemVkVGFyZ2V0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHshcHJvcHMudGFyZ2V0ID8gKFxuICAgICAgICA8Tm9UYXJnZXRTZWxlY3RlZCAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPENvZGVCbG9jaz5cbiAgICAgICAgICA8Q29kZUJsb2NrQ29kZT57SlNPTi5zdHJpbmdpZnkocHJvcHMudGFyZ2V0LCBudWxsLCBwcm9wcy5pbmRlbnRMZXZlbCB8fCAyKX08L0NvZGVCbG9ja0NvZGU+XG4gICAgICAgIDwvQ29kZUJsb2NrPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IExvYWRpbmdWaWV3IH0gZnJvbSAnQGFwcC9Mb2FkaW5nVmlldy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgeyBTZXJpYWxpemVkVGFyZ2V0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VyaWFsaXplZFRhcmdldCc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IGluY2x1ZGVzVGFyZ2V0LCBOT19UQVJHRVQsIFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vVGFyZ2V0U2VsZWN0ZWQgfSBmcm9tICdAYXBwL1RhcmdldFZpZXcvTm9UYXJnZXRTZWxlY3RlZCc7XG5pbXBvcnQgeyBnZXRGcm9tTG9jYWxTdG9yYWdlIH0gZnJvbSAnQGFwcC91dGlscy9Mb2NhbFN0b3JhZ2UnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQge1xuICBDYXJkLFxuICBDYXJkQm9keSxcbiAgQ2FyZEV4cGFuZGFibGVDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIFNlbGVjdCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdE9wdGlvbixcbiAgU2VsZWN0VmFyaWFudCxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBDb250YWluZXJOb2RlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRTZWxlY3RQcm9wcyB7XG4gIC8vIGRpc3BsYXkgYSBzaW1wbGUsIG5vbi1leHBhbmRhYmxlIGNvbXBvbmVudC4gc2V0IHRoaXMgaWYgdGhlIHZpZXcgZWxzZXdoZXJlXG4gIC8vIGNvbnRhaW5zIGEgPFNlcmlhbGl6ZWRUYXJnZXQgLz4gb3Igb3RoZXIgcmVwZWF0ZWQgY29tcG9uZW50c1xuICBzaW1wbGU/OiBib29sZWFuO1xuICBvblNlbGVjdD86ICh0YXJnZXQ6IFRhcmdldCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFRhcmdldFNlbGVjdDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8VGFyZ2V0U2VsZWN0UHJvcHM+ID0gKHsgb25TZWxlY3QsIHNpbXBsZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RMb2FkUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VsZWN0ZWQsIHNldFNlbGVjdGVkXSA9IFJlYWN0LnVzZVN0YXRlPFRhcmdldD4oTk9fVEFSR0VUKTtcbiAgY29uc3QgW3RhcmdldHMsIHNldFRhcmdldHNdID0gUmVhY3QudXNlU3RhdGUoW10gYXMgVGFyZ2V0W10pO1xuICBjb25zdCBbaXNEcm9wZG93bk9wZW4sIHNldERyb3Bkb3duT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uRXhwYW5kID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEV4cGFuZGVkKCh2KSA9PiAhdik7XG4gIH0sIFtzZXRFeHBhbmRlZF0pO1xuXG4gIGNvbnN0IF9yZWZyZXNoVGFyZ2V0TGlzdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0cy5xdWVyeUZvclRhcmdldHMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBSZXNldCBsb2FkaW5nIGFuZCBjb250ZXh0LnRhcmdldHMudGFyZ2V0cyB3aWxsIGVtaXRcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0cywgc2V0TG9hZGluZ10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfLCBzZWxlY3Rpb24sIGlzUGxhY2Vob2xkZXIpID0+IHtcbiAgICAgIHNldERyb3Bkb3duT3BlbihmYWxzZSk7XG4gICAgICBjb25zdCB0b1NlbGVjdDogVGFyZ2V0ID0gaXNQbGFjZWhvbGRlciA/IE5PX1RBUkdFVCA6IHNlbGVjdGlvbjtcbiAgICAgIG9uU2VsZWN0ICYmIG9uU2VsZWN0KHRvU2VsZWN0KTtcbiAgICAgIHNldFNlbGVjdGVkKHRvU2VsZWN0KTtcbiAgICB9LFxuICAgIFtzZXREcm9wZG93bk9wZW4sIG9uU2VsZWN0LCBzZXRTZWxlY3RlZF1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250ZXh0LnRhcmdldHMudGFyZ2V0cygpLnN1YnNjcmliZShzZXRUYXJnZXRzKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0cywgc2V0VGFyZ2V0c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gX3JlZnJlc2hUYXJnZXRMaXN0KCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIF9yZWZyZXNoVGFyZ2V0TGlzdF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkICE9PSBOT19UQVJHRVQgJiYgIWluY2x1ZGVzVGFyZ2V0KHRhcmdldHMsIHNlbGVjdGVkKSkge1xuICAgICAgaGFuZGxlU2VsZWN0KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldHMubGVuZ3RoICYmICFmaXJzdExvYWRSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RMb2FkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgY29uc3QgY2FjaGVkVXJsID0gZ2V0RnJvbUxvY2FsU3RvcmFnZSgnVEFSR0VUJywgdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IG1hdGNoZWQgPSB0YXJnZXRzLmZpbmQoKHRuKSA9PiB0bi5jb25uZWN0VXJsID09PSBjYWNoZWRVcmwpO1xuICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgaGFuZGxlU2VsZWN0KHVuZGVmaW5lZCwgbWF0Y2hlZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2hhbmRsZVNlbGVjdCwgdGFyZ2V0cywgc2VsZWN0ZWQsIGZpcnN0TG9hZFJlZl0pO1xuXG4gIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IFtdIGFzIEpTWC5FbGVtZW50W107XG5cbiAgICBjb25zdCBncm91cE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0KSA9PiBncm91cE5hbWVzLmFkZCh0LmFubm90YXRpb25zPy5jcnlvc3RhdFsnUkVBTE0nXSB8fCAnT3RoZXJzJykpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KFxuICAgICAgQXJyYXkuZnJvbShncm91cE5hbWVzKVxuICAgICAgICAubWFwKChuYW1lKSA9PiAoXG4gICAgICAgICAgPFNlbGVjdEdyb3VwIGtleT17bmFtZX0gbGFiZWw9e25hbWV9PlxuICAgICAgICAgICAge3RhcmdldHNcbiAgICAgICAgICAgICAgLmZpbHRlcigodCkgPT4gKHQuYW5ub3RhdGlvbnM/LmNyeW9zdGF0WydSRUFMTSddIHx8ICdPdGhlcnMnKSA9PT0gbmFtZSlcbiAgICAgICAgICAgICAgLm1hcCgodDogVGFyZ2V0KSA9PiAoXG4gICAgICAgICAgICAgICAgPFNlbGVjdE9wdGlvbiBrZXk9e3QuY29ubmVjdFVybH0gdmFsdWU9e3R9IGlzUGxhY2Vob2xkZXI9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgIHshdC5hbGlhcyB8fCB0LmFsaWFzID09PSB0LmNvbm5lY3RVcmwgPyBgJHt0LmNvbm5lY3RVcmx9YCA6IGAke3QuYWxpYXN9ICgke3QuY29ubmVjdFVybH0pYH1cbiAgICAgICAgICAgICAgICA8L1NlbGVjdE9wdGlvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TZWxlY3RHcm91cD5cbiAgICAgICAgKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGAke2EucHJvcHNbJ2xhYmVsJ119YC5sb2NhbGVDb21wYXJlKGAke2IucHJvcHNbJ2xhYmVsJ119YCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwgW3RhcmdldHNdKTtcblxuICBjb25zdCBoYW5kbGVUYXJnZXRGaWx0ZXIgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0T3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoRXhwID0gbmV3IFJlZ0V4cCh2YWx1ZSwgJ2knKTtcbiAgICAgIHJldHVybiBzZWxlY3RPcHRpb25zXG4gICAgICAgIC5maWx0ZXIoKGdycCkgPT4gZ3JwLnByb3BzLmNoaWxkcmVuKVxuICAgICAgICAubWFwKChncnApID0+XG4gICAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KGdycCwge1xuICAgICAgICAgICAgY2hpbGRyZW46IGdycC5wcm9wcy5jaGlsZHJlbi5maWx0ZXIoXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG1hdGNoRXhwLnRlc3Qob3B0aW9uLnByb3BzLnZhbHVlLmNvbm5lY3RVcmwpIHx8IG1hdGNoRXhwLnRlc3Qob3B0aW9uLnByb3BzLnZhbHVlLmFsaWFzKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5maWx0ZXIoKGdycCkgPT4gZ3JwLnByb3BzLmNoaWxkcmVuLmxlbmd0aCA+IDApO1xuICAgIH0sXG4gICAgW3NlbGVjdE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgY2FyZEhlYWRlclByb3BzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc2ltcGxlXG4gICAgICAgID8ge31cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvbkV4cGFuZDogb25FeHBhbmQsXG4gICAgICAgICAgICB0b2dnbGVCdXR0b25Qcm9wczoge1xuICAgICAgICAgICAgICBpZDogJ3RhcmdldC1zZWxlY3QtZXhwYW5kLWJ1dHRvbicsXG4gICAgICAgICAgICAgICdhcmlhLWxhYmVsJzogJ0RldGFpbHMnLFxuICAgICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogJ2V4cGFuZGFibGUtY2FyZC10aXRsZSB0YXJnZXQtc2VsZWN0LWV4cGFuZC1idXR0b24nLFxuICAgICAgICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGlzRXhwYW5kZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgW3NpbXBsZSwgb25FeHBhbmQsIGlzRXhwYW5kZWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZCB7Li4ucHJvcHN9IGlzUm91bmRlZCBpc0NvbXBhY3QgaXNGbGF0IGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9PlxuICAgICAgPENhcmRIZWFkZXIgey4uLmNhcmRIZWFkZXJQcm9wc30+XG4gICAgICAgIDxDYXJkVGl0bGU+VGFyZ2V0IEpWTTwvQ2FyZFRpdGxlPlxuICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgPExvYWRpbmdWaWV3IC8+XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PVwiU2VsZWN0IGEgdGFyZ2V0XCJcbiAgICAgICAgICAgICAgdG9nZ2xlSWNvbj17PENvbnRhaW5lck5vZGVJY29uIC8+fVxuICAgICAgICAgICAgICB2YXJpYW50PXtTZWxlY3RWYXJpYW50LnNpbmdsZX1cbiAgICAgICAgICAgICAgaGFzSW5saW5lRmlsdGVyXG4gICAgICAgICAgICAgIGlubGluZUZpbHRlclBsYWNlaG9sZGVyVGV4dD1cIkZpbHRlciBieSB0YXJnZXRcIlxuICAgICAgICAgICAgICBpc0dyb3VwZWRcbiAgICAgICAgICAgICAgb25GaWx0ZXI9e2hhbmRsZVRhcmdldEZpbHRlcn1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgICAgICAgb25Ub2dnbGU9e3NldERyb3Bkb3duT3Blbn1cbiAgICAgICAgICAgICAgc2VsZWN0aW9ucz17c2VsZWN0ZWQuYWxpYXMgfHwgc2VsZWN0ZWQuY29ubmVjdFVybH1cbiAgICAgICAgICAgICAgaXNGbGlwRW5hYmxlZD17dHJ1ZX1cbiAgICAgICAgICAgICAgbWVudUFwcGVuZFRvPVwicGFyZW50XCJcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PVwiMjBlbVwiXG4gICAgICAgICAgICAgIGlzT3Blbj17aXNEcm9wZG93bk9wZW59XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgVGFyZ2V0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3NlbGVjdE9wdGlvbnN9XG4gICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgICAgIDxDYXJkRXhwYW5kYWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8Q2FyZEJvZHk+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZCA9PT0gTk9fVEFSR0VUID8gPE5vVGFyZ2V0U2VsZWN0ZWQgLz4gOiA8U2VyaWFsaXplZFRhcmdldCB0YXJnZXQ9e3NlbGVjdGVkfSAvPn1cbiAgICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgICAgPC9DYXJkRXhwYW5kYWJsZUNvbnRlbnQ+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICA8L0NhcmQ+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBBdXRoTW9kYWwgfSBmcm9tICdAYXBwL0FwcExheW91dC9BdXRoTW9kYWwnO1xuaW1wb3J0IHsgRXZlbnRUZW1wbGF0ZSB9IGZyb20gJ0BhcHAvQ3JlYXRlUmVjb3JkaW5nL0NyZWF0ZVJlY29yZGluZyc7XG5pbXBvcnQgeyBhdXRoRmFpbE1lc3NhZ2UsIEVycm9yVmlldywgaXNBdXRoRmFpbCB9IGZyb20gJ0BhcHAvRXJyb3JWaWV3L0Vycm9yVmlldyc7XG5pbXBvcnQgeyBTZWxlY3RUZW1wbGF0ZVNlbGVjdG9yRm9ybSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlbGVjdFRlbXBsYXRlU2VsZWN0b3JGb3JtJztcbmltcG9ydCB7XG4gIEF1dG9tYXRlZEFuYWx5c2lzUmVjb3JkaW5nQ29uZmlnLFxuICBhdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ05hbWUsXG4gIGlzSHR0cEVycm9yLFxuICBUZW1wbGF0ZVR5cGUsXG59IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgTk9fVEFSR0VULCBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXRTZWxlY3QgfSBmcm9tICdAYXBwL1NoYXJlZC9UYXJnZXRTZWxlY3QnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRBY3Rpb25zLFxuICBDYXJkQm9keSxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBEZXNjcmlwdGlvbkxpc3QsXG4gIERlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uLFxuICBEZXNjcmlwdGlvbkxpc3RHcm91cCxcbiAgRGVzY3JpcHRpb25MaXN0VGVybSxcbiAgRm9ybSxcbiAgRm9ybUdyb3VwLFxuICBGb3JtU2VjdGlvbixcbiAgRm9ybVNlbGVjdCxcbiAgRm9ybVNlbGVjdE9wdGlvbixcbiAgR3JpZCxcbiAgR3JpZEl0ZW0sXG4gIEhlbHBlclRleHQsXG4gIEhlbHBlclRleHRJdGVtLFxuICBTcGlubmVyLFxuICBTcGxpdCxcbiAgU3BsaXRJdGVtLFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFRleHRWYXJpYW50cyxcbiAgVGl0bGUsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgQ2xvc2VJY29uLCBQZW5jaWxBbHRJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IGZpcnN0LCBpaWYsIG9mLCBSZXBsYXlTdWJqZWN0LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm1Qcm9wcyB7XG4gIHVzZVRpdGxlPzogYm9vbGVhbjtcbiAgaW5saW5lRm9ybT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGb3JtQ29uZmlnIHtcbiAgbWF4QWdlOiBudW1iZXI7XG4gIG1heEFnZVVuaXRzOiBudW1iZXI7XG4gIG1heFNpemU6IG51bWJlcjtcbiAgbWF4U2l6ZVVuaXRzOiBudW1iZXI7XG4gIHRlbXBsYXRlOiBQaWNrPFBhcnRpYWw8RXZlbnRUZW1wbGF0ZT4sICduYW1lJyB8ICd0eXBlJz47XG59XG5cbmV4cG9ydCBjb25zdCBBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm06IFJlYWN0LkZDPEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRm9ybVByb3BzPiA9ICh7XG4gIHVzZVRpdGxlID0gZmFsc2UsXG4gIGlubGluZUZvcm0gPSBmYWxzZSxcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCB0YXJnZXRTdWJqZWN0UmVmID0gUmVhY3QudXNlUmVmKG5ldyBSZXBsYXlTdWJqZWN0PFRhcmdldD4oMSkpO1xuICBjb25zdCB0YXJnZXRTdWJqZWN0ID0gdGFyZ2V0U3ViamVjdFJlZi5jdXJyZW50O1xuXG4gIGNvbnN0IFtyZWNvcmRpbmdDb25maWcsIHNldFJlY29yZGluZ0NvbmZpZ10gPSBSZWFjdC51c2VTdGF0ZTxBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZz4oXG4gICAgY29udGV4dC5zZXR0aW5ncy5hdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZygpXG4gICk7XG4gIGNvbnN0IFtmb3JtQ29uZmlnLCBzZXRGb3JtQ29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlPEZvcm1Db25maWc+KHtcbiAgICBtYXhBZ2U6IGNvbnRleHQuc2V0dGluZ3MuYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcoKS5tYXhBZ2UsXG4gICAgbWF4QWdlVW5pdHM6IDEsXG4gICAgbWF4U2l6ZTogY29udGV4dC5zZXR0aW5ncy5hdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZygpLm1heFNpemUsXG4gICAgbWF4U2l6ZVVuaXRzOiAxLFxuICAgIHRlbXBsYXRlOiBjb250ZXh0LnNldHRpbmdzLmF1dG9tYXRlZEFuYWx5c2lzUmVjb3JkaW5nQ29uZmlnKCkudGVtcGxhdGUsXG4gIH0pO1xuXG4gIGNvbnN0IFt0ZW1wbGF0ZXMsIHNldFRlbXBsYXRlc10gPSBSZWFjdC51c2VTdGF0ZTxFdmVudFRlbXBsYXRlW10+KFtdKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2VkaXRpbmcsIHNldEVkaXRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNBdXRoTW9kYWxPcGVuLCBzZXRJc0F1dGhNb2RhbE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWZyZXNoVGVtcGxhdGVzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVGFyZ2V0KSA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIGlpZihcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID09PSBOT19UQVJHRVQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvZihbXSksXG4gICAgICAgICAgY29udGV4dC5hcGlcbiAgICAgICAgICAgIC5kb0dldDxFdmVudFRlbXBsYXRlW10+KFxuICAgICAgICAgICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3RlbXBsYXRlc2AsXG4gICAgICAgICAgICAgICd2MScsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHRlbXBsYXRlczogRXZlbnRUZW1wbGF0ZVtdKSA9PiB7XG4gICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgICAgICAgICAgc2V0VGVtcGxhdGVzKHRlbXBsYXRlcyk7XG4gICAgICAgICAgICBzZXRGb3JtQ29uZmlnKChvbGQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb2xkVGVtcGxhdGUgPSBvbGQudGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0ZW1wbGF0ZXMuZmluZCgodCkgPT4gdC5uYW1lID09PSBvbGRUZW1wbGF0ZS5uYW1lICYmIHQudHlwZSA9PT0gdC50eXBlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5vbGQsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IG1hdGNoZWQgPyB7IG5hbWU6IG1hdGNoZWQubmFtZSwgdHlwZTogbWF0Y2hlZC50eXBlIH0gOiB7fSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBzZXRUZW1wbGF0ZXMoW10pO1xuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChpc0h0dHBFcnJvcihlcnIpICYmIGVyci5odHRwUmVzcG9uc2Uuc3RhdHVzID09PSA0MjcpIHtcbiAgICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKGF1dGhGYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgIHNldElzQXV0aE1vZGFsT3Blbih0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaSwgc2V0RXJyb3JNZXNzYWdlLCBzZXRUZW1wbGF0ZXMsIHNldEZvcm1Db25maWcsIHNldElzTG9hZGluZywgc2V0SXNBdXRoTW9kYWxPcGVuXVxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgdGFyZ2V0U3ViamVjdC5zdWJzY3JpYmUoKHRhcmdldCkgPT4ge1xuICAgICAgICByZWZyZXNoVGVtcGxhdGVzKHRhcmdldCk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFt0YXJnZXRTdWJqZWN0LCBhZGRTdWJzY3JpcHRpb24sIHJlZnJlc2hUZW1wbGF0ZXMsIHNldElzTG9hZGluZywgZWRpdGluZ10pO1xuXG4gIGNvbnN0IHNldEFBQ29uZmlnID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNvbmZpZzogQXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcpID0+IHtcbiAgICAgIGlmICghY29uZmlnLnRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldFJlY29yZGluZ0NvbmZpZyhjb25maWcpO1xuICAgICAgY29udGV4dC5zZXR0aW5ncy5zZXRBdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ0NvbmZpZyhjb25maWcpO1xuICAgIH0sXG4gICAgW2NvbnRleHQuc2V0dGluZ3MsIHNldFJlY29yZGluZ0NvbmZpZ11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNYXhBZ2VDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZ0KSA9PiB7XG4gICAgICBzZXRGb3JtQ29uZmlnKChvbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vbGQsXG4gICAgICAgICAgbWF4QWdlOiBOdW1iZXIoZXZ0KSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3NldEZvcm1Db25maWddXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTWF4QWdlVW5pdENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldEZvcm1Db25maWcoKG9sZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLm9sZCxcbiAgICAgICAgICBtYXhBZ2VVbml0czogTnVtYmVyKGV2dCksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRGb3JtQ29uZmlnXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZU1heFNpemVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZ0KSA9PiB7XG4gICAgICBzZXRGb3JtQ29uZmlnKChvbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vbGQsXG4gICAgICAgICAgbWF4U2l6ZTogTnVtYmVyKGV2dCksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRGb3JtQ29uZmlnXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZU1heFNpemVVbml0Q2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2dCkgPT4ge1xuICAgICAgc2V0Rm9ybUNvbmZpZygob2xkKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ub2xkLFxuICAgICAgICAgIG1heFNpemVVbml0czogTnVtYmVyKGV2dCksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRGb3JtQ29uZmlnXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRlbXBsYXRlQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRlbXBsYXRlTmFtZT86IHN0cmluZywgdGVtcGxhdGVUeXBlPzogVGVtcGxhdGVUeXBlKSA9PiB7XG4gICAgICBzZXRGb3JtQ29uZmlnKChvbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vbGQsXG4gICAgICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgICAgIG5hbWU6IHRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHRlbXBsYXRlVHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0Rm9ybUNvbmZpZ11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgbWF4U2l6ZSwgbWF4U2l6ZVVuaXRzLCBtYXhBZ2UsIG1heEFnZVVuaXRzIH0gPSBmb3JtQ29uZmlnO1xuICAgIHNldEFBQ29uZmlnKHtcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSBhcyBQaWNrPEV2ZW50VGVtcGxhdGUsICduYW1lJyB8ICd0eXBlJz4sXG4gICAgICBtYXhTaXplOiBtYXhTaXplICogbWF4U2l6ZVVuaXRzLFxuICAgICAgbWF4QWdlOiBtYXhBZ2UgKiBtYXhBZ2VVbml0cyxcbiAgICB9KTtcbiAgICBzZXRFZGl0aW5nKGZhbHNlKTtcbiAgfSwgW3NldEFBQ29uZmlnLCBzZXRFZGl0aW5nLCBmb3JtQ29uZmlnXSk7XG5cbiAgY29uc3QgYXV0aFJldHJ5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzQXV0aE1vZGFsT3Blbih0cnVlKTtcbiAgfSwgW3NldElzQXV0aE1vZGFsT3Blbl0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkU3BlY2lmaWVyID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlIH0gPSBmb3JtQ29uZmlnLnRlbXBsYXRlO1xuICAgIGlmIChuYW1lICYmIHR5cGUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSwke3R5cGV9YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9LCBbZm9ybUNvbmZpZy50ZW1wbGF0ZV0pO1xuXG4gIGNvbnN0IHRhcmdldFNlbGVjdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBlZGl0aW5nICYmIDxUYXJnZXRTZWxlY3Qgc2ltcGxlIG9uU2VsZWN0PXsodGFyZ2V0KSA9PiB0YXJnZXRTdWJqZWN0Lm5leHQodGFyZ2V0KX0gLz47XG4gIH0sIFtlZGl0aW5nLCB0YXJnZXRTdWJqZWN0XSk7XG5cbiAgY29uc3QgY29uZmlnRGF0YSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChlZGl0aW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8R3JpZCBoYXNHdXR0ZXIgbGc9ezR9IG1kPXsxMn0+XG4gICAgICAgICAgPEdyaWRJdGVtPlxuICAgICAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgICAgICBsYWJlbD17dChgVEVNUExBVEVgLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgICAgICBmaWVsZElkPVwicmVjb3JkaW5nLXRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxIZWxwZXJUZXh0IGNsYXNzTmFtZT17YCR7YXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdOYW1lfS1jb25maWctc2F2ZS10ZW1wbGF0ZS13YXJuaW5nLWhlbHBlcmB9PlxuICAgICAgICAgICAgICAgICAgICA8SGVscGVyVGV4dEl0ZW0+e3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRm9ybS5URU1QTEFURV9IRUxQRVJfVEVYVCcpfTwvSGVscGVyVGV4dEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIHtmb3JtQ29uZmlnLnRlbXBsYXRlLnR5cGUgPT0gJ1RBUkdFVCcgJiYgZXJyb3JNZXNzYWdlID09PSAnJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEhlbHBlclRleHRJdGVtIHZhcmlhbnQ9XCJ3YXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5wfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRm9ybS5URU1QTEFURV9JTlZBTElEX1dBUk5JTkcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9IZWxwZXJUZXh0PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgc2l6ZT1cIm1kXCIgLz5cbiAgICAgICAgICAgICAgKSA6IGVycm9yTWVzc2FnZSAhPSAnJyA/IChcbiAgICAgICAgICAgICAgICA8RXJyb3JWaWV3XG4gICAgICAgICAgICAgICAgICB0aXRsZT17dCgnRXJyb3JWaWV3LkVWRU5UX1RFTVBMQVRFUycpfVxuICAgICAgICAgICAgICAgICAgbWVzc2FnZT17ZXJyb3JNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgcmV0cnk9e2lzQXV0aEZhaWwoZXJyb3JNZXNzYWdlKSA/IGF1dGhSZXRyeSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxTZWxlY3RUZW1wbGF0ZVNlbGVjdG9yRm9ybVxuICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzPXt0ZW1wbGF0ZXN9XG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlVGVtcGxhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWRTcGVjaWZpZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvR3JpZEl0ZW0+XG4gICAgICAgICAgPEdyaWRJdGVtPlxuICAgICAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgICAgICBsYWJlbD17dCgnTUFYSU1VTV9TSVpFJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICAgIGZpZWxkSWQ9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgaGVscGVyVGV4dD17dCgnTUFYSU1VTV9TSVpFX0hFTFBFUl9URVhUJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTcGxpdCBoYXNHdXR0ZXI9e3RydWV9PlxuICAgICAgICAgICAgICAgIDxTcGxpdEl0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtQ29uZmlnLm1heFNpemV9XG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0FyaWFMYWJlbHMuTUFYSU1VTV9TSVpFJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVNYXhTaXplQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtQ29uZmlnLm1heFNpemVVbml0c31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU1heFNpemVVbml0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdBcmlhTGFiZWxzLk1BWElNVU1fU0laRV9VTklUU19JTlBVVCcsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbiBrZXk9XCIxXCIgdmFsdWU9XCIxXCIgbGFiZWw9XCJCXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMlwiIHZhbHVlPXsxMDI0fSBsYWJlbD1cIktpQlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjNcIiB2YWx1ZT17MTAyNCAqIDEwMjR9IGxhYmVsPVwiTWlCXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybVNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgICAgICAgPC9TcGxpdD5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvR3JpZEl0ZW0+XG4gICAgICAgICAgPEdyaWRJdGVtPlxuICAgICAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgICAgICBsYWJlbD17dCgnTUFYSU1VTV9BR0UnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgZmllbGRJZD1cIm1heEFnZVwiXG4gICAgICAgICAgICAgIGhlbHBlclRleHQ9e3QoJ01BWElNVU1fQUdFX0hFTFBFUl9URVhUJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTcGxpdCBoYXNHdXR0ZXI9e3RydWV9PlxuICAgICAgICAgICAgICAgIDxTcGxpdEl0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtQ29uZmlnLm1heEFnZX1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJtYXhBZ2VEdXJhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0FyaWFMYWJlbHMuTUFYSU1VTV9BR0UnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU1heEFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgICAgIDxTcGxpdEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8Rm9ybVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybUNvbmZpZy5tYXhBZ2VVbml0c31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU1heEFnZVVuaXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0FyaWFMYWJlbHMuTUFYSU1VTV9BR0VfVU5JVFNfSU5QVVQnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMVwiIHZhbHVlPVwiMVwiIGxhYmVsPXt0KCdTRUNPTkQnLCB7IGNvdW50OiAwLCBuczogJ2NvbW1vbicgfSl9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjJcIiB2YWx1ZT17NjB9IGxhYmVsPXt0KCdNSU5VVEUnLCB7IGNvdW50OiAwLCBuczogJ2NvbW1vbicgfSl9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjNcIiB2YWx1ZT17NjAgKiA2MH0gbGFiZWw9e3QoJ0hPVVInLCB7IGNvdW50OiAwLCBuczogJ2NvbW1vbicgfSl9IC8+XG4gICAgICAgICAgICAgICAgICA8L0Zvcm1TZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgICAgIDwvU3BsaXQ+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgICA8L0dyaWRJdGVtPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPERlc2NyaXB0aW9uTGlzdCBpc0NvbXBhY3QgaXNBdXRvRml0PlxuICAgICAgICA8RGVzY3JpcHRpb25MaXN0R3JvdXA+XG4gICAgICAgICAgPERlc2NyaXB0aW9uTGlzdFRlcm0+e3QoJ1RFTVBMQVRFJywgeyBuczogJ2NvbW1vbicgfSl9PC9EZXNjcmlwdGlvbkxpc3RUZXJtPlxuICAgICAgICAgIDxEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIHt0KCdBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm0uRk9STUFUVEVEX1RFTVBMQVRFJywgeyB0ZW1wbGF0ZTogcmVjb3JkaW5nQ29uZmlnLnRlbXBsYXRlIH0pfVxuICAgICAgICAgIDwvRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24+XG4gICAgICAgIDwvRGVzY3JpcHRpb25MaXN0R3JvdXA+XG4gICAgICAgIDxEZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0VGVybT57dCgnQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtLk1BWElNVU1fU0laRScsIHsgdW5pdDogJ0InIH0pfTwvRGVzY3JpcHRpb25MaXN0VGVybT5cbiAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24+e3JlY29yZGluZ0NvbmZpZy5tYXhTaXplfTwvRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24+XG4gICAgICAgIDwvRGVzY3JpcHRpb25MaXN0R3JvdXA+XG4gICAgICAgIDxEZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0VGVybT57dCgnQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtLk1BWElNVU1fQUdFJywgeyB1bml0OiAncycgfSl9PC9EZXNjcmlwdGlvbkxpc3RUZXJtPlxuICAgICAgICAgIDxEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj57cmVjb3JkaW5nQ29uZmlnLm1heEFnZX08L0Rlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uPlxuICAgICAgICA8L0Rlc2NyaXB0aW9uTGlzdEdyb3VwPlxuICAgICAgPC9EZXNjcmlwdGlvbkxpc3Q+XG4gICAgKTtcbiAgfSwgW1xuICAgIHQsXG4gICAgaXNMb2FkaW5nLFxuICAgIGVkaXRpbmcsXG4gICAgcmVjb3JkaW5nQ29uZmlnLFxuICAgIGZvcm1Db25maWcsXG4gICAgdGVtcGxhdGVzLFxuICAgIHNlbGVjdGVkU3BlY2lmaWVyLFxuICAgIGhhbmRsZVRlbXBsYXRlQ2hhbmdlLFxuICAgIGhhbmRsZU1heFNpemVDaGFuZ2UsXG4gICAgaGFuZGxlTWF4U2l6ZVVuaXRDaGFuZ2UsXG4gICAgaGFuZGxlTWF4QWdlQ2hhbmdlLFxuICAgIGhhbmRsZU1heEFnZVVuaXRDaGFuZ2UsXG4gICAgZXJyb3JNZXNzYWdlLFxuICAgIGF1dGhSZXRyeSxcbiAgXSk7XG5cbiAgY29uc3QgdG9nZ2xlRWRpdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRFZGl0aW5nKChlZGl0KSA9PiAhZWRpdCk7XG4gICAgc2V0Rm9ybUNvbmZpZyh7XG4gICAgICB0ZW1wbGF0ZTogcmVjb3JkaW5nQ29uZmlnLnRlbXBsYXRlLFxuICAgICAgbWF4U2l6ZTogcmVjb3JkaW5nQ29uZmlnLm1heFNpemUsXG4gICAgICBtYXhBZ2U6IHJlY29yZGluZ0NvbmZpZy5tYXhBZ2UsXG4gICAgICBtYXhTaXplVW5pdHM6IDEsXG4gICAgICBtYXhBZ2VVbml0czogMSxcbiAgICB9KTtcbiAgfSwgW3NldEVkaXRpbmcsIHNldEZvcm1Db25maWcsIHJlY29yZGluZ0NvbmZpZ10pO1xuXG4gIGNvbnN0IGF1dGhNb2RhbCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8QXV0aE1vZGFsXG4gICAgICAgIHZpc2libGU9e2lzQXV0aE1vZGFsT3Blbn1cbiAgICAgICAgb25EaXNtaXNzPXsoKSA9PiBzZXRJc0F1dGhNb2RhbE9wZW4oZmFsc2UpfVxuICAgICAgICBvblNhdmU9eygpID0+IHtcbiAgICAgICAgICBzZXRJc0F1dGhNb2RhbE9wZW4oZmFsc2UpO1xuICAgICAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgICAgIHRhcmdldFN1YmplY3QucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgICByZWZyZXNoVGVtcGxhdGVzKHRhcmdldCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH19XG4gICAgICAgIHRhcmdldE9icz17dGFyZ2V0U3ViamVjdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgaXNBdXRoTW9kYWxPcGVuLCBzZXRJc0F1dGhNb2RhbE9wZW4sIHJlZnJlc2hUZW1wbGF0ZXMsIHRhcmdldFN1YmplY3RdKTtcblxuICBjb25zdCBmb3JtQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPENhcmQgaXNGbGF0IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgICAgICA8Q2FyZFRpdGxlPlxuICAgICAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDNcIiBzaXplPVwibWRcIj5cbiAgICAgICAgICAgICAgICB7dCgnQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtLkNVUlJFTlRfQ09ORklHJyl9XG4gICAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgICAgIDxDYXJkQWN0aW9ucz5cbiAgICAgICAgICAgICAge2VkaXRpbmcgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydwcmltYXJ5J31cbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9eyFmb3JtQ29uZmlnLnRlbXBsYXRlLm5hbWUgfHwgIWZvcm1Db25maWcudGVtcGxhdGUudHlwZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dCgnQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtLlNBVkVfQ0hBTkdFUycpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVFZGl0fVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2VkaXRpbmcgPyB0KCdDQU5DRUwnLCB7IG5zOiAnY29tbW9uJyB9KSA6IHQoJ0VESVQnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtlZGl0aW5nID8gPENsb3NlSWNvbiAvPiA6IDxQZW5jaWxBbHRJY29uIC8+fVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvQ2FyZEFjdGlvbnM+XG4gICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgICAgIDxTdGFjayBoYXNHdXR0ZXI+XG4gICAgICAgICAgICAgIDxTdGFja0l0ZW0+e3RhcmdldFNlbGVjdH08L1N0YWNrSXRlbT5cbiAgICAgICAgICAgICAgPFN0YWNrSXRlbT57Y29uZmlnRGF0YX08L1N0YWNrSXRlbT5cbiAgICAgICAgICAgIDwvU3RhY2s+XG4gICAgICAgICAgPC9DYXJkQm9keT5cbiAgICAgICAgPC9DYXJkPlxuICAgICAgICB7YXV0aE1vZGFsfVxuICAgICAgPC8+XG4gICAgKSxcbiAgICBbdCwgaGFuZGxlU3VibWl0LCB0b2dnbGVFZGl0LCBmb3JtQ29uZmlnLnRlbXBsYXRlLCB0YXJnZXRTZWxlY3QsIGNvbmZpZ0RhdGEsIGVkaXRpbmcsIGF1dGhNb2RhbF1cbiAgKTtcblxuICBjb25zdCBmb3JtU2VjdGlvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZVRpdGxlID8gKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gdGl0bGU9e3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRm9ybS5GT1JNX1RJVExFJyl9Pntmb3JtQ29udGVudH08L0Zvcm1TZWN0aW9uPlxuICAgICAgKSA6IChcbiAgICAgICAgZm9ybUNvbnRlbnRcbiAgICAgICksXG4gICAgW3VzZVRpdGxlLCB0LCBmb3JtQ29udGVudF1cbiAgKTtcblxuICByZXR1cm4gaW5saW5lRm9ybSA/IGZvcm1TZWN0aW9uIDogPEZvcm0+e2Zvcm1TZWN0aW9ufTwvRm9ybT47XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBMb2FkaW5nVmlldyB9IGZyb20gJ0BhcHAvTG9hZGluZ1ZpZXcvTG9hZGluZ1ZpZXcnO1xuaW1wb3J0IHsgUmVjb3JkaW5nQXR0cmlidXRlcyB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFJFQ09SRElOR19GQUlMVVJFX01FU1NBR0UsIFRFTVBMQVRFX1VOU1VQUE9SVEVEX01FU1NBR0UgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IGF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnVG9SZWNvcmRpbmdBdHRyaWJ1dGVzIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgRHJhd2VyLFxuICBEcmF3ZXJBY3Rpb25zLFxuICBEcmF3ZXJDbG9zZUJ1dHRvbixcbiAgRHJhd2VyQ29udGVudCxcbiAgRHJhd2VyQ29udGVudEJvZHksXG4gIERyYXdlckhlYWQsXG4gIERyYXdlclBhbmVsQm9keSxcbiAgRHJhd2VyUGFuZWxDb250ZW50LFxuICBJbnB1dEdyb3VwLFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IENvZ0ljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtIH0gZnJvbSAnLi9BdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm0nO1xuXG5pbnRlcmZhY2UgQXV0b21hdGVkQW5hbHlzaXNDb25maWdEcmF3ZXJQcm9wcyB7XG4gIGRyYXdlckNvbnRlbnQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaXNDb250ZW50QWJvdmU6IGJvb2xlYW47XG4gIG9uQ3JlYXRlOiAoKSA9PiB2b2lkO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQXV0b21hdGVkQW5hbHlzaXNDb25maWdEcmF3ZXI6IFJlYWN0LkZDPEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRHJhd2VyUHJvcHM+ID0gKHtcbiAgb25DcmVhdGUsXG4gIG9uRXJyb3IsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldElzRXhwYW5kZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBkcmF3ZXJSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZVJlY29yZGluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChyZWNvcmRpbmdBdHRyaWJ1dGVzOiBSZWNvcmRpbmdBdHRyaWJ1dGVzKSA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIGNvbnRleHQuYXBpLmNyZWF0ZVJlY29yZGluZyhyZWNvcmRpbmdBdHRyaWJ1dGVzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XG4gICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5vaykge1xuICAgICAgICAgICAgICBvbkNyZWF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwPy5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICAgICAgICBvbkVycm9yKG5ldyBFcnJvcihURU1QTEFURV9VTlNVUFBPUlRFRF9NRVNTQUdFKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvbkVycm9yKG5ldyBFcnJvcihSRUNPUkRJTkdfRkFJTFVSRV9NRVNTQUdFKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCBzZXRJc0xvYWRpbmcsIG9uQ3JlYXRlLCBvbkVycm9yXVxuICApO1xuXG4gIGNvbnN0IG9uRGVmYXVsdFJlY29yZGluZ1N0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQuc2V0dGluZ3MuYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcoKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXV0b21hdGVkQW5hbHlzaXNDb25maWdUb1JlY29yZGluZ0F0dHJpYnV0ZXMoY29uZmlnKTtcbiAgICBoYW5kbGVDcmVhdGVSZWNvcmRpbmcoYXR0cmlidXRlcyk7XG4gIH0sIFtjb250ZXh0LnNldHRpbmdzLCBoYW5kbGVDcmVhdGVSZWNvcmRpbmddKTtcblxuICBjb25zdCBvbkV4cGFuZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkcmF3ZXJSZWYuY3VycmVudCAmJiBkcmF3ZXJSZWYuY3VycmVudC5mb2N1cygpO1xuICB9LCBbZHJhd2VyUmVmXSk7XG5cbiAgY29uc3Qgb25Db2dTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNFeHBhbmRlZCgob2xkKSA9PiAhb2xkKTtcbiAgfSwgW3NldElzRXhwYW5kZWRdKTtcblxuICBjb25zdCBvbkRyYXdlckNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzRXhwYW5kZWQoZmFsc2UpO1xuICB9LCBbc2V0SXNFeHBhbmRlZF0pO1xuXG4gIGNvbnN0IHBhbmVsQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJhd2VyUGFuZWxDb250ZW50IGlzUmVzaXphYmxlIHN0eWxlPXt7IHpJbmRleDogMTk5IH19PlxuICAgICAgICA8RHJhd2VySGVhZD5cbiAgICAgICAgICA8c3BhbiB0YWJJbmRleD17aXNFeHBhbmRlZCA/IDAgOiAtMX0gcmVmPXtkcmF3ZXJSZWZ9Pjwvc3Bhbj5cbiAgICAgICAgICA8RHJhd2VyQWN0aW9ucz5cbiAgICAgICAgICAgIDxEcmF3ZXJDbG9zZUJ1dHRvbiBvbkNsaWNrPXtvbkRyYXdlckNsb3NlfSAvPlxuICAgICAgICAgIDwvRHJhd2VyQWN0aW9ucz5cbiAgICAgICAgPC9EcmF3ZXJIZWFkPlxuICAgICAgICA8RHJhd2VyUGFuZWxCb2R5PlxuICAgICAgICAgIDxBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm0gdXNlVGl0bGUgLz5cbiAgICAgICAgPC9EcmF3ZXJQYW5lbEJvZHk+XG4gICAgICA8L0RyYXdlclBhbmVsQ29udGVudD5cbiAgICApO1xuICB9LCBbaXNFeHBhbmRlZCwgb25EcmF3ZXJDbG9zZV0pO1xuXG4gIGNvbnN0IGlucHV0R3JvdXAgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPElucHV0R3JvdXA+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luOiAnYXV0bycgfX0+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNDb25maWdEcmF3ZXIuSU5QVVRfR1JPVVAuT1BFTl9TRVRUSU5HUy5MQUJFTCcpfVxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRyb2xcIlxuICAgICAgICAgICAgb25DbGljaz17b25Db2dTZWxlY3R9XG4gICAgICAgICAgICBpY29uPXs8Q29nSWNvbiAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGlkPXsnYXV0b21hdGVkLWFuYWx5c2lzLWNvbmZpZy1kcmF3ZXItY3JlYXRlLXJlY29yZGluZy1idXR0b24nfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNDb25maWdEcmF3ZXIuSU5QVVRfR1JPVVAuQ1JFQVRFX1JFQ09SRElORy5MQUJFTCcpfVxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRyb2xcIlxuICAgICAgICAgICAgb25DbGljaz17b25EZWZhdWx0UmVjb3JkaW5nU3RhcnR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcwLjJlbScgfX0+XG4gICAgICAgICAgICAgIHt0KCdBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0RyYXdlci5JTlBVVF9HUk9VUC5DUkVBVEVfUkVDT1JESU5HLkxBQkVMJyl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9JbnB1dEdyb3VwPlxuICAgICk7XG4gIH0sIFt0LCBvbkNvZ1NlbGVjdCwgb25EZWZhdWx0UmVjb3JkaW5nU3RhcnRdKTtcblxuICBjb25zdCBkcmF3ZXJDb250ZW50Qm9keSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJhd2VyQ29udGVudEJvZHk+XG4gICAgICAgIDxTdGFjayBoYXNHdXR0ZXI+XG4gICAgICAgICAgPFN0YWNrSXRlbT57cHJvcHMuaXNDb250ZW50QWJvdmUgPyBwcm9wcy5kcmF3ZXJDb250ZW50IDogaW5wdXRHcm91cH08L1N0YWNrSXRlbT5cbiAgICAgICAgICA8U3RhY2tJdGVtPntwcm9wcy5pc0NvbnRlbnRBYm92ZSA/IGlucHV0R3JvdXAgOiBwcm9wcy5kcmF3ZXJDb250ZW50fTwvU3RhY2tJdGVtPlxuICAgICAgICA8L1N0YWNrPlxuICAgICAgPC9EcmF3ZXJDb250ZW50Qm9keT5cbiAgICApO1xuICB9LCBbcHJvcHMuZHJhd2VyQ29udGVudCwgcHJvcHMuaXNDb250ZW50QWJvdmUsIGlucHV0R3JvdXBdKTtcblxuICBjb25zdCB2aWV3ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIDxMb2FkaW5nVmlldyAvPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmF3ZXIgaXNFeHBhbmRlZD17aXNFeHBhbmRlZH0gcG9zaXRpb249XCJyaWdodFwiIG9uRXhwYW5kPXtvbkV4cGFuZH0gaXNJbmxpbmU+XG4gICAgICAgIDxEcmF3ZXJDb250ZW50IHBhbmVsQ29udGVudD17cGFuZWxDb250ZW50fT57ZHJhd2VyQ29udGVudEJvZHl9PC9EcmF3ZXJDb250ZW50PlxuICAgICAgPC9EcmF3ZXI+XG4gICAgKTtcbiAgfSwgW2lzRXhwYW5kZWQsIG9uRXhwYW5kLCBwYW5lbENvbnRlbnQsIGRyYXdlckNvbnRlbnRCb2R5LCBpc0xvYWRpbmddKTtcblxuICByZXR1cm4gdmlldztcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ2F0ZWdvcml6ZWRSdWxlRXZhbHVhdGlvbnMgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBTZWxlY3QsIFNlbGVjdE9wdGlvbiwgU2VsZWN0VmFyaWFudCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc05hbWVGaWx0ZXJQcm9wcyB7XG4gIGV2YWx1YXRpb25zOiBDYXRlZ29yaXplZFJ1bGVFdmFsdWF0aW9uc1tdO1xuICBmaWx0ZXJlZE5hbWVzOiBzdHJpbmdbXTtcbiAgb25TdWJtaXQ6IChpbnB1dE5hbWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzTmFtZUZpbHRlcjogUmVhY3QuRkM8QXV0b21hdGVkQW5hbHlzaXNOYW1lRmlsdGVyUHJvcHM+ID0gKHsgb25TdWJtaXQsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldElzRXhwYW5kZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHNlbGVjdGlvbiwgaXNQbGFjZWhvbGRlcikgPT4ge1xuICAgICAgaWYgKCFpc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICBvblN1Ym1pdChzZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uU3VibWl0LCBzZXRJc0V4cGFuZGVkXVxuICApO1xuXG4gIGNvbnN0IG5hbWVPcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZmxhdEV2YWxNYXA6IHN0cmluZ1tdID0gW10gYXMgc3RyaW5nW107XG4gICAgZm9yIChjb25zdCB0b3BpYyBvZiBwcm9wcy5ldmFsdWF0aW9ucy5tYXAoKHIpID0+IHJbMV0pKSB7XG4gICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgdG9waWMpIHtcbiAgICAgICAgZmxhdEV2YWxNYXAucHVzaChydWxlLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhdEV2YWxNYXBcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFwcm9wcy5maWx0ZXJlZE5hbWVzLmluY2x1ZGVzKG4pKVxuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gPFNlbGVjdE9wdGlvbiBrZXk9e2luZGV4fSB2YWx1ZT17b3B0aW9ufSAvPik7XG4gIH0sIFtwcm9wcy5ldmFsdWF0aW9ucywgcHJvcHMuZmlsdGVyZWROYW1lc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFyaWFudD17U2VsZWN0VmFyaWFudC50eXBlYWhlYWR9XG4gICAgICBvblRvZ2dsZT17c2V0SXNFeHBhbmRlZH1cbiAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgIGlzT3Blbj17aXNFeHBhbmRlZH1cbiAgICAgIHR5cGVBaGVhZEFyaWFMYWJlbD1cIkZpbHRlciBieSBuYW1lLi4uXCJcbiAgICAgIHBsYWNlaG9sZGVyVGV4dD1cIkZpbHRlciBieSBuYW1lLi4uXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJGaWx0ZXIgYnkgbmFtZVwiXG4gICAgICBtYXhIZWlnaHQ9XCIxNmVtXCJcbiAgICAgIG1lbnVBcHBlbmRUbz17KCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hib2FyZC1ncmlkJykgfHwgcG9ydGFsUm9vdH1cbiAgICA+XG4gICAgICB7bmFtZU9wdGlvbnN9XG4gICAgPC9TZWxlY3Q+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IENhdGVnb3JpemVkUnVsZUV2YWx1YXRpb25zIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvUmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgU2VsZWN0LCBTZWxlY3RPcHRpb24sIFNlbGVjdFZhcmlhbnQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b21hdGVkQW5hbHlzaXNUb3BpY0ZpbHRlclByb3BzIHtcbiAgZXZhbHVhdGlvbnM6IENhdGVnb3JpemVkUnVsZUV2YWx1YXRpb25zW107XG4gIGZpbHRlcmVkVG9waWNzOiBzdHJpbmdbXTtcbiAgb25TdWJtaXQ6IChpbnB1dE5hbWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzVG9waWNGaWx0ZXI6IFJlYWN0LkZDPEF1dG9tYXRlZEFuYWx5c2lzVG9waWNGaWx0ZXJQcm9wcz4gPSAoeyBvblN1Ym1pdCwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0SXNFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25TZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgc2VsZWN0aW9uLCBpc1BsYWNlaG9sZGVyKSA9PiB7XG4gICAgICBpZiAoIWlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIG9uU3VibWl0KHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25TdWJtaXQsIHNldElzRXhwYW5kZWRdXG4gICk7XG5cbiAgY29uc3QgdG9waWNPcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHByb3BzLmV2YWx1YXRpb25zXG4gICAgICAubWFwKChyKSA9PiByWzBdKVxuICAgICAgLmZpbHRlcigobikgPT4gIXByb3BzLmZpbHRlcmVkVG9waWNzLmluY2x1ZGVzKG4pKVxuICAgICAgLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gPFNlbGVjdE9wdGlvbiBrZXk9e2luZGV4fSB2YWx1ZT17b3B0aW9ufSAvPik7XG4gIH0sIFtwcm9wcy5ldmFsdWF0aW9ucywgcHJvcHMuZmlsdGVyZWRUb3BpY3NdKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIHZhcmlhbnQ9e1NlbGVjdFZhcmlhbnQudHlwZWFoZWFkfVxuICAgICAgb25Ub2dnbGU9e3NldElzRXhwYW5kZWR9XG4gICAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gICAgICBpc09wZW49e2lzRXhwYW5kZWR9XG4gICAgICB0eXBlQWhlYWRBcmlhTGFiZWw9XCJGaWx0ZXIgYnkgdG9waWMuLi5cIlxuICAgICAgcGxhY2Vob2xkZXJUZXh0PVwiRmlsdGVyIGJ5IHRvcGljLi4uXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJGaWx0ZXIgYnkgdG9waWNcIlxuICAgICAgbWF4SGVpZ2h0PVwiMTZlbVwiXG4gICAgICBtZW51QXBwZW5kVG89eygpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXNoYm9hcmQtZ3JpZCcpIHx8IHBvcnRhbFJvb3R9XG4gICAgPlxuICAgICAge3RvcGljT3B0aW9uc31cbiAgICA8L1NlbGVjdD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IGFsbG93ZWRBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU2xpY2UnO1xuaW1wb3J0IHsgVXBkYXRlRmlsdGVyT3B0aW9ucyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvQ29tbW9uJztcbmltcG9ydCB7IGF1dG9tYXRlZEFuYWx5c2lzVXBkYXRlQ2F0ZWdvcnlJbnRlbnQsIFJvb3RTdGF0ZSwgU3RhdGVEaXNwYXRjaCB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L1JlZHV4U3RvcmUnO1xuaW1wb3J0IHsgUnVsZUV2YWx1YXRpb24gfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25JdGVtLFxuICBEcm9wZG93blBvc2l0aW9uLFxuICBEcm9wZG93blRvZ2dsZSxcbiAgVG9vbGJhckNoaXBHcm91cCxcbiAgVG9vbGJhckZpbHRlcixcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbiAgVG9vbGJhclRvZ2dsZUdyb3VwLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEZpbHRlckljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IEF1dG9tYXRlZEFuYWx5c2lzTmFtZUZpbHRlciB9IGZyb20gJy4vRmlsdGVycy9BdXRvbWF0ZWRBbmFseXNpc05hbWVGaWx0ZXInO1xuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNUb3BpY0ZpbHRlciB9IGZyb20gJy4vRmlsdGVycy9BdXRvbWF0ZWRBbmFseXNpc1RvcGljRmlsdGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzIHtcbiAgTmFtZTogc3RyaW5nW107XG4gIFRvcGljOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnNDYXRlZ29yaWVzIHtcbiAgU2NvcmU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNQcm9wcyB7XG4gIHRhcmdldDogc3RyaW5nO1xuICBldmFsdWF0aW9uczogW3N0cmluZywgUnVsZUV2YWx1YXRpb25bXV1bXTtcbiAgZmlsdGVyczogQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzQ2F0ZWdvcmllcztcbiAgdXBkYXRlRmlsdGVyczogKHRhcmdldDogc3RyaW5nLCB1cGRhdGVGaWx0ZXJPcHRpb25zOiBVcGRhdGVGaWx0ZXJPcHRpb25zKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzOiBSZWFjdC5GQzxBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNQcm9wcz4gPSAoeyB1cGRhdGVGaWx0ZXJzLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2g8U3RhdGVEaXNwYXRjaD4oKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzID0gc3RhdGUuYXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzLnN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyKFxuICAgICAgKHRhcmdldEZpbHRlcikgPT4gdGFyZ2V0RmlsdGVyLnRhcmdldCA9PT0gcHJvcHMudGFyZ2V0XG4gICAgKTtcbiAgICBpZiAoIXRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0KCdGSUxURVJfTkFNRScsIHsgbnM6ICdjb21tb24nIH0pO1xuICAgIH0gLy8gVGFyZ2V0IGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgcmV0dXJuIHRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyc1swXS5zZWxlY3RlZENhdGVnb3J5O1xuICB9KTtcblxuICBjb25zdCBbaXNDYXRlZ29yeURyb3Bkb3duT3Blbiwgc2V0SXNDYXRlZ29yeURyb3Bkb3duT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25DYXRlZ29yeVRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0NhdGVnb3J5RHJvcGRvd25PcGVuKChvcGVuZWQpID0+ICFvcGVuZWQpO1xuICB9LCBbc2V0SXNDYXRlZ29yeURyb3Bkb3duT3Blbl0pO1xuXG4gIGNvbnN0IG9uQ2F0ZWdvcnlTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY2F0ZWdvcnkpID0+IHtcbiAgICAgIHNldElzQ2F0ZWdvcnlEcm9wZG93bk9wZW4oZmFsc2UpO1xuICAgICAgZGlzcGF0Y2goYXV0b21hdGVkQW5hbHlzaXNVcGRhdGVDYXRlZ29yeUludGVudChwcm9wcy50YXJnZXQsIGNhdGVnb3J5KSk7XG4gICAgfSxcbiAgICBbZGlzcGF0Y2gsIHNldElzQ2F0ZWdvcnlEcm9wZG93bk9wZW4sIHByb3BzLnRhcmdldF1cbiAgKTtcblxuICBjb25zdCBvbkRlbGV0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjYXRlZ29yeTogc3RyaW5nIHwgVG9vbGJhckNoaXBHcm91cCwgdmFsdWUpID0+XG4gICAgICB1cGRhdGVGaWx0ZXJzKHByb3BzLnRhcmdldCwgeyBmaWx0ZXJLZXk6IGNhdGVnb3J5IGFzIHN0cmluZywgZmlsdGVyVmFsdWU6IHZhbHVlLCBkZWxldGVkOiB0cnVlIH0pLFxuICAgIFt1cGRhdGVGaWx0ZXJzLCBwcm9wcy50YXJnZXRdXG4gICk7XG5cbiAgY29uc3Qgb25EZWxldGVHcm91cCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjYXRlZ29yeTogc3RyaW5nIHwgVG9vbGJhckNoaXBHcm91cCkgPT5cbiAgICAgIHVwZGF0ZUZpbHRlcnMocHJvcHMudGFyZ2V0LCB7IGZpbHRlcktleTogY2F0ZWdvcnkgYXMgc3RyaW5nLCBkZWxldGVkOiB0cnVlLCBkZWxldGVPcHRpb25zOiB7IGFsbDogdHJ1ZSB9IH0pLFxuICAgIFt1cGRhdGVGaWx0ZXJzLCBwcm9wcy50YXJnZXRdXG4gICk7XG5cbiAgY29uc3Qgb25OYW1lSW5wdXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaW5wdXROYW1lOiBzdHJpbmcpID0+IHVwZGF0ZUZpbHRlcnMocHJvcHMudGFyZ2V0LCB7IGZpbHRlcktleTogY3VycmVudENhdGVnb3J5LCBmaWx0ZXJWYWx1ZTogaW5wdXROYW1lIH0pLFxuICAgIFt1cGRhdGVGaWx0ZXJzLCBjdXJyZW50Q2F0ZWdvcnksIHByb3BzLnRhcmdldF1cbiAgKTtcblxuICBjb25zdCBvblRvcGljSW5wdXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaW5wdXRUb3BpYzogc3RyaW5nKSA9PiB7XG4gICAgICB1cGRhdGVGaWx0ZXJzKHByb3BzLnRhcmdldCwgeyBmaWx0ZXJLZXk6IGN1cnJlbnRDYXRlZ29yeSwgZmlsdGVyVmFsdWU6IGlucHV0VG9waWMgfSk7XG4gICAgfSxcbiAgICBbdXBkYXRlRmlsdGVycywgY3VycmVudENhdGVnb3J5LCBwcm9wcy50YXJnZXRdXG4gICk7XG5cbiAgY29uc3QgY2F0ZWdvcnlEcm9wZG93biA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJvcGRvd25cbiAgICAgICAgYXJpYS1sYWJlbD17J0NhdGVnb3J5IERyb3Bkb3duJ31cbiAgICAgICAgcG9zaXRpb249e0Ryb3Bkb3duUG9zaXRpb24ubGVmdH1cbiAgICAgICAgdG9nZ2xlPXtcbiAgICAgICAgICA8RHJvcGRvd25Ub2dnbGUgYXJpYS1sYWJlbD17Y3VycmVudENhdGVnb3J5fSBvblRvZ2dsZT17b25DYXRlZ29yeVRvZ2dsZX0+XG4gICAgICAgICAgICA8RmlsdGVySWNvbiAvPiB7Y3VycmVudENhdGVnb3J5fVxuICAgICAgICAgIDwvRHJvcGRvd25Ub2dnbGU+XG4gICAgICAgIH1cbiAgICAgICAgaXNPcGVuPXtpc0NhdGVnb3J5RHJvcGRvd25PcGVufVxuICAgICAgICBkcm9wZG93bkl0ZW1zPXthbGxvd2VkQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzLm1hcCgoY2F0KSA9PiAoXG4gICAgICAgICAgPERyb3Bkb3duSXRlbSBhcmlhLWxhYmVsPXtjYXR9IGtleT17Y2F0fSBvbkNsaWNrPXsoKSA9PiBvbkNhdGVnb3J5U2VsZWN0KGNhdCl9PlxuICAgICAgICAgICAge2NhdH1cbiAgICAgICAgICA8L0Ryb3Bkb3duSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICAvPlxuICAgICk7XG4gIH0sIFtpc0NhdGVnb3J5RHJvcGRvd25PcGVuLCBjdXJyZW50Q2F0ZWdvcnksIG9uQ2F0ZWdvcnlUb2dnbGUsIG9uQ2F0ZWdvcnlTZWxlY3RdKTtcblxuICBjb25zdCBmaWx0ZXJEcm9wZG93bkl0ZW1zID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICA8QXV0b21hdGVkQW5hbHlzaXNOYW1lRmlsdGVyXG4gICAgICAgIGtleT17J25hbWUnfVxuICAgICAgICBldmFsdWF0aW9ucz17cHJvcHMuZXZhbHVhdGlvbnN9XG4gICAgICAgIGZpbHRlcmVkTmFtZXM9e3Byb3BzLmZpbHRlcnMuTmFtZX1cbiAgICAgICAgb25TdWJtaXQ9e29uTmFtZUlucHV0fVxuICAgICAgLz4sXG4gICAgICA8QXV0b21hdGVkQW5hbHlzaXNUb3BpY0ZpbHRlclxuICAgICAgICBrZXk9eyd0b3BpYyd9XG4gICAgICAgIGV2YWx1YXRpb25zPXtwcm9wcy5ldmFsdWF0aW9uc31cbiAgICAgICAgZmlsdGVyZWRUb3BpY3M9e3Byb3BzLmZpbHRlcnMuVG9waWN9XG4gICAgICAgIG9uU3VibWl0PXtvblRvcGljSW5wdXR9XG4gICAgICA+PC9BdXRvbWF0ZWRBbmFseXNpc1RvcGljRmlsdGVyPixcbiAgICBdLFxuICAgIFtwcm9wcy5ldmFsdWF0aW9ucywgcHJvcHMuZmlsdGVycy5OYW1lLCBwcm9wcy5maWx0ZXJzLlRvcGljLCBvbk5hbWVJbnB1dCwgb25Ub3BpY0lucHV0XVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFRvb2xiYXJUb2dnbGVHcm91cCB0b2dnbGVJY29uPXs8RmlsdGVySWNvbiAvPn0gYnJlYWtwb2ludD1cInhsXCI+XG4gICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgIHtjYXRlZ29yeURyb3Bkb3dufVxuICAgICAgICAgIHtPYmplY3Qua2V5cyhwcm9wcy5maWx0ZXJzKVxuICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gZiAhPT0gJ1Njb3JlJylcbiAgICAgICAgICAgIC5tYXAoKGZpbHRlcktleSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8VG9vbGJhckZpbHRlclxuICAgICAgICAgICAgICAgIGtleT17ZmlsdGVyS2V5fVxuICAgICAgICAgICAgICAgIGNoaXBzPXtwcm9wcy5maWx0ZXJzW2ZpbHRlcktleV19XG4gICAgICAgICAgICAgICAgZGVsZXRlQ2hpcD17b25EZWxldGV9XG4gICAgICAgICAgICAgICAgZGVsZXRlQ2hpcEdyb3VwPXtvbkRlbGV0ZUdyb3VwfVxuICAgICAgICAgICAgICAgIGNhdGVnb3J5TmFtZT17ZmlsdGVyS2V5fVxuICAgICAgICAgICAgICAgIHNob3dUb29sYmFySXRlbT17ZmlsdGVyS2V5ID09PSBjdXJyZW50Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyRHJvcGRvd25JdGVtc1tpXX1cbiAgICAgICAgICAgICAgPC9Ub29sYmFyRmlsdGVyPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICA8L1Rvb2xiYXJUb2dnbGVHcm91cD5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJBdXRvbWF0ZWRBbmFseXNpcyA9IChcbiAgdG9waWNFdmFsVHVwbGU6IFtzdHJpbmcsIFJ1bGVFdmFsdWF0aW9uW11dW10sXG4gIGZpbHRlcnM6IEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyc0NhdGVnb3JpZXMsXG4gIGdsb2JhbEZpbHRlcnM6IEF1dG9tYXRlZEFuYWx5c2lzR2xvYmFsRmlsdGVyc0NhdGVnb3JpZXMsXG4gIHNob3dOQVNjb3JlczogYm9vbGVhblxuKSA9PiB7XG4gIGlmICghdG9waWNFdmFsVHVwbGUgfHwgIXRvcGljRXZhbFR1cGxlLmxlbmd0aCkge1xuICAgIHJldHVybiB0b3BpY0V2YWxUdXBsZTtcbiAgfVxuXG4gIGxldCBmaWx0ZXJlZCA9IHRvcGljRXZhbFR1cGxlO1xuXG4gIGlmIChmaWx0ZXJzLk5hbWUgIT0gbnVsbCAmJiAhIWZpbHRlcnMuTmFtZS5sZW5ndGgpIHtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLm1hcCgoW3RvcGljLCBldmFsdWF0aW9uc10pID0+IHtcbiAgICAgIHJldHVybiBbdG9waWMsIGV2YWx1YXRpb25zLmZpbHRlcigoZXZhbHVhdGlvbikgPT4gZmlsdGVycy5OYW1lLmluY2x1ZGVzKGV2YWx1YXRpb24ubmFtZSkpXSBhcyBbXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgUnVsZUV2YWx1YXRpb25bXVxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxuICBpZiAoZ2xvYmFsRmlsdGVycy5TY29yZSAhPSBudWxsKSB7XG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5tYXAoKFt0b3BpYywgZXZhbHVhdGlvbnNdKSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0b3BpYyxcbiAgICAgICAgZXZhbHVhdGlvbnMuZmlsdGVyKChldmFsdWF0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKHNob3dOQVNjb3Jlcykge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbEZpbHRlcnMuU2NvcmUgPD0gZXZhbHVhdGlvbi5zY29yZSB8fCBldmFsdWF0aW9uLnNjb3JlID09IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZ2xvYmFsRmlsdGVycy5TY29yZSA8PSBldmFsdWF0aW9uLnNjb3JlO1xuICAgICAgICB9KSxcbiAgICAgIF0gYXMgW3N0cmluZywgUnVsZUV2YWx1YXRpb25bXV07XG4gICAgfSk7XG4gIH1cbiAgaWYgKGZpbHRlcnMuVG9waWMgIT0gbnVsbCAmJiAhIWZpbHRlcnMuVG9waWMubGVuZ3RoKSB7XG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5tYXAoKFt0b3BpYywgZXZhbHVhdGlvbnNdKSA9PiB7XG4gICAgICByZXR1cm4gW3RvcGljLCBldmFsdWF0aW9ucy5maWx0ZXIoKF8pID0+IGZpbHRlcnMuVG9waWMuaW5jbHVkZXModG9waWMpKV0gYXMgW3N0cmluZywgUnVsZUV2YWx1YXRpb25bXV07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWQ7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUsIFJ1bGVFdmFsdWF0aW9uIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvUmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgTGFiZWwsIExhYmVsUHJvcHMsIFBvcG92ZXIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IENoZWNrQ2lyY2xlSWNvbiwgRXhjbGFtYXRpb25DaXJjbGVJY29uLCBJbmZvQ2lyY2xlSWNvbiwgV2FybmluZ1RyaWFuZ2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgcG9wb3ZlclN0eWxlcyBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMvY3NzL2NvbXBvbmVudHMvUG9wb3Zlci9wb3BvdmVyJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdHJhbnNmb3JtQUFEZXNjcmlwdGlvbiB9IGZyb20gJy4uL2Rhc2hib2FyZC11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNMYWJlbFByb3BzIHtcbiAgbGFiZWw6IFJ1bGVFdmFsdWF0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgY2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNLZXkgPSAnY2xpY2thYmxlLWF1dG9tYXRlZC1hbmFseXNpcy1sYWJlbCc7XG5cbmV4cG9ydCBjb25zdCBDbGlja2FibGVBdXRvbWF0ZWRBbmFseXNpc0xhYmVsOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxDbGlja2FibGVBdXRvbWF0ZWRBbmFseXNpc0xhYmVsUHJvcHM+ID0gKHtcbiAgbGFiZWwsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCBbaXNIb3ZlcmVkT3JGb2N1c2VkLCBzZXRJc0hvdmVyZWRPckZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNEZXNjcmlwdGlvblZpc2libGUsIHNldElzRGVzY3JpcHRpb25WaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVIb3ZlcmVkT3JGb2N1c2VkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0SXNIb3ZlcmVkT3JGb2N1c2VkKHRydWUpLCBbc2V0SXNIb3ZlcmVkT3JGb2N1c2VkXSk7XG4gIGNvbnN0IGhhbmRsZU5vbkhvdmVyZWRPckZvY3VzZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRJc0hvdmVyZWRPckZvY3VzZWQoZmFsc2UpLCBbc2V0SXNIb3ZlcmVkT3JGb2N1c2VkXSk7XG5cbiAgY29uc3QgYWxlcnRTdHlsZSA9IHtcbiAgICBkZWZhdWx0OiBwb3BvdmVyU3R5bGVzLm1vZGlmaWVycy5kZWZhdWx0LFxuICAgIGluZm86IHBvcG92ZXJTdHlsZXMubW9kaWZpZXJzLmluZm8sXG4gICAgc3VjY2VzczogcG9wb3ZlclN0eWxlcy5tb2RpZmllcnMuc3VjY2VzcyxcbiAgICB3YXJuaW5nOiBwb3BvdmVyU3R5bGVzLm1vZGlmaWVycy53YXJuaW5nLFxuICAgIGRhbmdlcjogcG9wb3ZlclN0eWxlcy5tb2RpZmllcnMuZGFuZ2VyLFxuICB9O1xuXG4gIGNvbnN0IGNvbG9yU2NoZW1lID0gUmVhY3QudXNlTWVtbygoKTogTGFiZWxQcm9wc1snY29sb3InXSA9PiB7XG4gICAgLy8gVE9ETzogdXNlIGxhYmVsIGNvbG9yIHNjaGVtZXMgYmFzZWQgb24gc2V0dGluZ3MgZm9yIGFjY2Vzc2liaWxpdHlcbiAgICAvLyBjb250ZXh0LnNldHRpbmdzLmV0Yy5cbiAgICByZXR1cm4gbGFiZWwuc2NvcmUgPT0gQXV0b21hdGVkQW5hbHlzaXNTY29yZS5OQV9TQ09SRVxuICAgICAgPyAnZ3JleSdcbiAgICAgIDogbGFiZWwuc2NvcmUgPCBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk9SQU5HRV9TQ09SRV9USFJFU0hPTERcbiAgICAgID8gJ2dyZWVuJ1xuICAgICAgOiBsYWJlbC5zY29yZSA8IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUuUkVEX1NDT1JFX1RIUkVTSE9MRFxuICAgICAgPyAnb3JhbmdlJ1xuICAgICAgOiAncmVkJztcbiAgfSwgW2xhYmVsLnNjb3JlXSk7XG5cbiAgY29uc3QgYWxlcnRQb3BvdmVyVmFyaWFudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBsYWJlbC5zY29yZSA9PSBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk5BX1NDT1JFXG4gICAgICA/ICdkZWZhdWx0J1xuICAgICAgOiBsYWJlbC5zY29yZSA8IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUuT1JBTkdFX1NDT1JFX1RIUkVTSE9MRFxuICAgICAgPyAnc3VjY2VzcydcbiAgICAgIDogbGFiZWwuc2NvcmUgPCBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLlJFRF9TQ09SRV9USFJFU0hPTERcbiAgICAgID8gJ3dhcm5pbmcnXG4gICAgICA6ICdkYW5nZXInO1xuICB9LCBbbGFiZWwuc2NvcmVdKTtcblxuICBjb25zdCBpY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGxhYmVsLnNjb3JlID09IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUuTkFfU0NPUkUgPyAoXG4gICAgICA8SW5mb0NpcmNsZUljb24gLz5cbiAgICApIDogbGFiZWwuc2NvcmUgPCBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk9SQU5HRV9TQ09SRV9USFJFU0hPTEQgPyAoXG4gICAgICA8Q2hlY2tDaXJjbGVJY29uIC8+XG4gICAgKSA6IGxhYmVsLnNjb3JlIDwgQXV0b21hdGVkQW5hbHlzaXNTY29yZS5SRURfU0NPUkVfVEhSRVNIT0xEID8gKFxuICAgICAgPFdhcm5pbmdUcmlhbmdsZUljb24gLz5cbiAgICApIDogKFxuICAgICAgPEV4Y2xhbWF0aW9uQ2lyY2xlSWNvbiAvPlxuICAgICk7XG4gIH0sIFtsYWJlbC5zY29yZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFBvcG92ZXJcbiAgICAgIGFyaWEtbGFiZWw9e3QoJ0NsaWNrYWJsZUF1dG9tYXRlZEFuYWx5c2lzTGFiZWwuQVJJQV9MQUJFTFMuUE9QT1ZFUicpfVxuICAgICAgaXNWaXNpYmxlPXtpc0Rlc2NyaXB0aW9uVmlzaWJsZX1cbiAgICAgIGhlYWRlckNvbnRlbnQ9ezxkaXYgY2xhc3NOYW1lPXtgJHtjbGlja2FibGVBdXRvbWF0ZWRBbmFseXNpc0tleX0tcG9wb3Zlci1oZWFkZXJgfT57bGFiZWwubmFtZX08L2Rpdj59XG4gICAgICBhbGVydFNldmVyaXR5VmFyaWFudD17YWxlcnRQb3BvdmVyVmFyaWFudH1cbiAgICAgIGFsZXJ0U2V2ZXJpdHlTY3JlZW5SZWFkZXJUZXh0PXthbGVydFBvcG92ZXJWYXJpYW50fVxuICAgICAgc2hvdWxkT3Blbj17KCkgPT4gc2V0SXNEZXNjcmlwdGlvblZpc2libGUodHJ1ZSl9XG4gICAgICBzaG91bGRDbG9zZT17KCkgPT4gc2V0SXNEZXNjcmlwdGlvblZpc2libGUoZmFsc2UpfVxuICAgICAga2V5PXtgJHtjbGlja2FibGVBdXRvbWF0ZWRBbmFseXNpc0tleX0tcG9wb3Zlci0ke2xhYmVsLm5hbWV9YH1cbiAgICAgIGJvZHlDb250ZW50PXtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7Y2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNLZXl9LXBvcG92ZXItYm9keWB9XG4gICAgICAgICAga2V5PXtgJHtjbGlja2FibGVBdXRvbWF0ZWRBbmFseXNpc0tleX0tcG9wb3Zlci1ib2R5LSR7bGFiZWwubmFtZX1gfVxuICAgICAgICA+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPXtjc3MoYWxlcnRTdHlsZVthbGVydFBvcG92ZXJWYXJpYW50XSwgYCR7Y2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNLZXl9LXBvcG92ZXItYm9keS1zY29yZWApfT5cbiAgICAgICAgICAgIHtsYWJlbC5zY29yZSA9PSBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk5BX1NDT1JFID8gJ04vQScgOiBsYWJlbC5zY29yZS50b0ZpeGVkKDEpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICB7dHJhbnNmb3JtQUFEZXNjcmlwdGlvbihsYWJlbC5kZXNjcmlwdGlvbil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgPlxuICAgICAgPExhYmVsXG4gICAgICAgIGFyaWEtbGFiZWw9e2xhYmVsLm5hbWV9XG4gICAgICAgIGljb249e2ljb259XG4gICAgICAgIGNvbG9yPXtjb2xvclNjaGVtZX1cbiAgICAgICAgY2xhc3NOYW1lPXtpc0hvdmVyZWRPckZvY3VzZWQgPyBgY2xpY2thYmxlLWxhYmVsLWhvdmVyZWRgIDogJyd9XG4gICAgICAgIG9uTW91c2VFbnRlcj17aGFuZGxlSG92ZXJlZE9yRm9jdXNlZH1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVOb25Ib3ZlcmVkT3JGb2N1c2VkfVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVIb3ZlcmVkT3JGb2N1c2VkfVxuICAgICAgICBrZXk9e2Ake2NsaWNrYWJsZUF1dG9tYXRlZEFuYWx5c2lzS2V5fS0ke2xhYmVsLm5hbWV9YH1cbiAgICAgICAgaXNDb21wYWN0XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7Y2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNLZXl9LW5hbWVgfT57YCR7bGFiZWwubmFtZX1gfTwvc3Bhbj5cbiAgICAgICAge1xuICAgICAgICAgIC8vIGRvbid0IHVzZSBpc1RydW5jYXRlZCBoZXJlLCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgcG9wb3ZlciBiZWNhdXNlIG9mIGhlbHBlclRleHRcbiAgICAgICAgfVxuICAgICAgPC9MYWJlbD5cbiAgICA8L1BvcG92ZXI+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGF1dG9tYXRlZEFuYWx5c2lzQWRkR2xvYmFsRmlsdGVySW50ZW50LCBSb290U3RhdGUsIFN0YXRlRGlzcGF0Y2ggfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIExldmVsLFxuICBMZXZlbEl0ZW0sXG4gIFNsaWRlcixcbiAgU2xpZGVyU3RlcE9iamVjdCxcbiAgVGV4dCxcbiAgVGV4dFZhcmlhbnRzLFxuICBUb29sdGlwLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9tYXRlZEFuYWx5c2lzU2NvcmVGaWx0ZXJQcm9wcyB7fVxuXG5leHBvcnQgY29uc3QgQXV0b21hdGVkQW5hbHlzaXNTY29yZUZpbHRlcjogUmVhY3QuRkM8QXV0b21hdGVkQW5hbHlzaXNTY29yZUZpbHRlclByb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2g8U3RhdGVEaXNwYXRjaD4oKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjdXJyZW50U2NvcmUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5hdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMuc3RhdGUuZ2xvYmFsRmlsdGVycy5maWx0ZXJzO1xuICAgIGlmICghZmlsdGVycykgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGZpbHRlcnMuU2NvcmU7XG4gIH0pO1xuXG4gIGNvbnN0IHN0ZXBzID0gW1xuICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnMCcgfSxcbiAgICB7IHZhbHVlOiAxMi41LCBsYWJlbDogdCgnT0snLCB7IG5zOiAnY29tbW9uJyB9KSB9LCAvLyBzb21lIGhhY2tzIHRoYXQgd29yayB3aXRoIGNzcyB0byBnZXQgYm9sZGVkIGFuZCBjb2xvdXJlZCBsYWJlbHMgYWJvdmUgc2xpZGVyXG4gICAge1xuICAgICAgdmFsdWU6IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUuT1JBTkdFX1NDT1JFX1RIUkVTSE9MRCxcbiAgICAgIGxhYmVsOiBTdHJpbmcoQXV0b21hdGVkQW5hbHlzaXNTY29yZS5PUkFOR0VfU0NPUkVfVEhSRVNIT0xEKSxcbiAgICB9LFxuICAgIHsgdmFsdWU6IDUwLCBsYWJlbDogdCgnV0FSTklORycsIHsgbnM6ICdjb21tb24nIH0pIH0sXG4gICAgeyB2YWx1ZTogQXV0b21hdGVkQW5hbHlzaXNTY29yZS5SRURfU0NPUkVfVEhSRVNIT0xELCBsYWJlbDogU3RyaW5nKEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUuUkVEX1NDT1JFX1RIUkVTSE9MRCkgfSxcbiAgICB7IHZhbHVlOiA4Ny41LCBsYWJlbDogdCgnQ1JJVElDQUwnLCB7IG5zOiAnY29tbW9uJyB9KSB9LFxuICAgIHsgdmFsdWU6IDEwMCwgbGFiZWw6ICcxMDAnIH0sXG4gIF0gYXMgU2xpZGVyU3RlcE9iamVjdFtdO1xuXG4gIGNvbnN0IG9uMTAwUmVzZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goYXV0b21hdGVkQW5hbHlzaXNBZGRHbG9iYWxGaWx0ZXJJbnRlbnQoJ1Njb3JlJywgMTAwKSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuXG4gIGNvbnN0IG9uMFJlc2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKGF1dG9tYXRlZEFuYWx5c2lzQWRkR2xvYmFsRmlsdGVySW50ZW50KCdTY29yZScsIDApKTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IG51bWJlciwgaW5wdXRWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgKiAxMCkgLyAxMDtcbiAgICAgIGxldCBuZXdWYWx1ZTtcbiAgICAgIGlmIChpbnB1dFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbnB1dFZhbHVlID4gMTAwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAxMDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZSA8IDApIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBNYXRoLnJvdW5kKGlucHV0VmFsdWUgKiAxMCkgLyAxMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGlzcGF0Y2goYXV0b21hdGVkQW5hbHlzaXNBZGRHbG9iYWxGaWx0ZXJJbnRlbnQoJ1Njb3JlJywgbmV3VmFsdWUpKTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaF1cbiAgKTtcblxuICBjb25zdCBjbGFzc05hbWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoY3VycmVudFNjb3JlID49IEF1dG9tYXRlZEFuYWx5c2lzU2NvcmUuUkVEX1NDT1JFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuICdhdXRvbWF0ZWQtYW5hbHlzaXMtc2NvcmUtZmlsdGVyLXNsaWRlciBhdXRvbWF0ZWQtYW5hbHlzaXMtc2NvcmUtZmlsdGVyLXNsaWRlci1jcml0aWNhbCc7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50U2NvcmUgPj0gQXV0b21hdGVkQW5hbHlzaXNTY29yZS5PUkFOR0VfU0NPUkVfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gJ2F1dG9tYXRlZC1hbmFseXNpcy1zY29yZS1maWx0ZXItc2xpZGVyIGF1dG9tYXRlZC1hbmFseXNpcy1zY29yZS1maWx0ZXItc2xpZGVyLXdhcm5pbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2F1dG9tYXRlZC1hbmFseXNpcy1zY29yZS1maWx0ZXItc2xpZGVyIGF1dG9tYXRlZC1hbmFseXNpcy1zY29yZS1maWx0ZXItc2xpZGVyLW9rJztcbiAgICB9XG4gIH0sIFtjdXJyZW50U2NvcmVdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VG9vbHRpcCBjb250ZW50PXt0KCdBdXRvbWF0ZWRBbmFseXNpc1Njb3JlRmlsdGVyLlRPT0xUSVAuQ09OVEVOVCcpfSBhcHBlbmRUbz17cG9ydGFsUm9vdH0+XG4gICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnNtYWxsfT5cbiAgICAgICAgICB7dCgnQXV0b21hdGVkQW5hbHlzaXNTY29yZUZpbHRlci5DVVJSRU5UX1NDT1JFX1RFWFQnLCB7IHZhbDogY3VycmVudFNjb3JlIH0pfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1Rvb2x0aXA+XG4gICAgICA8U2xpZGVyXG4gICAgICAgIGxlZnRBY3Rpb25zPXtcbiAgICAgICAgICA8TGV2ZWwgaGFzR3V0dGVyPlxuICAgICAgICAgICAgPExldmVsSXRlbT5cbiAgICAgICAgICAgICAgPFRleHQgY29tcG9uZW50PXtUZXh0VmFyaWFudHMuc21hbGx9Pnt0KCdSRVNFVCcsIHsgbnM6ICdjb21tb24nIH0pfTo8L1RleHQ+XG4gICAgICAgICAgICA8L0xldmVsSXRlbT5cbiAgICAgICAgICAgIDxMZXZlbEl0ZW0+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpc1NtYWxsXG4gICAgICAgICAgICAgICAgaXNJbmxpbmVcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwibGlua1wiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNTY29yZUZpbHRlci5TTElERVIuUkVTRVQwLkxBQkVMJyl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17b24wUmVzZXR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9MZXZlbEl0ZW0+XG4gICAgICAgICAgICA8TGV2ZWxJdGVtPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaXNTbWFsbFxuICAgICAgICAgICAgICAgIGlzSW5saW5lXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImxpbmtcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0F1dG9tYXRlZEFuYWx5c2lzU2NvcmVGaWx0ZXIuU0xJREVSLlJFU0VUMTAwLkxBQkVMJyl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17b24xMDBSZXNldH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDEwMFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvTGV2ZWxJdGVtPlxuICAgICAgICAgIDwvTGV2ZWw+XG4gICAgICAgIH1cbiAgICAgICAgc3RlcD17MC4xfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgYXJlQ3VzdG9tU3RlcHNDb250aW51b3VzXG4gICAgICAgIGN1c3RvbVN0ZXBzPXtzdGVwc31cbiAgICAgICAgaXNJbnB1dFZpc2libGVcbiAgICAgICAgaW5wdXRMYWJlbD17dCgnU0NPUkUnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgaW5wdXRWYWx1ZT17Y3VycmVudFNjb3JlfVxuICAgICAgICB2YWx1ZT17Y3VycmVudFNjb3JlfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG1pbj17MH1cbiAgICAgICAgbWF4PXsxMDB9XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgYXV0aEZhaWxNZXNzYWdlLCBFcnJvclZpZXcsIGlzQXV0aEZhaWwgfSBmcm9tICdAYXBwL0Vycm9yVmlldy9FcnJvclZpZXcnO1xuaW1wb3J0IHsgTG9hZGluZ1ZpZXcgfSBmcm9tICdAYXBwL0xvYWRpbmdWaWV3L0xvYWRpbmdWaWV3JztcbmltcG9ydCB7XG4gIGF1dG9tYXRlZEFuYWx5c2lzQWRkR2xvYmFsRmlsdGVySW50ZW50LFxuICBlbXB0eUF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyxcbiAgVGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzLFxufSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU2xpY2UnO1xuaW1wb3J0IHsgVXBkYXRlRmlsdGVyT3B0aW9ucyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvQ29tbW9uJztcbmltcG9ydCB7XG4gIGF1dG9tYXRlZEFuYWx5c2lzQWRkRmlsdGVySW50ZW50LFxuICBhdXRvbWF0ZWRBbmFseXNpc0FkZFRhcmdldEludGVudCxcbiAgYXV0b21hdGVkQW5hbHlzaXNEZWxldGVBbGxGaWx0ZXJzSW50ZW50LFxuICBhdXRvbWF0ZWRBbmFseXNpc0RlbGV0ZUNhdGVnb3J5RmlsdGVyc0ludGVudCxcbiAgYXV0b21hdGVkQW5hbHlzaXNEZWxldGVGaWx0ZXJJbnRlbnQsXG4gIFJvb3RTdGF0ZSxcbiAgU3RhdGVEaXNwYXRjaCxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQge1xuICBBcmNoaXZlZFJlY29yZGluZyxcbiAgYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdOYW1lLFxuICBpc0dyYXBoUUxBdXRoRXJyb3IsXG4gIFJlY29yZGluZyxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXV0b21hdGVkQW5hbHlzaXNTY29yZSxcbiAgQ2F0ZWdvcml6ZWRSdWxlRXZhbHVhdGlvbnMsXG4gIEZBSUxFRF9SRVBPUlRfTUVTU0FHRSxcbiAgTk9fUkVDT1JESU5HU19NRVNTQUdFLFxuICBSRUNPUkRJTkdfRkFJTFVSRV9NRVNTQUdFLFxuICBSdWxlRXZhbHVhdGlvbixcbiAgVEVNUExBVEVfVU5TVVBQT1JURURfTUVTU0FHRSxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvUmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBhdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ1RvUmVjb3JkaW5nQXR0cmlidXRlcywgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBOT19UQVJHRVQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IGNhbGN1bGF0ZUFuYWx5c2lzVGltZXIsIHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2FyZEFjdGlvbnMsXG4gIENhcmRCb2R5LFxuICBDYXJkRXhwYW5kYWJsZUNvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRUaXRsZSxcbiAgQ2hlY2tib3gsXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVCb2R5LFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnMsXG4gIEdyaWQsXG4gIEdyaWRJdGVtLFxuICBMYWJlbCxcbiAgTGFiZWxHcm91cCxcbiAgTGV2ZWwsXG4gIExldmVsSXRlbSxcbiAgU3RhY2ssXG4gIFN0YWNrSXRlbSxcbiAgU3dpdGNoLFxuICBUZXh0LFxuICBUZXh0Q29udGVudCxcbiAgVGV4dFZhcmlhbnRzLFxuICBUaXRsZSxcbiAgVG9vbGJhcixcbiAgVG9vbGJhckNvbnRlbnQsXG4gIFRvb2xiYXJHcm91cCxcbiAgVG9vbGJhckl0ZW0sXG4gIFRvb2x0aXAsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHtcbiAgQ2hlY2tDaXJjbGVJY29uLFxuICBFeGNsYW1hdGlvbkNpcmNsZUljb24sXG4gIEV4Y2xhbWF0aW9uVHJpYW5nbGVJY29uLFxuICBJbmZvQ2lyY2xlSWNvbixcbiAgT3V0bGluZWRRdWVzdGlvbkNpcmNsZUljb24sXG4gIFByb2Nlc3NBdXRvbWF0aW9uSWNvbixcbiAgU2VhcmNoSWNvbixcbiAgU3Bpbm5lcjJJY29uLFxuICBUcmFzaEljb24sXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENhcmREZXNjcmlwdG9yLCBEYXNoYm9hcmRDYXJkU2l6ZXMsIERhc2hib2FyZENhcmRUeXBlUHJvcHMgfSBmcm9tICcuLi9kYXNoYm9hcmQtdXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2FyZCB9IGZyb20gJy4uL0Rhc2hib2FyZENhcmQnO1xuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNDYXJkTGlzdCB9IGZyb20gJy4vQXV0b21hdGVkQW5hbHlzaXNDYXJkTGlzdCc7XG5pbXBvcnQgeyBBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0RyYXdlciB9IGZyb20gJy4vQXV0b21hdGVkQW5hbHlzaXNDb25maWdEcmF3ZXInO1xuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtIH0gZnJvbSAnLi9BdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm0nO1xuaW1wb3J0IHtcbiAgQXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzLFxuICBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzLFxuICBBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnNDYXRlZ29yaWVzLFxuICBmaWx0ZXJBdXRvbWF0ZWRBbmFseXNpcyxcbn0gZnJvbSAnLi9BdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMnO1xuaW1wb3J0IHsgY2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNLZXksIENsaWNrYWJsZUF1dG9tYXRlZEFuYWx5c2lzTGFiZWwgfSBmcm9tICcuL0NsaWNrYWJsZUF1dG9tYXRlZEFuYWx5c2lzTGFiZWwnO1xuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNTY29yZUZpbHRlciB9IGZyb20gJy4vRmlsdGVycy9BdXRvbWF0ZWRBbmFseXNpc1Njb3JlRmlsdGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvbWF0ZWRBbmFseXNpc0NhcmRQcm9wcyBleHRlbmRzIERhc2hib2FyZENhcmRUeXBlUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzQ2FyZDogUmVhY3QuRkM8QXV0b21hdGVkQW5hbHlzaXNDYXJkUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoPFN0YXRlRGlzcGF0Y2g+KCk7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCBbdGFyZ2V0Q29ubmVjdFVSTCwgc2V0VGFyZ2V0Q29ubmVjdFVSTF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtldmFsdWF0aW9ucywgc2V0RXZhbHVhdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8UnVsZUV2YWx1YXRpb25bXT4oW10pO1xuXG4gIGNvbnN0IFtjYXRlZ29yaXplZEV2YWx1YXRpb24sIHNldENhdGVnb3JpemVkRXZhbHVhdGlvbl0gPSBSZWFjdC51c2VTdGF0ZTxDYXRlZ29yaXplZFJ1bGVFdmFsdWF0aW9uc1tdPihbXSk7XG4gIGNvbnN0IFtmaWx0ZXJlZENhdGVnb3JpemVkRXZhbHVhdGlvbiwgc2V0RmlsdGVyZWRDYXRlZ29yaXplZEV2YWx1YXRpb25dID0gUmVhY3QudXNlU3RhdGU8XG4gICAgQ2F0ZWdvcml6ZWRSdWxlRXZhbHVhdGlvbnNbXVxuICA+KFtdKTtcbiAgY29uc3QgW2lzQ2FyZEV4cGFuZGVkLCBzZXRJc0NhcmRFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZTxib29sZWFuPih0cnVlKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3JlcG9ydFN0YWxlbmVzc1RpbWVyLCBzZXRSZXBvcnRTdGFsZW5lc3NUaW1lcl0gPSBSZWFjdC51c2VTdGF0ZTxudW1iZXI+KDApO1xuICBjb25zdCBbcmVwb3J0U3RhbGVuZXNzVGltZXJVbml0cywgc2V0UmVwb3J0U3RhbGVuZXNzVGltZXJVbml0c10gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmc+KCdzZWNvbmQnKTtcbiAgY29uc3QgW3JlcG9ydFRpbWUsIHNldFJlcG9ydFRpbWVdID0gUmVhY3QudXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW3VzaW5nQXJjaGl2ZWRSZXBvcnQsIHNldFVzaW5nQXJjaGl2ZWRSZXBvcnRdID0gUmVhY3QudXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbdXNpbmdDYWNoZWRSZXBvcnQsIHNldFVzaW5nQ2FjaGVkUmVwb3J0XSA9IFJlYWN0LnVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3Nob3dOQVNjb3Jlcywgc2V0U2hvd05BU2NvcmVzXSA9IFJlYWN0LnVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3JlcG9ydCwgc2V0UmVwb3J0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4oJ2F1dG9tYXRlZC1hbmFseXNpcycpO1xuICBjb25zdCBbc2hvd0xpc3RWaWV3LCBzZXRTaG93TGlzdFZpZXddID0gUmVhY3QudXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0IHRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHN0YXRlLmF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycy5zdGF0ZS50YXJnZXRGaWx0ZXJzLmZpbHRlcihcbiAgICAgICh0YXJnZXRGaWx0ZXI6IFRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycykgPT4gdGFyZ2V0RmlsdGVyLnRhcmdldCA9PT0gdGFyZ2V0Q29ubmVjdFVSTFxuICAgICk7XG4gICAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID4gMCA/IGZpbHRlcnNbMF0uZmlsdGVycyA6IGVtcHR5QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzO1xuICB9KSBhcyBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnNDYXRlZ29yaWVzO1xuXG4gIGNvbnN0IHRhcmdldEF1dG9tYXRlZEFuYWx5c2lzR2xvYmFsRmlsdGVycyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlLmF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycy5zdGF0ZS5nbG9iYWxGaWx0ZXJzLmZpbHRlcnM7XG4gIH0pIGFzIEF1dG9tYXRlZEFuYWx5c2lzR2xvYmFsRmlsdGVyc0NhdGVnb3JpZXM7XG5cbiAgY29uc3QgY2F0ZWdvcml6ZUV2YWx1YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYXJyOiBSdWxlRXZhbHVhdGlvbltdKSA9PiB7XG4gICAgICBzZXRFdmFsdWF0aW9ucyhhcnIpO1xuICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFJ1bGVFdmFsdWF0aW9uW10+KCk7XG4gICAgICBhcnIuZm9yRWFjaCgoZXZhbHVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0b3BpY1ZhbHVlID0gbWFwLmdldChldmFsdWF0aW9uLnRvcGljKTtcbiAgICAgICAgaWYgKHRvcGljVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG1hcC5zZXQoZXZhbHVhdGlvbi50b3BpYywgW2V2YWx1YXRpb25dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3BpY1ZhbHVlLnB1c2goZXZhbHVhdGlvbik7XG4gICAgICAgICAgdG9waWNWYWx1ZS5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSB8fCBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzb3J0ZWQgPSAoQXJyYXkuZnJvbShtYXApIGFzIENhdGVnb3JpemVkUnVsZUV2YWx1YXRpb25zW10pLnNvcnQoKTtcbiAgICAgIHNldENhdGVnb3JpemVkRXZhbHVhdGlvbihzb3J0ZWQpO1xuICAgIH0sXG4gICAgW3NldENhdGVnb3JpemVkRXZhbHVhdGlvbiwgc2V0RXZhbHVhdGlvbnNdXG4gICk7XG5cbiAgLy8gV2lsbCBwZXJmb3JtIGFuYWx5c2lzIG9uIHRoZSBmaXJzdCBBY3RpdmVSZWNvcmRpbmcgd2hpY2ggaGFzXG4gIC8vIG5hbWU6ICdhdXRvbWF0ZWQtYW5hbHlzaXMnOyBsYWJlbDogJ29yaWdpbj1hdXRvbWF0ZWQtYW5hbHlzaXMnXG4gIC8vIFF1ZXJ5IE5FRURTICdzdGF0ZScgc28gdGhhdCBpc0FjdGl2ZVJlY29yZGluZyhyZXN1bHQpIGlzIHZhbGlkXG4gIGNvbnN0IHF1ZXJ5QWN0aXZlUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjb25uZWN0VXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gICAgICByZXR1cm4gY29udGV4dC5hcGkuZ3JhcGhxbDxhbnk+KFxuICAgICAgICBgXG4gICAgICBxdWVyeSBBY3RpdmVSZWNvcmRpbmdzRm9yQXV0b21hdGVkQW5hbHlzaXMoJGNvbm5lY3RVcmw6IFN0cmluZykge1xuICAgICAgICB0YXJnZXROb2RlcyhmaWx0ZXI6IHsgbmFtZTogJGNvbm5lY3RVcmwgfSkge1xuICAgICAgICAgIHJlY29yZGluZ3Mge1xuICAgICAgICAgICAgYWN0aXZlIChmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgbmFtZTogXCIke2F1dG9tYXRlZEFuYWx5c2lzUmVjb3JkaW5nTmFtZX1cIixcbiAgICAgICAgICAgICAgbGFiZWxzOiBbXCJvcmlnaW49JHthdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ05hbWV9XCJdLFxuICAgICAgICAgICAgfSkge1xuICAgICAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICBkb3dubG9hZFVybFxuICAgICAgICAgICAgICAgIHJlcG9ydFVybFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfWAsXG4gICAgICAgIHsgY29ubmVjdFVybCB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbnRleHQuYXBpXVxuICApO1xuXG4gIGNvbnN0IHF1ZXJ5QXJjaGl2ZWRSZWNvcmRpbmdzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNvbm5lY3RVcmw6IHN0cmluZykgPT4ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICAgIHJldHVybiBjb250ZXh0LmFwaS5ncmFwaHFsPGFueT4oXG4gICAgICAgIGBxdWVyeSBBcmNoaXZlZFJlY29yZGluZ3NGb3JBdXRvbWF0ZWRBbmFseXNpcygkY29ubmVjdFVybDogU3RyaW5nKSB7XG4gICAgICAgIGFyY2hpdmVkUmVjb3JkaW5ncyhmaWx0ZXI6IHsgc291cmNlVGFyZ2V0OiAkY29ubmVjdFVybCB9KSB7XG4gICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICBkb3dubG9hZFVybFxuICAgICAgICAgICAgcmVwb3J0VXJsXG4gICAgICAgICAgICBtZXRhZGF0YSB7XG4gICAgICAgICAgICAgIGxhYmVsc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2l6ZVxuICAgICAgICAgICAgYXJjaGl2ZWRUaW1lXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9YCxcbiAgICAgICAgeyBjb25uZWN0VXJsIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbY29udGV4dC5hcGldXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3RhdGVFcnJvcnMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpO1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldFVzaW5nQXJjaGl2ZWRSZXBvcnQoZmFsc2UpO1xuICAgICAgc2V0VXNpbmdDYWNoZWRSZXBvcnQoZmFsc2UpO1xuICAgIH0sXG4gICAgW3NldEVycm9yTWVzc2FnZSwgc2V0SXNMb2FkaW5nLCBzZXRVc2luZ0FyY2hpdmVkUmVwb3J0LCBzZXRVc2luZ0NhY2hlZFJlcG9ydF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVMb2FkaW5nID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEVycm9yTWVzc2FnZSh1bmRlZmluZWQpO1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRVc2luZ0FyY2hpdmVkUmVwb3J0KGZhbHNlKTtcbiAgICBzZXRVc2luZ0NhY2hlZFJlcG9ydChmYWxzZSk7XG4gIH0sIFtzZXRFcnJvck1lc3NhZ2UsIHNldElzTG9hZGluZywgc2V0VXNpbmdBcmNoaXZlZFJlcG9ydCwgc2V0VXNpbmdDYWNoZWRSZXBvcnRdKTtcblxuICBjb25zdCBoYW5kbGVBcmNoaXZlZFJlY29yZGluZ3MgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAocmVjb3JkaW5nczogQXJjaGl2ZWRSZWNvcmRpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgZnJlc2hlc3RSZWNvcmRpbmcgPSByZWNvcmRpbmdzLnJlZHVjZSgocHJldiwgY3VycmVudCkgPT5cbiAgICAgICAgcHJldj8uYXJjaGl2ZWRUaW1lID4gY3VycmVudD8uYXJjaGl2ZWRUaW1lID8gcHJldiA6IGN1cnJlbnRcbiAgICAgICk7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIGNvbnRleHQudGFyZ2V0XG4gICAgICAgICAgLnRhcmdldCgpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0ICE9PSBOT19UQVJHRVQpLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0c1xuICAgICAgICAgICAgICAucmVwb3J0SnNvbihmcmVzaGVzdFJlY29yZGluZywgdGFyZ2V0LmNvbm5lY3RVcmwpXG4gICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChyZXBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydChmcmVzaGVzdFJlY29yZGluZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIHNldFVzaW5nQXJjaGl2ZWRSZXBvcnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRUaW1lKGZyZXNoZXN0UmVjb3JkaW5nLmFyY2hpdmVkVGltZSk7XG4gICAgICAgICAgICAgICAgICBjYXRlZ29yaXplRXZhbHVhdGlvbihyZXBvcnQpO1xuICAgICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVTdGF0ZUVycm9ycyhlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRTdWJzY3JpcHRpb24sXG4gICAgICBjb250ZXh0LnRhcmdldCxcbiAgICAgIGNvbnRleHQucmVwb3J0cyxcbiAgICAgIGNhdGVnb3JpemVFdmFsdWF0aW9uLFxuICAgICAgaGFuZGxlU3RhdGVFcnJvcnMsXG4gICAgICBzZXRVc2luZ0FyY2hpdmVkUmVwb3J0LFxuICAgICAgc2V0UmVwb3J0VGltZSxcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHNldFJlcG9ydCxcbiAgICBdXG4gICk7XG5cbiAgLy8gdHJ5IGdlbmVyYXRpbmcgcmVwb3J0IG9uIGNhY2hlZCBvciBhcmNoaXZlZCByZWNvcmRpbmdzXG4gIGNvbnN0IGhhbmRsZUVtcHR5UmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjb25uZWN0VXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlcG9ydEFuYWx5c2lzID0gY29udGV4dC5yZXBvcnRzLmdldENhY2hlZEFuYWx5c2lzUmVwb3J0KGNvbm5lY3RVcmwpO1xuICAgICAgaWYgKGNhY2hlZFJlcG9ydEFuYWx5c2lzLnJlcG9ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNldFJlcG9ydChhdXRvbWF0ZWRBbmFseXNpc1JlY29yZGluZ05hbWUpO1xuICAgICAgICBzZXRVc2luZ0NhY2hlZFJlcG9ydCh0cnVlKTtcbiAgICAgICAgc2V0UmVwb3J0VGltZShjYWNoZWRSZXBvcnRBbmFseXNpcy50aW1lc3RhbXApO1xuICAgICAgICBjYXRlZ29yaXplRXZhbHVhdGlvbihjYWNoZWRSZXBvcnRBbmFseXNpcy5yZXBvcnQpO1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICAgIHF1ZXJ5QXJjaGl2ZWRSZWNvcmRpbmdzKGNvbm5lY3RVcmwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgbWFwKCh2KSA9PiB2LmRhdGEuYXJjaGl2ZWRSZWNvcmRpbmdzLmRhdGEgYXMgQXJjaGl2ZWRSZWNvcmRpbmdbXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAocmVjb3JkaW5ncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUFyY2hpdmVkUmVjb3JkaW5ncyhyZWNvcmRpbmdzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlU3RhdGVFcnJvcnMoTk9fUkVDT1JESU5HU19NRVNTQUdFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlU3RhdGVFcnJvcnMoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICAgIGNvbnRleHQucmVwb3J0cyxcbiAgICAgIGNhdGVnb3JpemVFdmFsdWF0aW9uLFxuICAgICAgcXVlcnlBcmNoaXZlZFJlY29yZGluZ3MsXG4gICAgICBoYW5kbGVBcmNoaXZlZFJlY29yZGluZ3MsXG4gICAgICBoYW5kbGVTdGF0ZUVycm9ycyxcbiAgICAgIHNldFVzaW5nQ2FjaGVkUmVwb3J0LFxuICAgICAgc2V0UmVwb3J0VGltZSxcbiAgICAgIHNldFJlcG9ydCxcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgZ2VuZXJhdGVSZXBvcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaGFuZGxlTG9hZGluZygpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0XG4gICAgICAgIC50YXJnZXQoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0ICE9PSBOT19UQVJHRVQpLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh0YXJnZXQpID0+IHtcbiAgICAgICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgICAgICBxdWVyeUFjdGl2ZVJlY29yZGluZ3ModGFyZ2V0LmNvbm5lY3RVcmwpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgdGFwKChyZXNwKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcC5kYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNHcmFwaFFMQXV0aEVycm9yKHJlc3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dC50YXJnZXQuc2V0QXV0aEZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYXV0aEZhaWxNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcC5lcnJvcnNbMF0ubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHYpID0+IHYuZGF0YS50YXJnZXROb2Rlc1swXS5yZWNvcmRpbmdzLmFjdGl2ZS5kYXRhWzBdIGFzIFJlY29yZGluZyksXG4gICAgICAgICAgICAgICAgdGFwKChyZWNvcmRpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRpbmcgPT09IG51bGwgfHwgcmVjb3JkaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKE5PX1JFQ09SRElOR1NfTUVTU0FHRSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVjb3JkaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydHNcbiAgICAgICAgICAgICAgICAgICAgLnJlcG9ydEpzb24ocmVjb3JkaW5nLCB0YXJnZXQuY29ubmVjdFVybClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlcG9ydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0KHJlY29yZGluZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpemVFdmFsdWF0aW9uKHJlcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdGF0ZUVycm9ycyhGQUlMRURfUkVQT1JUX01FU1NBR0UpO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc0F1dGhGYWlsKGVyci5tZXNzYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdGF0ZUVycm9ycyhhdXRoRmFpbE1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlRW1wdHlSZWNvcmRpbmdzKHRhcmdldC5jb25uZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfSwgW1xuICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICBjb250ZXh0LnRhcmdldCxcbiAgICBjb250ZXh0LnJlcG9ydHMsXG4gICAgc2V0SXNMb2FkaW5nLFxuICAgIHNldFJlcG9ydCxcbiAgICBjYXRlZ29yaXplRXZhbHVhdGlvbixcbiAgICBxdWVyeUFjdGl2ZVJlY29yZGluZ3MsXG4gICAgaGFuZGxlRW1wdHlSZWNvcmRpbmdzLFxuICAgIGhhbmRsZUxvYWRpbmcsXG4gICAgaGFuZGxlU3RhdGVFcnJvcnMsXG4gIF0pO1xuXG4gIGNvbnN0IHN0YXJ0UHJvZmlsaW5nUmVjb3JkaW5nID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQuc2V0dGluZ3MuYXV0b21hdGVkQW5hbHlzaXNSZWNvcmRpbmdDb25maWcoKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXV0b21hdGVkQW5hbHlzaXNDb25maWdUb1JlY29yZGluZ0F0dHJpYnV0ZXMoY29uZmlnKTtcblxuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQuYXBpLmNyZWF0ZVJlY29yZGluZyhhdHRyaWJ1dGVzKS5zdWJzY3JpYmUoKHJlc3ApID0+IHtcbiAgICAgICAgaWYgKHJlc3ApIHtcbiAgICAgICAgICBpZiAocmVzcC5vayB8fCByZXNwLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICAvLyBpbi1jYXNlIHRoZSByZWNvcmRpbmcgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgIGdlbmVyYXRlUmVwb3J0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgICBoYW5kbGVTdGF0ZUVycm9ycyhURU1QTEFURV9VTlNVUFBPUlRFRF9NRVNTQUdFKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlU3RhdGVFcnJvcnMoUkVDT1JESU5HX0ZBSUxVUkVfTUVTU0FHRSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIGNvbnRleHQuc2V0dGluZ3MsIGdlbmVyYXRlUmVwb3J0LCBoYW5kbGVTdGF0ZUVycm9yc10pO1xuXG4gIGNvbnN0IGdldE1lc3NhZ2VBbmRSZXRyeSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFtzdHJpbmcgfCB1bmRlZmluZWQsIHVuZGVmaW5lZCB8ICgoKSA9PiB2b2lkKV0gPT4ge1xuICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICBpZiAoZXJyb3JNZXNzYWdlID09PSBOT19SRUNPUkRJTkdTX01FU1NBR0UpIHtcbiAgICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0F1dGhGYWlsKGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgICByZXR1cm4gW3QoJ1JFVFJZJywgeyBuczogJ2NvbW1vbicgfSksIGdlbmVyYXRlUmVwb3J0XTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UgPT09IFJFQ09SRElOR19GQUlMVVJFX01FU1NBR0UpIHtcbiAgICAgICAgICByZXR1cm4gW3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC5SRVRSWV9TVEFSVElORycpLCBzdGFydFByb2ZpbGluZ1JlY29yZGluZ107XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3JNZXNzYWdlID09PSBGQUlMRURfUkVQT1JUX01FU1NBR0UpIHtcbiAgICAgICAgICByZXR1cm4gW3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC5SRVRSWV9MT0FESU5HJyksIGdlbmVyYXRlUmVwb3J0XTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UgPT09IFRFTVBMQVRFX1VOU1VQUE9SVEVEX01FU1NBR0UpIHtcbiAgICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW3QoJ1JFVFJZJywgeyBuczogJ2NvbW1vbicgfSksIGdlbmVyYXRlUmVwb3J0XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfSxcbiAgICBbdCwgc3RhcnRQcm9maWxpbmdSZWNvcmRpbmcsIGdlbmVyYXRlUmVwb3J0XVxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0LmF1dGhSZXRyeSgpLnN1YnNjcmliZShnZW5lcmF0ZVJlcG9ydCkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldCwgZ2VuZXJhdGVSZXBvcnRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnRleHQudGFyZ2V0LnRhcmdldCgpLnN1YnNjcmliZSgodGFyZ2V0KSA9PiB7XG4gICAgICBzZXRUYXJnZXRDb25uZWN0VVJMKHRhcmdldC5jb25uZWN0VXJsKTtcbiAgICAgIGRpc3BhdGNoKGF1dG9tYXRlZEFuYWx5c2lzQWRkVGFyZ2V0SW50ZW50KHRhcmdldC5jb25uZWN0VXJsKSk7XG4gICAgICBnZW5lcmF0ZVJlcG9ydCgpO1xuICAgIH0pO1xuICB9LCBbY29udGV4dC50YXJnZXQsIGdlbmVyYXRlUmVwb3J0LCBzZXRUYXJnZXRDb25uZWN0VVJMLCBkaXNwYXRjaF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlcG9ydFRpbWUgPT0gMCB8fCAhKHVzaW5nQXJjaGl2ZWRSZXBvcnQgfHwgdXNpbmdDYWNoZWRSZXBvcnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFuYWx5c2lzVGltZXIgPSBjYWxjdWxhdGVBbmFseXNpc1RpbWVyKHJlcG9ydFRpbWUpO1xuICAgIHNldFJlcG9ydFN0YWxlbmVzc1RpbWVyKGFuYWx5c2lzVGltZXIucXVhbnRpdHkpO1xuICAgIHNldFJlcG9ydFN0YWxlbmVzc1RpbWVyVW5pdHMoYW5hbHlzaXNUaW1lci51bml0KTtcbiAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNldFJlcG9ydFN0YWxlbmVzc1RpbWVyKChyZXBvcnRTdGFsZW5lc3NUaW1lcikgPT4gcmVwb3J0U3RhbGVuZXNzVGltZXIgKyAxKTtcbiAgICB9LCBhbmFseXNpc1RpbWVyLmludGVydmFsKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gIH0sIFtcbiAgICBzZXRSZXBvcnRTdGFsZW5lc3NUaW1lcixcbiAgICBzZXRSZXBvcnRTdGFsZW5lc3NUaW1lclVuaXRzLFxuICAgIHJlcG9ydFRpbWUsXG4gICAgcmVwb3J0U3RhbGVuZXNzVGltZXIsXG4gICAgdXNpbmdBcmNoaXZlZFJlcG9ydCxcbiAgICB1c2luZ0NhY2hlZFJlcG9ydCxcbiAgXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRGaWx0ZXJlZENhdGVnb3JpemVkRXZhbHVhdGlvbihcbiAgICAgIGZpbHRlckF1dG9tYXRlZEFuYWx5c2lzKFxuICAgICAgICBjYXRlZ29yaXplZEV2YWx1YXRpb24sXG4gICAgICAgIHRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyxcbiAgICAgICAgdGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNHbG9iYWxGaWx0ZXJzLFxuICAgICAgICBzaG93TkFTY29yZXNcbiAgICAgIClcbiAgICApO1xuICB9LCBbXG4gICAgY2F0ZWdvcml6ZWRFdmFsdWF0aW9uLFxuICAgIHRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyxcbiAgICB0YXJnZXRBdXRvbWF0ZWRBbmFseXNpc0dsb2JhbEZpbHRlcnMsXG4gICAgc2hvd05BU2NvcmVzLFxuICAgIHNldEZpbHRlcmVkQ2F0ZWdvcml6ZWRFdmFsdWF0aW9uLFxuICBdKTtcblxuICBjb25zdCBvbkNhcmRFeHBhbmQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNDYXJkRXhwYW5kZWQoKGlzQ2FyZEV4cGFuZGVkKSA9PiAhaXNDYXJkRXhwYW5kZWQpO1xuICB9LCBbc2V0SXNDYXJkRXhwYW5kZWRdKTtcblxuICBjb25zdCBzaG93VW5hdmFpbGFibGVTY29yZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2hvd05BU2NvcmVzKHRydWUpO1xuICB9LCBbc2V0U2hvd05BU2NvcmVzXSk7XG5cbiAgY29uc3QgY2xlYXJBbmFseXNpcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXNpbmdBcmNoaXZlZFJlcG9ydCkge1xuICAgICAgaGFuZGxlU3RhdGVFcnJvcnMoTk9fUkVDT1JESU5HU19NRVNTQUdFKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIGNvbnRleHQucmVwb3J0cy5kZWxldGVDYWNoZWRBbmFseXNpc1JlcG9ydCh0YXJnZXRDb25uZWN0VVJMKTtcbiAgICBpZiAodXNpbmdDYWNoZWRSZXBvcnQpIHtcbiAgICAgIGdlbmVyYXRlUmVwb3J0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgY29udGV4dC5hcGkuZGVsZXRlUmVjb3JkaW5nKCdhdXRvbWF0ZWQtYW5hbHlzaXMnKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIGdlbmVyYXRlUmVwb3J0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdGF0ZUVycm9ycyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH0sIFtcbiAgICBhZGRTdWJzY3JpcHRpb24sXG4gICAgY29udGV4dC5hcGksXG4gICAgY29udGV4dC5yZXBvcnRzLFxuICAgIHRhcmdldENvbm5lY3RVUkwsXG4gICAgdXNpbmdDYWNoZWRSZXBvcnQsXG4gICAgdXNpbmdBcmNoaXZlZFJlcG9ydCxcbiAgICBzZXRJc0xvYWRpbmcsXG4gICAgZ2VuZXJhdGVSZXBvcnQsXG4gICAgaGFuZGxlU3RhdGVFcnJvcnMsXG4gIF0pO1xuXG4gIGNvbnN0IHVwZGF0ZUZpbHRlcnMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGFyZ2V0LCB7IGZpbHRlclZhbHVlLCBmaWx0ZXJLZXksIGRlbGV0ZWQgPSBmYWxzZSwgZGVsZXRlT3B0aW9ucyB9OiBVcGRhdGVGaWx0ZXJPcHRpb25zKSA9PiB7XG4gICAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgICBpZiAoZGVsZXRlT3B0aW9ucyAmJiBkZWxldGVPcHRpb25zLmFsbCkge1xuICAgICAgICAgIGRpc3BhdGNoKGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50KHRhcmdldCwgZmlsdGVyS2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzcGF0Y2goYXV0b21hdGVkQW5hbHlzaXNEZWxldGVGaWx0ZXJJbnRlbnQodGFyZ2V0LCBmaWx0ZXJLZXksIGZpbHRlclZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKGF1dG9tYXRlZEFuYWx5c2lzQWRkRmlsdGVySW50ZW50KHRhcmdldCwgZmlsdGVyS2V5LCBmaWx0ZXJWYWx1ZSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNsZWFyRmlsdGVycyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaChhdXRvbWF0ZWRBbmFseXNpc0RlbGV0ZUFsbEZpbHRlcnNJbnRlbnQodGFyZ2V0Q29ubmVjdFVSTCkpO1xuICB9LCBbZGlzcGF0Y2gsIHRhcmdldENvbm5lY3RVUkxdKTtcblxuICBjb25zdCBoYW5kbGVSZXNldFNjb3JlRmlsdGVyID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKGF1dG9tYXRlZEFuYWx5c2lzQWRkR2xvYmFsRmlsdGVySW50ZW50KCdTY29yZScsIDApKTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG5cbiAgY29uc3QgcmVwb3J0U3RhbGVuZXNzVGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcgfHwgISh1c2luZ0FyY2hpdmVkUmVwb3J0IHx8IHVzaW5nQ2FjaGVkUmVwb3J0KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxUZXh0Q29udGVudCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJzdGFsZS1yZXBvcnQtdGV4dFwiIGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnB9PlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMC4zcmVtJyB9fT5cbiAgICAgICAgICAgIHt0KCdBdXRvbWF0ZWRBbmFseXNpc0NhcmQuU1RBTEVfUkVQT1JULlRFWFQnLCB7XG4gICAgICAgICAgICAgIGNvdW50OiByZXBvcnRTdGFsZW5lc3NUaW1lcixcbiAgICAgICAgICAgICAgdW5pdHM6IHJlcG9ydFN0YWxlbmVzc1RpbWVyVW5pdHMsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPFRvb2x0aXAgY29udGVudD17dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLlNUQUxFX1JFUE9SVC5UT09MVElQJyl9IGFwcGVuZFRvPXtwb3J0YWxSb290fT5cbiAgICAgICAgICAgIDxPdXRsaW5lZFF1ZXN0aW9uQ2lyY2xlSWNvblxuICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6ICcwLjg1ZW0nLCB3aWR0aDogJzAuODVlbScsIGNvbG9yOiAndmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKScgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1RleHRDb250ZW50PlxuICAgICk7XG4gIH0sIFt0LCBpc0xvYWRpbmcsIHVzaW5nQXJjaGl2ZWRSZXBvcnQsIHVzaW5nQ2FjaGVkUmVwb3J0LCByZXBvcnRTdGFsZW5lc3NUaW1lciwgcmVwb3J0U3RhbGVuZXNzVGltZXJVbml0c10pO1xuXG4gIGNvbnN0IGZpbHRlcmVkQ2F0ZWdvcml6ZWRMYWJlbHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlcmVkQ2F0ZWdvcml6ZWRFdmFsdWF0aW9uLmZpbHRlcigoW18sIGV2YWx1YXRpb25zXSkgPT4gZXZhbHVhdGlvbnMubGVuZ3RoID4gMCk7XG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgICAgPEVtcHR5U3RhdGVJY29uIGljb249e1NlYXJjaEljb259IC8+XG4gICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImg0XCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgICB7dChgQXV0b21hdGVkQW5hbHlzaXNDYXJkLk5PX1JFU1VMVFNgKX1cbiAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICAgIDxFbXB0eVN0YXRlQm9keT57dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLk5PX1JFU1VMVFNfQk9EWScpfTwvRW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgPEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwibGlua1wiIG9uQ2xpY2s9e2hhbmRsZUNsZWFyRmlsdGVyc30+XG4gICAgICAgICAgICAgIHt0KCdDTEVBUl9GSUxURVJTJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImxpbmtcIiBvbkNsaWNrPXtzaG93VW5hdmFpbGFibGVTY29yZXN9PlxuICAgICAgICAgICAgICB7dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLlRPT0xCQVIuQ0hFQ0tCT1guU0hPV19OQS5MQUJFTCcpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17aGFuZGxlUmVzZXRTY29yZUZpbHRlcn0+XG4gICAgICAgICAgICAgIHt0KCdBdXRvbWF0ZWRBbmFseXNpc1Njb3JlRmlsdGVyLlNMSURFUi5SRVNFVDAuTEFCRUwnKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnM+XG4gICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzaG93TGlzdFZpZXcpIHtcbiAgICAgIHJldHVybiA8QXV0b21hdGVkQW5hbHlzaXNDYXJkTGlzdCBldmFsdWF0aW9ucz17ZmlsdGVyZWR9IC8+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEdyaWQ+XG4gICAgICAgIHtmaWx0ZXJlZC5tYXAoKFt0b3BpYywgZXZhbHVhdGlvbnNdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHcmlkSXRlbSBjbGFzc05hbWU9XCJhdXRvbWF0ZWQtYW5hbHlzaXMtZ3JpZC1pdGVtXCIgc3Bhbj17M30ga2V5PXtgZ3JpZEl0ZW0tJHt0b3BpY31gfT5cbiAgICAgICAgICAgICAgPExhYmVsR3JvdXBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhdXRvbWF0ZWQtYW5hbHlzaXMtdG9waWMtbGFiZWwtZ3JvdXBzXCJcbiAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWU9e3RvcGljfVxuICAgICAgICAgICAgICAgIGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICBudW1MYWJlbHM9ezN9XG4gICAgICAgICAgICAgICAgaXNDb21wYWN0XG4gICAgICAgICAgICAgICAga2V5PXt0b3BpY31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtldmFsdWF0aW9ucy5tYXAoKGV2YWx1YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiA8Q2xpY2thYmxlQXV0b21hdGVkQW5hbHlzaXNMYWJlbCBsYWJlbD17ZXZhbHVhdGlvbn0ga2V5PXtjbGlja2FibGVBdXRvbWF0ZWRBbmFseXNpc0tleX0gLz47XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvTGFiZWxHcm91cD5cbiAgICAgICAgICAgIDwvR3JpZEl0ZW0+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0dyaWQ+XG4gICAgKTtcbiAgfSwgW1xuICAgIHQsXG4gICAgaGFuZGxlQ2xlYXJGaWx0ZXJzLFxuICAgIHNob3dVbmF2YWlsYWJsZVNjb3JlcyxcbiAgICBoYW5kbGVSZXNldFNjb3JlRmlsdGVyLFxuICAgIGZpbHRlcmVkQ2F0ZWdvcml6ZWRFdmFsdWF0aW9uLFxuICAgIHNob3dMaXN0VmlldyxcbiAgXSk7XG5cbiAgY29uc3QgdG9vbGJhciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8VG9vbGJhclxuICAgICAgICBpZD1cImF1dG9tYXRlZC1hbmFseXNpcy10b29sYmFyXCJcbiAgICAgICAgYXJpYS1sYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLlRPT0xCQVIuTEFCRUwnKX1cbiAgICAgICAgY2xlYXJBbGxGaWx0ZXJzPXtoYW5kbGVDbGVhckZpbHRlcnN9XG4gICAgICAgIGNsZWFyRmlsdGVyc0J1dHRvblRleHQ9e3QoJ0NMRUFSX0ZJTFRFUlMnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgaXNGdWxsSGVpZ2h0XG4gICAgICA+XG4gICAgICAgIDxUb29sYmFyQ29udGVudD5cbiAgICAgICAgICA8QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzXG4gICAgICAgICAgICB0YXJnZXQ9e3RhcmdldENvbm5lY3RVUkx9XG4gICAgICAgICAgICBldmFsdWF0aW9ucz17Y2F0ZWdvcml6ZWRFdmFsdWF0aW9ufVxuICAgICAgICAgICAgZmlsdGVycz17dGFyZ2V0QXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJzfVxuICAgICAgICAgICAgdXBkYXRlRmlsdGVycz17dXBkYXRlRmlsdGVyc31cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxUb29sYmFyR3JvdXAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwLjVlbSAwJyB9fT5cbiAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlzU21hbGxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0xvYWRpbmcgfHwgdXNpbmdDYWNoZWRSZXBvcnQgfHwgdXNpbmdBcmNoaXZlZFJlcG9ydH1cbiAgICAgICAgICAgICAgICBpc0FyaWFEaXNhYmxlZD17aXNMb2FkaW5nIHx8IHVzaW5nQ2FjaGVkUmVwb3J0IHx8IHVzaW5nQXJjaGl2ZWRSZXBvcnR9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLlRPT0xCQVIuUkVGUkVTSC5MQUJFTCcpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2dlbmVyYXRlUmVwb3J0fVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250cm9sXCJcbiAgICAgICAgICAgICAgICBpY29uPXs8U3Bpbm5lcjJJY29uIC8+fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaXNTbWFsbFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICBpc0FyaWFEaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC5UT09MQkFSLkRFTEVURS5MQUJFTCcpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NsZWFyQW5hbHlzaXN9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGljb249ezxUcmFzaEljb24gLz59XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBsYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLlRPT0xCQVIuQ0hFQ0tCT1guU0hPV19OQS5MQUJFTCcpfVxuICAgICAgICAgICAgICAgIGlzQ2hlY2tlZD17c2hvd05BU2NvcmVzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTaG93TkFTY29yZXN9XG4gICAgICAgICAgICAgICAgaWQ9XCJzaG93LW5hLXNjb3Jlc1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cInNob3ctbmEtc2NvcmVzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgICA8VG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICBsYWJlbD17dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLlRPT0xCQVIuU1dJVENILkxJU1RfVklFVy5MQUJFTCcpfVxuICAgICAgICAgICAgICAgIGlzQ2hlY2tlZD17c2hvd0xpc3RWaWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTaG93TGlzdFZpZXd9XG4gICAgICAgICAgICAgICAgaWQ9XCJzaG93LWxpc3Qtdmlld1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICA8L1Rvb2xiYXJDb250ZW50PlxuICAgICAgPC9Ub29sYmFyPlxuICAgICk7XG4gIH0sIFtcbiAgICB0LFxuICAgIGlzTG9hZGluZyxcbiAgICBzaG93TkFTY29yZXMsXG4gICAgc2hvd0xpc3RWaWV3LFxuICAgIHRhcmdldENvbm5lY3RVUkwsXG4gICAgY2F0ZWdvcml6ZWRFdmFsdWF0aW9uLFxuICAgIHRhcmdldEF1dG9tYXRlZEFuYWx5c2lzRmlsdGVycyxcbiAgICB1c2luZ0FyY2hpdmVkUmVwb3J0LFxuICAgIHVzaW5nQ2FjaGVkUmVwb3J0LFxuICAgIHNldFNob3dOQVNjb3JlcyxcbiAgICBzZXRTaG93TGlzdFZpZXcsXG4gICAgY2xlYXJBbmFseXNpcyxcbiAgICBnZW5lcmF0ZVJlcG9ydCxcbiAgICBoYW5kbGVDbGVhckZpbHRlcnMsXG4gICAgdXBkYXRlRmlsdGVycyxcbiAgXSk7XG5cbiAgY29uc3QgZXJyb3JWaWV3ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvclZpZXdcbiAgICAgICAgdGl0bGU9e3QoJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC5FUlJPUl9USVRMRScpfVxuICAgICAgICBtZXNzYWdlPXtcbiAgICAgICAgICA8VGV4dENvbnRlbnQ+XG4gICAgICAgICAgICA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5wfT57dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLkVSUk9SX1RFWFQnKX08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5zbWFsbH0+e2Vycm9yTWVzc2FnZX08L1RleHQ+XG4gICAgICAgICAgPC9UZXh0Q29udGVudD5cbiAgICAgICAgfVxuICAgICAgICByZXRyeUJ1dHRvbk1lc3NhZ2U9e2dldE1lc3NhZ2VBbmRSZXRyeShlcnJvck1lc3NhZ2UpWzBdfVxuICAgICAgICByZXRyeT17Z2V0TWVzc2FnZUFuZFJldHJ5KGVycm9yTWVzc2FnZSlbMV19XG4gICAgICAvPlxuICAgICk7XG4gIH0sIFt0LCBnZXRNZXNzYWdlQW5kUmV0cnksIGVycm9yTWVzc2FnZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpZ0Vycm9yID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBoYW5kbGVTdGF0ZUVycm9ycyhlcnJvci5tZXNzYWdlKTtcbiAgICB9LFxuICAgIFtoYW5kbGVTdGF0ZUVycm9yc11cbiAgKTtcblxuICBjb25zdCB2aWV3ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIDxMb2FkaW5nVmlldyAvPjtcbiAgICB9XG4gICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKGlzQXV0aEZhaWwoZXJyb3JNZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gZXJyb3JWaWV3O1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRHJhd2VyXG4gICAgICAgICAgb25DcmVhdGU9e2dlbmVyYXRlUmVwb3J0fVxuICAgICAgICAgIGRyYXdlckNvbnRlbnQ9e2Vycm9yVmlld31cbiAgICAgICAgICBpc0NvbnRlbnRBYm92ZT17dHJ1ZX1cbiAgICAgICAgICBvbkVycm9yPXtoYW5kbGVDb25maWdFcnJvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh1c2luZ0FyY2hpdmVkUmVwb3J0IHx8IHVzaW5nQ2FjaGVkUmVwb3J0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QXV0b21hdGVkQW5hbHlzaXNDb25maWdEcmF3ZXJcbiAgICAgICAgICBvbkNyZWF0ZT17Z2VuZXJhdGVSZXBvcnR9XG4gICAgICAgICAgZHJhd2VyQ29udGVudD17ZmlsdGVyZWRDYXRlZ29yaXplZExhYmVsc31cbiAgICAgICAgICBpc0NvbnRlbnRBYm92ZT17ZmFsc2V9XG4gICAgICAgICAgb25FcnJvcj17aGFuZGxlQ29uZmlnRXJyb3J9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRDYXRlZ29yaXplZExhYmVscztcbiAgICB9XG4gIH0sIFtcbiAgICBmaWx0ZXJlZENhdGVnb3JpemVkTGFiZWxzLFxuICAgIHVzaW5nQXJjaGl2ZWRSZXBvcnQsXG4gICAgdXNpbmdDYWNoZWRSZXBvcnQsXG4gICAgaXNMb2FkaW5nLFxuICAgIGVycm9yTWVzc2FnZSxcbiAgICBlcnJvclZpZXcsXG4gICAgZ2VuZXJhdGVSZXBvcnQsXG4gICAgaGFuZGxlQ29uZmlnRXJyb3IsXG4gIF0pO1xuXG4gIGNvbnN0IHJlcG9ydFNvdXJjZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcgfHwgZXJyb3JNZXNzYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICA8TGFiZWwgaWNvbj17PEluZm9DaXJjbGVJY29uIC8+fSBjb2xvcj17J2N5YW4nfT5cbiAgICAgICAge2Ake3VzaW5nQXJjaGl2ZWRSZXBvcnQgPyAnQXJjaGl2ZWQnIDogdXNpbmdDYWNoZWRSZXBvcnQgPyAnQ2FjaGVkJyA6ICdBY3RpdmUnfSByZXBvcnQgbmFtZT0ke3JlcG9ydH1gfVxuICAgICAgPC9MYWJlbD5cbiAgICApO1xuICB9LCBbdXNpbmdBcmNoaXZlZFJlcG9ydCwgdXNpbmdDYWNoZWRSZXBvcnQsIHJlcG9ydCwgaXNMb2FkaW5nLCBlcnJvck1lc3NhZ2VdKTtcblxuICBjb25zdCBoZWFkZXJMYWJlbHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nIHx8IGVycm9yTWVzc2FnZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGV2YWx1YXRpb25zLmZpbHRlcigoZSkgPT4gZS5zY29yZSA+PSBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLk9SQU5HRV9TQ09SRV9USFJFU0hPTEQpO1xuICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IDApIHJldHVybiA8QXV0b21hdGVkQW5hbHlzaXNIZWFkZXJMYWJlbCB0eXBlPVwib2tcIiAvPjtcbiAgICBjb25zdCBbd2FybmluZ3MsIGVycm9yc10gPSBfLnBhcnRpdGlvbihmaWx0ZXJlZCwgKGUpID0+IGUuc2NvcmUgPCBBdXRvbWF0ZWRBbmFseXNpc1Njb3JlLlJFRF9TQ09SRV9USFJFU0hPTEQpO1xuICAgIHJldHVybiAoXG4gICAgICA8TGFiZWxHcm91cD5cbiAgICAgICAge3JlcG9ydFNvdXJjZX1cbiAgICAgICAge2Vycm9ycy5sZW5ndGggPiAwICYmIDxBdXRvbWF0ZWRBbmFseXNpc0hlYWRlckxhYmVsIHR5cGU9eydjcml0aWNhbCd9IGNvdW50PXtlcnJvcnMubGVuZ3RofSAvPn1cbiAgICAgICAge3dhcm5pbmdzLmxlbmd0aCA+IDAgJiYgPEF1dG9tYXRlZEFuYWx5c2lzSGVhZGVyTGFiZWwgdHlwZT17J3dhcm5pbmcnfSBjb3VudD17d2FybmluZ3MubGVuZ3RofSAvPn1cbiAgICAgIDwvTGFiZWxHcm91cD5cbiAgICApO1xuICB9LCBbaXNMb2FkaW5nLCBlcnJvck1lc3NhZ2UsIGV2YWx1YXRpb25zLCByZXBvcnRTb3VyY2VdKTtcblxuICBjb25zdCBoZWFkZXIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPENhcmRIZWFkZXJcbiAgICAgICAgb25FeHBhbmQ9e29uQ2FyZEV4cGFuZH1cbiAgICAgICAgdG9nZ2xlQnV0dG9uUHJvcHM9e3tcbiAgICAgICAgICBpZDogJ2F1dG9tYXRlZC1hbmFseXNpcy10b2dnbGUtZGV0YWlscycsXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiAnRGV0YWlscycsXG4gICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6ICdhdXRvbWF0ZWQtYW5hbHlzaXMtY2FyZC10aXRsZSB0b2dnbGUtZGV0YWlscycsXG4gICAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpc0NhcmRFeHBhbmRlZCxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPENhcmRBY3Rpb25zPnsuLi5wcm9wcy5hY3Rpb25zIHx8IFtdfTwvQ2FyZEFjdGlvbnM+XG4gICAgICAgIDxMZXZlbCBoYXNHdXR0ZXI+XG4gICAgICAgICAgPExldmVsSXRlbT5cbiAgICAgICAgICAgIDxDYXJkVGl0bGUgY29tcG9uZW50PVwiaDRcIj57dCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLkNBUkRfVElUTEUnKX08L0NhcmRUaXRsZT5cbiAgICAgICAgICA8L0xldmVsSXRlbT5cbiAgICAgICAgICA8TGV2ZWxJdGVtPntoZWFkZXJMYWJlbHN9PC9MZXZlbEl0ZW0+XG4gICAgICAgIDwvTGV2ZWw+XG4gICAgICA8L0NhcmRIZWFkZXI+XG4gICAgKTtcbiAgfSwgW3QsIG9uQ2FyZEV4cGFuZCwgaXNDYXJkRXhwYW5kZWQsIGhlYWRlckxhYmVscywgcHJvcHMuYWN0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPERhc2hib2FyZENhcmRcbiAgICAgIGRhc2hib2FyZElkPXtwcm9wcy5kYXNoYm9hcmRJZH1cbiAgICAgIGNhcmRTaXplcz17QXV0b21hdGVkQW5hbHlzaXNDYXJkU2l6ZXN9XG4gICAgICBpZD1cImF1dG9tYXRlZC1hbmFseXNpcy1jYXJkXCJcbiAgICAgIGlzQ29tcGFjdFxuICAgICAgaXNEcmFnZ2FibGU9e3Byb3BzLmlzRHJhZ2dhYmxlfVxuICAgICAgaXNSZXNpemFibGU9e3Byb3BzLmlzUmVzaXphYmxlfVxuICAgICAgaXNGdWxsSGVpZ2h0PXtwcm9wcy5pc0Z1bGxIZWlnaHR9XG4gICAgICBpc0V4cGFuZGVkPXtpc0NhcmRFeHBhbmRlZH1cbiAgICAgIGNhcmRIZWFkZXI9e2hlYWRlcn1cbiAgICA+XG4gICAgICA8Q2FyZEV4cGFuZGFibGVDb250ZW50PlxuICAgICAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgICAgIDxTdGFja0l0ZW0+e2lzTG9hZGluZyB8fCBlcnJvck1lc3NhZ2UgPyBudWxsIDogdG9vbGJhcn08L1N0YWNrSXRlbT5cbiAgICAgICAgICA8U3RhY2tJdGVtIGNsYXNzTmFtZT1cImF1dG9tYXRlZC1hbmFseXNpcy1zY29yZS1maWx0ZXItc3RhY2staXRlbVwiPlxuICAgICAgICAgICAge2lzTG9hZGluZyB8fCBlcnJvck1lc3NhZ2UgPyBudWxsIDogPEF1dG9tYXRlZEFuYWx5c2lzU2NvcmVGaWx0ZXIgLz59XG4gICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgIDxDYXJkQm9keSBpc0ZpbGxlZD17dHJ1ZX0+XG4gICAgICAgICAgICAgIHtyZXBvcnRTdGFsZW5lc3NUZXh0fVxuICAgICAgICAgICAgICB7dmlld31cbiAgICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgIDwvU3RhY2s+XG4gICAgICA8L0NhcmRFeHBhbmRhYmxlQ29udGVudD5cbiAgICA8L0Rhc2hib2FyZENhcmQ+XG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBBdXRvbWF0ZWRBbmFseXNpc0hlYWRlckxhYmVsVHlwZSA9ICdjcml0aWNhbCcgfCAnd2FybmluZycgfCAnb2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9tYXRlZEFuYWx5c2lzSGVhZGVyTGFiZWxQcm9wcyB7XG4gIHR5cGU/OiBBdXRvbWF0ZWRBbmFseXNpc0hlYWRlckxhYmVsVHlwZTtcbiAgY291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBBdXRvbWF0ZWRBbmFseXNpc0hlYWRlckxhYmVsOiBSZWFjdC5GQzxBdXRvbWF0ZWRBbmFseXNpc0hlYWRlckxhYmVsUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IFtpc0hvdmVyZWRPckZvY3VzZWQsIHNldElzSG92ZXJlZE9yRm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUhvdmVyZWRPckZvY3VzZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRJc0hvdmVyZWRPckZvY3VzZWQodHJ1ZSksIFtzZXRJc0hvdmVyZWRPckZvY3VzZWRdKTtcbiAgY29uc3QgaGFuZGxlTm9uSG92ZXJlZE9yRm9jdXNlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHNldElzSG92ZXJlZE9yRm9jdXNlZChmYWxzZSksIFtzZXRJc0hvdmVyZWRPckZvY3VzZWRdKTtcbiAgY29uc3QgbGFiZWwgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBsZXQgaWNvbjogUmVhY3QuUmVhY3ROb2RlO1xuICAgIGxldCBjb2xvcjogJ3JlZCcgfCAnb3JhbmdlJyB8ICdncmVlbic7XG4gICAgbGV0IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlICdjcml0aWNhbCc6XG4gICAgICAgIG9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgZGlzcGF0Y2goYXV0b21hdGVkQW5hbHlzaXNBZGRHbG9iYWxGaWx0ZXJJbnRlbnQoJ1Njb3JlJywgQXV0b21hdGVkQW5hbHlzaXNTY29yZS5SRURfU0NPUkVfVEhSRVNIT0xEKSk7XG4gICAgICAgIH07XG4gICAgICAgIGljb24gPSA8RXhjbGFtYXRpb25DaXJjbGVJY29uIC8+O1xuICAgICAgICBjb2xvciA9ICdyZWQnO1xuICAgICAgICBjaGlsZHJlbiA9IHQoJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC5DUklUSUNBTF9SRVNVTFRTJywgeyBjb3VudDogcHJvcHMuY291bnQgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2FybmluZyc6XG4gICAgICAgIG9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgZGlzcGF0Y2goYXV0b21hdGVkQW5hbHlzaXNBZGRHbG9iYWxGaWx0ZXJJbnRlbnQoJ1Njb3JlJywgQXV0b21hdGVkQW5hbHlzaXNTY29yZS5PUkFOR0VfU0NPUkVfVEhSRVNIT0xEKSk7XG4gICAgICAgIH07XG4gICAgICAgIGljb24gPSA8RXhjbGFtYXRpb25UcmlhbmdsZUljb24gLz47XG4gICAgICAgIGNvbG9yID0gJ29yYW5nZSc7XG4gICAgICAgIGNoaWxkcmVuID0gdCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLldBUk5JTkdfUkVTVUxUUycsIHsgY291bnQ6IHByb3BzLmNvdW50IH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9uQ2xpY2sgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgICAgIGljb24gPSA8Q2hlY2tDaXJjbGVJY29uIC8+O1xuICAgICAgICBjb2xvciA9ICdncmVlbic7XG4gICAgICAgIGNoaWxkcmVuID0gdCgnQXV0b21hdGVkQW5hbHlzaXNDYXJkLkdPT0RfUkVTVUxUUycpO1xuICAgIH1cbiAgICByZXR1cm4geyBvbkNsaWNrLCBpY29uLCBjb2xvciwgY2hpbGRyZW4gfTtcbiAgfSwgW2Rpc3BhdGNoLCB0LCBwcm9wcy5jb3VudCwgcHJvcHMudHlwZV0pO1xuXG4gIGNvbnN0IHsgb25DbGljaywgaWNvbiwgY29sb3IsIGNoaWxkcmVuIH0gPSBsYWJlbDtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbFxuICAgICAgY2xhc3NOYW1lPXtpc0hvdmVyZWRPckZvY3VzZWQgPyAnY2xpY2thYmxlLWxhYmVsLWhvdmVyZWQnIDogdW5kZWZpbmVkfVxuICAgICAgZHJhZ2dhYmxlXG4gICAgICBvbkRyYWdTdGFydD17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Nb3VzZUVudGVyPXtoYW5kbGVIb3ZlcmVkT3JGb2N1c2VkfVxuICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVOb25Ib3ZlcmVkT3JGb2N1c2VkfVxuICAgICAgb25Gb2N1cz17aGFuZGxlSG92ZXJlZE9yRm9jdXNlZH1cbiAgICAgIGljb249e2ljb259XG4gICAgICBjb2xvcj17Y29sb3J9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTGFiZWw+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQXV0b21hdGVkQW5hbHlzaXNDYXJkU2l6ZXM6IERhc2hib2FyZENhcmRTaXplcyA9IHtcbiAgc3Bhbjoge1xuICAgIG1pbmltdW06IDQsXG4gICAgZGVmYXVsdDogNixcbiAgICBtYXhpbXVtOiAxMixcbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IGhlaWdodCByZXNpemluZ1xuICAgIG1pbmltdW06IE51bWJlci5OYU4sXG4gICAgZGVmYXVsdDogTnVtYmVyLk5hTixcbiAgICBtYXhpbXVtOiBOdW1iZXIuTmFOLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzQ2FyZERlc2NyaXB0b3I6IERhc2hib2FyZENhcmREZXNjcmlwdG9yID0ge1xuICBmZWF0dXJlTGV2ZWw6IEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OLFxuICB0aXRsZTogJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZC5DQVJEX1RJVExFJyxcbiAgY2FyZFNpemVzOiBBdXRvbWF0ZWRBbmFseXNpc0NhcmRTaXplcyxcbiAgZGVzY3JpcHRpb246ICdBdXRvbWF0ZWRBbmFseXNpc0NhcmQuQ0FSRF9ERVNDUklQVElPTicsXG4gIGRlc2NyaXB0aW9uRnVsbDogYEF1dG9tYXRlZEFuYWx5c2lzQ2FyZC5DQVJEX0RFU0NSSVBUSU9OX0ZVTExgLFxuICBjb21wb25lbnQ6IEF1dG9tYXRlZEFuYWx5c2lzQ2FyZCxcbiAgcHJvcENvbnRyb2xzOiBbXSxcbiAgYWR2YW5jZWRDb25maWc6IDxBdXRvbWF0ZWRBbmFseXNpc0NvbmZpZ0Zvcm0gLz4sXG4gIGljb246IDxQcm9jZXNzQXV0b21hdGlvbkljb24gLz4sXG4gIGxhYmVsczogW1xuICAgIHtcbiAgICAgIGNvbnRlbnQ6ICdFdmFsdWF0aW9uJyxcbiAgICAgIGNvbG9yOiAnYmx1ZScsXG4gICAgfSxcbiAgXSxcbiAgcHJldmlldzogPEF1dG9tYXRlZEFuYWx5c2lzQ2FyZCBzcGFuPXsxMn0gZGFzaGJvYXJkSWQ9ezB9IGlzRHJhZ2dhYmxlPXtmYWxzZX0gaXNSZXNpemFibGU9e2ZhbHNlfSAvPixcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQXBpU2VydmljZSwgUmVjb3JkaW5nU3RhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSwgTm90aWZpY2F0aW9uQ2hhbm5lbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IE5PX1RBUkdFVCwgVGFyZ2V0LCBUYXJnZXRTZXJ2aWNlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb25jYXRNYXAsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaW5hbGl6ZSxcbiAgZmlyc3QsXG4gIG1hcCxcbiAgbWVyZ2UsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBwYWlyd2lzZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbiAgdGhyb3R0bGVUaW1lLFxufSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IFJFQ09SRElOR19OQU1FID0gJ2Rhc2hib2FyZF9tZXRyaWNzJztcblxuZXhwb3J0IGVudW0gQ29udHJvbGxlclN0YXRlIHtcbiAgVU5LTk9XTiA9IDAsXG4gIE5PX0RBVEEgPSAxLFxuICBSRUFEWSA9IDIsXG59XG5cbmV4cG9ydCBjbGFzcyBKRlJNZXRyaWNzQ2hhcnRDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb250cm9sbGVyU3RhdGU+KENvbnRyb2xsZXJTdGF0ZS5VTktOT1dOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVmQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cGRhdGVzJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYXp5OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2F0dGFjaDogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FwaTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YXJnZXQ6IFRhcmdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uQ2hhbm5lbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZXR0aW5nczogU2V0dGluZ3NTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuX2xhenkgPSB0aGlzLl9yZWZDb3VudCRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHYpID0+IHYgPiAwKSxcbiAgICAgICAgcGFpcndpc2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIGN1cnJdKSA9PiB7XG4gICAgICAgIGlmICghcHJldiAmJiBjdXJyKSB7XG4gICAgICAgICAgLy8gZmlyc3Qgc3Vic2NyaWJlciBqb2luZWRcbiAgICAgICAgICB0aGlzLl9zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2ICYmICFjdXJyKSB7XG4gICAgICAgICAgLy8gbGFzdCBzdWJzY3JpYmVyIGxlZnRcbiAgICAgICAgICB0aGlzLl9zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgYXR0YWNoKCk6IE9ic2VydmFibGU8Q29udHJvbGxlclN0YXRlPiB7XG4gICAgdGhpcy5fcmVmQ291bnQkLm5leHQodGhpcy5fcmVmQ291bnQkLnZhbHVlICsgMSk7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuX3JlZkNvdW50JC5uZXh0KHRoaXMuX3JlZkNvdW50JC52YWx1ZSAtIDEpKVxuICAgICk7XG4gIH1cblxuICByZXF1ZXN0UmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVzJC5uZXh0KCk7XG4gIH1cblxuICBfdGVhckRvd24oKSB7XG4gICAgdGhpcy5fc3RhdGUkLm5leHQoQ29udHJvbGxlclN0YXRlLlVOS05PV04pO1xuICAgIHRoaXMuX2xhenkudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdG9wKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdG9wKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9hdHRhY2gpIHtcbiAgICAgIHRoaXMuX2F0dGFjaC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fYXR0YWNoID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N0b3AoKTtcbiAgICB0aGlzLl9hdHRhY2ggPSBtZXJnZShcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLl91cGRhdGVzJC5waXBlKHRocm90dGxlVGltZSh0aGlzLl9zZXR0aW5ncy5jaGFydENvbnRyb2xsZXJDb25maWcoKS5taW5SZWZyZXNoICogMTAwMCkpLFxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ0NyZWF0ZWQpLFxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ0RlbGV0ZWQpLFxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ1N0b3BwZWQpXG4gICAgICApLnBpcGUoc3dpdGNoTWFwKChfKSA9PiB0aGlzLl90YXJnZXQudGFyZ2V0KCkucGlwZShmaXJzdCgpKSkpLFxuICAgICAgdGhpcy5fdGFyZ2V0LnRhcmdldCgpLnBpcGUodGFwKChfKSA9PiB0aGlzLl9zdGF0ZSQubmV4dChDb250cm9sbGVyU3RhdGUuVU5LTk9XTikpKVxuICAgIClcbiAgICAgIC5waXBlKGNvbmNhdE1hcCgodCkgPT4gdGhpcy5faGFzUmVjb3JkaW5nKHQpKSlcbiAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQodiA/IENvbnRyb2xsZXJTdGF0ZS5SRUFEWSA6IENvbnRyb2xsZXJTdGF0ZS5OT19EQVRBKTtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICB0aGlzLl9hcGlcbiAgICAgICAgICAgIC51cGxvYWRBY3RpdmVSZWNvcmRpbmdUb0dyYWZhbmEoUkVDT1JESU5HX05BTUUpXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSQubmV4dChDb250cm9sbGVyU3RhdGUuUkVBRFkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFzUmVjb3JkaW5nKHRhcmdldDogVGFyZ2V0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKHRhcmdldCA9PT0gTk9fVEFSR0VUKSB7XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYXBpLnRhcmdldEhhc1JlY29yZGluZyh0YXJnZXQsIHtcbiAgICAgIHN0YXRlOiBSZWNvcmRpbmdTdGF0ZS5SVU5OSU5HLFxuICAgICAgbGFiZWxzOiBbYG9yaWdpbj0ke1JFQ09SRElOR19OQU1FfWBdLFxuICAgIH0pO1xuICB9XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQXBpU2VydmljZSwgTUJlYW5NZXRyaWNzIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXQsIFRhcmdldFNlcnZpY2UgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbmNhdE1hcCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbmFsaXplLFxuICBmaXJzdCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgcGFpcndpc2UsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGFwLFxuICB0aHJvdHRsZVRpbWUsXG59IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgTUJlYW5NZXRyaWNzQ2hhcnRDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IFN1YmplY3Q8TUJlYW5NZXRyaWNzPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlZkNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlcyQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGF6eTogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9hdHRhY2g6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hcGk6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFyZ2V0OiBUYXJnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5fbGF6eSA9IHRoaXMuX3JlZkNvdW50JFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodikgPT4gdiA+IDApLFxuICAgICAgICBwYWlyd2lzZSgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcHJldiwgY3Vycl0pID0+IHtcbiAgICAgICAgaWYgKCFwcmV2ICYmIGN1cnIpIHtcbiAgICAgICAgICAvLyBmaXJzdCBzdWJzY3JpYmVyIGpvaW5lZFxuICAgICAgICAgIHRoaXMuX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXYgJiYgIWN1cnIpIHtcbiAgICAgICAgICAvLyBsYXN0IHN1YnNjcmliZXIgbGVmdFxuICAgICAgICAgIHRoaXMuX3N0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhdHRhY2goY2F0ZWdvcnk6IHN0cmluZywgZmllbGRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8TUJlYW5NZXRyaWNzPiB7XG4gICAgdGhpcy5fcmVmQ291bnQkLm5leHQodGhpcy5fcmVmQ291bnQkLnZhbHVlICsgMSk7XG4gICAgaWYgKCF0aGlzLl9tZXRyaWNzLmhhcyhjYXRlZ29yeSkpIHtcbiAgICAgIHRoaXMuX21ldHJpY3Muc2V0KGNhdGVnb3J5LCBbXSk7XG4gICAgfVxuICAgIHRoaXMuX21ldHJpY3MuZ2V0KGNhdGVnb3J5KT8ucHVzaCguLi5maWVsZHMpO1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZkNvdW50JC5uZXh0KHRoaXMuX3JlZkNvdW50JC52YWx1ZSAtIDEpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMuX21ldHJpY3MuZ2V0KGNhdGVnb3J5KSB8fCBbXTtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IFsuLi5vcmlnaW5hbF07XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IHVwZGF0ZWQuZmluZEluZGV4KChlKSA9PiBlID09PSBmaWVsZCk7XG4gICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICB1cGRhdGVkLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3MuZ2V0KGNhdGVnb3J5KT8ucHVzaCguLi51cGRhdGVkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJlcXVlc3RSZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZXMkLm5leHQoKTtcbiAgfVxuXG4gIGxvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIH1cblxuICBfdGVhckRvd24oKSB7XG4gICAgdGhpcy5fc3RhdGUkLm5leHQoe30pO1xuICAgIHRoaXMuX2xhenkudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdG9wKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdG9wKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9hdHRhY2gpIHtcbiAgICAgIHRoaXMuX2F0dGFjaC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fYXR0YWNoID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N0b3AoKTtcbiAgICB0aGlzLl9hdHRhY2ggPSBtZXJnZShcbiAgICAgIHRoaXMuX3VwZGF0ZXMkLnBpcGUoXG4gICAgICAgIHRocm90dGxlVGltZSh0aGlzLl9zZXR0aW5ncy5jaGFydENvbnRyb2xsZXJDb25maWcoKS5taW5SZWZyZXNoICogMTAwMCksXG4gICAgICAgIGNvbmNhdE1hcCgoXykgPT4gdGhpcy5fdGFyZ2V0LnRhcmdldCgpLnBpcGUoZmlyc3QoKSkpXG4gICAgICApLFxuICAgICAgdGhpcy5fdGFyZ2V0LnRhcmdldCgpXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoXykgPT4gdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgICAgIGNvbmNhdE1hcCgodCkgPT4gdGhpcy5fcXVlcnlNZXRyaWNzKHQpKSxcbiAgICAgICAgdGFwKChfKSA9PiB0aGlzLl9sb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHRoaXMuX3N0YXRlJC5uZXh0KHYpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3F1ZXJ5TWV0cmljcyh0YXJnZXQ6IFRhcmdldCk6IE9ic2VydmFibGU8TUJlYW5NZXRyaWNzPiB7XG4gICAgY29uc3QgcTogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIHRoaXMuX21ldHJpY3MuZm9yRWFjaCgoZmllbGRzLCBjYXRlZ29yeSkgPT4ge1xuICAgICAgY29uc3QgcyA9IG0uZ2V0KGNhdGVnb3J5KSB8fCBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKChmKSA9PiBzLmFkZChmKSk7XG4gICAgICBtLnNldChjYXRlZ29yeSwgcyk7XG4gICAgfSk7XG4gICAgbS5mb3JFYWNoKChzLCBrKSA9PiB7XG4gICAgICBsZXQgbCA9IGAke2t9IHtgO1xuICAgICAgcy5mb3JFYWNoKChmKSA9PiAobCArPSBgXFx0JHtmfVxcbmApKTtcbiAgICAgIGwgKz0gJ30nO1xuICAgICAgcS5wdXNoKGwpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0VGFyZ2V0TUJlYW5NZXRyaWNzKHRhcmdldCwgcSk7XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBkZWZhdWx0U2VydmljZXMgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBKRlJNZXRyaWNzQ2hhcnRDb250cm9sbGVyIH0gZnJvbSAnLi9qZnIvSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlcic7XG5pbXBvcnQgeyBNQmVhbk1ldHJpY3NDaGFydENvbnRyb2xsZXIgfSBmcm9tICcuL21iZWFuL01CZWFuTWV0cmljc0NoYXJ0Q29udHJvbGxlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbGxlcnMge1xuICBqZnJDb250cm9sbGVyOiBKRlJNZXRyaWNzQ2hhcnRDb250cm9sbGVyO1xuICBtYmVhbkNvbnRyb2xsZXI6IE1CZWFuTWV0cmljc0NoYXJ0Q29udHJvbGxlcjtcbn1cblxuY29uc3QgQ2hhcnRDb250ZXh0OiBSZWFjdC5Db250ZXh0PENvbnRyb2xsZXJzPiA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICBqZnJDb250cm9sbGVyOiBuZXcgSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlcihcbiAgICBkZWZhdWx0U2VydmljZXMuYXBpLFxuICAgIGRlZmF1bHRTZXJ2aWNlcy50YXJnZXQsXG4gICAgZGVmYXVsdFNlcnZpY2VzLm5vdGlmaWNhdGlvbkNoYW5uZWwsXG4gICAgZGVmYXVsdFNlcnZpY2VzLnNldHRpbmdzXG4gICksXG4gIG1iZWFuQ29udHJvbGxlcjogbmV3IE1CZWFuTWV0cmljc0NoYXJ0Q29udHJvbGxlcihcbiAgICBkZWZhdWx0U2VydmljZXMuYXBpLFxuICAgIGRlZmF1bHRTZXJ2aWNlcy50YXJnZXQsXG4gICAgZGVmYXVsdFNlcnZpY2VzLnNldHRpbmdzXG4gICksXG59KTtcblxuZXhwb3J0IHsgQ2hhcnRDb250ZXh0IH07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ3JlYXRlUmVjb3JkaW5nUHJvcHMgfSBmcm9tICdAYXBwL0NyZWF0ZVJlY29yZGluZy9DcmVhdGVSZWNvcmRpbmcnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2FyZERlc2NyaXB0b3IsIERhc2hib2FyZENhcmRTaXplcywgRGFzaGJvYXJkQ2FyZFR5cGVQcm9wcyB9IGZyb20gJ0BhcHAvRGFzaGJvYXJkL2Rhc2hib2FyZC11dGlscyc7XG5pbXBvcnQgeyBMb2FkaW5nVmlldyB9IGZyb20gJ0BhcHAvTG9hZGluZ1ZpZXcvTG9hZGluZ1ZpZXcnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVRoZW1lJztcbmltcG9ydCB7XG4gIEJ1bGxzZXllLFxuICBCdXR0b24sXG4gIENhcmRBY3Rpb25zLFxuICBDYXJkQm9keSxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlQm9keSxcbiAgRW1wdHlTdGF0ZUljb24sXG4gIEVtcHR5U3RhdGVWYXJpYW50LFxuICBMYWJlbCxcbiAgVGl0bGUsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUljb24sIEV4dGVybmFsTGlua0FsdEljb24sIFN5bmNBbHRJY29uLCBUYWNob21ldGVyQWx0SWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRyYW5zLCB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENhcmQgfSBmcm9tICcuLi8uLi9EYXNoYm9hcmRDYXJkJztcbmltcG9ydCB7IENoYXJ0Q29udGV4dCB9IGZyb20gJy4vLi4vQ2hhcnRDb250ZXh0JztcbmltcG9ydCB7IENvbnRyb2xsZXJTdGF0ZSwgUkVDT1JESU5HX05BTUUgfSBmcm9tICcuL0pGUk1ldHJpY3NDaGFydENvbnRyb2xsZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEpGUk1ldHJpY3NDaGFydENhcmRQcm9wcyBleHRlbmRzIERhc2hib2FyZENhcmRUeXBlUHJvcHMge1xuICBjaGFydEtpbmQ6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgcGVyaW9kOiBudW1iZXI7XG59XG5cbi8vIFRPRE8gdGhlc2UgbmVlZCB0byBiZSBsb2NhbGl6ZWRcbmV4cG9ydCBlbnVtIEpGUk1ldHJpY3NDaGFydEtpbmQge1xuICAnQ29yZSBDb3VudCcgPSAxLFxuICAnVGhyZWFkIENvdW50JyA9IDIsXG4gICdDUFUgTG9hZCcgPSAzLFxuICAnSGVhcCBVc2FnZScgPSA0LFxuICAnTWVtb3J5IFVzYWdlJyA9IDUsXG4gICdUb3RhbCBNZW1vcnknID0gNixcbiAgJ1JlY29yZGluZyBTdGFydCBUaW1lJyA9IDcsXG4gICdSZWNvcmRpbmcgRHVyYXRpb24nID0gOCxcbiAgJ0NsYXNzbG9hZGluZyBTdGF0aXN0aWNzJyA9IDksXG4gICdNZXRhc3BhY2UgU3VtbWFyeScgPSAxMCxcbiAgJ05ldHdvcmsgVXRpbGl6YXRpb24nID0gMTEsXG4gICdNZXRhc3BhY2UgR0MgVGhyZXNob2xkJyA9IDEyLFxuICAnVGhyZWFkIFN0YXRpc3RpY3MnID0gMTMsXG4gICdFeGNlcHRpb24gU3RhdGlzdGljcycgPSAxNCxcbiAgJ1RocmVhZCBDb250ZXh0IFN3aXRjaCBSYXRlJyA9IDE1LFxuICAnQ29tcGlsZXIgU3RhdGlzdGljcycgPSAxNixcblxuICAnU2FmZXBvaW50IER1cmF0aW9uJyA9IDE4LFxuICAnRmlsZSBJL08nID0gMTksXG4gICdDb21waWxlciBUb3RhbCBUaW1lJyA9IDIwLFxuXG4gICdDb21waWxlciBQZWFrIFRpbWUnID0gMjQsXG5cbiAgJ09iamVjdCBBbGxvY2F0aW9uIFNhbXBsZScgPSAzOCxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGtpbmRUb0lkKGtpbmQ6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBKRlJNZXRyaWNzQ2hhcnRLaW5kW2tpbmRdO1xufVxuXG5leHBvcnQgY29uc3QgSkZSTWV0cmljc0NoYXJ0Q2FyZDogUmVhY3QuRkM8SkZSTWV0cmljc0NoYXJ0Q2FyZFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBzZXJ2aWNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBjb250cm9sbGVyQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoQ2hhcnRDb250ZXh0KTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBbdGhlbWVdID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgW2NvbnRyb2xsZXJTdGF0ZSwgc2V0Q29udHJvbGxlclN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKENvbnRyb2xsZXJTdGF0ZS5OT19EQVRBKTtcbiAgY29uc3QgW3JhbmRvbUtleSwgc2V0UmFuZG9tS2V5XSA9IFJlYWN0LnVzZVN0YXRlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSkpO1xuICBjb25zdCBbY2hhcnRTcmMsIHNldENoYXJ0U3JjXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2Rhc2hib2FyZFVybCwgc2V0RGFzaGJvYXJkVXJsXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCB1cGRhdGVSYW5kb21LZXkgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UmFuZG9tS2V5KChwcmV2KSA9PiB7XG4gICAgICBsZXQgbmV4dCA9IHByZXYgKyAxO1xuICAgICAgaWYgKG5leHQgPj0gMTApIHtcbiAgICAgICAgbmV4dCA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfSwgW3NldFJhbmRvbUtleV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKHNlcnZpY2VDb250ZXh0LmFwaS5ncmFmYW5hRGFzaGJvYXJkVXJsKCkuc3Vic2NyaWJlKHNldERhc2hib2FyZFVybCkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBzZXJ2aWNlQ29udGV4dCwgc2V0RGFzaGJvYXJkVXJsXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRhc2hib2FyZFVybCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1ID0gbmV3IFVSTCgnL2Qtc29sby9tYWluJywgZGFzaGJvYXJkVXJsKTtcbiAgICB1LnNlYXJjaFBhcmFtcy5hcHBlbmQoJ3RoZW1lJywgdGhlbWUpO1xuICAgIHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgncGFuZWxJZCcsIFN0cmluZyhraW5kVG9JZChwcm9wcy5jaGFydEtpbmQpKSk7XG4gICAgdS5zZWFyY2hQYXJhbXMuYXBwZW5kKCd0bycsICdub3cnKTtcbiAgICB1LnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2Zyb20nLCBgbm93LSR7cHJvcHMuZHVyYXRpb259c2ApO1xuICAgIHUuc2VhcmNoUGFyYW1zLmFwcGVuZCgncmVmcmVzaCcsIGAke3Byb3BzLnBlcmlvZH1zYCk7XG4gICAgc2V0Q2hhcnRTcmModS50b1N0cmluZygpKTtcbiAgfSwgW2Rhc2hib2FyZFVybCwgc2V0Q29udHJvbGxlclN0YXRlLCB0aGVtZSwgcHJvcHMuY2hhcnRLaW5kLCBwcm9wcy5kdXJhdGlvbiwgcHJvcHMucGVyaW9kLCBzZXRDaGFydFNyY10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRyb2xsZXJDb250ZXh0LmpmckNvbnRyb2xsZXIuYXR0YWNoKCkuc3Vic2NyaWJlKHNldENvbnRyb2xsZXJTdGF0ZSkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250cm9sbGVyQ29udGV4dCwgc2V0Q29udHJvbGxlclN0YXRlXSk7XG5cbiAgY29uc3QgcmVmcmVzaCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb250cm9sbGVyQ29udGV4dC5qZnJDb250cm9sbGVyLnJlcXVlc3RSZWZyZXNoKCk7XG4gIH0sIFtjb250cm9sbGVyQ29udGV4dF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVmcmVzaCgpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihpbnRlcnZhbChwcm9wcy5wZXJpb2QgKiAxMDAwKS5zdWJzY3JpYmUoKCkgPT4gcmVmcmVzaCgpKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIHByb3BzLnBlcmlvZCwgcmVmcmVzaF0pO1xuXG4gIGNvbnN0IHBvcG91dCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoY2hhcnRTcmMgJiYgZGFzaGJvYXJkVXJsKSB7XG4gICAgICB3aW5kb3cub3BlbihjaGFydFNyYywgJ19ibGFuaycpO1xuICAgIH1cbiAgfSwgW2NoYXJ0U3JjLCBkYXNoYm9hcmRVcmxdKTtcblxuICBjb25zdCBjYXJkU3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoY29udHJvbGxlclN0YXRlICE9PSBDb250cm9sbGVyU3RhdGUuUkVBRFkgfHwgcHJvcHMuaXNGdWxsSGVpZ2h0KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGxldCBoZWlnaHQ6IHN0cmluZztcbiAgICBzd2l0Y2ggKHByb3BzLmNoYXJ0S2luZCkge1xuICAgICAgY2FzZSAnQ29yZSBDb3VudCc6XG4gICAgICAgIGhlaWdodCA9ICcyNTBweCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaGVpZ2h0ID0gYDM4MHB4YDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB7IGhlaWdodCB9O1xuICB9LCBbY29udHJvbGxlclN0YXRlLCBwcm9wcy5jaGFydEtpbmQsIHByb3BzLmlzRnVsbEhlaWdodF0pO1xuXG4gIGNvbnN0IHJlc3luY0J1dHRvbiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8QnV0dG9uXG4gICAgICAgIGtleT17MH1cbiAgICAgICAgYXJpYS1sYWJlbD17dCgnQ0hBUlRfQ0FSRC5CVVRUT05TLlNZTkMuTEFCRUwnLCB7IGNoYXJ0S2luZDogcHJvcHMuY2hhcnRLaW5kIH0pfVxuICAgICAgICBvbkNsaWNrPXt1cGRhdGVSYW5kb21LZXl9XG4gICAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICAgIGljb249ezxTeW5jQWx0SWNvbiAvPn1cbiAgICAgICAgaXNEaXNhYmxlZD17IWNoYXJ0U3JjIHx8ICFkYXNoYm9hcmRVcmx9XG4gICAgICAvPlxuICAgICk7XG4gIH0sIFt0LCBwcm9wcy5jaGFydEtpbmQsIHVwZGF0ZVJhbmRvbUtleSwgY2hhcnRTcmMsIGRhc2hib2FyZFVybF0pO1xuXG4gIGNvbnN0IHBvcG91dEJ1dHRvbiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8QnV0dG9uXG4gICAgICAgIGtleT17MX1cbiAgICAgICAgYXJpYS1sYWJlbD17dCgnQ0hBUlRfQ0FSRC5CVVRUT05TLlBPUE9VVC5MQUJFTCcsIHsgY2hhcnRLaW5kOiBwcm9wcy5jaGFydEtpbmQgfSl9XG4gICAgICAgIG9uQ2xpY2s9e3BvcG91dH1cbiAgICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgICAgaWNvbj17PEV4dGVybmFsTGlua0FsdEljb24gLz59XG4gICAgICAgIGlzRGlzYWJsZWQ9eyFjaGFydFNyYyB8fCAhZGFzaGJvYXJkVXJsfVxuICAgICAgLz5cbiAgICApO1xuICB9LCBbdCwgcHJvcHMuY2hhcnRLaW5kLCBwb3BvdXQsIGNoYXJ0U3JjLCBkYXNoYm9hcmRVcmxdKTtcblxuICBjb25zdCBhY3Rpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYSA9IHByb3BzLmFjdGlvbnMgfHwgW107XG4gICAgcmV0dXJuIFtyZXN5bmNCdXR0b24sIHBvcG91dEJ1dHRvbiwgLi4uYV07XG4gIH0sIFtwcm9wcy5hY3Rpb25zLCByZXN5bmNCdXR0b24sIHBvcG91dEJ1dHRvbl0pO1xuXG4gIGNvbnN0IGhlYWRlciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Q2FyZEhlYWRlcj5cbiAgICAgICAgPENhcmRUaXRsZT5cbiAgICAgICAgICB7dCgnQ0hBUlRfQ0FSRC5USVRMRScsIHsgY2hhcnRLaW5kOiBwcm9wcy5jaGFydEtpbmQsIGR1cmF0aW9uOiBwcm9wcy5kdXJhdGlvbiwgcGVyaW9kOiBwcm9wcy5wZXJpb2QgfSl9XG4gICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICA8Q2FyZEFjdGlvbnM+e2NvbnRyb2xsZXJTdGF0ZSA9PT0gQ29udHJvbGxlclN0YXRlLlJFQURZID8gYWN0aW9ucyA6IHByb3BzLmFjdGlvbnN9PC9DYXJkQWN0aW9ucz5cbiAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICApO1xuICB9LCBbcHJvcHMuYWN0aW9ucywgcHJvcHMuY2hhcnRLaW5kLCBwcm9wcy5kdXJhdGlvbiwgcHJvcHMucGVyaW9kLCB0LCBjb250cm9sbGVyU3RhdGUsIGFjdGlvbnNdKTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGVSZWNvcmRpbmcgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaGlzdG9yeS5wdXNoKHtcbiAgICAgIHBhdGhuYW1lOiAnL3JlY29yZGluZ3MvY3JlYXRlJyxcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIHJlc3RhcnRFeGlzdGluZzogdHJ1ZSxcbiAgICAgICAgbmFtZTogUkVDT1JESU5HX05BTUUsXG4gICAgICAgIHRlbXBsYXRlTmFtZTogJ0NvbnRpbnVvdXMnLFxuICAgICAgICB0ZW1wbGF0ZVR5cGU6ICdUQVJHRVQnLFxuICAgICAgICBsYWJlbHM6IFt7IGtleTogJ29yaWdpbicsIHZhbHVlOiBSRUNPUkRJTkdfTkFNRSB9XSxcbiAgICAgICAgZHVyYXRpb246IC0xLFxuICAgICAgICAvLyBUT0RPIHRoZXNlIGFyZSBhcmJpdHJhcnkgZGVmYXVsdHMgdGhhdCB3aWxsIGJlIHNldCBpbiB0aGUgcmVjb3JkaW5nIGNyZWF0aW9uIGZvcm0uXG4gICAgICAgIC8vIFNob3VsZCB0aGVzZSB2YWx1ZXMgYmUgaW5mZXJyZWQgaW4gc29tZSBtb3JlIGludGVsbGlnZW50IHdheT9cbiAgICAgICAgbWF4QWdlOiAxMjAsIC8vIHNlY29uZHNcbiAgICAgICAgbWF4U2l6ZTogMTAwICogMTAyNCAqIDEwMjQsIC8vIGJ5dGVzXG4gICAgICB9IGFzIENyZWF0ZVJlY29yZGluZ1Byb3BzLFxuICAgIH0pO1xuICB9LCBbaGlzdG9yeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPERhc2hib2FyZENhcmRcbiAgICAgIGlkPXtwcm9wcy5jaGFydEtpbmQgKyAnLWNoYXJ0LWNhcmQnfVxuICAgICAgZGFzaGJvYXJkSWQ9e3Byb3BzLmRhc2hib2FyZElkfVxuICAgICAgY2FyZFNpemVzPXtKRlJNZXRyaWNzQ2hhcnRDYXJkU2l6ZXN9XG4gICAgICBpc0NvbXBhY3RcbiAgICAgIHN0eWxlPXtjYXJkU3R5bGV9XG4gICAgICBjYXJkSGVhZGVyPXtoZWFkZXJ9XG4gICAgICB0aXRsZT17cHJvcHMuY2hhcnRLaW5kfVxuICAgICAgaXNEcmFnZ2FibGU9e3Byb3BzLmlzRHJhZ2dhYmxlfVxuICAgICAgaXNSZXNpemFibGU9e3Byb3BzLmlzUmVzaXphYmxlfVxuICAgICAgaXNGdWxsSGVpZ2h0PXtwcm9wcy5pc0Z1bGxIZWlnaHR9XG4gICAgPlxuICAgICAgPENhcmRCb2R5PlxuICAgICAgICB7Y29udHJvbGxlclN0YXRlID09PSBDb250cm9sbGVyU3RhdGUuVU5LTk9XTiA/IChcbiAgICAgICAgICA8TG9hZGluZ1ZpZXcgLz5cbiAgICAgICAgKSA6IGNvbnRyb2xsZXJTdGF0ZSA9PT0gQ29udHJvbGxlclN0YXRlLlJFQURZID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JhZmFuYS1pZnJhbWUtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGlmcmFtZSBjbGFzc05hbWU9XCJkaXNhYmxlZC1wb2ludGVyXCIga2V5PXtjb250cm9sbGVyU3RhdGUgKyByYW5kb21LZXl9IHNyYz17Y2hhcnRTcmN9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPEJ1bGxzZXllPlxuICAgICAgICAgICAgPEVtcHR5U3RhdGUgdmFyaWFudD17RW1wdHlTdGF0ZVZhcmlhbnQubGFyZ2V9PlxuICAgICAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17RGF0YVNvdXJjZUljb259IC8+XG4gICAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9XCJoMlwiIHNpemU9XCJtZFwiPlxuICAgICAgICAgICAgICAgIHt0KCdDSEFSVF9DQVJELk5PX1JFQ09SRElORy5USVRMRScpfVxuICAgICAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICAgICAgICA8RW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgICAgICAgPFRyYW5zXG4gICAgICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IHJlY29yZGluZ05hbWU6IFJFQ09SRElOR19OQU1FIH19XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGxhYmVsOiA8TGFiZWwgY29sb3I9XCJibHVlXCIgaXNDb21wYWN0IC8+IH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ0hBUlRfQ0FSRC5OT19SRUNPUkRJTkcuREVTQ1JJUFRJT05cbiAgICAgICAgICAgICAgICA8L1RyYW5zPlxuICAgICAgICAgICAgICA8L0VtcHR5U3RhdGVCb2R5PlxuICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgb25DbGljaz17aGFuZGxlQ3JlYXRlUmVjb3JkaW5nfT5cbiAgICAgICAgICAgICAgICB7dCgnQ0hBUlRfQ0FSRC5CVVRUT05TLkNSRUFURS5MQUJFTCcpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICAgICA8L0J1bGxzZXllPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkQm9keT5cbiAgICA8L0Rhc2hib2FyZENhcmQ+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgSkZSTWV0cmljc0NoYXJ0Q2FyZFNpemVzOiBEYXNoYm9hcmRDYXJkU2l6ZXMgPSB7XG4gIHNwYW46IHtcbiAgICBtaW5pbXVtOiAzLFxuICAgIGRlZmF1bHQ6IDQsXG4gICAgbWF4aW11bTogMTIsXG4gIH0sXG4gIGhlaWdodDoge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBoZWlnaHQgcmVzaXppbmdcbiAgICBtaW5pbXVtOiBOdW1iZXIuTmFOLFxuICAgIGRlZmF1bHQ6IE51bWJlci5OYU4sXG4gICAgbWF4aW11bTogTnVtYmVyLk5hTixcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBKRlJNZXRyaWNzQ2hhcnRDYXJkRGVzY3JpcHRvcjogRGFzaGJvYXJkQ2FyZERlc2NyaXB0b3IgPSB7XG4gIGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsLkJFVEEsXG4gIHRpdGxlOiAnQ0hBUlRfQ0FSRC5KRlJfTUVUUklDU19DQVJEX1RJVExFJyxcbiAgY2FyZFNpemVzOiBKRlJNZXRyaWNzQ2hhcnRDYXJkU2l6ZXMsXG4gIGRlc2NyaXB0aW9uOiAnQ0hBUlRfQ0FSRC5KRlJfTUVUUklDU19DQVJEX0RFU0NSSVBUSU9OJyxcbiAgZGVzY3JpcHRpb25GdWxsOiAnQ0hBUlRfQ0FSRC5KRlJfTUVUUklDU19DQVJEX0RFU0NSSVBUSU9OX0ZVTEwnLFxuICBjb21wb25lbnQ6IEpGUk1ldHJpY3NDaGFydENhcmQsXG4gIHByb3BDb250cm9sczogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuUEVSRk9STUFOQ0VfTUVUUklDLk5BTUUnLFxuICAgICAga2V5OiAnY2hhcnRLaW5kJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ0hBUlRfQ0FSRC5QUk9QX0NPTlRST0xTLlBFUkZPUk1BTkNFX01FVFJJQy5ERVNDUklQVElPTicsIC8vIFRPRE8gc2hvdWxkIHRoaXMgYmUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2YWx1ZSBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uP1xuICAgICAgdmFsdWVzOiBPYmplY3QudmFsdWVzKEpGUk1ldHJpY3NDaGFydEtpbmQpLmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogT2JqZWN0LnZhbHVlcyhKRlJNZXRyaWNzQ2hhcnRLaW5kKS5maWx0ZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJylbMF0sXG4gICAgICBraW5kOiAnc2VsZWN0JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuREFUQV9XSU5ET1cuTkFNRScsXG4gICAgICBrZXk6ICdkdXJhdGlvbicsXG4gICAgICBkZWZhdWx0VmFsdWU6IDEyMCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ0hBUlRfQ0FSRC5QUk9QX0NPTlRST0xTLkRBVEFfV0lORE9XLkRFU0NSSVBUSU9OJyxcbiAgICAgIGtpbmQ6ICdudW1iZXInLFxuICAgICAgZXh0cmFzOiB7XG4gICAgICAgIG1pbjogMzAsXG4gICAgICAgIG1heDogMzAwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuUkVGUkVTSF9QRVJJT0QuTkFNRScsXG4gICAgICBrZXk6ICdwZXJpb2QnLFxuICAgICAgZGVmYXVsdFZhbHVlOiAxMCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ0hBUlRfQ0FSRC5QUk9QX0NPTlRST0xTLlJFRlJFU0hfUEVSSU9ELkRFU0NSSVBUSU9OJyxcbiAgICAgIGtpbmQ6ICdudW1iZXInLFxuICAgICAgZXh0cmFzOiB7XG4gICAgICAgIG1pbjogNSxcbiAgICAgICAgbWF4OiAxMjAsXG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIGljb246IDxUYWNob21ldGVyQWx0SWNvbiAvPixcbiAgbGFiZWxzOiBbXG4gICAge1xuICAgICAgY29udGVudDogJ0JldGEnLFxuICAgICAgY29sb3I6ICdncmVlbicsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb250ZW50OiAnTWV0cmljcycsXG4gICAgICBjb2xvcjogJ2JsdWUnLFxuICAgIH0sXG4gIF0sXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZWFyRG90U3Bpbm5lclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgTGluZWFyRG90U3Bpbm5lcjogUmVhY3QuRkM8TGluZWFyRG90U3Bpbm5lclByb3BzPiA9ICh7IGNsYXNzTmFtZSwgLi4uXyB9KSA9PiB7XG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzKCdsaW5lYXItZG90LXNwaW5uZXInLCBjbGFzc05hbWUpfT48L2Rpdj47XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBCcmVhZGNydW1iLCBCcmVhZGNydW1iSXRlbSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlQYXRoUHJvcHMge1xuICBraW5kOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgUHJvcGVydHlQYXRoOiBSZWFjdC5GQzxQcm9wZXJ0eVBhdGhQcm9wcz4gPSAoeyBraW5kLCBwYXRoLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IHBhdGhBcnJheTogc3RyaW5nW10gPSBfLnRvUGF0aChwYXRoKTtcblxuICByZXR1cm4gKFxuICAgIDxCcmVhZGNydW1iIHsuLi5wcm9wc30+XG4gICAgICA8QnJlYWRjcnVtYkl0ZW0+e2tpbmR9PC9CcmVhZGNydW1iSXRlbT5cbiAgICAgIHtwYXRoQXJyYXkubWFwKChwcm9wZXJ0eSwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCcmVhZGNydW1iSXRlbSBrZXk9e2Ake3Byb3BlcnR5fS0ke2l9YH0gaXNBY3RpdmU9e2kgPT09IHBhdGhBcnJheS5sZW5ndGggLSAxfT5cbiAgICAgICAgICAgIHtwcm9wZXJ0eX1cbiAgICAgICAgICA8L0JyZWFkY3J1bWJJdGVtPlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9CcmVhZGNydW1iPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3Qtc3R5bGVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IEVtcHR5VGV4dDogUmVhY3QuRkM8eyB0ZXh0OiBzdHJpbmc7IGNsYXNzTmFtZT86IHN0cmluZyB9PiA9ICh7IHRleHQsIGNsYXNzTmFtZSwgLi4ucHJvcHMgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzcGFuIHsuLi5wcm9wc30gY2xhc3NOYW1lPXtjc3MoJ2VtcHR5LXRleHQnLCBjbGFzc05hbWUpfT5cbiAgICAgIHt0ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEV2ZW50VGVtcGxhdGUgfSBmcm9tICdAYXBwL0NyZWF0ZVJlY29yZGluZy9DcmVhdGVSZWNvcmRpbmcnO1xuaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSAnQGFwcC9FdmVudHMvRXZlbnRUeXBlcyc7XG5pbXBvcnQgeyBSdWxlIH0gZnJvbSAnQGFwcC9SdWxlcy9SdWxlcyc7XG5pbXBvcnQge1xuICBBY3RpdmVSZWNvcmRpbmcsXG4gIEFwaVNlcnZpY2UsXG4gIEV2ZW50UHJvYmUsXG4gIFJlY29yZGluZyxcbiAgUmVjb3JkaW5nU3RhdGUsXG4gIFN0b3JlZENyZWRlbnRpYWwsXG59IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5LCBOb3RpZmljYXRpb25NZXNzYWdlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQge1xuICBCdWxsc2V5ZSxcbiAgRGVzY3JpcHRpb25MaXN0LFxuICBEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbixcbiAgRGVzY3JpcHRpb25MaXN0R3JvdXAsXG4gIERlc2NyaXB0aW9uTGlzdFRlcm1IZWxwVGV4dCxcbiAgRGVzY3JpcHRpb25MaXN0VGVybUhlbHBUZXh0QnV0dG9uLFxuICBGbGV4LFxuICBGbGV4SXRlbSxcbiAgTGFiZWwsXG4gIExhYmVsUHJvcHMsXG4gIFBvcG92ZXIsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgQmFuSWNvbiwgUnVubmluZ0ljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBjb21iaW5lTGF0ZXN0LFxuICBjb25jYXRNYXAsXG4gIGRlZmF1bHRJZkVtcHR5LFxuICBmb3JrSm9pbixcbiAgaW50ZXJ2YWwsXG4gIG1hcCxcbiAgbWVyZ2UsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFyZ2V0Tm9kZSB9IGZyb20gJy4uLy4uL3R5cGluZ3MnO1xuaW1wb3J0IHsgRW1wdHlUZXh0IH0gZnJvbSAnLi4vRW1wdHlUZXh0JztcblxuZXhwb3J0IHR5cGUgRGVzY3JpcHRpb25Db25maWcgPSB7XG4gIGtleTogUmVhY3QuS2V5O1xuICB0aXRsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBoZWxwZXJUaXRsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBoZWxwZXJEZXNjcmlwdGlvbjogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250ZW50OiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU2VjdGlvbiA9IChkOiBEZXNjcmlwdGlvbkNvbmZpZykgPT4gKFxuICA8RGVzY3JpcHRpb25MaXN0R3JvdXAga2V5PXtkLmtleX0+XG4gICAgPERlc2NyaXB0aW9uTGlzdFRlcm1IZWxwVGV4dD5cbiAgICAgIDxQb3BvdmVyIGhlYWRlckNvbnRlbnQ9e2QuaGVscGVyVGl0bGV9IGJvZHlDb250ZW50PXtkLmhlbHBlckRlc2NyaXB0aW9ufT5cbiAgICAgICAgPERlc2NyaXB0aW9uTGlzdFRlcm1IZWxwVGV4dEJ1dHRvbj57ZC50aXRsZX08L0Rlc2NyaXB0aW9uTGlzdFRlcm1IZWxwVGV4dEJ1dHRvbj5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L0Rlc2NyaXB0aW9uTGlzdFRlcm1IZWxwVGV4dD5cbiAgICA8RGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24gc3R5bGU9e3sgdXNlclNlbGVjdDogJ3RleHQnLCBjdXJzb3I6ICd0ZXh0JyB9fT57ZC5jb250ZW50fTwvRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24+XG4gIDwvRGVzY3JpcHRpb25MaXN0R3JvdXA+XG4pO1xuXG5leHBvcnQgdHlwZSBSZXNvdXJjZVR5cGVzID0gUmVjb3JkaW5nIHwgRXZlbnRUZW1wbGF0ZSB8IEV2ZW50VHlwZSB8IEV2ZW50UHJvYmUgfCBSdWxlIHwgU3RvcmVkQ3JlZGVudGlhbDtcblxuLy8gTm90ZTogVmFsdWVzIHdpbGwgYmUgd29yZCBzcGxpdCB0byB1c2VkIGFzIGRpc3BsYXkgbmFtZXNcbmV4cG9ydCBjb25zdCBUYXJnZXRPd25lZFJlc291cmNlVHlwZUFzQXJyYXkgPSBbXG4gICdhY3RpdmVSZWNvcmRpbmdzJyxcbiAgJ2FyY2hpdmVkUmVjb3JkaW5ncycsXG4gICdldmVudFRlbXBsYXRlcycsXG4gICdldmVudFR5cGVzJyxcbiAgJ2FnZW50UHJvYmVzJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlQXNBcnJheSA9IFsnYXV0b21hdGVkUnVsZXMnLCAnY3JlZGVudGlhbHMnXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgPSAodHlwZW9mIFRhcmdldE93bmVkUmVzb3VyY2VUeXBlQXNBcnJheSlbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgVGFyZ2V0UmVsYXRlZFJlc291cmNlVHlwZSA9ICh0eXBlb2YgVGFyZ2V0UmVsYXRlZFJlc291cmNlVHlwZUFzQXJyYXkpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBpc093bmVkUmVzb3VyY2UgPSAocmVzb3VyY2VUeXBlOiBUYXJnZXRPd25lZFJlc291cmNlVHlwZSB8IFRhcmdldFJlbGF0ZWRSZXNvdXJjZVR5cGUpID0+IHtcbiAgcmV0dXJuIHJlc291cmNlVHlwZSAhPT0gJ2F1dG9tYXRlZFJ1bGVzJyAmJiByZXNvdXJjZVR5cGUgIT09ICdjcmVkZW50aWFscyc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFyZ2V0T3duZWRSZXNvdXJjZXMgPSAoXG4gIHJlc291cmNlVHlwZTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgfCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlLFxuICB7IHRhcmdldCB9OiBUYXJnZXROb2RlLFxuICBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlXG4pOiBPYnNlcnZhYmxlPFJlc291cmNlVHlwZXNbXT4gPT4ge1xuICBzd2l0Y2ggKHJlc291cmNlVHlwZSkge1xuICAgIGNhc2UgJ2FjdGl2ZVJlY29yZGluZ3MnOlxuICAgICAgcmV0dXJuIGFwaVNlcnZpY2UuZ2V0VGFyZ2V0QWN0aXZlUmVjb3JkaW5ncyh0YXJnZXQpO1xuICAgIGNhc2UgJ2FyY2hpdmVkUmVjb3JkaW5ncyc6XG4gICAgICByZXR1cm4gYXBpU2VydmljZS5nZXRUYXJnZXRBcmNoaXZlZFJlY29yZGluZ3ModGFyZ2V0KTtcbiAgICBjYXNlICdldmVudFRlbXBsYXRlcyc6XG4gICAgICByZXR1cm4gYXBpU2VydmljZS5nZXRUYXJnZXRFdmVudFRlbXBsYXRlcyh0YXJnZXQpO1xuICAgIGNhc2UgJ2V2ZW50VHlwZXMnOlxuICAgICAgcmV0dXJuIGFwaVNlcnZpY2UuZ2V0VGFyZ2V0RXZlbnRUeXBlcyh0YXJnZXQpO1xuICAgIGNhc2UgJ2FnZW50UHJvYmVzJzpcbiAgICAgIHJldHVybiBhcGlTZXJ2aWNlLmdldEFjdGl2ZVByb2Jlc0ZvclRhcmdldCh0YXJnZXQsIHRydWUsIHRydWUpO1xuICAgIGNhc2UgJ2F1dG9tYXRlZFJ1bGVzJzpcbiAgICAgIHJldHVybiBhcGlTZXJ2aWNlLmdldFJ1bGVzKHRydWUsIHRydWUpLnBpcGUoXG4gICAgICAgIGNvbmNhdE1hcCgocnVsZXMpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXNrcyA9IHJ1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgIGFwaVNlcnZpY2UuaXNUYXJnZXRNYXRjaGVkKHIubWF0Y2hFeHByZXNzaW9uLCB0YXJnZXQpLnBpcGUobWFwKChvaykgPT4gKG9rID8gW3JdIDogW10pKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmb3JrSm9pbih0YXNrcykucGlwZShcbiAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KFtbXSBhcyBSdWxlW11dKSxcbiAgICAgICAgICAgIG1hcCgocnVsZXMpID0+IHJ1bGVzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldi5jb25jYXQoY3VycikpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIGNhc2UgJ2NyZWRlbnRpYWxzJzpcbiAgICAgIHJldHVybiBhcGlTZXJ2aWNlLmdldENyZWRlbnRpYWxzKHRydWUsIHRydWUpLnBpcGUoXG4gICAgICAgIGNvbmNhdE1hcCgoY3JlZGVudGlhbHMpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXNrcyA9IGNyZWRlbnRpYWxzLm1hcCgoY3JkKSA9PlxuICAgICAgICAgICAgYXBpU2VydmljZS5pc1RhcmdldE1hdGNoZWQoY3JkLm1hdGNoRXhwcmVzc2lvbiwgdGFyZ2V0KS5waXBlKG1hcCgob2spID0+IChvayA/IFtjcmRdIDogW10pKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmb3JrSm9pbih0YXNrcykucGlwZShcbiAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KFtbXSBhcyBTdG9yZWRDcmVkZW50aWFsW11dKSxcbiAgICAgICAgICAgIG1hcCgoY3JlZGVudGlhbHMpID0+IGNyZWRlbnRpYWxzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldi5jb25jYXQoY3VycikpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJlc291cmNlOiAke3Jlc291cmNlVHlwZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlc291cmNlQWRkZWRPck1vZGlmaWVkRXZlbnRzID0gKHJlc291cmNlVHlwZTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgfCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlKSA9PiB7XG4gIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7XG4gICAgY2FzZSAnYWN0aXZlUmVjb3JkaW5ncyc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5BY3RpdmVSZWNvcmRpbmdDcmVhdGVkLFxuICAgICAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5TbmFwc2hvdENyZWF0ZWQsXG4gICAgICAgIE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ1N0b3BwZWQsIC8vIFN0YXRlIFVwZGF0ZVxuICAgICAgXTtcbiAgICBjYXNlICdhcmNoaXZlZFJlY29yZGluZ3MnOlxuICAgICAgcmV0dXJuIFtOb3RpZmljYXRpb25DYXRlZ29yeS5BcmNoaXZlZFJlY29yZGluZ0NyZWF0ZWQsIE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ1NhdmVkXTtcbiAgICBjYXNlICdldmVudFRlbXBsYXRlcyc6XG4gICAgICByZXR1cm4gW05vdGlmaWNhdGlvbkNhdGVnb3J5LlRlbXBsYXRlVXBsb2FkZWRdO1xuICAgIGNhc2UgJ2V2ZW50VHlwZXMnOlxuICAgICAgcmV0dXJuIFtdO1xuICAgIGNhc2UgJ2FnZW50UHJvYmVzJzpcbiAgICAgIHJldHVybiBbTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUHJvYmVUZW1wbGF0ZUFwcGxpZWRdO1xuICAgIGNhc2UgJ2F1dG9tYXRlZFJ1bGVzJzpcbiAgICAgIHJldHVybiBbTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUnVsZUNyZWF0ZWQsIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJ1bGVVcGRhdGVkXTtcbiAgICBjYXNlICdjcmVkZW50aWFscyc6XG4gICAgICByZXR1cm4gW05vdGlmaWNhdGlvbkNhdGVnb3J5LkNyZWRlbnRpYWxzU3RvcmVkLCBOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRDcmVkZW50aWFsc1N0b3JlZF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVzb3VyY2U6ICR7cmVzb3VyY2VUeXBlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VSZW1vdmVkRXZlbnRzID0gKHJlc291cmNlVHlwZTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgfCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlKSA9PiB7XG4gIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7XG4gICAgY2FzZSAnYWN0aXZlUmVjb3JkaW5ncyc6XG4gICAgICByZXR1cm4gW05vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ0RlbGV0ZWQsIE5vdGlmaWNhdGlvbkNhdGVnb3J5LlNuYXBzaG90RGVsZXRlZF07XG4gICAgY2FzZSAnYXJjaGl2ZWRSZWNvcmRpbmdzJzpcbiAgICAgIHJldHVybiBbTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQXJjaGl2ZWRSZWNvcmRpbmdEZWxldGVkXTtcbiAgICBjYXNlICdldmVudFRlbXBsYXRlcyc6XG4gICAgICByZXR1cm4gW05vdGlmaWNhdGlvbkNhdGVnb3J5LlRlbXBsYXRlRGVsZXRlZF07XG4gICAgY2FzZSAnZXZlbnRUeXBlcyc6XG4gICAgICByZXR1cm4gW107XG4gICAgY2FzZSAnYWdlbnRQcm9iZXMnOlxuICAgICAgcmV0dXJuIFtOb3RpZmljYXRpb25DYXRlZ29yeS5Qcm9iZXNSZW1vdmVkXTtcbiAgICBjYXNlICdhdXRvbWF0ZWRSdWxlcyc6XG4gICAgICByZXR1cm4gW05vdGlmaWNhdGlvbkNhdGVnb3J5LlJ1bGVEZWxldGVkXTtcbiAgICBjYXNlICdjcmVkZW50aWFscyc6XG4gICAgICByZXR1cm4gW05vdGlmaWNhdGlvbkNhdGVnb3J5LkNyZWRlbnRpYWxzRGVsZXRlZCwgTm90aWZpY2F0aW9uQ2F0ZWdvcnkuVGFyZ2V0Q3JlZGVudGlhbHNEZWxldGVkXTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCByZXNvdXJjZTogJHtyZXNvdXJjZVR5cGV9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCB0eXBlIFBhdGNoRm4gPSAoXG4gIGFycjogUmVzb3VyY2VUeXBlc1tdLFxuICBldmVudERhdGE6IE5vdGlmaWNhdGlvbk1lc3NhZ2UsXG4gIHJlbW92ZWQ/OiBib29sZWFuXG4pID0+IE9ic2VydmFibGU8UmVzb3VyY2VUeXBlc1tdPjtcblxuZXhwb3J0IGNvbnN0IGdldFJlc291cmNlTGlzdFBhdGNoRm4gPSAoXG4gIHJlc291cmNlVHlwZTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgfCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlLFxuICB7IHRhcmdldCB9OiBUYXJnZXROb2RlLFxuICBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlXG4pOiBQYXRjaEZuID0+IHtcbiAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHtcbiAgICBjYXNlICdhY3RpdmVSZWNvcmRpbmdzJzpcbiAgICBjYXNlICdhcmNoaXZlZFJlY29yZGluZ3MnOlxuICAgICAgcmV0dXJuIChhcnI6IFJlY29yZGluZ1tdLCBldmVudERhdGE6IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIHJlbW92ZWQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZGluZzogUmVjb3JkaW5nID0gZXZlbnREYXRhLm1lc3NhZ2UucmVjb3JkaW5nO1xuICAgICAgICBsZXQgbmV3QXJyID0gYXJyLmZpbHRlcigocikgPT4gci5uYW1lICE9PSByZWNvcmRpbmcubmFtZSk7XG4gICAgICAgIGlmICghcmVtb3ZlZCkge1xuICAgICAgICAgIG5ld0FyciA9IG5ld0Fyci5jb25jYXQoW3JlY29yZGluZ10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihuZXdBcnIpO1xuICAgICAgfTtcbiAgICBjYXNlICdldmVudFRlbXBsYXRlcyc6XG4gICAgICByZXR1cm4gKGFycjogRXZlbnRUZW1wbGF0ZVtdLCBldmVudERhdGE6IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIHJlbW92ZWQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlOiBFdmVudFRlbXBsYXRlID0gZXZlbnREYXRhLm1lc3NhZ2UudGVtcGxhdGU7XG4gICAgICAgIGxldCBuZXdBcnIgPSBhcnIuZmlsdGVyKChyKSA9PiByLm5hbWUgIT09IHRlbXBsYXRlLm5hbWUpO1xuICAgICAgICBpZiAoIXJlbW92ZWQpIHtcbiAgICAgICAgICBuZXdBcnIgPSBuZXdBcnIuY29uY2F0KFt0ZW1wbGF0ZV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihuZXdBcnIpO1xuICAgICAgfTtcbiAgICBjYXNlICdhZ2VudFByb2Jlcyc6XG4gICAgICByZXR1cm4gKGFycjogRXZlbnRQcm9iZVtdLCBldmVudERhdGE6IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIHJlbW92ZWQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgc3VwcG9ydCByZW1vdmUgYWxsXG4gICAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9iZXMgPSAoZXZlbnREYXRhLm1lc3NhZ2UuZXZlbnRzIGFzIEV2ZW50UHJvYmVbXSkgfHwgW107XG4gICAgICAgIGNvbnN0IHByb2JlSWRzID0gcHJvYmVzLm1hcCgocCkgPT4gcC5pZCk7XG4gICAgICAgIHJldHVybiBvZihbLi4uYXJyLmZpbHRlcigocHJvYmUpID0+ICFwcm9iZUlkcy5pbmNsdWRlcyhwcm9iZS5pZCkpLCAuLi5wcm9iZXNdKTtcbiAgICAgIH07XG4gICAgY2FzZSAnYXV0b21hdGVkUnVsZXMnOlxuICAgICAgcmV0dXJuIChhcnI6IFJ1bGVbXSwgZXZlbnREYXRhOiBOb3RpZmljYXRpb25NZXNzYWdlLCByZW1vdmVkPzogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCBydWxlOiBSdWxlID0gZXZlbnREYXRhLm1lc3NhZ2U7XG5cbiAgICAgICAgcmV0dXJuIGFwaVNlcnZpY2UuaXNUYXJnZXRNYXRjaGVkKHJ1bGUubWF0Y2hFeHByZXNzaW9uLCB0YXJnZXQpLnBpcGUoXG4gICAgICAgICAgbWFwKChvaykgPT4ge1xuICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdBcnIgPSBhcnIuZmlsdGVyKChyKSA9PiByLm5hbWUgIT09IHJ1bGUubmFtZSk7XG4gICAgICAgICAgICAgIGlmICghcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgIG5ld0FyciA9IG5ld0Fyci5jb25jYXQoW3J1bGVdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbmV3QXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICBjYXNlICdjcmVkZW50aWFscyc6XG4gICAgICByZXR1cm4gKGFycjogU3RvcmVkQ3JlZGVudGlhbFtdLCBldmVudERhdGE6IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIHJlbW92ZWQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWw6IFN0b3JlZENyZWRlbnRpYWwgPSBldmVudERhdGEubWVzc2FnZTtcblxuICAgICAgICByZXR1cm4gYXBpU2VydmljZS5pc1RhcmdldE1hdGNoZWQoY3JlZGVudGlhbC5tYXRjaEV4cHJlc3Npb24sIHRhcmdldCkucGlwZShcbiAgICAgICAgICBtYXAoKG9rKSA9PiB7XG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgbGV0IG5ld0FyciA9IGFyci5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGNyZWRlbnRpYWwuaWQpO1xuICAgICAgICAgICAgICBpZiAoIXJlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdBcnIgPSBuZXdBcnIuY29uY2F0KFtjcmVkZW50aWFsXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0FycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVzb3VyY2U6ICR7cmVzb3VyY2VUeXBlfWApO1xuICB9XG59O1xuXG4vLyBUT0RPOiBSZXZpc2l0IHdoZW4gdXBkYXRpbmcgdG8gcmVhY3Qtcm91dGVyIHY2XG5leHBvcnQgY29uc3QgZ2V0TGlua1Byb3BzRm9yVGFyZ2V0UmVzb3VyY2UgPSAoXG4gIHJlc291cmNlVHlwZTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgfCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlXG4pOiBSZWFjdC5Db21wb25lbnRQcm9wczxMaW5rPiA9PiB7XG4gIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7XG4gICAgY2FzZSAnYWN0aXZlUmVjb3JkaW5ncyc6XG4gICAgICByZXR1cm4geyB0bzogeyBwYXRobmFtZTogJy9yZWNvcmRpbmdzJywgc2VhcmNoOiAnP3RhYj1hY3RpdmUtcmVjb3JkaW5nJyB9IH07XG4gICAgY2FzZSAnYXJjaGl2ZWRSZWNvcmRpbmdzJzpcbiAgICAgIHJldHVybiB7IHRvOiB7IHBhdGhuYW1lOiAnL3JlY29yZGluZ3MnLCBzZWFyY2g6ICc/dGFiPWFyY2hpdmVkLXJlY29yZGluZycgfSB9O1xuICAgIGNhc2UgJ2V2ZW50VGVtcGxhdGVzJzpcbiAgICAgIHJldHVybiB7IHRvOiB7IHBhdGhuYW1lOiAnL2V2ZW50cycsIHNlYXJjaDogJz9ldmVudFRhYj1ldmVudC10ZW1wbGF0ZScgfSB9O1xuICAgIGNhc2UgJ2V2ZW50VHlwZXMnOlxuICAgICAgcmV0dXJuIHsgdG86IHsgcGF0aG5hbWU6ICcvZXZlbnRzJywgc2VhcmNoOiAnP2V2ZW50VGFiPWV2ZW50LXR5cGUnIH0gfTtcbiAgICBjYXNlICdhZ2VudFByb2Jlcyc6XG4gICAgICByZXR1cm4geyB0bzogeyBwYXRobmFtZTogJy9ldmVudHMnLCBzZWFyY2g6ICc/YWdlbnRUYWI9YWdlbnQtcHJvYmUnIH0gfTtcbiAgICBjYXNlICdhdXRvbWF0ZWRSdWxlcyc6XG4gICAgICByZXR1cm4geyB0bzogeyBwYXRobmFtZTogJy9ydWxlcycgfSB9O1xuICAgIGNhc2UgJ2NyZWRlbnRpYWxzJzpcbiAgICAgIHJldHVybiB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlY3VyaXR5JyB9IH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVzb3VyY2U6ICR7cmVzb3VyY2VUeXBlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgQWN0aXZlUmVjRGV0YWlsOiBSZWFjdC5GQzx7IHJlc291cmNlczogQWN0aXZlUmVjb3JkaW5nW10gfT4gPSAoeyByZXNvdXJjZXMsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3Qgc3RhdGVHcm91cENvbmZpZ3MgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIHtcbiAgICAgICAgZ3JvdXBMYWJlbDogJ1J1bm5pbmcnLFxuICAgICAgICBjb2xvcjogJ2dyZWVuJyxcbiAgICAgICAgaWNvbjogPFJ1bm5pbmdJY29uIGNvbG9yPVwiZ3JlZW5cIiAvPixcbiAgICAgICAgaXRlbXM6IHJlc291cmNlcy5maWx0ZXIoKHJlYykgPT4gcmVjLnN0YXRlID09PSBSZWNvcmRpbmdTdGF0ZS5SVU5OSU5HKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGdyb3VwTGFiZWw6ICdTdG9wcGVkJyxcbiAgICAgICAgY29sb3I6ICdvcmFuZ2UnLFxuICAgICAgICBpY29uOiA8QmFuSWNvbiBjb2xvcj1cIm9yYW5nZVwiIC8+LFxuICAgICAgICBpdGVtczogcmVzb3VyY2VzLmZpbHRlcigocmVjKSA9PiByZWMuc3RhdGUgPT09IFJlY29yZGluZ1N0YXRlLlNUT1BQRUQpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtyZXNvdXJjZXNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGVzY3JpcHRpb25MaXN0PlxuICAgICAgPERlc2NyaXB0aW9uTGlzdEdyb3VwPlxuICAgICAgICA8RGVzY3JpcHRpb25MaXN0VGVybUhlbHBUZXh0PlJlY29yZGluZyBTdGF0dXM8L0Rlc2NyaXB0aW9uTGlzdFRlcm1IZWxwVGV4dD5cbiAgICAgICAgPERlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uPlxuICAgICAgICAgIDxGbGV4IHsuLi5wcm9wc30+XG4gICAgICAgICAgICB7c3RhdGVHcm91cENvbmZpZ3MubWFwKCh7IGdyb3VwTGFiZWwsIGl0ZW1zLCBjb2xvciwgaWNvbiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxGbGV4IGtleT17Z3JvdXBMYWJlbH0+XG4gICAgICAgICAgICAgICAgPEZsZXhJdGVtIHNwYWNlcj17eyBkZWZhdWx0OiAnc3BhY2VyU20nIH19PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxLjFlbScgfX0+e2l0ZW1zLmxlbmd0aH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaWNvbj17aWNvbn0gY29sb3I9e2NvbG9yIGFzIExhYmVsUHJvcHNbJ2NvbG9yJ119PlxuICAgICAgICAgICAgICAgICAgICB7Z3JvdXBMYWJlbH1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9GbGV4PlxuICAgICAgICA8L0Rlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uPlxuICAgICAgPC9EZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICA8L0Rlc2NyaXB0aW9uTGlzdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBOb3RoaW5nOiBSZWFjdC5GQzx7IHJlc291cmNlczogUmVzb3VyY2VUeXBlc1tdIH0+ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxCdWxsc2V5ZT5cbiAgICAgIDxFbXB0eVRleHQgdGV4dD17J05vdGhpbmcgdG8gc2hvdy4nfSAvPlxuICAgIDwvQnVsbHNleWU+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRSZXNvdXJjZURldGFpbHMgPSAoXG4gIHJlc291cmNlVHlwZTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGUgfCBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlXG4pOiBSZWFjdC5GQzx7IHJlc291cmNlczogUmVzb3VyY2VUeXBlc1tdIH0+ID0+IHtcbiAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHtcbiAgICBjYXNlICdhY3RpdmVSZWNvcmRpbmdzJzpcbiAgICAgIHJldHVybiBBY3RpdmVSZWNEZXRhaWw7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBOb3RoaW5nO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdFVybEZyb21FdmVudCA9IChldmVudDogTm90aWZpY2F0aW9uTWVzc2FnZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBldmVudC5tZXNzYWdlLnRhcmdldCB8fCBldmVudC5tZXNzYWdlLnRhcmdldElkO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVJlc291cmNlcyA9IDxSID0gUmVzb3VyY2VUeXBlcyw+KFxuICB0YXJnZXROb2RlOiBUYXJnZXROb2RlLFxuICByZXNvdXJjZVR5cGU6IFRhcmdldE93bmVkUmVzb3VyY2VUeXBlIHwgVGFyZ2V0UmVsYXRlZFJlc291cmNlVHlwZVxuKTogeyByZXNvdXJjZXM6IFJbXTsgZXJyb3I/OiBFcnJvcjsgbG9hZGluZz86IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IHsgYXBpLCBub3RpZmljYXRpb25DaGFubmVsLCBzZXR0aW5ncyB9ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcblxuICBjb25zdCBbcmVzb3VyY2VzLCBzZXRSZXNvdXJjZXNdID0gUmVhY3QudXNlU3RhdGU8UmVzb3VyY2VUeXBlc1tdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlPEVycm9yPigpO1xuXG4gIGNvbnN0IHRhcmdldFN1YmplY3RSZWYgPSBSZWFjdC51c2VSZWYobmV3IFN1YmplY3Q8VGFyZ2V0Tm9kZT4oKSk7XG4gIGNvbnN0IHRhcmdldFN1YmplY3QgPSB0YXJnZXRTdWJqZWN0UmVmLmN1cnJlbnQ7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICB0YXJnZXRTdWJqZWN0XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgodG4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc291cmNlT2JzID0gZ2V0VGFyZ2V0T3duZWRSZXNvdXJjZXMocmVzb3VyY2VUeXBlLCB0biwgYXBpKS5waXBlKFxuICAgICAgICAgICAgICBtYXAoKHJzOiBSZXNvdXJjZVR5cGVzW10pID0+ICh7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBycyxcbiAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogRXJyb3IpID0+XG4gICAgICAgICAgICAgICAgb2Yoe1xuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3MuYXV0b1JlZnJlc2hFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlT2JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgICByZXNvdXJjZU9icyxcbiAgICAgICAgICAgICAgaW50ZXJ2YWwoc2V0dGluZ3MuYXV0b1JlZnJlc2hQZXJpb2QoKSAqIHNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKSkucGlwZShjb25jYXRNYXAoKCkgPT4gcmVzb3VyY2VPYnMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgcmVzb3VyY2VzLCBlcnJvciB9KSA9PiB7XG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHNldFJlc291cmNlcyhyZXNvdXJjZXMpO1xuICAgICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIHNldExvYWRpbmcsIHNldEVycm9yLCBzZXRSZXNvdXJjZXMsIGFwaSwgc2V0dGluZ3MsIHRhcmdldFN1YmplY3QsIHJlc291cmNlVHlwZV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGF0Y2hFdmVudENvbmZpZyA9IFtcbiAgICAgIHtcbiAgICAgICAgY2F0ZWdvcmllczogZ2V0UmVzb3VyY2VBZGRlZE9yTW9kaWZpZWRFdmVudHMocmVzb3VyY2VUeXBlKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNhdGVnb3JpZXM6IGdldFJlc291cmNlUmVtb3ZlZEV2ZW50cyhyZXNvdXJjZVR5cGUpLFxuICAgICAgICBkZWxldGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgcGF0Y2hFdmVudENvbmZpZy5mb3JFYWNoKCh7IGNhdGVnb3JpZXMsIGRlbGV0ZWQgfSkgPT4ge1xuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICB0YXJnZXRTdWJqZWN0XG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHRuKSA9PlxuICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtvZih0biksIG1lcmdlKC4uLmNhdGVnb3JpZXMubWFwKChjYXQpID0+IG5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoY2F0KSkpXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3RhcmdldE5vZGUsIGV2ZW50XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkVXJsID0gZ2V0Q29ubmVjdFVybEZyb21FdmVudChldmVudCk7XG4gICAgICAgICAgICBjb25zdCBpc093bmVkID0gaXNPd25lZFJlc291cmNlKHJlc291cmNlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWlzT3duZWQgfHwgKGV4dHJhY3RlZFVybCAmJiBleHRyYWN0ZWRVcmwgPT09IHRhcmdldE5vZGUudGFyZ2V0LmNvbm5lY3RVcmwpKSB7XG4gICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgIHNldFJlc291cmNlcygob2xkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXZvaWQgYWNjZXNzaW5nIHN0YXRlIGRpcmVjdGx5LCB3aGljaFxuICAgICAgICAgICAgICAgIC8vIGNhdXNlcyB0aGUgZWZmZWN0IHRvIHJ1biBldmVyeSB0aW1lXG4gICAgICAgICAgICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VMaXN0UGF0Y2hGbihyZXNvdXJjZVR5cGUsIHRhcmdldE5vZGUsIGFwaSkob2xkLCBldmVudCwgZGVsZXRlZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSZXNvdXJjZXMocnMpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBzZXRMb2FkaW5nLCBhcGksIHRhcmdldFN1YmplY3QsIHJlc291cmNlVHlwZSwgbm90aWZpY2F0aW9uQ2hhbm5lbCwgc2V0UmVzb3VyY2VzLCBzZXRFcnJvcl0pO1xuXG4gIC8vIE5lZWQgdG8gY2FsbCBhZnRlciByZWdpc3RlcmluZyBsaXN0ZW5lcnNcbiAgLy8gRG8gbm90IHJlb3JkZXJcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB0YXJnZXRTdWJqZWN0Lm5leHQodGFyZ2V0Tm9kZSk7XG4gIH0sIFt0YXJnZXROb2RlLCB0YXJnZXRTdWJqZWN0XSk7XG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgbG9hZGluZzogbG9hZGluZyxcbiAgICByZXNvdXJjZXM6IHJlc291cmNlcyBhcyBSW10sXG4gIH07XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBDbGlwYm9hcmRDb3B5QnV0dG9uLCBDb2RlQmxvY2ssIENvZGVCbG9ja0FjdGlvbiwgQ29kZUJsb2NrQ29kZSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoRXhwcmVzc2lvbkhpbnRQcm9wcyB7XG4gIHRhcmdldD86IFRhcmdldDtcbn1cblxuZXhwb3J0IGNvbnN0IE1hdGNoRXhwcmVzc2lvbkhpbnQ6IFJlYWN0LkZDPE1hdGNoRXhwcmVzc2lvbkhpbnRQcm9wcz4gPSAoeyB0YXJnZXQsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBleGFtcGxlRXhwcmVzc2lvbiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBib2R5OiBzdHJpbmc7XG4gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5hbGlhcyB8fCAhdGFyZ2V0LmNvbm5lY3RVcmwpIHtcbiAgICAgIGJvZHkgPSAndHJ1ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkgPSBgdGFyZ2V0LmFsaWFzID09ICcke3RhcmdldC5hbGlhc30nIHx8IHRhcmdldC5hbm5vdGF0aW9ucy5jcnlvc3RhdFsnUE9SVCddID09ICR7dGFyZ2V0LmFubm90YXRpb25zPy5jcnlvc3RhdFsnUE9SVCddfWA7XG4gICAgfVxuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5LCBudWxsLCAyKTtcbiAgICBib2R5ID0gYm9keS5zdWJzdHJpbmcoMSwgYm9keS5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gYm9keTtcbiAgfSwgW3RhcmdldF0pO1xuXG4gIGNvbnN0IG9uU2F2ZVRvQ2xpcGJvYXJkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldENvcGllZCh0cnVlKTtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChleGFtcGxlRXhwcmVzc2lvbik7XG4gIH0sIFtzZXRDb3BpZWQsIGV4YW1wbGVFeHByZXNzaW9uXSk7XG5cbiAgY29uc3QgYWN0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29kZUJsb2NrQWN0aW9uPlxuICAgICAgICA8Q2xpcGJvYXJkQ29weUJ1dHRvblxuICAgICAgICAgIGlkPVwibWF0Y2gtZXhwcmVzc2lvbi1jb3B5LWJ1dHRvblwiXG4gICAgICAgICAgdGV4dElkPVwibWF0Y2gtZXhwcmVzc2lvbi1jb2RlLWNvbnRlbnRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3B5IHRvIGNsaXBib2FyZFwiXG4gICAgICAgICAgb25DbGljaz17b25TYXZlVG9DbGlwYm9hcmR9XG4gICAgICAgICAgZXhpdERlbGF5PXtjb3BpZWQgPyAxNTAwIDogNjAwfVxuICAgICAgICAgIG1heFdpZHRoPVwiMTEwcHhcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICAgICAgb25Ub29sdGlwSGlkZGVuPXsoKSA9PiBzZXRDb3BpZWQoZmFsc2UpfVxuICAgICAgICA+XG4gICAgICAgICAge2NvcGllZCA/ICdDb3BpZWQhJyA6ICdDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCd9XG4gICAgICAgIDwvQ2xpcGJvYXJkQ29weUJ1dHRvbj5cbiAgICAgIDwvQ29kZUJsb2NrQWN0aW9uPlxuICAgICk7XG4gIH0sIFtjb3BpZWQsIG9uU2F2ZVRvQ2xpcGJvYXJkLCBzZXRDb3BpZWRdKTtcblxuICByZXR1cm4gKFxuICAgIDxDb2RlQmxvY2sgey4uLnByb3BzfSBhY3Rpb25zPXthY3Rpb25zfT5cbiAgICAgIDxDb2RlQmxvY2tDb2RlPntleGFtcGxlRXhwcmVzc2lvbn08L0NvZGVCbG9ja0NvZGU+XG4gICAgPC9Db2RlQmxvY2s+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBDb2xsYXBzZUljb246IFJlYWN0LkZDPFJlYWN0LkhUTUxQcm9wczxTVkdFbGVtZW50Pj4gPSAoeyBzdHlsZSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgc3R5bGU9e3tcbiAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246ICctMC4xMjVlbScsXG4gICAgICB9fVxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICBoZWlnaHQ9XCIxZW1cIlxuICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgdmlld0JveD1cIjAgMCA0NDggNTEyXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICByb2xlPVwiaW1nXCJcbiAgICA+XG4gICAgICA8cGF0aCBkPVwiTTQuNjg2IDQyNy4zMTRMMTA0IDMyOGwtMzIuOTIyLTMxLjAyOUM1NS45NTggMjgxLjg1MSA2Ni42NjYgMjU2IDg4LjA0OCAyNTZoMTEyQzIxMy4zMDMgMjU2IDIyNCAyNjYuNzQ1IDIyNCAyODB2MTEyYzAgMjEuMzgyLTI1LjgwMyAzMi4wOS00MC45MjIgMTYuOTcxTDE1MiAzNzZsLTk5LjMxNCA5OS4zMTRjLTYuMjQ4IDYuMjQ4LTE2LjM3OSA2LjI0OC0yMi42MjcgMEw0LjY4NiA0NDkuOTQxYy02LjI0OC02LjI0OC02LjI0OC0xNi4zNzkgMC0yMi42Mjd6TTQ0My4zMTQgODQuNjg2TDM0NCAxODRsMzIuOTIyIDMxLjAyOWMxNS4xMiAxNS4xMiA0LjQxMiA0MC45NzEtMTYuOTcgNDAuOTcxaC0xMTJDMjM0LjY5NyAyNTYgMjI0IDI0NS4yNTUgMjI0IDIzMlYxMjBjMC0yMS4zODIgMjUuODAzLTMyLjA5IDQwLjkyMi0xNi45NzFMMjk2IDEzNmw5OS4zMTQtOTkuMzE0YzYuMjQ4LTYuMjQ4IDE2LjM3OS02LjI0OCAyMi42MjcgMGwyNS4zNzMgMjUuMzczYzYuMjQ4IDYuMjQ4IDYuMjQ4IDE2LjM3OSAwIDIyLjYyN3pcIj48L3BhdGg+XG4gICAgPC9zdmc+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMnO1xuaW1wb3J0IHtcbiAgYWN0aW9uLFxuICBjcmVhdGVUb3BvbG9neUNvbnRyb2xCdXR0b25zLFxuICBkZWZhdWx0Q29udHJvbEJ1dHRvbnNPcHRpb25zLFxuICBUb3BvbG9neUNvbnRyb2xCYXIgYXMgUEZUb3BvbG9neUNvbnRyb2xCYXIsXG4gIFZpc3VhbGl6YXRpb24sXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRvcG9sb2d5JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvbGxhcHNlSWNvbiB9IGZyb20gJy4uL1NoYXJlZC9Db2xsYXBzZUljb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5Q29udHJvbEJhclByb3BzIHtcbiAgdmlzdWFsaXphdGlvbjogVmlzdWFsaXphdGlvbjtcbiAgbm9Db2xsYXBzZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFRvcG9sb2d5Q29udHJvbEJhcjogUmVhY3QuRkM8VG9wb2xvZ3lDb250cm9sQmFyUHJvcHM+ID0gKHtcbiAgdmlzdWFsaXphdGlvbixcbiAgbm9Db2xsYXBzZSxcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBidXR0b25Db25maWdzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYmFzZSA9IFtcbiAgICAgIC4uLmNyZWF0ZVRvcG9sb2d5Q29udHJvbEJ1dHRvbnMoe1xuICAgICAgICAuLi5kZWZhdWx0Q29udHJvbEJ1dHRvbnNPcHRpb25zLFxuICAgICAgICB6b29tSW5DYWxsYmFjazogYWN0aW9uKCgpID0+IHtcbiAgICAgICAgICB2aXN1YWxpemF0aW9uLmdldEdyYXBoKCkuc2NhbGVCeSg0IC8gMyk7XG4gICAgICAgIH0pLFxuICAgICAgICB6b29tSW5UaXA6ICdab29tIGluJyxcbiAgICAgICAgem9vbUluQXJpYUxhYmVsOiAnWm9vbSBpbicsXG4gICAgICAgIHpvb21PdXRDYWxsYmFjazogYWN0aW9uKCgpID0+IHtcbiAgICAgICAgICB2aXN1YWxpemF0aW9uLmdldEdyYXBoKCkuc2NhbGVCeSgzIC8gNCk7XG4gICAgICAgIH0pLFxuICAgICAgICB6b29tT3V0VGlwOiAnWm9vbSBvdXQnLFxuICAgICAgICB6b29tT3V0QXJpYUxhYmVsOiAnWm9vbSBvdXQnLFxuICAgICAgICBmaXRUb1NjcmVlbkNhbGxiYWNrOiBhY3Rpb24oKCkgPT4ge1xuICAgICAgICAgIHZpc3VhbGl6YXRpb24uZ2V0R3JhcGgoKS5maXQoMTIwKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpdFRvU2NyZWVuVGlwOiAnRml0IHRvIHNjcmVlbicsXG4gICAgICAgIGZpdFRvU2NyZWVuQXJpYUxhYmVsOiAnRml0IHRvIHNjcmVlbicsXG4gICAgICAgIHJlc2V0Vmlld0NhbGxiYWNrOiBhY3Rpb24oKCkgPT4ge1xuICAgICAgICAgIHZpc3VhbGl6YXRpb24uZ2V0R3JhcGgoKS5yZXNldCgpO1xuICAgICAgICAgIHZpc3VhbGl6YXRpb24uZ2V0R3JhcGgoKS5sYXlvdXQoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHJlc2V0Vmlld1RpcDogJ1Jlc2V0IHZpZXcnLFxuICAgICAgICByZXNldFZpZXdBcmlhTGFiZWw6ICdSZXNldCB2aWV3JyxcbiAgICAgICAgbGVnZW5kOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICBpZiAoIW5vQ29sbGFwc2UpIHtcbiAgICAgIGJhc2UucHVzaCh7XG4gICAgICAgIGlkOiAnY29sbGFwc2UtYWxsLWdyb3VwJyxcbiAgICAgICAgaWNvbjogPENvbGxhcHNlSWNvbiAvPixcbiAgICAgICAgdG9vbHRpcDogJ0NvbGxhcHNlIGFsbCBncm91cHMnLFxuICAgICAgICBjYWxsYmFjazogYWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAvLyBDbG9zZSB0b3AtbGV2ZWwgZ3JvdXBzXG4gICAgICAgICAgdmlzdWFsaXphdGlvblxuICAgICAgICAgICAgLmdldEdyYXBoKClcbiAgICAgICAgICAgIC5nZXROb2RlcygpXG4gICAgICAgICAgICAuZm9yRWFjaCgobikgPT4gbi5zZXRDb2xsYXBzZWQodHJ1ZSkpO1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfSwgW3Zpc3VhbGl6YXRpb24sIG5vQ29sbGFwc2VdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MoJ3RvcG9sb2d5LWNvbnRyb2wtYmFyJywgY2xhc3NOYW1lKX0+XG4gICAgICA8UEZUb3BvbG9neUNvbnRyb2xCYXIgey4uLnByb3BzfSBjb250cm9sQnV0dG9ucz17YnV0dG9uQ29uZmlnc30gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcblxuZXhwb3J0IGVudW0gTm9kZVR5cGUge1xuICAvLyBUaGUgZW50aXJlIGRlcGxveW1lbnQgc2NlbmFyaW8gQ3J5b3N0YXQgZmluZHMgaXRzZWxmIGluLlxuICBVTklWRVJTRSA9ICdVbml2ZXJzZScsXG4gIC8vIEEgZGl2aXNpb24gb2YgdGhlIGRlcGxveW1lbnQgc2NlbmFyaW8gKGkuZS4gS3ViZXJuZXRlcywgSkRQLCBDdXN0b20gVGFyZ2V0LCBDcnlvc3RhdEFnZW50KVxuICBSRUFMTSA9ICdSZWFsbScsXG4gIC8vIEEgcGxhaW4gdGFyZ2V0IEpWTSwgY29ubmVjdGFibGUgb3ZlciBKTVguXG4gIEpWTSA9ICdKVk0nLFxuICAvLyBBIHRhcmdldCBKVk0gdXNpbmcgdGhlIENyeW9zdGF0IEFnZW50LCAqbm90KiBjb25uZWN0YWJsZSBvdmVyIEpNWC4gQWdlbnQgaW5zdGFuY2VzXG4gIC8vIHRoYXQgZG8gcHVibGlzaCBhIEpNWCBTZXJ2aWNlIFVSTCBzaG91bGQgcHVibGlzaCB0aGVtc2VsdmVzIHdpdGggdGhlIEpWTSBOb2RlVHlwZS5cbiAgQUdFTlQgPSAnQ3J5b3N0YXRBZ2VudCcsXG4gIC8vIEN1c3RvbSB0YXJnZXQgZGVmaW5lZCB2aWEgQ3VzdG9tIFRhcmdldCBDcmVhdGlvbiBGb3JtLlxuICBDVVNUT01fVEFSR0VUID0gJ0N1c3RvbVRhcmdldCcsXG4gIC8vIEt1YmVybmV0ZXMgcGxhdGZvcm0uXG4gIE5BTUVTUEFDRSA9ICdOYW1lc3BhY2UnLFxuICBTVEFURUZVTFNFVCA9ICdTdGF0ZWZ1bFNldCcsXG4gIERBRU1PTlNFVCA9ICdEYWVtb25TZXQnLFxuICBERVBMT1lNRU5UID0gJ0RlcGxveW1lbnQnLFxuICBERVBMT1lNRU5UQ09ORklHID0gJ0RlcGxveW1lbnRDb25maWcnLCAvLyBPcGVuU2hpZnQgc3BlY2lmaWNcbiAgUkVQTElDQVNFVCA9ICdSZXBsaWNhU2V0JyxcbiAgUkVQTElDQVRJT05DT05UUk9MTEVSID0gJ1JlcGxpY2F0aW9uQ29udHJvbGxlcicsXG4gIFBPRCA9ICdQb2QnLFxuICBFTkRQT0lOVCA9ICdFbmRwb2ludCcsXG4gIC8vIFN0YW5kYWxvbmUgdGFyZ2V0c1xuICBUQVJHRVQgPSAnVGFyZ2V0Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlTGFiZWxzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5pbnRlcmZhY2UgX0Fic3RyYWN0Tm9kZSB7XG4gIHJlYWRvbmx5IGlkOiBudW1iZXI7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm9kZVR5cGU6IE5vZGVUeXBlO1xuICByZWFkb25seSBsYWJlbHM6IE5vZGVMYWJlbHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnROb2RlIGV4dGVuZHMgX0Fic3RyYWN0Tm9kZSB7XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiAoRW52aXJvbm1lbnROb2RlIHwgVGFyZ2V0Tm9kZSlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXROb2RlIGV4dGVuZHMgX0Fic3RyYWN0Tm9kZSB7XG4gIHJlYWRvbmx5IHRhcmdldDogVGFyZ2V0O1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FTVBUWV9VTklWRVJTRTogRW52aXJvbm1lbnROb2RlID0ge1xuICBpZDogMCxcbiAgbmFtZTogJ1VuaXZlcnNlJyxcbiAgbm9kZVR5cGU6IE5vZGVUeXBlLlVOSVZFUlNFLFxuICBsYWJlbHM6IHt9LFxuICBjaGlsZHJlbjogW10sXG59O1xuXG5leHBvcnQgY29uc3QgaXNUYXJnZXROb2RlID0gKG5vZGU6IEVudmlyb25tZW50Tm9kZSB8IFRhcmdldE5vZGUpOiBub2RlIGlzIFRhcmdldE5vZGUgPT4ge1xuICByZXR1cm4gbm9kZVsndGFyZ2V0J10gIT09IHVuZGVmaW5lZCAmJiBub2RlWydjaGlsZHJlbiddID09PSB1bmRlZmluZWQ7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBBY3RpdmVSZWNvcmRpbmcsIFJlY29yZGluZ1N0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgSW5Qcm9ncmVzc0ljb24sIFJ1bm5pbmdJY29uLCBXYXJuaW5nVHJpYW5nbGVJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3Qtc3R5bGVzJztcbmltcG9ydCB7XG4gIERlY29yYXRvcixcbiAgREVGQVVMVF9ERUNPUkFUT1JfUkFESVVTLFxuICBnZXREZWZhdWx0U2hhcGVEZWNvcmF0b3JDZW50ZXIsXG4gIE5vZGUsXG4gIFRvcG9sb2d5UXVhZHJhbnQsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRvcG9sb2d5JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlc291cmNlcyB9IGZyb20gJy4uL1NoYXJlZC9FbnRpdHkvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0U3RhdHVzVGFyZ2V0Tm9kZSB9IGZyb20gJy4uL1NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBUYXJnZXROb2RlIH0gZnJvbSAnLi4vdHlwaW5ncyc7XG5cbmV4cG9ydCBjb25zdCBnZXROb2RlRGVjb3JhdG9ycyA9IChlbGVtZW50OiBOb2RlKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxBY3RpdmVSZWNvcmRpbmdEZWNvcmF0b3IgZWxlbWVudD17ZWxlbWVudH0gcXVhZHJhbnQ9e1RvcG9sb2d5UXVhZHJhbnQudXBwZXJSaWdodH0gLz4sXG4gICAgICA8U3RhdHVzRGVjb3JhdG9yIGVsZW1lbnQ9e2VsZW1lbnR9IHF1YWRyYW50PXtUb3BvbG9neVF1YWRyYW50Lmxvd2VyTGVmdH0gLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBEZWNvcmF0b3JQcm9wcyB7XG4gIGVsZW1lbnQ6IE5vZGU7XG4gIHF1YWRyYW50OiBUb3BvbG9neVF1YWRyYW50O1xufVxuXG5leHBvcnQgY29uc3QgQWN0aXZlUmVjb3JkaW5nRGVjb3JhdG9yOiBSZWFjdC5GQzxEZWNvcmF0b3JQcm9wcz4gPSAoeyBlbGVtZW50LCBxdWFkcmFudCwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBkYXRhOiBUYXJnZXROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gIGNvbnN0IHsgeCwgeSB9ID0gZ2V0RGVmYXVsdFNoYXBlRGVjb3JhdG9yQ2VudGVyKHF1YWRyYW50LCBlbGVtZW50KTtcbiAgY29uc3QgeyByZXNvdXJjZXM6IHJlY29yZGluZ3MsIGVycm9yLCBsb2FkaW5nIH0gPSB1c2VSZXNvdXJjZXM8QWN0aXZlUmVjb3JkaW5nPihkYXRhLCAnYWN0aXZlUmVjb3JkaW5ncycpO1xuXG4gIGNvbnN0IHJ1bm5pbmdSZWNzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiByZWNvcmRpbmdzLmZpbHRlcigocmVjKSA9PiByZWMuc3RhdGUgPT09IFJlY29yZGluZ1N0YXRlLlJVTk5JTkcpLFxuICAgIFtyZWNvcmRpbmdzXVxuICApO1xuXG4gIGNvbnN0IGljb25Db25maWcgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBiYXNlID0gJ3RvcG9sb2d5X19ub2RlLWRlY29yYXRvci1pY29uJztcbiAgICBpZiAobG9hZGluZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogPEluUHJvZ3Jlc3NJY29uIGNsYXNzTmFtZT17Y3NzKGJhc2UsICdwcm9ncmVzcycpfSAvPixcbiAgICAgICAgdG9vbHRpcDogJ1JldHJpZXZpbmcgYWN0aXZlIHJlY29yZGluZ3MuJyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBydW5uaW5nUmVjcy5sZW5ndGggJiYgIWVycm9yXG4gICAgICA/IHtcbiAgICAgICAgICBpY29uOiA8UnVubmluZ0ljb24gY2xhc3NOYW1lPXtjc3MoYmFzZSwgJ3N1Y2Nlc3MnKX0gLz4sXG4gICAgICAgICAgdG9vbHRpcDogYCR7cnVubmluZ1JlY3MubGVuZ3RofSBydW5uaW5nIGFjdGl2ZSByZWNvcmRpbmcke3J1bm5pbmdSZWNzLmxlbmd0aCA+IDIgPyAncycgOiAnJ30uYCxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sIFtlcnJvciwgbG9hZGluZywgcnVubmluZ1JlY3NdKTtcblxuICByZXR1cm4gaWNvbkNvbmZpZyA/IChcbiAgICA8VG9vbHRpcCB7Li4ucHJvcHN9IGNvbnRlbnQ9e2ljb25Db25maWcudG9vbHRpcH0gYXBwZW5kVG89e3BvcnRhbFJvb3R9PlxuICAgICAgPERlY29yYXRvciB4PXt4fSB5PXt5fSByYWRpdXM9e0RFRkFVTFRfREVDT1JBVE9SX1JBRElVU30gc2hvd0JhY2tncm91bmQgaWNvbj17aWNvbkNvbmZpZy5pY29ufSAvPlxuICAgIDwvVG9vbHRpcD5cbiAgKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgU3RhdHVzRGVjb3JhdG9yOiBSZWFjdC5GQzxEZWNvcmF0b3JQcm9wcz4gPSAoeyBlbGVtZW50LCBxdWFkcmFudCwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBkYXRhOiBUYXJnZXROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gIGNvbnN0IFtub2RlU3RhdHVzLCBleHRyYV0gPSBnZXRTdGF0dXNUYXJnZXROb2RlKGRhdGEpO1xuICBjb25zdCB7IHgsIHkgfSA9IGdldERlZmF1bHRTaGFwZURlY29yYXRvckNlbnRlcihxdWFkcmFudCwgZWxlbWVudCk7XG4gIHJldHVybiBub2RlU3RhdHVzID8gKFxuICAgIDxUb29sdGlwIHsuLi5wcm9wc30gY29udGVudD17ZXh0cmE/LnRpdGxlfSBhcHBlbmRUbz17cG9ydGFsUm9vdH0+XG4gICAgICA8RGVjb3JhdG9yXG4gICAgICAgIHg9e3h9XG4gICAgICAgIHk9e3l9XG4gICAgICAgIHJhZGl1cz17REVGQVVMVF9ERUNPUkFUT1JfUkFESVVTfVxuICAgICAgICBzaG93QmFja2dyb3VuZFxuICAgICAgICBpY29uPXs8V2FybmluZ1RyaWFuZ2xlSWNvbiBjbGFzc05hbWU9e2NzcygndG9wb2xvZ3lfX25vZGUtZGVjb3JhdG9yLWljb24nLCAnd2FybmluZycpfSAvPn1cbiAgICAgIC8+XG4gICAgPC9Ub29sdGlwPlxuICApIDogbnVsbDtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZlYXR1cmVMZXZlbCgpIHtcbiAgY29uc3QgW2ZlYXR1cmVMZXZlbCwgc2V0RmVhdHVyZUxldmVsXSA9IFJlYWN0LnVzZVN0YXRlKEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OKTtcbiAgY29uc3Qgc3ViUmVmID0gUmVhY3QudXNlUmVmPFN1YnNjcmlwdGlvbj4oKTtcbiAgY29uc3Qgc2VydmljZXMgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHN1YlJlZi5jdXJyZW50ID0gc2VydmljZXMuc2V0dGluZ3MuZmVhdHVyZUxldmVsKCkuc3Vic2NyaWJlKHNldEZlYXR1cmVMZXZlbCk7XG4gICAgcmV0dXJuICgpID0+IHN1YlJlZi5jdXJyZW50ICYmIHN1YlJlZi5jdXJyZW50LnVuc3Vic2NyaWJlKCk7XG4gIH0sIFtzdWJSZWYsIHNlcnZpY2VzLnNldHRpbmdzXSk7XG5cbiAgcmV0dXJuIGZlYXR1cmVMZXZlbDtcbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBRdWlja1NlYXJjaEljb246IFJlYWN0LkZDPFJlYWN0LkhUTUxQcm9wczxTVkdFbGVtZW50Pj4gPSAoeyBzdHlsZSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgdmlld0JveD1cIjAgMCA4MCA4MFwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICB3aWR0aD1cIjJlbVwiXG4gICAgICBoZWlnaHQ9XCIyZW1cIlxuICAgICAgc3R5bGU9e3sgdmVydGljYWxBbGlnbjogJ21pZGRsZScsIC4uLnN0eWxlIH19XG4gICAgICBjbGFzc05hbWU9eydxdWljay1zZWFyY2gtaWNvbid9XG4gICAgPlxuICAgICAgPHN0eWxlPnsnLnByZWZpeF9fc3Qwe2Rpc3BsYXk6bm9uZX0ucHJlZml4X19zdDIsLnByZWZpeF9fc3Qze2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkfSd9PC9zdHlsZT5cbiAgICAgIDxnIGlkPVwicHJlZml4X19MYXllcl8xXCIgY2xhc3NOYW1lPVwicHJlZml4X19zdDBcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBjbGFzc05hbWU9XCJwcmVmaXhfX3N0MlwiXG4gICAgICAgICAgZD1cIk0zMS43OSAxOC40OHYuMDRjLjAxLS4wMS4wMS0uMDIgMC0uMDR6TTExLjUgNTkuMjJjLTQuMTkuMzgtNi45NCA1LjIyLTYuOTQgNS4yMlY5LjczQzAgOS44NyAwIDE0LjAxIDAgMTQuMDF2NTAuNzRjLjE5IDUuNDIgNi44NCA0LjEzIDYuODQgNC4xMyA2Ljg0LTkuNjUgMjUuMDkuMTQgMjUuMDkuMTR2LTQuNDVjLTcuODQtNS4wOS0xNS4xMS01Ljk1LTIwLjQzLTUuMzV6bTExLjM2LTMuMDljMy4zNC41OCA2LjkxIDMuMjggOC45MiAzLjc2di00LjU1SDMxLjVoLjI5VjE4LjQ5bC4wMS0zLjYycy0uMDEgMC0uMDEtLjAxdi0uNUMyNC4zNSA5LjU2IDE0LjcgNi4zIDkuMTIgNS4yNnY1MC41OWM0LjA5LTEuMTMgNy41LS44MyAxMy43NC4yOHptMTMuNzctMzcuNjVjLS4wMS4wMi0uMDEuMDIgMCAwem0yNy4yMy04Ljc1djU0Ljcxcy0yLjc1LTQuODMtNi45NC01LjIyYy01LjMyLS42LTEyLjU5LjI2LTIwLjQzIDUuMzZ2NC40NXMxOC4yNC05Ljc5IDI1LjA5LS4xNGMwIDAgNi42NiAxLjI4IDYuODQtNC4xM1YxNC4wMXMwLTQuMTQtNC41Ni00LjI4ek0zNi42MyAzMC40N3YyNC44N2wuNjYtLjExYy0uMTMuMDctLjI3LjExLS40MS4xMWgtLjI0djQuNTVjMi4wMS0uNDggNS41OS0zLjE4IDguOTItMy43NiA2LjI0LTEuMTEgOS42NS0xLjQxIDEzLjc0LS4yOVY1LjI2Yy01LjU3IDEuMDQtMTUuMjIgNC4zLTIyLjY2IDkuMDh2LjUxYzAgLjAxLS4wMS4wMS0uMDEuMDFsLjAxIDMuNjItLjAxIDExLjk5elwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY2xhc3NOYW1lPVwicHJlZml4X19zdDNcIiBjeD17NTkuOTZ9IGN5PXs1Ni42fSByPXsxMy41NH0gLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTYyLjY2IDY3LjI1aC00LjQxYy0uNTIgMC0uOTUtLjM5LS45NS0uODZ2LTYuNjNoLTcuMjVjLS41MiAwLS45NS0uMzktLjk1LS44NnYtNC4wNGMwLS40OC40My0uODYuOTUtLjg2aDcuMjV2LTYuNjNjMC0uNDguNDMtLjg2Ljk1LS44Nmg0LjQxYy41MiAwIC45NS4zOS45NS44NlY1NGg3LjI1Yy41MiAwIC45NS4zOS45NS44NnY0LjA0YzAgLjQ4LS40My44Ni0uOTUuODZINjMuNnY2LjYzYzAgLjQ3LS40Mi44Ni0uOTQuODZ6bS0yLjIxIDcuNDljMTAuOCAwIDE5LjU1LTggMTkuNTUtMTcuODdTNzEuMjUgMzkgNjAuNDUgMzkgNDAuOSA0NyA0MC45IDU2Ljg3czguNzUgMTcuODcgMTkuNTUgMTcuODd6XCJcbiAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZmlsbD17JyNmZmYnfVxuICAgICAgICAvPlxuICAgICAgPC9nPlxuICAgICAgPGcgaWQ9XCJwcmVmaXhfX0xheWVyXzJcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBjbGFzc05hbWU9XCJwcmVmaXhfX3N0M1wiXG4gICAgICAgICAgZD1cIk03OC45NSA1OC43N2gtOC4wOHYtNy4zOWMwLS41My0uNDctLjk2LTEuMDUtLjk2SDY0LjljLS41OCAwLTEuMDUuNDMtMS4wNS45NnY3LjM5aC04LjA4Yy0uNTggMC0xLjA1LjQzLTEuMDUuOTZ2NC41YzAgLjUzLjQ3Ljk2IDEuMDUuOTZoOC4wOHY3LjM5YzAgLjUzLjQ3Ljk2IDEuMDUuOTZoNC45MmMuNTggMCAxLjA1LS40MyAxLjA1LS45NnYtNy4zOWg4LjA4Yy41OCAwIDEuMDUtLjQzIDEuMDUtLjk2di00LjVjMC0uNTMtLjQ3LS45Ni0xLjA1LS45NnpcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGNsYXNzTmFtZT1cInByZWZpeF9fc3QyXCJcbiAgICAgICAgICBkPVwiTTc2LjIzIDQzLjgxVjE0LjIyczAtNC42MS01LjA4LTQuNzZ2MzIuOTNjMS43OC4yOSAzLjQ4Ljc2IDUuMDggMS40MnpNNDAuODEgMzIuNTd2MjcuNzFsLjczLS4xM2EuOTQuOTQgMCAwMS0uNDYuMTNoLS4yN3Y1LjA3YzEuMi0uMjkgMi45Mi0xLjI5IDQuODEtMi4yNS0uMDItLjM3LS4wNi0uNzQtLjA2LTEuMTEgMC0xMC42IDkuMDctMTkuMjQgMjAuNS0xOS44NlY0LjQ3Yy02LjIxIDEuMTYtMTYuOTYgNC44LTI1LjI1IDEwLjEydi41N2MwIC4wMi0uMDIuMDItLjAyLjAybC4wMiA0LjAzdjEzLjM2ek0xMi44MiA2NC42Yy00LjY3LjQzLTcuNzMgNS44MS03LjczIDUuODFWOS40NkMwIDkuNjIgMCAxNC4yMiAwIDE0LjIydjU2LjU0Yy4yMSA2LjAzIDcuNjIgNC42MSA3LjYyIDQuNjEgNy42Mi0xMC43NSAyNy45NS4xNiAyNy45NS4xNnYtNC45NWMtOC43My01LjY5LTE2LjgzLTYuNjUtMjIuNzUtNS45OHpcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGNsYXNzTmFtZT1cInByZWZpeF9fc3QyXCJcbiAgICAgICAgICBkPVwiTTI1LjQ3IDYxLjE1YzMuNzIuNjUgNy43IDMuNjUgOS45NCA0LjE5VjE5LjIxbC4wMi00LjAzcy0uMDIgMC0uMDItLjAydi0uNTZDMjcuMTMgOS4yNyAxNi4zNyA1LjYzIDEwLjE2IDQuNDd2NTYuMzZjNC41Ni0xLjI1IDguMzYtLjkxIDE1LjMxLjMyek00Ni40MSA2Ny40NGMtMS44OC44My0zLjggMS44Ni01Ljc2IDMuMTN2NC45NXMzLjQ2LTEuODUgOC4wNS0zLjI4Yy0uOTgtMS40OC0xLjc1LTMuMDktMi4yOS00Ljh6XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFF1aWNrU2VhcmNoSWNvbjtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IG9wZW5qZGtTdmcgZnJvbSAnQGFwcC9hc3NldHMvb3Blbmpkay5zdmcnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBRdWlja1NlYXJjaEl0ZW0gfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IF9DdXN0b21UYXJnZXRTZWFyY2hJdGVtOiBRdWlja1NlYXJjaEl0ZW0gPSB7XG4gIGlkOiAnY3VzdG9tLXRhcmdldCcsXG4gIG5hbWU6ICdDdXN0b20gVGFyZ2V0JyxcbiAgaWNvbjogPGltZyBzcmM9e29wZW5qZGtTdmd9IC8+LFxuICBsYWJlbHM6IFtcbiAgICB7XG4gICAgICBjb250ZW50OiAnRGlzY292ZXJ5JyxcbiAgICAgIGNvbG9yOiAnZ3JlZW4nLFxuICAgIH0sXG4gIF0sXG4gIGRlc2NyaXB0aW9uU2hvcnQ6ICdEZWZpbmUgYSBjdXN0b20gdGFyZ2V0IGRlZmluaXRpb24uJyxcbiAgZGVzY3JpcHRpb25GdWxsOiAnUHJvdmlkZSBhIEpNWCBTZXJ2aWNlIFVSTCBhbG9uZyB3aXRoIG5lY2Vzc2FyeSBjcmVkZW50aWFscyB0byBwb2ludCB0byBhIHRhcmdldCBKVk0uJyxcbiAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTixcbiAgY3JlYXRlQWN0aW9uOiAoeyBoaXN0b3J5IH0pID0+IHtcbiAgICBoaXN0b3J5LnB1c2goJy90b3BvbG9neS9jcmVhdGUtY3VzdG9tLXRhcmdldCcpO1xuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgX0N1c3RvbVRhcmdldFNlYXJjaEl0ZW07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGFpbmVyTm9kZUljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBRdWlja1NlYXJjaEl0ZW0gfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IF9EZXZTYW1wbGVTZWFyY2hJdGVtOiBRdWlja1NlYXJjaEl0ZW0gPSB7XG4gIGlkOiAnZGV2LXNhbXBsZScsXG4gIG5hbWU6ICdTYW1wbGUnLFxuICBpY29uOiA8Q29udGFpbmVyTm9kZUljb24gLz4sXG4gIGxhYmVsczogW1xuICAgIHtcbiAgICAgIGNvbnRlbnQ6ICdTYW1wbGUnLFxuICAgICAgY29sb3I6ICdibHVlJyxcbiAgICB9LFxuICBdLFxuICBkZXNjcmlwdGlvblNob3J0OiAnVGhpcyBpcyBhIHNhbXBsZSB0ZW1wbGF0ZSB0byBjcmVhdGUgYSBzZWFyY2ggaXRlbS4nLFxuICBkZXNjcmlwdGlvbkZ1bGw6ICdQdXQgdGhlIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW0gaGVyZS4nLFxuICBmZWF0dXJlTGV2ZWw6IEZlYXR1cmVMZXZlbC5ERVZFTE9QTUVOVCxcbiAgY3JlYXRlQWN0aW9uOiAoKSA9PiB1bmRlZmluZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBfRGV2U2FtcGxlU2VhcmNoSXRlbTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IGN0U2VhcmNoSXRlbSBmcm9tICcuL2N1c3RvbS10YXJnZXQnO1xuaW1wb3J0IGRldlNhbXBsZUl0ZW0gZnJvbSAnLi9kZXYtc2FtcGxlJztcblxuZXhwb3J0IGNvbnN0IHF1aWNrU2VhcmNoZXMgPSBbY3RTZWFyY2hJdGVtLCBkZXZTYW1wbGVJdGVtXTtcblxuZXhwb3J0IGNvbnN0IHF1aWNrU2VhcmNoSWRzID0gW2N0U2VhcmNoSXRlbS5pZCwgZGV2U2FtcGxlSXRlbS5pZF0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFF1aWNrU2VhcmNoSWQgPSAodHlwZW9mIHF1aWNrU2VhcmNoSWRzKVtudW1iZXJdO1xuXG5leHBvcnQgZGVmYXVsdCBxdWlja1NlYXJjaGVzO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zQ29udGV4dCB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL3V0aWxzL3VzZUZlYXR1cmVMZXZlbCc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdWxsc2V5ZSxcbiAgQnV0dG9uLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRmxleCxcbiAgRmxleEl0ZW0sXG4gIExhYmVsLFxuICBMYWJlbEdyb3VwLFxuICBNZW51LFxuICBNZW51Q29udGVudCxcbiAgTWVudUl0ZW0sXG4gIE1lbnVMaXN0LFxuICBNb2RhbCxcbiAgTW9kYWxQcm9wcyxcbiAgU2VhcmNoSW5wdXQsXG4gIFNpZGViYXIsXG4gIFNpZGViYXJDb250ZW50LFxuICBTaWRlYmFyUGFuZWwsXG4gIFN0YWNrLFxuICBTdGFja0l0ZW0sXG4gIFRhYixcbiAgVGFicyxcbiAgVGFiVGl0bGVUZXh0LFxuICBUaXRsZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3Qtc3R5bGVzJztcbmltcG9ydCB7IHVzZUhvdmVyIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdG9wb2xvZ3knO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmssIHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBRdWlja1NlYXJjaEljb24gZnJvbSAnLi4vU2hhcmVkL1F1aWNrU2VhcmNoSWNvbic7XG5pbXBvcnQgcXVpY2tTZWFyY2hlcywgeyBRdWlja1NlYXJjaElkLCBxdWlja1NlYXJjaElkcyB9IGZyb20gJy4vcXVpY2tzZWFyY2hlcy9hbGwtcXVpY2stc2VhcmNoZXMnO1xuaW1wb3J0IHsgUXVpY2tTZWFyY2hJdGVtIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBRdWlja1NlYXJjaFRhYkNvbnRlbnQ6IFJlYWN0LkZDPHsgaXRlbT86IFF1aWNrU2VhcmNoSXRlbSB9PiA9ICh7IGl0ZW0sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3Qgc2VydmljZXMgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IFJlYWN0LnVzZUNvbnRleHQoTm90aWZpY2F0aW9uc0NvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZUFjdGlvbkNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGl0ZW0/LmNyZWF0ZUFjdGlvbiAmJiBpdGVtLmNyZWF0ZUFjdGlvbih7IGhpc3RvcnksIHNlcnZpY2VzLCBub3RpZmljYXRpb25zIH0pO1xuICB9LCBbaXRlbSwgaGlzdG9yeSwgc2VydmljZXMsIG5vdGlmaWNhdGlvbnNdKTtcblxuICByZXR1cm4gaXRlbSA/IChcbiAgICA8U3RhY2sgey4uLnByb3BzfSBoYXNHdXR0ZXIgY2xhc3NOYW1lPXtjc3MoJ3RvcG9sb2d5X19xdWlja3NlYXJjaF9fdGFiLWNvbnRlbnQnKX0+XG4gICAgICA8U3RhY2tJdGVtPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPXtjc3MoJ3RvcG9sb2d5X19xdWlja3NlYXJjaF9fdGFiLWNvbnRlbnQtdGl0bGUnKX0+e2l0ZW0ubmFtZX08L2gyPlxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICA8U3RhY2tJdGVtPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NzcygndG9wb2xvZ3lfX3F1aWNrc2VhcmNoX190YWItY29udGVudC1kZXNjcmlwdGlvbi1zaG9ydCcpfT57aXRlbS5kZXNjcmlwdGlvblNob3J0fTwvc3Bhbj5cbiAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwicHJpbWFyeVwiIG9uQ2xpY2s9e2hhbmRsZUFjdGlvbkNsaWNrfT5cbiAgICAgICAgICB7aXRlbS5hY3Rpb25UZXh0ID8gaXRlbS5hY3Rpb25UZXh0IDogJ0NyZWF0ZSd9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICA8U3RhY2tJdGVtPntpdGVtLmRlc2NyaXB0aW9uRnVsbH08L1N0YWNrSXRlbT5cbiAgICA8L1N0YWNrPlxuICApIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBRdWlja1NlYXJjaFRhYlRpdGxlOiBSZWFjdC5GQzx7IGl0ZW06IFF1aWNrU2VhcmNoSXRlbSB9PiA9ICh7IGl0ZW0sIC4uLnByb3BzIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8RmxleCB7Li4ucHJvcHN9PlxuICAgICAgPEZsZXhJdGVtIGFsaWduU2VsZj17eyBkZWZhdWx0OiAnYWxpZ25TZWxmRmxleFN0YXJ0JyB9fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NzcygndG9wb2xvZ3lfX3F1aWNrc2VhcmNoX190YWItaWNvbicpfT5cbiAgICAgICAgICA8QnVsbHNleWU+e2l0ZW0uaWNvbn08L0J1bGxzZXllPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRmxleEl0ZW0+XG4gICAgICA8RmxleFxuICAgICAgICBkaXJlY3Rpb249e3sgZGVmYXVsdDogJ2NvbHVtbicgfX1cbiAgICAgICAgZmxleD17eyBkZWZhdWx0OiAnZmxleF8xJyB9fVxuICAgICAgICBhbGlnblNlbGY9e3sgZGVmYXVsdDogJ2FsaWduU2VsZkZsZXhTdGFydCcgfX1cbiAgICAgID5cbiAgICAgICAgPEZsZXhJdGVtIHNwYWNlcj17eyBkZWZhdWx0OiAnc3BhY2VyTm9uZScgfX0+XG4gICAgICAgICAgPFRhYlRpdGxlVGV4dCBjbGFzc05hbWU9e2NzcygndG9wb2xvZ3lfX3F1aWNrc2VhcmNoX190YWItdGV4dCcpfT57aXRlbS5uYW1lfTwvVGFiVGl0bGVUZXh0PlxuICAgICAgICA8L0ZsZXhJdGVtPlxuICAgICAgICA8RmxleEl0ZW0+XG4gICAgICAgICAgPExhYmVsR3JvdXA+XG4gICAgICAgICAgICB7aXRlbS5sYWJlbHNcbiAgICAgICAgICAgICAgPyBpdGVtLmxhYmVscy5tYXAoKHsgY29udGVudCwgY29sb3IsIGljb24gfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNvbG9yPXtjb2xvcn0gaWNvbj17aWNvbn0ga2V5PXtjb250ZW50fT5cbiAgICAgICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICA8L0xhYmVsR3JvdXA+XG4gICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICA8L0ZsZXg+XG4gICAgPC9GbGV4PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBRdWlja1NlYXJjaFBhbmVsUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IFF1aWNrU2VhcmNoUGFuZWw6IFJlYWN0LkZDPFF1aWNrU2VhcmNoUGFuZWxQcm9wcz4gPSAoeyAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSBSZWFjdC51c2VTdGF0ZTxRdWlja1NlYXJjaElkPihxdWlja1NlYXJjaElkc1swXSB8fCAnJyk7XG4gIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlYXJjaFRleHQsIHNldFNlYXJjaFRleHRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IGFjdGl2ZUxldmVsID0gdXNlRmVhdHVyZUxldmVsKCk7XG5cbiAgY29uc3QgaGFuZGxlVGFiQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIGV2ZW50S2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IHNldEFjdGl2ZVRhYihgJHtldmVudEtleX1gKSxcbiAgICBbc2V0QWN0aXZlVGFiXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWFyY2hUZXh0KGlucHV0KTtcbiAgICB9LFxuICAgIFtzZXRTZWFyY2hUZXh0XVxuICApO1xuXG4gIGNvbnN0IGZpbHRlcmVkUXVpY2tzZWFyY2hlcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBpdGVtcyA9IHF1aWNrU2VhcmNoZXMuZmlsdGVyKChxcykgPT4gYWN0aXZlTGV2ZWwgPD0gcXMuZmVhdHVyZUxldmVsKTtcbiAgICBpZiAoc2VhcmNoVGV4dCAmJiBzZWFyY2hUZXh0ICE9PSAnJykge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJyk7XG4gICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoeyBuYW1lLCBkZXNjcmlwdGlvbkZ1bGwgPSAnJywgZGVzY3JpcHRpb25TaG9ydCA9ICcnLCBsYWJlbHMgPSBbXSB9KSA9PiB7XG4gICAgICAgIGxldCBtYXRjaFJlc3VsdCA9IHJlZ2V4LnRlc3QobmFtZSkgfHwgcmVnZXgudGVzdChkZXNjcmlwdGlvbkZ1bGwpIHx8IHJlZ2V4LnRlc3QoZGVzY3JpcHRpb25TaG9ydCk7XG5cbiAgICAgICAgbWF0Y2hSZXN1bHQgPSBtYXRjaFJlc3VsdCB8fCBsYWJlbHMucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyB8fCByZWdleC50ZXN0KGN1cnIuY29udGVudCksIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gbWF0Y2hSZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH0sIFtzZWFyY2hUZXh0LCBhY3RpdmVMZXZlbF0pO1xuXG4gIGNvbnN0IG1hdGNoZWRJdGVtID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZpbHRlcmVkUXVpY2tzZWFyY2hlcy5maW5kKChxcykgPT4gcXMuaWQgPT09IGFjdGl2ZVRhYik7XG4gIH0sIFtmaWx0ZXJlZFF1aWNrc2VhcmNoZXMsIGFjdGl2ZVRhYl0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtYXRjaGVkSXRlbSAmJiBmaWx0ZXJlZFF1aWNrc2VhcmNoZXMubGVuZ3RoKSB7XG4gICAgICBzZXRBY3RpdmVUYWIoZmlsdGVyZWRRdWlja3NlYXJjaGVzWzBdLmlkKTtcbiAgICB9XG4gIH0sIFtmaWx0ZXJlZFF1aWNrc2VhcmNoZXMsIG1hdGNoZWRJdGVtXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgPFNlYXJjaElucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJBZGQgdG8gdmlldy4uLlwiXG4gICAgICAgICAgdmFsdWU9e3NlYXJjaFRleHR9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNlYXJjaH1cbiAgICAgICAgICBvbkNsZWFyPXsoKSA9PiBoYW5kbGVTZWFyY2goJycpfVxuICAgICAgICAvPlxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICB7ZmlsdGVyZWRRdWlja3NlYXJjaGVzLmxlbmd0aCA/IChcbiAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICA8U2lkZWJhciB7Li4ucHJvcHN9IHRhYkluZGV4PXswfSBzdHlsZT17eyBoZWlnaHQ6ICdtYXgtY29udGVudCcgfX0gaGFzR3V0dGVyPlxuICAgICAgICAgICAgPFNpZGViYXJQYW5lbCB2YXJpYW50PVwic3RpY2t5XCI+XG4gICAgICAgICAgICAgIDxUYWJzXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsndG9wb2xvZ3lfX3F1aWNrc2VhcmNoX190YWJzJ31cbiAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgdW5tb3VudE9uRXhpdFxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU9e3sgZGVmYXVsdDogJ25vbkV4cGFuZGFibGUnLCBtZDogJ25vbkV4cGFuZGFibGUnLCBsZzogJ25vbkV4cGFuZGFibGUnLCBzbTogJ2V4cGFuZGFibGUnIH19XG4gICAgICAgICAgICAgICAgaXNFeHBhbmRlZD17aXNFeHBhbmRlZH1cbiAgICAgICAgICAgICAgICB0b2dnbGVUZXh0PXtpc0V4cGFuZGVkID8gJ0Nsb3NlIFRhYnMnIDogJ09wZW4gVGFicyd9XG4gICAgICAgICAgICAgICAgb25Ub2dnbGU9e3NldElzRXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgYWN0aXZlS2V5PXthY3RpdmVUYWJ9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVRhYkNoYW5nZX1cbiAgICAgICAgICAgICAgICByb2xlPXsncmVnaW9uJ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFF1aWNrc2VhcmNoZXMubWFwKChxcywgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxUYWJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3MoJ3RvcG9sb2d5X19xdWlja3NlYXJjaF9fdGFiJyl9XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50S2V5PXtxcy5pZH1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17cXMuZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXs8UXVpY2tTZWFyY2hUYWJUaXRsZSBpdGVtPXtxc30gLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RhYnM+XG4gICAgICAgICAgICA8L1NpZGViYXJQYW5lbD5cbiAgICAgICAgICAgIDxTaWRlYmFyQ29udGVudD5cbiAgICAgICAgICAgICAgPFF1aWNrU2VhcmNoVGFiQ29udGVudCBpdGVtPXttYXRjaGVkSXRlbX0gLz5cbiAgICAgICAgICAgIDwvU2lkZWJhckNvbnRlbnQ+XG4gICAgICAgICAgPC9TaWRlYmFyPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICkgOiAoXG4gICAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICAgIDxFbXB0eVN0YXRlSWNvbiBpY29uPXtTZWFyY2hJY29ufSAvPlxuICAgICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImg0XCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgICAgIE5vIFJlc3VsdHNcbiAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgPC9FbXB0eVN0YXRlPlxuICAgICAgICA8L0J1bGxzZXllPlxuICAgICAgKX1cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBRdWlja1NlYXJjaE1vZGFsUHJvcHMgZXh0ZW5kcyBQYXJ0aWFsPE1vZGFsUHJvcHM+IHt9XG5cbmV4cG9ydCBjb25zdCBRdWlja1NlYXJjaE1vZGFsOiBSZWFjdC5GQzxRdWlja1NlYXJjaE1vZGFsUHJvcHM+ID0gKHtcbiAgaXNPcGVuLFxuICBvbkNsb3NlLFxuICB2YXJpYW50ID0gJ21lZGl1bScsXG4gIC4uLl9wcm9wc1xufSkgPT4ge1xuICBjb25zdCBhY3RpdmVMZXZlbCA9IHVzZUZlYXR1cmVMZXZlbCgpO1xuXG4gIGNvbnN0IGd1aWRlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGFjdGl2ZUxldmVsID09PSBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8c3Bhbj5cbiAgICAgICAgRm9yIHF1aWNrc3RhcnRzIG9uIGhvdyB0byBjcmVhdGUgdGhlc2UgZW50aXRpZXMsIHZpc2l0IDxMaW5rIHRvPXsnL3F1aWNrc3RhcnRzJ30+UXVpY2sgU3RhcnRzPC9MaW5rPi5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9LCBbYWN0aXZlTGV2ZWxdKTtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgdmFyaWFudD17dmFyaWFudH1cbiAgICAgIHRpdGxlSWNvblZhcmlhbnQ9e1F1aWNrU2VhcmNoSWNvbn1cbiAgICAgIHRpdGxlPXsnVG9wb2xvZ3kgRW50aXR5IENhdGFsb2cnfVxuICAgICAgY2xhc3NOYW1lPXsndG9wb2xvZ3lfX3F1aWNrLXNlYXJjaC1tb2RhbCd9XG4gICAgICBpZD17J3RvcG9sb2d5LXF1aWNrLXNlYXJjaC1tb2RhbCd9XG4gICAgICBkZXNjcmlwdGlvbj17PGRpdj5TZWxlY3QgYW4gZW50aXR5IHRvIGFkZCB0byB2aWV3LiB7Z3VpZGV9PC9kaXY+fVxuICAgID5cbiAgICAgIDxRdWlja1NlYXJjaFBhbmVsIC8+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVpY2tTZWFyY2hDb250ZXh0TWVudVByb3BzIHtcbiAgaWQ6IHN0cmluZztcbn1cblxuLy8gQSBmbHktb3V0IG1lbnUgd2hlbiByaWdodC1jbGljayBvbiB2aXN1YWxpemF0aW9uIGFyZWFcbmV4cG9ydCBjb25zdCBRdWlja1NlYXJjaENvbnRleHRNZW51OiBSZWFjdC5GQzxRdWlja1NlYXJjaENvbnRleHRNZW51UHJvcHM+ID0gKHsgaWQsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW2hvdmVyLCBob3ZlclJlZl0gPSB1c2VIb3ZlcigwLCAxMDApOyAvLyBkZWxheSAxMDBzIHRvIGFsbG93IG1vdXNlIG1vdmluZyB0byBmbHlvdXQgbWVudVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzTmFtZT17J3RvcG9sb2d5X19xdWljay1zZWFyY2hfX2NvbnRleHQtbWVudSd9PlxuICAgICAgPE1lbnUgey4uLnByb3BzfSBjb250YWluc0ZseW91dD5cbiAgICAgICAgPE1lbnVDb250ZW50PlxuICAgICAgICAgIDxNZW51TGlzdD5cbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICBpc0ZvY3VzZWRcbiAgICAgICAgICAgICAgcmVmPXtob3ZlclJlZn1cbiAgICAgICAgICAgICAgaXRlbUlkPXsnQWRkIHRvIFZpZXcnfVxuICAgICAgICAgICAgICBmbHlvdXRNZW51PXs8UXVpY2tTZWFyY2hGbHlvdXRNZW51IGlzU2hvdz17aG92ZXJ9IC8+fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBBZGQgdG8gVmlld1xuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICA8L01lbnVMaXN0PlxuICAgICAgICA8L01lbnVDb250ZW50PlxuICAgICAgPC9NZW51PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBRdWlja1NlYXJjaEZseW91dE1lbnVQcm9wcyB7XG4gIGlzU2hvdz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBRdWlja1NlYXJjaEZseW91dE1lbnU6IFJlYWN0LkZDPFF1aWNrU2VhcmNoRmx5b3V0TWVudVByb3BzPiA9ICh7IGlzU2hvdywgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBzZXJ2aWNlcyA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBub3RpZmljYXRpb25zID0gUmVhY3QudXNlQ29udGV4dChOb3RpZmljYXRpb25zQ29udGV4dCk7XG4gIGNvbnN0IGFjdGl2ZUxldmVsID0gdXNlRmVhdHVyZUxldmVsKCk7XG5cbiAgY29uc3QgW2hvdmVyLCBob3ZlclJlZl0gPSB1c2VIb3ZlcigwLCAwKTtcblxuICBjb25zdCBmaWx0ZXJlZFF1aWNrc2VhcmNoZXMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IHF1aWNrU2VhcmNoZXMuZmlsdGVyKChxcykgPT4gYWN0aXZlTGV2ZWwgPD0gcXMuZmVhdHVyZUxldmVsKSxcbiAgICBbYWN0aXZlTGV2ZWxdXG4gICk7XG5cbiAgY29uc3QgaXRlbXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsdGVyZWRRdWlja3NlYXJjaGVzLm1hcCgoeyBpZCwgaWNvbiwgbmFtZSwgY3JlYXRlQWN0aW9uID0gKCkgPT4gdW5kZWZpbmVkIH0pID0+IChcbiAgICAgIDxNZW51SXRlbVxuICAgICAgICBrZXk9e2lkfVxuICAgICAgICBpdGVtSWQ9e2lkfVxuICAgICAgICBpY29uPXtcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogJzFlbScsIHdpZHRoOiAnMWVtJyB9fT5cbiAgICAgICAgICAgIDxCdWxsc2V5ZT57aWNvbn08L0J1bGxzZXllPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGNyZWF0ZUFjdGlvbih7IGhpc3RvcnksIHNlcnZpY2VzLCBub3RpZmljYXRpb25zIH0pfVxuICAgICAgPlxuICAgICAgICB7bmFtZX1cbiAgICAgIDwvTWVudUl0ZW0+XG4gICAgKSk7XG4gIH0sIFtmaWx0ZXJlZFF1aWNrc2VhcmNoZXMsIGhpc3RvcnksIHNlcnZpY2VzLCBub3RpZmljYXRpb25zXSk7XG5cbiAgcmV0dXJuIGlzU2hvdyB8fCBob3ZlciA/IChcbiAgICA8TWVudVxuICAgICAgey4uLnByb3BzfVxuICAgICAgaWQ9e2BxdWljay1zZWFyY2hlcy1tZW51YH1cbiAgICAgIGtleT17YHF1aWNrLXNlYXJjaGVzLW1lbnVgfVxuICAgICAgaXNTY3JvbGxhYmxlXG4gICAgICByZWY9e2hvdmVyUmVmIGFzIFJlYWN0LlJlZjxIVE1MRGl2RWxlbWVudD59XG4gICAgPlxuICAgICAgPE1lbnVDb250ZW50PlxuICAgICAgICA8TWVudUxpc3Q+e2l0ZW1zfTwvTWVudUxpc3Q+XG4gICAgICA8L01lbnVDb250ZW50PlxuICAgIDwvTWVudT5cbiAgKSA6IG51bGw7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyB0b3BvbG9neURlbGV0ZUFsbEZpbHRlcnNJbnRlbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7XG4gIEJ1bGxzZXllLFxuICBCdXR0b24sXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVCb2R5LFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnMsXG4gIEVtcHR5U3RhdGVWYXJpYW50LFxuICBUaXRsZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBUb3BvbG9neUljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IERpc2NvdmVyeVRyZWVDb250ZXh0LCBnZXRBbGxMZWF2ZXMsIFNlYXJjaEV4cHJTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5RW1wdHlTdGF0ZVByb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBUb3BvbG9neUVtcHR5U3RhdGU6IFJlYWN0LkZDPFRvcG9sb2d5RW1wdHlTdGF0ZVByb3BzPiA9ICh7IC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgZGlzY292ZXJ5VHJlZSA9IFJlYWN0LnVzZUNvbnRleHQoRGlzY292ZXJ5VHJlZUNvbnRleHQpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IHNlYXJjaEV4cHJTZXJ2aWNlID0gUmVhY3QudXNlQ29udGV4dChTZWFyY2hFeHByU2VydmljZUNvbnRleHQpO1xuXG4gIGNvbnN0IGlzVHJ1ZWx5RW1wdHkgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gIWdldEFsbExlYXZlcyhkaXNjb3ZlcnlUcmVlKS5sZW5ndGg7XG4gIH0sIFtkaXNjb3ZlcnlUcmVlXSk7XG5cbiAgY29uc3QgZW1wdHlTdGF0ZUNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNUcnVlbHlFbXB0eSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgICAgIFN0YXJ0IGxhdW5jaGluZyBhIEphdmEgYXBwbGljYXRpb24gb3IgZGVmaW5lIGF7JyAnfVxuICAgICAgICAgIDxMaW5rIHRvPXsnL3RvcG9sb2d5L2NyZWF0ZS1jdXN0b20tdGFyZ2V0J30+Q3VzdG9tIFRhcmdldDwvTGluaz4uXG4gICAgICAgIDwvRW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnM+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEVtcHR5U3RhdGVCb2R5PkFkanVzdCB5b3VyIGZpbHRlcnMvc2VhcmNoZXMgYW5kIHRyeSBhZ2Fpbi48L0VtcHR5U3RhdGVCb2R5PlxuICAgICAgICA8RW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnM+XG4gICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PXsnbGluayd9IG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKHRvcG9sb2d5RGVsZXRlQWxsRmlsdGVyc0ludGVudCgpKX0+XG4gICAgICAgICAgICBDbGVhciBGaWx0ZXJzXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PXsnbGluayd9IG9uQ2xpY2s9eygpID0+IHNlYXJjaEV4cHJTZXJ2aWNlLnNldFNlYXJjaEV4cHJlc3Npb24oJycpfT5cbiAgICAgICAgICAgIENsZWFyIFNlYXJjaGVzXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvRW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnM+XG4gICAgICA8Lz5cbiAgICApO1xuICB9LCBbaXNUcnVlbHlFbXB0eSwgc2VhcmNoRXhwclNlcnZpY2UsIGRpc3BhdGNoXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnVsbHNleWUgey4uLnByb3BzfT5cbiAgICAgIDxFbXB0eVN0YXRlIHZhcmlhbnQ9e0VtcHR5U3RhdGVWYXJpYW50LmZ1bGx9PlxuICAgICAgICA8RW1wdHlTdGF0ZUljb24gdmFyaWFudD1cImNvbnRhaW5lclwiIGNvbXBvbmVudD17VG9wb2xvZ3lJY29ufSAvPlxuICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDNcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICBObyBUYXJnZXRzIEZvdW5kXG4gICAgICAgIDwvVGl0bGU+XG4gICAgICAgIHtlbXB0eVN0YXRlQ29udGVudH1cbiAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICA8L0J1bGxzZXllPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHtcbiAgQnVsbHNleWUsXG4gIEJ1dHRvbixcbiAgRW1wdHlTdGF0ZSxcbiAgRW1wdHlTdGF0ZUJvZHksXG4gIEVtcHR5U3RhdGVJY29uLFxuICBFbXB0eVN0YXRlU2Vjb25kYXJ5QWN0aW9ucyxcbiAgVGl0bGUsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgVG9wb2xvZ3lJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5RXhjZWVkTGltaXRTdGF0ZVByb3BzIHtcbiAgb25TaG93VG9wb2xvZ3lBbnl3YXk6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBUb3BvbG9neUV4Y2VlZExpbWl0U3RhdGU6IFJlYWN0LkZDPFRvcG9sb2d5RXhjZWVkTGltaXRTdGF0ZVByb3BzPiA9ICh7XG4gIG9uU2hvd1RvcG9sb2d5QW55d2F5LFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxCdWxsc2V5ZSB7Li4ucHJvcHN9PlxuICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgIDxFbXB0eVN0YXRlSWNvbiB2YXJpYW50PVwiY29udGFpbmVyXCIgY29tcG9uZW50PXtUb3BvbG9neUljb259IC8+XG4gICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9XCJoNFwiPkxvYWRpbmcgb2YgYXBwbGljYXRpb24gdG9wb2xvZ3kgaXMgdGFraW5nIGxvbmdlciB0aGFuIGV4cGVjdGVkPC9UaXRsZT5cbiAgICAgICAgPEVtcHR5U3RhdGVCb2R5PlxuICAgICAgICAgIFdlIGFyZSB3b3JraW5nIG9uIGxvYWRpbmcgdGhlIHRvcG9sb2d5IG9mIHlvdXIgYXBwbGljYXRpb25zLiBTaW5jZSB0aGUgZGF0YSB0byBiZSBkaXNwbGF5ZWQgaXMgbGFyZ2UsIHRoZVxuICAgICAgICAgIHJlbmRlcmluZyBpcyB0YWtpbmcgbW9yZSB0aW1lLiBUbyBzZWUgYSBzbWFsbGVyIHN1YnNldCBvZiB5b3VyIGFwcGxpY2F0aW9ucywgdXNlIHRoZSBmaWx0ZXJzIHRvIHNlbGVjdCB0aGVcbiAgICAgICAgICBwYXJhbWV0ZXJzIG9yIGNsaWNrIENvbnRpbnVlIHRvIGtlZXAgd2FpdGluZy5cbiAgICAgICAgPC9FbXB0eVN0YXRlQm9keT5cbiAgICAgICAgPEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImxpbmtcIiBvbkNsaWNrPXtvblNob3dUb3BvbG9neUFueXdheX0+XG4gICAgICAgICAgICBDb250aW51ZVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L0VtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgPC9FbXB0eVN0YXRlPlxuICAgIDwvQnVsbHNleWU+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IERyYXdlckFjdGlvbnMsIERyYXdlckNsb3NlQnV0dG9uLCBEcmF3ZXJIZWFkLCBEcmF3ZXJQYW5lbEJvZHkgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVNpZGVCYXJQcm9wcyB7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuLy8gUGFyZW50IHdpbGwgd3JhcCB0aGlzIGVsZW1lbnQgaW4gPERyYXdQYW5lQ29udGVudCAvPlxuZXhwb3J0IGNvbnN0IFRvcG9sb2d5U2lkZUJhcjogUmVhY3QuRkM8VG9wb2xvZ3lTaWRlQmFyUHJvcHM+ID0gKHsgY2hpbGRyZW4sIG9uQ2xvc2UsIGNsYXNzTmFtZSwgLi4ucHJvcHMgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHJhd2VySGVhZCBoYXNOb1BhZGRpbmc+XG4gICAgICAgIDxEcmF3ZXJBY3Rpb25zPlxuICAgICAgICAgIDxEcmF3ZXJDbG9zZUJ1dHRvbiBjbGFzc05hbWU9XCJlbnRpdHktb3ZlcnZpZXdfX2VudGl0eS1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXtvbkNsb3NlfSAvPlxuICAgICAgICA8L0RyYXdlckFjdGlvbnM+XG4gICAgICA8L0RyYXdlckhlYWQ+XG4gICAgICA8RHJhd2VyUGFuZWxCb2R5IHsuLi5wcm9wc30gaGFzTm9QYWRkaW5nIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9EcmF3ZXJQYW5lbEJvZHk+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBUYWJsZUNvbXBvc2FibGUsIFRib2R5LCBUZCwgVHIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaG9ydGN1dCB7XG4gIGlkOiBzdHJpbmc7XG4gIHNob3J0Y3V0OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlc2NyaXB0aW9uOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hvcnRjdXRzUHJvcHMge1xuICBzaG9ydGN1dHM6IElTaG9ydGN1dFtdO1xufVxuXG5leHBvcnQgY29uc3QgU2hvcnRjdXRzOiBSZWFjdC5GQzxTaG9ydGN1dHNQcm9wcz4gPSAoeyBzaG9ydGN1dHMsIC4uLnByb3BzIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VGFibGVDb21wb3NhYmxlIGJvcmRlcnM9e2ZhbHNlfSBhcmlhLWxhYmVsPXsnU2hvcnRjdXRzIHRhYmxlJ30gdmFyaWFudD17J2NvbXBhY3QnfSB7Li4ucHJvcHN9PlxuICAgICAgPFRib2R5PlxuICAgICAgICB7c2hvcnRjdXRzLm1hcCgoc2MpID0+IChcbiAgICAgICAgICA8VHIga2V5PXtzYy5pZH0+XG4gICAgICAgICAgICA8VGQga2V5PXtgJHtzYy5pZH0ta2V5Ym9hcmQtc2hvcnRjdXRzYH0+e3NjLnNob3J0Y3V0fTwvVGQ+XG4gICAgICAgICAgICA8VGQga2V5PXtgJHtzYy5pZH0ta2V5Ym9hcmQtc2hvcnRjdXRzLWRlc2NyaXB0aW9uYH0+e3NjLmRlc2NyaXB0aW9ufTwvVGQ+XG4gICAgICAgICAgPC9Ucj5cbiAgICAgICAgKSl9XG4gICAgICA8L1Rib2R5PlxuICAgIDwvVGFibGVDb21wb3NhYmxlPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hvcnRjdXRDb21tYW5kIHtcbiAgaWQ6IHN0cmluZztcbiAgaWNvbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29tbWFuZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgU2hvcnRjdXRDb21tYW5kOiBSZWFjdC5GQzx7IGNvbW1hbmRzOiBJU2hvcnRjdXRDb21tYW5kW10gfT4gPSAoeyBjb21tYW5kcywgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBjb250ZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgX2NvbnRlbnQgPSBjb21tYW5kcy5tYXAoKGNvbW1hbmQpID0+IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17J3RvcG9sb2d5X19zaG9ydGN1dC1jb21tYW5kJ30ga2V5PXtjb21tYW5kLmlkfT5cbiAgICAgICAge2NvbW1hbmQuaWNvbiA/IChcbiAgICAgICAgICA8c3BhbiBrZXk9e2Ake2NvbW1hbmQuaWR9LWljb25gfSBjbGFzc05hbWU9XCJ0b3BvbG9neV9fc2hvcnRjdXQtY29tbWFuZC1pY29uXCI+XG4gICAgICAgICAgICB7Y29tbWFuZC5pY29ufVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxrYmQga2V5PXtgJHtjb21tYW5kLmlkfS1jb21tYW5kYH0+e2NvbW1hbmQuY29tbWFuZH08L2tiZD5cbiAgICAgIDwvc3Bhbj5cbiAgICApKTtcbiAgICAvLyBQdXQgKyBpbiBiZXR3ZWVuXG4gICAgcmV0dXJuIF8uZmxhdE1hcChfY29udGVudCwgKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA8IF9jb250ZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB2YWwsXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXsndG9wb2xvZ3lfX3Nob3J0Y3V0LWNvbW1hbmQtcGx1cyd9IGtleT17YCR7aW5kZXh9LXBsdXNgfT5cbiAgICAgICAgICAgICtcbiAgICAgICAgICA8L3NwYW4+LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt2YWxdO1xuICAgIH0pO1xuICB9LCBbY29tbWFuZHNdKTtcbiAgcmV0dXJuIDxkaXYgey4uLnByb3BzfT57Y29udGVudH08L2Rpdj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaG9ydGN1dHM7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgZ2V0RGlzcGxheUZpZWxkTmFtZSB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBjcmVhdGVSZWR1Y2VyIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQgeyBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZSB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQvZGlzdC9jcmVhdGVSZWR1Y2VyJztcbmltcG9ydCB7IGdldFBlcnNpc3RlZFN0YXRlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBfdmVyc2lvbiA9ICcxJztcblxuZXhwb3J0IGVudW0gVG9wb2xvZ3lDb25maWdBY3Rpb24ge1xuICBWSUVXX01PREVfU0VUID0gJ3RvcG9sb2d5LWNvbmZpZy9zZXQtdmlldy1tb2RlJyxcbiAgRElTUExBWV9PUFRJT05fU0VUID0gJ3RvcG9sb2d5LWNvbmZpZy9zZXQtZGlzbGF5LW9wdGlvbnMnLFxufVxuXG5leHBvcnQgY29uc3QgZW51bVZhbHVlcyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhUb3BvbG9neUNvbmZpZ0FjdGlvbikpO1xuXG5leHBvcnQgdHlwZSBWaWV3TW9kZSA9ICdncmFwaCcgfCAnbGlzdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheU9wdGlvbnMge1xuICBzaG93OiB7XG4gICAgY29ubmVjdGlvblVybDogYm9vbGVhbjtcbiAgICBiYWRnZTogYm9vbGVhbjtcbiAgICBzdGF0dXM6IGJvb2xlYW47XG4gICAgaWNvbjogYm9vbGVhbjtcbiAgfTtcbiAgZ3JvdXBpbmdzOiB7XG4gICAgY29sbGFwc2VTaW5nbGVzOiBib29sZWFuO1xuICAgIHJlYWxtT25seTogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT3B0aW9uQ2F0ZWdvcnkgPSAnc2hvdycgfCAnZ3JvdXBpbmdzJztcblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVNldFZpZXdNb2RlQWN0aW9uUGF5bG9hZCB7XG4gIHZpZXdNb2RlOiBWaWV3TW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVNldERpc3BsYXlPcHRpb25zQWN0aW9uUGF5bG9hZCB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IHRvcG9sb2d5Q29uZmlnU2V0Vmlld01vZGVJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIFRvcG9sb2d5Q29uZmlnQWN0aW9uLlZJRVdfTU9ERV9TRVQsXG4gICh2aWV3TW9kZTogVmlld01vZGUpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgdmlld01vZGUsXG4gICAgfSBhcyBUb3BvbG9neVNldFZpZXdNb2RlQWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCB0b3BvbG9neURpc3BsYXlPcHRpb25zU2V0SW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBUb3BvbG9neUNvbmZpZ0FjdGlvbi5ESVNQTEFZX09QVElPTl9TRVQsXG4gIChjYXRlZ29yeTogT3B0aW9uQ2F0ZWdvcnksIGtleTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbikgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBjYXRlZ29yeSxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgIH0gYXMgVG9wb2xvZ3lTZXREaXNwbGF5T3B0aW9uc0FjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5Q29uZmlnIHtcbiAgdmlld01vZGU6IFZpZXdNb2RlO1xuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0RGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICBzaG93OiB7XG4gICAgY29ubmVjdGlvblVybDogZmFsc2UsXG4gICAgYmFkZ2U6IHRydWUsXG4gICAgc3RhdHVzOiB0cnVlLFxuICAgIGljb246IHRydWUsXG4gIH0sXG4gIGdyb3VwaW5nczoge1xuICAgIHJlYWxtT25seTogZmFsc2UsXG4gICAgY29sbGFwc2VTaW5nbGVzOiBmYWxzZSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93T3B0aW9uczogW3N0cmluZywgc3RyaW5nXVtdID0gT2JqZWN0LmtleXMoZGVmYXVsdERpc3BsYXlPcHRpb25zLnNob3cpLm1hcCgoaykgPT4ge1xuICByZXR1cm4gW2dldERpc3BsYXlGaWVsZE5hbWUoayksIGtdO1xufSk7XG5cbmV4cG9ydCBjb25zdCBncm91cGluZ09wdGlvbnM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IE9iamVjdC5rZXlzKGRlZmF1bHREaXNwbGF5T3B0aW9ucy5ncm91cGluZ3MpLm1hcCgoaykgPT4ge1xuICByZXR1cm4gW2dldERpc3BsYXlGaWVsZE5hbWUoayksIGtdO1xufSk7XG5cbmNvbnN0IElOSVRJQUxfU1RBVEU6IFRvcG9sb2d5Q29uZmlnID0gZ2V0UGVyc2lzdGVkU3RhdGUoJ1RPUE9MT0dZX0NPTkZJRycsIF92ZXJzaW9uLCB7XG4gIHZpZXdNb2RlOiAnZ3JhcGgnLFxuICBkaXNwbGF5T3B0aW9uczogZGVmYXVsdERpc3BsYXlPcHRpb25zLFxufSk7XG5cbmV4cG9ydCBjb25zdCB0b3BvbG9neUNvbmZpZ1JlZHVjZXI6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFRvcG9sb2d5Q29uZmlnPiA9IGNyZWF0ZVJlZHVjZXIoXG4gIElOSVRJQUxfU1RBVEUsXG4gIChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKHRvcG9sb2d5Q29uZmlnU2V0Vmlld01vZGVJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN0YXRlLnZpZXdNb2RlID0gcGF5bG9hZC52aWV3TW9kZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UodG9wb2xvZ3lEaXNwbGF5T3B0aW9uc1NldEludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBjYXRlZ29yeSwga2V5LCB2YWx1ZSB9ID0gcGF5bG9hZDtcbiAgICAgIGlmIChzdGF0ZS5kaXNwbGF5T3B0aW9uc1tjYXRlZ29yeV0pIHtcbiAgICAgICAgc3RhdGUuZGlzcGxheU9wdGlvbnNbY2F0ZWdvcnldW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmRpc3BsYXlPcHRpb25zW2NhdGVnb3J5XSA9IHtcbiAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZ3JvdXBpbmdzXG4gICAgICAvLyBJZiByZWFsbU9ubHkgaXMgdHJ1ZSwgc2luZ2xlR3JvdXBzIHNob3VsZCBhbHNvIGJlIHRydWVcbiAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ2dyb3VwaW5ncycgJiYga2V5ID09PSAncmVhbG1Pbmx5Jykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBzdGF0ZS5kaXNwbGF5T3B0aW9ucy5ncm91cGluZ3MuY29sbGFwc2VTaW5nbGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCB0b3BvbG9neUNvbmZpZ1JlZHVjZXI7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IGdyb3VwaW5nT3B0aW9ucywgT3B0aW9uQ2F0ZWdvcnksIHNob3dPcHRpb25zIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvQ29uZmlndXJhdGlvbnMvVG9wb2xvZ3lDb25maWdTbGljZSc7XG5pbXBvcnQgeyBSb290U3RhdGUsIHRvcG9sb2d5RGlzcGxheU9wdGlvbnNTZXRJbnRlbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IENoZWNrYm94LCBEaXZpZGVyLCBTZWxlY3QsIFN0YWNrLCBTdGFja0l0ZW0sIFN3aXRjaCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlPcHRpb25zUHJvcHMge1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNHcmFwaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBEaXNwbGF5T3B0aW9uczogUmVhY3QuRkM8RGlzcGxheU9wdGlvbnNQcm9wcz4gPSAoe1xuICBpc0Rpc2FibGVkID0gZmFsc2UsXG4gIGlzR3JhcGg6IGlzR3JhcGhWaWV3ID0gdHJ1ZSxcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IHNob3csIGdyb3VwaW5ncyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLnRvcG9sb2d5Q29uZmlncy5kaXNwbGF5T3B0aW9ucyk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0T3Blbigob2xkKSA9PiAhb2xkKSwgW3NldE9wZW5dKTtcblxuICBjb25zdCBnZXRDaGFuZ2VIYW5kbGVyID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGdyb3VwOiBPcHRpb25DYXRlZ29yeSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiAoY2hlY2tlZDogYm9vbGVhbiwgXykgPT4ge1xuICAgICAgICBkaXNwYXRjaCh0b3BvbG9neURpc3BsYXlPcHRpb25zU2V0SW50ZW50KGdyb3VwLCBrZXksIGNoZWNrZWQpKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBbZGlzcGF0Y2hdXG4gICk7XG5cbiAgY29uc3QgY2hlY2tCb3hDb250ZW50cyA9IFJlYWN0LnVzZU1lbW8oKCk6IFtzdHJpbmcsIEpTWC5FbGVtZW50XVtdID0+IHtcbiAgICByZXR1cm4gc2hvd09wdGlvbnMubWFwKChbb3B0aW9uLCBrZXldKSA9PiBbXG4gICAgICBrZXksXG4gICAgICA8Q2hlY2tib3hcbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtgc2hvdy0ke29wdGlvbi50b0xvd2VyQ2FzZSgpfS1jaGVja2JveGB9XG4gICAgICAgIGNsYXNzTmFtZT17J3RvcG9sb2d5X19kaXNwbGF5LW9wdGlvbi1tZW51LWl0ZW0nfVxuICAgICAgICBsYWJlbD17b3B0aW9ufVxuICAgICAgICBpc0NoZWNrZWQ9e3Nob3dba2V5XX1cbiAgICAgICAgb25DaGFuZ2U9e2dldENoYW5nZUhhbmRsZXIoJ3Nob3cnLCBrZXkpfVxuICAgICAgICBpc0Rpc2FibGVkPXshaXNHcmFwaFZpZXd9IC8vIEFsbG93IG9ubHkgZ3JhcGggdmlld1xuICAgICAgLz4sXG4gICAgXSk7XG4gIH0sIFtzaG93LCBpc0dyYXBoVmlldywgZ2V0Q2hhbmdlSGFuZGxlcl0pO1xuXG4gIGNvbnN0IHN3aXRjaENvbnRlbnRzID0gUmVhY3QudXNlTWVtbygoKTogW3N0cmluZywgSlNYLkVsZW1lbnRdW10gPT4ge1xuICAgIHJldHVybiBncm91cGluZ09wdGlvbnMubWFwKChbb3B0aW9uLCBrZXldKSA9PiBbXG4gICAgICBrZXksXG4gICAgICA8U3dpdGNoXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBpZD17YCR7b3B0aW9uLnRvTG93ZXJDYXNlKCl9LW1vZGVgfVxuICAgICAgICBjbGFzc05hbWU9eyd0b3BvbG9neV9fZGlzcGxheS1vcHRpb24tbWVudS1pdGVtJ31cbiAgICAgICAgbGFiZWw9e29wdGlvbn1cbiAgICAgICAgaXNEaXNhYmxlZD17a2V5ID09PSAnY29sbGFwc2VTaW5nbGVzJyAmJiBncm91cGluZ3MucmVhbG1Pbmx5fVxuICAgICAgICBpc0NoZWNrZWQ9e2dyb3VwaW5nc1trZXldfVxuICAgICAgICBvbkNoYW5nZT17Z2V0Q2hhbmdlSGFuZGxlcignZ3JvdXBpbmdzJywga2V5KX1cbiAgICAgIC8+LFxuICAgIF0pO1xuICB9LCBbZ3JvdXBpbmdzLCBnZXRDaGFuZ2VIYW5kbGVyXSk7XG5cbiAgY29uc3QgbWVudUNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN0YWNrIGNsYXNzTmFtZT1cInRvcG9sb2d5X19kaXNwbGF5LW9wdGlvbi1tZW51XCI+XG4gICAgICAgIDxTdGFja0l0ZW0ga2V5PXsnbW9kZS1ncm91cC10aXRsZSd9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInBmLWMtc2VsZWN0X19tZW51LWdyb3VwLXRpdGxlXCI+R3JvdXBpbmdzPC9zcGFuPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAge3N3aXRjaENvbnRlbnRzLm1hcCgoW2tleSwgY2hpbGRyZW5dKSA9PiAoXG4gICAgICAgICAgPFN0YWNrSXRlbSBrZXk9e2tleX0+e2NoaWxkcmVufTwvU3RhY2tJdGVtPlxuICAgICAgICApKX1cbiAgICAgICAgPFN0YWNrSXRlbSBrZXk9eydkaXZpZGVyMCd9PlxuICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICA8U3RhY2tJdGVtIGtleT17J3Nob3ctZ3JvdXAtdGl0bGUnfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJwZi1jLXNlbGVjdF9fbWVudS1ncm91cC10aXRsZVwiPlNob3c8L3NwYW4+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICB7Y2hlY2tCb3hDb250ZW50cy5tYXAoKFtrZXksIGNoaWxkcmVuXSkgPT4gKFxuICAgICAgICAgIDxTdGFja0l0ZW0ga2V5PXtrZXl9PntjaGlsZHJlbn08L1N0YWNrSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1N0YWNrPlxuICAgICk7XG4gIH0sIFtjaGVja0JveENvbnRlbnRzLCBzd2l0Y2hDb250ZW50c10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgey4uLnByb3BzfVxuICAgICAgbWVudUFwcGVuZFRvPXsncGFyZW50J31cbiAgICAgIG9uVG9nZ2xlPXtoYW5kbGVUb2dnbGV9XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaXNPcGVuPXtvcGVufVxuICAgICAgYXJpYS1sYWJlbD17J0Rpc3BsYXkgT3B0aW9ucyd9XG4gICAgICBwbGFjZWhvbGRlclRleHQ9eydEaXNwbGF5IG9wdGlvbnMnfVxuICAgICAgY3VzdG9tQ29udGVudD17bWVudUNvbnRlbnR9XG4gICAgLz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTZWFyY2hFeHByZXNzaW9uIGFzIHVzZVNlYXJjaEV4cHJlc3Npb24gfSBmcm9tICcuLi9TaGFyZWQvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRCeU1hdGNoRXhwcmVzc2lvblByb3BzIHtcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBGaW5kQnlNYXRjaEV4cHJlc3Npb246IFJlYWN0LkZDPEZpbmRCeU1hdGNoRXhwcmVzc2lvblByb3BzPiA9ICh7IGlzRGlzYWJsZWQsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW2V4cHJlc3Npb24sIHNldEV4cHJlc3Npb25dID0gdXNlU2VhcmNoRXhwcmVzc2lvbigpO1xuXG4gIHJldHVybiAoXG4gICAgPFNlYXJjaElucHV0XG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBwbGFjZWhvbGRlcj17J0ZpbmQgYnkgbWF0Y2ggZXhwcmVzc2lvbi4uLid9XG4gICAgICB2YWx1ZT17ZXhwcmVzc2lvbn1cbiAgICAgIG9uQ2hhbmdlPXtzZXRFeHByZXNzaW9ufVxuICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgQnV0dG9uLCBJY29uLCBQb3BvdmVyIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBJbmZvQ2lyY2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGFjdGlvbiwgVmlzdWFsaXphdGlvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRvcG9sb2d5JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBIZWxwQnV0dG9uUHJvcHMge1xuICB2aXN1YWxpemF0aW9uPzogVmlzdWFsaXphdGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IEhlbHBCdXR0b246IFJlYWN0LkZDPEhlbHBCdXR0b25Qcm9wcz4gPSAoeyB2aXN1YWxpemF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IG9uQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWN0aW9uKCgpID0+IHtcbiAgICAgIHZpc3VhbGl6YXRpb24gJiYgdmlzdWFsaXphdGlvbi5nZXRHcmFwaCgpLmZpdCgxMjApO1xuICAgIH0pKCk7XG4gIH0sIFt2aXN1YWxpemF0aW9uXSk7XG5cbiAgY29uc3QgY29udGVudCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgU2VhcmNoIHJlc3VsdHMgbWF5IGFwcGVhciBvdXRzaWRlIG9mIHRoZSB2aXNpYmxlIGFyZWEueycgJ31cbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvbkNsaWNrfSB2YXJpYW50PVwibGlua1wiIGlzSW5saW5lPlxuICAgICAgICAgIENsaWNrIGhlcmVcbiAgICAgICAgPC9CdXR0b24+eycgJ31cbiAgICAgICAgdG8gZml0IHRvIHRoZSBzY3JlZW4uXG4gICAgICA8Lz5cbiAgICApLFxuICAgIFtvbkNsaWNrXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFBvcG92ZXIgYm9keUNvbnRlbnQ9e2NvbnRlbnR9IHBvc2l0aW9uPXsnbGVmdCd9IHsuLi5wcm9wc30+XG4gICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwbGFpblwiIGNsYXNzTmFtZT1cInRvcG9sb2d5X19oZWxwLWljb24tYnV0dG9uXCI+XG4gICAgICAgIDxJY29uIHN0YXR1cz1cImluZm9cIj5cbiAgICAgICAgICA8SW5mb0NpcmNsZUljb24gY2xhc3NOYW1lPVwidG9wb2xvZ3lfX2hlbHAtaWNvblwiIC8+XG4gICAgICAgIDwvSWNvbj5cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvUG9wb3Zlcj5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQnV0dG9uLCBUb29sdGlwIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUXVpY2tTZWFyY2hJY29uIGZyb20gJy4uL1NoYXJlZC9RdWlja1NlYXJjaEljb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1aWNrU2VhcmNoQnV0dG9uUHJvcHMge1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xuICB0b29sdGlwQ29udGVudD86IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IFF1aWNrU2VhcmNoQnV0dG9uOiBSZWFjdC5GQzxRdWlja1NlYXJjaEJ1dHRvblByb3BzPiA9ICh7IG9uQ2xpY2ssIHRvb2x0aXBDb250ZW50LCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGNhdGFsb2dSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoYW5kbGVDbGljayA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsaWNrKCk7XG4gICAgY2F0YWxvZ1JlZi5jdXJyZW50Py5ibHVyKCk7IC8vIFJlbW92ZSBmb2N1cyBvbiB0aGUgY2F0YWxvZyBidXR0b25cbiAgfSwgW29uQ2xpY2tdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9XCJ0b3BvbG9neS1xdWlja3NlYXJjaC1idG4td3JhcHBlclwiPlxuICAgICAgPFRvb2x0aXBcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBjb250ZW50PXt0b29sdGlwQ29udGVudH1cbiAgICAgICAgYXBwZW5kVG89eygpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BvbG9neS1xdWlja3NlYXJjaC1idG4td3JhcHBlcicpIHx8IGRvY3VtZW50LmJvZHl9XG4gICAgICA+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmc6IDAgfX1cbiAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9eyd0b3BvbG9neS1jYXRhbG9nLWJ0bid9XG4gICAgICAgICAgcmVmPXtjYXRhbG9nUmVmfVxuICAgICAgICA+XG4gICAgICAgICAgPFF1aWNrU2VhcmNoSWNvbiAvPlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvVG9vbHRpcD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFRvcG9sb2d5RmlsdGVycyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvVG9wb2xvZ3lGaWx0ZXJTbGljZSc7XG5pbXBvcnQge1xuICBSb290U3RhdGUsXG4gIHRvcG9sb2d5RGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50LFxuICB0b3BvbG9neURlbGV0ZUZpbHRlckludGVudCxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBnZXREaXNwbGF5RmllbGROYW1lIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBDaGlwLCBDaGlwR3JvdXAgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IE5vZGVUeXBlIH0gZnJvbSAnLi4vdHlwaW5ncyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lGaWx0ZXJDaGlwc1Byb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgVG9wb2xvZ3lGaWx0ZXJDaGlwczogUmVhY3QuRkM8VG9wb2xvZ3lGaWx0ZXJDaGlwc1Byb3BzPiA9ICh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCB7IGdyb3VwRmlsdGVycywgdGFyZ2V0RmlsdGVycyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLnRvcG9sb2d5RmlsdGVycyk7XG5cbiAgY29uc3QgZ2VuZXJhdGVDaGlwID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHsgZmlsdGVycyB9OiBUb3BvbG9neUZpbHRlcnNbJ2dyb3VwRmlsdGVycyddIHwgVG9wb2xvZ3lGaWx0ZXJzWyd0YXJnZXRGaWx0ZXJzJ10sIGlzR3JvdXBDYXRlZ29yeTogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKGlzR3JvdXBDYXRlZ29yeSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmlsdGVycykubWFwKChbbm9kZVR5cGUsIGZpbHRlcl0pID0+IHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmlsdGVyKS5tYXAoKFtjYXRlZ29yeSwgdmFsdWVzXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFRvcG9sb2d5RmlsdGVyQ2hpcFxuICAgICAgICAgICAgICAgIGtleT17YCR7bm9kZVR5cGV9LSR7Y2F0ZWdvcnl9YH1cbiAgICAgICAgICAgICAgICBpc0dyb3VwQ2F0ZWdvcnk9e2lzR3JvdXBDYXRlZ29yeX1cbiAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgY2hpcFZhbHVlcz17dmFsdWVzIGFzIHN0cmluZ1tdfVxuICAgICAgICAgICAgICAgIG5vZGVUeXBlPXtub2RlVHlwZSBhcyBOb2RlVHlwZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0b3BvbG9neV9fZmlsdGVyLWNoaXAtZ3JvdXBcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmlsdGVycykubWFwKChbY2F0ZWdvcnksIHZhbHVlc10pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRvcG9sb2d5RmlsdGVyQ2hpcFxuICAgICAgICAgICAgICBrZXk9e2BUYXJnZXQtJHtjYXRlZ29yeX1gfVxuICAgICAgICAgICAgICBpc0dyb3VwQ2F0ZWdvcnk9e2lzR3JvdXBDYXRlZ29yeX1cbiAgICAgICAgICAgICAgY2F0ZWdvcnk9e2NhdGVnb3J5fVxuICAgICAgICAgICAgICBjaGlwVmFsdWVzPXt2YWx1ZXMgYXMgc3RyaW5nW119XG4gICAgICAgICAgICAgIG5vZGVUeXBlPXsnVGFyZ2V0J30gLy8gSWdub3JlZCBieSByZWR1Y2VyLCBqdXN0IGZvciBkaXNwbGF5XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRvcG9sb2d5X19maWx0ZXItY2hpcC1ncm91cFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBncm91cENoaXBzID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZW5lcmF0ZUNoaXAoZ3JvdXBGaWx0ZXJzLCB0cnVlKSwgW2dyb3VwRmlsdGVycywgZ2VuZXJhdGVDaGlwXSk7XG5cbiAgY29uc3QgdGFyZ2V0Q2hpcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdlbmVyYXRlQ2hpcCh0YXJnZXRGaWx0ZXJzLCBmYWxzZSksIFt0YXJnZXRGaWx0ZXJzLCBnZW5lcmF0ZUNoaXBdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLnByb3BzfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICB7Z3JvdXBDaGlwc31cbiAgICAgIHt0YXJnZXRDaGlwc31cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lGaWx0ZXJDaGlwUHJvcHMge1xuICBpc0dyb3VwQ2F0ZWdvcnk6IGJvb2xlYW47XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG5vZGVUeXBlOiBzdHJpbmc7XG4gIGNoaXBWYWx1ZXM6IHN0cmluZ1tdO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBUb3BvbG9neUZpbHRlckNoaXA6IFJlYWN0LkZDPFRvcG9sb2d5RmlsdGVyQ2hpcFByb3BzPiA9ICh7XG4gIGlzR3JvdXBDYXRlZ29yeSxcbiAgY2xhc3NOYW1lLFxuICBjYXRlZ29yeSxcbiAgbm9kZVR5cGUsXG4gIGNoaXBWYWx1ZXMsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVDaGlwID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGRpc3BhdGNoKHRvcG9sb2d5RGVsZXRlRmlsdGVySW50ZW50KGlzR3JvdXBDYXRlZ29yeSwgbm9kZVR5cGUsIGNhdGVnb3J5LCB2YWx1ZSkpO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoLCBpc0dyb3VwQ2F0ZWdvcnksIG5vZGVUeXBlLCBjYXRlZ29yeV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVDaGlwR3JvdXAgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2godG9wb2xvZ3lEZWxldGVDYXRlZ29yeUZpbHRlcnNJbnRlbnQoaXNHcm91cENhdGVnb3J5LCBub2RlVHlwZSwgY2F0ZWdvcnkpKTtcbiAgfSwgW2Rpc3BhdGNoLCBpc0dyb3VwQ2F0ZWdvcnksIG5vZGVUeXBlLCBjYXRlZ29yeV0pO1xuXG4gIHJldHVybiAoXG4gICAgPENoaXBHcm91cFxuICAgICAgey4uLnByb3BzfVxuICAgICAgY2F0ZWdvcnlOYW1lPXtgJHtub2RlVHlwZX0vJHtnZXREaXNwbGF5RmllbGROYW1lKGNhdGVnb3J5KX1gfVxuICAgICAgaXNDbG9zYWJsZVxuICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQ2hpcEdyb3VwfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgPlxuICAgICAge2NoaXBWYWx1ZXMubWFwKCh2YWx1ZSkgPT4gKFxuICAgICAgICA8Q2hpcCBrZXk9e3ZhbHVlfSBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVDaGlwKHZhbHVlKX0+XG4gICAgICAgICAge3ZhbHVlfVxuICAgICAgICA8L0NoaXA+XG4gICAgICApKX1cbiAgICA8L0NoaXBHcm91cD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgRW52aXJvbm1lbnROb2RlLCBOb2RlVHlwZSwgVGFyZ2V0Tm9kZSB9IGZyb20gJ0BhcHAvVG9wb2xvZ3kvdHlwaW5ncyc7XG5pbXBvcnQgeyBjcmVhdGVBY3Rpb24sIGNyZWF0ZVJlZHVjZXIgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcbmltcG9ydCB7IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdC9kaXN0L2NyZWF0ZVJlZHVjZXInO1xuaW1wb3J0IHsgZ2V0UGVyc2lzdGVkU3RhdGUgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IF92ZXJzaW9uID0gJzEnO1xuXG5leHBvcnQgZW51bSBUb3BvbG9neUZpbHRlckFjdGlvbiB7XG4gIENBVEVHT1JZX1RZUEVfVVBEQVRFID0gJ3RvcG9sb2d5LWNhdGVnb3J5LXR5cGUvdXBkYXRlJyxcbiAgQ0FURUdPUllfVVBEQVRFID0gJ3RvcG9sb2d5LWNhdGVnb3J5L3VwZGF0ZScsXG4gIEZJTFRFUl9BREQgPSAndG9wb2xvZ3ktZmlsdGVyL2FkZCcsXG4gIEZJTFRFUl9ERUxFVEUgPSAndG9wb2xvZ3ktZmlsdGVyL2RlbGV0ZScsIC8vIERlbGV0ZSBhIGZpbHRlciBpbiBhIGNhdGVnb3J5XG4gIEZJTFRFUl9ERUxFVEVfQUxMID0gJ3RvcG9sb2d5LWZpbHRlci9kZWxldGUtYWxsJywgLy8gRGVsZXRlIGFsbCBmaWx0ZXJzIGluIGFsbCBjYXRlZ29yaWVzXG4gIENBVEVHT1JZX0ZJTFRFUlNfREVMRVRFID0gJ3RvcG9sb2d5LWZpbHRlci9kZWxldGUtY2F0ZWdvcnknLCAvLyBEZWxldGUgYWxsIGZpbHRlcnMgb2YgdGhlIHNhbWUgY2F0ZWdvcnlcbn1cblxuZXhwb3J0IGNvbnN0IGVudW1WYWx1ZXMgPSBuZXcgU2V0KE9iamVjdC52YWx1ZXMoVG9wb2xvZ3lGaWx0ZXJBY3Rpb24pKTtcblxuZXhwb3J0IGNvbnN0IHRvcG9sb2d5VXBkYXRlQ2F0ZWdvcnlUeXBlSW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBUb3BvbG9neUZpbHRlckFjdGlvbi5DQVRFR09SWV9UWVBFX1VQREFURSxcbiAgKGlzR3JvdXA6IGJvb2xlYW4pID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgaXNHcm91cCxcbiAgICB9LFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IHRvcG9sb2d5VXBkYXRlQ2F0ZWdvcnlJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIFRvcG9sb2d5RmlsdGVyQWN0aW9uLkNBVEVHT1JZX1VQREFURSxcbiAgKGlzR3JvdXA6IGJvb2xlYW4sIGNhdGVnb3J5OiBzdHJpbmcpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgaXNHcm91cCxcbiAgICAgIGNhdGVnb3J5LFxuICAgIH0sXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgdG9wb2xvZ3lBZGRGaWx0ZXJJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIFRvcG9sb2d5RmlsdGVyQWN0aW9uLkZJTFRFUl9BREQsXG4gIChpc0dyb3VwOiBib29sZWFuLCBub2RlVHlwZTogTm9kZVR5cGUsIGNhdGVnb3J5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgaXNHcm91cCxcbiAgICAgIG5vZGVUeXBlLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICB2YWx1ZSxcbiAgICB9LFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IHRvcG9sb2d5RGVsZXRlRmlsdGVySW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBUb3BvbG9neUZpbHRlckFjdGlvbi5GSUxURVJfREVMRVRFLFxuICAoaXNHcm91cDogYm9vbGVhbiwgbm9kZVR5cGU6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBpc0dyb3VwLFxuICAgICAgbm9kZVR5cGUsXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIHZhbHVlLFxuICAgIH0sXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgdG9wb2xvZ3lEZWxldGVBbGxGaWx0ZXJzSW50ZW50ID0gY3JlYXRlQWN0aW9uKFRvcG9sb2d5RmlsdGVyQWN0aW9uLkZJTFRFUl9ERUxFVEVfQUxMLCAoKSA9PiAoe1xuICBwYXlsb2FkOiB7fSxcbn0pKTtcblxuZXhwb3J0IGNvbnN0IHRvcG9sb2d5RGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBUb3BvbG9neUZpbHRlckFjdGlvbi5DQVRFR09SWV9GSUxURVJTX0RFTEVURSxcbiAgKGlzR3JvdXA6IGJvb2xlYW4sIG5vZGVUeXBlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgaXNHcm91cCxcbiAgICAgIG5vZGVUeXBlLFxuICAgICAgY2F0ZWdvcnksXG4gICAgfSxcbiAgfSlcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lGaWx0ZXJzIHtcbiAgaXNHcm91cDogYm9vbGVhbjtcbiAgZ3JvdXBGaWx0ZXJzOiB7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcbiAgICBmaWx0ZXJzOiB7XG4gICAgICBbbm9kZVR5cGU6IHN0cmluZ106IHtcbiAgICAgICAgTmFtZTogc3RyaW5nW107XG4gICAgICAgIExhYmVsOiBzdHJpbmdbXTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbiAgdGFyZ2V0RmlsdGVyczoge1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgZmlsdGVyczoge1xuICAgICAgQWxpYXM6IHN0cmluZ1tdO1xuICAgICAgQ29ubmVjdGlvblVybDogc3RyaW5nW107XG4gICAgICBKdm1JZDogc3RyaW5nW107XG4gICAgICBMYWJlbDogc3RyaW5nW107XG4gICAgICBBbm5vdGF0aW9uOiBzdHJpbmdbXTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY2F0ZWdvcnlUb05vZGVGaWVsZCA9IChmaWx0ZXJDYXRlZ29yeTogc3RyaW5nKToga2V5b2YgRW52aXJvbm1lbnROb2RlIHwga2V5b2YgVGFyZ2V0Tm9kZVsndGFyZ2V0J10gPT4ge1xuICBzd2l0Y2ggKGZpbHRlckNhdGVnb3J5KSB7XG4gICAgY2FzZSAnTmFtZSc6XG4gICAgICByZXR1cm4gJ25hbWUnO1xuICAgIGNhc2UgJ0xhYmVsJzpcbiAgICAgIHJldHVybiAnbGFiZWxzJztcbiAgICBjYXNlICdBbm5vdGF0aW9uJzpcbiAgICAgIHJldHVybiAnYW5ub3RhdGlvbnMnO1xuICAgIGNhc2UgJ0p2bUlkJzpcbiAgICAgIHJldHVybiAnanZtSWQnO1xuICAgIGNhc2UgJ0FsaWFzJzpcbiAgICAgIHJldHVybiAnYWxpYXMnO1xuICAgIGNhc2UgJ0Nvbm5lY3Rpb25VcmwnOlxuICAgICAgcmV0dXJuICdjb25uZWN0VXJsJztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCAke2ZpbHRlckNhdGVnb3J5fSBmb3IgZmlsdGVycy5gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRFbXB0eUdyb3VwRmlsdGVycyA9IHtcbiAgTmFtZTogW10sXG4gIExhYmVsOiBbXSxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0RW1wdHlUYXJnZXRGaWx0ZXJzID0ge1xuICAvLyBCZWxvdyB3aWxsIGJlIHRha2VuIGZyb20gbm9kZS50YXJnZXRcbiAgQWxpYXM6IFtdLFxuICBDb25uZWN0aW9uVXJsOiBbXSxcbiAgSnZtSWQ6IFtdLFxuICBMYWJlbDogW10sXG4gIEFubm90YXRpb246IFtdLFxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUb3BvbG9neUZpbHRlcnM6IFRvcG9sb2d5RmlsdGVycyA9IHtcbiAgaXNHcm91cDogZmFsc2UsXG4gIGdyb3VwRmlsdGVyczoge1xuICAgIGNhdGVnb3J5OiAnTmFtZScsXG4gICAgZmlsdGVyczoge30sXG4gIH0sXG4gIHRhcmdldEZpbHRlcnM6IHtcbiAgICBjYXRlZ29yeTogJ0FsaWFzJyxcbiAgICBmaWx0ZXJzOiBkZWZhdWx0RW1wdHlUYXJnZXRGaWx0ZXJzLFxuICB9LFxufTtcblxuLy8gUmVwcmVzZW50aW5nIGtleXMuIENvbXBvbmVudCBjYW4gcGlwZSBpdCB2aWEgZ2V0RGlzcGxheUZpZWxkTmFtZVxuZXhwb3J0IGNvbnN0IGFsbG93ZWRUYXJnZXRGaWx0ZXJzID0gT2JqZWN0LmtleXMoZGVmYXVsdEVtcHR5VGFyZ2V0RmlsdGVycyk7XG5cbmV4cG9ydCBjb25zdCBhbGxvd2VkR3JvdXBGaWx0ZXJzID0gT2JqZWN0LmtleXMoZGVmYXVsdEVtcHR5R3JvdXBGaWx0ZXJzKTtcblxuY29uc3QgSU5JVElBTF9TVEFURTogVG9wb2xvZ3lGaWx0ZXJzID0gZ2V0UGVyc2lzdGVkU3RhdGUoJ1RPUE9MT0dZX0ZJTFRFUlMnLCBfdmVyc2lvbiwgZGVmYXVsdFRvcG9sb2d5RmlsdGVycyk7XG5cbmV4cG9ydCBjb25zdCB0b3BvbG9neUZpbHRlclJlZHVjZXI6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFRvcG9sb2d5RmlsdGVycz4gPSBjcmVhdGVSZWR1Y2VyKFxuICBJTklUSUFMX1NUQVRFLFxuICAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZSh0b3BvbG9neVVwZGF0ZUNhdGVnb3J5VHlwZUludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgc3RhdGUuaXNHcm91cCA9IHBheWxvYWQuaXNHcm91cDtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UodG9wb2xvZ3lVcGRhdGVDYXRlZ29yeUludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBpc0dyb3VwLCBjYXRlZ29yeSB9ID0gcGF5bG9hZDtcbiAgICAgIGlmIChpc0dyb3VwKSB7XG4gICAgICAgIHN0YXRlLmdyb3VwRmlsdGVycy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudGFyZ2V0RmlsdGVycy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZSh0b3BvbG9neUFkZEZpbHRlckludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBpc0dyb3VwLCBjYXRlZ29yeSwgdmFsdWUsIG5vZGVUeXBlIH0gPSBwYXlsb2FkO1xuICAgICAgaWYgKGlzR3JvdXApIHtcbiAgICAgICAgY29uc3Qgb2xkID0gc3RhdGUuZ3JvdXBGaWx0ZXJzLmZpbHRlcnNbbm9kZVR5cGVdIHx8IGRlZmF1bHRFbXB0eUdyb3VwRmlsdGVycztcbiAgICAgICAgc3RhdGUuZ3JvdXBGaWx0ZXJzLmZpbHRlcnNbbm9kZVR5cGVdID0ge1xuICAgICAgICAgIC4uLm9sZCxcbiAgICAgICAgICBbY2F0ZWdvcnldOiBbLi4ub2xkW2NhdGVnb3J5XSwgdmFsdWVdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2xkOiBzdHJpbmdbXSA9IHN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyc1tjYXRlZ29yeV07XG4gICAgICAgIHN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyc1tjYXRlZ29yeV0gPSBbLi4ub2xkLmZpbHRlcigodmFsOiBzdHJpbmcpID0+IHZhbCAhPT0gdmFsdWUpLCB2YWx1ZV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHRvcG9sb2d5RGVsZXRlRmlsdGVySW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IGlzR3JvdXAsIGNhdGVnb3J5LCB2YWx1ZSwgbm9kZVR5cGUgfSA9IHBheWxvYWQ7XG4gICAgICBpZiAoaXNHcm91cCkge1xuICAgICAgICBjb25zdCBvbGQgPSBzdGF0ZS5ncm91cEZpbHRlcnMuZmlsdGVyc1tub2RlVHlwZV0gfHwgZGVmYXVsdEVtcHR5R3JvdXBGaWx0ZXJzO1xuICAgICAgICBzdGF0ZS5ncm91cEZpbHRlcnMuZmlsdGVyc1tub2RlVHlwZV0gPSB7XG4gICAgICAgICAgLi4ub2xkLFxuICAgICAgICAgIFtjYXRlZ29yeV06IG9sZFtjYXRlZ29yeV0uZmlsdGVyKCh2YWw6IHN0cmluZykgPT4gdmFsICE9PSB2YWx1ZSksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvbGQ6IHN0cmluZ1tdID0gc3RhdGUudGFyZ2V0RmlsdGVycy5maWx0ZXJzW2NhdGVnb3J5XTtcbiAgICAgICAgc3RhdGUudGFyZ2V0RmlsdGVycy5maWx0ZXJzW2NhdGVnb3J5XSA9IG9sZC5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgIT09IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UodG9wb2xvZ3lEZWxldGVDYXRlZ29yeUZpbHRlcnNJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgaXNHcm91cCwgY2F0ZWdvcnksIG5vZGVUeXBlIH0gPSBwYXlsb2FkO1xuICAgICAgaWYgKGlzR3JvdXApIHtcbiAgICAgICAgY29uc3Qgb2xkID0gc3RhdGUuZ3JvdXBGaWx0ZXJzLmZpbHRlcnNbbm9kZVR5cGVdIHx8IGRlZmF1bHRFbXB0eUdyb3VwRmlsdGVycztcbiAgICAgICAgc3RhdGUuZ3JvdXBGaWx0ZXJzLmZpbHRlcnNbbm9kZVR5cGVdID0ge1xuICAgICAgICAgIC4uLm9sZCxcbiAgICAgICAgICBbY2F0ZWdvcnldOiBbXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnRhcmdldEZpbHRlcnMuZmlsdGVyc1tjYXRlZ29yeV0gPSBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UodG9wb2xvZ3lEZWxldGVBbGxGaWx0ZXJzSW50ZW50LCAoc3RhdGUsIF8pID0+IHtcbiAgICAgIHN0YXRlLmdyb3VwRmlsdGVycyA9IHtcbiAgICAgICAgY2F0ZWdvcnk6IHN0YXRlLmdyb3VwRmlsdGVycy5jYXRlZ29yeSxcbiAgICAgICAgZmlsdGVyczoge30sXG4gICAgICB9O1xuXG4gICAgICBzdGF0ZS50YXJnZXRGaWx0ZXJzID0ge1xuICAgICAgICBjYXRlZ29yeTogc3RhdGUudGFyZ2V0RmlsdGVycy5jYXRlZ29yeSxcbiAgICAgICAgZmlsdGVyczogZGVmYXVsdEVtcHR5VGFyZ2V0RmlsdGVycyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHRvcG9sb2d5RmlsdGVyUmVkdWNlcjtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHtcbiAgYWxsb3dlZEdyb3VwRmlsdGVycyxcbiAgYWxsb3dlZFRhcmdldEZpbHRlcnMsXG4gIGNhdGVnb3J5VG9Ob2RlRmllbGQsXG59IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvVG9wb2xvZ3lGaWx0ZXJTbGljZSc7XG5pbXBvcnQge1xuICBSb290U3RhdGUsXG4gIHRvcG9sb2d5QWRkRmlsdGVySW50ZW50LFxuICB0b3BvbG9neVVwZGF0ZUNhdGVnb3J5SW50ZW50LFxuICB0b3BvbG9neVVwZGF0ZUNhdGVnb3J5VHlwZUludGVudCxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBnZXREaXNwbGF5RmllbGROYW1lIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBEaXZpZGVyLFxuICBMYWJlbCxcbiAgU2VsZWN0LFxuICBTZWxlY3RHcm91cCxcbiAgU2VsZWN0T3B0aW9uLFxuICBTZWxlY3RQcm9wcyxcbiAgU2VsZWN0VmFyaWFudCxcbiAgU3dpdGNoLFxuICBUb29sYmFyRmlsdGVyLFxuICBUb29sYmFyR3JvdXAsXG4gIFRvb2xiYXJJdGVtLFxuICBUb29sYmFyVG9nZ2xlR3JvdXAsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRmlsdGVySWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IERpc2NvdmVyeVRyZWVDb250ZXh0LCBmbGF0dGVuVHJlZSwgZ2V0VW5pcXVlTm9kZVR5cGVzIH0gZnJvbSAnLi4vU2hhcmVkL3V0aWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50Tm9kZSwgaXNUYXJnZXROb2RlLCBUYXJnZXROb2RlIH0gZnJvbSAnLi4vdHlwaW5ncyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lGaWx0ZXJzUHJvcHMge1xuICBicmVha3BvaW50PzogJ21kJyB8ICdsZycgfCAneGwnIHwgJzJ4bCc7XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVG9wb2xvZ3lGaWx0ZXJzOiBSZWFjdC5GQzxUb3BvbG9neUZpbHRlcnNQcm9wcz4gPSAoeyBicmVha3BvaW50ID0gJzJ4bCcsIGlzRGlzYWJsZWQsIC4uLnByb3BzIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbGJhclRvZ2dsZUdyb3VwIHsuLi5wcm9wc30gdG9nZ2xlSWNvbj17PEZpbHRlckljb24gLz59IGJyZWFrcG9pbnQ9e2JyZWFrcG9pbnR9PlxuICAgICAgPFRvb2xiYXJHcm91cCB2YXJpYW50PVwiZmlsdGVyLWdyb3VwXCI+XG4gICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICA8VG9wb2xvZ3lGaWx0ZXJDYXRlZ29yeVNlbGVjdCBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfSAvPlxuICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICA8VG9wb2xvZ3lGaWx0ZXIgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH0gLz5cbiAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgIDwvVG9vbGJhclRvZ2dsZUdyb3VwPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFRvcG9sb2d5RmlsdGVyQ2F0ZWdvcnlTZWxlY3Q6IFJlYWN0LkZDPHsgaXNEaXNhYmxlZD86IGJvb2xlYW4gfT4gPSAoeyBpc0Rpc2FibGVkLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCB7IGlzR3JvdXAsIGdyb3VwRmlsdGVycywgdGFyZ2V0RmlsdGVycyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLnRvcG9sb2d5RmlsdGVycyk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHZhbHVlLCBwbGFjZWhvbGRlcjogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKCFwbGFjZWhvbGRlcikge1xuICAgICAgICBjb25zdCB7IGNhdGVnb3J5IH0gPSB2YWx1ZTtcbiAgICAgICAgZGlzcGF0Y2godG9wb2xvZ3lVcGRhdGVDYXRlZ29yeUludGVudChpc0dyb3VwLCBjYXRlZ29yeSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoLCBpc0dyb3VwXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNhdGVnb3J5VHlwZUNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpc0NoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGRpc3BhdGNoKHRvcG9sb2d5VXBkYXRlQ2F0ZWdvcnlUeXBlSW50ZW50KGlzQ2hlY2tlZCkpO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoXVxuICApO1xuXG4gIGNvbnN0IHNlbGVjdGVkID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChpc0dyb3VwID8gZ3JvdXBGaWx0ZXJzIDogdGFyZ2V0RmlsdGVycykuY2F0ZWdvcnk7XG4gIH0sIFtpc0dyb3VwLCB0YXJnZXRGaWx0ZXJzLCBncm91cEZpbHRlcnNdKTtcblxuICBjb25zdCBvcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IGlzR3JvdXAgPyBhbGxvd2VkR3JvdXBGaWx0ZXJzIDogYWxsb3dlZFRhcmdldEZpbHRlcnM7XG4gICAgcmV0dXJuIFtcbiAgICAgIDxTZWxlY3RHcm91cCBsYWJlbD1cIkNhdGVnb3J5IFR5cGVcIiBrZXk9eydjYXRlZ29yeS10eXBlJ30+XG4gICAgICAgIDxTZWxlY3RPcHRpb24gaXNQbGFjZWhvbGRlciBrZXk9eydzd2l0Y2gnfSB2YWx1ZT17Jyd9PlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIGlkPXsnY2F0ZWdvcnktdHlwZS1zd2l0Y2gnfVxuICAgICAgICAgICAgbGFiZWw9eydHcm91cGluZ3MnfVxuICAgICAgICAgICAgaXNDaGVja2VkPXtpc0dyb3VwfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNhdGVnb3J5VHlwZUNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NlbGVjdE9wdGlvbj5cbiAgICAgIDwvU2VsZWN0R3JvdXA+LFxuICAgICAgPERpdmlkZXIga2V5PXsnZGl2aWRlcid9IC8+LFxuICAgICAgPFNlbGVjdEdyb3VwIGxhYmVsPVwiQ2F0ZWdvcmllc1wiIGtleT17J2NhdGVnb3JpZXMnfT5cbiAgICAgICAge2NhdGVnb3JpZXMubWFwKChjYXQpID0+IChcbiAgICAgICAgICA8U2VsZWN0T3B0aW9uXG4gICAgICAgICAgICBrZXk9e2NhdH1cbiAgICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiBnZXREaXNwbGF5RmllbGROYW1lKGNhdCksXG4gICAgICAgICAgICAgIGNvbXBhcmVUbzogKG90aGVyKSA9PiBvdGhlci5jYXRlZ29yeSA9PT0gY2F0LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGNhdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2dldERpc3BsYXlGaWVsZE5hbWUoY2F0KX1cbiAgICAgICAgICA8L1NlbGVjdE9wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdEdyb3VwPixcbiAgICBdO1xuICB9LCBbaXNHcm91cCwgaGFuZGxlQ2F0ZWdvcnlUeXBlQ2hhbmdlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB7Li4ucHJvcHN9XG4gICAgICB2YXJpYW50PXtTZWxlY3RWYXJpYW50LnNpbmdsZX1cbiAgICAgIG9uVG9nZ2xlPXtzZXRJc09wZW59XG4gICAgICBvblNlbGVjdD17aGFuZGxlU2VsZWN0fVxuICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgc2VsZWN0aW9ucz17e1xuICAgICAgICB0b1N0cmluZzogKCkgPT4gYCR7aXNHcm91cCA/ICdHcm91cCcgOiAnVGFyZ2V0J306ICR7Z2V0RGlzcGxheUZpZWxkTmFtZShzZWxlY3RlZCl9YCxcbiAgICAgICAgY29tcGFyZVRvOiAob3RoZXIpID0+IG90aGVyLmNhdGVnb3J5ID09PSBzZWxlY3RlZCxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGNhdGVnb3J5OiBzZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBhcmlhLWxhYmVsPXsnRmlsdGVyIENhdGVnb3JpZXMnfVxuICAgICAgcGxhY2Vob2xkZXJUZXh0PXsnU2VsZWN0IGEgY2F0ZWdvcnknfVxuICAgICAgaXNHcm91cGVkXG4gICAgPlxuICAgICAge29wdGlvbnN9XG4gICAgPC9TZWxlY3Q+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgVG9wb2xvZ3lGaWx0ZXI6IFJlYWN0LkZDPHsgaXNEaXNhYmxlZD86IGJvb2xlYW4gfT4gPSAoeyBpc0Rpc2FibGVkLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgeyBpc0dyb3VwLCBncm91cEZpbHRlcnMsIHRhcmdldEZpbHRlcnMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiBzdGF0ZS50b3BvbG9neUZpbHRlcnMpO1xuICBjb25zdCBkaXNjb3ZlcnlUcmVlID0gUmVhY3QudXNlQ29udGV4dChEaXNjb3ZlcnlUcmVlQ29udGV4dCk7XG5cbiAgY29uc3QgZmxhdHRlbmVkVHJlZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZmxhdHRlblRyZWUoZGlzY292ZXJ5VHJlZSksIFtkaXNjb3ZlcnlUcmVlXSk7XG5cbiAgY29uc3QgZ3JvdXBOb2RlVHlwZXMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IGdldFVuaXF1ZU5vZGVUeXBlcyhmbGF0dGVuZWRUcmVlLmZpbHRlcigobikgPT4gIWlzVGFyZ2V0Tm9kZShuKSkpLFxuICAgIFtmbGF0dGVuZWRUcmVlXVxuICApO1xuXG4gIGNvbnN0IGdlbmVyYXRlT25TZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaXNHcm91cDogYm9vbGVhbikgPT4ge1xuICAgICAgcmV0dXJuIChfLCB7IHZhbHVlLCBub2RlVHlwZSwgY2F0ZWdvcnkgfSkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh0b3BvbG9neUFkZEZpbHRlckludGVudChpc0dyb3VwLCBub2RlVHlwZSwgY2F0ZWdvcnksIHZhbHVlKSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoXVxuICApO1xuXG4gIGNvbnN0IGdyb3VwSW5wdXRzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGFsbG93ZWRHcm91cEZpbHRlcnMubWFwKChjYXQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2hvd24gPSBpc0dyb3VwICYmIGdyb3VwRmlsdGVycy5jYXRlZ29yeSA9PT0gY2F0O1xuICAgICAgY29uc3QgYXJpYUxhYmVsID0gYEZpbHRlciBieSAke2dldERpc3BsYXlGaWVsZE5hbWUoY2F0KX0uLi5gO1xuXG4gICAgICBjb25zdCBvcHRpb25Hcm91cCA9IGdyb3VwTm9kZVR5cGVzXG4gICAgICAgIC5tYXAoKHR5cGUpID0+ICh7XG4gICAgICAgICAgZ3JvdXBMYWJlbDogdHlwZSxcbiAgICAgICAgICBvcHRpb25zOiBBcnJheS5mcm9tKFxuICAgICAgICAgICAgbmV3IFNldChcbiAgICAgICAgICAgICAgZmxhdHRlbmVkVHJlZVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKG4pID0+IG4ubm9kZVR5cGUgPT09IHR5cGUpXG4gICAgICAgICAgICAgICAgLm1hcCgoZ3JvdXBOb2RlOiBFbnZpcm9ubWVudE5vZGUpID0+IGZpZWxkVmFsdWVUb1N0cmluZ3MoZ3JvdXBOb2RlW2NhdGVnb3J5VG9Ob2RlRmllbGQoY2F0KV0pKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjLmNvbmNhdChjdXJyKSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gZ3JvdXBGaWx0ZXJzLmZpbHRlcnNbdHlwZV0gfHwge307XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjcml0ZXJpYSA9IGZpbHRlcnNbY2F0XSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjcml0ZXJpYSB8fCAhY3JpdGVyaWEuaW5jbHVkZXModmFsKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5vcHRpb25zICYmIGdyb3VwLm9wdGlvbnMubGVuZ3RoKTsgLy8gRG8gc2hvdyBzaG93IGVtcHR5IGdyb3Vwc1xuXG4gICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gb3B0aW9uR3JvdXAubWFwKCh7IG9wdGlvbnMsIGdyb3VwTGFiZWwgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTZWxlY3RHcm91cCBrZXk9e2dyb3VwTGFiZWx9IGxhYmVsPXtncm91cExhYmVsfT5cbiAgICAgICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiAoXG4gICAgICAgICAgICAgIDxTZWxlY3RPcHRpb25cbiAgICAgICAgICAgICAgICBrZXk9e29wdH1cbiAgICAgICAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IG9wdCxcbiAgICAgICAgICAgICAgICAgIGNvbXBhcmVUbzogKG90aGVyKSA9PiBvdGhlci52YWx1ZSA9PT0gb3B0LFxuICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICBub2RlVHlwZTogZ3JvdXBMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdCxcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGNhdCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc0xhYmVsT3JBbm5vdGF0aW9uKGNhdCkgPyA8TGFiZWwgY29sb3I9XCJncmV5XCI+e29wdH08L0xhYmVsPiA6IG9wdH1cbiAgICAgICAgICAgICAgPC9TZWxlY3RPcHRpb24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1NlbGVjdEdyb3VwPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUb29sYmFyRmlsdGVyXG4gICAgICAgICAga2V5PXtgR3JvdXAvJHtjYXR9YH1cbiAgICAgICAgICBzaG93VG9vbGJhckl0ZW09e2lzU2hvd259XG4gICAgICAgICAgY2F0ZWdvcnlOYW1lPXtgR3JvdXAvJHtjYXR9YH0gLy8gSWdub3JlZC4gTm8gY2hpcHMgc3BlY2lmaWVkIGhlcmUuXG4gICAgICAgID5cbiAgICAgICAgICA8VG9wb2xvZ3lGaWx0ZXJTZWxlY3RcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e2FyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgICAgIHR5cGVBaGVhZEFyaWFMYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgbWF4SGVpZ2h0PVwiMTZlbVwiXG4gICAgICAgICAgICBpc0dyb3VwZWRcbiAgICAgICAgICAgIG9uU2VsZWN0PXtnZW5lcmF0ZU9uU2VsZWN0KGlzR3JvdXApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzZWxlY3RPcHRpb25zfVxuICAgICAgICAgIDwvVG9wb2xvZ3lGaWx0ZXJTZWxlY3Q+XG4gICAgICAgIDwvVG9vbGJhckZpbHRlcj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH0sIFtpc0dyb3VwLCBncm91cEZpbHRlcnMsIGZsYXR0ZW5lZFRyZWUsIGdyb3VwTm9kZVR5cGVzLCBpc0Rpc2FibGVkLCBnZW5lcmF0ZU9uU2VsZWN0XSk7XG5cbiAgY29uc3QgdGFyZ2V0SW5wdXRzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGFsbG93ZWRUYXJnZXRGaWx0ZXJzLm1hcCgoY2F0KSA9PiB7XG4gICAgICBjb25zdCBpc1Nob3duID0gIWlzR3JvdXAgJiYgdGFyZ2V0RmlsdGVycy5jYXRlZ29yeSA9PT0gY2F0O1xuICAgICAgY29uc3QgYXJpYUxhYmVsID0gYEZpbHRlciBieSAke2dldERpc3BsYXlGaWVsZE5hbWUoY2F0KX0uLi5gO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgICAgbmV3IFNldChcbiAgICAgICAgICBmbGF0dGVuZWRUcmVlXG4gICAgICAgICAgICAuZmlsdGVyKChuKSA9PiBpc1RhcmdldE5vZGUobikpXG4gICAgICAgICAgICAubWFwKCh7IHRhcmdldCB9OiBUYXJnZXROb2RlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2NhdGVnb3J5VG9Ob2RlRmllbGQoY2F0KV07XG4gICAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb24oY2F0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZmllbGRWYWx1ZVRvU3RyaW5ncyh2YWx1ZVsncGxhdGZvcm0nXSksIC4uLmZpZWxkVmFsdWVUb1N0cmluZ3ModmFsdWVbJ2NyeW9zdGF0J10pXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmllbGRWYWx1ZVRvU3RyaW5ncyh2YWx1ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MuY29uY2F0KGN1cnIpLCBbXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjcml0ZXJpYTogc3RyaW5nW10gPSB0YXJnZXRGaWx0ZXJzLmZpbHRlcnNbY2F0XTtcbiAgICAgICAgICAgICAgcmV0dXJuICFjcml0ZXJpYSB8fCAhY3JpdGVyaWEuaW5jbHVkZXModmFsKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFNlbGVjdE9wdGlvblxuICAgICAgICAgICAga2V5PXtvcHR9XG4gICAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gb3B0LFxuICAgICAgICAgICAgICBjb21wYXJlVG86IChvdGhlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0eXBlb2Ygb3RoZXIgPT09ICdzdHJpbmcnID8gb3RoZXIgOiBvdGhlci52YWx1ZSwgJ2knKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgbm9kZVR5cGU6ICdUYXJnZXQnLCAvLyBJZ25vcmVkIGJ5IHJlZHVjZXJcbiAgICAgICAgICAgICAgICB2YWx1ZTogb3B0LFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBjYXQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpc0xhYmVsT3JBbm5vdGF0aW9uKGNhdCkgPyA8TGFiZWwgY29sb3I9XCJncmV5XCI+e29wdH08L0xhYmVsPiA6IG9wdH1cbiAgICAgICAgICA8L1NlbGVjdE9wdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VG9vbGJhckZpbHRlclxuICAgICAgICAgIGtleT17YFRhcmdldC8ke2NhdH1gfVxuICAgICAgICAgIGNhdGVnb3J5TmFtZT17YFRhcmdldC8ke2NhdH1gfSAvLyBJZ25vcmVkLlxuICAgICAgICAgIHNob3dUb29sYmFySXRlbT17aXNTaG93bn1cbiAgICAgICAgPlxuICAgICAgICAgIDxUb3BvbG9neUZpbHRlclNlbGVjdFxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyVGV4dD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICAgICAgdHlwZUFoZWFkQXJpYUxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgICAgICBtYXhIZWlnaHQ9XCIxNmVtXCJcbiAgICAgICAgICAgIG9uU2VsZWN0PXtnZW5lcmF0ZU9uU2VsZWN0KGZhbHNlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c2VsZWN0T3B0aW9uc31cbiAgICAgICAgICA8L1RvcG9sb2d5RmlsdGVyU2VsZWN0PlxuICAgICAgICA8L1Rvb2xiYXJGaWx0ZXI+XG4gICAgICApO1xuICAgIH0pO1xuICB9LCBbaXNHcm91cCwgdGFyZ2V0RmlsdGVycywgZmxhdHRlbmVkVHJlZSwgaXNEaXNhYmxlZCwgZ2VuZXJhdGVPblNlbGVjdF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiB7Li4ucHJvcHN9PlxuICAgICAge2dyb3VwSW5wdXRzfVxuICAgICAge3RhcmdldElucHV0c31cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBUb3BvbG9neUZpbHRlclNlbGVjdDogUmVhY3QuRkM8T21pdDxTZWxlY3RQcm9wcywgJ29uVG9nZ2xlJyB8ICdzZWxlY3Rpb25zJyB8ICd2YXJpYW50Jz4+ID0gKHtcbiAgY2hpbGRyZW46IG9wdGlvbnMsXG4gIG9uU2VsZWN0LFxuICBpc0Rpc2FibGVkLFxuICBwbGFjZWhvbGRlclRleHQsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB7Li4ucHJvcHN9XG4gICAgICB2YXJpYW50PXtTZWxlY3RWYXJpYW50LnR5cGVhaGVhZH1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25Ub2dnbGU9e3NldElzT3Blbn1cbiAgICAgIG9uU2VsZWN0PXsoLi4uYXJncykgPT4ge1xuICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xuICAgICAgICBvblNlbGVjdCAmJiBvblNlbGVjdCguLi5hcmdzKTtcbiAgICAgIH19XG4gICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgcGxhY2Vob2xkZXJUZXh0PXtwbGFjZWhvbGRlclRleHR9XG4gICAgPlxuICAgICAge29wdGlvbnN9XG4gICAgPC9TZWxlY3Q+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZmllbGRWYWx1ZVRvU3RyaW5ncyA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdID0+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHYpID0+IGAke3Z9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBvYmplY3QpLm1hcCgoW2ssIHZdKSA9PiBgJHtrfT0ke3Z9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbYCR7dmFsdWV9YF07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0xhYmVsT3JBbm5vdGF0aW9uID0gKGNhdGVnb3J5OiBzdHJpbmcpID0+IC8obGFiZWx8YW5ub3RhdGlvbikvaS50ZXN0KGNhdGVnb3J5KTtcblxuZXhwb3J0IGNvbnN0IGlzQW5ub3RhdGlvbiA9IChjYXRlZ29yeTogc3RyaW5nKSA9PiAvYW5ub3RhdGlvbi9pLnRlc3QoY2F0ZWdvcnkpO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyB0b3BvbG9neUNvbmZpZ1NldFZpZXdNb2RlSW50ZW50LCB0b3BvbG9neURlbGV0ZUFsbEZpbHRlcnNJbnRlbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbiwgUG9wb3ZlciwgVG9vbGJhciwgVG9vbGJhckNvbnRlbnQsIFRvb2xiYXJJdGVtLCBUb29sdGlwIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBUb3BvbG9neUljb24sIExpc3RJY29uLCBNb3VzZUljb24sIFF1ZXN0aW9uQ2lyY2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IFZpc3VhbGl6YXRpb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10b3BvbG9neSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFF1aWNrU2VhcmNoTW9kYWwgfSBmcm9tICcuLi9BY3Rpb25zL1F1aWNrU2VhcmNoUGFuZWwnO1xuaW1wb3J0IFNob3J0Y3V0cywgeyBTaG9ydGN1dENvbW1hbmQgfSBmcm9tICcuLi9TaGFyZWQvU2hvcnRjdXRzJztcbmltcG9ydCB7IERpc3BsYXlPcHRpb25zIH0gZnJvbSAnLi9EaXNwbGF5T3B0aW9ucyc7XG5pbXBvcnQgeyBGaW5kQnlNYXRjaEV4cHJlc3Npb24gfSBmcm9tICcuL0ZpbmRCeU1hdGNoRXhwcmVzc2lvbic7XG5pbXBvcnQgeyBIZWxwQnV0dG9uIH0gZnJvbSAnLi9IZWxwQnV0dG9uJztcbmltcG9ydCB7IFF1aWNrU2VhcmNoQnV0dG9uIH0gZnJvbSAnLi9RdWlja1NlYXJjaEJ1dHRvbic7XG5pbXBvcnQgeyBUb3BvbG9neUZpbHRlckNoaXBzIH0gZnJvbSAnLi9Ub3BvbG9neUZpbHRlckNoaXBzJztcbmltcG9ydCB7IFRvcG9sb2d5RmlsdGVycyB9IGZyb20gJy4vVG9wb2xvZ3lGaWx0ZXJzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5cbmV4cG9ydCBlbnVtIFRvcG9sb2d5VG9vbGJhclZhcmlhbnQge1xuICBHcmFwaCA9ICdncmFwaCcsXG4gIExpc3QgPSAnbGlzdCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3lUb29sYmFyUHJvcHMge1xuICB2YXJpYW50OiBUb3BvbG9neVRvb2xiYXJWYXJpYW50O1xuICB2aXN1YWxpemF0aW9uPzogVmlzdWFsaXphdGlvbjsgLy8gUmVxdWlyZWQgd2hlbiB2YXJpYW50IGlzIGdyYXBoXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVG9wb2xvZ3lUb29sYmFyOiBSZWFjdC5GQzxUb3BvbG9neVRvb2xiYXJQcm9wcz4gPSAoeyB2YXJpYW50LCB2aXN1YWxpemF0aW9uLCBpc0Rpc2FibGVkLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGlzR3JhcGhWaWV3ID0gdmFyaWFudCA9PT0gVG9wb2xvZ3lUb29sYmFyVmFyaWFudC5HcmFwaDtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgW3F1aWNrc2VhcmNoT3Blbiwgc2V0UXVpY2tzZWFyY2hPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB0b2dnbGVWaWV3ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHRvcG9sb2d5Q29uZmlnU2V0Vmlld01vZGVJbnRlbnQoaXNHcmFwaFZpZXcgPyAnbGlzdCcgOiAnZ3JhcGgnKSk7XG4gIH0sIFtkaXNwYXRjaCwgaXNHcmFwaFZpZXddKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFsbEZpbHRlcnMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2godG9wb2xvZ3lEZWxldGVBbGxGaWx0ZXJzSW50ZW50KCkpO1xuICB9LCBbZGlzcGF0Y2hdKTtcblxuICBjb25zdCBoYW5kbGVRdWlja1NlYXJjaCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRRdWlja3NlYXJjaE9wZW4odHJ1ZSk7XG4gICAgLy8gQ2xvc2UgdGhlIG1pbmkgbWVudSBpZiBvcGVuXG4gICAgY29uc3QgY29udGV4dE1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9wb2xvZ3ktY29udGV4dC1tZW51Jyk7XG4gICAgaWYgKGNvbnRleHRNZW51KSB7XG4gICAgICBjb250ZXh0TWVudS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfSwgW3NldFF1aWNrc2VhcmNoT3Blbl0pO1xuXG4gIGNvbnN0IG1vZGVJY29uID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8VG9vbHRpcFxuICAgICAgICBlbnRyeURlbGF5PXswfVxuICAgICAgICBjb250ZW50PXtpc0dyYXBoVmlldyA/IHQoJ1RvcG9sb2d5LkxJU1RfVklFVycpIDogdCgnVG9wb2xvZ3kuR1JBUEhfVklFVycpfVxuICAgICAgICBhcmlhPVwibm9uZVwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgPlxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInRvcG9sb2d5X192aWV3LXN3aXRjaGVyXCIgYXJpYS1sYWJlbD1cIkNsaXBib2FyZFwiIHZhcmlhbnQ9XCJwbGFpblwiIG9uQ2xpY2s9e3RvZ2dsZVZpZXd9PlxuICAgICAgICAgIHtpc0dyYXBoVmlldyA/IDxMaXN0SWNvbiAvPiA6IDxUb3BvbG9neUljb24gLz59XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Ub29sdGlwPlxuICAgICksXG4gICAgW2lzR3JhcGhWaWV3LCB0b2dnbGVWaWV3LCB0XVxuICApO1xuXG4gIGNvbnN0IHNob3J0Y3V0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBpc0dyYXBoVmlldyA/IChcbiAgICAgIDxQb3BvdmVyXG4gICAgICAgIGhhc0F1dG9XaWR0aFxuICAgICAgICBib2R5Q29udGVudD17XG4gICAgICAgICAgPFNob3J0Y3V0c1xuICAgICAgICAgICAgc2hvcnRjdXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ2RyYWctc2hvcnRjdXQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTW92ZScsXG4gICAgICAgICAgICAgICAgc2hvcnRjdXQ6IDxTaG9ydGN1dENvbW1hbmQgY29tbWFuZHM9e1t7IGlkOiAnZHJhZy1jb21tYW5kJywgY29tbWFuZDogJ0RyYWcnLCBpY29uOiA8TW91c2VJY29uIC8+IH1dfSAvPixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAnY2xpY2stc2hvcnRjdXQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVmlldyBkZXRhaWxzIGluIHNpZGUgcGFuZWwnLFxuICAgICAgICAgICAgICAgIHNob3J0Y3V0OiAoXG4gICAgICAgICAgICAgICAgICA8U2hvcnRjdXRDb21tYW5kIGNvbW1hbmRzPXtbeyBpZDogJ2NsaWNrLWNvbW1hbmQnLCBjb21tYW5kOiAnQ2xpY2snLCBpY29uOiA8TW91c2VJY29uIC8+IH1dfSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ3JpZ2h0LWNsaWNrLXNob3J0Y3V0JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FjY2VzcyBjb250ZXh0IG1lbnUnLFxuICAgICAgICAgICAgICAgIHNob3J0Y3V0OiAoXG4gICAgICAgICAgICAgICAgICA8U2hvcnRjdXRDb21tYW5kXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzPXtbeyBpZDogJ3JpZ2h0LWNsaWNrLWNvbW1hbmQnLCBjb21tYW5kOiAnUmlnaHQgY2xpY2snLCBpY29uOiA8TW91c2VJY29uIC8+IH1dfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6ICdjdHJsLXNwYWNlLXNob3J0Y3V0JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ09wZW4gcXVpY2sgc2VhcmNoIG1vZGFsJyxcbiAgICAgICAgICAgICAgICBzaG9ydGN1dDogKFxuICAgICAgICAgICAgICAgICAgPFNob3J0Y3V0Q29tbWFuZFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kcz17W1xuICAgICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdjdHJsLWNvbW1hbmQnLCBjb21tYW5kOiAnQ3RybCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IGlkOiAnc3BhY2UtY29tbWFuZCcsIGNvbW1hbmQ6ICdTcGFjZWJhcicgfSxcbiAgICAgICAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICBwb3NpdGlvbj1cImxlZnRcIlxuICAgICAgPlxuICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgaWNvbj17PFF1ZXN0aW9uQ2lyY2xlSWNvbiAvPn0+XG4gICAgICAgICAgVmlldyBzaG9ydGN1dHNcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L1BvcG92ZXI+XG4gICAgKSA6IG51bGw7XG4gIH0sIFtpc0dyYXBoVmlld10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICBzZXRRdWlja3NlYXJjaE9wZW4odHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfSwgW3NldFF1aWNrc2VhcmNoT3Blbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxUb29sYmFyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgaWQ9e2Ake3ZhcmlhbnR9LXRvcG9sb2d5LXRvb2xiYXJgfVxuICAgICAgICBhcmlhLWxhYmVsPXtgJHt2YXJpYW50fS10b3BvbG9neS10b29sYmFyYH1cbiAgICAgICAgY2xhc3NOYW1lPVwidG9wb2xvZ3lfX3Rvb2xiYXItY29udGFpbmVyXCJcbiAgICAgICAgY2xlYXJBbGxGaWx0ZXJzPXtoYW5kbGVDbGVhckFsbEZpbHRlcnN9XG4gICAgICA+XG4gICAgICAgIDxUb29sYmFyQ29udGVudCBjbGFzc05hbWU9XCJ0b3BvbG9neV9fdG9vbGJhci1tYWluLWNvbnRlbnRcIiBrZXk9eydtYWluLWNvbnRlbnQnfT5cbiAgICAgICAgICA8VG9vbGJhckl0ZW0+XG4gICAgICAgICAgICA8UXVpY2tTZWFyY2hCdXR0b24gdG9vbHRpcENvbnRlbnQ9eydBZGQgdG8gdmlldyd9IG9uQ2xpY2s9e2hhbmRsZVF1aWNrU2VhcmNofSAvPlxuICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgPERpc3BsYXlPcHRpb25zIGlzR3JhcGg9e2lzR3JhcGhWaWV3fSBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfSAvPlxuICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgPFRvcG9sb2d5RmlsdGVycyBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfSAvPlxuICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgPEZpbmRCeU1hdGNoRXhwcmVzc2lvbiBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfSAvPlxuICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAge2lzR3JhcGhWaWV3ICYmICFpc0Rpc2FibGVkID8gKFxuICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICA8SGVscEJ1dHRvbiB2aXN1YWxpemF0aW9uPXt2aXN1YWxpemF0aW9ufSAvPlxuICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWlzRGlzYWJsZWQgPyA8VG9vbGJhckl0ZW0gYWxpZ25tZW50PXt7IGRlZmF1bHQ6ICdhbGlnblJpZ2h0JyB9fT57c2hvcnRjdXRzfTwvVG9vbGJhckl0ZW0+IDogbnVsbH1cbiAgICAgICAgICA8VG9vbGJhckl0ZW0gYWxpZ25tZW50PXtpc0Rpc2FibGVkID8geyBkZWZhdWx0OiAnYWxpZ25SaWdodCcgfSA6IHVuZGVmaW5lZH0+e21vZGVJY29ufTwvVG9vbGJhckl0ZW0+XG4gICAgICAgIDwvVG9vbGJhckNvbnRlbnQ+XG4gICAgICA8L1Rvb2xiYXI+XG4gICAgICA8VG9wb2xvZ3lGaWx0ZXJDaGlwcyBjbGFzc05hbWU9XCJ0b3BvbG9neV9fdG9vbGJhci1jaGlwLWNvbnRlbnRcIiAvPlxuICAgICAgPFF1aWNrU2VhcmNoTW9kYWwgaXNPcGVuPXtxdWlja3NlYXJjaE9wZW59IG9uQ2xvc2U9eygpID0+IHNldFF1aWNrc2VhcmNoT3BlbihmYWxzZSl9IC8+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBSb290U3RhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IGdldEZyb21Mb2NhbFN0b3JhZ2UsIHNhdmVUb0xvY2FsU3RvcmFnZSB9IGZyb20gJ0BhcHAvdXRpbHMvTG9jYWxTdG9yYWdlJztcbmltcG9ydCB7IERpdmlkZXIsIFN0YWNrLCBTdGFja0l0ZW0gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQge1xuICBCT1RUT01fTEFZRVIsXG4gIERFRkFVTFRfTEFZRVIsXG4gIEdyYXBoRWxlbWVudCxcbiAgR1JBUEhfUE9TSVRJT05fQ0hBTkdFX0VWRU5ULFxuICBHUk9VUFNfTEFZRVIsXG4gIE1vZGVsLFxuICBOT0RFX1BPU0lUSU9ORURfRVZFTlQsXG4gIFNjYWxlRXh0ZW50LFxuICBTZWxlY3Rpb25FdmVudExpc3RlbmVyLFxuICBTRUxFQ1RJT05fRVZFTlQsXG4gIFRvcG9sb2d5VmlldyxcbiAgVE9QX0xBWUVSLFxuICBWaXN1YWxpemF0aW9uLFxuICBWaXN1YWxpemF0aW9uUHJvdmlkZXIsXG4gIFZpc3VhbGl6YXRpb25TdXJmYWNlLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10b3BvbG9neSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFF1aWNrU2VhcmNoQ29udGV4dE1lbnUgfSBmcm9tICcuLi9BY3Rpb25zL1F1aWNrU2VhcmNoUGFuZWwnO1xuaW1wb3J0IEVudGl0eURldGFpbHMgZnJvbSAnLi4vU2hhcmVkL0VudGl0eS9FbnRpdHlEZXRhaWxzJztcbmltcG9ydCB7IFRvcG9sb2d5RW1wdHlTdGF0ZSB9IGZyb20gJy4uL1NoYXJlZC9Ub3BvbG9neUVtcHR5U3RhdGUnO1xuaW1wb3J0IHsgVG9wb2xvZ3lFeGNlZWRMaW1pdFN0YXRlIH0gZnJvbSAnLi4vU2hhcmVkL1RvcG9sb2d5RXhjZWVkTGltaXRTdGF0ZSc7XG5pbXBvcnQgeyBEaXNjb3ZlcnlUcmVlQ29udGV4dCwgVHJhbnNmb3JtQ29uZmlnIH0gZnJvbSAnLi4vU2hhcmVkL3V0aWxzJztcbmltcG9ydCB7IFRvcG9sb2d5U2lkZUJhciB9IGZyb20gJy4uL1NpZGVCYXIvVG9wb2xvZ3lTaWRlQmFyJztcbmltcG9ydCB7IFRvcG9sb2d5VG9vbGJhciwgVG9wb2xvZ3lUb29sYmFyVmFyaWFudCB9IGZyb20gJy4uL1Rvb2xiYXIvVG9wb2xvZ3lUb29sYmFyJztcbmltcG9ydCB7IFRvcG9sb2d5Q29udHJvbEJhciB9IGZyb20gJy4vVG9wb2xvZ3lDb250cm9sQmFyJztcbmltcG9ydCB7IGNvbXBvbmVudEZhY3RvcnksIGdldE5vZGVCeUlkLCBsYXlvdXRGYWN0b3J5LCB0cmFuc2Zvcm1EYXRhIH0gZnJvbSAnLi9VdGlsc0ZhY3RvcnknO1xuXG5leHBvcnQgY29uc3QgTUFYX05PREVfTElNSVQgPSAxMDA7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NJWkVCQVJfU0laRSA9IDUwMDtcbmV4cG9ydCBjb25zdCBNSU5fU0laRUJBUl9TSVpFID0gNDAwO1xuXG5leHBvcnQgY29uc3QgVE9QT0xPR1lfR1JBUEhfSUQgPSAnY3J5b3N0YXQtdGFyZ2V0LXRvcG9sb2d5LWdyYXBoJztcblxuZXhwb3J0IHR5cGUgU2F2ZWRHcmFwaFBvc2l0aW9uID0ge1xuICBpZD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG4gIHNjYWxlRXh0ZW50PzogU2NhbGVFeHRlbnQ7XG59O1xuXG5leHBvcnQgdHlwZSBTYXZlZE5vZGVQb3NpdGlvbiA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIGNvbGxhcHNlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5R3JhcGhWaWV3UHJvcHMge1xuICB0cmFuc2Zvcm1Db25maWc/OiBUcmFuc2Zvcm1Db25maWc7XG59XG5cbmV4cG9ydCBjb25zdCBUb3BvbG9neUdyYXBoVmlldzogUmVhY3QuRkM8VG9wb2xvZ3lHcmFwaFZpZXdQcm9wcz4gPSAoeyB0cmFuc2Zvcm1Db25maWcsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW3NlbGVjdGVkSWRzLCBzZXRTZWxlY3RlZElkc10gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmdbXT4oW10pOyAvLyBzZWxlY3RlZElkcyBpcyBleGFjdGx5IG1hdGNoZWQgYnkgVmlzdWFsaXphdGlvblN1cmZhY2VcbiAgY29uc3QgW3NlbGVjdGVkRW50aXR5LCBzZXRTZWxlY3RlZEVudGl0eV0gPSBSZWFjdC51c2VTdGF0ZTxHcmFwaEVsZW1lbnQ+KCk7XG4gIGNvbnN0IFtzaG93R3JhcGhBbnl3YXksIHNldFNob3dHcmFwaEFueXdheV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgZmlsdGVycyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiBzdGF0ZS50b3BvbG9neUZpbHRlcnMpO1xuXG4gIGNvbnN0IGhhbmRsZURyYXdlckNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0U2VsZWN0ZWRJZHMoW10pLCBbc2V0U2VsZWN0ZWRJZHNdKTtcblxuICBjb25zdCBkaXNjb3ZlcnlUcmVlID0gUmVhY3QudXNlQ29udGV4dChEaXNjb3ZlcnlUcmVlQ29udGV4dCk7XG4gIGNvbnN0IF90cmFuc2Zvcm1EYXRhID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiB0cmFuc2Zvcm1EYXRhKGRpc2NvdmVyeVRyZWUsIHRyYW5zZm9ybUNvbmZpZywgZmlsdGVycyksXG4gICAgW2Rpc2NvdmVyeVRyZWUsIHRyYW5zZm9ybUNvbmZpZywgZmlsdGVyc11cbiAgKTtcblxuICBjb25zdCBleGNlZWRMaW1pdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gX3RyYW5zZm9ybURhdGEubm9kZXMubGVuZ3RoID4gTUFYX05PREVfTElNSVQsIFtfdHJhbnNmb3JtRGF0YV0pO1xuXG4gIGNvbnN0IGlzRW1wdHlHcmFwaCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gIV90cmFuc2Zvcm1EYXRhLm5vZGVzLnNvbWUoKG5vZGUpID0+IG5vZGUudHlwZSA9PT0gJ25vZGUnKSxcbiAgICBbX3RyYW5zZm9ybURhdGFdXG4gICk7XG5cbiAgY29uc3QgX2NyZWF0ZVZpc3VhbGl6YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgX25ld1Zpc3VhbGl6YXRpb24gPSBuZXcgVmlzdWFsaXphdGlvbigpO1xuXG4gICAgLy8gUmVnaXN0ZXIgZmFjdG9yeSBmb3IgYSBsYXlvdXQgdmFyaWFudFxuICAgIF9uZXdWaXN1YWxpemF0aW9uLnJlZ2lzdGVyTGF5b3V0RmFjdG9yeShsYXlvdXRGYWN0b3J5KTtcblxuICAgIC8vIFJlZ2lzdGVyIGZhY3RvcnkgZm9yIGVhY2ggbm9kZSB2YXJpYW50XG4gICAgX25ld1Zpc3VhbGl6YXRpb24ucmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudEZhY3RvcnkpO1xuXG4gICAgLy8gU2VsZWN0aW9uIGV2ZW50XG4gICAgX25ld1Zpc3VhbGl6YXRpb24uYWRkRXZlbnRMaXN0ZW5lcjxTZWxlY3Rpb25FdmVudExpc3RlbmVyPihTRUxFQ1RJT05fRVZFTlQsIChpZHMpID0+IHtcbiAgICAgIHNldFNlbGVjdGVkSWRzKGlkcyk7XG4gICAgICBzZXRTZWxlY3RlZEVudGl0eShpZHNbMF0gPyBfbmV3VmlzdWFsaXphdGlvbi5nZXRFbGVtZW50QnlJZChpZHNbMF0pIDogdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIF9uZXdWaXN1YWxpemF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBHUkFQSF9QT1NJVElPTl9DSEFOR0VfRVZFTlQsXG4gICAgICBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBncmFwaCB9ID0gX25ld1Zpc3VhbGl6YXRpb24udG9Nb2RlbCgpO1xuICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICBjb25zdCBzYXZlZDogU2F2ZWRHcmFwaFBvc2l0aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGdyYXBoLmlkLFxuICAgICAgICAgICAgdHlwZTogZ3JhcGgudHlwZSxcbiAgICAgICAgICAgIHg6IGdyYXBoLngsXG4gICAgICAgICAgICB5OiBncmFwaC55LFxuICAgICAgICAgICAgc2NhbGU6IGdyYXBoLnNjYWxlLFxuICAgICAgICAgICAgc2NhbGVFeHRlbnQ6IGdyYXBoLnNjYWxlRXh0ZW50LFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdUT1BPTE9HWV9HUkFQSF9QT1NJVE9OUycsIHNhdmVkKTtcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKVxuICAgICk7XG5cbiAgICBfbmV3VmlzdWFsaXphdGlvbi5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgTk9ERV9QT1NJVElPTkVEX0VWRU5ULFxuICAgICAgXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IF9uZXdWaXN1YWxpemF0aW9uLnRvTW9kZWwoKTtcbiAgICAgICAgaWYgKG5vZGVzKSB7XG4gICAgICAgICAgY29uc3Qgc2F2ZWRQb3M6IFNhdmVkTm9kZVBvc2l0aW9uW10gPSBub2Rlcy5tYXAoKG4pID0+ICh7XG4gICAgICAgICAgICBpZDogbi5pZCxcbiAgICAgICAgICAgIHg6IG4ueCxcbiAgICAgICAgICAgIHk6IG4ueSxcbiAgICAgICAgICAgIGNvbGxhcHNlZDogbi5jb2xsYXBzZWQsXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnVE9QT0xPR1lfTk9ERV9QT1NJVElPTlMnLCBzYXZlZFBvcyk7XG4gICAgICAgIH1cbiAgICAgIH0sIDIwMClcbiAgICApO1xuICAgIHJldHVybiBfbmV3VmlzdWFsaXphdGlvbjtcbiAgfSwgW3NldFNlbGVjdGVkSWRzLCBzZXRTZWxlY3RlZEVudGl0eV0pO1xuXG4gIGNvbnN0IHZpc3VhbGl6YXRpb25SZWYgPSBSZWFjdC51c2VSZWYoX2NyZWF0ZVZpc3VhbGl6YXRpb24oKSk7XG4gIGNvbnN0IHZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uUmVmLmN1cnJlbnQ7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBncmFwaERhdGE6IFNhdmVkR3JhcGhQb3NpdGlvbiA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoJ1RPUE9MT0dZX0dSQVBIX1BPU0lUT05TJywge30pO1xuICAgIGNvbnN0IG5vZGVQb3NpdGlvbnM6IFNhdmVkTm9kZVBvc2l0aW9uW10gPSBnZXRGcm9tTG9jYWxTdG9yYWdlKCdUT1BPTE9HWV9OT0RFX1BPU0lUSU9OUycsIFtdKTtcblxuICAgIGNvbnN0IG1vZGVsOiBNb2RlbCA9IHtcbiAgICAgIG5vZGVzOiBfdHJhbnNmb3JtRGF0YS5ub2Rlcy5tYXAoKG4pID0+IHtcbiAgICAgICAgY29uc3Qgc2F2ZWREYXRhID0gbm9kZVBvc2l0aW9ucy5maW5kKChwcykgPT4gcHMuaWQgPT09IG4uaWQpO1xuICAgICAgICBpZiAoc2F2ZWREYXRhKSB7XG4gICAgICAgICAgbiA9IHtcbiAgICAgICAgICAgIC4uLm4sXG4gICAgICAgICAgICB4OiBzYXZlZERhdGEueCxcbiAgICAgICAgICAgIHk6IHNhdmVkRGF0YS55LFxuICAgICAgICAgICAgY29sbGFwc2VkOiBzYXZlZERhdGEuY29sbGFwc2VkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9KSxcbiAgICAgIGVkZ2VzOiBfdHJhbnNmb3JtRGF0YS5lZGdlcyxcbiAgICAgIGdyYXBoOiB7XG4gICAgICAgIGlkOiBUT1BPTE9HWV9HUkFQSF9JRCxcbiAgICAgICAgdHlwZTogJ2dyYXBoJyxcbiAgICAgICAgbGF5b3V0OiAnQ29sYScsXG4gICAgICAgIGxheWVyczogW0JPVFRPTV9MQVlFUiwgR1JPVVBTX0xBWUVSLCBERUZBVUxUX0xBWUVSLCBUT1BfTEFZRVJdLFxuICAgICAgICBkYXRhOiB7IC4uLmRpc2NvdmVyeVRyZWUgfSxcbiAgICAgICAgeDogZ3JhcGhEYXRhLngsXG4gICAgICAgIHk6IGdyYXBoRGF0YS55LFxuICAgICAgICBzY2FsZTogZ3JhcGhEYXRhLnNjYWxlLFxuICAgICAgICBzY2FsZUV4dGVudDogZ3JhcGhEYXRhLnNjYWxlRXh0ZW50LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlciB3aXRoIG1vZGVsIHRvIGNyZWF0ZSBub2Rlc1xuICAgIHZpc3VhbGl6YXRpb24uZnJvbU1vZGVsKG1vZGVsLCBmYWxzZSk7XG4gIH0sIFtfdHJhbnNmb3JtRGF0YSwgdmlzdWFsaXphdGlvbiwgZGlzY292ZXJ5VHJlZV0pO1xuXG4gIC8vIE5vdGU6IERvIG5vdCByZW9yZGVyLiBNdXN0IGJlIGNhbGxlZCBhZnRlciByZWdpc3RlcmluZyBtb2RlbFxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIENsZWFyIHNlbGVjdGlvbiB3aGVuIGRpc2NvdmVyeSB0cmVlIGlzIHVwZGF0ZWQgYW5kIGVudGl0eSAodGFyZ2V0KSBpcyBsb3N0XG4gICAgc2V0U2VsZWN0ZWRJZHMoKG9sZCkgPT4ge1xuICAgICAgaWYgKCFnZXROb2RlQnlJZChfdHJhbnNmb3JtRGF0YS5ub2Rlcywgb2xkWzBdKSkge1xuICAgICAgICBzZXRTZWxlY3RlZEVudGl0eSh1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZEVudGl0eShvbGRbMF0gPyB2aXN1YWxpemF0aW9uLmdldEVsZW1lbnRCeUlkKG9sZFswXSkgOiB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIG9sZDtcbiAgICB9KTtcbiAgfSwgW3NldFNlbGVjdGVkSWRzLCBzZXRTZWxlY3RlZEVudGl0eSwgX3RyYW5zZm9ybURhdGEsIHZpc3VhbGl6YXRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhpZGVNZW51ID0gKF86IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcG9sb2d5LWNvbnRleHQtbWVudScpO1xuICAgICAgaWYgKGNvbnRleHRNZW51KSB7XG4gICAgICAgIGNvbnRleHRNZW51LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzaG93TWVudSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHRNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcG9sb2d5LWNvbnRleHQtbWVudScpO1xuICAgICAgaWYgKGNvbnRleHRNZW51KSB7XG4gICAgICAgIGNvbnRleHRNZW51LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBjb250ZXh0TWVudS5zdHlsZS50b3AgPSBgJHtlLmNsaWVudFl9cHhgO1xuICAgICAgICBjb250ZXh0TWVudS5zdHlsZS5sZWZ0ID0gYCR7ZS5jbGllbnRYfXB4YDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVmlzdWFsaXplIHN1cmZhY2UgbmVlZHMgdGltZSB0byBpbnRpYWxpemUuXG4gICAgLy8gV29ya2Fyb3VuZDogZmluZCBkcmF3ZXIgYm9keSB3aGljaCBpcyBhbHJlYWR5IHJlYWR5IGFuZCB0aWdodGx5IHdyYXBzIHRoZSBzdXJmYWNlLlxuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcjdG9wb2xvZ3lfX3Zpc3VhbGl6YXRpb24tY29udGFpbmVyIC5wZi1jLWRyYXdlcl9fY29udGVudCdcbiAgICApO1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHNob3dNZW51KTtcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoaWRlTWVudSk7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGlkZU1lbnUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc2lkZWJhciA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPFRvcG9sb2d5U2lkZUJhciBvbkNsb3NlPXtoYW5kbGVEcmF3ZXJDbG9zZX0+XG4gICAgICAgIDxFbnRpdHlEZXRhaWxzIGVudGl0eT17c2VsZWN0ZWRFbnRpdHl9IC8+XG4gICAgICA8L1RvcG9sb2d5U2lkZUJhcj5cbiAgICApLFxuICAgIFtoYW5kbGVEcmF3ZXJDbG9zZSwgc2VsZWN0ZWRFbnRpdHldXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0YWNrPlxuICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgIDxUb3BvbG9neVRvb2xiYXJcbiAgICAgICAgICAgIHZhcmlhbnQ9e1RvcG9sb2d5VG9vbGJhclZhcmlhbnQuR3JhcGh9XG4gICAgICAgICAgICB2aXN1YWxpemF0aW9uPXt2aXN1YWxpemF0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17ZXhjZWVkTGltaXQgJiYgIXNob3dHcmFwaEFueXdheX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgPFN0YWNrSXRlbSBpc0ZpbGxlZD5cbiAgICAgICAgICB7aXNFbXB0eUdyYXBoID8gKFxuICAgICAgICAgICAgPFRvcG9sb2d5RW1wdHlTdGF0ZSAvPlxuICAgICAgICAgICkgOiBleGNlZWRMaW1pdCAmJiAhc2hvd0dyYXBoQW55d2F5ID8gKFxuICAgICAgICAgICAgPFRvcG9sb2d5RXhjZWVkTGltaXRTdGF0ZSBvblNob3dUb3BvbG9neUFueXdheT17KCkgPT4gc2V0U2hvd0dyYXBoQW55d2F5KHRydWUpfSAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VG9wb2xvZ3lWaWV3XG4gICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgaWQ9XCJ0b3BvbG9neV9fdmlzdWFsaXphdGlvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NzcygndG9wb2xvZ3lfX21haW4tY29udGFpbmVyJyl9XG4gICAgICAgICAgICAgIGNvbnRyb2xCYXI9ezxUb3BvbG9neUNvbnRyb2xCYXIgdmlzdWFsaXphdGlvbj17dmlzdWFsaXphdGlvbn0gLz59XG4gICAgICAgICAgICAgIHNpZGVCYXI9e3NpZGViYXJ9XG4gICAgICAgICAgICAgIHNpZGVCYXJPcGVuPXtzZWxlY3RlZElkcy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICBzaWRlQmFyUmVzaXphYmxlPXt0cnVlfVxuICAgICAgICAgICAgICBtaW5TaWRlQmFyU2l6ZT17YCR7TUlOX1NJWkVCQVJfU0laRX1weGB9XG4gICAgICAgICAgICAgIGRlZmF1bHRTaWRlQmFyU2l6ZT17YCR7REVGQVVMVF9TSVpFQkFSX1NJWkV9cHhgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VmlzdWFsaXphdGlvblByb3ZpZGVyIGNvbnRyb2xsZXI9e3Zpc3VhbGl6YXRpb259PlxuICAgICAgICAgICAgICAgIDxWaXN1YWxpemF0aW9uU3VyZmFjZSBzdGF0ZT17eyBzZWxlY3RlZElkcyB9fSAvPlxuICAgICAgICAgICAgICA8L1Zpc3VhbGl6YXRpb25Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvVG9wb2xvZ3lWaWV3PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgPC9TdGFjaz5cbiAgICAgIDxRdWlja1NlYXJjaENvbnRleHRNZW51IGlkPXsndG9wb2xvZ3ktY29udGV4dC1tZW51J30gLz5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IGNyeW9zdGF0U3ZnIGZyb20gJ0BhcHAvYXNzZXRzL2NyeW9zdGF0X2ljb25fcmdiX2RlZmF1bHQuc3ZnJztcbmltcG9ydCBvcGVuamRrU3ZnIGZyb20gJ0BhcHAvYXNzZXRzL29wZW5qZGsuc3ZnJztcbmltcG9ydCB7IFJvb3RTdGF0ZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L1JlZHV4U3RvcmUnO1xuaW1wb3J0IHsgQ29udGFpbmVyTm9kZUljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMnO1xuaW1wb3J0IHtcbiAgRGVmYXVsdE5vZGUsXG4gIERFRkFVTFRfTEFZRVIsXG4gIEVsbGlwc2VBbmNob3IsXG4gIExheWVyLFxuICBOb2RlLFxuICBvYnNlcnZlcixcbiAgU2NhbGVEZXRhaWxzTGV2ZWwsXG4gIFRPUF9MQVlFUixcbiAgdXNlQW5jaG9yLFxuICB1c2VIb3ZlcixcbiAgV2l0aENvbnRleHRNZW51UHJvcHMsXG4gIFdpdGhEcmFnTm9kZVByb3BzLFxuICBXaXRoU2VsZWN0aW9uUHJvcHMsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRvcG9sb2d5JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZ2V0U3RhdHVzVGFyZ2V0Tm9kZSwgaXNUYXJnZXRNYXRjaGVkLCBub2RlVHlwZVRvQWJiciwgdXNlU2VhcmNoRXhwcmVzc2lvbiB9IGZyb20gJy4uL1NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBUYXJnZXROb2RlIH0gZnJvbSAnLi4vdHlwaW5ncyc7XG5pbXBvcnQgeyBnZXROb2RlRGVjb3JhdG9ycyB9IGZyb20gJy4vTm9kZURlY29yYXRvcic7XG5pbXBvcnQgeyBUT1BPTE9HWV9HUkFQSF9JRCB9IGZyb20gJy4vVG9wb2xvZ3lHcmFwaFZpZXcnO1xuaW1wb3J0IHsgUkVTT1VSQ0VfTkFNRV9UUlVOQ0FURV9MRU5HVEggfSBmcm9tICcuL1V0aWxzRmFjdG9yeSc7XG5cbmV4cG9ydCBjb25zdCBOT0RFX0lDT05fUEFERElORyA9IDU7XG5cbmV4cG9ydCBjb25zdCByZW5kZXJJY29uID0gKF9kYXRhOiBUYXJnZXROb2RlLCBlbGVtZW50OiBOb2RlLCB1c2VBbHQ6IGJvb2xlYW4pOiBSZWFjdC5SZWFjdE5vZGUgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZ2V0RGltZW5zaW9ucygpO1xuXG4gIGNvbnN0IGNvbnRlbnRTaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLSBOT0RFX0lDT05fUEFERElORyAqIDI7XG4gIGNvbnN0IG1haW5Db250ZW50U2l6ZSA9IGNvbnRlbnRTaXplICogKHVzZUFsdCA/IDAuNSA6IDAuOCk7XG4gIGNvbnN0IFtjeCwgY3ldID0gW3dpZHRoIC8gMiwgaGVpZ2h0IC8gMl07XG4gIGNvbnN0IFt0cnVlQ3gsIHRydWVDeV0gPSBbY3ggLSBtYWluQ29udGVudFNpemUgLyAyLCBjeSAtIG1haW5Db250ZW50U2l6ZSAvIDJdO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxjaXJjbGUgY3g9e2N4fSBjeT17Y3l9IHI9e2NvbnRlbnRTaXplIC8gMn0gZmlsbD1cInZhcigtLXBmLWdsb2JhbC0tcGFsZXR0ZS0td2hpdGUpXCIgLz5cbiAgICAgIHt1c2VBbHQgPyAoXG4gICAgICAgIDxnIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgke3RydWVDeH0sICR7dHJ1ZUN5fSlgfT5cbiAgICAgICAgICA8Q29udGFpbmVyTm9kZUljb24gd2lkdGg9e21haW5Db250ZW50U2l6ZX0gaGVpZ2h0PXttYWluQ29udGVudFNpemV9IC8+XG4gICAgICAgIDwvZz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxpbWFnZSB4PXt0cnVlQ3h9IHk9e3RydWVDeX0gd2lkdGg9e21haW5Db250ZW50U2l6ZX0gaGVpZ2h0PXttYWluQ29udGVudFNpemV9IHhsaW5rSHJlZj17b3Blbmpka1N2Z30gLz5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbU5vZGVQcm9wcyBleHRlbmRzIFBhcnRpYWw8V2l0aFNlbGVjdGlvblByb3BzICYgV2l0aERyYWdOb2RlUHJvcHMgJiBXaXRoQ29udGV4dE1lbnVQcm9wcz4ge1xuICBlbGVtZW50OiBOb2RlO1xufVxuXG5leHBvcnQgY29uc3QgTk9ERV9CQURHRV9DT0xPUiA9ICd2YXIoLS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsdWUtNTAwKSc7XG5cbmNvbnN0IEN1c3RvbU5vZGU6IFJlYWN0LkZDPEN1c3RvbU5vZGVQcm9wcz4gPSAoe1xuICBlbGVtZW50LFxuICBvblNlbGVjdCxcbiAgc2VsZWN0ZWQsXG4gIGRyYWdOb2RlUmVmLFxuICBjb250ZXh0TWVudU9wZW4sXG4gIG9uQ29udGV4dE1lbnUsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIHVzZUFuY2hvcihFbGxpcHNlQW5jaG9yKTsgLy8gRm9yIGVkZ2VzXG4gIGNvbnN0IFtob3ZlciwgaG92ZXJSZWZdID0gdXNlSG92ZXIoMjAwLCAyMDApO1xuICBjb25zdCBbZXhwcmVzc2lvbl0gPSB1c2VTZWFyY2hFeHByZXNzaW9uKCk7XG5cbiAgY29uc3QgZGlzcGxheU9wdGlvbnMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4gc3RhdGUudG9wb2xvZ3lDb25maWdzLmRpc3BsYXlPcHRpb25zKTtcbiAgY29uc3QgeyBiYWRnZTogc2hvd0JhZGdlLCBjb25uZWN0aW9uVXJsOiBzaG93Q29ubmVjdFVybCwgaWNvbjogc2hvd0ljb24sIHN0YXR1czogc2hvd1N0YXR1cyB9ID0gZGlzcGxheU9wdGlvbnMuc2hvdztcblxuICBjb25zdCBkZXRhaWxzTGV2ZWwgPSBlbGVtZW50LmdldENvbnRyb2xsZXIoKS5nZXRHcmFwaCgpLmdldERldGFpbHNMZXZlbCgpO1xuICBjb25zdCBsYWJlbEljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IDxpbWcgc3JjPXtjcnlvc3RhdFN2Z30gLz4sIFtdKTtcblxuICBjb25zdCBkYXRhOiBUYXJnZXROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gIGNvbnN0IFtub2RlU3RhdHVzXSA9IGdldFN0YXR1c1RhcmdldE5vZGUoZGF0YSk7XG5cbiAgY29uc3QgY2xhc3NOYW1lcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyYXBoSWQgPSBlbGVtZW50LmdldEdyYXBoKCkuZ2V0SWQoKTtcbiAgICBjb25zdCBtYXRjaEV4cHJGb3JTZWFyY2ggPSBncmFwaElkID09PSBUT1BPTE9HWV9HUkFQSF9JRDtcbiAgICBjb25zdCBhZGRpdGlvbmFsID1cbiAgICAgIChtYXRjaEV4cHJGb3JTZWFyY2ggJiYgZXhwcmVzc2lvbiA9PT0gJycpIHx8IGlzVGFyZ2V0TWF0Y2hlZChkYXRhLCBleHByZXNzaW9uKSA/ICcnIDogJ3NlYXJjaC1pbmFjdGl2ZSc7XG4gICAgcmV0dXJuIGNzcygndG9wb2xvZ3lfX3RhcmdldC1ub2RlJywgYWRkaXRpb25hbCk7XG4gIH0sIFtkYXRhLCBleHByZXNzaW9uLCBlbGVtZW50XSk7XG5cbiAgY29uc3Qgbm9kZURlY29yYXRvcnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IChzaG93U3RhdHVzID8gZ2V0Tm9kZURlY29yYXRvcnMoZWxlbWVudCkgOiBudWxsKSwgW2VsZW1lbnQsIHNob3dTdGF0dXNdKTtcblxuICByZXR1cm4gKFxuICAgIDxMYXllciBpZD17Y29udGV4dE1lbnVPcGVuID8gVE9QX0xBWUVSIDogREVGQVVMVF9MQVlFUn0+XG4gICAgICA8ZyBjbGFzc05hbWU9e2NsYXNzTmFtZXN9IGlkPXsndGFyZ2V0LW5vZGUtdmlzdWFsLWdyb3VwJ30gcmVmPXtob3ZlclJlZiBhcyBSZWFjdC5MZWdhY3lSZWY8U1ZHR0VsZW1lbnQ+fT5cbiAgICAgICAgPERlZmF1bHROb2RlXG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgIGVsZW1lbnQ9e2VsZW1lbnR9XG4gICAgICAgICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICBkcmFnTm9kZVJlZj17ZHJhZ05vZGVSZWZ9XG4gICAgICAgICAgY29udGV4dE1lbnVPcGVuPXtjb250ZXh0TWVudU9wZW59XG4gICAgICAgICAgb25Db250ZXh0TWVudT17b25Db250ZXh0TWVudX1cbiAgICAgICAgICBzY2FsZU5vZGU9eyhob3ZlciB8fCBjb250ZXh0TWVudU9wZW4pICYmIGRldGFpbHNMZXZlbCAhPT0gU2NhbGVEZXRhaWxzTGV2ZWwuaGlnaH1cbiAgICAgICAgICBiYWRnZT17c2hvd0JhZGdlID8gbm9kZVR5cGVUb0FiYnIoZGF0YS5ub2RlVHlwZSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgYmFkZ2VDb2xvcj17Tk9ERV9CQURHRV9DT0xPUn1cbiAgICAgICAgICBiYWRnZUNsYXNzTmFtZT17J3RvcG9sb2d5X19ub2RlLWJhZGdlJ31cbiAgICAgICAgICBub2RlU3RhdHVzPXtzaG93U3RhdHVzID8gbm9kZVN0YXR1cyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzaG93U3RhdHVzQmFja2dyb3VuZD17IWhvdmVyICYmIGRldGFpbHNMZXZlbCA9PT0gU2NhbGVEZXRhaWxzTGV2ZWwubG93fVxuICAgICAgICAgIHRydW5jYXRlTGVuZ3RoPXtSRVNPVVJDRV9OQU1FX1RSVU5DQVRFX0xFTkdUSH1cbiAgICAgICAgICBsYWJlbEljb249e3Nob3dJY29uID8gbGFiZWxJY29uIDogdW5kZWZpbmVkfVxuICAgICAgICAgIHNlY29uZGFyeUxhYmVsPXtzaG93Q29ubmVjdFVybCA/IGRhdGEudGFyZ2V0LmNvbm5lY3RVcmwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgc2hvd0xhYmVsXG4gICAgICAgICAgYXR0YWNobWVudHM9e25vZGVEZWNvcmF0b3JzfVxuICAgICAgICA+XG4gICAgICAgICAgPGcgaWQ9eyd0YXJnZXQtbm9kZS12aXN1YWwtaW5uZXItaWNvbid9PntyZW5kZXJJY29uKGRhdGEsIGVsZW1lbnQsICFzaG93SWNvbil9PC9nPlxuICAgICAgICA8L0RlZmF1bHROb2RlPlxuICAgICAgPC9nPlxuICAgIDwvTGF5ZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvYnNlcnZlcihDdXN0b21Ob2RlKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IG9wZW5qZGtTdmcgZnJvbSAnQGFwcC9hc3NldHMvb3Blbmpkay5zdmcnO1xuaW1wb3J0IHsgUm9vdFN0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQge1xuICBEZWZhdWx0R3JvdXAsXG4gIE5vZGUsXG4gIG9ic2VydmVyLFxuICBXaXRoQ29udGV4dE1lbnVQcm9wcyxcbiAgV2l0aERyYWdOb2RlUHJvcHMsXG4gIFdpdGhTZWxlY3Rpb25Qcm9wcyxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdG9wb2xvZ3knO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudE5vZGUsIE5vZGVUeXBlIH0gZnJvbSAnLi4vdHlwaW5ncyc7XG5pbXBvcnQgeyBOT0RFX0lDT05fUEFERElORyB9IGZyb20gJy4vQ3VzdG9tTm9kZSc7XG5cbmNvbnN0IERFRkFVTFRfTk9ERV9DT0xMQVBTRURfRElBTUVURVIgPSAxMDA7XG5cbmV4cG9ydCBjb25zdCByZW5kZXJJY29uID0gKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUmVhY3QuUmVhY3ROb2RlID0+IHtcbiAgY29uc3QgY29udGVudFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAtIE5PREVfSUNPTl9QQURESU5HICogMjtcbiAgY29uc3QgbWFpbkNvbnRlbnRTaXplID0gY29udGVudFNpemUgKiAwLjg7XG4gIGNvbnN0IFtjeCwgY3ldID0gW3dpZHRoIC8gMiwgaGVpZ2h0IC8gMl07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGNpcmNsZSBjeD17Y3h9IGN5PXtjeX0gcj17Y29udGVudFNpemUgLyAyfSBmaWxsPVwidmFyKC0tcGYtZ2xvYmFsLS1wYWxldHRlLS13aGl0ZSlcIiAvPlxuICAgICAgPGltYWdlXG4gICAgICAgIHg9e2N4IC0gbWFpbkNvbnRlbnRTaXplIC8gMn1cbiAgICAgICAgeT17Y3kgLSBtYWluQ29udGVudFNpemUgLyAyfVxuICAgICAgICB3aWR0aD17bWFpbkNvbnRlbnRTaXplfVxuICAgICAgICBoZWlnaHQ9e21haW5Db250ZW50U2l6ZX1cbiAgICAgICAgeGxpbmtIcmVmPXtvcGVuamRrU3ZnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tR3JvdXBQcm9wcyBleHRlbmRzIFBhcnRpYWw8V2l0aFNlbGVjdGlvblByb3BzICYgV2l0aERyYWdOb2RlUHJvcHMgJiBXaXRoQ29udGV4dE1lbnVQcm9wcz4ge1xuICBlbGVtZW50OiBOb2RlO1xuICBjb2xsYXBzZWRXaWR0aD86IG51bWJlcjtcbiAgY29sbGFwc2VkSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5jb25zdCBDdXN0b21Hcm91cDogUmVhY3QuRkM8Q3VzdG9tR3JvdXBQcm9wcz4gPSAoe1xuICBlbGVtZW50LFxuICBvblNlbGVjdCxcbiAgc2VsZWN0ZWQsXG4gIGRyYWdOb2RlUmVmLFxuICBjb250ZXh0TWVudU9wZW4sXG4gIG9uQ29udGV4dE1lbnUsXG4gIGNvbGxhcHNlZEhlaWdodCA9IERFRkFVTFRfTk9ERV9DT0xMQVBTRURfRElBTUVURVIsXG4gIGNvbGxhcHNlZFdpZHRoID0gREVGQVVMVF9OT0RFX0NPTExBUFNFRF9ESUFNRVRFUixcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgcG9zaXRpb25SZWYgPSBSZWFjdC51c2VSZWYoZWxlbWVudC5nZXRQb3NpdGlvbigpKTtcbiAgY29uc3QgZGF0YTogRW52aXJvbm1lbnROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG5cbiAgY29uc3QgZGlzcGxheU9wdGlvbnMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4gc3RhdGUudG9wb2xvZ3lDb25maWdzLmRpc3BsYXlPcHRpb25zKTtcbiAgY29uc3QgeyBiYWRnZTogc2hvd0JhZGdlIH0gPSBkaXNwbGF5T3B0aW9ucy5zaG93O1xuXG4gIGNvbnN0IGNvbGxhcHNlZENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IDxnIGlkPXsndG9wb2xvZ3ktdmlzdWFsLWNvbGxhcHNlZC1pY29uJ30+e3JlbmRlckljb24oY29sbGFwc2VkV2lkdGgsIGNvbGxhcHNlZEhlaWdodCl9PC9nPixcbiAgICBbY29sbGFwc2VkV2lkdGgsIGNvbGxhcHNlZEhlaWdodF1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHBvc2l0aW9uUmVmLmN1cnJlbnQgPSBlbGVtZW50LmdldFBvc2l0aW9uKCk7XG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPGcgaWQ9eyd0b3BvbG9neS12aXN1YWwtZ3JvdXAnfT5cbiAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBEZWZhdWx0R3JvdXAsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZCxcbiAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3QsXG4gICAgICAgICAgY2xhc3NOYW1lOiBkYXRhLm5vZGVUeXBlID09PSBOb2RlVHlwZS5SRUFMTSA/ICd0b3BvbG9neV9fcmVhbG0tZ3JvdXAnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGRyYWdOb2RlUmVmOiBkcmFnTm9kZVJlZixcbiAgICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIHRvIGtlZXAgZ3JvdXAgcG9zaXRpb25zIGJldHdlZW4gY29sbGFwc2VzXG4gICAgICAgICAgb25Db2xsYXBzZUNoYW5nZTogKGdyb3VwLCBfKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRQb3NpdGlvbihwb3NpdGlvblJlZi5jdXJyZW50KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlZEhlaWdodDogY29sbGFwc2VkSGVpZ2h0LFxuICAgICAgICAgIGNvbGxhcHNlZFdpZHRoOiBjb2xsYXBzZWRXaWR0aCxcbiAgICAgICAgICBiYWRnZTogc2hvd0JhZGdlID8gZGF0YS5ub2RlVHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaG93TGFiZWw6IHRydWUsXG4gICAgICAgICAgY29udGV4dE1lbnVPcGVuOiBjb250ZXh0TWVudU9wZW4sXG4gICAgICAgICAgb25Db250ZXh0TWVudTogb25Db250ZXh0TWVudSxcbiAgICAgICAgfSBhcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGVmYXVsdEdyb3VwPixcbiAgICAgICAgZWxlbWVudC5pc0NvbGxhcHNlZCgpID8gY29sbGFwc2VkQ29udGVudCA6IG51bGxcbiAgICAgICl9XG4gICAgPC9nPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2JzZXJ2ZXIoQ3VzdG9tR3JvdXApO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IFRvcG9sb2d5RmlsdGVycyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvVG9wb2xvZ3lGaWx0ZXJTbGljZSc7XG5pbXBvcnQge1xuICBDb2xhTGF5b3V0LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBEZWZhdWx0RWRnZSxcbiAgRWRnZU1vZGVsLFxuICBHcmFwaCxcbiAgR3JhcGhDb21wb25lbnQsXG4gIEdyYXBoRWxlbWVudCxcbiAgaXNOb2RlLFxuICBMYXlvdXQsXG4gIExheW91dEZhY3RvcnksXG4gIE1vZGVsS2luZCxcbiAgbm9kZURyYWdTb3VyY2VTcGVjLFxuICBOb2RlLFxuICBOb2RlTW9kZWwsXG4gIE5vZGVTaGFwZSxcbiAgUmVjdCxcbiAgVmlzdWFsaXphdGlvbixcbiAgd2l0aENvbnRleHRNZW51LFxuICB3aXRoRHJhZ05vZGUsXG4gIHdpdGhQYW5ab29tLFxuICB3aXRoU2VsZWN0aW9uLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10b3BvbG9neSc7XG5pbXBvcnQge1xuICBhY3Rpb25GYWN0b3J5LFxuICBDT0xMQVBTRV9FWEVNUFRTLFxuICBnZXRBbGxMZWF2ZXMsXG4gIGdldFVuaXF1ZUdyb3VwSWQsXG4gIGdldFVuaXF1ZVRhcmdldElkLFxuICBpc0dyYXBoRWxlbWVudCxcbiAgaXNHcm91cE5vZGVGaWx0ZXJlZCxcbiAgaXNUYXJnZXROb2RlRmlsdGVyZWQsXG4gIExpc3RFbGVtZW50LFxuICBUcmFuc2Zvcm1Db25maWcsXG59IGZyb20gJy4uL1NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudE5vZGUsIGlzVGFyZ2V0Tm9kZSwgTm9kZVR5cGUsIFRhcmdldE5vZGUgfSBmcm9tICcuLi90eXBpbmdzJztcbmltcG9ydCBDdXN0b21Hcm91cCBmcm9tICcuL0N1c3RvbUdyb3VwJztcbmltcG9ydCBDdXN0b21Ob2RlIGZyb20gJy4vQ3VzdG9tTm9kZSc7XG5cbi8vIFVuaXQ6IHB4XG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX0RJQU1FVEVSID0gODA7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0dST1VQX1BBRERJTkcgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfUEFERElORyA9IDYwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX1BBRERJTkdTID0gWzAsIERFRkFVTFRfTk9ERV9QQURESU5HXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0dST1VQX1BBRERJTkdTID0gW1xuICBERUZBVUxUX0dST1VQX1BBRERJTkcsXG4gIERFRkFVTFRfR1JPVVBfUEFERElORyxcbiAgREVGQVVMVF9HUk9VUF9QQURESU5HICsgMTUsXG4gIERFRkFVTFRfR1JPVVBfUEFERElORyxcbl07XG5cbmV4cG9ydCBjb25zdCBSRVNPVVJDRV9OQU1FX1RSVU5DQVRFX0xFTkdUSCA9IDIwO1xuXG5jb25zdCBfYnVpbGRGdWxsTm9kZU1vZGVsID0gKFxuICBub2RlOiBFbnZpcm9ubWVudE5vZGUgfCBUYXJnZXROb2RlLFxuICBleHBhbmRNb2RlID0gdHJ1ZSxcbiAgZmlsdGVycz86IFRvcG9sb2d5RmlsdGVyc1xuKTogTm9kZU1vZGVsW10gPT4ge1xuICBpZiAoaXNUYXJnZXROb2RlKG5vZGUpKSB7XG4gICAgaWYgKCFpc1RhcmdldE5vZGVGaWx0ZXJlZChub2RlLCBmaWx0ZXJzPy50YXJnZXRGaWx0ZXJzLmZpbHRlcnMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiBnZXRVbmlxdWVUYXJnZXRJZChub2RlKSxcbiAgICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgICBsYWJlbDogbm9kZS50YXJnZXQuYWxpYXMgfHwgbm9kZS5uYW1lLFxuICAgICAgICBzaGFwZTogTm9kZVNoYXBlLmVsbGlwc2UsXG4gICAgICAgIHdpZHRoOiBERUZBVUxUX05PREVfRElBTUVURVIsXG4gICAgICAgIGhlaWdodDogREVGQVVMVF9OT0RFX0RJQU1FVEVSLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHBhZGRpbmc6IERFRkFVTFRfTk9ERV9QQURESU5HUyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBjb25zdCBJTklUOiBOb2RlTW9kZWxbXSA9IFtdO1xuICBjb25zdCBkaXJlY3RDaGlsZE5vZGVzOiBOb2RlTW9kZWxbXSA9IFtdO1xuICBjb25zdCBhbGxDaGlsZE5vZGVzID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gX2J1aWxkRnVsbE5vZGVNb2RlbChjdXJyLCBleHBhbmRNb2RlLCBmaWx0ZXJzKTtcbiAgICBpZiAobmV4dC5sZW5ndGgpIHtcbiAgICAgIC8vIEZpcnN0IG5vZGVzIGFyZSBhbHdheXMgZGlyZWN0IGNoaWxkcmVuXG4gICAgICAvLyBJZiBkaXJlY3QgY2hpbGQgaXMgY29sbGFwc2VkIChpLmUuIHNpbmdsZSBncmFuZGNoaWxkIG5vZGUpLFxuICAgICAgLy8gdGhhdCBzaW5nbGUgZ3JhbmRjaGlsZCBpcyB1c2VkIGFzIGlmIGl0IGlzIGRpcmVjdFxuICAgICAgZGlyZWN0Q2hpbGROb2Rlcy5wdXNoKG5leHRbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gcHJldi5jb25jYXQobmV4dCk7XG4gIH0sIElOSVQpO1xuXG4gIC8vIERvIHNob3cgZW1wdHkgb3IgZmlsdGVyZWQtb3V0IGdyb3Vwc1xuICAvLyBOb3RlOiBEbyBub3QgZmlsdGVyIHVuaXZlcnNlIG5vZGVcbiAgaWYgKFxuICAgICFhbGxDaGlsZE5vZGVzLmxlbmd0aCB8fFxuICAgIChub2RlLm5vZGVUeXBlICE9PSBOb2RlVHlwZS5VTklWRVJTRSAmJiAhaXNHcm91cE5vZGVGaWx0ZXJlZChub2RlLCBmaWx0ZXJzPy5ncm91cEZpbHRlcnMuZmlsdGVycykpXG4gICkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIENvbGxhcHNlIHNpbmdsZS1jaGlsZCBpbnRlcm5hbCBub2RlcyAocmVhbG1zIGFuZCBuYW1lc3BhY2VzIGFyZSBleGVtcHQpXG4gIGlmICghQ09MTEFQU0VfRVhFTVBUUy5pbmNsdWRlcyhub2RlLm5vZGVUeXBlKSAmJiAhZXhwYW5kTW9kZSAmJiBkaXJlY3RDaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBbLi4uYWxsQ2hpbGROb2Rlc107XG4gIH1cblxuICBjb25zdCBncm91cE5vZGU6IE5vZGVNb2RlbCA9IHtcbiAgICBpZDogZ2V0VW5pcXVlR3JvdXBJZChub2RlKSxcbiAgICB0eXBlOiAnZ3JvdXAnLFxuICAgIGdyb3VwOiB0cnVlLFxuICAgIGxhYmVsOiBub2RlLm5hbWUsIC8vIE5hbWUgb2YgdGhlIG5vZGVcbiAgICBjaGlsZHJlbjogZGlyZWN0Q2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4gY2hpbGROb2RlLmlkKSxcbiAgICBzdHlsZToge1xuICAgICAgcGFkZGluZzogREVGQVVMVF9HUk9VUF9QQURESU5HUyxcbiAgICB9LFxuICAgIGRhdGE6IHtcbiAgICAgIC4uLm5vZGUsXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW2dyb3VwTm9kZSwgLi4uYWxsQ2hpbGROb2Rlc107XG59O1xuXG5jb25zdCBfdHJhbnNmb3JtRGF0YUdyb3VwZWRCeVRvcExldmVsID0gKHJvb3Q6IEVudmlyb25tZW50Tm9kZSwgZmlsdGVycz86IFRvcG9sb2d5RmlsdGVycykgPT4ge1xuICBsZXQgbm9kZXM6IE5vZGVNb2RlbFtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBFZGdlTW9kZWxbXSA9IFtdO1xuXG4gIC8vIEZpcnN0IGxheWVyIG9mIGludGVybmFsIG5vZGVzXG4gIGNvbnN0IGdyb3VwTm9kZXMgPSByb290LmNoaWxkcmVuXG4gICAgLmZpbHRlcigocmVhbG06IEVudmlyb25tZW50Tm9kZSkgPT4gaXNHcm91cE5vZGVGaWx0ZXJlZChyZWFsbSwgZmlsdGVycz8uZ3JvdXBGaWx0ZXJzLmZpbHRlcnMpKSAvLyBEbyBub3Qgc2hvdyBmaWx0ZXJlZC1vdXQgZ3JvdXBzXG4gICAgLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IHJlYWxtTm9kZTogTm9kZU1vZGVsID0ge1xuICAgICAgICBpZDogZ2V0VW5pcXVlR3JvdXBJZChncm91cCBhcyBFbnZpcm9ubWVudE5vZGUpLFxuICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICBncm91cDogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IGdyb3VwLm5hbWUsIC8vIE5hbWUgb2YgdGhlIG5vZGVcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHBhZGRpbmc6IERFRkFVTFRfR1JPVVBfUEFERElOR1MsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVhbG1Ob2RlO1xuICAgIH0pO1xuXG4gIC8vIEV4dHJhY3QgYWxsIGxlYXZlc1xuICBsZXQgbGVhZk5vZGVzOiBOb2RlTW9kZWxbXSA9IFtdO1xuICBncm91cE5vZGVzLmZvckVhY2goKGdyb3VwTm9kZSkgPT4ge1xuICAgIGNvbnN0IF90Tm9kZXM6IE5vZGVNb2RlbFtdID0gZ2V0QWxsTGVhdmVzKGdyb3VwTm9kZS5kYXRhKVxuICAgICAgLmZpbHRlcigodG4pID0+IGlzVGFyZ2V0Tm9kZUZpbHRlcmVkKHRuLCBmaWx0ZXJzPy50YXJnZXRGaWx0ZXJzLmZpbHRlcnMpKVxuICAgICAgLm1hcCgobGVhZjogVGFyZ2V0Tm9kZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBnZXRVbmlxdWVUYXJnZXRJZChsZWFmKSxcbiAgICAgICAgICB0eXBlOiAnbm9kZScsXG4gICAgICAgICAgbGFiZWw6IGxlYWYudGFyZ2V0LmFsaWFzIHx8IGxlYWYubmFtZSxcbiAgICAgICAgICBzaGFwZTogTm9kZVNoYXBlLmVsbGlwc2UsXG4gICAgICAgICAgd2lkdGg6IERFRkFVTFRfTk9ERV9ESUFNRVRFUixcbiAgICAgICAgICBoZWlnaHQ6IERFRkFVTFRfTk9ERV9ESUFNRVRFUixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcGFkZGluZzogREVGQVVMVF9OT0RFX1BBRERJTkdTLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgLi4ubGVhZixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICBncm91cE5vZGUuY2hpbGRyZW4gPSBfdE5vZGVzLm1hcCgobikgPT4gbi5pZCk7IC8vIEFkZCBub2RlcyBpZCB0byBncm91cFxuICAgIGxlYWZOb2RlcyA9IGxlYWZOb2Rlcy5jb25jYXQoX3ROb2Rlcyk7XG4gIH0pO1xuXG4gIG5vZGVzID0gbm9kZXMuY29uY2F0KGdyb3VwTm9kZXMuZmlsdGVyKChnbikgPT4gZ24uY2hpbGRyZW4gJiYgZ24uY2hpbGRyZW4ubGVuZ3RoKSk7IC8vIERvIG5vdCBlbXB0eSBncm91cHNcbiAgbm9kZXMgPSBub2Rlcy5jb25jYXQobGVhZk5vZGVzKTtcblxuICByZXR1cm4ge1xuICAgIG5vZGVzOiBub2RlcyxcbiAgICBlZGdlczogZWRnZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgX3RyYW5zZm9ybURhdGFGdWxsID0gKHJvb3Q6IEVudmlyb25tZW50Tm9kZSwgZXhwYW5kTW9kZSA9IHRydWUsIGZpbHRlcnM/OiBUb3BvbG9neUZpbHRlcnMpID0+IHtcbiAgY29uc3QgZWRnZXM6IEVkZ2VNb2RlbFtdID0gW107XG4gIGNvbnN0IG5vZGVzID0gX2J1aWxkRnVsbE5vZGVNb2RlbChyb290LCBleHBhbmRNb2RlLCBmaWx0ZXJzKS5zbGljZSgxKTsgLy8gUmVtb3ZlIHVuaXZlcnNlIG5vZGVcbiAgcmV0dXJuIHtcbiAgICBub2Rlczogbm9kZXMsXG4gICAgZWRnZXM6IGVkZ2VzLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybURhdGEgPSAoXG4gIHVuaXZlcnNlOiBFbnZpcm9ubWVudE5vZGUsXG4gIHsgc2hvd09ubHlUb3BHcm91cCA9IGZhbHNlLCBleHBhbmRNb2RlID0gdHJ1ZSB9OiBUcmFuc2Zvcm1Db25maWcgPSB7fSxcbiAgZmlsdGVycz86IFRvcG9sb2d5RmlsdGVyc1xuKToge1xuICBub2RlczogTm9kZU1vZGVsW107XG4gIGVkZ2VzOiBFZGdlTW9kZWxbXTtcbn0gPT4ge1xuICByZXR1cm4gc2hvd09ubHlUb3BHcm91cFxuICAgID8gX3RyYW5zZm9ybURhdGFHcm91cGVkQnlUb3BMZXZlbCh1bml2ZXJzZSwgZmlsdGVycylcbiAgICA6IF90cmFuc2Zvcm1EYXRhRnVsbCh1bml2ZXJzZSwgZXhwYW5kTW9kZSwgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZUJ5SWQgPSAobm9kZXM6IE5vZGVNb2RlbFtdLCBpZD86IHN0cmluZykgPT4ge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGlkKTtcbn07XG5cbi8vIFRoaXMgbWV0aG9kIHNldHMgdGhlIGxheW91dCBvZiB5b3VyIHRvcG9sb2d5IHZpZXcgKGUuZy4gRm9yY2UsIERhZ3JlLCBDb2xhLCBldGMuKS5cbi8vIE9DUCBpcyBzdXBwb3J0aW5nIG9ubHkgQ29sYVxuZXhwb3J0IGNvbnN0IGxheW91dEZhY3Rvcnk6IExheW91dEZhY3RvcnkgPSAodHlwZTogc3RyaW5nLCBncmFwaDogR3JhcGgpOiBMYXlvdXQgfCB1bmRlZmluZWQgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdDb2xhJzpcbiAgICAgIHJldHVybiBuZXcgQ29sYUxheW91dChncmFwaCwgeyBsYXlvdXRPbkRyYWc6IGZhbHNlIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLndhcm4oYCR7dHlwZX0gbGF5b3V0IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbi8vIFRoaXMgbWV0aG9kIGxldHMgeW91IGN1c3RvbWl6ZSB0aGUgY29tcG9uZW50cyBpbiB5b3VyIHRvcG9sb2d5IHZpZXcgKGUuZy4gbm9kZXMsIGdyb3VwcywgYW5kIGVkZ2VzKVxuZXhwb3J0IGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnkgPSAoa2luZDogTW9kZWxLaW5kLCB0eXBlOiBzdHJpbmcpID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgcmV0dXJuIHdpdGhDb250ZXh0TWVudShhY3Rpb25GYWN0b3J5KShcbiAgICAgICAgd2l0aERyYWdOb2RlKG5vZGVEcmFnU291cmNlU3BlYygnZ3JvdXAnLCBmYWxzZSwgZmFsc2UpKShcbiAgICAgICAgICB3aXRoU2VsZWN0aW9uKHsgbXVsdGlTZWxlY3Q6IGZhbHNlLCBjb250cm9sbGVkOiB0cnVlIH0pKEN1c3RvbUdyb3VwKVxuICAgICAgICApXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSBNb2RlbEtpbmQuZ3JhcGg6XG4gICAgICAgICAgcmV0dXJuIHdpdGhQYW5ab29tKCkoR3JhcGhDb21wb25lbnQpO1xuICAgICAgICBjYXNlIE1vZGVsS2luZC5ub2RlOlxuICAgICAgICAgIHJldHVybiB3aXRoQ29udGV4dE1lbnUoYWN0aW9uRmFjdG9yeSkoXG4gICAgICAgICAgICB3aXRoRHJhZ05vZGUobm9kZURyYWdTb3VyY2VTcGVjKCdub2RlJywgZmFsc2UsIGZhbHNlKSkoXG4gICAgICAgICAgICAgIHdpdGhTZWxlY3Rpb24oeyBtdWx0aVNlbGVjdDogZmFsc2UsIGNvbnRyb2xsZWQ6IHRydWUgfSkoQ3VzdG9tTm9kZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIE1vZGVsS2luZC5lZGdlOlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0RWRnZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICB9XG59O1xuXG4vLyBTdXBwb3J0IG9ubHkgbm9kZSBkZXRhaWxzXG5leHBvcnQgY29uc3QgaXNSZW5kZXJhYmxlID0gKGVudGl0eTogR3JhcGhFbGVtZW50IHwgTGlzdEVsZW1lbnQpID0+IHtcbiAgaWYgKGlzR3JhcGhFbGVtZW50KGVudGl0eSkpIHtcbiAgICByZXR1cm4gaXNOb2RlKGVudGl0eSk7XG4gIH1cbiAgcmV0dXJuIGVudGl0eS5nZXREYXRhKCkgIT09IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBub2RlRGlzdGFuY2VUb0JvdW5kcyA9IChub2RlOiBOb2RlLCBib3VuZHM6IFJlY3QpOiBudW1iZXIgPT4ge1xuICBjb25zdCBub2RlQm91bmRzID0gbm9kZS5nZXRCb3VuZHMoKTtcbiAgY29uc3Qgbm9kZVggPSBub2RlQm91bmRzLnggKyBub2RlQm91bmRzLndpZHRoIC8gMjtcbiAgY29uc3Qgbm9kZVkgPSBub2RlQm91bmRzLnkgKyBub2RlQm91bmRzLmhlaWdodCAvIDI7XG5cbiAgY29uc3QgZHggPSBNYXRoLm1heChib3VuZHMueCAtIG5vZGVYLCAwLCBub2RlWCAtIChib3VuZHMueCArIGJvdW5kcy53aWR0aCkpO1xuICBjb25zdCBkeSA9IE1hdGgubWF4KGJvdW5kcy55IC0gbm9kZVksIDAsIG5vZGVZIC0gKGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCkpO1xuICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbn07XG5cbi8vIEVuc3VyZSBzb21lIG5vZGVzIGFyZSB3aXRoaW4gdmlld3MgaW4gY2FzZSBzdG9yZWQgbG9jYXRpb25zIGFyZSBvZmYgc2NyZWVuXG4vLyBGSVhNRTogU2VlbXMgdG8gYWx3YXlzIHBhbiBpbnRvIHZpZXdcbmV4cG9ydCBjb25zdCBlbnN1cmVHcmFwaFZpc2libGUgPSAodmlzdWFsaXphdGlvbjogVmlzdWFsaXphdGlvbikgPT4ge1xuICBpZiAodmlzdWFsaXphdGlvbi5oYXNHcmFwaCgpKSB7XG4gICAgY29uc3QgZ3JhcGggPSB2aXN1YWxpemF0aW9uLmdldEdyYXBoKCk7XG4gICAgY29uc3Qgbm9kZXMgPSB2aXN1YWxpemF0aW9uLmdldEVsZW1lbnRzKCkuZmlsdGVyKGlzTm9kZSk7XG5cbiAgICBpZiAobm9kZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhbnlWaXNpYmxlID0gbm9kZXMuZmluZCgobikgPT4gZ3JhcGguaXNOb2RlSW5WaWV3KG4sIHsgcGFkZGluZzogMCB9KSk7XG4gICAgICBpZiAoIWFueVZpc2libGUpIHtcbiAgICAgICAgY29uc3QgZ3JhcGhCb3VuZHMgPSBncmFwaC5nZXRCb3VuZHMoKTtcblxuICAgICAgICBjb25zdCBbdG9QYW5Ob2RlLCBfXSA9IG5vZGVzLnJlZHVjZShcbiAgICAgICAgICAoW2Nsb3Nlc3ROb2RlLCBjbG9zZXN0RGlzdGFuY2VdLCBuZXh0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBub2RlRGlzdGFuY2VUb0JvdW5kcyhuZXh0Tm9kZSwgZ3JhcGhCb3VuZHMpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbbmV4dE5vZGUsIGRpc3RhbmNlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbY2xvc2VzdE5vZGUsIGNsb3Nlc3REaXN0YW5jZV07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbbm9kZXNbMF0sIG5vZGVEaXN0YW5jZVRvQm91bmRzKG5vZGVzWzBdLCBncmFwaEJvdW5kcyldXG4gICAgICAgICk7XG5cbiAgICAgICAgZ3JhcGgucGFuSW50b1ZpZXcodG9QYW5Ob2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IEN1c3RvbU5vZGUgZnJvbSAnQGFwcC9Ub3BvbG9neS9HcmFwaFZpZXcvQ3VzdG9tTm9kZSc7XG5pbXBvcnQgeyBOb2RlVHlwZSwgVGFyZ2V0Tm9kZSB9IGZyb20gJ0BhcHAvVG9wb2xvZ3kvdHlwaW5ncyc7XG5pbXBvcnQgeyBoYXNoQ29kZSB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgRGVmYXVsdEVkZ2UsXG4gIERlZmF1bHRHcm91cCxcbiAgRWRnZU1vZGVsLFxuICBHcmFwaCxcbiAgR3JhcGhDb21wb25lbnQsXG4gIEdyaWRMYXlvdXQsXG4gIExheW91dCxcbiAgTGF5b3V0RmFjdG9yeSxcbiAgTW9kZWxLaW5kLFxuICBub2RlRHJhZ1NvdXJjZVNwZWMsXG4gIE5vZGVNb2RlbCxcbiAgTm9kZVNoYXBlLFxuICB3aXRoRHJhZ05vZGUsXG4gIHdpdGhQYW5ab29tLFxuICB3aXRoU2VsZWN0aW9uLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10b3BvbG9neSc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICcuLi9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBsYXlvdXRGYWN0b3J5OiBMYXlvdXRGYWN0b3J5ID0gKHR5cGU6IHN0cmluZywgZ3JhcGg6IEdyYXBoKTogTGF5b3V0IHwgdW5kZWZpbmVkID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnR3JpZCc6XG4gICAgICByZXR1cm4gbmV3IEdyaWRMYXlvdXQoZ3JhcGgsIHsgbGF5b3V0T25EcmFnOiBmYWxzZSB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS53YXJuKGAke3R5cGV9IGxheW91dCBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBsZXRzIHlvdSBjdXN0b21pemUgdGhlIGNvbXBvbmVudHMgaW4geW91ciB0b3BvbG9neSB2aWV3IChlLmcuIG5vZGVzLCBncm91cHMsIGFuZCBlZGdlcylcbmV4cG9ydCBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5ID0gKGtpbmQ6IE1vZGVsS2luZCwgdHlwZTogc3RyaW5nKSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgIHJldHVybiBEZWZhdWx0R3JvdXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlIE1vZGVsS2luZC5ncmFwaDpcbiAgICAgICAgICByZXR1cm4gd2l0aFBhblpvb20oKShHcmFwaENvbXBvbmVudCk7XG4gICAgICAgIGNhc2UgTW9kZWxLaW5kLm5vZGU6XG4gICAgICAgICAgcmV0dXJuIHdpdGhEcmFnTm9kZShub2RlRHJhZ1NvdXJjZVNwZWMoJ25vZGUnLCBmYWxzZSwgZmFsc2UpKShcbiAgICAgICAgICAgIHdpdGhTZWxlY3Rpb24oeyBtdWx0aVNlbGVjdDogZmFsc2UsIGNvbnRyb2xsZWQ6IHRydWUgfSkoQ3VzdG9tTm9kZSlcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIE1vZGVsS2luZC5lZGdlOlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0RWRnZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFyZ2V0Tm9kZSA9ICh0YXJnZXQ6IFRhcmdldCk6IFRhcmdldE5vZGUgPT4ge1xuICByZXR1cm4ge1xuICAgIGlkOiBoYXNoQ29kZShKU09OLnN0cmluZ2lmeSh0YXJnZXQpKSxcbiAgICBuYW1lOiB0YXJnZXQuY29ubmVjdFVybCxcbiAgICBub2RlVHlwZTogTm9kZVR5cGUuVEFSR0VULFxuICAgIGxhYmVsczoge30sXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gIH07XG59O1xuXG5jb25zdCBERUZBVUxUX05PREVfRElBTUVURVIgPSA1MDtcbmNvbnN0IERFRkFVTFRfTk9ERV9QQURESU5HUyA9IFswLCAzNV07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1EYXRhID0gKFxuICB0YXJnZXRzOiBUYXJnZXROb2RlW11cbik6IHtcbiAgbm9kZXM6IE5vZGVNb2RlbFtdO1xuICBlZGdlczogRWRnZU1vZGVsW107XG59ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBub2RlczogdGFyZ2V0cy5tYXAoKHRuKSA9PiAoe1xuICAgICAgaWQ6IHRuLnRhcmdldC5jb25uZWN0VXJsLFxuICAgICAgdHlwZTogJ25vZGUnLFxuICAgICAgbGFiZWw6IHRuLnRhcmdldC5hbGlhcyB8fCB0bi50YXJnZXQuY29ubmVjdFVybCxcbiAgICAgIHNoYXBlOiBOb2RlU2hhcGUuZWxsaXBzZSxcbiAgICAgIHdpZHRoOiBERUZBVUxUX05PREVfRElBTUVURVIsXG4gICAgICBoZWlnaHQ6IERFRkFVTFRfTk9ERV9ESUFNRVRFUixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHBhZGRpbmc6IERFRkFVTFRfTk9ERV9QQURESU5HUyxcbiAgICAgIH0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLnRuLFxuICAgICAgfSxcbiAgICB9KSksXG4gICAgZWRnZXM6IFtdLFxuICB9O1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgVG9wb2xvZ3lDb250cm9sQmFyIH0gZnJvbSAnQGFwcC9Ub3BvbG9neS9HcmFwaFZpZXcvVG9wb2xvZ3lDb250cm9sQmFyJztcbmltcG9ydCB7IFNhdmVkR3JhcGhQb3NpdGlvbiwgU2F2ZWROb2RlUG9zaXRpb24gfSBmcm9tICdAYXBwL1RvcG9sb2d5L0dyYXBoVmlldy9Ub3BvbG9neUdyYXBoVmlldyc7XG5pbXBvcnQgeyBnZXROb2RlQnlJZCB9IGZyb20gJ0BhcHAvVG9wb2xvZ3kvR3JhcGhWaWV3L1V0aWxzRmFjdG9yeSc7XG5pbXBvcnQgRW50aXR5RGV0YWlscywgeyBBbGVydE9wdGlvbnMgfSBmcm9tICdAYXBwL1RvcG9sb2d5L1NoYXJlZC9FbnRpdHkvRW50aXR5RGV0YWlscyc7XG5pbXBvcnQgeyB1c2VTZWFyY2hFeHByZXNzaW9uIH0gZnJvbSAnQGFwcC9Ub3BvbG9neS9TaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgVG9wb2xvZ3lTaWRlQmFyIH0gZnJvbSAnQGFwcC9Ub3BvbG9neS9TaWRlQmFyL1RvcG9sb2d5U2lkZUJhcic7XG5pbXBvcnQgeyBOb2RlVHlwZSB9IGZyb20gJ0BhcHAvVG9wb2xvZ3kvdHlwaW5ncyc7XG5pbXBvcnQgeyBnZXRGcm9tTG9jYWxTdG9yYWdlLCBzYXZlVG9Mb2NhbFN0b3JhZ2UgfSBmcm9tICdAYXBwL3V0aWxzL0xvY2FsU3RvcmFnZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IGV2YWx1YXRlVGFyZ2V0V2l0aEV4cHIsIGhhc2hDb2RlIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdWxsc2V5ZSxcbiAgRGF0YUxpc3QsXG4gIERhdGFMaXN0Q2VsbCxcbiAgRGF0YUxpc3RDb250ZW50LFxuICBEYXRhTGlzdEl0ZW0sXG4gIERhdGFMaXN0SXRlbUNlbGxzLFxuICBEYXRhTGlzdEl0ZW1Sb3csXG4gIERhdGFMaXN0VG9nZ2xlLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlQm9keSxcbiAgRW1wdHlTdGF0ZUljb24sXG4gIEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zLFxuICBFbXB0eVN0YXRlVmFyaWFudCxcbiAgRmxleCxcbiAgRmxleEl0ZW0sXG4gIFJhZGlvLFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxuICBUaXRsZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBDb250YWluZXJOb2RlSWNvbiwgU2VhcmNoSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQge1xuICBhY3Rpb24sXG4gIEdyYXBoRWxlbWVudCxcbiAgR1JBUEhfUE9TSVRJT05fQ0hBTkdFX0VWRU5ULFxuICBNb2RlbCxcbiAgTk9ERV9QT1NJVElPTkVEX0VWRU5ULFxuICBTZWxlY3Rpb25FdmVudExpc3RlbmVyLFxuICBTRUxFQ1RJT05fRVZFTlQsXG4gIFRvcG9sb2d5VmlldyxcbiAgVmlzdWFsaXphdGlvbixcbiAgVmlzdWFsaXphdGlvblByb3ZpZGVyLFxuICBWaXN1YWxpemF0aW9uU3VyZmFjZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdG9wb2xvZ3knO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tcG9uZW50RmFjdG9yeSwgY3JlYXRlVGFyZ2V0Tm9kZSwgbGF5b3V0RmFjdG9yeSwgdHJhbnNmb3JtRGF0YSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoRXhwcmVzc2lvblZpc3VhbGl6ZXJQcm9wcyB7XG4gIGFsZXJ0T3B0aW9ucz86IEFsZXJ0T3B0aW9ucztcbn1cblxuZXhwb3J0IGNvbnN0IE1hdGNoRXhwcmVzc2lvblZpc3VhbGl6ZXI6IFJlYWN0LkZDPE1hdGNoRXhwcmVzc2lvblZpc3VhbGl6ZXJQcm9wcz4gPSAoeyBhbGVydE9wdGlvbnMsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW2lzR3JhcGgsIHNldElzR3JhcGhdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIHJldHVybiAoXG4gICAgPFN0YWNrIHsuLi5wcm9wc30gaGFzR3V0dGVyPlxuICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgPExheW91dFJhZGlvR3JvdXAgb25DaGFuZ2U9e3NldElzR3JhcGh9IC8+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIDxTdGFja0l0ZW0gaXNGaWxsZWQgc3R5bGU9e3sgb3ZlcmZsb3c6ICdhdXRvJyB9fT5cbiAgICAgICAge2lzR3JhcGggPyA8R3JhcGhWaWV3IGFsZXJ0T3B0aW9ucz17YWxlcnRPcHRpb25zfSAvPiA6IDxMaXN0VmlldyBhbGVydE9wdGlvbnM9e2FsZXJ0T3B0aW9uc30gLz59XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuaW50ZXJmYWNlIExheW91dFJhZGlvR3JvdXBQcm9wcyB7XG4gIG9uQ2hhbmdlOiAoaXNHcmFwaDogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgTGF5b3V0UmFkaW9Hcm91cDogUmVhY3QuRkM8TGF5b3V0UmFkaW9Hcm91cFByb3BzPiA9ICh7IG9uQ2hhbmdlLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IFtpc0dyYXBoLCBzZXRJc0dyYXBoXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBjb25maWdzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnR3JhcGggVmlldycsXG4gICAgICAgIGlzR3JhcGg6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0xpc3QgVmlldycsXG4gICAgICAgIGlzR3JhcGg6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtdXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IG9uQ2hhbmdlKGlzR3JhcGgpLCBbaXNHcmFwaCwgb25DaGFuZ2VdKTtcblxuICByZXR1cm4gKFxuICAgIDxGbGV4IHsuLi5wcm9wc30gYWxpZ25JdGVtcz17eyBkZWZhdWx0OiAnYWxpZ25JdGVtc0NlbnRlcicgfX0+XG4gICAgICA8RmxleEl0ZW0gc3BhY2VyPXt7IGRlZmF1bHQ6ICdzcGFjZXJTbScgfX0+XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRXZWlnaHQ6ICc3MDAnIH19PlZpc3VhbGl6ZSB2aWE6PC9zcGFuPlxuICAgICAgPC9GbGV4SXRlbT5cbiAgICAgIHtjb25maWdzLm1hcCgoY29uZikgPT4gKFxuICAgICAgICA8RmxleEl0ZW0ga2V5PXtjb25mLnRpdGxlfT5cbiAgICAgICAgICA8UmFkaW9cbiAgICAgICAgICAgIGlzQ2hlY2tlZD17Y29uZi5pc0dyYXBoID09PSBpc0dyYXBofVxuICAgICAgICAgICAgbmFtZT17Y29uZi50aXRsZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRJc0dyYXBoKGNvbmYuaXNHcmFwaCl9XG4gICAgICAgICAgICBsYWJlbD17Y29uZi50aXRsZX1cbiAgICAgICAgICAgIGlkPXtjb25mLnRpdGxlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICApKX1cbiAgICA8L0ZsZXg+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgTUFUQ0hfRVhQUkVTX1ZJU19HUkFQSF9JRCA9ICdjcnlvc3RhdC1tYXRjaC1leHByZXNzaW9uLXZpc3VhbGl6ZXInO1xuXG5jb25zdCBHcmFwaFZpZXc6IFJlYWN0LkZDPHsgYWxlcnRPcHRpb25zPzogQWxlcnRPcHRpb25zIH0+ID0gKHsgYWxlcnRPcHRpb25zLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuXG4gIGNvbnN0IFtzZWxlY3RlZElkcywgc2V0U2VsZWN0ZWRJZHNdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nW10+KFtdKTsgLy8gc2VsZWN0ZWRJZHMgaXMgZXhhY3RseSBtYXRjaGVkIGJ5IFZpc3VhbGl6YXRpb25TdXJmYWNlXG4gIGNvbnN0IFtzZWxlY3RlZEVudGl0eSwgc2V0U2VsZWN0ZWRFbnRpdHldID0gUmVhY3QudXNlU3RhdGU8R3JhcGhFbGVtZW50PigpO1xuICBjb25zdCBbdGFyZ2V0cywgc2V0VGFyZ2V0c10gPSBSZWFjdC51c2VTdGF0ZTxUYXJnZXRbXT4oW10pO1xuXG4gIGNvbnN0IF9jcmVhdGVWaXN1YWxpemF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IF9uZXdWaXN1YWxpemF0aW9uID0gbmV3IFZpc3VhbGl6YXRpb24oKTtcblxuICAgIC8vIFJlZ2lzdGVyIGZhY3RvcnkgZm9yIGEgbGF5b3V0IHZhcmlhbnRcbiAgICBfbmV3VmlzdWFsaXphdGlvbi5yZWdpc3RlckxheW91dEZhY3RvcnkobGF5b3V0RmFjdG9yeSk7XG5cbiAgICAvLyBSZWdpc3RlciBmYWN0b3J5IGZvciBlYWNoIG5vZGUgdmFyaWFudFxuICAgIF9uZXdWaXN1YWxpemF0aW9uLnJlZ2lzdGVyQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRGYWN0b3J5KTtcblxuICAgIC8vIFNlbGVjdGlvbiBldmVudFxuICAgIF9uZXdWaXN1YWxpemF0aW9uLmFkZEV2ZW50TGlzdGVuZXI8U2VsZWN0aW9uRXZlbnRMaXN0ZW5lcj4oU0VMRUNUSU9OX0VWRU5ULCAoaWRzKSA9PiB7XG4gICAgICBzZXRTZWxlY3RlZElkcyhpZHMpO1xuICAgICAgc2V0U2VsZWN0ZWRFbnRpdHkoaWRzWzBdID8gX25ld1Zpc3VhbGl6YXRpb24uZ2V0RWxlbWVudEJ5SWQoaWRzWzBdKSA6IHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBfbmV3VmlzdWFsaXphdGlvbi5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgR1JBUEhfUE9TSVRJT05fQ0hBTkdFX0VWRU5ULFxuICAgICAgXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3JhcGggfSA9IF9uZXdWaXN1YWxpemF0aW9uLnRvTW9kZWwoKTtcbiAgICAgICAgaWYgKGdyYXBoKSB7XG4gICAgICAgICAgY29uc3Qgc2F2ZWQ6IFNhdmVkR3JhcGhQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIGlkOiBncmFwaC5pZCxcbiAgICAgICAgICAgIHR5cGU6IGdyYXBoLnR5cGUsXG4gICAgICAgICAgICB4OiBncmFwaC54LFxuICAgICAgICAgICAgeTogZ3JhcGgueSxcbiAgICAgICAgICAgIHNjYWxlOiBncmFwaC5zY2FsZSxcbiAgICAgICAgICAgIHNjYWxlRXh0ZW50OiBncmFwaC5zY2FsZUV4dGVudCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnTUFUQ0hfRVhQUkVTX1ZJU19HUkFQSF9QT1NJVElPTlMnLCBzYXZlZCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDIwMClcbiAgICApO1xuXG4gICAgX25ld1Zpc3VhbGl6YXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIE5PREVfUE9TSVRJT05FRF9FVkVOVCxcbiAgICAgIF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSBfbmV3VmlzdWFsaXphdGlvbi50b01vZGVsKCk7XG4gICAgICAgIGlmIChub2Rlcykge1xuICAgICAgICAgIGNvbnN0IHNhdmVkUG9zOiBTYXZlZE5vZGVQb3NpdGlvbltdID0gbm9kZXMubWFwKChuKSA9PiAoe1xuICAgICAgICAgICAgaWQ6IG4uaWQsXG4gICAgICAgICAgICB4OiBuLngsXG4gICAgICAgICAgICB5OiBuLnksXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IG4uY29sbGFwc2VkLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBzYXZlVG9Mb2NhbFN0b3JhZ2UoJ01BVENIX0VYUFJFU19WSVNfTk9ERV9QT1NJVElPTlMnLCBzYXZlZFBvcyk7XG4gICAgICAgIH1cbiAgICAgIH0sIDIwMClcbiAgICApO1xuXG4gICAgcmV0dXJuIF9uZXdWaXN1YWxpemF0aW9uO1xuICB9LCBbc2V0U2VsZWN0ZWRJZHMsIHNldFNlbGVjdGVkRW50aXR5XSk7XG5cbiAgY29uc3QgdmlzdWFsaXphdGlvblJlZiA9IFJlYWN0LnVzZVJlZihfY3JlYXRlVmlzdWFsaXphdGlvbigpKTtcbiAgY29uc3QgdmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb25SZWYuY3VycmVudDtcblxuICBjb25zdCB0YXJnZXROb2RlcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gdGFyZ2V0cy5tYXAoY3JlYXRlVGFyZ2V0Tm9kZSksIFt0YXJnZXRzXSk7XG4gIGNvbnN0IF90cmFuc2Zvcm1lZERhdGEgPSBSZWFjdC51c2VNZW1vKCgpID0+IHRyYW5zZm9ybURhdGEodGFyZ2V0Tm9kZXMpLCBbdGFyZ2V0Tm9kZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250ZXh0LnRhcmdldHMudGFyZ2V0cygpLnN1YnNjcmliZShzZXRUYXJnZXRzKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0cywgc2V0VGFyZ2V0c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ3JhcGhEYXRhOiBTYXZlZEdyYXBoUG9zaXRpb24gPSBnZXRGcm9tTG9jYWxTdG9yYWdlKCdNQVRDSF9FWFBSRVNfVklTX0dSQVBIX1BPU0lUSU9OUycsIHt9KTtcbiAgICBjb25zdCBub2RlUG9zaXRpb25zOiBTYXZlZE5vZGVQb3NpdGlvbltdID0gZ2V0RnJvbUxvY2FsU3RvcmFnZSgnTUFUQ0hfRVhQUkVTX1ZJU19OT0RFX1BPU0lUSU9OUycsIFtdKTtcblxuICAgIGNvbnN0IG1vZGVsOiBNb2RlbCA9IHtcbiAgICAgIG5vZGVzOiBfdHJhbnNmb3JtZWREYXRhLm5vZGVzLm1hcCgobikgPT4ge1xuICAgICAgICBjb25zdCBzYXZlZERhdGEgPSBub2RlUG9zaXRpb25zLmZpbmQoKHBzKSA9PiBwcy5pZCA9PT0gbi5pZCk7XG4gICAgICAgIGlmIChzYXZlZERhdGEpIHtcbiAgICAgICAgICBuID0ge1xuICAgICAgICAgICAgLi4ubixcbiAgICAgICAgICAgIHg6IHNhdmVkRGF0YS54LFxuICAgICAgICAgICAgeTogc2F2ZWREYXRhLnksXG4gICAgICAgICAgICBjb2xsYXBzZWQ6IHNhdmVkRGF0YS5jb2xsYXBzZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0pLFxuICAgICAgZWRnZXM6IF90cmFuc2Zvcm1lZERhdGEuZWRnZXMsXG4gICAgICBncmFwaDoge1xuICAgICAgICBpZDogTUFUQ0hfRVhQUkVTX1ZJU19HUkFQSF9JRCxcbiAgICAgICAgdHlwZTogJ2dyYXBoJyxcbiAgICAgICAgbGF5b3V0OiAnR3JpZCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBpZDogaGFzaENvZGUodGFyZ2V0Tm9kZXMudG9TdHJpbmcoKSksXG4gICAgICAgICAgbmFtZTogJ1VuaXZlcnNlJyxcbiAgICAgICAgICBub2RlVHlwZTogTm9kZVR5cGUuVU5JVkVSU0UsXG4gICAgICAgICAgbGFiZWxzOiB7fSxcbiAgICAgICAgICBjaGlsZHJlbjogdGFyZ2V0Tm9kZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHg6IGdyYXBoRGF0YS54LFxuICAgICAgICB5OiBncmFwaERhdGEueSxcbiAgICAgICAgc2NhbGU6IGdyYXBoRGF0YS5zY2FsZSxcbiAgICAgICAgc2NhbGVFeHRlbnQ6IGdyYXBoRGF0YS5zY2FsZUV4dGVudCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRyb2xsZXIgd2l0aCBtb2RlbCB0byBjcmVhdGUgbm9kZXNcbiAgICB2aXN1YWxpemF0aW9uLmZyb21Nb2RlbChtb2RlbCwgZmFsc2UpO1xuXG4gICAgY29uc3QgX2lkID0gc2V0VGltZW91dChcbiAgICAgIGFjdGlvbigoKSA9PiB7XG4gICAgICAgIGlmICghZ3JhcGhEYXRhLmlkIHx8ICFncmFwaERhdGEueCB8fCAhZ3JhcGhEYXRhLnkpIHtcbiAgICAgICAgICB2aXN1YWxpemF0aW9uLmdldEdyYXBoKCkuZml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KF9pZCk7XG4gIH0sIFtfdHJhbnNmb3JtZWREYXRhLCB0YXJnZXROb2RlcywgdmlzdWFsaXphdGlvbl0pO1xuXG4gIC8vIE5vdGU6IERvIG5vdCByZW9yZGVyLiBNdXN0IGJlIGNhbGxlZCBhZnRlciByZWdpc3RlcmluZyBtb2RlbFxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIENsZWFyIHNlbGVjdGlvbiB3aGVuIGRpc2NvdmVyeSB0cmVlIGlzIHVwZGF0ZWQgYW5kIGVudGl0eSAodGFyZ2V0KSBpcyBsb3N0XG4gICAgc2V0U2VsZWN0ZWRJZHMoKG9sZCkgPT4ge1xuICAgICAgaWYgKCFnZXROb2RlQnlJZChfdHJhbnNmb3JtZWREYXRhLm5vZGVzLCBvbGRbMF0pKSB7XG4gICAgICAgIHNldFNlbGVjdGVkRW50aXR5KHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkRW50aXR5KG9sZFswXSA/IHZpc3VhbGl6YXRpb24uZ2V0RWxlbWVudEJ5SWQob2xkWzBdKSA6IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gb2xkO1xuICAgIH0pO1xuICB9LCBbc2V0U2VsZWN0ZWRJZHMsIHNldFNlbGVjdGVkRW50aXR5LCBfdHJhbnNmb3JtZWREYXRhLCB2aXN1YWxpemF0aW9uXSk7XG5cbiAgY29uc3QgaGFuZGxlRHJhd2VyQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRTZWxlY3RlZElkcyhbXSksIFtzZXRTZWxlY3RlZElkc10pO1xuXG4gIGNvbnN0IHNpZGViYXIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkRW50aXR5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb3BvbG9neVNpZGVCYXIgb25DbG9zZT17aGFuZGxlRHJhd2VyQ2xvc2V9PlxuICAgICAgICA8RW50aXR5RGV0YWlscyBlbnRpdHk9e3NlbGVjdGVkRW50aXR5fSBhbGVydE9wdGlvbnM9e2FsZXJ0T3B0aW9uc30gLz5cbiAgICAgIDwvVG9wb2xvZ3lTaWRlQmFyPlxuICAgICk7XG4gIH0sIFtoYW5kbGVEcmF3ZXJDbG9zZSwgc2VsZWN0ZWRFbnRpdHksIGFsZXJ0T3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFRvcG9sb2d5Vmlld1xuICAgICAgey4uLnByb3BzfVxuICAgICAgaWQ9XCJtYXRjaC1leHByZXNzaW9uX192aXN1YWxpemF0aW9uLWNvbnRhaW5lclwiXG4gICAgICBjbGFzc05hbWU9e2NzcygndG9wb2xvZ3lfX21haW4tY29udGFpbmVyJyl9XG4gICAgICBjb250cm9sQmFyPXs8VG9wb2xvZ3lDb250cm9sQmFyIHZpc3VhbGl6YXRpb249e3Zpc3VhbGl6YXRpb259IG5vQ29sbGFwc2UgLz59XG4gICAgICBzaWRlQmFyPXtzaWRlYmFyfVxuICAgICAgc2lkZUJhck9wZW49e3NlbGVjdGVkSWRzLmxlbmd0aCA+IDB9XG4gICAgICBzaWRlQmFyUmVzaXphYmxlPXt0cnVlfVxuICAgICAgbWluU2lkZUJhclNpemU9e2AyMDBweGB9XG4gICAgICBkZWZhdWx0U2lkZUJhclNpemU9e2A0MjVweGB9XG4gICAgPlxuICAgICAgPFZpc3VhbGl6YXRpb25Qcm92aWRlciBjb250cm9sbGVyPXt2aXN1YWxpemF0aW9ufT5cbiAgICAgICAgPFZpc3VhbGl6YXRpb25TdXJmYWNlIHN0YXRlPXt7IHNlbGVjdGVkSWRzIH19IC8+XG4gICAgICA8L1Zpc3VhbGl6YXRpb25Qcm92aWRlcj5cbiAgICA8L1RvcG9sb2d5Vmlldz5cbiAgKTtcbn07XG5cbmNvbnN0IExpc3RWaWV3OiBSZWFjdC5GQzx7IGFsZXJ0T3B0aW9ucz86IEFsZXJ0T3B0aW9ucyB9PiA9ICh7IGFsZXJ0T3B0aW9ucywgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW21hdGNoRXhwcmVzc2lvbl0gPSB1c2VTZWFyY2hFeHByZXNzaW9uKCk7XG4gIGNvbnN0IFt0YXJnZXRzLCBzZXRUYXJnZXRzXSA9IFJlYWN0LnVzZVN0YXRlPFRhcmdldFtdPihbXSk7XG5cbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0cy50YXJnZXRzKCkuc3Vic2NyaWJlKHNldFRhcmdldHMpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC50YXJnZXRzLCBzZXRUYXJnZXRzXSk7XG5cbiAgY29uc3QgdG9nZ2xlRXhwYW5kID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldEV4cGFuZGVkKChvbGQpID0+IHtcbiAgICAgICAgaWYgKG9sZC5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkLmZpbHRlcigoX2lkKSA9PiBfaWQgIT09IGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLm9sZCwgaWRdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0RXhwYW5kZWRdXG4gICk7XG5cbiAgY29uc3QgdGFyZ2V0Tm9kZXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHRhcmdldHMubWFwKGNyZWF0ZVRhcmdldE5vZGUpLCBbdGFyZ2V0c10pO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdGFyZ2V0Tm9kZXMuZmlsdGVyKCh7IHRhcmdldCB9KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gZXZhbHVhdGVUYXJnZXRXaXRoRXhwcih0YXJnZXQsIG1hdGNoRXhwcmVzc2lvbik7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIFt0YXJnZXROb2RlcywgbWF0Y2hFeHByZXNzaW9uXVxuICApO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWZpbHRlcmVkIHx8ICFmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZSB2YXJpYW50PXtFbXB0eVN0YXRlVmFyaWFudC5mdWxsfT5cbiAgICAgICAgICAgIDxFbXB0eVN0YXRlSWNvbiB2YXJpYW50PVwiY29udGFpbmVyXCIgY29tcG9uZW50PXtTZWFyY2hJY29ufSAvPlxuICAgICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImgzXCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgICAgIE5vIFRhcmdldHMgTWF0Y2hlZFxuICAgICAgICAgICAgPC9UaXRsZT5cbiAgICAgICAgICAgIDxFbXB0eVN0YXRlU2Vjb25kYXJ5QWN0aW9ucz5cbiAgICAgICAgICAgICAgPEVtcHR5U3RhdGVCb2R5PntgJHtcbiAgICAgICAgICAgICAgICBtYXRjaEV4cHJlc3Npb24gPT09ICcnID8gJ0VudGVyIGFub3RoZXInIDogJ0NsZWFyJ1xuICAgICAgICAgICAgICB9IE1hdGNoIEV4cHJlc3Npb24gYW5kIHRyeSBhZ2Fpbi5gfTwvRW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgICA8L0VtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoKHRuKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbm5lY3RVcmwsIGFsaWFzIH0gPSB0bi50YXJnZXQ7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGF0YUxpc3RJdGVtIHsuLi5wcm9wc30ga2V5PXtjb25uZWN0VXJsfSBpc0V4cGFuZGVkPXtleHBhbmRlZC5pbmNsdWRlcyhjb25uZWN0VXJsKX0+XG4gICAgICAgICAgPERhdGFMaXN0SXRlbVJvdz5cbiAgICAgICAgICAgIDxEYXRhTGlzdFRvZ2dsZVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVFeHBhbmQoY29ubmVjdFVybCl9XG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e2V4cGFuZGVkLmluY2x1ZGVzKGNvbm5lY3RVcmwpfVxuICAgICAgICAgICAgICBpZD17YCR7Y29ubmVjdFVybH0tZXhwYW5kLXRvZ2dsZWB9XG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e2Ake2Nvbm5lY3RVcmx9LWV4cGFuZGB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPERhdGFMaXN0SXRlbUNlbGxzXG4gICAgICAgICAgICAgIGRhdGFMaXN0Q2VsbHM9e1tcbiAgICAgICAgICAgICAgICA8RGF0YUxpc3RDZWxsIGlzSWNvbiBrZXk9XCJpY29uXCI+XG4gICAgICAgICAgICAgICAgICA8Q29udGFpbmVyTm9kZUljb24gLz5cbiAgICAgICAgICAgICAgICA8L0RhdGFMaXN0Q2VsbD4sXG4gICAgICAgICAgICAgICAgPERhdGFMaXN0Q2VsbCBrZXk9e2Ake2Nvbm5lY3RVcmx9LWlkZW50aWZpZXJgfT5cbiAgICAgICAgICAgICAgICAgIHshYWxpYXMgfHwgYWxpYXMgPT09IGNvbm5lY3RVcmwgPyBgJHtjb25uZWN0VXJsfWAgOiBgJHthbGlhc30gKCR7Y29ubmVjdFVybH0pYH1cbiAgICAgICAgICAgICAgICA8L0RhdGFMaXN0Q2VsbD4sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRGF0YUxpc3RJdGVtUm93PlxuICAgICAgICAgIHtleHBhbmRlZC5pbmNsdWRlcyhjb25uZWN0VXJsKSA/IChcbiAgICAgICAgICAgIDxEYXRhTGlzdENvbnRlbnRcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7Y29ubmVjdFVybH0gRGV0YWlsc2B9XG4gICAgICAgICAgICAgIGlkPXtgJHtjb25uZWN0VXJsfS1leHBhbmRgfVxuICAgICAgICAgICAgICBpc0hpZGRlbj17IWV4cGFuZGVkLmluY2x1ZGVzKGNvbm5lY3RVcmwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RW50aXR5RGV0YWlsc1xuICAgICAgICAgICAgICAgIGVudGl0eT17eyBnZXREYXRhOiAoKSA9PiB0biB9fVxuICAgICAgICAgICAgICAgIGNvbHVtbk1vZGlmaWVyPXt7IGRlZmF1bHQ6ICczQ29sJyB9fVxuICAgICAgICAgICAgICAgIGFsZXJ0T3B0aW9ucz17YWxlcnRPcHRpb25zfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRvcG9sb2d5X19saXN0LXZpZXdfX2VudGl0eS1kZXRhaWxzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRGF0YUxpc3RDb250ZW50PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0RhdGFMaXN0SXRlbT5cbiAgICAgICk7XG4gICAgfSk7XG4gIH0sIFtmaWx0ZXJlZCwgZXhwYW5kZWQsIG1hdGNoRXhwcmVzc2lvbiwgdG9nZ2xlRXhwYW5kLCBwcm9wcywgYWxlcnRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGF0YUxpc3QgYXJpYS1sYWJlbD17J1RhcmdldCBMaXN0J30gc3R5bGU9e3sgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICB7Y29udGVudH1cbiAgICA8L0RhdGFMaXN0PlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgQXV0aENyZWRlbnRpYWwgfSBmcm9tICdAYXBwL0FwcExheW91dC9DcmVkZW50aWFsQXV0aEZvcm0nO1xuaW1wb3J0IHsgU3RyZWFtT2YgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBDcmVkZW50aWFsQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobmV3IFN0cmVhbU9mPEF1dGhDcmVkZW50aWFsPih7IHVzZXJuYW1lOiAnJywgcGFzc3dvcmQ6ICcnIH0pKTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UmVxdWVzdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRhcmdldFVybDogc3RyaW5nO1xuICBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8gRWFjaCB0ZXN0IHJlcXVlc3QgcmVnaXN0ZXJzIGl0c2VsZiB0byB0ZXN0IHBvb2wgd2hlbiBpbml0aWF0ZWQuIFdoZW4gY29tcGxldGVkLCByZW1vdmUgaXRzZWxmIGZyb20gcG9vbC5cbi8vIEF1dGggZm9ybSB3aWxsIHBvbGwgdGhpcyBwb29sIGZvciBhIHNldCB0aW1lIHRvIGRldGVybWluZSBpZiBmb3JtIHNob3VsZCBpcyBkaXNhYmxlZC5cbmV4cG9ydCBjb25zdCBUZXN0UG9vbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG5ldyBTZXQ8VGVzdFJlcXVlc3Q+KCkpO1xuXG5leHBvcnQgY29uc3QgdXNlQXV0aENyZWRlbnRpYWwgPSAoXG4gIGlnbm9yZUVtaXQ/OiBib29sZWFuLFxuICBkZWJvdW5jZU1zID0gNTBcbik6IFtBdXRoQ3JlZGVudGlhbCwgKGNyZWRlbnRpYWw6IEF1dGhDcmVkZW50aWFsKSA9PiB2b2lkXSA9PiB7XG4gIGNvbnN0IFtjcmVkZW50aWFsJCwgc2V0Q3JlZGVudGlhbCRdID0gUmVhY3QudXNlU3RhdGU8QXV0aENyZWRlbnRpYWw+KHsgdXNlcm5hbWU6ICcnLCBwYXNzd29yZDogJycgfSk7XG4gIGNvbnN0IGF1dGhDcmVkZW50aWFsQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoQ3JlZGVudGlhbENvbnRleHQpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmICghaWdub3JlRW1pdCkge1xuICAgICAgc3ViID0gYXV0aENyZWRlbnRpYWxDb250ZXh0LmdldCgpLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKS5zdWJzY3JpYmUoc2V0Q3JlZGVudGlhbCQpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gc3ViICYmIHN1Yi51bnN1YnNjcmliZSgpO1xuICB9LCBbc2V0Q3JlZGVudGlhbCQsIGF1dGhDcmVkZW50aWFsQ29udGV4dCwgZGVib3VuY2VNcywgaWdub3JlRW1pdF0pO1xuXG4gIGNvbnN0IHNldENyZWRlbnRpYWwgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY3JlZGVudGlhbDogQXV0aENyZWRlbnRpYWwpID0+IHtcbiAgICAgIGF1dGhDcmVkZW50aWFsQ29udGV4dC5zZXQoY3JlZGVudGlhbCk7XG4gICAgfSxcbiAgICBbYXV0aENyZWRlbnRpYWxDb250ZXh0XVxuICApO1xuXG4gIHJldHVybiBbY3JlZGVudGlhbCQsIHNldENyZWRlbnRpYWxdO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTGluZWFyRG90U3Bpbm5lciB9IGZyb20gJ0BhcHAvU2hhcmVkL0xpbmVhckRvdFNwaW5uZXInO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTZWFyY2hFeHByZXNzaW9uIH0gZnJvbSAnQGFwcC9Ub3BvbG9neS9TaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgdXNlU29ydCB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU29ydCc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uLCBldmFsdWF0ZVRhcmdldFdpdGhFeHByLCBwb3J0YWxSb290LCBzb3J0UmVzb3VyY2VzIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdWxsc2V5ZSxcbiAgQnV0dG9uLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlQm9keSxcbiAgRW1wdHlTdGF0ZUljb24sXG4gIEVtcHR5U3RhdGVWYXJpYW50LFxuICBMYWJlbCxcbiAgTGFiZWxQcm9wcyxcbiAgUG9wb3ZlcixcbiAgU2VhcmNoSW5wdXQsXG4gIFNlbGVjdCxcbiAgU2VsZWN0T3B0aW9uLFxuICBTZWxlY3RWYXJpYW50LFxuICBUaXRsZSxcbiAgVG9vbGJhcixcbiAgVG9vbGJhckNvbnRlbnQsXG4gIFRvb2xiYXJHcm91cCxcbiAgVG9vbGJhckl0ZW0sXG4gIFRvb2x0aXAsXG4gIFZhbGlkYXRlZE9wdGlvbnMsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRXhjbGFtYXRpb25DaXJjbGVJY29uLCBTZWFyY2hJY29uLCBXYXJuaW5nVHJpYW5nbGVJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgSW5uZXJTY3JvbGxDb250YWluZXIsXG4gIE91dGVyU2Nyb2xsQ29udGFpbmVyLFxuICBTb3J0QnlEaXJlY3Rpb24sXG4gIFRhYmxlQ29tcG9zYWJsZSxcbiAgVGJvZHksXG4gIFRkLFxuICBUaCxcbiAgVGhlYWQsXG4gIFRyLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUZXN0UG9vbENvbnRleHQsIHVzZUF1dGhDcmVkZW50aWFsIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtcbiAge1xuICAgIHRpdGxlOiAnVGFyZ2V0JyxcbiAgICBrZXlQYXRoczogWydhbGlhcyddLFxuICAgIHRyYW5zZm9ybTogKF9hbGlhczogc3RyaW5nLCB0YXJnZXQ6IFRhcmdldCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldC5hbGlhcyA9PT0gdGFyZ2V0LmNvbm5lY3RVcmwgfHwgIXRhcmdldC5hbGlhc1xuICAgICAgICA/IGAke3RhcmdldC5jb25uZWN0VXJsfWBcbiAgICAgICAgOiBgJHt0YXJnZXQuYWxpYXN9ICgke3RhcmdldC5jb25uZWN0VXJsfSlgO1xuICAgIH0sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1N0YXR1cycsXG4gIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxUZXN0VGFibGVQcm9wcyB7fVxuXG5leHBvcnQgY29uc3QgQ3JlZGVudGlhbFRlc3RUYWJsZTogUmVhY3QuRkM8Q3JlZGVudGlhbFRlc3RUYWJsZVByb3BzPiA9ICh7IC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFttYXRjaEV4cHJlc3Npb25dID0gdXNlU2VhcmNoRXhwcmVzc2lvbigpO1xuICBjb25zdCBbc29ydEJ5LCBnZXRTb3J0UGFyYW1zXSA9IHVzZVNvcnQoKTtcblxuICBjb25zdCBbdGFyZ2V0cywgc2V0VGFyZ2V0c10gPSBSZWFjdC51c2VTdGF0ZTxUYXJnZXRbXT4oW10pO1xuICBjb25zdCBbZmlsdGVycywgc2V0RmlsdGVyc10gPSBSZWFjdC51c2VTdGF0ZTxDcmVkZW50aWFsVGVzdFN0YXRlW10+KFtdKTtcbiAgY29uc3QgW3NlYXJjaFRleHQsIHNldFNlYXJjaFRleHRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0cy50YXJnZXRzKCkuc3Vic2NyaWJlKHNldFRhcmdldHMpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC50YXJnZXRzLCBzZXRUYXJnZXRzXSk7XG5cbiAgY29uc3QgbWF0Y2hlZFRhcmdldHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRhcmdldHMuZmlsdGVyKCh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGV2YWx1YXRlVGFyZ2V0V2l0aEV4cHIodCwgbWF0Y2hFeHByZXNzaW9uKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hdGNoIGV4cHJlc3Npb24nKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSwgW3RhcmdldHMsIG1hdGNoRXhwcmVzc2lvbl0pO1xuXG4gIGNvbnN0IHJvd3MgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBzb3J0UmVzb3VyY2VzKFxuICAgICAgICB7XG4gICAgICAgICAgaW5kZXg6IHNvcnRCeS5pbmRleCA/PyAwLFxuICAgICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgICB9LFxuICAgICAgICBtYXRjaGVkVGFyZ2V0cyxcbiAgICAgICAgdGFibGVDb2x1bW5zXG4gICAgICApLm1hcCgodCkgPT4gPENyZWRlbnRpYWxUZXN0Um93IHRhcmdldD17dH0ga2V5PXt0LmNvbm5lY3RVcmx9IGZpbHRlcnM9e2ZpbHRlcnN9IHNlYXJjaFRleHQ9e3NlYXJjaFRleHR9IC8+KSxcbiAgICBbbWF0Y2hlZFRhcmdldHMsIGZpbHRlcnMsIHNlYXJjaFRleHQsIHNvcnRCeV1cbiAgKTtcblxuICBjb25zdCB0b29sYmFyID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8Q3JlZGVudGlhbFRvb2xiYXJcbiAgICAgICAgb25GaWx0ZXI9e3NldEZpbHRlcnN9XG4gICAgICAgIG9uU2VhcmNoPXtzZXRTZWFyY2hUZXh0fVxuICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICBzZWFyY2hUZXh0PXtzZWFyY2hUZXh0fVxuICAgICAgICBtYXRjaGVkVGFyZ2V0cz17bWF0Y2hlZFRhcmdldHN9XG4gICAgICAvPlxuICAgICksXG4gICAgW3NldEZpbHRlcnMsIHNldFNlYXJjaFRleHQsIGZpbHRlcnMsIHNlYXJjaFRleHQsIG1hdGNoZWRUYXJnZXRzXVxuICApO1xuXG4gIHJldHVybiByb3dzLmxlbmd0aCA/IChcbiAgICA8T3V0ZXJTY3JvbGxDb250YWluZXI+XG4gICAgICB7dG9vbGJhcn1cbiAgICAgIDxJbm5lclNjcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPFRhYmxlQ29tcG9zYWJsZSB7Li4ucHJvcHN9PlxuICAgICAgICAgIDxUaGVhZD5cbiAgICAgICAgICAgIDxUcj5cbiAgICAgICAgICAgICAgPFRoIHNvcnQ9e2dldFNvcnRQYXJhbXMoMCl9PlRhcmdldDwvVGg+XG4gICAgICAgICAgICAgIDxUaCB0ZXh0Q2VudGVyIHdpZHRoPXsyMH0+XG4gICAgICAgICAgICAgICAgU3RhdHVzXG4gICAgICAgICAgICAgIDwvVGg+XG4gICAgICAgICAgICA8L1RyPlxuICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAgPFRib2R5Pntyb3dzfTwvVGJvZHk+XG4gICAgICAgIDwvVGFibGVDb21wb3NhYmxlPlxuICAgICAgPC9Jbm5lclNjcm9sbENvbnRhaW5lcj5cbiAgICA8L091dGVyU2Nyb2xsQ29udGFpbmVyPlxuICApIDogKFxuICAgIDxCdWxsc2V5ZT5cbiAgICAgIDxFbXB0eVN0YXRlIHZhcmlhbnQ9e0VtcHR5U3RhdGVWYXJpYW50LmZ1bGx9PlxuICAgICAgICA8RW1wdHlTdGF0ZUljb24gdmFyaWFudD1cImNvbnRhaW5lclwiIGNvbXBvbmVudD17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImgzXCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgTm8gVGFyZ2V0cyBNYXRjaGVkXG4gICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDxFbXB0eVN0YXRlQm9keT57YCR7XG4gICAgICAgICAgbWF0Y2hFeHByZXNzaW9uID09PSAnJyA/ICdFbnRlciBhbm90aGVyJyA6ICdDbGVhcidcbiAgICAgICAgfSBNYXRjaCBFeHByZXNzaW9uIGFuZCB0cnkgYWdhaW4uYH08L0VtcHR5U3RhdGVCb2R5PlxuICAgICAgPC9FbXB0eVN0YXRlPlxuICAgIDwvQnVsbHNleWU+XG4gICk7XG59O1xuXG5leHBvcnQgZW51bSBDcmVkZW50aWFsVGVzdFN0YXRlIHtcbiAgTk9fU1RBVFVTID0gJ05vIFN0YXR1cycsXG4gIElOVkFMSUQgPSAnSW52YWxpZCcsXG4gIFZBTElEID0gJ1ZhbGlkJyxcbiAgTkEgPSAnTm90IEFwcGxpY2FibGUnLFxufVxuXG5jb25zdCBnZXRDb2xvciA9IChzdGF0ZTogQ3JlZGVudGlhbFRlc3RTdGF0ZSk6IExhYmVsUHJvcHNbJ2NvbG9yJ10gPT4ge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBDcmVkZW50aWFsVGVzdFN0YXRlLlZBTElEOlxuICAgICAgcmV0dXJuICdncmVlbic7XG4gICAgY2FzZSBDcmVkZW50aWFsVGVzdFN0YXRlLklOVkFMSUQ6XG4gICAgICByZXR1cm4gJ3JlZCc7XG4gICAgY2FzZSBDcmVkZW50aWFsVGVzdFN0YXRlLk5BOlxuICAgICAgcmV0dXJuICdvcmFuZ2UnO1xuICAgIGNhc2UgQ3JlZGVudGlhbFRlc3RTdGF0ZS5OT19TVEFUVVM6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnZ3JleSc7XG4gIH1cbn07XG5cbmludGVyZmFjZSBUZXN0U3RhdHVzIHtcbiAgc3RhdGU6IENyZWRlbnRpYWxUZXN0U3RhdGU7XG4gIGVycm9yPzogRXJyb3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbFRlc3RSb3dQcm9wcyB7XG4gIHRhcmdldDogVGFyZ2V0O1xuICBmaWx0ZXJzPzogQ3JlZGVudGlhbFRlc3RTdGF0ZVtdO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQ3JlZGVudGlhbFRlc3RSb3c6IFJlYWN0LkZDPENyZWRlbnRpYWxUZXN0Um93UHJvcHM+ID0gKHtcbiAgdGFyZ2V0LFxuICBmaWx0ZXJzID0gW10sXG4gIHNlYXJjaFRleHQgPSAnJyxcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IFJlYWN0LnVzZVN0YXRlPFRlc3RTdGF0dXM+KHtcbiAgICBzdGF0ZTogQ3JlZGVudGlhbFRlc3RTdGF0ZS5OT19TVEFUVVMsXG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbY3JlZGVudGlhbF0gPSB1c2VBdXRoQ3JlZGVudGlhbCgpO1xuICBjb25zdCB0ZXN0UG9vbCA9IFJlYWN0LnVzZUNvbnRleHQoVGVzdFBvb2xDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IGlzRW1wdHlDcmVkZW50aWFsID0gUmVhY3QudXNlTWVtbygoKSA9PiBjcmVkZW50aWFsLnBhc3N3b3JkID09PSAnJyB8fCBjcmVkZW50aWFsLnVzZXJuYW1lID09PSAnJywgW2NyZWRlbnRpYWxdKTtcblxuICBjb25zdCBpc1Nob3dlZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hUZXh0LCAnaScpO1xuICAgIGlmIChzZWFyY2hUZXh0ICE9PSAnJyAmJiAhKHJlZ2V4LnRlc3QodGFyZ2V0LmFsaWFzKSB8fCByZWdleC50ZXN0KHRhcmdldC5jb25uZWN0VXJsKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICFmaWx0ZXJzLmxlbmd0aCB8fCBmaWx0ZXJzLmluY2x1ZGVzKHN0YXR1cy5zdGF0ZSk7XG4gIH0sIFt0YXJnZXQsIGZpbHRlcnMsIHNlYXJjaFRleHQsIHN0YXR1cy5zdGF0ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZVRlc3QgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmcgfHwgaXNFbXB0eUNyZWRlbnRpYWwpIHtcbiAgICAgIHJldHVybjsgLy8gRG8gbm90IHJlcGVhdCByZXF1ZXN0IG9yIHNlbmQgd2hlbiBpbnB1dCBmaWVsZHMgYXJlIGVtcHR5XG4gICAgfVxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgY29uc3QgdGVzdCA9IHtcbiAgICAgIGlkOiBgdGVzdC1yZXF1ZXN0LWZvci0ke3RhcmdldC5jb25uZWN0VXJsfWAsXG4gICAgICB0YXJnZXRVcmw6IHRhcmdldC5jb25uZWN0VXJsLFxuICAgIH07XG4gICAgdGVzdFBvb2wuYWRkKHRlc3QpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQuYXBpLmNoZWNrQ3JlZGVudGlhbEZvclRhcmdldCh0YXJnZXQsIGNyZWRlbnRpYWwpLnN1YnNjcmliZSgoZXJyKSA9PiB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICB0ZXN0UG9vbC5kZWxldGUodGVzdCk7XG4gICAgICAgIHNldFN0YXR1cyh7XG4gICAgICAgICAgZXJyb3I6IGVycj8uZXJyb3IsXG4gICAgICAgICAgc3RhdGU6ICFlcnJcbiAgICAgICAgICAgID8gQ3JlZGVudGlhbFRlc3RTdGF0ZS5WQUxJRFxuICAgICAgICAgICAgOiBlcnIuc2V2ZXJlTGV2ZWwgPT09IFZhbGlkYXRlZE9wdGlvbnMud2FybmluZ1xuICAgICAgICAgICAgPyBDcmVkZW50aWFsVGVzdFN0YXRlLk5BXG4gICAgICAgICAgICA6IENyZWRlbnRpYWxUZXN0U3RhdGUuSU5WQUxJRCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZXRTdGF0dXMsIGFkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIHRhcmdldCwgY3JlZGVudGlhbCwgaXNFbXB0eUNyZWRlbnRpYWwsIGxvYWRpbmcsIHRlc3RQb29sXSk7XG5cbiAgcmV0dXJuIGlzU2hvd2VkID8gKFxuICAgIDxUciB7Li4ucHJvcHN9IGlkPXtgJHt0YXJnZXQuY29ubmVjdFVybH0tdGVzdC1yb3dgfT5cbiAgICAgIDxUZCBkYXRhTGFiZWw9XCJUYXJnZXRcIj57IXRhcmdldC5hbGlhcyA/IHRhcmdldC5jb25uZWN0VXJsIDogYCR7dGFyZ2V0LmFsaWFzfSAoJHt0YXJnZXQuY29ubmVjdFVybH0pYH08L1RkPlxuICAgICAgPFRkIGRhdGFMYWJlbD1cIlN0YXR1c1wiIHRleHRDZW50ZXI+XG4gICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgICAgIDxMaW5lYXJEb3RTcGlubmVyIC8+XG4gICAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICAgKSA6IHN0YXR1cy5zdGF0ZSA9PT0gQ3JlZGVudGlhbFRlc3RTdGF0ZS5JTlZBTElEIHx8IHN0YXR1cy5zdGF0ZSA9PT0gQ3JlZGVudGlhbFRlc3RTdGF0ZS5OQSA/IChcbiAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YFRlc3QgUmVzdWx0IERldGFpbHMgKCR7dGFyZ2V0LmNvbm5lY3RVcmx9KWB9XG4gICAgICAgICAgICBhbGVydFNldmVyaXR5VmFyaWFudD17c3RhdHVzLnN0YXRlID09PSBDcmVkZW50aWFsVGVzdFN0YXRlLklOVkFMSUQgPyAnZGFuZ2VyJyA6ICd3YXJuaW5nJ31cbiAgICAgICAgICAgIGhlYWRlckljb249e1xuICAgICAgICAgICAgICBzdGF0dXMuc3RhdGUgPT09IENyZWRlbnRpYWxUZXN0U3RhdGUuSU5WQUxJRCA/IDxFeGNsYW1hdGlvbkNpcmNsZUljb24gLz4gOiA8V2FybmluZ1RyaWFuZ2xlSWNvbiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGVhZGVyQ29udGVudD17PGRpdj57c3RhdHVzLnN0YXRlID09PSBDcmVkZW50aWFsVGVzdFN0YXRlLklOVkFMSUQgPyAnVGVzdCBmYWlsZWQnIDogJ0NhdXRpb24nfTwvZGl2Pn1cbiAgICAgICAgICAgIGJvZHlDb250ZW50PXs8ZGl2PntzdGF0dXMuZXJyb3I/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfTwvZGl2Pn1cbiAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxMYWJlbCBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fSBjb2xvcj17Z2V0Q29sb3Ioc3RhdHVzLnN0YXRlKX0+XG4gICAgICAgICAgICAgIHtzdGF0dXMuc3RhdGV9XG4gICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TGFiZWwgY29sb3I9e2dldENvbG9yKHN0YXR1cy5zdGF0ZSl9PntzdGF0dXMuc3RhdGV9PC9MYWJlbD5cbiAgICAgICAgKX1cbiAgICAgIDwvVGQ+XG4gICAgICA8VGQgdGV4dENlbnRlcj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImNyZWRlbnRpYWxfX3Rlc3QtYnV0dG9uXCJcbiAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nIHx8IGlzRW1wdHlDcmVkZW50aWFsfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRlc3R9XG4gICAgICAgID5cbiAgICAgICAgICBUZXN0XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9UZD5cbiAgICA8L1RyPlxuICApIDogbnVsbDtcbn07XG5cbmludGVyZmFjZSBDcmVkZW50aWFsVG9vbGJhclByb3BzIHtcbiAgbWF0Y2hlZFRhcmdldHM6IFRhcmdldFtdO1xuICBmaWx0ZXJzOiBDcmVkZW50aWFsVGVzdFN0YXRlW107XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgb25GaWx0ZXI/OiAoZmlsdGVyczogQ3JlZGVudGlhbFRlc3RTdGF0ZVtdKSA9PiB2b2lkO1xuICBvblNlYXJjaD86IChzZWFyY2hUZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmNvbnN0IENyZWRlbnRpYWxUb29sYmFyOiBSZWFjdC5GQzxDcmVkZW50aWFsVG9vbGJhclByb3BzPiA9ICh7XG4gIG9uRmlsdGVyLFxuICBvblNlYXJjaCxcbiAgbWF0Y2hlZFRhcmdldHMsXG4gIGZpbHRlcnMsXG4gIHNlYXJjaFRleHQsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IFtjcmVkZW50aWFsXSA9IHVzZUF1dGhDcmVkZW50aWFsKCk7XG4gIGNvbnN0IFtkaXNhYmxlVGVzdCwgc2V0RGlzYWJsZVRlc3RdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZVRlc3RBbGwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NyZWRlbnRpYWxfX3Rlc3QtYnV0dG9uJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBidG4gPSBidXR0b25zW2ldIGFzIEhUTUxFbGVtZW50O1xuICAgICAgYnRuLmNsaWNrKCk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY3JlZGVudGlhbF9fdGVzdC1idXR0b24nKTtcbiAgICBjb25zdCBkaXNhYmxlZCA9XG4gICAgICAhbWF0Y2hlZFRhcmdldHMubGVuZ3RoIHx8XG4gICAgICAoKGZpbHRlcnMubGVuZ3RoIHx8IHNlYXJjaFRleHQpICYmICghYnV0dG9ucyB8fCAhYnV0dG9ucy5sZW5ndGgpKSB8fFxuICAgICAgY3JlZGVudGlhbC51c2VybmFtZSA9PT0gJycgfHxcbiAgICAgIGNyZWRlbnRpYWwucGFzc3dvcmQgPT09ICcnO1xuICAgIHNldERpc2FibGVUZXN0KGRpc2FibGVkKTtcbiAgfSwgW2ZpbHRlcnMsIHNlYXJjaFRleHQsIGNyZWRlbnRpYWwsIHNldERpc2FibGVUZXN0LCBtYXRjaGVkVGFyZ2V0c10pO1xuXG4gIHJldHVybiAoXG4gICAgPFRvb2xiYXIgey4uLnByb3BzfSBpc1N0aWNreSBpZD1cImNyZWRlbnRpYWwtdGVzdC10YWJsZS10b29sYmFyXCIgYXJpYS1sYWJlbD1cImNyZWRlbnRpYWwtdGVzdC10YWJsZS10b29sYmFyXCI+XG4gICAgICA8VG9vbGJhckNvbnRlbnQ+XG4gICAgICAgIDxUb29sYmFySXRlbSB2YXJpYW50PVwic2VhcmNoLWZpbHRlclwiPlxuICAgICAgICAgIDxTZWFyY2hJbnB1dCBhcmlhLWxhYmVsPVwiSXRlbXMgZXhhbXBsZSBzZWFyY2ggaW5wdXRcIiBvbkNoYW5nZT17b25TZWFyY2h9IHZhbHVlPXtzZWFyY2hUZXh0fSAvPlxuICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgICA8U3RhdHVzRmlsdGVyIG9uQ2hhbmdlPXtvbkZpbHRlcn0gZmlsdGVycz17ZmlsdGVyc30gLz5cbiAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICA8VG9vbHRpcCBjb250ZW50PXsnVGVzdCBjcmVkZW50aWFscyBhZ2FpbnN0IGFsbCBtYXRjaGluZyB0YXJnZXRzLid9IGFwcGVuZFRvPXtwb3J0YWxSb290fT5cbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVUZXN0QWxsfSBpc0FyaWFEaXNhYmxlZD17ZGlzYWJsZVRlc3R9PlxuICAgICAgICAgICAgICBUZXN0IEFsbFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICA8L1Rvb2xiYXI+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU3RhdHVzRmlsdGVyUHJvcHMge1xuICBvbkNoYW5nZT86IChmaWx0ZXJzOiBDcmVkZW50aWFsVGVzdFN0YXRlW10pID0+IHZvaWQ7XG4gIGZpbHRlcnM6IENyZWRlbnRpYWxUZXN0U3RhdGVbXTtcbn1cblxuY29uc3QgU3RhdHVzRmlsdGVyOiBSZWFjdC5GQzxTdGF0dXNGaWx0ZXJQcm9wcz4gPSAoeyBvbkNoYW5nZSwgZmlsdGVycywgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRJc09wZW4oKG9sZCkgPT4gIW9sZCksIFtzZXRJc09wZW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXzogUmVhY3QuTW91c2VFdmVudCwgdmFsdWU6IENyZWRlbnRpYWxUZXN0U3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IG9sZCA9IGZpbHRlcnM7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShvbGQuaW5jbHVkZXModmFsdWUpID8gb2xkLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpIDogWy4uLm9sZCwgdmFsdWVdKTtcbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgZmlsdGVyc11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIHZhcmlhbnQ9e1NlbGVjdFZhcmlhbnQuY2hlY2tib3h9XG4gICAgICBhcmlhLWxhYmVsPVwiU3RhdHVzXCJcbiAgICAgIG9uVG9nZ2xlPXtoYW5kbGVUb2dnbGV9XG4gICAgICBvblNlbGVjdD17aGFuZGxlU2VsZWN0fVxuICAgICAgc2VsZWN0aW9ucz17ZmlsdGVyc31cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgcGxhY2Vob2xkZXJUZXh0PVwiU3RhdHVzXCJcbiAgICA+XG4gICAgICB7T2JqZWN0LnZhbHVlcyhDcmVkZW50aWFsVGVzdFN0YXRlKS5tYXAoKHN0YXRlKSA9PiAoXG4gICAgICAgIDxTZWxlY3RPcHRpb24ga2V5PXtzdGF0ZX0gdmFsdWU9e3N0YXRlfT5cbiAgICAgICAgICA8TGFiZWwgY29sb3I9e2dldENvbG9yKHN0YXRlKX0+e3N0YXRlfTwvTGFiZWw+XG4gICAgICAgIDwvU2VsZWN0T3B0aW9uPlxuICAgICAgKSl9XG4gICAgPC9TZWxlY3Q+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBBdXRoQ3JlZGVudGlhbCwgQ3JlZGVudGlhbEF1dGhGb3JtIH0gZnJvbSAnQGFwcC9BcHBMYXlvdXQvQ3JlZGVudGlhbEF1dGhGb3JtJztcbmltcG9ydCB7IE1hdGNoRXhwcmVzc2lvbkhpbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9NYXRjaEV4cHJlc3Npb24vTWF0Y2hFeHByZXNzaW9uSGludCc7XG5pbXBvcnQgeyBNYXRjaEV4cHJlc3Npb25WaXN1YWxpemVyIH0gZnJvbSAnQGFwcC9TaGFyZWQvTWF0Y2hFeHByZXNzaW9uL01hdGNoRXhwcmVzc2lvblZpc3VhbGl6ZXInO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hFeHByU2VydmljZSwgU2VhcmNoRXhwclNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9Ub3BvbG9neS9TaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBldmFsdWF0ZVRhcmdldFdpdGhFeHByLCBwb3J0YWxSb290LCBTdHJlYW1PZiB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDYXJkQm9keSxcbiAgRm9ybUdyb3VwLFxuICBHcmlkLFxuICBHcmlkSXRlbSxcbiAgTW9kYWwsXG4gIE1vZGFsVmFyaWFudCxcbiAgUG9wb3ZlcixcbiAgVGFiLFxuICBUYWJzLFxuICBUYWJUaXRsZUljb24sXG4gIFRhYlRpdGxlVGV4dCxcbiAgVGV4dEFyZWEsXG4gIFZhbGlkYXRlZE9wdGlvbnMsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRmxhc2tJY29uLCBIZWxwSWNvbiwgVG9wb2xvZ3lJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGludGVydmFsLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENyZWRlbnRpYWxUZXN0VGFibGUgfSBmcm9tICcuL0NyZWRlbnRpYWxUZXN0VGFibGUnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbENvbnRleHQsIFRlc3RQb29sQ29udGV4dCwgVGVzdFJlcXVlc3QsIHVzZUF1dGhDcmVkZW50aWFsIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ3JlZGVudGlhbE1vZGFsUHJvcHMge1xuICB2aXNpYmxlOiBib29sZWFuO1xuICBvbkRpc21pc3M6ICgpID0+IHZvaWQ7XG4gIG9uUHJvcHNTYXZlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ3JlYXRlQ3JlZGVudGlhbE1vZGFsOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxDcmVhdGVDcmVkZW50aWFsTW9kYWxQcm9wcz4gPSAoe1xuICB2aXNpYmxlLFxuICBvbkRpc21pc3MsXG4gIG9uUHJvcHNTYXZlLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBtYXRjaEV4cHJlUmVmID0gUmVhY3QudXNlUmVmKG5ldyBTZWFyY2hFeHByU2VydmljZSgpKTtcbiAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZihuZXcgU3RyZWFtT2YoZmFsc2UpKTtcbiAgY29uc3QgY3JlZGVudGlhbFJlZiA9IFJlYWN0LnVzZVJlZihuZXcgU3RyZWFtT2Y8QXV0aENyZWRlbnRpYWw+KHsgdXNlcm5hbWU6ICcnLCBwYXNzd29yZDogJycgfSkpO1xuICBjb25zdCB0ZXN0UG9vbFJlZiA9IFJlYWN0LnVzZVJlZihuZXcgU2V0PFRlc3RSZXF1ZXN0PigpKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFtpblByb2dyZXNzLCBzZXRJblByb2dyZXNzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihsb2FkaW5nUmVmLmN1cnJlbnQuZ2V0KCkuc3Vic2NyaWJlKHNldEluUHJvZ3Jlc3MpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgbG9hZGluZ1JlZiwgc2V0SW5Qcm9ncmVzc10pO1xuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBhcHBlbmRUbz17cG9ydGFsUm9vdH1cbiAgICAgIGlzT3Blbj17dmlzaWJsZX1cbiAgICAgIHRhYkluZGV4PXswfSAvLyBlbmFibGUga2V5Ym9hcmQtYWNjZXNzaWJsZSBzY3JvbGxpbmdcbiAgICAgIHZhcmlhbnQ9e01vZGFsVmFyaWFudC5sYXJnZX1cbiAgICAgIHNob3dDbG9zZT17IWluUHJvZ3Jlc3N9XG4gICAgICBjbGFzc05hbWU9XCJhZGQtY3JlZGVudGlhbC1tb2RhbFwiXG4gICAgICBvbkNsb3NlPXtvbkRpc21pc3N9XG4gICAgICB0aXRsZT1cIlN0b3JlIENyZWRlbnRpYWxzXCJcbiAgICAgIGRlc2NyaXB0aW9uPVwiQ3JlYXRlIHN0b3JlZCBjcmVkZW50aWFscyBmb3IgdGFyZ2V0IEpWTXMuIENyeW9zdGF0IHdpbGwgdXNlIHRoZXNlIGNyZWRlbnRpYWxzIHRvIGNvbm5lY3QgdG8gQ3J5b3N0YXQgYWdlbnRzIG9yIHRhcmdldCBKVk1zIG92ZXIgSk1YIChpZiByZXF1aXJlZCkuXCJcbiAgICA+XG4gICAgICA8U2VhcmNoRXhwclNlcnZpY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXttYXRjaEV4cHJlUmVmLmN1cnJlbnR9PlxuICAgICAgICA8Q3JlZGVudGlhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NyZWRlbnRpYWxSZWYuY3VycmVudH0+XG4gICAgICAgICAgPFRlc3RQb29sQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGVzdFBvb2xSZWYuY3VycmVudH0+XG4gICAgICAgICAgICA8R3JpZCBoYXNHdXR0ZXIgc3R5bGU9e3sgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICAgICAgICAgIDxHcmlkSXRlbSB4bD17NH0+XG4gICAgICAgICAgICAgICAgPENhcmQgaXNGdWxsSGVpZ2h0IGlzRmxhdD5cbiAgICAgICAgICAgICAgICAgIDxDYXJkQm9keSBjbGFzc05hbWU9XCJvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxBdXRoRm9ybVxuICAgICAgICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICBvbkRpc21pc3M9e29uRGlzbWlzc31cbiAgICAgICAgICAgICAgICAgICAgICBvblByb3BzU2F2ZT17b25Qcm9wc1NhdmV9XG4gICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NDaGFuZ2U9e3NldEluUHJvZ3Jlc3N9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICAgICAgPC9HcmlkSXRlbT5cbiAgICAgICAgICAgICAgPEdyaWRJdGVtIHhsPXs4fT5cbiAgICAgICAgICAgICAgICA8Q2FyZCBpc0Z1bGxIZWlnaHQgaXNGbGF0PlxuICAgICAgICAgICAgICAgICAgPENhcmRCb2R5IGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1IZWxwZXIgLz5cbiAgICAgICAgICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICA8L0dyaWRJdGVtPlxuICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgIDwvVGVzdFBvb2xDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L0NyZWRlbnRpYWxDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgPC9TZWFyY2hFeHByU2VydmljZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBBdXRoRm9ybVByb3BzIGV4dGVuZHMgT21pdDxDcmVhdGVDcmVkZW50aWFsTW9kYWxQcm9wcywgJ3Zpc2libGUnPiB7XG4gIHByb2dyZXNzQ2hhbmdlPzogKGluUHJvZ3Jlc3M6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBBdXRoRm9ybTogUmVhY3QuRkM8QXV0aEZvcm1Qcm9wcz4gPSAoeyBvbkRpc21pc3MsIG9uUHJvcHNTYXZlLCBwcm9ncmVzc0NoYW5nZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgbWF0Y2hFeHByU2VydmljZSA9IFJlYWN0LnVzZUNvbnRleHQoU2VhcmNoRXhwclNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW21hdGNoRXhwcmVzc2lvbiwgc2V0TWF0Y2hFeHByZXNzaW9uXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW21hdGNoRXhwcmVzc2lvblZhbGlkLCBzZXRNYXRjaEV4cHJlc3Npb25WYWxpZF0gPSBSZWFjdC51c2VTdGF0ZShWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICBjb25zdCBbXywgc2V0Q3JlZGVudGlhbF0gPSB1c2VBdXRoQ3JlZGVudGlhbCh0cnVlKTtcbiAgY29uc3QgdGVzdFBvb2wgPSBSZWFjdC51c2VDb250ZXh0KFRlc3RQb29sQ29udGV4dCk7XG4gIGNvbnN0IFtzYXZpbmcsIHNldFNhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Rpc2FibGVkLCBzZXRJc0Rpc2FibGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBbdGFyZ2V0cywgc2V0VGFyZ2V0c10gPSBSZWFjdC51c2VTdGF0ZTxUYXJnZXRbXT4oW10pO1xuXG4gIGNvbnN0IG9uU2F2ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTYXZpbmcodHJ1ZSk7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIGNvbnRleHQuYXBpLnBvc3RDcmVkZW50aWFscyhtYXRjaEV4cHJlc3Npb24sIHVzZXJuYW1lLCBwYXNzd29yZCkuc3Vic2NyaWJlKChvaykgPT4ge1xuICAgICAgICAgIHNldFNhdmluZyhmYWxzZSk7XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICBvblByb3BzU2F2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9uLCBvblByb3BzU2F2ZSwgY29udGV4dC5hcGksIG1hdGNoRXhwcmVzc2lvbiwgc2V0U2F2aW5nXVxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0cy50YXJnZXRzKCkuc3Vic2NyaWJlKHNldFRhcmdldHMpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC50YXJnZXRzLCBzZXRUYXJnZXRzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdmFsaWRhdGlvbjogVmFsaWRhdGVkT3B0aW9ucyA9IFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdDtcbiAgICBpZiAobWF0Y2hFeHByZXNzaW9uICE9PSAnJyAmJiB0YXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGF0TGVhc3RPbmUgPSB0YXJnZXRzLnNvbWUoKHQpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBldmFsdWF0ZVRhcmdldFdpdGhFeHByKHQsIG1hdGNoRXhwcmVzc2lvbik7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZXhwcmVzc2lvbiBtYXRjaGluZyBmYWlsZWQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWxpZGF0aW9uID0gYXRMZWFzdE9uZSA/IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyA6IFZhbGlkYXRlZE9wdGlvbnMud2FybmluZztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB2YWxpZGF0aW9uID0gVmFsaWRhdGVkT3B0aW9ucy5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0TWF0Y2hFeHByZXNzaW9uVmFsaWQodmFsaWRhdGlvbik7XG4gIH0sIFttYXRjaEV4cHJlc3Npb24sIHRhcmdldHMsIHNldE1hdGNoRXhwcmVzc2lvblZhbGlkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBwcm9ncmVzc0NoYW5nZSAmJiBwcm9ncmVzc0NoYW5nZShzYXZpbmcpO1xuICB9LCBbc2F2aW5nLCBwcm9ncmVzc0NoYW5nZV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gUG9sbGluZyB0ZXN0IHBvb2xcbiAgICAvLyAxNm1zIGdhcCBvciA2MGZwcyBpcyBzbW9vdGggYnV0IG5vdCB0b28gZmFzdC5cbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBpbnRlcnZhbCgxNilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHRlc3RQb29sLnNpemUgPiAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzZXRJc0Rpc2FibGVkKVxuICAgICk7XG4gIH0sIFt0ZXN0UG9vbCwgc2V0SXNEaXNhYmxlZCwgYWRkU3Vic2NyaXB0aW9uXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q3JlZGVudGlhbEF1dGhGb3JtXG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBvblNhdmU9e29uU2F2ZX1cbiAgICAgIG9uRGlzbWlzcz17b25EaXNtaXNzfVxuICAgICAgZm9jdXM9e2ZhbHNlfVxuICAgICAgbG9hZGluZz17c2F2aW5nfVxuICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ3JlZGVudGlhbENoYW5nZT17c2V0Q3JlZGVudGlhbH1cbiAgICA+XG4gICAgICA8Rm9ybUdyb3VwXG4gICAgICAgIGxhYmVsPVwiTWF0Y2ggRXhwcmVzc2lvblwiXG4gICAgICAgIGxhYmVsSWNvbj17XG4gICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgaGVhZGVyQ29udGVudD1cIk1hdGNoIEV4cHJlc3Npb24gSGludFwiXG4gICAgICAgICAgICBib2R5Q29udGVudD17XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgVHJ5IGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICAgICAgICAgICAgICA8TWF0Y2hFeHByZXNzaW9uSGludCB0YXJnZXQ9e3RhcmdldHNbMF19IC8+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzQXV0b1dpZHRoXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9yZSBpbmZvIGZvciBtYXRjaCBleHByZXNzaW9uIGZpZWxkXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicGYtYy1mb3JtX19ncm91cC1sYWJlbC1oZWxwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEhlbHBJY29uIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgIH1cbiAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICBmaWVsZElkPVwibWF0Y2gtZXhwcmVzc2lvblwiXG4gICAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICAgIG1hdGNoRXhwcmVzc2lvblZhbGlkID09PSBWYWxpZGF0ZWRPcHRpb25zLndhcm5pbmdcbiAgICAgICAgICAgID8gYFdhcm5pbmc6IE1hdGNoIGV4cHJlc3Npb24gbWF0Y2hlcyBubyB0YXJnZXRzLmBcbiAgICAgICAgICAgIDogYFxuICAgICAgICBFbnRlciBhIG1hdGNoIGV4cHJlc3Npb24uIFRoaXMgaXMgYSBKYXZhLWxpa2UgY29kZSBzbmlwcGV0IHRoYXQgaXMgZXZhbHVhdGVkIGFnYWluc3QgZWFjaCB0YXJnZXRcbiAgICAgICAgYXBwbGljYXRpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHJ1bGUgc2hvdWxkIGJlIGFwcGxpZWQuYFxuICAgICAgICB9XG4gICAgICAgIGhlbHBlclRleHRJbnZhbGlkPVwiSVRoZSBleHByZXNzaW9uIG1hdGNoaW5nIGZhaWxlZC5cIlxuICAgICAgICB2YWxpZGF0ZWQ9e21hdGNoRXhwcmVzc2lvblZhbGlkfVxuICAgICAgPlxuICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICB2YWx1ZT17bWF0Y2hFeHByZXNzaW9ufVxuICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBpZD1cInJ1bGUtbWF0Y2hleHByXCJcbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwicnVsZS1tYXRjaGV4cHItaGVscGVyXCJcbiAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgICAgIHNldE1hdGNoRXhwcmVzc2lvbih2KTtcbiAgICAgICAgICAgIG1hdGNoRXhwclNlcnZpY2Uuc2V0U2VhcmNoRXhwcmVzc2lvbih2KTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhbGlkYXRlZD17bWF0Y2hFeHByZXNzaW9uVmFsaWR9XG4gICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgYXV0b1Jlc2l6ZVxuICAgICAgICAgIHJlc2l6ZU9yaWVudGF0aW9uPVwidmVydGljYWxcIlxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgPC9DcmVkZW50aWFsQXV0aEZvcm0+XG4gICk7XG59O1xuXG50eXBlIF9TdXBwb3J0ZWRUYWIgPSAndmlzdWFsaXplcicgfCAndGVzdCc7XG5cbmV4cG9ydCBjb25zdCBGb3JtSGVscGVyOiBSZWFjdC5GQyA9ICh7IC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgYWxlcnRPcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiAoeyBoaWRlQWN0aW9uczogdHJ1ZSB9KSwgW10pO1xuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gUmVhY3QudXNlU3RhdGU8X1N1cHBvcnRlZFRhYj4oJ3Zpc3VhbGl6ZXInKTtcblxuICBjb25zdCBoYW5kbGVUYWJDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXzogUmVhY3QuTW91c2VFdmVudCwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IHNldEFjdGl2ZVRhYihgJHtrZXl9YCBhcyBfU3VwcG9ydGVkVGFiKSxcbiAgICBbc2V0QWN0aXZlVGFiXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFRhYnMgey4uLnByb3BzfSBhY3RpdmVLZXk9e2FjdGl2ZVRhYn0gb25TZWxlY3Q9e2hhbmRsZVRhYkNoYW5nZX0+XG4gICAgICA8VGFiXG4gICAgICAgIGV2ZW50S2V5PXsndmlzdWFsaXplcid9XG4gICAgICAgIHRpdGxlPXtcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFRhYlRpdGxlSWNvbj5cbiAgICAgICAgICAgICAgPFRvcG9sb2d5SWNvbiAvPlxuICAgICAgICAgICAgPC9UYWJUaXRsZUljb24+XG4gICAgICAgICAgICA8VGFiVGl0bGVUZXh0PlZpc3VhbGl6ZXI8L1RhYlRpdGxlVGV4dD5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAgICAgIDxNYXRjaEV4cHJlc3Npb25WaXN1YWxpemVyIGFsZXJ0T3B0aW9ucz17YWxlcnRPcHRpb25zfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvVGFiPlxuICAgICAgPFRhYlxuICAgICAgICBldmVudEtleT17J3Rlc3QnfVxuICAgICAgICB0aXRsZT17XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxUYWJUaXRsZUljb24+XG4gICAgICAgICAgICAgIDxGbGFza0ljb24gLz5cbiAgICAgICAgICAgIDwvVGFiVGl0bGVJY29uPlxuICAgICAgICAgICAgPFRhYlRpdGxlVGV4dD5UZXN0PC9UYWJUaXRsZVRleHQ+XG4gICAgICAgICAgPC8+XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPENyZWRlbnRpYWxUZXN0VGFibGUgLz5cbiAgICAgIDwvVGFiPlxuICAgIDwvVGFicz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNDb250ZXh0IH0gZnJvbSAnQGFwcC9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgQ3JlYXRlQ3JlZGVudGlhbE1vZGFsIH0gZnJvbSAnQGFwcC9TZWN1cml0eVBhbmVsL0NyZWRlbnRpYWxzL0NyZWF0ZUNyZWRlbnRpYWxNb2RhbCc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IEJ1dHRvbiwgQnV0dG9uUHJvcHMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmssIHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFRhcmdldE5vZGUgfSBmcm9tICcuLi90eXBpbmdzJztcbmltcG9ydCB7IEFjdGlvblV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FybmluZ1Jlc29sdmVyQXNMaW5rUHJvcHMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczxMaW5rPiB7fVxuXG5leHBvcnQgY29uc3QgV2FybmluZ1Jlc29sdmVyQXNMaW5rOiBSZWFjdC5GQzxXYXJuaW5nUmVzb2x2ZXJBc0xpbmtQcm9wcz4gPSAoeyB0bywgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8TGluayB0bz17dG99IHsuLi5wcm9wc30+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9MaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBXYXJuaW5nUmVzb2x2ZXJBc0FjdGlvbkJ1dHRvblByb3BzIGV4dGVuZHMgT21pdDxCdXR0b25Qcm9wcywgJ29uQ2xpY2snPiB7XG4gIHRhcmdldE5vZGU6IFRhcmdldE5vZGU7XG4gIG9uQ2xpY2s/OiAodGFyZ2V0Tm9kZTogVGFyZ2V0Tm9kZSwgYWN0aW9uVXRpbHM6IEFjdGlvblV0aWxzKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgV2FybmluZ1Jlc29sdmVyQXNBY3Rpb25CdXR0b246IFJlYWN0LkZDPFdhcm5pbmdSZXNvbHZlckFzQWN0aW9uQnV0dG9uUHJvcHM+ID0gKHtcbiAgdGFyZ2V0Tm9kZSxcbiAgb25DbGljayxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IHNlcnZpY2VzID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBSZWFjdC51c2VDb250ZXh0KE5vdGlmaWNhdGlvbnNDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsaWNrICYmIG9uQ2xpY2sodGFyZ2V0Tm9kZSwgeyBoaXN0b3J5LCBzZXJ2aWNlcywgbm90aWZpY2F0aW9ucyB9KTtcbiAgfSwgW29uQ2xpY2ssIHRhcmdldE5vZGUsIGhpc3RvcnksIHNlcnZpY2VzLCBub3RpZmljYXRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uIHsuLi5wcm9wc30gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQnV0dG9uPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBXYXJuaW5nUmVzb2x2ZXJBc0NyZWRNb2RhbFByb3BzIHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBXYXJuaW5nUmVzb2x2ZXJBc0NyZWRNb2RhbDogUmVhY3QuRkM8V2FybmluZ1Jlc29sdmVyQXNDcmVkTW9kYWxQcm9wcz4gPSAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBbc2hvd0F1dGhNb2RhbCwgc2V0U2hvd0F1dGhNb2RhbF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaGFuZGxlQXV0aE1vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2hvd0F1dGhNb2RhbChmYWxzZSk7XG4gIH0sIFtzZXRTaG93QXV0aE1vZGFsXSk7XG5cbiAgY29uc3QgaGFuZGxlQXV0aE1vZGFsT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93QXV0aE1vZGFsKHRydWUpO1xuICB9LCBbc2V0U2hvd0F1dGhNb2RhbF0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxDcmVhdGVDcmVkZW50aWFsTW9kYWxcbiAgICAgICAgdmlzaWJsZT17c2hvd0F1dGhNb2RhbH1cbiAgICAgICAgb25EaXNtaXNzPXtoYW5kbGVBdXRoTW9kYWxDbG9zZX1cbiAgICAgICAgb25Qcm9wc1NhdmU9e2hhbmRsZUF1dGhNb2RhbENsb3NlfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgICAgPGRpdiBvbkNsaWNrPXtoYW5kbGVBdXRoTW9kYWxPcGVufT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBUb3BvbG9neUZpbHRlcnMgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL1RvcG9sb2d5RmlsdGVyU2xpY2UnO1xuaW1wb3J0IHsgZXZhbHVhdGVUYXJnZXRXaXRoRXhwciB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcGFyYXRvciwgR3JhcGhFbGVtZW50LCBOb2RlU3RhdHVzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdG9wb2xvZ3knO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVJdGVtLCBNZW51SXRlbVZhcmlhbnQsIE5vZGVBY3Rpb24sIG5vZGVBY3Rpb25zIH0gZnJvbSAnLi4vQWN0aW9ucy9Ob2RlQWN0aW9ucyc7XG5pbXBvcnQgeyBXYXJuaW5nUmVzb2x2ZXJBc0NyZWRNb2RhbCB9IGZyb20gJy4uL0FjdGlvbnMvV2FybmluZ1Jlc29sdmVyJztcbmltcG9ydCB7IEVudmlyb25tZW50Tm9kZSwgVGFyZ2V0Tm9kZSwgaXNUYXJnZXROb2RlLCBOb2RlVHlwZSwgREVGQVVMVF9FTVBUWV9VTklWRVJTRSB9IGZyb20gJy4uL3R5cGluZ3MnO1xuXG5leHBvcnQgY29uc3QgRGlzY292ZXJ5VHJlZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KERFRkFVTFRfRU1QVFlfVU5JVkVSU0UpO1xuXG5leHBvcnQgY29uc3Qgbm9kZVR5cGVUb0FiYnIgPSAodHlwZTogTm9kZVR5cGUpOiBzdHJpbmcgPT4ge1xuICAvLyBLZWVwIHVwcGVyY2FzZXMgKG9yIHVwcGVyY2FzZSB3aG9sZSB3b3JkIGlmIG5vbmUpIGFuZCByZXRhaW4gZmlyc3QgNCBjaGFyYXRlcnMuXG4gIHJldHVybiAodHlwZS5yZXBsYWNlKC9bXkEtWl0vZywgJycpIHx8IHR5cGUudG9VcHBlckNhc2UoKSkuc2xpY2UoMCwgNCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsTGVhdmVzID0gKHJvb3Q6IEVudmlyb25tZW50Tm9kZSB8IFRhcmdldE5vZGUpOiBUYXJnZXROb2RlW10gPT4ge1xuICBpZiAoaXNUYXJnZXROb2RlKHJvb3QpKSB7XG4gICAgcmV0dXJuIFtyb290XTtcbiAgfVxuICBjb25zdCBJTklUOiBUYXJnZXROb2RlW10gPSBbXTtcbiAgcmV0dXJuIHJvb3QuY2hpbGRyZW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2LmNvbmNhdChnZXRBbGxMZWF2ZXMoY3VycikpLCBJTklUKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmbGF0dGVuVHJlZSA9IChcbiAgbm9kZTogRW52aXJvbm1lbnROb2RlIHwgVGFyZ2V0Tm9kZSxcbiAgaW5jbHVkZVVuaXZlcnNlPzogYm9vbGVhblxuKTogKEVudmlyb25tZW50Tm9kZSB8IFRhcmdldE5vZGUpW10gPT4ge1xuICBpZiAoaXNUYXJnZXROb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIFtub2RlXTtcbiAgfVxuXG4gIGNvbnN0IElOSVQ6IChFbnZpcm9ubWVudE5vZGUgfCBUYXJnZXROb2RlKVtdID0gW107XG4gIGNvbnN0IGFsbENoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYuY29uY2F0KGZsYXR0ZW5UcmVlKGN1cnIpKSwgSU5JVCk7XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGVUeXBlLlVOSVZFUlNFICYmICFpbmNsdWRlVW5pdmVyc2UpIHtcbiAgICByZXR1cm4gWy4uLmFsbENoaWxkcmVuXTtcbiAgfVxuXG4gIHJldHVybiBbbm9kZSwgLi4uYWxsQ2hpbGRyZW5dO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVuaXF1ZU5vZGVUeXBlcyA9IChub2RlczogKEVudmlyb25tZW50Tm9kZSB8IFRhcmdldE5vZGUpW10pOiBOb2RlVHlwZVtdID0+IHtcbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChub2Rlcy5tYXAoKG4pID0+IG4ubm9kZVR5cGUpKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybUNvbmZpZyB7XG4gIHNob3dPbmx5VG9wR3JvdXA/OiBib29sZWFuO1xuICBleHBhbmRNb2RlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFVuaXF1ZUdyb3VwSWQgPSAoZ3JvdXA6IEVudmlyb25tZW50Tm9kZSkgPT4ge1xuICByZXR1cm4gYCR7Z3JvdXAuaWR9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVbmlxdWVUYXJnZXRJZCA9ICh0YXJnZXQ6IFRhcmdldE5vZGUpID0+IHtcbiAgcmV0dXJuIGAke3RhcmdldC5pZH1gO1xufTtcblxuZXhwb3J0IHR5cGUgU3RhdHVzRXh0cmEgPSB7IHRpdGxlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgY2FsbEZvckFjdGlvbj86IFJlYWN0LlJlYWN0Tm9kZVtdIH07XG5cbmV4cG9ydCBjb25zdCBnZXRTdGF0dXNUYXJnZXROb2RlID0gKG5vZGU6IFRhcmdldE5vZGUgfCBFbnZpcm9ubWVudE5vZGUpOiBbTm9kZVN0YXR1cz8sIFN0YXR1c0V4dHJhP10gPT4ge1xuICBpZiAoaXNUYXJnZXROb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUudGFyZ2V0Lmp2bUlkXG4gICAgICA/IFtdXG4gICAgICA6IFtcbiAgICAgICAgICBOb2RlU3RhdHVzLndhcm5pbmcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdGYWlsZWQgdG8gY29tcHV0ZSBKVk0gSUQnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUYXJnZXQgJHtub2RlLnRhcmdldC5hbGlhc30gbWlnaHQgYmUgbWlzc2luZyBjcmVkZW50aWFscy5gLFxuICAgICAgICAgICAgY2FsbEZvckFjdGlvbjogW1xuICAgICAgICAgICAgICA8V2FybmluZ1Jlc29sdmVyQXNDcmVkTW9kYWwga2V5PXtgJHtub2RlLnRhcmdldC5hbGlhc30tcmVzb2x2ZXItYXMtY3JlZGVudGlhbC1tb2RhbGB9PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImxpbmtcIiBpc1NtYWxsIHN0eWxlPXt7IHBhZGRpbmc6IDAgfX0+XG4gICAgICAgICAgICAgICAgICBBZGQgY3JlZGVudGlhbHNcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9XYXJuaW5nUmVzb2x2ZXJBc0NyZWRNb2RhbD4sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gIH1cbiAgcmV0dXJuIFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFjdGlvbkZhY3RvcnkgPSAoXG4gIGVsZW1lbnQ6IEdyYXBoRWxlbWVudCB8IExpc3RFbGVtZW50LFxuICB2YXJpYW50OiBNZW51SXRlbVZhcmlhbnQgPSAnY29udGV4dE1lbnVJdGVtJyxcbiAgYWN0aW9uRmlsdGVyID0gKF86IE5vZGVBY3Rpb24pID0+IHRydWVcbikgPT4ge1xuICBjb25zdCBkYXRhOiBUYXJnZXROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gIGNvbnN0IGlzR3JvdXAgPSAhaXNUYXJnZXROb2RlKGRhdGEpO1xuICBsZXQgZmlsdGVyZWQgPSBub2RlQWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICBhY3Rpb25GaWx0ZXIoYWN0aW9uKSAmJlxuICAgICAgKGFjdGlvbi5pc0dyb3VwIHx8IGZhbHNlKSA9PT0gaXNHcm91cCAmJlxuICAgICAgKCFhY3Rpb24uaW5jbHVkZUxpc3QgfHwgYWN0aW9uLmluY2x1ZGVMaXN0LmluY2x1ZGVzKGRhdGEubm9kZVR5cGUpKSAmJlxuICAgICAgKCFhY3Rpb24uYmxvY2tMaXN0IHx8ICFhY3Rpb24uYmxvY2tMaXN0LmluY2x1ZGVzKGRhdGEubm9kZVR5cGUpKVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIFJlbW92ZSB0cmFpbGluZyBzZXBhcmF0b3JcbiAgbGV0IHN0b3A6IG51bWJlciA9IGZpbHRlcmVkLmxlbmd0aCAtIDE7XG4gIGZvciAoOyBzdG9wID49IDA7IHN0b3AtLSkge1xuICAgIGlmICghZmlsdGVyZWRbc3RvcF0uaXNTZXBhcmF0b3IpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBmaWx0ZXJlZCA9IHN0b3AgPj0gMCA/IGZpbHRlcmVkLnNsaWNlKDAsIHN0b3AgKyAxKSA6IFtdO1xuXG4gIHJldHVybiBmaWx0ZXJlZC5tYXAoKHsgaXNTZXBhcmF0b3IsIGtleSwgdGl0bGUsIGlzRGlzYWJsZWQsIGFjdGlvbiB9LCBpbmRleCkgPT4ge1xuICAgIGlmIChpc1NlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIDxDb250ZXh0TWVudVNlcGFyYXRvciBrZXk9e2BzZXBhcmF0b3ItJHtpbmRleH1gfSAvPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb250ZXh0TWVudUl0ZW0ga2V5PXtrZXl9IGVsZW1lbnQ9e2VsZW1lbnR9IG9uQ2xpY2s9e2FjdGlvbn0gdmFyaWFudD17dmFyaWFudH0gaXNEaXNhYmxlZD17aXNEaXNhYmxlZH0+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgIDwvQ29udGV4dE1lbnVJdGVtPlxuICAgICk7XG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdEVsZW1lbnQgPSB7XG4gIGdldERhdGE6IEdyYXBoRWxlbWVudFsnZ2V0RGF0YSddO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR3JhcGhFbGVtZW50ID0gKGVsZW1lbnQ6IEdyYXBoRWxlbWVudCB8IExpc3RFbGVtZW50KTogZWxlbWVudCBpcyBHcmFwaEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKGVsZW1lbnQgYXMgR3JhcGhFbGVtZW50KS5nZXRHcmFwaCAhPT0gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExBUFNFX0VYRU1QVFMgPSBbTm9kZVR5cGUuTkFNRVNQQUNFLCBOb2RlVHlwZS5SRUFMTSwgTm9kZVR5cGUuVU5JVkVSU0VdO1xuXG4vLyBGb3Igc2VhcmNoaW5nXG5leHBvcnQgY29uc3QgaXNHcm91cE5vZGVGaWx0ZXJlZCA9IChcbiAgZ3JvdXBOb2RlOiBFbnZpcm9ubWVudE5vZGUsXG4gIGZpbHRlcnM/OiBUb3BvbG9neUZpbHRlcnNbJ2dyb3VwRmlsdGVycyddWydmaWx0ZXJzJ11cbikgPT4ge1xuICBpZiAoIWZpbHRlcnMgfHwgIWZpbHRlcnNbZ3JvdXBOb2RlLm5vZGVUeXBlXSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZpbHRlciA9IGZpbHRlcnNbZ3JvdXBOb2RlLm5vZGVUeXBlXTtcbiAgbGV0IG1hdGNoZWQgPSB0cnVlO1xuICBpZiAoZmlsdGVyLk5hbWUgJiYgZmlsdGVyLk5hbWUubGVuZ3RoKSB7XG4gICAgbWF0Y2hlZCA9IG1hdGNoZWQgJiYgZmlsdGVyLk5hbWUuaW5jbHVkZXMoZ3JvdXBOb2RlLm5hbWUpO1xuICB9XG4gIGlmIChmaWx0ZXIuTGFiZWwgJiYgZmlsdGVyLkxhYmVsLmxlbmd0aCkge1xuICAgIG1hdGNoZWQgPVxuICAgICAgbWF0Y2hlZCAmJiBPYmplY3QuZW50cmllcyhncm91cE5vZGUubGFiZWxzKS5maWx0ZXIoKFtrLCB2XSkgPT4gZmlsdGVyLkxhYmVsLmluY2x1ZGVzKGAke2t9PSR7dn1gKSkubGVuZ3RoID4gMDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RhcmdldE5vZGVGaWx0ZXJlZCA9ICh7IHRhcmdldCB9OiBUYXJnZXROb2RlLCBmaWx0ZXJzPzogVG9wb2xvZ3lGaWx0ZXJzWyd0YXJnZXRGaWx0ZXJzJ11bJ2ZpbHRlcnMnXSkgPT4ge1xuICBpZiAoIWZpbHRlcnMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgbWF0Y2hlZCA9IHRydWU7XG4gIGlmIChmaWx0ZXJzLkFsaWFzICYmIGZpbHRlcnMuQWxpYXMubGVuZ3RoKSB7XG4gICAgbWF0Y2hlZCA9IG1hdGNoZWQgJiYgZmlsdGVycy5BbGlhcy5pbmNsdWRlcyh0YXJnZXQuYWxpYXMpO1xuICB9XG4gIGlmIChmaWx0ZXJzLkNvbm5lY3Rpb25VcmwgJiYgZmlsdGVycy5Db25uZWN0aW9uVXJsLmxlbmd0aCkge1xuICAgIG1hdGNoZWQgPSBtYXRjaGVkICYmIGZpbHRlcnMuQ29ubmVjdGlvblVybC5pbmNsdWRlcyh0YXJnZXQuY29ubmVjdFVybCk7XG4gIH1cbiAgaWYgKGZpbHRlcnMuSnZtSWQgJiYgZmlsdGVycy5Kdm1JZC5sZW5ndGgpIHtcbiAgICBtYXRjaGVkID0gbWF0Y2hlZCAmJiB0YXJnZXQuanZtSWQgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJzLkp2bUlkLmluY2x1ZGVzKHRhcmdldC5qdm1JZCk7XG4gIH1cbiAgaWYgKGZpbHRlcnMuTGFiZWwgJiYgZmlsdGVycy5MYWJlbC5sZW5ndGgpIHtcbiAgICBtYXRjaGVkID1cbiAgICAgIG1hdGNoZWQgJiYgT2JqZWN0LmVudHJpZXModGFyZ2V0LmxhYmVscyB8fCB7fSkuZmlsdGVyKChbaywgdl0pID0+IGZpbHRlcnMuTGFiZWwuaW5jbHVkZXMoYCR7a309JHt2fWApKS5sZW5ndGggPiAwO1xuICB9XG4gIGlmIChmaWx0ZXJzLkFubm90YXRpb24gJiYgZmlsdGVycy5Bbm5vdGF0aW9uLmxlbmd0aCkge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGFyZ2V0LmFubm90YXRpb25zO1xuICAgIG1hdGNoZWQgPVxuICAgICAgbWF0Y2hlZCAmJlxuICAgICAgWy4uLk9iamVjdC5lbnRyaWVzKGFubm90YXRpb25zPy5jcnlvc3RhdCB8fCB7fSksIC4uLk9iamVjdC5lbnRyaWVzKGFubm90YXRpb25zPy5wbGF0Zm9ybSB8fCB7fSldLmZpbHRlcihcbiAgICAgICAgKFtrLCB2XSkgPT4gZmlsdGVycy5Bbm5vdGF0aW9uLmluY2x1ZGVzKGAke2t9PSR7dn1gKVxuICAgICAgKS5sZW5ndGggPiAwO1xuICB9XG4gIHJldHVybiBtYXRjaGVkO1xufTtcblxuZXhwb3J0IGNsYXNzIFNlYXJjaEV4cHJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBzZWFyY2hFeHByZXNzaW9uKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHNldFNlYXJjaEV4cHJlc3Npb24oZXhwcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUkLm5leHQoZXhwcik7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFNlYXJjaEV4cHJTZXJ2aWNlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobmV3IFNlYXJjaEV4cHJTZXJ2aWNlKCkpO1xuXG5leHBvcnQgY29uc3QgdXNlU2VhcmNoRXhwcmVzc2lvbiA9IChkZWJvdW5jZU1zID0gMCk6IFtzdHJpbmcsIChleHByOiBzdHJpbmcpID0+IHZvaWRdID0+IHtcbiAgY29uc3QgW2V4cHIsIHNldEV4cHJdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBleHByU3ZjID0gUmVhY3QudXNlQ29udGV4dChTZWFyY2hFeHByU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBfc3ViUmVmID0gUmVhY3QudXNlUmVmPFN1YnNjcmlwdGlvbj4oKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIF9zdWJSZWYuY3VycmVudCA9IGV4cHJTdmMuc2VhcmNoRXhwcmVzc2lvbigpLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKS5zdWJzY3JpYmUoc2V0RXhwcik7XG4gICAgcmV0dXJuICgpID0+IF9zdWJSZWYuY3VycmVudD8udW5zdWJzY3JpYmUoKTtcbiAgfSwgW19zdWJSZWYsIHNldEV4cHIsIGV4cHJTdmMsIGRlYm91bmNlTXNdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgZXhwclN2Yy5zZXRTZWFyY2hFeHByZXNzaW9uKHZhbHVlKTtcbiAgICB9LFxuICAgIFtleHByU3ZjXVxuICApO1xuICByZXR1cm4gW2V4cHIsIGhhbmRsZUNoYW5nZV07XG59O1xuXG5leHBvcnQgY29uc3QgaXNUYXJnZXRNYXRjaGVkID0gKHsgdGFyZ2V0IH06IFRhcmdldE5vZGUsIG1hdGNoRXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gZXZhbHVhdGVUYXJnZXRXaXRoRXhwcih0YXJnZXQsIG1hdGNoRXhwcmVzc2lvbik7XG4gICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgTm90aWZpY2F0aW9ucywgTm90aWZpY2F0aW9uc0NvbnRleHQgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBY3RpdmVSZWNvcmRpbmcgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSwgTm90aWZpY2F0aW9uTWVzc2FnZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgRHJvcGRvd24sIERyb3Bkb3duSXRlbSwgRHJvcGRvd25JdGVtUHJvcHMsIERyb3Bkb3duUHJvcHMsIERyb3Bkb3duVG9nZ2xlIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVJdGVtIGFzIFBGQ29udGV4dE1lbnVJdGVtLCBHcmFwaEVsZW1lbnQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10b3BvbG9neSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5IH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIG1hcCwgbWVyZ2UsIGZpbHRlciwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRDb25uZWN0VXJsRnJvbUV2ZW50IH0gZnJvbSAnLi4vU2hhcmVkL0VudGl0eS91dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxMZWF2ZXMsIExpc3RFbGVtZW50IH0gZnJvbSAnLi4vU2hhcmVkL3V0aWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50Tm9kZSwgTm9kZVR5cGUsIFRhcmdldE5vZGUgfSBmcm9tICcuLi90eXBpbmdzJztcbmltcG9ydCB7IEFjdGlvblV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIE5vZGVBY3Rpb25GdW5jdGlvbiA9IChlbGVtZW50OiBHcmFwaEVsZW1lbnQgfCBMaXN0RWxlbWVudCwgYWN0aW9uVXRpbHM6IEFjdGlvblV0aWxzKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBNZW51SXRlbVZhcmlhbnQgPSAnZHJvcGRvd25JdGVtJyB8ICdjb250ZXh0TWVudUl0ZW0nO1xuXG5leHBvcnQgdHlwZSBNZW51SXRlbUNvbXBvbmVudCA9IFJlYWN0LkZDPERyb3Bkb3duSXRlbVByb3BzPiB8IFJlYWN0LkZDPFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQRkNvbnRleHRNZW51SXRlbT4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRNZW51SXRlbVByb3BzXG4gIGV4dGVuZHMgT21pdDxcbiAgICBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUEZDb250ZXh0TWVudUl0ZW0+ICYgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERyb3Bkb3duSXRlbT4sXG4gICAgJ29uQ2xpY2snIHwgJ2lzRGlzYWJsZWQnXG4gID4ge1xuICBvbkNsaWNrPzogTm9kZUFjdGlvbkZ1bmN0aW9uO1xuICBlbGVtZW50OiBHcmFwaEVsZW1lbnQgfCBMaXN0RWxlbWVudDtcbiAgdmFyaWFudDogTWVudUl0ZW1WYXJpYW50O1xuICBpc0Rpc2FibGVkPzogKGVsZW1lbnQ6IEdyYXBoRWxlbWVudCB8IExpc3RFbGVtZW50LCBhY3Rpb25VdGlsczogQWN0aW9uVXRpbHMpID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBjb25zdCBDb250ZXh0TWVudUl0ZW06IFJlYWN0LkZDPENvbnRleHRNZW51SXRlbVByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBlbGVtZW50LFxuICBvbkNsaWNrLFxuICB2YXJpYW50LFxuICBpc0Rpc2FibGVkLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IHNlcnZpY2VzID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBSZWFjdC51c2VDb250ZXh0KE5vdGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgY29uc3QgZWxlbWVudFN1YmpSZWYgPSBSZWFjdC51c2VSZWYobmV3IFN1YmplY3Q8R3JhcGhFbGVtZW50IHwgTGlzdEVsZW1lbnQ+KCkpO1xuICBjb25zdCBlbGVtZW50U3ViaiA9IGVsZW1lbnRTdWJqUmVmLmN1cnJlbnQ7XG5cbiAgY29uc3QgW2Rpc2FibGVkLCBzZXREaXNhYmxlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaGFuZGxlT25jbGljayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb25DbGljayAmJiBvbkNsaWNrKGVsZW1lbnQsIHsgaGlzdG9yeSwgc2VydmljZXMsIG5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBbb25DbGljaywgaGlzdG9yeSwgc2VydmljZXMsIG5vdGlmaWNhdGlvbnMsIGVsZW1lbnRdXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBlbGVtZW50U3VialxuICAgICAgICAgIC5waXBlKHN3aXRjaE1hcCgoZWxlbWVudCkgPT4gaXNEaXNhYmxlZChlbGVtZW50LCB7IHNlcnZpY2VzLCBub3RpZmljYXRpb25zLCBoaXN0b3J5IH0pKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKHNldERpc2FibGVkKVxuICAgICAgKTtcbiAgICB9XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGVsZW1lbnRTdWJqLCBpc0Rpc2FibGVkLCBzZXJ2aWNlcywgbm90aWZpY2F0aW9ucywgaGlzdG9yeV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZWxlbWVudFN1YmoubmV4dChlbGVtZW50KTtcbiAgfSwgW2VsZW1lbnRTdWJqLCBlbGVtZW50XSk7XG5cbiAgbGV0IENvbXBvbmVudDogTWVudUl0ZW1Db21wb25lbnQ7XG4gIHN3aXRjaCAodmFyaWFudCkge1xuICAgIGNhc2UgJ2NvbnRleHRNZW51SXRlbSc6XG4gICAgICBDb21wb25lbnQgPSBQRkNvbnRleHRNZW51SXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Ryb3Bkb3duSXRlbSc6XG4gICAgICBDb21wb25lbnQgPSBEcm9wZG93bkl0ZW07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZhcmlhbnQ6ICR7dmFyaWFudH1gKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IG9uQ2xpY2s9e2hhbmRsZU9uY2xpY2t9IGlzRGlzYWJsZWQ9e2Rpc2FibGVkfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIE5vZGVBY3Rpb25LZXkgPVxuICB8ICdWSUVXX0RBU0hCT0FSRCdcbiAgfCAnVklFV19SRUNPUkRJTkdTJ1xuICB8ICdDUkVBVEVfUkVDT1JESU5HUydcbiAgfCAnQ1JFQVRFX1JVTEVTJ1xuICB8ICdERUxFVEVfVEFSR0VUJ1xuICB8ICdHUk9VUF9TVEFSVF9SRUNPUkRJTkcnXG4gIHwgJ0dST1VQX1NUT1BfUkVDT1JESU5HJ1xuICB8ICdHUk9VUF9ERUxFVEVfUkVDT1JESU5HJ1xuICB8ICdHUk9VUF9BUkNISVZFX1JFQ09SRElORydcbiAgfCAnJztcblxuZXhwb3J0IGNvbnN0IFFVSUNLX1JFQ09SRElOR19OQU1FID0gJ2NyeW9zdGF0X3RvcG9sb2d5X2FjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBRVUlDS19SRUNPUkRJTkdfTEFCRUxfS0VZID0gJ2NyeW9zdGF0LmlvLnRvcG9sb2d5LWdyb3VwJztcblxuY29uc3QgaXNRdWlja1JlY29yZGluZyA9IChyZWNvcmRpbmc6IEFjdGl2ZVJlY29yZGluZykgPT4ge1xuICByZXR1cm4gcmVjb3JkaW5nLm5hbWUgPT09IFFVSUNLX1JFQ09SRElOR19OQU1FO1xufTtcblxuY29uc3QgaXNRdWlja1JlY29yZGluZ0V4aXN0ID0gKGdyb3VwOiBFbnZpcm9ubWVudE5vZGUsIHsgc2VydmljZXMgfTogQWN0aW9uVXRpbHMpID0+IHtcbiAgY29uc3Qgc3ZjVXJscyA9IG5ldyBTZXQoZ2V0QWxsTGVhdmVzKGdyb3VwKS5tYXAoKHRuKSA9PiB0bi50YXJnZXQuY29ubmVjdFVybCkpO1xuICBjb25zdCBmaWx0ZXJGbiA9IChlOiBOb3RpZmljYXRpb25NZXNzYWdlKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SWQgPSBnZXRDb25uZWN0VXJsRnJvbUV2ZW50KGUpO1xuICAgIGNvbnN0IHJlY29yZGluZyA9IGUubWVzc2FnZS5yZWNvcmRpbmc7XG4gICAgcmV0dXJuIHRhcmdldElkICE9PSB1bmRlZmluZWQgJiYgc3ZjVXJscy5oYXModGFyZ2V0SWQpICYmIGlzUXVpY2tSZWNvcmRpbmcocmVjb3JkaW5nKTtcbiAgfTtcblxuICByZXR1cm4gbWVyZ2UoXG4gICAgc2VydmljZXMuYXBpLmdyb3VwSGFzUmVjb3JkaW5nKGdyb3VwLCB7IG5hbWU6IFFVSUNLX1JFQ09SRElOR19OQU1FIH0pLFxuICAgIHNlcnZpY2VzLm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQWN0aXZlUmVjb3JkaW5nQ3JlYXRlZCkucGlwZShcbiAgICAgIGZpbHRlcihmaWx0ZXJGbiksXG4gICAgICBtYXAoKF8pID0+IHRydWUpXG4gICAgKSxcbiAgICBzZXJ2aWNlcy5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ0RlbGV0ZWQpLnBpcGUoXG4gICAgICBmaWx0ZXIoZmlsdGVyRm4pLFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBtYXAoKF8pID0+IHNlcnZpY2VzLmFwaS5ncm91cEhhc1JlY29yZGluZyhncm91cCwgeyBuYW1lOiBRVUlDS19SRUNPUkRJTkdfTkFNRSB9KSlcbiAgICApXG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVBY3Rpb24ge1xuICByZWFkb25seSBrZXk6IE5vZGVBY3Rpb25LZXk7XG4gIHJlYWRvbmx5IGlzR3JvdXA/OiBib29sZWFuO1xuICByZWFkb25seSBhY3Rpb24/OiBOb2RlQWN0aW9uRnVuY3Rpb247XG4gIHJlYWRvbmx5IHRpdGxlPzogUmVhY3QuUmVhY3ROb2RlO1xuICByZWFkb25seSBpc1NlcGFyYXRvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGlzYWJsZWQ/OiAoZWxlbWVudDogR3JhcGhFbGVtZW50IHwgTGlzdEVsZW1lbnQsIGFjdGlvblV0aWxzOiBBY3Rpb25VdGlscykgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgaW5jbHVkZUxpc3Q/OiBOb2RlVHlwZVtdOyAvLyBFbXB0eSBtZWFucyBhbGxcbiAgcmVhZG9ubHkgYmxvY2tMaXN0PzogTm9kZVR5cGVbXTsgLy8gRW1wdHkgbWVhbnMgbm9uZVxufVxuXG5leHBvcnQgY29uc3Qgbm9kZUFjdGlvbnM6IE5vZGVBY3Rpb25bXSA9IFtcbiAge1xuICAgIGtleTogJ1ZJRVdfREFTSEJPQVJEJyxcbiAgICBhY3Rpb246IChlbGVtZW50LCB7IGhpc3RvcnksIHNlcnZpY2VzIH0pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGU6IFRhcmdldE5vZGUgPSBlbGVtZW50LmdldERhdGEoKTtcblxuICAgICAgc2VydmljZXMudGFyZ2V0LnNldFRhcmdldCh0YXJnZXROb2RlLnRhcmdldCk7XG4gICAgICBoaXN0b3J5LnB1c2goJy8nKTtcbiAgICB9LFxuICAgIHRpdGxlOiAnVmlldyBEYXNoYm9hcmQnLFxuICB9LFxuICB7XG4gICAga2V5OiAnVklFV19SRUNPUkRJTkdTJyxcbiAgICBhY3Rpb246IChlbGVtZW50LCB7IGhpc3RvcnksIHNlcnZpY2VzIH0pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGU6IFRhcmdldE5vZGUgPSBlbGVtZW50LmdldERhdGEoKTtcblxuICAgICAgc2VydmljZXMudGFyZ2V0LnNldFRhcmdldCh0YXJnZXROb2RlLnRhcmdldCk7XG4gICAgICBoaXN0b3J5LnB1c2goJy9yZWNvcmRpbmdzJyk7XG4gICAgfSxcbiAgICB0aXRsZTogJ1ZpZXcgUmVjb3JkaW5ncycsXG4gIH0sXG4gIHsga2V5OiAnJywgaXNTZXBhcmF0b3I6IHRydWUgfSxcbiAge1xuICAgIGtleTogJ0NSRUFURV9SRUNPUkRJTkdTJyxcbiAgICBhY3Rpb246IChlbGVtZW50LCB7IGhpc3RvcnksIHNlcnZpY2VzIH0pID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGU6IFRhcmdldE5vZGUgPSBlbGVtZW50LmdldERhdGEoKTtcblxuICAgICAgc2VydmljZXMudGFyZ2V0LnNldFRhcmdldCh0YXJnZXROb2RlLnRhcmdldCk7XG4gICAgICBoaXN0b3J5LnB1c2goJy9yZWNvcmRpbmdzL2NyZWF0ZScpO1xuICAgIH0sXG4gICAgdGl0bGU6ICdDcmVhdGUgUmVjb3JkaW5ncycsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdDUkVBVEVfUlVMRVMnLFxuICAgIGFjdGlvbjogKGVsZW1lbnQsIHsgaGlzdG9yeSwgc2VydmljZXMgfSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZTogVGFyZ2V0Tm9kZSA9IGVsZW1lbnQuZ2V0RGF0YSgpO1xuXG4gICAgICBzZXJ2aWNlcy50YXJnZXQuc2V0VGFyZ2V0KHRhcmdldE5vZGUudGFyZ2V0KTtcbiAgICAgIGhpc3RvcnkucHVzaCgnL3J1bGVzL2NyZWF0ZScpO1xuICAgIH0sXG4gICAgdGl0bGU6ICdDcmVhdGUgQXV0b21hdGVkIFJ1bGVzJyxcbiAgfSxcbiAgeyBrZXk6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxuICB7XG4gICAga2V5OiAnREVMRVRFX1RBUkdFVCcsXG4gICAgYWN0aW9uOiAoZWxlbWVudCwgeyBzZXJ2aWNlcyB9KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXROb2RlOiBUYXJnZXROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gICAgICBzZXJ2aWNlcy5hcGkuZGVsZXRlVGFyZ2V0KHRhcmdldE5vZGUudGFyZ2V0KS5zdWJzY3JpYmUoKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHRpdGxlOiAnRGVsZXRlIFRhcmdldCcsXG4gICAgaW5jbHVkZUxpc3Q6IFtOb2RlVHlwZS5DVVNUT01fVEFSR0VUXSxcbiAgfSxcbiAge1xuICAgIGtleTogJ0dST1VQX1NUQVJUX1JFQ09SRElORycsXG4gICAgdGl0bGU6ICdTdGFydCByZWNvcmRpbmcnLFxuICAgIGlzR3JvdXA6IHRydWUsXG4gICAgYWN0aW9uOiAoZWxlbWVudCwgeyBzZXJ2aWNlcywgbm90aWZpY2F0aW9ucyB9KSA9PiB7XG4gICAgICBjb25zdCBncm91cDogRW52aXJvbm1lbnROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gICAgICBzZXJ2aWNlcy5hcGlcbiAgICAgICAgLmdyYXBocWw8YW55PihcbiAgICAgICAgICBgXG4gICAgICAgICAgcXVlcnkgU3RhcnRSZWNvcmRpbmdGb3JHcm91cCgkZmlsdGVyOiBFbnZpcm9ubWVudE5vZGVGaWx0ZXJJbnB1dCwgJHJlY29yZGluZ05hbWU6IFN0cmluZyEsICRsYWJlbHM6IFN0cmluZykge1xuICAgICAgICAgICAgZW52aXJvbm1lbnROb2RlcyhmaWx0ZXI6ICRmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICBkZXNjZW5kYW50VGFyZ2V0cyB7XG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgIGRvU3RhcnRSZWNvcmRpbmcocmVjb3JkaW5nOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiAkcmVjb3JkaW5nTmFtZSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBcIkNvbnRpbnVvdXNcIixcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZTogXCJUQVJHRVRcIixcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgcmVzdGFydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsczogJGxhYmVsc1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgICBgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbHRlcjogeyBpZDogZ3JvdXAuaWQgfSxcbiAgICAgICAgICAgIHJlY29yZGluZ05hbWU6IFFVSUNLX1JFQ09SRElOR19OQU1FLFxuICAgICAgICAgICAgbGFiZWxzOiBzZXJ2aWNlcy5hcGkuc3RyaW5naWZ5UmVjb3JkaW5nTGFiZWxzKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogUVVJQ0tfUkVDT1JESU5HX0xBQkVMX0tFWSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXAubmFtZS5yZXBsYWNlKC9bXFxzKy1dL2csICdfJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChib2R5KSA9PiB7XG4gICAgICAgICAgbm90aWZ5R3JvdXBBY3Rpb25FcnJvcnMoJ0dST1VQX1NUQVJUX1JFQ09SRElORycsIGdyb3VwLCBib2R5LCBub3RpZmljYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIGtleTogJ0dST1VQX0FSQ0hJVkVfUkVDT1JESU5HJyxcbiAgICB0aXRsZTogJ0FyY2hpdmUgcmVjb3JkaW5nJyxcbiAgICBpc0dyb3VwOiB0cnVlLFxuICAgIGFjdGlvbjogKGVsZW1lbnQsIHsgc2VydmljZXMsIG5vdGlmaWNhdGlvbnMgfSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXA6IEVudmlyb25tZW50Tm9kZSA9IGVsZW1lbnQuZ2V0RGF0YSgpO1xuICAgICAgc2VydmljZXMuYXBpXG4gICAgICAgIC5ncmFwaHFsPGFueT4oXG4gICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IERlbGV0ZVJlY29yZGluZ0Zvckdyb3VwICgkZ3JvdXBGaWx0ZXI6IEVudmlyb25tZW50Tm9kZUZpbHRlcklucHV0LCAkcmVjb3JkaW5nRmlsdGVyOiBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCl7XG4gICAgICAgICAgICBlbnZpcm9ubWVudE5vZGVzKGZpbHRlcjogJGdyb3VwRmlsdGVyKSB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgZGVzY2VuZGFudFRhcmdldHMge1xuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICByZWNvcmRpbmdzIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlKGZpbHRlcjogJHJlY29yZGluZ0ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRvQXJjaGl2ZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgICAgYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBncm91cEZpbHRlcjogeyBpZDogZ3JvdXAuaWQgfSxcbiAgICAgICAgICAgIHJlY29yZGluZ0ZpbHRlcjogeyBuYW1lOiBRVUlDS19SRUNPUkRJTkdfTkFNRSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGJvZHkpID0+IHtcbiAgICAgICAgICBub3RpZnlHcm91cEFjdGlvbkVycm9ycygnR1JPVVBfQVJDSElWRV9SRUNPUkRJTkcnLCBncm91cCwgYm9keSwgbm90aWZpY2F0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogKGVsZW1lbnQsIHV0aWxzKSA9PiB7XG4gICAgICByZXR1cm4gaXNRdWlja1JlY29yZGluZ0V4aXN0KGVsZW1lbnQuZ2V0RGF0YSgpLCB1dGlscykucGlwZShtYXAoKGV4aXN0KSA9PiAhZXhpc3QpKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAga2V5OiAnR1JPVVBfU1RPUF9SRUNPUkRJTkcnLFxuICAgIHRpdGxlOiAnU3RvcCByZWNvcmRpbmcnLFxuICAgIGlzR3JvdXA6IHRydWUsXG4gICAgYWN0aW9uOiAoZWxlbWVudCwgeyBzZXJ2aWNlcywgbm90aWZpY2F0aW9ucyB9KSA9PiB7XG4gICAgICBjb25zdCBncm91cDogRW52aXJvbm1lbnROb2RlID0gZWxlbWVudC5nZXREYXRhKCk7XG4gICAgICBzZXJ2aWNlcy5hcGlcbiAgICAgICAgLmdyYXBocWw8YW55PihcbiAgICAgICAgICBgXG4gICAgICAgICAgcXVlcnkgU3RvcFJlY29yZGluZ0Zvckdyb3VwICgkZ3JvdXBGaWx0ZXI6IEVudmlyb25tZW50Tm9kZUZpbHRlcklucHV0LCAkcmVjb3JkaW5nRmlsdGVyOiBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCl7XG4gICAgICAgICAgICBlbnZpcm9ubWVudE5vZGVzKGZpbHRlcjogJGdyb3VwRmlsdGVyKSB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgZGVzY2VuZGFudFRhcmdldHMge1xuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICByZWNvcmRpbmdzIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlKGZpbHRlcjogJHJlY29yZGluZ0ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9TdG9wIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXBGaWx0ZXI6IHsgaWQ6IGdyb3VwLmlkIH0sXG4gICAgICAgICAgICByZWNvcmRpbmdGaWx0ZXI6IHsgbmFtZTogUVVJQ0tfUkVDT1JESU5HX05BTUUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChib2R5KSA9PiB7XG4gICAgICAgICAgbm90aWZ5R3JvdXBBY3Rpb25FcnJvcnMoJ0dST1VQX1NUT1BfUkVDT1JESU5HJywgZ3JvdXAsIGJvZHksIG5vdGlmaWNhdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IChlbGVtZW50LCB1dGlscykgPT4ge1xuICAgICAgcmV0dXJuIGlzUXVpY2tSZWNvcmRpbmdFeGlzdChlbGVtZW50LmdldERhdGEoKSwgdXRpbHMpLnBpcGUobWFwKChleGlzdCkgPT4gIWV4aXN0KSk7XG4gICAgfSxcbiAgfSxcbiAgeyBrZXk6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNHcm91cDogdHJ1ZSB9LFxuICB7XG4gICAga2V5OiAnR1JPVVBfREVMRVRFX1JFQ09SRElORycsXG4gICAgdGl0bGU6ICdEZWxldGUgcmVjb3JkaW5nJyxcbiAgICBpc0dyb3VwOiB0cnVlLFxuICAgIGFjdGlvbjogKGVsZW1lbnQsIHsgc2VydmljZXMsIG5vdGlmaWNhdGlvbnMgfSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXA6IEVudmlyb25tZW50Tm9kZSA9IGVsZW1lbnQuZ2V0RGF0YSgpO1xuICAgICAgc2VydmljZXMuYXBpXG4gICAgICAgIC5ncmFwaHFsPGFueT4oXG4gICAgICAgICAgYFxuICAgICAgICAgIHF1ZXJ5IERlbGV0ZVJlY29yZGluZ0Zvckdyb3VwICgkZ3JvdXBGaWx0ZXI6IEVudmlyb25tZW50Tm9kZUZpbHRlcklucHV0LCAkcmVjb3JkaW5nRmlsdGVyOiBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCl7XG4gICAgICAgICAgICBlbnZpcm9ubWVudE5vZGVzKGZpbHRlcjogJGdyb3VwRmlsdGVyKSB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgZGVzY2VuZGFudFRhcmdldHMge1xuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICByZWNvcmRpbmdzIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlKGZpbHRlcjogJHJlY29yZGluZ0ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9EZWxldGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgICAgYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBncm91cEZpbHRlcjogeyBpZDogZ3JvdXAuaWQgfSxcbiAgICAgICAgICAgIHJlY29yZGluZ0ZpbHRlcjogeyBuYW1lOiBRVUlDS19SRUNPUkRJTkdfTkFNRSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGJvZHkpID0+IHtcbiAgICAgICAgICBub3RpZnlHcm91cEFjdGlvbkVycm9ycygnR1JPVVBfREVMRVRFX1JFQ09SRElORycsIGdyb3VwLCBib2R5LCBub3RpZmljYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiAoZWxlbWVudCwgdXRpbHMpID0+IHtcbiAgICAgIHJldHVybiBpc1F1aWNrUmVjb3JkaW5nRXhpc3QoZWxlbWVudC5nZXREYXRhKCksIHV0aWxzKS5waXBlKG1hcCgoZXhpc3QpID0+ICFleGlzdCkpO1xuICAgIH0sXG4gIH0sXG5dO1xuXG50eXBlIEdyb3VwQWN0aW9uUmVzcG9uc2UgPSB7XG4gIGVycm9ycz86IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgfVtdO1xuICBkYXRhOiB7XG4gICAgZW52aXJvbm1lbnROb2Rlczoge1xuICAgICAgZGVzY2VuZGFudFRhcmdldHM6IHsgbmFtZTogc3RyaW5nIH1bXTsgLy8gZ3JhcGhxbCBxdWVyeSBzcGVjaWZpZXMgbmFtZVxuICAgIH1bXTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBub3RpZnlHcm91cEFjdGlvbkVycm9ycyA9IChcbiAgdHlwZTogRXh0cmFjdDxcbiAgICAnR1JPVVBfU1RBUlRfUkVDT1JESU5HJyB8ICdHUk9VUF9BUkNISVZFX1JFQ09SRElORycgfCAnR1JPVVBfU1RPUF9SRUNPUkRJTkcnIHwgJ0dST1VQX0RFTEVURV9SRUNPUkRJTkcnLFxuICAgIE5vZGVBY3Rpb25LZXlcbiAgPixcbiAgZ3JvdXA6IEVudmlyb25tZW50Tm9kZSxcbiAgeyBlcnJvcnMsIGRhdGEgfTogR3JvdXBBY3Rpb25SZXNwb25zZSxcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1xuKTogdm9pZCA9PiB7XG4gIGlmIChlcnJvcnMpIHtcbiAgICBjb25zdCBhY3Rpb25WZXJiID0gdHlwZVxuICAgICAgLnNwbGl0KCdfJylcbiAgICAgIC5zbGljZSgxKVxuICAgICAgLm1hcCgoc3RyKSA9PiBzdHIudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gICAgY29uc3QgZ3JvdXBEaXNwbGF5ID0gYCR7Z3JvdXAubm9kZVR5cGV9ICR7Z3JvdXAubmFtZX1gO1xuICAgIGVycm9ycy5mb3JFYWNoKChlcnIpID0+IHtcbiAgICAgIC8vIExvY2F0aW9uIG9mIGZhaWxlZCB0YXJnZXQgbm9kZVxuICAgICAgY29uc3Qgc2VhcmNoSW5kZXggPSBOdW1iZXIoZXJyLnBhdGhbZXJyLnBhdGguaW5kZXhPZignZGVzY2VuZGFudFRhcmdldHMnKSArIDFdKTtcbiAgICAgIGlmIChzZWFyY2hJbmRleCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm90aWZpY2F0aW9ucy5kYW5nZXIoYENvdWxkIG5vdCAke2FjdGlvblZlcmJ9IGZvciBhIFRhcmdldCBpbiAke2dyb3VwRGlzcGxheX1gLCBlcnIubWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgbmFtZSBvZiBmYWlsZWQgdGFyZ2V0IG5vZGVcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGRhdGEuZW52aXJvbm1lbnROb2Rlc1swXT8uZGVzY2VuZGFudFRhcmdldHNbc2VhcmNoSW5kZXhdPy5uYW1lO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBub3RpZmljYXRpb25zLmRhbmdlcihgQ291bGQgbm90ICR7YWN0aW9uVmVyYn0gZm9yIFRhcmdldCAke25hbWV9IGluICR7Z3JvdXBEaXNwbGF5fWAsIGVyci5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbnMuZGFuZ2VyKGBDb3VsZCBub3QgJHthY3Rpb25WZXJifSBmb3IgYSBUYXJnZXQgaW4gJHtncm91cERpc3BsYXl9YCwgZXJyLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkRyb3Bkb3duUHJvcHMgZXh0ZW5kcyBPbWl0PERyb3Bkb3duUHJvcHMsICdpc09wZW4nIHwgJ29uU2VsZWN0JyB8ICd0b2dnbGUnPiB7XG4gIGFjdGlvbnM6IEpTWC5FbGVtZW50W107XG59XG5cbmV4cG9ydCBjb25zdCBBY3Rpb25Ecm9wZG93bjogUmVhY3QuRkM8QWN0aW9uRHJvcGRvd25Qcm9wcz4gPSAoe1xuICBjbGFzc05hbWUsXG4gIGFjdGlvbnMsXG4gIHBvc2l0aW9uLFxuICBtZW51QXBwZW5kVG8sXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IFthY3Rpb25PcGVuLCBzZXRBY3Rpb25PcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRBY3Rpb25PcGVuKGZhbHNlKSwgW3NldEFjdGlvbk9wZW5dKTtcbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25cbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y3NzKGNsYXNzTmFtZSl9XG4gICAgICBhcmlhLWxhYmVsPXsnZW50aXR5LWFjdGlvbi1tZW51J31cbiAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbiB8fCAncmlnaHQnfVxuICAgICAgbWVudUFwcGVuZFRvPXttZW51QXBwZW5kVG8gfHwgZG9jdW1lbnQuYm9keX1cbiAgICAgIG9uU2VsZWN0PXtoYW5kbGVDbG9zZX1cbiAgICAgIGlzT3Blbj17YWN0aW9uT3Blbn1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgdG9nZ2xlPXs8RHJvcGRvd25Ub2dnbGUgb25Ub2dnbGU9e3NldEFjdGlvbk9wZW59PkFjdGlvbnM8L0Ryb3Bkb3duVG9nZ2xlPn1cbiAgICAgIGRyb3Bkb3duSXRlbXM9e2FjdGlvbnN9XG4gICAgLz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IExhYmVsLCBMYWJlbEdyb3VwIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFbXB0eVRleHQgfSBmcm9tICcuLi9FbXB0eVRleHQnO1xuXG5leHBvcnQgY29uc3QgRW50aXR5QW5ub3RhdGlvbnM6IFJlYWN0LkZDPHsgYW5ub3RhdGlvbnM/OiBvYmplY3Q7IG1heERpc3BsYXk/OiBudW1iZXIgfT4gPSAoe1xuICBhbm5vdGF0aW9ucyxcbiAgbWF4RGlzcGxheSxcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgX3RyYW5zZm9ybWVkQW5ub3RhdGlvbkdyb3VwcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBhbm5vdGF0aW9uc1xuICAgICAgPyBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykubWFwKChncm91cEspID0+ICh7XG4gICAgICAgICAgZ3JvdXBMYWJlbDogZ3JvdXBLLFxuICAgICAgICAgIGFubm90YXRpb25zOiBPYmplY3Qua2V5cyhhbm5vdGF0aW9uc1tncm91cEtdKS5tYXAoKGspID0+IGAke2t9PSR7YW5ub3RhdGlvbnNbZ3JvdXBLXVtrXX1gKSxcbiAgICAgICAgfSkpXG4gICAgICA6IFtdO1xuICB9LCBbYW5ub3RhdGlvbnNdKTtcblxuICByZXR1cm4gX3RyYW5zZm9ybWVkQW5ub3RhdGlvbkdyb3Vwcy5sZW5ndGggPyAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJlbnRpdHktb3ZlcnZpZXdfX2Rpc3BsYXllZC1hbm5vdGF0aW9ucy13cmFwcGVyXCIgey4uLnByb3BzfT5cbiAgICAgIHtfdHJhbnNmb3JtZWRBbm5vdGF0aW9uR3JvdXBzLm1hcCgoZ3JvdXApID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJlbnRpdHktb3ZlcnZpZXdfX2Rpc3BsYXllZC1hbm5vdGF0aW9uc1wiIGtleT17Z3JvdXAuZ3JvdXBMYWJlbH0+XG4gICAgICAgICAgPExhYmVsR3JvdXAgbnVtTGFiZWxzPXttYXhEaXNwbGF5fSBjYXRlZ29yeU5hbWU9e2dyb3VwLmdyb3VwTGFiZWx9PlxuICAgICAgICAgICAge2dyb3VwLmFubm90YXRpb25zLm1hcCgoYSkgPT4gKFxuICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJibHVlXCIga2V5PXthfSBpc1RydW5jYXRlZD5cbiAgICAgICAgICAgICAgICB7YX1cbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvTGFiZWxHcm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8RW1wdHlUZXh0IHRleHQ9XCJObyBhbm5vdGF0aW9ucy5cIiAvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTGFiZWwsIExhYmVsR3JvdXAgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEVtcHR5VGV4dCB9IGZyb20gJy4uL0VtcHR5VGV4dCc7XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlMYWJlbHM6IFJlYWN0LkZDPHsgbGFiZWxzPzogb2JqZWN0OyBtYXhEaXNwbGF5PzogbnVtYmVyIH0+ID0gKHsgbGFiZWxzLCBtYXhEaXNwbGF5LCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IF90cmFuc2Zvcm1lZExhYmVscyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBsYWJlbHMgPyBPYmplY3Qua2V5cyhsYWJlbHMpLm1hcCgoaykgPT4gYCR7a309JHtsYWJlbHNba119YCkgOiBbXTtcbiAgfSwgW2xhYmVsc10pO1xuXG4gIHJldHVybiBfdHJhbnNmb3JtZWRMYWJlbHMubGVuZ3RoID8gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZW50aXR5LW92ZXJ2aWV3X19kaXNwbGF5ZWQtbGFiZWxzLXdyYXBwZXJcIiB7Li4ucHJvcHN9PlxuICAgICAgPExhYmVsR3JvdXAgbnVtTGFiZWxzPXttYXhEaXNwbGF5fT5cbiAgICAgICAge190cmFuc2Zvcm1lZExhYmVscy5tYXAoKGwpID0+IChcbiAgICAgICAgICA8TGFiZWwgY29sb3I9XCJibHVlXCIga2V5PXtsfSBpc1RydW5jYXRlZD5cbiAgICAgICAgICAgIHtsfVxuICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICkpfVxuICAgICAgPC9MYWJlbEdyb3VwPlxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDxFbXB0eVRleHQgdGV4dD1cIk5vIGxhYmVscy5cIiAvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3Qtc3R5bGVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IEVudGl0eVRpdGxlOiBSZWFjdC5GQzx7XG4gIGNvbnRlbnQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYmFkZ2U/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGJhZGdlVG9vbHRpcENvbnRlbnQ/OiBSZWFjdC5SZWFjdE5vZGU7XG59PiA9ICh7IGNvbnRlbnQsIGJhZGdlLCBiYWRnZVRvb2x0aXBDb250ZW50LCAuLi5wcm9wcyB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NzcygnZW50aXR5LW92ZXJ2aWV3X19lbnRpdHktdGl0bGUtd3JhcHBlcicpfSB7Li4ucHJvcHN9PlxuICAgICAge2JhZGdlID8gKFxuICAgICAgICA8VG9vbHRpcCBjb250ZW50PXtiYWRnZVRvb2x0aXBDb250ZW50fSBhcHBlbmRUbz17cG9ydGFsUm9vdH0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZW50aXR5LW92ZXJ2aWV3X19lbnRpdHktdGl0bGUtYmFkZ2VcIj57YmFkZ2V9PC9zcGFuPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICApIDogKFxuICAgICAgICA8PjwvPlxuICAgICAgKX1cbiAgICAgIHtjb250ZW50fVxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBMaW5lYXJEb3RTcGlubmVyIH0gZnJvbSAnQGFwcC9TaGFyZWQvTGluZWFyRG90U3Bpbm5lcic7XG5pbXBvcnQgeyBQcm9wZXJ0eVBhdGggfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9wZXJ0eVBhdGgnO1xuaW1wb3J0IHsgTUJlYW5NZXRyaWNzLCBNQmVhbk1ldHJpY3NSZXNwb25zZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgQWN0aW9uRHJvcGRvd24sIE5vZGVBY3Rpb24gfSBmcm9tICdAYXBwL1RvcG9sb2d5L0FjdGlvbnMvTm9kZUFjdGlvbnMnO1xuaW1wb3J0IHVzZURheWpzIGZyb20gJ0BhcHAvdXRpbHMvdXNlRGF5anMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBoYXNoQ29kZSwgcG9ydGFsUm9vdCwgc3BsaXRXb3Jkc09uVXBwZXJjYXNlIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBBbGVydCxcbiAgQWxlcnRBY3Rpb25DbG9zZUJ1dHRvbixcbiAgQmFkZ2UsXG4gIEJ1bGxzZXllLFxuICBDYXJkLFxuICBDYXJkQm9keSxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBEZXNjcmlwdGlvbkxpc3QsXG4gIERpdmlkZXIsXG4gIEV4cGFuZGFibGVTZWN0aW9uLFxuICBGbGV4LFxuICBGbGV4SXRlbSxcbiAgU3RhY2ssXG4gIFN0YWNrSXRlbSxcbiAgVGFiLFxuICBUYWJzLFxuICBUYWJUaXRsZVRleHQsXG4gIFRvb2x0aXAsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgV2FybmluZ1RyaWFuZ2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgeyBFeHBhbmRhYmxlUm93Q29udGVudCwgVGFibGVDb21wb3NhYmxlLCBUYm9keSwgVGQsIFRoLCBUaGVhZCwgVHIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgeyBHcmFwaEVsZW1lbnQsIE5vZGVTdGF0dXMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10b3BvbG9neSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzUmVuZGVyYWJsZSB9IGZyb20gJy4uLy4uL0dyYXBoVmlldy9VdGlsc0ZhY3RvcnknO1xuaW1wb3J0IHsgRW52aXJvbm1lbnROb2RlLCBpc1RhcmdldE5vZGUsIFRhcmdldE5vZGUgfSBmcm9tICcuLi8uLi90eXBpbmdzJztcbmltcG9ydCB7IEVtcHR5VGV4dCB9IGZyb20gJy4uL0VtcHR5VGV4dCc7XG5pbXBvcnQgeyBhY3Rpb25GYWN0b3J5LCBnZXRTdGF0dXNUYXJnZXROb2RlLCBMaXN0RWxlbWVudCwgbm9kZVR5cGVUb0FiYnIsIFN0YXR1c0V4dHJhIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRW50aXR5QW5ub3RhdGlvbnMgfSBmcm9tICcuL0VudGl0eUFubm90YXRpb25zJztcbmltcG9ydCB7IEVudGl0eUxhYmVscyB9IGZyb20gJy4vRW50aXR5TGFiZWxzJztcbmltcG9ydCB7IEVudGl0eVRpdGxlIH0gZnJvbSAnLi9FbnRpdHlUaXRsZSc7XG5pbXBvcnQge1xuICBEZXNjcmlwdGlvbkNvbmZpZyxcbiAgZ2V0RXhwYW5kZWRSZXNvdXJjZURldGFpbHMsXG4gIGdldExpbmtQcm9wc0ZvclRhcmdldFJlc291cmNlLFxuICBtYXBTZWN0aW9uLFxuICBOb3RoaW5nLFxuICBUYXJnZXRPd25lZFJlc291cmNlVHlwZSxcbiAgVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGVBc0FycmF5LFxuICBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlLFxuICBUYXJnZXRSZWxhdGVkUmVzb3VyY2VUeXBlQXNBcnJheSxcbiAgdXNlUmVzb3VyY2VzLFxufSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlEZXRhaWxzUHJvcHMge1xuICBlbnRpdHk/OiBHcmFwaEVsZW1lbnQgfCBMaXN0RWxlbWVudDtcbiAgY29sdW1uTW9kaWZpZXI/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGVzY3JpcHRpb25MaXN0PlsnY29sdW1uTW9kaWZpZXInXTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBhbGVydE9wdGlvbnM/OiBBbGVydE9wdGlvbnM7XG4gIGFjdGlvbkZpbHRlcj86IChfOiBOb2RlQWN0aW9uKSA9PiBib29sZWFuO1xufVxuXG5lbnVtIEVudGl0eVRhYiB7XG4gIERFVEFJTCA9ICdkZXRhaWwnLFxuICBSRVNPVVJDRSA9ICdyZXNvdXJjZScsXG59XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlEZXRhaWxzOiBSZWFjdC5GQzxFbnRpdHlEZXRhaWxzUHJvcHM+ID0gKHtcbiAgZW50aXR5LFxuICBjbGFzc05hbWUsXG4gIGNvbHVtbk1vZGlmaWVyLFxuICBhY3Rpb25GaWx0ZXIsXG4gIGFsZXJ0T3B0aW9ucyxcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IFJlYWN0LnVzZVN0YXRlKEVudGl0eVRhYi5ERVRBSUwpO1xuICBjb25zdCB2aWV3Q29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChlbnRpdHkgJiYgaXNSZW5kZXJhYmxlKGVudGl0eSkpIHtcbiAgICAgIGNvbnN0IGRhdGE6IEVudmlyb25tZW50Tm9kZSB8IFRhcmdldE5vZGUgPSBlbnRpdHkuZ2V0RGF0YSgpO1xuICAgICAgY29uc3QgaXNUYXJnZXQgPSBpc1RhcmdldE5vZGUoZGF0YSk7XG4gICAgICBjb25zdCB0aXRsZUNvbnRlbnQgPSBpc1RhcmdldCA/IGRhdGEudGFyZ2V0LmFsaWFzIDogZGF0YS5uYW1lO1xuXG4gICAgICBjb25zdCBfYWN0aW9ucyA9IGFjdGlvbkZhY3RvcnkoZW50aXR5LCAnZHJvcGRvd25JdGVtJywgYWN0aW9uRmlsdGVyKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8RW50aXR5RGV0YWlsSGVhZGVyXG4gICAgICAgICAgICB0aXRsZUNvbnRlbnQ9e3RpdGxlQ29udGVudH1cbiAgICAgICAgICAgIGFsZXJ0T3B0aW9ucz17YWxlcnRPcHRpb25zfVxuICAgICAgICAgICAgYmFkZ2U9e25vZGVUeXBlVG9BYmJyKGRhdGEubm9kZVR5cGUpfVxuICAgICAgICAgICAgYmFkZ2VUb29sdGlwQ29udGVudD17ZGF0YS5ub2RlVHlwZX1cbiAgICAgICAgICAgIHN0YXR1cz17aXNUYXJnZXQgPyBnZXRTdGF0dXNUYXJnZXROb2RlKGRhdGEpIDogW119XG4gICAgICAgICAgICBhY3Rpb25Ecm9wZG93bj17XG4gICAgICAgICAgICAgIF9hY3Rpb25zLmxlbmd0aCA/IDxBY3Rpb25Ecm9wZG93biBhY3Rpb25zPXtfYWN0aW9uc30gY2xhc3NOYW1lPXsnZW50aXR5LW92ZXJ2aWV3X19hY3Rpb24tbWVudSd9IC8+IDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICA8VGFicyBhY3RpdmVLZXk9e2FjdGl2ZVRhYn0gb25TZWxlY3Q9eyhfLCB0YWI6IHN0cmluZykgPT4gc2V0QWN0aXZlVGFiKHRhYiBhcyBFbnRpdHlUYWIpfT5cbiAgICAgICAgICAgIDxUYWIgZXZlbnRLZXk9e0VudGl0eVRhYi5ERVRBSUx9IHRpdGxlPXs8VGFiVGl0bGVUZXh0PkRldGFpbHM8L1RhYlRpdGxlVGV4dD59PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImVudGl0eS1vdmVydmlld19fd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIHtpc1RhcmdldCA/IChcbiAgICAgICAgICAgICAgICAgIDxUYXJnZXREZXRhaWxzIHRhcmdldE5vZGU9e2RhdGF9IGNvbHVtbk1vZGlmaWVyPXtjb2x1bW5Nb2RpZmllcn0gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPEdyb3VwRGV0YWlscyBlbnZOb2RlPXtkYXRhfSBjb2x1bW5Nb2RpZmllcj17Y29sdW1uTW9kaWZpZXJ9IC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1RhYj5cbiAgICAgICAgICAgIDxUYWIgZXZlbnRLZXk9e0VudGl0eVRhYi5SRVNPVVJDRX0gdGl0bGU9ezxUYWJUaXRsZVRleHQ+eydSZXNvdXJjZXMnfTwvVGFiVGl0bGVUZXh0Pn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZW50aXR5LW92ZXJ2aWV3X193cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAge2lzVGFyZ2V0ID8gPFRhcmdldFJlc291cmNlcyB0YXJnZXROb2RlPXtkYXRhfSAvPiA6IDxHcm91cFJlc291cmNlcyBlbnZOb2RlPXtkYXRhfSAvPn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1RhYj5cbiAgICAgICAgICA8L1RhYnM+XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFtlbnRpdHksIHNldEFjdGl2ZVRhYiwgYWN0aXZlVGFiLCBjb2x1bW5Nb2RpZmllciwgYWN0aW9uRmlsdGVyLCBhbGVydE9wdGlvbnNdKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5wcm9wc30gY2xhc3NOYW1lPXtjc3MoJ2VudGl0eS1vdmVydmlldycsIGNsYXNzTmFtZSl9PlxuICAgICAge3ZpZXdDb250ZW50fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEhlbHBlckRlc2NyaXB0aW9uID0gKGRlc2NyaXB0aW9uOiBSZWFjdC5SZWFjdE5vZGUsIGtpbmQ6IHN0cmluZywgcGF0aDogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgPFN0YWNrSXRlbT57ZGVzY3JpcHRpb259PC9TdGFja0l0ZW0+XG4gICAgICA8U3RhY2tJdGVtPlxuICAgICAgICA8UHJvcGVydHlQYXRoIGtpbmQ9e2tpbmR9IHBhdGg9e3BhdGh9IC8+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFRhcmdldERldGFpbHM6IFJlYWN0LkZDPHtcbiAgdGFyZ2V0Tm9kZTogVGFyZ2V0Tm9kZTtcbiAgY29sdW1uTW9kaWZpZXI/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGVzY3JpcHRpb25MaXN0PlsnY29sdW1uTW9kaWZpZXInXTtcbn0+ID0gKHsgdGFyZ2V0Tm9kZSwgY29sdW1uTW9kaWZpZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3Qgc2VydmljZVJlZiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gdGFyZ2V0Tm9kZS50YXJnZXQsIFt0YXJnZXROb2RlXSk7XG4gIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgX3RyYW5zZm9ybWVkRGF0YSA9IFJlYWN0LnVzZU1lbW8oKCk6IERlc2NyaXB0aW9uQ29uZmlnW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtleTogJ0Nvbm5lY3Rpb24gVVJMJyxcbiAgICAgICAgdGl0bGU6ICdDb25uZWN0aW9uIFVSTCcsXG4gICAgICAgIGhlbHBlclRpdGxlOiAnQ29ubmVjdGlvbiBVUkwnLFxuICAgICAgICBoZWxwZXJEZXNjcmlwdGlvbjogY29uc3RydWN0SGVscGVyRGVzY3JpcHRpb24oJ0pNWCBTZXJ2aWNlIFVSTC4nLCAnVGFyZ2V0JywgWydjb25uZWN0VXJsJ10pLFxuICAgICAgICBjb250ZW50OiBzZXJ2aWNlUmVmLmNvbm5lY3RVcmwsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdBbGlhcycsXG4gICAgICAgIHRpdGxlOiAnQWxpYXMnLFxuICAgICAgICBoZWxwZXJUaXRsZTogJ0FsaWFzJyxcbiAgICAgICAgaGVscGVyRGVzY3JpcHRpb246IGNvbnN0cnVjdEhlbHBlckRlc2NyaXB0aW9uKFxuICAgICAgICAgICdDb25uZWN0aW9uIE5pY2tuYW1lIChzYW1lIGFzIENvbm5lY3Rpb24gVVJMIGlmIG5vdCBzcGVjaWZpZWQpLicsXG4gICAgICAgICAgJ1RhcmdldCcsXG4gICAgICAgICAgWydhbGlhcyddXG4gICAgICAgICksXG4gICAgICAgIGNvbnRlbnQ6IHNlcnZpY2VSZWYuYWxpYXMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdKVk0gSUQnLFxuICAgICAgICB0aXRsZTogJ0pWTSBJRCcsXG4gICAgICAgIGhlbHBlclRpdGxlOiAnSlZNIElEJyxcbiAgICAgICAgaGVscGVyRGVzY3JpcHRpb246IGNvbnN0cnVjdEhlbHBlckRlc2NyaXB0aW9uKCdUaGUgSUQgb2YgdGhlIGN1cnJlbnQgSlZNLicsICdUYXJnZXQnLCBbJ2p2bUlkJ10pLFxuICAgICAgICBjb250ZW50OiBzZXJ2aWNlUmVmLmp2bUlkIHx8IDxFbXB0eVRleHQgdGV4dD1cIk5vIEpWTSBJRFwiIC8+LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnTGFiZWxzJyxcbiAgICAgICAgdGl0bGU6ICdMYWJlbHMnLFxuICAgICAgICBoZWxwZXJUaXRsZTogJ0xhYmVscycsXG4gICAgICAgIGhlbHBlckRlc2NyaXB0aW9uOiBjb25zdHJ1Y3RIZWxwZXJEZXNjcmlwdGlvbihcbiAgICAgICAgICAnTWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSB0YXJnZXRzLicsXG4gICAgICAgICAgJ1RhcmdldCcsXG4gICAgICAgICAgWydsYWJlbHMnXVxuICAgICAgICApLFxuICAgICAgICBjb250ZW50OiA8RW50aXR5TGFiZWxzIGxhYmVscz17c2VydmljZVJlZi5sYWJlbHN9IG1heERpc3BsYXk9ezN9IC8+LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnQW5ub3RhdGlvbnMnLFxuICAgICAgICB0aXRsZTogJ0Fubm90YXRpb25zJyxcbiAgICAgICAgaGVscGVyVGl0bGU6ICdBbm5vdGF0aW9ucycsXG4gICAgICAgIGhlbHBlckRlc2NyaXB0aW9uOiBjb25zdHJ1Y3RIZWxwZXJEZXNjcmlwdGlvbihcbiAgICAgICAgICAnQW5ub3RhdGlvbnMgaXMgYW4gdW5zdHJ1Y3R1cmVkIGtleSB2YWx1ZSBtYXAgc3RvcmVkIHdpdGggYSB0YXJnZXQgdGhhdCBtYXkgYmUgc2V0IGJ5IGV4dGVybmFsIHRvb2xzLicsXG4gICAgICAgICAgJ1RhcmdldCcsXG4gICAgICAgICAgWydhbm5vdGF0aW9ucyddXG4gICAgICAgICksXG4gICAgICAgIGNvbnRlbnQ6IDxFbnRpdHlBbm5vdGF0aW9ucyBhbm5vdGF0aW9ucz17c2VydmljZVJlZi5hbm5vdGF0aW9uc30gbWF4RGlzcGxheT17M30gLz4sXG4gICAgICB9LFxuICAgIF07XG4gIH0sIFtzZXJ2aWNlUmVmXSk7XG5cbiAgY29uc3Qgb25Ub2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRFeHBhbmRlZCgodikgPT4gIXYpLCBbc2V0RXhwYW5kZWRdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RGVzY3JpcHRpb25MaXN0IHsuLi5wcm9wc30gY29sdW1uTW9kaWZpZXI9e2NvbHVtbk1vZGlmaWVyfT5cbiAgICAgICAge190cmFuc2Zvcm1lZERhdGEubWFwKG1hcFNlY3Rpb24pfVxuICAgICAgPC9EZXNjcmlwdGlvbkxpc3Q+XG4gICAgICA8RXhwYW5kYWJsZVNlY3Rpb25cbiAgICAgICAgdG9nZ2xlVGV4dD17aXNFeHBhbmRlZCA/ICdTaG93IGxlc3MnIDogJ1Nob3cgbW9yZSd9XG4gICAgICAgIG9uVG9nZ2xlPXtvblRvZ2dsZX1cbiAgICAgICAgaXNFeHBhbmRlZD17aXNFeHBhbmRlZH1cbiAgICAgID5cbiAgICAgICAgPE1CZWFuRGV0YWlscyBpc0V4cGFuZGVkPXtpc0V4cGFuZGVkfSBjb25uZWN0VXJsPXtzZXJ2aWNlUmVmLmNvbm5lY3RVcmx9IGNvbHVtbk1vZGlmaWVyPXtjb2x1bW5Nb2RpZmllcn0gLz5cbiAgICAgIDwvRXhwYW5kYWJsZVNlY3Rpb24+XG4gICAgPC8+XG4gICk7XG59O1xuXG5jb25zdCBNQmVhbkRldGFpbHM6IFJlYWN0LkZDPHtcbiAgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgY29ubmVjdFVybDogc3RyaW5nO1xuICBjb2x1bW5Nb2RpZmllcj86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEZXNjcmlwdGlvbkxpc3Q+Wydjb2x1bW5Nb2RpZmllciddO1xufT4gPSAoeyBpc0V4cGFuZGVkLCBjb25uZWN0VXJsLCBjb2x1bW5Nb2RpZmllciB9KSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2RheWpzLCBkYXRlVGltZUZvcm1hdF0gPSB1c2VEYXlqcygpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IFttYmVhbk1ldHJpY3MsIHNldE1iZWFuTWV0cmljc10gPSBSZWFjdC51c2VTdGF0ZSh7fSBhcyBNQmVhbk1ldHJpY3MpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgY29udGV4dC5hcGlcbiAgICAgICAgICAuZ3JhcGhxbDxNQmVhbk1ldHJpY3NSZXNwb25zZT4oXG4gICAgICAgICAgICBgXG4gICAgICAgICAgICBxdWVyeSBNQmVhbk1YTWV0cmljc0ZvclRhcmdldCgkY29ubmVjdFVybDogU3RyaW5nKSB7XG4gICAgICAgICAgICAgIHRhcmdldE5vZGVzKGZpbHRlcjogeyBuYW1lOiAkY29ubmVjdFVybCB9KSB7XG4gICAgICAgICAgICAgICAgbWJlYW5NZXRyaWNzIHtcbiAgICAgICAgICAgICAgICAgIHJ1bnRpbWUge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWVcbiAgICAgICAgICAgICAgICAgICAgdm1WZW5kb3JcbiAgICAgICAgICAgICAgICAgICAgdm1WZXJzaW9uXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvcyB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgYXJjaFxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVQcm9jZXNzb3JzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICAgIHsgY29ubmVjdFVybCB9XG4gICAgICAgICAgKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwKSA9PiByZXNwLmRhdGEudGFyZ2V0Tm9kZXNbMF0ubWJlYW5NZXRyaWNzIHx8IHt9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKF8pID0+IG9mKHt9KSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZShzZXRNYmVhbk1ldHJpY3MpXG4gICAgICApO1xuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGFkZFN1YnNjcmlwdGlvbiwgY29ubmVjdFVybCwgY29udGV4dC5hcGksIHNldE1iZWFuTWV0cmljc10pO1xuXG4gIGNvbnN0IF9jb2xsYXBzZWREYXRhID0gUmVhY3QudXNlTWVtbygoKTogRGVzY3JpcHRpb25Db25maWdbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnU3RhcnQgVGltZScsXG4gICAgICAgIHRpdGxlOiAnU3RhcnQgVGltZScsXG4gICAgICAgIGhlbHBlclRpdGxlOiAnU3RhcnQgVGltZScsXG4gICAgICAgIGhlbHBlckRlc2NyaXB0aW9uOiAnVGhlIHRpbWUgd2hlbiB0aGlzIEpWTSBwcm9jZXNzIHN0YXJ0ZWQuJyxcbiAgICAgICAgY29udGVudDpcbiAgICAgICAgICAobWJlYW5NZXRyaWNzPy5ydW50aW1lPy5zdGFydFRpbWUgfHwgMCkgPiAwID8gKFxuICAgICAgICAgICAgZGF5anMobWJlYW5NZXRyaWNzPy5ydW50aW1lPy5zdGFydFRpbWUpLnR6KGRhdGVUaW1lRm9ybWF0LnRpbWVab25lLmZ1bGwpLmZvcm1hdCgnTExMTCcpXG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxFbXB0eVRleHQgdGV4dD1cIlVua25vd24gc3RhcnQgdGltZVwiIC8+XG4gICAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ0pWTSBWZXJzaW9uJyxcbiAgICAgICAgdGl0bGU6ICdKVk0gVmVyc2lvbicsXG4gICAgICAgIGhlbHBlclRpdGxlOiAnSlZNIFZlcnNpb24nLFxuICAgICAgICBoZWxwZXJEZXNjcmlwdGlvbjogJ1RoZSB2ZXJzaW9uIG9mIHRoZSBKVk0uJyxcbiAgICAgICAgY29udGVudDogbWJlYW5NZXRyaWNzLnJ1bnRpbWU/LnZtVmVyc2lvbiB8fCA8RW1wdHlUZXh0IHRleHQ9XCJVbmtub3duIEpWTSB2ZXJzaW9uXCIgLz4sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdKVk0gVmVuZG9yJyxcbiAgICAgICAgdGl0bGU6ICdKVk0gVmVuZG9yJyxcbiAgICAgICAgaGVscGVyVGl0bGU6ICdKVk0gVmVuZG9yJyxcbiAgICAgICAgaGVscGVyRGVzY3JpcHRpb246ICdUaGUgdmVuZG9yIHdobyBzdXBwbGllZCB0aGlzIEpWTScsXG4gICAgICAgIGNvbnRlbnQ6IG1iZWFuTWV0cmljcy5ydW50aW1lPy52bVZlbmRvciB8fCA8RW1wdHlUZXh0IHRleHQ9XCJVbmtub3duIEpWTSB2ZW5kb3JcIiAvPixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ09wZXJhdGluZyBTeXN0ZW0gQXJjaGl0ZWN0dXJlJyxcbiAgICAgICAgdGl0bGU6ICdPcGVyYXRpbmcgU3lzdGVtIEFyY2hpdGVjdHVyZScsXG4gICAgICAgIGhlbHBlclRpdGxlOiAnT3BlcmF0aW5nIFN5c3RlbSBBcmNoaXRlY3R1cmUnLFxuICAgICAgICBoZWxwZXJEZXNjcmlwdGlvbjogJ1RoZSBDUFUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBob3N0IHN5c3RlbS4nLFxuICAgICAgICBjb250ZW50OiBtYmVhbk1ldHJpY3Mub3M/LmFyY2ggfHwgPEVtcHR5VGV4dCB0ZXh0PVwiVW5rbm93biBvcGVyYXRpbmcgc3lzdGVtIGFyY2hpdGVjdHVyZVwiIC8+LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnT3BlcmF0aW5nIFN5c3RlbSBWZXJzaW9uJyxcbiAgICAgICAgdGl0bGU6ICdPcGVyYXRpbmcgU3lzdGVtIFZlcnNpb24nLFxuICAgICAgICBoZWxwZXJUaXRsZTogJ09wZXJhdGluZyBTeXN0ZW0gVmVyc2lvbicsXG4gICAgICAgIGhlbHBlckRlc2NyaXB0aW9uOiAnVGhlIHZlcnNpb24gb2YgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4nLFxuICAgICAgICBjb250ZW50OiBtYmVhbk1ldHJpY3Mub3M/LnZlcnNpb24gfHwgPEVtcHR5VGV4dCB0ZXh0PVwiVW5rbm93biBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25cIiAvPixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ0F2YWlsYWJsZSBQcm9jZXNzb3JzJyxcbiAgICAgICAgdGl0bGU6ICdBdmFpbGFibGUgUHJvY2Vzc29ycycsXG4gICAgICAgIGhlbHBlclRpdGxlOiAnQXZhaWxhYmxlIFByb2Nlc3NvcnMnLFxuICAgICAgICBoZWxwZXJEZXNjcmlwdGlvbjogJ1RoZSBjb3VudCBvZiB0b3RhbCBwcm9jZXNzb3JzIGF2YWlsYWJsZSB0byB0aGUgSlZNIHByb2Nlc3Mgb24gaXRzIGhvc3QuJyxcbiAgICAgICAgY29udGVudDogbWJlYW5NZXRyaWNzLm9zPy5hdmFpbGFibGVQcm9jZXNzb3JzIHx8IDxFbXB0eVRleHQgdGV4dD1cIlVua25vd24gbnVtYmVyIG9mIHByb2Nlc3NvcnNcIiAvPixcbiAgICAgIH0sXG4gICAgXTtcbiAgfSwgW21iZWFuTWV0cmljcywgZGF5anMsIGRhdGVUaW1lRm9ybWF0LnRpbWVab25lLmZ1bGxdKTtcblxuICByZXR1cm4gPERlc2NyaXB0aW9uTGlzdCBjb2x1bW5Nb2RpZmllcj17Y29sdW1uTW9kaWZpZXJ9PntfY29sbGFwc2VkRGF0YS5tYXAobWFwU2VjdGlvbil9PC9EZXNjcmlwdGlvbkxpc3Q+O1xufTtcblxuZXhwb3J0IGNvbnN0IEdyb3VwRGV0YWlsczogUmVhY3QuRkM8e1xuICBlbnZOb2RlOiBFbnZpcm9ubWVudE5vZGU7XG4gIGNvbHVtbk1vZGlmaWVyPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERlc2NyaXB0aW9uTGlzdD5bJ2NvbHVtbk1vZGlmaWVyJ107XG59PiA9ICh7IGVudk5vZGUsIGNvbHVtbk1vZGlmaWVyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IF90cmFuc2Zvcm1lZERhdGEgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdOYW1lJyxcbiAgICAgICAgdGl0bGU6ICdOYW1lJyxcbiAgICAgICAgaGVscGVyVGl0bGU6ICdOYW1lJyxcbiAgICAgICAgaGVscGVyRGVzY3JpcHRpb246ICdOYW1lIG9mIFJlYWxtIChncm91cCkgcmVwcmVzZW50aW5nIGEgdGFyZ2V0IGRpc2NvdmVyeSBtZWNoYW5pc20uJyxcbiAgICAgICAgY29udGVudDogZW52Tm9kZS5uYW1lLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnTGFiZWxzJyxcbiAgICAgICAgdGl0bGU6ICdMYWJlbHMnLFxuICAgICAgICBoZWxwZXJUaXRsZTogJ0xhYmVscycsXG4gICAgICAgIGhlbHBlckRlc2NyaXB0aW9uOiAnTWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSB0YXJnZXRzLicsXG4gICAgICAgIGNvbnRlbnQ6IDxFbnRpdHlMYWJlbHMgbGFiZWxzPXtlbnZOb2RlLmxhYmVsc30gLz4sXG4gICAgICB9LFxuICAgIF07XG4gIH0sIFtlbnZOb2RlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGVzY3JpcHRpb25MaXN0IHsuLi5wcm9wc30gY29sdW1uTW9kaWZpZXI9e2NvbHVtbk1vZGlmaWVyfT5cbiAgICAgIHtfdHJhbnNmb3JtZWREYXRhLm1hcChtYXBTZWN0aW9uKX1cbiAgICA8L0Rlc2NyaXB0aW9uTGlzdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBUYXJnZXRSZXNvdXJjZXM6IFJlYWN0LkZDPHsgdGFyZ2V0Tm9kZTogVGFyZ2V0Tm9kZSB9PiA9ICh7IHRhcmdldE5vZGUsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IHRhcmdldCA9IHRhcmdldE5vZGUudGFyZ2V0O1xuXG4gIGNvbnN0IFthZ2VudERldGVjdGVkLCBzZXRBZ2VudERldGVjdGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjaGVja0lmQWdlbnREZXRlY3RlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaVxuICAgICAgICAuZG9HZXQoYHRhcmdldHMvJHtlbmNvZGVVUklDb21wb25lbnQodGFyZ2V0LmNvbm5lY3RVcmwpfS9wcm9iZXNgLCAndjInLCB1bmRlZmluZWQsIHRydWUsIHRydWUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBvZih0cnVlKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihmYWxzZSkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzZXRBZ2VudERldGVjdGVkKVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCBzZXRBZ2VudERldGVjdGVkLCB0YXJnZXRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoY2hlY2tJZkFnZW50RGV0ZWN0ZWQsIFtjaGVja0lmQWdlbnREZXRlY3RlZF0pO1xuXG4gIGNvbnN0IHRhYmxlQ29uZmlncyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ093bmVkIFJlc291cmNlcycsXG4gICAgICAgIGNvbHVtbnM6IFsnUmVzb3VyY2UnLCAnVG90YWwnXSxcbiAgICAgICAgcm93RGF0YTogVGFyZ2V0T3duZWRSZXNvdXJjZVR5cGVBc0FycmF5LmZpbHRlcigocikgPT4gYWdlbnREZXRlY3RlZCB8fCByICE9PSAnYWdlbnRQcm9iZXMnKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnUmVsYXRlZCBSZXNvdXJjZXMnLFxuICAgICAgICBjb2x1bW5zOiBbJ1Jlc291cmNlJywgJ01hdGNoaW5nIFRvdGFsJ10sXG4gICAgICAgIHJvd0RhdGE6IFRhcmdldFJlbGF0ZWRSZXNvdXJjZVR5cGVBc0FycmF5LFxuICAgICAgfSxcbiAgICBdLFxuICAgIFthZ2VudERldGVjdGVkXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFN0YWNrIHsuLi5wcm9wc30gaGFzR3V0dGVyPlxuICAgICAge3RhYmxlQ29uZmlncy5tYXAoKHsgdGl0bGUsIGNvbHVtbnMsIHJvd0RhdGEgfSkgPT4gKFxuICAgICAgICA8U3RhY2tJdGVtIGtleT17dGl0bGV9PlxuICAgICAgICAgIDxDYXJkIGlzQ29tcGFjdCBpc0ZsYXQgaXNSb3VuZGVkPlxuICAgICAgICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGU+e3RpdGxlfTwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRCb2R5PlxuICAgICAgICAgICAgICA8VGFibGVDb21wb3NhYmxlIHZhcmlhbnQ9XCJjb21wYWN0XCIgYm9yZGVycz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxUaGVhZD5cbiAgICAgICAgICAgICAgICAgIDxUcj5cbiAgICAgICAgICAgICAgICAgICAgPFRoIC8+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VGgga2V5PXtjb2x9IHRleHRDZW50ZXI9e2lkeCA+IDB9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RoPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgICAgICAgPC9UaGVhZD5cbiAgICAgICAgICAgICAgICB7cm93RGF0YS5tYXAoKHZhbCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRhcmdldFJlc291cmNlSXRlbSBrZXk9e3ZhbH0gdGFyZ2V0Tm9kZT17dGFyZ2V0Tm9kZX0gcmVzb3VyY2VUeXBlPXt2YWx9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvVGFibGVDb21wb3NhYmxlPlxuICAgICAgICAgICAgPC9DYXJkQm9keT5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgKSl9XG4gICAgPC9TdGFjaz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBUYXJnZXRSZXNvdXJjZUl0ZW06IFJlYWN0LkZDPHtcbiAgdGFyZ2V0Tm9kZTogVGFyZ2V0Tm9kZTtcbiAgcmVzb3VyY2VUeXBlOiBUYXJnZXRPd25lZFJlc291cmNlVHlwZSB8IFRhcmdldFJlbGF0ZWRSZXNvdXJjZVR5cGU7XG59PiA9ICh7IHRhcmdldE5vZGUsIHJlc291cmNlVHlwZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBzZXJ2aWNlcyA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCB7IHJlc291cmNlcywgZXJyb3IsIGxvYWRpbmcgfSA9IHVzZVJlc291cmNlcyh0YXJnZXROb2RlLCByZXNvdXJjZVR5cGUpO1xuXG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHN3aXRjaFRhcmdldCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICgpID0+IHNlcnZpY2VzLnRhcmdldC5zZXRUYXJnZXQodGFyZ2V0Tm9kZS50YXJnZXQpLFxuICAgIFt0YXJnZXROb2RlLnRhcmdldCwgc2VydmljZXMudGFyZ2V0XVxuICApO1xuXG4gIGNvbnN0IEV4cGFuZGVkQ29tcG9uZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGVycm9yIHx8IGxvYWRpbmcpIHtcbiAgICAgIHJldHVybiBOb3RoaW5nO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RXhwYW5kZWRSZXNvdXJjZURldGFpbHMocmVzb3VyY2VUeXBlKTtcbiAgfSwgW3Jlc291cmNlVHlwZSwgZXJyb3IsIGxvYWRpbmddKTtcblxuICByZXR1cm4gKFxuICAgIDxUYm9keSBpc0V4cGFuZGVkPXtFeHBhbmRlZENvbXBvbmVudCAhPT0gbnVsbCAmJiBleHBhbmRlZH0+XG4gICAgICA8VHIgey4uLnByb3BzfT5cbiAgICAgICAgPFRkXG4gICAgICAgICAgZXhwYW5kPXt7XG4gICAgICAgICAgICByb3dJbmRleDogaGFzaENvZGUoYCR7dGFyZ2V0Tm9kZS5uYW1lfS0ke3Jlc291cmNlVHlwZX1gKSxcbiAgICAgICAgICAgIGlzRXhwYW5kZWQ6IGV4cGFuZGVkLFxuICAgICAgICAgICAgb25Ub2dnbGU6ICgpID0+IHNldEV4cGFuZGVkKChvbGQpID0+ICFvbGQpLFxuICAgICAgICAgICAgZXhwYW5kSWQ6IGAke3RhcmdldE5vZGUubmFtZX0tJHtyZXNvdXJjZVR5cGV9LWV4cGFuZGVkLWRldGFpbGAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRkIGtleT17YCR7cmVzb3VyY2VUeXBlfS1yZXNvdXJjZS1uYW1lYH0gZGF0YUxhYmVsPXsnUmVzb3VyY2UnfT5cbiAgICAgICAgICB7XG4gICAgICAgICAgICA8TGluayB7Li4uZ2V0TGlua1Byb3BzRm9yVGFyZ2V0UmVzb3VyY2UocmVzb3VyY2VUeXBlKX0gb25DbGljaz17c3dpdGNoVGFyZ2V0fT5cbiAgICAgICAgICAgICAge3NwbGl0V29yZHNPblVwcGVyY2FzZShyZXNvdXJjZVR5cGUsIHRydWUpLmpvaW4oJyAnKX1cbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2Ake3Jlc291cmNlVHlwZX0tcmVzb3VyY2UtY291bnRgfSBkYXRhTGFiZWw9eydUb3RhbCd9IHRleHRDZW50ZXI+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8QnVsbHNleWU+XG4gICAgICAgICAgICAgIDxMaW5lYXJEb3RTcGlubmVyIC8+XG4gICAgICAgICAgICA8L0J1bGxzZXllPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxUb29sdGlwIGNvbnRlbnQ9e2Vycm9yLm1lc3NhZ2V9IGFwcGVuZFRvPXtwb3J0YWxSb290fT5cbiAgICAgICAgICAgICAgPFdhcm5pbmdUcmlhbmdsZUljb24gY29sb3I9XCJ2YXIoLS1wZi1nbG9iYWwtLXdhcm5pbmctY29sb3ItLTEwMClcIiAvPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8QmFkZ2U+e3Jlc291cmNlcy5sZW5ndGh9PC9CYWRnZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L1RkPlxuICAgICAgPC9Ucj5cbiAgICAgIDxUciBpc0V4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgIDxUZCBjb2xTcGFuPXszfT5cbiAgICAgICAgICA8RXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgICAgICA8RXhwYW5kZWRDb21wb25lbnQgcmVzb3VyY2VzPXtyZXNvdXJjZXN9IC8+XG4gICAgICAgICAgPC9FeHBhbmRhYmxlUm93Q29udGVudD5cbiAgICAgICAgPC9UZD5cbiAgICAgIDwvVHI+XG4gICAgPC9UYm9keT5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBHcm91cFJlc291cmNlczogUmVhY3QuRkM8eyBlbnZOb2RlOiBFbnZpcm9ubWVudE5vZGUgfT4gPSAoeyBlbnZOb2RlLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGNvbnRlbnRzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGVudk5vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgaXNUYXJnZXQgPSBpc1RhcmdldE5vZGUoY2hpbGQpO1xuICAgICAgY29uc3QgW3N0YXR1cywgZXh0cmFdID0gZ2V0U3RhdHVzVGFyZ2V0Tm9kZShjaGlsZCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDYXJkIGlzRmxhdCBpc0NvbXBhY3Qga2V5PXtjaGlsZC5uYW1lfT5cbiAgICAgICAgICA8Q2FyZEJvZHk+XG4gICAgICAgICAgICA8RmxleD5cbiAgICAgICAgICAgICAgPEZsZXhJdGVtIGZsZXg9e3sgZGVmYXVsdDogJ2ZsZXhfMScgfX0+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgY29udGVudD17aXNUYXJnZXQgPyBjaGlsZC50YXJnZXQuY29ubmVjdFVybCA6IGNoaWxkLm5hbWV9IGFwcGVuZFRvPXtwb3J0YWxSb290fT5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxCYWRnZT57bm9kZVR5cGVUb0FiYnIoY2hpbGQubm9kZVR5cGUpfTwvQmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0+e2lzVGFyZ2V0ID8gY2hpbGQudGFyZ2V0LmFsaWFzIDogY2hpbGQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgICAgIHtzdGF0dXMgPT09IE5vZGVTdGF0dXMud2FybmluZyA/IChcbiAgICAgICAgICAgICAgICA8RmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcCBjb250ZW50PXtleHRyYT8udGl0bGV9IGFwcGVuZFRvPXtwb3J0YWxSb290fT5cbiAgICAgICAgICAgICAgICAgICAgPFdhcm5pbmdUcmlhbmdsZUljb24gY29sb3I9XCJ2YXIoLS1wZi1nbG9iYWwtLXdhcm5pbmctY29sb3ItLTEwMClcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgIDwvQ2FyZD5cbiAgICAgICk7XG4gICAgfSk7XG4gIH0sIFtlbnZOb2RlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3RhY2sgaGFzR3V0dGVyIHsuLi5wcm9wc30+XG4gICAgICA8U3RhY2tJdGVtIGtleT17MH0+XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRXZWlnaHQ6ICc3MDAnIH19Pk51bWJlciBvZiBjaGlsZHJlbiBvZiB0aGlzIGdyb3VwOjwvc3Bhbj5cbiAgICAgICAgPEJhZGdlIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0+e2Vudk5vZGUuY2hpbGRyZW4ubGVuZ3RofTwvQmFkZ2U+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIHtjb250ZW50cy5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgICA8U3RhY2tJdGVtIGtleT17aWR4ICsgMX0+e2NvbnRlbnR9PC9TdGFja0l0ZW0+XG4gICAgICApKX1cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBbGVydE9wdGlvbnMge1xuICBoaWRlQWN0aW9ucz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5RGV0YWlsSGVhZGVyUHJvcHMge1xuICB0aXRsZUNvbnRlbnQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYmFkZ2VUb29sdGlwQ29udGVudD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYmFkZ2U/OiBSZXR1cm5UeXBlPHR5cGVvZiBub2RlVHlwZVRvQWJicj47XG4gIGFjdGlvbkRyb3Bkb3duPzogUmVhY3QuUmVhY3ROb2RlO1xuICBzdGF0dXM6IFtOb2RlU3RhdHVzPywgU3RhdHVzRXh0cmE/XTtcbiAgYWxlcnRPcHRpb25zPzogQWxlcnRPcHRpb25zO1xufVxuXG5leHBvcnQgY29uc3QgRW50aXR5RGV0YWlsSGVhZGVyOiBSZWFjdC5GQzxFbnRpdHlEZXRhaWxIZWFkZXJQcm9wcz4gPSAoe1xuICB0aXRsZUNvbnRlbnQsXG4gIGJhZGdlLFxuICBiYWRnZVRvb2x0aXBDb250ZW50LFxuICBhY3Rpb25Ecm9wZG93bixcbiAgc3RhdHVzOiBzdGF0dXNDb250ZW50LFxuICBhbGVydE9wdGlvbnMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgW3N0YXR1cywgZXh0cmFdID0gc3RhdHVzQ29udGVudDtcbiAgY29uc3QgW3Nob3dCYW5uZXIsIHNldFNob3dCYW5uZXJdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJlbnRpdHktb3ZlcnZpZXdfX2hlYWRlclwiIHsuLi5wcm9wc30+XG4gICAgICA8RmxleD5cbiAgICAgICAgPEZsZXhJdGVtIGZsZXg9e3sgZGVmYXVsdDogJ2ZsZXhfMScgfX0+XG4gICAgICAgICAgPEVudGl0eVRpdGxlIGNvbnRlbnQ9e3RpdGxlQ29udGVudH0gYmFkZ2U9e2JhZGdlfSBiYWRnZVRvb2x0aXBDb250ZW50PXtiYWRnZVRvb2x0aXBDb250ZW50fSAvPlxuICAgICAgICA8L0ZsZXhJdGVtPlxuICAgICAgICA8RmxleEl0ZW0+e2FjdGlvbkRyb3Bkb3dufTwvRmxleEl0ZW0+XG4gICAgICA8L0ZsZXg+XG4gICAgICB7c3RhdHVzICYmIHNob3dCYW5uZXIgPyAoXG4gICAgICAgIDxBbGVydFxuICAgICAgICAgIHZhcmlhbnQ9e3N0YXR1c31cbiAgICAgICAgICBpc0lubGluZVxuICAgICAgICAgIHRpdGxlPXtleHRyYT8udGl0bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXsnZW50aXR5LW92ZXJ2aWV3X19hbGVydC1iYW5uZXInfVxuICAgICAgICAgIGFjdGlvbkNsb3NlPXs8QWxlcnRBY3Rpb25DbG9zZUJ1dHRvbiBvbkNsb3NlPXsoKSA9PiBzZXRTaG93QmFubmVyKGZhbHNlKX0gLz59XG4gICAgICAgID5cbiAgICAgICAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgICAgICAgPFN0YWNrSXRlbSBrZXk9eydhbGVydC1kZXNjcmlwdGlvbid9PntleHRyYT8uZGVzY3JpcHRpb259PC9TdGFja0l0ZW0+XG4gICAgICAgICAgICB7ZXh0cmE/LmNhbGxGb3JBY3Rpb24gJiYgIWFsZXJ0T3B0aW9ucy5oaWRlQWN0aW9ucyA/IChcbiAgICAgICAgICAgICAgPFN0YWNrSXRlbSBrZXk9eydhbGVydC1jYWxsLWZvci1hY3Rpb24nfT5cbiAgICAgICAgICAgICAgICA8RmxleD5cbiAgICAgICAgICAgICAgICAgIHtleHRyYS5jYWxsRm9yQWN0aW9uLm1hcCgoYWN0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8RmxleEl0ZW0ga2V5PXtpbmRleH0+e2FjdGlvbn08L0ZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9GbGV4PlxuICAgICAgICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU3RhY2s+XG4gICAgICAgIDwvQWxlcnQ+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eURldGFpbHM7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVBY3Rpb24gfSBmcm9tICdAYXBwL1RvcG9sb2d5L0FjdGlvbnMvTm9kZUFjdGlvbnMnO1xuaW1wb3J0IEVudGl0eURldGFpbHMgZnJvbSAnQGFwcC9Ub3BvbG9neS9TaGFyZWQvRW50aXR5L0VudGl0eURldGFpbHMnO1xuaW1wb3J0IHsgTm9kZVR5cGUgfSBmcm9tICdAYXBwL1RvcG9sb2d5L3R5cGluZ3MnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBDYXJkQWN0aW9ucywgQ2FyZEJvZHksIENhcmRIZWFkZXIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IENvbnRhaW5lck5vZGVJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2FyZERlc2NyaXB0b3IsIERhc2hib2FyZENhcmRTaXplcywgRGFzaGJvYXJkQ2FyZFR5cGVQcm9wcyB9IGZyb20gJy4uL2Rhc2hib2FyZC11dGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDYXJkIH0gZnJvbSAnLi4vRGFzaGJvYXJkQ2FyZCc7XG5pbXBvcnQgJ0BhcHAvVG9wb2xvZ3kvc3R5bGVzL2Jhc2UuY3NzJztcblxuZXhwb3J0IGludGVyZmFjZSBKdm1EZXRhaWxzQ2FyZFByb3BzIGV4dGVuZHMgRGFzaGJvYXJkQ2FyZFR5cGVQcm9wcyB7fVxuXG5leHBvcnQgY29uc3QgSnZtRGV0YWlsc0NhcmQ6IFJlYWN0LkZDPEp2bURldGFpbHNDYXJkUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldF0gPSBSZWFjdC51c2VTdGF0ZTxUYXJnZXQ+KCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oY29udGV4dC50YXJnZXQudGFyZ2V0KCkuc3Vic2NyaWJlKHNldFRhcmdldCkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldCwgY29udGV4dC5hcGksIHNldFRhcmdldF0pO1xuXG4gIGNvbnN0IHdyYXBwZWRUYXJnZXQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldERhdGE6ICgpID0+ICh7XG4gICAgICAgIG5hbWU6IHRhcmdldC5hbGlhcyxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBub2RlVHlwZTogTm9kZVR5cGUuSlZNLFxuICAgICAgICBsYWJlbHM6IHt9LFxuICAgICAgfSksXG4gICAgfTtcbiAgfSwgW3RhcmdldF0pO1xuXG4gIGNvbnN0IGFjdGlvbkZpbHRlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChhY3Rpb246IE5vZGVBY3Rpb24pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gYWN0aW9uLmtleSAhPT0gJ1ZJRVdfREFTSEJPQVJEJztcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPERhc2hib2FyZENhcmRcbiAgICAgIGlkPXtgJHtwcm9wcy5kYXNoYm9hcmRJZH1gfVxuICAgICAgY2FyZFNpemVzPXtKdm1EZXRhaWxzQ2FyZFNpemVzfVxuICAgICAgaXNDb21wYWN0XG4gICAgICBjYXJkSGVhZGVyPXtcbiAgICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgICAgPENhcmRBY3Rpb25zPnsuLi5wcm9wcy5hY3Rpb25zIHx8IFtdfTwvQ2FyZEFjdGlvbnM+XG4gICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgIH1cbiAgICAgIHN0eWxlPXtwcm9wcy5pc0Z1bGxIZWlnaHQgPyB7fSA6IHsgaGVpZ2h0OiAnMzZlbScgfX0gLy8gRklYTUU6IFJlbW92ZSBhZnRlciBpbXBsZW1lbnRpbmcgaGVpZ2h0IHJlc2l6aW5nXG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENhcmRCb2R5PlxuICAgICAgICA8RW50aXR5RGV0YWlscyBlbnRpdHk9e3dyYXBwZWRUYXJnZXR9IGFjdGlvbkZpbHRlcj17YWN0aW9uRmlsdGVyfSAvPlxuICAgICAgPC9DYXJkQm9keT5cbiAgICA8L0Rhc2hib2FyZENhcmQ+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgSnZtRGV0YWlsc0NhcmRTaXplczogRGFzaGJvYXJkQ2FyZFNpemVzID0ge1xuICBzcGFuOiB7XG4gICAgbWluaW11bTogNCxcbiAgICBkZWZhdWx0OiA0LFxuICAgIG1heGltdW06IDEyLFxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgaGVpZ2h0IHJlc2l6aW5nXG4gICAgbWluaW11bTogTnVtYmVyLk5hTixcbiAgICBkZWZhdWx0OiBOdW1iZXIuTmFOLFxuICAgIG1heGltdW06IE51bWJlci5OYU4sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgSnZtRGV0YWlsc0NhcmREZXNjcmlwdG9yOiBEYXNoYm9hcmRDYXJkRGVzY3JpcHRvciA9IHtcbiAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTixcbiAgdGl0bGU6ICdKdm1EZXRhaWxzQ2FyZC5DQVJEX1RJVExFJyxcbiAgY2FyZFNpemVzOiBKdm1EZXRhaWxzQ2FyZFNpemVzLFxuICBkZXNjcmlwdGlvbjogJ0p2bURldGFpbHNDYXJkLkNBUkRfREVTQ1JJUFRJT04nLFxuICBkZXNjcmlwdGlvbkZ1bGw6IGBKdm1EZXRhaWxzQ2FyZC5DQVJEX0RFU0NSSVBUSU9OX0ZVTExgLFxuICBjb21wb25lbnQ6IEp2bURldGFpbHNDYXJkLFxuICBwcm9wQ29udHJvbHM6IFtdLFxuICBpY29uOiA8Q29udGFpbmVyTm9kZUljb24gLz4sXG4gIGxhYmVsczogW1xuICAgIHtcbiAgICAgIGNvbnRlbnQ6ICdJbmZvJyxcbiAgICAgIGNvbG9yOiAnYmx1ZScsXG4gICAgfSxcbiAgXSxcbiAgcHJldmlldzogPEp2bURldGFpbHNDYXJkIHNwYW49ezEyfSBpc0RyYWdnYWJsZT17ZmFsc2V9IGlzRnVsbEhlaWdodD17ZmFsc2V9IGlzUmVzaXphYmxlPXtmYWxzZX0gZGFzaGJvYXJkSWQ9ezB9IC8+LFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgY3J5b3N0YXRMb2dvIGZyb20gJ0BhcHAvYXNzZXRzL2NyeW9zdGF0X2ljb25fcmdiX2RlZmF1bHQuc3ZnJztcbmltcG9ydCBjcnlvc3RhdExvZ29EYXJrIGZyb20gJ0BhcHAvYXNzZXRzL2NyeW9zdGF0X2ljb25fcmdiX3JldmVyc2Uuc3ZnJztcbmltcG9ydCB7IGRhc2hib2FyZENvbmZpZ0RlbGV0ZUNhcmRJbnRlbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgd2l0aFRoZW1lZEljb24gfSBmcm9tICdAYXBwL3V0aWxzL3dpdGhUaGVtZWRJY29uJztcbmltcG9ydCB7IExhYmVsUHJvcHMsIGdyaWRTcGFucywgQnV0dG9uLCBCdXR0b25WYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBGaWxlSWNvbiwgVW5rbm93bkljb24sIFVzZXJJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQgeyBURnVuY3Rpb24gfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRvbWF0ZWRBbmFseXNpc0NhcmREZXNjcmlwdG9yIH0gZnJvbSAnLi9BdXRvbWF0ZWRBbmFseXNpcy9BdXRvbWF0ZWRBbmFseXNpc0NhcmQnO1xuaW1wb3J0IHsgSkZSTWV0cmljc0NoYXJ0Q2FyZERlc2NyaXB0b3IgfSBmcm9tICcuL0NoYXJ0cy9qZnIvSkZSTWV0cmljc0NoYXJ0Q2FyZCc7XG5pbXBvcnQgeyBNQmVhbk1ldHJpY3NDaGFydENhcmREZXNjcmlwdG9yIH0gZnJvbSAnLi9DaGFydHMvbWJlYW4vTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJztcbmltcG9ydCB7IEp2bURldGFpbHNDYXJkRGVzY3JpcHRvciB9IGZyb20gJy4vSnZtRGV0YWlscy9Kdm1EZXRhaWxzQ2FyZCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RBU0hCT0FSRF9OQU1FID0gJ0RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IERSQUdHQUJMRV9SRUZfS0xBWlogPSBgZHJhZ2dhYmxlLXJlZmA7XG5leHBvcnQgY29uc3QgTEFZT1VUX1RFTVBMQVRFX0RFU0NSSVBUSU9OX1dPUkRfTElNSVQgPSAxMDA7XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRMYXlvdXROYW1lUGF0dGVybiA9IC9eW2EtekEtWjAtOV8uLV0rKCBbYS16QS1aMC05Xy4tXSspKiQvO1xuZXhwb3J0IGNvbnN0IExheW91dFRlbXBsYXRlRGVzY3JpcHRpb25QYXR0ZXJuID0gL15bYS16QS1aMC05XFxzLixcXC0nXCI7PyFAIyQlXiYqKClbXFxdXys9Ont9XSokLztcblxuZXhwb3J0IGludGVyZmFjZSBDYXJkQ29uZmlnIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzcGFuOiBncmlkU3BhbnM7XG4gIHByb3BzOiBvYmplY3Q7XG59XG5cbmV4cG9ydCB0eXBlIFNlcmlhbENhcmRDb25maWcgPSBPbWl0PENhcmRDb25maWcsICdpZCc+O1xuXG5leHBvcnQgY29uc3QgbW9ja1NlcmlhbENhcmRDb25maWc6IFNlcmlhbENhcmRDb25maWcgPSB7XG4gIG5hbWU6ICdEZWZhdWx0JyxcbiAgc3BhbjogMTIsXG4gIHByb3BzOiB7fSxcbn07XG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZExheW91dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2FyZHM6IENhcmRDb25maWdbXTtcbiAgZmF2b3JpdGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNlcmlhbERhc2hib2FyZExheW91dCA9IE9taXQ8RGFzaGJvYXJkTGF5b3V0LCAnbmFtZScgfCAnY2FyZHMnPiAmIHsgY2FyZHM6IFNlcmlhbENhcmRDb25maWdbXSB9O1xuXG4vLyBvbmx5IG5hbWUgYW5kIHZlbmRvciBhcmUgbmVlZGVkIHRvIGlkZW50aWZ5IGEgdGVtcGxhdGVcbmV4cG9ydCB0eXBlIExheW91dFRlbXBsYXRlUmVjb3JkID0gUGljazxMYXlvdXRUZW1wbGF0ZSwgJ25hbWUnIHwgJ3ZlbmRvcic+O1xuXG5leHBvcnQgZW51bSBMYXlvdXRUZW1wbGF0ZVZlcnNpb24ge1xuICAndjIuMycgPSAndjIuMycsXG59XG5cbmV4cG9ydCBlbnVtIExheW91dFRlbXBsYXRlVmVuZG9yIHtcbiAgQkxBTksgPSAnQmxhbmsnLFxuICBDUllPU1RBVCA9ICdDcnlvc3RhdCcsXG4gIFVTRVIgPSAnVXNlci1zdWJtaXR0ZWQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFRlbXBsYXRlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjYXJkczogU2VyaWFsQ2FyZENvbmZpZ1tdO1xuICB2ZXJzaW9uOiBMYXlvdXRUZW1wbGF0ZVZlcnNpb247XG4gIHZlbmRvcjogTGF5b3V0VGVtcGxhdGVWZW5kb3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRMYXlvdXRUZW1wbGF0ZSB7XG4gIHRlbXBsYXRlOiBMYXlvdXRUZW1wbGF0ZTtcbiAgY2F0ZWdvcnk6IExheW91dFRlbXBsYXRlRmlsdGVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJpYWxMYXlvdXRUZW1wbGF0ZSA9IE9taXQ8TGF5b3V0VGVtcGxhdGUsICd2ZW5kb3InPjtcblxuZXhwb3J0IGNvbnN0IG1vY2tTZXJpYWxMYXlvdXRUZW1wbGF0ZTogU2VyaWFsTGF5b3V0VGVtcGxhdGUgPSB7XG4gIG5hbWU6ICdEZWZhdWx0JyxcbiAgZGVzY3JpcHRpb246ICdEZWZhdWx0LicsXG4gIGNhcmRzOiBbXSBhcyBTZXJpYWxDYXJkQ29uZmlnW10sXG4gIHZlcnNpb246IExheW91dFRlbXBsYXRlVmVyc2lvblsndjIuMyddLFxufTtcblxuZXhwb3J0IHR5cGUgTGF5b3V0VGVtcGxhdGVGaWx0ZXIgPSAnU3VnZ2VzdGVkJyB8ICdDcnlvc3RhdCcgfCAnVXNlci1zdWJtaXR0ZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFRlbXBsYXRlQ29udHJvbGxlciB7XG4gIHNlbGVjdGVkVGVtcGxhdGU6IFNlbGVjdGVkTGF5b3V0VGVtcGxhdGUgfCB1bmRlZmluZWQ7XG4gIHNldFNlbGVjdGVkVGVtcGxhdGU6ICh0ZW1wbGF0ZTogUmVhY3QuU2V0U3RhdGVBY3Rpb248U2VsZWN0ZWRMYXlvdXRUZW1wbGF0ZSB8IHVuZGVmaW5lZD4pID0+IHZvaWQ7XG4gIGlzVXBsb2FkTW9kYWxPcGVuOiBib29sZWFuO1xuICBzZXRJc1VwbG9hZE1vZGFsT3BlbjogKGlzT3BlbjogUmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4pID0+IHZvaWQ7XG59XG5cbi8vIHVzZSBhIHByb3ZpZGVyXG5leHBvcnQgY29uc3QgTGF5b3V0VGVtcGxhdGVDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxMYXlvdXRUZW1wbGF0ZUNvbnRyb2xsZXI+KHtcbiAgc2VsZWN0ZWRUZW1wbGF0ZTogdW5kZWZpbmVkLFxuICBzZXRTZWxlY3RlZFRlbXBsYXRlOiAoKSA9PiB1bmRlZmluZWQsXG4gIGlzVXBsb2FkTW9kYWxPcGVuOiBmYWxzZSxcbiAgc2V0SXNVcGxvYWRNb2RhbE9wZW46ICgpID0+IHVuZGVmaW5lZCxcbn0pO1xuXG5leHBvcnQgY29uc3QgaWNvbmlmeSA9ICh2ZW5kb3I6IExheW91dFRlbXBsYXRlVmVuZG9yKTogUmVhY3QuUmVhY3ROb2RlID0+IHtcbiAgc3dpdGNoICh2ZW5kb3IpIHtcbiAgICBjYXNlIExheW91dFRlbXBsYXRlVmVuZG9yLkNSWU9TVEFUOlxuICAgICAgcmV0dXJuIDxUaGVtZWRDcnlvc3RhdExvZ28gLz47XG4gICAgY2FzZSBMYXlvdXRUZW1wbGF0ZVZlbmRvci5CTEFOSzpcbiAgICAgIHJldHVybiA8RmlsZUljb24gc3R5bGU9e3sgcGFkZGluZ1JpZ2h0OiAnMC4zcmVtJyB9fSAvPjtcbiAgICBjYXNlIExheW91dFRlbXBsYXRlVmVuZG9yLlVTRVI6XG4gICAgICByZXR1cm4gPFVzZXJJY29uIC8+O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gPFVua25vd25JY29uIC8+O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgVGhlbWVkQ3J5b3N0YXRMb2dvID0gd2l0aFRoZW1lZEljb24oY3J5b3N0YXRMb2dvLCBjcnlvc3RhdExvZ29EYXJrLCAnQ3J5b3N0YXQgTG9nbycpO1xuXG5leHBvcnQgY29uc3QgdGVtcGxhdGl6ZSA9IChsYXlvdXQ6IERhc2hib2FyZExheW91dCwgbmFtZTogc3RyaW5nLCBkZXNjPzogc3RyaW5nKTogTGF5b3V0VGVtcGxhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2MgfHwgYEN1c3RvbSBsYXlvdXQgdGVtcGxhdGUuYCxcbiAgICBjYXJkczogbGF5b3V0LmNhcmRzLm1hcCgoY2FyZCkgPT4ge1xuICAgICAgY29uc3QgeyBpZDogX2lkLCAuLi5jYXJkV2l0aG91dElkIH0gPSBjYXJkO1xuICAgICAgcmV0dXJuIHsgLi4uY2FyZFdpdGhvdXRJZCB9O1xuICAgIH0pIGFzIFNlcmlhbENhcmRDb25maWdbXSxcbiAgICB2ZW5kb3I6IExheW91dFRlbXBsYXRlVmVuZG9yLlVTRVIsXG4gICAgdmVyc2lvbjogTGF5b3V0VGVtcGxhdGVWZXJzaW9uWyd2Mi4zJ10sXG4gIH0gYXMgTGF5b3V0VGVtcGxhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgbGF5b3V0aXplID0gKHRlbXBsYXRlOiBMYXlvdXRUZW1wbGF0ZSwgbmFtZTogc3RyaW5nKTogRGFzaGJvYXJkTGF5b3V0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIGNhcmRzOiB0ZW1wbGF0ZS5jYXJkcy5tYXAoKGNhcmQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNhcmQsXG4gICAgICAgIGlkOiBgJHtjYXJkLm5hbWV9LSR7bmFub2lkKCl9YCxcbiAgICAgIH07XG4gICAgfSksXG4gICAgZmF2b3JpdGU6IGZhbHNlLFxuICB9IGFzIERhc2hib2FyZExheW91dDtcbn07XG5cbmV4cG9ydCBjb25zdCByZWNvcmRUb0xheW91dFRlbXBsYXRlID0gKFxuICByZWNvcmQ6IExheW91dFRlbXBsYXRlUmVjb3JkLFxuICBhbGxUZW1wbGF0ZXM6IExheW91dFRlbXBsYXRlW11cbik6IExheW91dFRlbXBsYXRlIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGFsbFRlbXBsYXRlcy5maW5kKCh0ZW1wbGF0ZSkgPT4gdGVtcGxhdGUubmFtZSA9PT0gcmVjb3JkLm5hbWUgJiYgdGVtcGxhdGUudmVuZG9yID09PSByZWNvcmQudmVuZG9yKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVbmlxdWVJbmNyZW1lbnRpbmdOYW1lID0gKGluaXQgPSAnQ3VzdG9tJywgbmFtZXM6IHN0cmluZ1tdKTogc3RyaW5nID0+IHtcbiAgbGV0IG5hbWU6IHN0cmluZztcbiAgbGV0IGkgPSAxO1xuICBkbyB7XG4gICAgbmFtZSA9IGAke2luaXR9JHtpfWA7XG4gICAgaSsrO1xuICB9IHdoaWxlIChuYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG4gIHJldHVybiBuYW1lO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0NhcmREZXNjcmlwdG9yQnlOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGNob2ljZSBvZiBnZXREYXNoYm9hcmRDYXJkcygpKSB7XG4gICAgaWYgKGNob2ljZS5jb21wb25lbnQubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmREZXNjcmlwdG9yQnlOYW1lKG5hbWU6IHN0cmluZyk6IERhc2hib2FyZENhcmREZXNjcmlwdG9yIHtcbiAgZm9yIChjb25zdCBjaG9pY2Ugb2YgZ2V0RGFzaGJvYXJkQ2FyZHMoKSkge1xuICAgIGlmIChjaG9pY2UuY29tcG9uZW50Lm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjaG9pY2U7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjYXJkIHR5cGUgc2VsZWN0aW9uOiAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNDYXJkRGVzY3JpcHRvckJ5VGl0bGUodGl0bGU6IHN0cmluZywgdDogVEZ1bmN0aW9uKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgY2hvaWNlIG9mIGdldERhc2hib2FyZENhcmRzKCkpIHtcbiAgICBpZiAodChjaG9pY2UudGl0bGUpID09PSB0aXRsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmREZXNjcmlwdG9yQnlUaXRsZSh0aXRsZTogc3RyaW5nLCB0OiBURnVuY3Rpb24pOiBEYXNoYm9hcmRDYXJkRGVzY3JpcHRvciB7XG4gIGZvciAoY29uc3QgY2hvaWNlIG9mIGdldERhc2hib2FyZENhcmRzKCkpIHtcbiAgICBpZiAodChjaG9pY2UudGl0bGUpID09PSB0aXRsZSkge1xuICAgICAgcmV0dXJuIGNob2ljZTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNhcmQgdHlwZSBzZWxlY3Rpb246ICR7dGl0bGV9YCk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXREYXNoYm9hcmRDYXJkczogKGZlYXR1cmVMZXZlbD86IEZlYXR1cmVMZXZlbCkgPT4gRGFzaGJvYXJkQ2FyZERlc2NyaXB0b3JbXSA9IChcbiAgZmVhdHVyZUxldmVsID0gRmVhdHVyZUxldmVsLkRFVkVMT1BNRU5UXG4pID0+IHtcbiAgY29uc3QgY2FyZHMgPSBbXG4gICAgSnZtRGV0YWlsc0NhcmREZXNjcmlwdG9yLFxuICAgIEF1dG9tYXRlZEFuYWx5c2lzQ2FyZERlc2NyaXB0b3IsXG4gICAgSkZSTWV0cmljc0NoYXJ0Q2FyZERlc2NyaXB0b3IsXG4gICAgTUJlYW5NZXRyaWNzQ2hhcnRDYXJkRGVzY3JpcHRvcixcbiAgXTtcbiAgcmV0dXJuIGNhcmRzLmZpbHRlcigoY2FyZCkgPT4gY2FyZC5mZWF0dXJlTGV2ZWwgPj0gZmVhdHVyZUxldmVsKTtcbn07XG5cbmludGVyZmFjZSBWYWxpZGF0aW9uRXJyb3Ige1xuICBtZXNzYWdlOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZFZhbGlkYXRpb25SZXN1bHQge1xuICBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdO1xuICBjYWxsRm9yQWN0aW9uPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgY29uc3QgUmVtb3ZlQ2FyZEFjdGlvbjogUmVhY3QuRkM8eyBjYXJkSW5kZXg6IG51bWJlciB9PiA9ICh7IGNhcmRJbmRleCB9KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0RlbGV0ZUNhcmRJbnRlbnQoY2FyZEluZGV4KSk7XG4gIH0sIFtkaXNwYXRjaCwgY2FyZEluZGV4XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfSB2YXJpYW50PXtCdXR0b25WYXJpYW50LmRhbmdlcn0+XG4gICAgICB7dCgnUkVNT1ZFJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgPC9CdXR0b24+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDYXJkQ29uZmlnID0gKHsgbmFtZSwgcHJvcHMgfTogQ2FyZENvbmZpZywgY2FyZEluZGV4OiBudW1iZXIpOiBDYXJkVmFsaWRhdGlvblJlc3VsdCA9PiB7XG4gIC8vIFVuc3VwcG9ydGVkIGNhcmQgdHlwZVxuICBpZiAoIWhhc0NhcmREZXNjcmlwdG9yQnlOYW1lKG5hbWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogW1xuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgVW5rbm93biBjYXJkIHR5cGU6IDxjb2RlPntuYW1lfTwvY29kZT4uXG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNhbGxGb3JBY3Rpb246IDxSZW1vdmVDYXJkQWN0aW9uIGNhcmRJbmRleD17Y2FyZEluZGV4fSAvPixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZXJyczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcblxuICBjb25zdCB7IHByb3BDb250cm9scyB9ID0gZ2V0Q2FyZERlc2NyaXB0b3JCeU5hbWUobmFtZSk7XG4gIGNvbnN0IGNvbmZpZ1Byb3BLZXlzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpO1xuXG4gIC8vIE1pc3NpbmcgcHJvcHNcbiAgcHJvcENvbnRyb2xzXG4gICAgLm1hcCgoY3RybCkgPT4gY3RybC5rZXkpXG4gICAgLmZvckVhY2goKHByb3BLZXkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBjb25maWdQcm9wS2V5cy5maW5kKChba2V5LCBfXSkgPT4ga2V5ID09PSBwcm9wS2V5KTtcbiAgICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgICBlcnJzLnB1c2goe1xuICAgICAgICAgIG1lc3NhZ2U6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIE1pc3NpbmcgY2FyZCBwcm9wZXJ0eTogPGNvZGU+e3Byb3BLZXl9PC9jb2RlPi5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIEludmFsaWQgcHJvcCB2YWxpZXNcbiAgY29uZmlnUHJvcEtleXMuZm9yRWFjaCgoW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVkID0gcHJvcENvbnRyb2xzLmZpbmQoKGNydGwpID0+IGNydGwua2V5ID09PSBwcm9wS2V5KTtcbiAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgY29uc3QgeyB2YWx1ZXMsIGV4dHJhcywga2luZCB9ID0gbWF0Y2hlZDtcbiAgICAgIC8vIEZJWE1FOiBDaGVjayBkeW5hbWljIHZhbHVlc1xuICAgICAgbGV0IGVycjogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBlcnIgPSB7XG4gICAgICAgICAgbWVzc2FnZTogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgVW5kZWZpbmVkIHZhbHVlIGZvciBjYXJkIHByb3BlcnR5OiA8Y29kZT57cHJvcEtleX08L2NvZGU+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZXMgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmICF2YWx1ZXMuc29tZSgodikgPT4gdiA9PT0gcHJvcFZhbHVlKSkge1xuICAgICAgICBlcnIgPSB7XG4gICAgICAgICAgbWVzc2FnZTogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgSW52YWxpZCB2YWx1ZSA8Y29kZT57cHJvcFZhbHVlfTwvY29kZT4gZm9yIGNhcmQgcHJvcGVydHk6IDxjb2RlPntwcm9wS2V5fTwvY29kZT4uXG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChleHRyYXMpIHtcbiAgICAgICAgaWYgKGtpbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc3QgdmFsQXNOdW0gPSBOdW1iZXIocHJvcFZhbHVlKTtcbiAgICAgICAgICBpZiAoaXNOYU4odmFsQXNOdW0pKSB7XG4gICAgICAgICAgICBlcnIgPSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgTnVtZXJpYyB2YWx1ZSBleHBlY3RlZCBidXQgPGNvZGU+e3R5cGVvZiBwcm9wVmFsdWV9PC9jb2RlPiB3YXMgZ2l2ZW4gZm9yOiA8Pntwcm9wS2V5fTwvPi5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGV4dHJhcy5taW4gIT09IHVuZGVmaW5lZCAmJiB2YWxBc051bSA8IGV4dHJhcy5taW4pIHx8XG4gICAgICAgICAgICAgIChleHRyYXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsQXNOdW0gPiBleHRyYXMubWF4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGVyciA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICBWYWx1ZSBleGNlZWRpbmcgbGltaXQgZm9yIGNhcmQgcHJvcGVydHk6IDxjb2RlPntwcm9wS2V5fTwvY29kZT4uXG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyICYmIGVycnMucHVzaChlcnIpO1xuICAgIH1cbiAgICAvLyBVbmtub3duIHByb3BzIGFyZSBpZ25vcmVkXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXJyb3JzOiBlcnJzLFxuICAgIGNhbGxGb3JBY3Rpb246IGVycnMubGVuZ3RoID8gPFJlbW92ZUNhcmRBY3Rpb24gY2FyZEluZGV4PXtjYXJkSW5kZXh9IC8+IDogdW5kZWZpbmVkLFxuICB9O1xufTtcblxuLyogQ0FSRCBTRUNUSU9OICovXG5leHBvcnQgaW50ZXJmYWNlIFNpemVkPFQ+IHtcbiAgbWluaW11bTogVDtcbiAgZGVmYXVsdDogVDtcbiAgbWF4aW11bTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDYXJkU2l6ZXMge1xuICBzcGFuOiBTaXplZDxncmlkU3BhbnM+O1xuICBoZWlnaHQ6IFNpemVkPG51bWJlcj47XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ2FyZERlc2NyaXB0b3Ige1xuICBmZWF0dXJlTGV2ZWw6IEZlYXR1cmVMZXZlbDtcbiAgaWNvbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgbGFiZWxzPzoge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjb2xvcj86IExhYmVsUHJvcHNbJ2NvbG9yJ107XG4gICAgaWNvbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgfVtdO1xuICBwcmV2aWV3PzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICBjYXJkU2l6ZXM6IERhc2hib2FyZENhcmRTaXplcztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZGVzY3JpcHRpb25GdWxsOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY29tcG9uZW50OiBSZWFjdC5GQzxhbnk+O1xuICBwcm9wQ29udHJvbHM6IFByb3BDb250cm9sW107XG4gIGFkdmFuY2VkQ29uZmlnPzogSlNYLkVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcENvbnRyb2xFeHRyYSB7XG4gIGRpc3BsYXlNYXBwZXI/OiAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nIC8qIG9ubHkgaGFzIGVmZmVjdCB3aXRoICdzZWxlY3QnIFByb3BDb250cm9sIGtpbmQgKi87XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcENvbnRyb2wge1xuICBuYW1lOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBraW5kOiAnYm9vbGVhbicgfCAnbnVtYmVyJyB8ICdzdHJpbmcnIHwgJ3RleHQnIHwgJ3NlbGVjdCc7XG4gIHZhbHVlcz86IGFueVtdIHwgT2JzZXJ2YWJsZTxhbnk+O1xuICBkZWZhdWx0VmFsdWU6IGFueTtcbiAgZXh0cmFzPzogUHJvcENvbnRyb2xFeHRyYTtcbn1cbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZENhcmRUeXBlUHJvcHMge1xuICBzcGFuOiBudW1iZXI7XG4gIGRhc2hib2FyZElkOiBudW1iZXI7XG4gIGlzRHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgaXNSZXNpemFibGU/OiBib29sZWFuO1xuICBpc0Z1bGxIZWlnaHQ/OiBib29sZWFuO1xuICBhY3Rpb25zPzogSlNYLkVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUFBRGVzY3JpcHRpb24gPSAoZGVzY3JpcHRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50ID0+IHtcbiAgY29uc3Qgc3BsaXREZXNjID0gZGVzY3JpcHRpb24uc3BsaXQoJ1xcblxcbicpO1xuICBjb25zdCBib2xkUmVnZXggPSAvXihbXjpdKzpcXHM/KS87IC8vIG1hdGNoIHRleHQgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgZmlyc3QgY29sb25cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c3BsaXREZXNjLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYm9sZE1hdGNoID0gaXRlbS5tYXRjaChib2xkUmVnZXgpO1xuICAgICAgICBjb25zdCBib2xkVGV4dCA9IGJvbGRNYXRjaCA/IGJvbGRNYXRjaFswXSA6ICcnO1xuICAgICAgICBjb25zdCByZXN0T2ZUZXh0ID0gYm9sZE1hdGNoID8gaXRlbS5yZXBsYWNlKGJvbGRSZWdleCwgJycpIDogaXRlbTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBpbmRleCA+IDAgPyB7IHBhZGRpbmdUb3A6ICcwLjdyZW0nIH0gOiB7fTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8cCBrZXk9e2luZGV4fSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAge2JvbGRUZXh0ICYmIDxzdHJvbmc+e2JvbGRUZXh0fTwvc3Ryb25nPn1cbiAgICAgICAgICAgIHtyZXN0T2ZUZXh0fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgZGFzaGJvYXJkQ29uZmlnUmVzaXplQ2FyZEludGVudCwgUm9vdFN0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBncmlkU3BhbnMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgQ2FyZENvbmZpZywgRGFzaGJvYXJkQ2FyZFNpemVzIH0gZnJvbSAnLi9kYXNoYm9hcmQtdXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2FyZENvbnRleHQgfSBmcm9tICcuL0Rhc2hib2FyZENhcmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6YWJsZVJlZlByb3BzIHtcbiAgY2FyZElkOiBudW1iZXI7XG4gIGNhcmRTaXplczogRGFzaGJvYXJkQ2FyZFNpemVzO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBc0dyaWRTcGFucyh2YWw6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBhOiBncmlkU3BhbnMsIGI6IGdyaWRTcGFucyk6IGdyaWRTcGFucyB7XG4gIGlmICh2YWwgPCBtaW4pIHZhbCA9IG1pbjtcbiAgZWxzZSBpZiAodmFsID4gbWF4KSB2YWwgPSBtYXg7XG4gIGNvbnN0IGFucyA9IE1hdGgucm91bmQoKGIgLSBhKSAqICgodmFsIC0gbWluKSAvIChtYXggLSBtaW4pKSArIGEpO1xuICByZXR1cm4gXy5jbGFtcChhbnMsIGEsIGIpIGFzIGdyaWRTcGFucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURpc2FibGVkRWxlbWVudHMoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgZGlzYWJsZWRFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpc2FibGVkLXBvaW50ZXInKSk7XG4gIGRpc2FibGVkRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IChlbC5zdHlsZVsncG9pbnRlci1ldmVudHMnXSA9IGRpc2FibGVkID8gJ25vbmUnIDogJ2F1dG8nKSk7XG59XG5cbmV4cG9ydCBjb25zdCBSZXNpemFibGVSZWY6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PFJlc2l6YWJsZVJlZlByb3BzPiA9ICh7XG4gIGNhcmRJZDogZGFzaGJvYXJkSWQsXG4gIGNhcmRTaXplcyxcbiAgLi4uX3Byb3BzXG59OiBSZXNpemFibGVSZWZQcm9wcykgPT4ge1xuICBjb25zdCBjYXJkQ29uZmlnczogQ2FyZENvbmZpZ1tdID0gdXNlU2VsZWN0b3IoXG4gICAgKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLmRhc2hib2FyZENvbmZpZ3MubGF5b3V0c1tzdGF0ZS5kYXNoYm9hcmRDb25maWdzLmN1cnJlbnRdLmNhcmRzXG4gICk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBjYXJkUmVmID0gUmVhY3QudXNlQ29udGV4dChEYXNoYm9hcmRDYXJkQ29udGV4dCk7XG4gIGNvbnN0IGlzUmVzaXppbmcgPSBSZWFjdC51c2VSZWY8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBtaW5XaWR0aCA9IFJlYWN0LnVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IG1heFdpZHRoID0gUmVhY3QudXNlUmVmPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBjb25zdCBuZWFyRWRnZU11bHRpcGxpZXIgPSBSZWFjdC51c2VDYWxsYmFjaygobW91c2VQb3M6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgY29uc3QgQ0xPU0VfVE9fRURHRSA9IDAuOTk1O1xuICAgIGNvbnN0IEVER0VfTVVMVElQTElFUiA9IDAuOTtcbiAgICBpZiAobW91c2VQb3MgPiB3aW5kb3cuaW5uZXJXaWR0aCAqIENMT1NFX1RPX0VER0UpIHtcbiAgICAgIHJldHVybiBFREdFX01VTFRJUExJRVI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNhbGxiYWNrTW91c2VNb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IG1vdXNlUG9zID0gZS5jbGllbnRYO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmICghaXNSZXNpemluZy5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjYXJkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2FyZFJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicsIGlubGluZTogJ2VuZCcgfSk7XG4gICAgICAgIGNvbnN0IGNhcmRSZWN0ID0gY2FyZFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChtaW5XaWR0aC5jdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBtaW5XaWR0aC5jdXJyZW50ID0gY2FyZFNpemVzLnNwYW4ubWluaW11bSAqIChjYXJkUmVjdC53aWR0aCAvIGNhcmRDb25maWdzW2Rhc2hib2FyZElkXS5zcGFuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4V2lkdGguY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbWF4V2lkdGguY3VycmVudCA9IGNhcmRTaXplcy5zcGFuLm1heGltdW0gKiAoY2FyZFJlY3Qud2lkdGggLyBjYXJkQ29uZmlnc1tkYXNoYm9hcmRJZF0uc3Bhbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5DYXJkUmlnaHQgPSBjYXJkUmVjdC5sZWZ0ICsgbWluV2lkdGguY3VycmVudDtcbiAgICAgICAgY29uc3QgbWF4Q2FyZFJpZ2h0ID0gY2FyZFJlY3QubGVmdCArIG1heFdpZHRoLmN1cnJlbnQgKiBuZWFyRWRnZU11bHRpcGxpZXIobW91c2VQb3MpO1xuXG4gICAgICAgIGNvbnN0IG5ld1NpemUgPSBtb3VzZVBvcztcblxuICAgICAgICBjb25zdCBncmlkU3BhbiA9IG5vcm1hbGl6ZUFzR3JpZFNwYW5zKFxuICAgICAgICAgIG5ld1NpemUsXG4gICAgICAgICAgbWluQ2FyZFJpZ2h0LFxuICAgICAgICAgIG1heENhcmRSaWdodCxcbiAgICAgICAgICBjYXJkU2l6ZXMuc3Bhbi5taW5pbXVtLFxuICAgICAgICAgIGNhcmRTaXplcy5zcGFuLm1heGltdW1cbiAgICAgICAgKSBhcyBncmlkU3BhbnM7XG5cbiAgICAgICAgZGlzcGF0Y2goZGFzaGJvYXJkQ29uZmlnUmVzaXplQ2FyZEludGVudChkYXNoYm9hcmRJZCwgZ3JpZFNwYW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2NhcmRSZWYuY3VycmVudCBpcyB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNwYXRjaCwgY2FyZFJlZiwgY2FyZENvbmZpZ3MsIG5lYXJFZGdlTXVsdGlwbGllciwgZGFzaGJvYXJkSWQsIGNhcmRTaXplc11cbiAgKTtcblxuICBjb25zdCBjYWxsYmFja01vdXNlVXAgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFpc1Jlc2l6aW5nLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNSZXNpemluZy5jdXJyZW50ID0gZmFsc2U7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnY3Vyc29yJyk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgY2FsbGJhY2tNb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBjYWxsYmFja01vdXNlVXApO1xuICAgIGhhbmRsZURpc2FibGVkRWxlbWVudHMoZmFsc2UpO1xuICB9LCBbY2FsbGJhY2tNb3VzZU1vdmVdKTtcblxuICBjb25zdCBoYW5kbGVPbk1vdXNlRG93biA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50LCBNb3VzZUV2ZW50PikgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJ2N1cnNvcicsICdjb2wtcmVzaXplJyk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBjYWxsYmFja01vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgY2FsbGJhY2tNb3VzZVVwKTtcbiAgICAgIGlzUmVzaXppbmcuY3VycmVudCA9IHRydWU7XG4gICAgICBtaW5XaWR0aC5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgbWF4V2lkdGguY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgIGhhbmRsZURpc2FibGVkRWxlbWVudHModHJ1ZSk7XG4gICAgfSxcbiAgICBbY2FsbGJhY2tNb3VzZU1vdmUsIGNhbGxiYWNrTW91c2VVcF1cbiAgKTtcblxuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJyZXNpemFibGUtcmVmXCIgb25Nb3VzZURvd249e2hhbmRsZU9uTW91c2VEb3dufSAvPjtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IGRhc2hib2FyZENvbmZpZ1Jlb3JkZXJDYXJkSW50ZW50IH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBjbGlja091dHNpZGUgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBEUkFHR0FCTEVfUkVGX0tMQVpaIH0gZnJvbSAnLi9kYXNoYm9hcmQtdXRpbHMnO1xuaW1wb3J0IHsgaGFuZGxlRGlzYWJsZWRFbGVtZW50cyB9IGZyb20gJy4vUmVzaXphYmxlUmVmJztcblxuY29uc3QgZ2V0T3ZlcmxhcFNjYWxlcyA9IChkcmFnSW5kZXg6IG51bWJlciwgaG92ZXJJbmRleDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGxldCBsZWZ0U2NhbGUgPSBPRkZTRVRfU0NBTEU7XG4gIGxldCByaWdodFNjYWxlID0gT0ZGU0VUX1NDQUxFO1xuICBpZiAoZHJhZ0luZGV4IC0gaG92ZXJJbmRleCA9PSAtMSkge1xuICAgIGxlZnRTY2FsZSA9IDA7XG4gIH1cbiAgaWYgKGRyYWdJbmRleCAtIGhvdmVySW5kZXggPT0gMSkge1xuICAgIHJpZ2h0U2NhbGUgPSAwO1xuICB9XG4gIHJldHVybiBbbGVmdFNjYWxlLCByaWdodFNjYWxlXTtcbn07XG5cbmNvbnN0IGdldEJldHdlZW5TY2FsZXMgPSAoZHJhZ0luZGV4OiBudW1iZXIsIGdhcEluZGV4OiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgbGV0IGxlZnRTY2FsZSA9IE9GRlNFVF9TQ0FMRTtcbiAgbGV0IHJpZ2h0U2NhbGUgPSBPRkZTRVRfU0NBTEU7XG4gIGlmIChkcmFnSW5kZXggLSBnYXBJbmRleCA9PSAwKSB7XG4gICAgbGVmdFNjYWxlID0gMDtcbiAgfVxuICBpZiAoZHJhZ0luZGV4IC0gZ2FwSW5kZXggPT0gLTEpIHtcbiAgICByaWdodFNjYWxlID0gMDtcbiAgfVxuICByZXR1cm4gW2xlZnRTY2FsZSwgcmlnaHRTY2FsZV07XG59O1xuXG5jb25zdCBvdmVybGFwcyA9IChldjogTW91c2VFdmVudCwgcmVjdDogRE9NUmVjdCwgc2NhbGVzOiBbbnVtYmVyLCBudW1iZXJdKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IFtsZWZ0U2NhbGUsIHJpZ2h0U2NhbGVdID0gc2NhbGVzO1xuICByZXR1cm4gKFxuICAgIGV2LmNsaWVudFggLSByZWN0LndpZHRoICogbGVmdFNjYWxlID4gcmVjdC5sZWZ0ICYmXG4gICAgZXYuY2xpZW50WCArIHJlY3Qud2lkdGggKiByaWdodFNjYWxlIDwgcmVjdC5yaWdodCAmJlxuICAgIGV2LmNsaWVudFkgPiByZWN0LnRvcCAmJlxuICAgIGV2LmNsaWVudFkgPCByZWN0LmJvdHRvbVxuICApO1xufTtcblxudHlwZSBJdGVtUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2luQmV0d2Vlbic7XG4vL1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tfCBtb3VzZSB8LS0tLS0tLS0tLS0tLS0tLS18XG4vLyB8ICAgcmVjdDEucmlnaHQgICBeICAgICAgIF4gICByZWN0Mi5sZWZ0ICAgIHxcbi8vIHwgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgfFxuLy8gcmV0dXJucyBbaW5CZXR3ZWVuVHdvUmVjdGFuZ2xlcywge2luc2VydGVkT25MZWZ0LCBpbnNlcnRlZE9uUmlnaHQsIGVsc2V9XVxuY29uc3QgaW5CZXR3ZWVuID0gKFxuICBldjogTW91c2VFdmVudCxcbiAgcmVjdDE6IERPTVJlY3QsXG4gIHJlY3QyOiBET01SZWN0LFxuICBzY2FsZXM6IFtudW1iZXIsIG51bWJlcl1cbik6IFtib29sZWFuLCBJdGVtUG9zaXRpb25dID0+IHtcbiAgY29uc3QgW2xlZnRTY2FsZSwgcmlnaHRTY2FsZV0gPSBzY2FsZXM7XG4gIGNvbnN0IHdpdGhpbkhlaWdodFJlY3QxID0gZXYuY2xpZW50WSA+IHJlY3QxLnRvcCAmJiBldi5jbGllbnRZIDwgcmVjdDEuYm90dG9tO1xuICBjb25zdCB3aXRoaW5IZWlnaHRSZWN0MiA9IGV2LmNsaWVudFkgPiByZWN0Mi50b3AgJiYgZXYuY2xpZW50WSA8IHJlY3QyLmJvdHRvbTtcbiAgLy8gQ2FzZXNcbiAgLy8gc2FtZSByb3cgLT4gYmV0d2Vlbjogbm8gZW5kc1xuICBjb25zdCBzaW5nbGVSb3dCZXR3ZWVuID1cbiAgICByZWN0MS50b3AgPT09IHJlY3QyLnRvcCAmJlxuICAgIHJlY3QxLnJpZ2h0IDw9IGV2LmNsaWVudFggKyByZWN0MS53aWR0aCAqIGxlZnRTY2FsZSAmJlxuICAgIGV2LmNsaWVudFggLSByZWN0Mi53aWR0aCAqIHJpZ2h0U2NhbGUgPD0gcmVjdDIubGVmdCAmJlxuICAgIHdpdGhpbkhlaWdodFJlY3QxO1xuICAvLyBzYW1lIHJvdyAtPiBiZWZvcmU6IGxlZnQgZW5kXG4gIGNvbnN0IHNpbmdsZVJvd0JlZm9yZSA9XG4gICAgcmVjdDEudG9wID09PSByZWN0Mi50b3AgJiYgZXYuY2xpZW50WCA8PSByZWN0Mi5sZWZ0ICYmIHJlY3QxLmxlZnQgPj0gcmVjdDIucmlnaHQgJiYgd2l0aGluSGVpZ2h0UmVjdDE7XG4gIC8vIHNhbWUgcm93IC0+IGFmdGVyOiByaWdodCBlbmRcbiAgY29uc3Qgc2luZ2xlUm93QWZ0ZXIgPVxuICAgIHJlY3QxLnRvcCA9PT0gcmVjdDIudG9wICYmIGV2LmNsaWVudFggPj0gcmVjdDEucmlnaHQgJiYgcmVjdDEucmlnaHQgPj0gcmVjdDIubGVmdCAmJiB3aXRoaW5IZWlnaHRSZWN0MTtcblxuICAvLyBkaWZmZXJlbnQgcm93cyAtPiBiZWZvcmU6IGxlZnQgZW5kXG4gIGNvbnN0IG11bHRSb3dCZWZvcmUgPSByZWN0MS50b3AgIT09IHJlY3QyLnRvcCAmJiBldi5jbGllbnRYIDw9IHJlY3QyLmxlZnQgJiYgd2l0aGluSGVpZ2h0UmVjdDI7XG4gIGlmIChtdWx0Um93QmVmb3JlIHx8IHNpbmdsZVJvd0JlZm9yZSkge1xuICAgIHJldHVybiBbdHJ1ZSwgJ2xlZnQnXTtcbiAgfVxuICAvLyBkaWZmZXJlbnQgcm93cyAtPiBhZnRlcjogcmlnaHQgZW5kXG4gIGNvbnN0IG11bHRSb3dBZnRlciA9IHJlY3QxLnRvcCAhPT0gcmVjdDIudG9wICYmIGV2LmNsaWVudFggPj0gcmVjdDEucmlnaHQgJiYgd2l0aGluSGVpZ2h0UmVjdDE7XG4gIGlmIChtdWx0Um93QWZ0ZXIgfHwgc2luZ2xlUm93QWZ0ZXIpIHtcbiAgICByZXR1cm4gW3RydWUsICdyaWdodCddO1xuICB9XG4gIC8vIGRpZmZlcmVudCByb3dzIC0+IGJldHdlZW46IG5vIGVuZHNcbiAgcmV0dXJuIFtzaW5nbGVSb3dCZXR3ZWVuLCAnaW5CZXR3ZWVuJ107XG59O1xuXG5jb25zdCBJTklUX1NUWUxFID0ge307XG5jb25zdCBPRkZTRVRfU0NBTEUgPSAwLjMzO1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlSXRlbSB7XG4gIGluZGV4OiBudW1iZXI7XG4gIG5vZGU6IEhUTUxFbGVtZW50O1xuICByZWN0OiBET01SZWN0O1xuICBpc0RyYWdnaW5nSG9zdDogYm9vbGVhbjtcbn1cblxuY29uc3QgdHJhbnNpdGlvbnMgPSBbJ292ZXJsYXAnLCAnbGVmdCcsICdyaWdodCcsICdyZXNldCddIGFzIGNvbnN0O1xudHlwZSBUcmFuc2l0aW9uID0gKHR5cGVvZiB0cmFuc2l0aW9ucylbbnVtYmVyXTtcblxuY29uc3QgcmVzZXREcm9wcGFibGVJdGVtID0gKGRpOiBEcm9wcGFibGVJdGVtKSA9PiB7XG4gIGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZChldjogVHJhbnNpdGlvbkV2ZW50KSB7XG4gICAgaWYgKGV2LnByb3BlcnR5TmFtZSAhPT0gJ3RyYW5zZm9ybScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGkubm9kZS5jbGFzc0xpc3QucmVtb3ZlKGAke0RSQUdHQUJMRV9SRUZfS0xBWlp9LXdyYXBwZXJfX3Jlc2V0YCk7XG4gICAgZGkubm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgb25UcmFuc2l0aW9uRW5kKTtcbiAgfVxuICBpZiAoXG4gICAgZGkubm9kZS5jbGFzc05hbWVcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAuc29tZSgoYykgPT4gYy5zdGFydHNXaXRoKGAke0RSQUdHQUJMRV9SRUZfS0xBWlp9LXdyYXBwZXJfX2ApICYmIGMgIT09IGAke0RSQUdHQUJMRV9SRUZfS0xBWlp9LXdyYXBwZXJfX3Jlc2V0YClcbiAgKSB7XG4gICAgc2V0RHJvcHBhYmxlSXRlbShkaSwgJ3Jlc2V0Jyk7XG4gICAgZGkubm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgb25UcmFuc2l0aW9uRW5kKTtcbiAgICBkaS5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25jYW5jZWwnLCBvblRyYW5zaXRpb25FbmQpO1xuICB9XG59O1xuXG5jb25zdCBzZXREcm9wcGFibGVJdGVtID0gKGRpOiBEcm9wcGFibGVJdGVtLCB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uKSA9PiB7XG4gIGZvciAoY29uc3QgdHIgb2YgdHJhbnNpdGlvbnMpIHtcbiAgICBkaS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7RFJBR0dBQkxFX1JFRl9LTEFaWn0td3JhcHBlcl9fJHt0cn1gKTtcbiAgfVxuICBkaS5ub2RlLmNsYXNzTGlzdC5hZGQoYCR7RFJBR0dBQkxFX1JFRl9LTEFaWn0td3JhcHBlcl9fJHt0cmFuc2l0aW9ufWApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEcmFnZ2FibGVSZWZQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRhc2hib2FyZElkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVSZWY6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PERyYWdnYWJsZVJlZlByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBkYXNoYm9hcmRJZCxcbiAgLi4uX3Byb3BzXG59OiBEcmFnZ2FibGVSZWZQcm9wcykgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IHdyYXBwZXJSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHN0YXJ0Q29vcmRzID0gUmVhY3QudXNlUmVmPFtudW1iZXIsIG51bWJlcl0+KFswLCAwXSk7XG4gIGNvbnN0IGluc2VydFBvc2l0aW9uID0gUmVhY3QudXNlUmVmPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgbW91c2VNb3ZlTGlzdGVuZXIgPSBSZWFjdC51c2VSZWY8RXZlbnRMaXN0ZW5lcj4oKTtcbiAgY29uc3QgbW91c2VVcExpc3RlbmVyID0gUmVhY3QudXNlUmVmPEV2ZW50TGlzdGVuZXI+KCk7XG5cbiAgY29uc3QgaXNNb3VzZURvd24gPSBSZWFjdC51c2VSZWY8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBzd2FwID0gUmVhY3QudXNlUmVmPGJvb2xlYW4+KHRydWUpO1xuXG4gIGNvbnN0IFtyZWZTdHlsZSwgc2V0UmVmU3R5bGVdID0gUmVhY3QudXNlU3RhdGU8b2JqZWN0PihJTklUX1NUWUxFKTtcbiAgY29uc3QgW2lzRHJhZ2dpbmcsIHNldElzRHJhZ2dpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldjogUmVhY3QuVHJhbnNpdGlvbkV2ZW50PEhUTUxFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSA9PT0gJ3RyYW5zZm9ybScgJiYgaXNEcmFnZ2luZyAmJiAhaXNNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0UmVmU3R5bGUoSU5JVF9TVFlMRSk7XG4gICAgICB9XG4gICAgICBoYW5kbGVEaXNhYmxlZEVsZW1lbnRzKGZhbHNlKTtcbiAgICB9LFxuICAgIFtzZXRJc0RyYWdnaW5nLCBzZXRSZWZTdHlsZSwgaXNEcmFnZ2luZ11cbiAgKTtcblxuICBjb25zdCBvbk1vdXNlVXBXaGlsZURyYWdnaW5nID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGRyb3BwYWJsZUl0ZW1zOiBEcm9wcGFibGVJdGVtW10pID0+IHtcbiAgICAgIGRyb3BwYWJsZUl0ZW1zLmZvckVhY2gocmVzZXREcm9wcGFibGVJdGVtKTtcbiAgICAgIGlzTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGlmIChtb3VzZU1vdmVMaXN0ZW5lci5jdXJyZW50ICYmIG1vdXNlVXBMaXN0ZW5lci5jdXJyZW50KSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUxpc3RlbmVyLmN1cnJlbnQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcExpc3RlbmVyLmN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKGluc2VydFBvc2l0aW9uLmN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0UmVmU3R5bGUoSU5JVF9TVFlMRSk7XG4gICAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ1Jlb3JkZXJDYXJkSW50ZW50KGRhc2hib2FyZElkLCBpbnNlcnRQb3NpdGlvbi5jdXJyZW50LCBzd2FwLmN1cnJlbnQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFJlZlN0eWxlKHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAndHJhbnNmb3JtIDAuNXMgY3ViaWMtYmV6aWVyKDAuMiwgMSwgMC4xLCAxKSAwcycsXG4gICAgICAgICAgdHJhbnNmb3JtOiAnJyxcbiAgICAgICAgICAuLi5yZWZTdHlsZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBoYW5kbGVEaXNhYmxlZEVsZW1lbnRzKGZhbHNlKTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaCwgc2V0SXNEcmFnZ2luZywgc2V0UmVmU3R5bGUsIHJlZlN0eWxlLCBkYXNoYm9hcmRJZF1cbiAgKTtcblxuICBjb25zdCBvbk1vdXNlTW92ZVdoaWxlRHJhZ2dpbmcgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXY6IE1vdXNlRXZlbnQsIGRyb3BwYWJsZUl0ZW1zOiBEcm9wcGFibGVJdGVtW10pID0+IHtcbiAgICAgIGluc2VydFBvc2l0aW9uLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBjdXJyRHJhZ2dlZCA9IHdyYXBwZXJSZWYuY3VycmVudDtcbiAgICAgIGlmIChjdXJyRHJhZ2dlZCkge1xuICAgICAgICBjb25zdCBkcmFnSW5kZXggPSBkcm9wcGFibGVJdGVtcy5maW5kSW5kZXgoKGRpKSA9PiBkaS5pc0RyYWdnaW5nSG9zdCk7XG4gICAgICAgIGRyb3BwYWJsZUl0ZW1zLmZvckVhY2goKGRpLCBpZHgpID0+IHtcbiAgICAgICAgICBsZXQgc2NhbGVzID0gZ2V0T3ZlcmxhcFNjYWxlcyhkcmFnSW5kZXgsIGlkeCk7XG4gICAgICAgICAgaWYgKCFkaS5pc0RyYWdnaW5nSG9zdCAmJiBvdmVybGFwcyhldiwgZGkucmVjdCwgc2NhbGVzKSkge1xuICAgICAgICAgICAgLy8gbW91c2UgaXMgaG92ZXJpbmcgb24gYSBjYXJkXG4gICAgICAgICAgICBzZXREcm9wcGFibGVJdGVtKGRpLCAnb3ZlcmxhcCcpO1xuICAgICAgICAgICAgaW5zZXJ0UG9zaXRpb24uY3VycmVudCA9IGlkeDtcbiAgICAgICAgICAgIHN3YXAuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICBkcm9wcGFibGVJdGVtcy5maWx0ZXIoKF9kaSwgX2lkeCkgPT4gX2lkeCAhPT0gZHJhZ0luZGV4ICYmIF9pZHggIT09IGlkeCkuZm9yRWFjaChyZXNldERyb3BwYWJsZUl0ZW0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtb3VzZSBpcyBob3ZlcmluZyBiZXR3ZWVuIHR3byBjYXJkc1xuICAgICAgICAgICAgY29uc3QgZ2FwSW5kZXggPSAoaWR4ICsgMSkgJSBkcm9wcGFibGVJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBuZXh0SXRlbSA9IGRyb3BwYWJsZUl0ZW1zW2dhcEluZGV4XTtcbiAgICAgICAgICAgIHNjYWxlcyA9IGdldEJldHdlZW5TY2FsZXMoZHJhZ0luZGV4LCBnYXBJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBbYmV0d2VlblR3b1JlY3RzLCBkcmFnZ2VkUG9zaXRpb25dID0gaW5CZXR3ZWVuKGV2LCBkaS5yZWN0LCBuZXh0SXRlbS5yZWN0LCBzY2FsZXMpO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgaG92ZXJpbmcgcmlnaHQgbmV4dCB0byBlYWNoIG90aGVyIGluIHRoZSBhZGphY2VudCBnYXAgaW5kaWNlc1xuICAgICAgICAgICAgaWYgKGdhcEluZGV4IC0gZHJhZ0luZGV4ID09IDEgfHwgKGdhcEluZGV4IC0gZHJhZ0luZGV4ID09IDAgJiYgZHJhZ2dlZFBvc2l0aW9uICE9ICdyaWdodCcpKSB7XG4gICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGluc2VydFBvc2l0aW9uIGlzIHVuZGVmaW5lZCBiZWNhdXNlIHRoZW4gd2UgYXJlIG5vIGxvbmdlciBob3ZlcmluZ1xuICAgICAgICAgICAgICAvLyBhbmQgd2Ugd2FudCB0byByZXNldCBhbnkgY2FyZHMgdGhhdCBhcmUgbm90IGJlaW5nIHRyYW5zaXRpb25lZCBieSB0aGUgaG92ZXJcbiAgICAgICAgICAgICAgaWYgKCFkaS5pc0RyYWdnaW5nSG9zdCAmJiBpbnNlcnRQb3NpdGlvbi5jdXJyZW50ID09IHVuZGVmaW5lZCkgcmVzZXREcm9wcGFibGVJdGVtKGRpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJldHdlZW5Ud29SZWN0cyAmJiBkcm9wcGFibGVJdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIC8vIFsgICAgIDAsICAgIDEsICAgIDIsICAgIDMgICAgIF0gZGFzaGJvYXJkIHNwYW4gYXJyYXlcbiAgICAgICAgICAgICAgLy8geyAgMCAgfCAgMSAgfCAgMiAgfCAgMyAgfCAgNCAgfSBnYXAgaW5kaWNlcyAoZHJvcCB6b25lcylcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBJZiB3ZSB3YW50ZWQgdG8gcHV0IDAgYmV0d2VlbiBpbmRleGVzIDIgYW5kIDMsIHdlIHdvdWxkIGhhdmUgdG8gc3BlY2lmeSB0aGUgZ2FwSW5kZXggb2YgMyAoaWR4ICsgMSlcbiAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gWyAgICAgMCwgICAgMSwgICAgMixcbiAgICAgICAgICAgICAgLy8gICAgICAgMyAgICAgXSAgICAgICAgICAgICAgICBtdWx0aS1yb3cgZGFzaGJvYXJkIHNwYW4gYXJyYXlcbiAgICAgICAgICAgICAgLy8geyAgMCAgfCAgMSAgfCAgMiAgfCAgMyhhKVxuICAgICAgICAgICAgICAvLyAgIDMoYikgfCAgNCAgfSAgICAgICAgICAgICAgIChpZGVhbGl6ZWQpIGdhcCBpbmRpY2VzXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIGNhdmVhdCAtPiBnYXBJbmRleCBpcyBhbHdheXMgdGhlIDAgaW5kZXggd2hlbiBob3ZlcmluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGNhcmQgaW4gdGhlIGdyaWRcbiAgICAgICAgICAgICAgLy8gKHRoaXMgaXMgbm90IGlkZWFsaXplZCwgYnV0IGl0IGlzIGhvdyBpdCBpcyBpbXBsZW1lbnRlZClcbiAgICAgICAgICAgICAgLy8gdGhhdCBpcyB3aHkgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdG8gc2V0IHRoZSBpbnNlcnRQb3NpdGlvbiBzcGVjaWFsbHlcblxuICAgICAgICAgICAgICBpbnNlcnRQb3NpdGlvbi5jdXJyZW50ID0gZ2FwSW5kZXg7XG4gICAgICAgICAgICAgIHN3YXAuY3VycmVudCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgIC8vIGNoZWNrIHdoaWNoIGl0ZW1zIHNob3VsZCBiZSB0cmFuc2xhdGVkXG4gICAgICAgICAgICAgIGRyb3BwYWJsZUl0ZW1zLmZvckVhY2goKF9pdGVtLCBfaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF9pdGVtLmlzRHJhZ2dpbmdIb3N0KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBwb3NpdGlvbiB3ZSBhcmUgaG92ZXJpbmcgdGhlIGNhcmQgb3ZlclxuICAgICAgICAgICAgICAgIC8qIHRoaXMgY2FzZSBuZWVkcyB0byBiZSBjaGVja2VkIHNvIHRoYXQgY2FyZHMgdG8gdGhlIGxlZnQgb2YgdGhlIGRyYWdnZWQgY2FyZCBhcmVcbiAgICAgICAgICAgICAgICAgICBub3QgdHJhbnNsYXRlZCB3aGVuIHRoZSBkcmFnZ2VkIGNhcmQgaXMgYmVpbmcgZHJhZ2dlZCB0byB0aGUgcmlnaHQsIGFuZCB2aWNlIHZlcnNhICovXG5cbiAgICAgICAgICAgICAgICAvLyBpZiAoZHJhZ0luZGV4ID49IGdhcEluZGV4KSA9PiB3ZSBhcmUgZHJhZ2dpbmcgdGhlIGNhcmQgXCJiYWNrd2FyZHNcIlxuICAgICAgICAgICAgICAgIGlmIChkcmFnSW5kZXggPj0gZ2FwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkcmFnZ2VkUG9zaXRpb24gPT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaWR4ID49IGdhcEluZGV4ICYmIF9pZHggPCBkcmFnSW5kZXggJiYgX2l0ZW0ucmVjdC50b3AgPT0gbmV4dEl0ZW0ucmVjdC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXREcm9wcGFibGVJdGVtKF9pdGVtLCBgcmlnaHRgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNldERyb3BwYWJsZUl0ZW0oX2l0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRQb3NpdGlvbiA9PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaWR4IDwgZ2FwSW5kZXggJiYgZHJhZ0luZGV4ICE9PSBnYXBJbmRleCAmJiBfaXRlbS5yZWN0LnRvcCA9PSBkaS5yZWN0LnRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldERyb3BwYWJsZUl0ZW0oX2l0ZW0sIGBsZWZ0YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBtb3Zpbmcgbm9uIDB0aCBjYXJkIHRvIGVuZFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnYXBJbmRleCA9PSAwICYmIF9pZHggPiBkcmFnSW5kZXggJiYgX2l0ZW0ucmVjdC50b3AgPT0gZGkucmVjdC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXREcm9wcGFibGVJdGVtKF9pdGVtLCBgbGVmdGApO1xuICAgICAgICAgICAgICAgICAgICAgIGluc2VydFBvc2l0aW9uLmN1cnJlbnQgPSBpZHggKyAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc2V0RHJvcHBhYmxlSXRlbShfaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaWR4IDwgZ2FwSW5kZXggJiYgX2l0ZW0ucmVjdC50b3AgPT0gbmV4dEl0ZW0ucmVjdC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXREcm9wcGFibGVJdGVtKF9pdGVtLCBgbGVmdGApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9pZHggPj0gZ2FwSW5kZXggJiYgX2lkeCA8IGRyYWdJbmRleCAmJiBfaXRlbS5yZWN0LnRvcCA9PSBuZXh0SXRlbS5yZWN0LnRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldERyb3BwYWJsZUl0ZW0oX2l0ZW0sIGByaWdodGApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc2V0RHJvcHBhYmxlSXRlbShfaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gaWYgKGRyYWdPcmRlciA8IGdhcEluZGV4KVxuICAgICAgICAgICAgICAgICAgaWYgKGRyYWdnZWRQb3NpdGlvbiA9PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pZHggPj0gZ2FwSW5kZXggJiYgX2l0ZW0ucmVjdC50b3AgPT0gbmV4dEl0ZW0ucmVjdC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXREcm9wcGFibGVJdGVtKF9pdGVtLCBgcmlnaHRgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNldERyb3BwYWJsZUl0ZW0oX2l0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRQb3NpdGlvbiA9PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaWR4IDwgZ2FwSW5kZXggJiYgX2lkeCA+IGRyYWdJbmRleCAmJiBfaXRlbS5yZWN0LnRvcCA9PSBkaS5yZWN0LnRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldERyb3BwYWJsZUl0ZW0oX2l0ZW0sIGBsZWZ0YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzZXREcm9wcGFibGVJdGVtKF9pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pZHggPCBnYXBJbmRleCAmJiBfaWR4ID4gZHJhZ0luZGV4ICYmIF9pdGVtLnJlY3QudG9wID09IGRpLnJlY3QudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RHJvcHBhYmxlSXRlbShfaXRlbSwgYGxlZnRgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfaWR4ID49IGdhcEluZGV4ICYmIF9pdGVtLnJlY3QudG9wID09IGRpLnJlY3QudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RHJvcHBhYmxlSXRlbShfaXRlbSwgYHJpZ2h0YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzZXREcm9wcGFibGVJdGVtKF9pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyByZXNldCB3aGVuIHRoZSBtb3VzZSBpcyBub3QgaG92ZXJpbmcgb24gYSBjYXJkIG9yIGJldHdlZW4gdHdvIGNhcmRzXG4gICAgICAgICAgICAgIGlmICghZGkuaXNEcmFnZ2luZ0hvc3QgJiYgaW5zZXJ0UG9zaXRpb24uY3VycmVudCA9PSBudWxsKSByZXNldERyb3BwYWJsZUl0ZW0oZGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZXRSZWZTdHlsZSh7XG4gICAgICAgIC4uLnJlZlN0eWxlLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgekluZGV4OiA1MDAwLFxuICAgICAgICB0cmFuc2l0aW9uOiAnJyxcbiAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7ZXYucGFnZVggLSBzdGFydENvb3Jkcy5jdXJyZW50WzBdfXB4LCAke2V2LnBhZ2VZIC0gc3RhcnRDb29yZHMuY3VycmVudFsxXX1weClgLFxuICAgICAgfSk7XG4gICAgICBoYW5kbGVEaXNhYmxlZEVsZW1lbnRzKHRydWUpO1xuICAgIH0sXG4gICAgW3NldFJlZlN0eWxlLCByZWZTdHlsZV1cbiAgKTtcblxuICBjb25zdCBvbkRyYWdTdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldjogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNsaWNrT3V0c2lkZSgpO1xuICAgICAgaWYgKGlzRHJhZ2dpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXNNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IGV2LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlY3QgPSBkcmFnZ2luZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3QgZHJhZ2dhYmxlTm9kZXM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdi4ke0RSQUdHQUJMRV9SRUZfS0xBWlp9LXdyYXBwZXJgKSk7XG4gICAgICBjb25zdCBkcm9wcGFibGVJdGVtczogRHJvcHBhYmxlSXRlbVtdID0gZHJhZ2dhYmxlTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBpc0RyYWdnaW5nSG9zdCA9IG5vZGUuY29udGFpbnMoZHJhZ2dpbmcpO1xuICAgICAgICBjb25zdCBkcm9wcGFibGVJdGVtOiBEcm9wcGFibGVJdGVtID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIHJlY3Q6IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgaXNEcmFnZ2luZ0hvc3Q6IGlzRHJhZ2dpbmdIb3N0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZHJvcHBhYmxlSXRlbTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbml0U3R5bGUgPSB7XG4gICAgICAgIC4uLnJlZlN0eWxlLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdG9wOiByZWN0LnksXG4gICAgICAgIGxlZnQ6IHJlY3QueCxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIHpJbmRleDogNTAwMCxcbiAgICAgIH07XG5cbiAgICAgIHN0YXJ0Q29vcmRzLmN1cnJlbnQgPSBbZXYucGFnZVgsIGV2LnBhZ2VZXTtcbiAgICAgIHNldFJlZlN0eWxlKGluaXRTdHlsZSk7XG4gICAgICBzZXRJc0RyYWdnaW5nKHRydWUpO1xuICAgICAgbW91c2VNb3ZlTGlzdGVuZXIuY3VycmVudCA9IChldikgPT4gb25Nb3VzZU1vdmVXaGlsZURyYWdnaW5nKGV2IGFzIE1vdXNlRXZlbnQsIGRyb3BwYWJsZUl0ZW1zKTtcbiAgICAgIG1vdXNlVXBMaXN0ZW5lci5jdXJyZW50ID0gKCkgPT4gb25Nb3VzZVVwV2hpbGVEcmFnZ2luZyhkcm9wcGFibGVJdGVtcyk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZU1vdmVMaXN0ZW5lci5jdXJyZW50KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwTGlzdGVuZXIuY3VycmVudCk7XG4gICAgICBoYW5kbGVEaXNhYmxlZEVsZW1lbnRzKHRydWUpO1xuICAgIH0sXG4gICAgW3NldFJlZlN0eWxlLCBzZXRJc0RyYWdnaW5nLCBvbk1vdXNlTW92ZVdoaWxlRHJhZ2dpbmcsIG9uTW91c2VVcFdoaWxlRHJhZ2dpbmcsIHJlZlN0eWxlLCBpc0RyYWdnaW5nXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXt3cmFwcGVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjc3MoYCR7RFJBR0dBQkxFX1JFRl9LTEFaWn0td3JhcHBlcmApfVxuICAgICAgb25EcmFnU3RhcnQ9e29uRHJhZ1N0YXJ0fVxuICAgICAgb25UcmFuc2l0aW9uRW5kPXtvblRyYW5zaXRpb25FbmR9XG4gICAgICBzdHlsZT17eyAuLi5yZWZTdHlsZSB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ2FyZCwgQ2FyZFByb3BzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRFJBR0dBQkxFX1JFRl9LTEFaWiwgRGFzaGJvYXJkQ2FyZFNpemVzIH0gZnJvbSAnLi9kYXNoYm9hcmQtdXRpbHMnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlUmVmIH0gZnJvbSAnLi9EcmFnZ2FibGVSZWYnO1xuaW1wb3J0IHsgUmVzaXphYmxlUmVmIH0gZnJvbSAnLi9SZXNpemFibGVSZWYnO1xuXG5leHBvcnQgY29uc3QgRGFzaGJvYXJkQ2FyZENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD4+KFJlYWN0LmNyZWF0ZVJlZigpKTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDYXJkUHJvcHMgZXh0ZW5kcyBDYXJkUHJvcHMge1xuICBkYXNoYm9hcmRJZDogbnVtYmVyO1xuICBjYXJkU2l6ZXM6IERhc2hib2FyZENhcmRTaXplcztcbiAgY2FyZEhlYWRlcjogUmVhY3QuUmVhY3ROb2RlO1xuICBpc0RyYWdnYWJsZT86IGJvb2xlYW47XG4gIGlzUmVzaXphYmxlPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRDYXJkOiBSZWFjdC5GQzxEYXNoYm9hcmRDYXJkUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4gPSBudWxsLFxuICBjYXJkSGVhZGVyID0gbnVsbCxcbiAgZGFzaGJvYXJkSWQsXG4gIGlzRHJhZ2dhYmxlID0gdHJ1ZSxcbiAgaXNSZXNpemFibGUgPSB0cnVlLFxuICBjYXJkU2l6ZXMsXG4gIC4uLnByb3BzXG59OiBEYXNoYm9hcmRDYXJkUHJvcHMpID0+IHtcbiAgY29uc3QgY2FyZFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgb25Nb3VzZUVudGVyID0gUmVhY3QudXNlQ2FsbGJhY2soKF9lOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChjYXJkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhcmRSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKGAke0RSQUdHQUJMRV9SRUZfS0xBWlp9LWhvdmVyYCk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25Nb3VzZUxlYXZlID0gUmVhY3QudXNlQ2FsbGJhY2soKF9lOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChjYXJkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhcmRSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKGAke0RSQUdHQUJMRV9SRUZfS0xBWlp9LWhvdmVyYCk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgcmVzaXplQmFyID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGlzUmVzaXphYmxlID8gPFJlc2l6YWJsZVJlZiBjYXJkSWQ9e2Rhc2hib2FyZElkfSBjYXJkU2l6ZXM9e2NhcmRTaXplc30gLz4gOiBudWxsO1xuICB9LCBbaXNSZXNpemFibGUsIGNhcmRTaXplcywgZGFzaGJvYXJkSWRdKTtcblxuICBjb25zdCBjb250ZW50ID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgaXNEcmFnZ2FibGUgPyAoXG4gICAgICAgIDxEcmFnZ2FibGVSZWYgZGFzaGJvYXJkSWQ9e2Rhc2hib2FyZElkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2Rhc2hib2FyZC1jYXJkLXJlc2l6YWJsZS13cmFwcGVyJ30gcmVmPXtjYXJkUmVmfT5cbiAgICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImRhc2hib2FyZC1jYXJkXCIgaXNSb3VuZGVkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NzcyhgJHtEUkFHR0FCTEVfUkVGX0tMQVpafV9fZ3JpcGApfVxuICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17b25Nb3VzZUxlYXZlfVxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZSAvLyBkcmFnZ2FibGUgaXMgcmVxdWlyZWQgZm9yIGRyYWcgZXZlbnRzIHRvIGZpcmVcbiAgICAgICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjYXJkLWRyYWdnYWJsZS1ncmlwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjYXJkSGVhZGVyfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAge3Jlc2l6ZUJhcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9EcmFnZ2FibGVSZWY+XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIDxDYXJkIGlzUm91bmRlZCB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge2NhcmRIZWFkZXJ9XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgIHtyZXNpemVCYXJ9XG4gICAgICAgIDwvPlxuICAgICAgKSxcbiAgICBbY2FyZFJlZiwgcHJvcHMsIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlLCBjYXJkSGVhZGVyLCBjaGlsZHJlbiwgaXNEcmFnZ2FibGUsIGRhc2hib2FyZElkLCByZXNpemVCYXJdXG4gICk7XG5cbiAgcmV0dXJuIDxEYXNoYm9hcmRDYXJkQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y2FyZFJlZn0+e2NvbnRlbnR9PC9EYXNoYm9hcmRDYXJkQ29udGV4dC5Qcm92aWRlcj47XG59O1xuRGFzaGJvYXJkQ2FyZC5kaXNwbGF5TmFtZSA9ICdEYXNoYm9hcmRDYXJkJztcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBEYXNoYm9hcmRDYXJkRGVzY3JpcHRvciwgRGFzaGJvYXJkQ2FyZFNpemVzLCBEYXNoYm9hcmRDYXJkVHlwZVByb3BzIH0gZnJvbSAnQGFwcC9EYXNoYm9hcmQvZGFzaGJvYXJkLXV0aWxzJztcbmltcG9ydCB7IFRoZW1lU2V0dGluZywgVGhlbWVUeXBlIH0gZnJvbSAnQGFwcC9TZXR0aW5ncy9TZXR0aW5nc1V0aWxzJztcbmltcG9ydCB7IE1CZWFuTWV0cmljcyB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgdXNlRGF5anMgZnJvbSAnQGFwcC91dGlscy91c2VEYXlqcyc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSAnQGFwcC91dGlscy91c2VUaGVtZSc7XG5pbXBvcnQge1xuICBDaGFydCxcbiAgQ2hhcnRBcmVhLFxuICBDaGFydEF4aXMsXG4gIENoYXJ0RG9udXRVdGlsaXphdGlvbixcbiAgQ2hhcnRHcm91cCxcbiAgQ2hhcnRMYWJlbCxcbiAgQ2hhcnRMZWdlbmQsXG4gIENoYXJ0TGluZSxcbiAgQ2hhcnRWb3Jvbm9pQ29udGFpbmVyLFxuICBnZXRSZXNpemVPYnNlcnZlcixcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY2hhcnRzJztcbmltcG9ydCB7IEJ1dHRvbiwgQ2FyZEFjdGlvbnMsIENhcmRCb2R5LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IE1vbml0b3JpbmdJY29uLCBTeW5jQWx0SWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENhcmQgfSBmcm9tICcuLi8uLi9EYXNoYm9hcmRDYXJkJztcbmltcG9ydCB7IENoYXJ0Q29udGV4dCB9IGZyb20gJy4vLi4vQ2hhcnRDb250ZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBNQmVhbk1ldHJpY3NDaGFydENhcmRQcm9wcyBleHRlbmRzIERhc2hib2FyZENhcmRUeXBlUHJvcHMge1xuICB0aGVtZUNvbG9yOiBzdHJpbmc7XG4gIGNoYXJ0S2luZDogc3RyaW5nO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBwZXJpb2Q6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIERhdGFwb2ludCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNhbXBsZSB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBkYXRhcG9pbnQ6IERhdGFwb2ludDtcbn1cblxuaW50ZXJmYWNlIE1CZWFuTWV0cmljc0NoYXJ0S2luZCB7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGZpZWxkczogc3RyaW5nW107XG4gIG1hcHBlcjogKG1ldHJpY3M6IE1CZWFuTWV0cmljcykgPT4gRGF0YXBvaW50W107XG4gIHNpbmdsZVZhbHVlPzogYm9vbGVhbjtcbiAgdmlzdWFsOiAoY3J5b3N0YXRUaGVtZTogVGhlbWVUeXBlLCB0aGVtZUNvbG9yOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIHNhbXBsZXM6IFNhbXBsZVtdKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59XG5cbmNvbnN0IFNpbXBsZUNoYXJ0OiBSZWFjdC5GQzx7XG4gIGNyeW9zdGF0VGhlbWU/OiBUaGVtZVR5cGU7XG4gIHRoZW1lQ29sb3I/OiBzdHJpbmc7XG4gIHN0eWxlOiAnbGluZScgfCAnYXJlYSc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIHNhbXBsZXM6IFNhbXBsZVtdO1xuICB1bml0czogc3RyaW5nO1xuICBpbnRlcnBvbGF0aW9uPzogJ2xpbmVhcicgfCAnc3RlcCcgfCAnbW9ub3RvbmVYJztcbn0+ID0gKHsgY3J5b3N0YXRUaGVtZSwgdGhlbWVDb2xvciwgc3R5bGUsIHdpZHRoLCBzYW1wbGVzLCB1bml0cywgaW50ZXJwb2xhdGlvbiB9KSA9PiB7XG4gIGNvbnN0IFtkYXlqcywgZGF0ZVRpbWVGb3JtYXRdID0gdXNlRGF5anMoKTtcblxuICBjb25zdCBkYXRhID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBzYW1wbGVzLm1hcCgodikgPT4gKHsgeDogdi50aW1lc3RhbXAsIHk6IHYuZGF0YXBvaW50LnZhbHVlLCBuYW1lOiB2LmRhdGFwb2ludC5uYW1lIH0pKSxcbiAgICBbc2FtcGxlc11cbiAgKTtcblxuICBjb25zdCBrZXlzID0gUmVhY3QudXNlTWVtbygoKSA9PiBfLnVuaXFCeShkYXRhLCAoZCkgPT4gZC5uYW1lKSwgW2RhdGFdKTtcblxuICBjb25zdCByZW5kZXIgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoa2V5LCBkYXRhLCBzdHlsZSkgPT5cbiAgICAgIHN0eWxlID09PSAnbGluZScgPyAoXG4gICAgICAgIDxDaGFydExpbmUga2V5PXtrZXl9IGRhdGE9e2RhdGF9IG5hbWU9e3VuaXRzfSBpbnRlcnBvbGF0aW9uPXtpbnRlcnBvbGF0aW9ufSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPENoYXJ0QXJlYSBrZXk9e2tleX0gZGF0YT17ZGF0YX0gbmFtZT17dW5pdHN9IGludGVycG9sYXRpb249e2ludGVycG9sYXRpb259IC8+XG4gICAgICApLFxuICAgIFt1bml0cywgaW50ZXJwb2xhdGlvbl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDaGFydFxuICAgICAgY29udGFpbmVyQ29tcG9uZW50PXtcbiAgICAgICAgPENoYXJ0Vm9yb25vaUNvbnRhaW5lclxuICAgICAgICAgIGxhYmVscz17KHsgZGF0dW0gfSkgPT5cbiAgICAgICAgICAgIGAke2RheWpzKGRhdHVtLngpLnR6KGRhdGVUaW1lRm9ybWF0LnRpbWVab25lLmZ1bGwpLmZvcm1hdCgnTExMTCcpfTogJHtcbiAgICAgICAgICAgICAgdHlwZW9mIGRhdHVtLnkgPT09ICdudW1iZXInID8gZGF0dW0ueS50b0ZpeGVkKDIpIDogZGF0dW0ueVxuICAgICAgICAgICAgfSAke3VuaXRzIHx8ICcnfWBcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3RyYWluVG9WaXNpYmxlQXJlYVxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAgbGVnZW5kRGF0YT17a2V5cy5sZW5ndGggPiAxID8ga2V5cy5tYXAoKGspID0+ICh7IG5hbWU6IGsubmFtZSB9KSkgOiBbXX1cbiAgICAgIGxlZ2VuZFBvc2l0aW9uPXsnYm90dG9tJ31cbiAgICAgIGxlZ2VuZENvbXBvbmVudD17XG4gICAgICAgIDxDaGFydExlZ2VuZFxuICAgICAgICAgIGxhYmVsQ29tcG9uZW50PXtcbiAgICAgICAgICAgIDxDaGFydExhYmVsXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZmlsbDpcbiAgICAgICAgICAgICAgICAgIGNyeW9zdGF0VGhlbWUgPT09IFRoZW1lU2V0dGluZy5EQVJLXG4gICAgICAgICAgICAgICAgICAgID8gJ3ZhcigtLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmxhY2stMjAwKSdcbiAgICAgICAgICAgICAgICAgICAgOiAndmFyKC0tcGYtY2hhcnQtZ2xvYmFsLS1sYWJlbC0tRmlsbCwgIzE1MTUxNSknLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICB0aGVtZUNvbG9yPXt0aGVtZUNvbG9yfVxuICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgcGFkZGluZz17e1xuICAgICAgICBsZWZ0OiA1NCxcbiAgICAgICAgcmlnaHQ6IDMwLFxuICAgICAgICB0b3A6IDEwLFxuICAgICAgICBib3R0b206IDYwLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Q2hhcnRBeGlzIHRpY2tGb3JtYXQ9eyh0KSA9PiBkYXlqcyh0KS50eihkYXRlVGltZUZvcm1hdC50aW1lWm9uZS5mdWxsKS5mb3JtYXQoJ0xUUycpfSBmaXhMYWJlbE92ZXJsYXAgLz5cbiAgICAgIDxDaGFydEF4aXNcbiAgICAgICAgdGlja0Zvcm1hdD17KHQpID0+ICh0eXBlb2YgdCAhPT0gJ251bWJlcicgPyB0IDogdC50b1ByZWNpc2lvbigyKSl9XG4gICAgICAgIGRlcGVuZGVudEF4aXNcbiAgICAgICAgc2hvd0dyaWRcbiAgICAgICAgbGFiZWw9e3VuaXRzfVxuICAgICAgICBheGlzTGFiZWxDb21wb25lbnQ9e1xuICAgICAgICAgIDxDaGFydExhYmVsXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBmaWxsOlxuICAgICAgICAgICAgICAgIGNyeW9zdGF0VGhlbWUgPT09IFRoZW1lU2V0dGluZy5EQVJLXG4gICAgICAgICAgICAgICAgICA/ICd2YXIoLS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsYWNrLTIwMCknXG4gICAgICAgICAgICAgICAgICA6ICd2YXIoLS1wZi1jaGFydC1nbG9iYWwtLWxhYmVsLS1GaWxsLCAjMTUxNTE1KScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8Q2hhcnRHcm91cD5cbiAgICAgICAge2tleXMubWFwKChrKSA9PlxuICAgICAgICAgIHJlbmRlcihcbiAgICAgICAgICAgIGssXG4gICAgICAgICAgICBkYXRhLmZpbHRlcigoZCkgPT4gZC5uYW1lID09PSBrLm5hbWUpLFxuICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgICApXG4gICAgICAgICl9XG4gICAgICA8L0NoYXJ0R3JvdXA+XG4gICAgPC9DaGFydD5cbiAgKTtcbn07XG5cbi8vIFRPRE8gdGhlc2UgbmVlZCB0byBiZSBsb2NhbGl6ZWRcbmNvbnN0IGNoYXJ0S2luZHM6IE1CZWFuTWV0cmljc0NoYXJ0S2luZFtdID0gW1xuICB7XG4gICAgZGlzcGxheU5hbWU6ICdQcm9jZXNzIENQVSBMb2FkJyxcbiAgICBjYXRlZ29yeTogJ29zJyxcbiAgICBmaWVsZHM6IFsncHJvY2Vzc0NwdUxvYWQnXSxcbiAgICBtYXBwZXI6IChtZXRyaWNzOiBNQmVhbk1ldHJpY3MpID0+IFt7IG5hbWU6ICdwcm9jZXNzQ3B1TG9hZCcsIHZhbHVlOiAobWV0cmljcz8ub3M/LnByb2Nlc3NDcHVMb2FkIHx8IDApICogMTAwIH1dLFxuICAgIHZpc3VhbDogKGNyeW9zdGF0VGhlbWU6IFRoZW1lVHlwZSwgdGhlbWVDb2xvcjogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBzYW1wbGVzOiBTYW1wbGVbXSkgPT4gKFxuICAgICAgPFNpbXBsZUNoYXJ0XG4gICAgICAgIHNhbXBsZXM9e3NhbXBsZXN9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgdW5pdHM9eyclJ31cbiAgICAgICAgaW50ZXJwb2xhdGlvbj17J21vbm90b25lWCd9XG4gICAgICAgIHN0eWxlPXsnbGluZSd9XG4gICAgICAgIHRoZW1lQ29sb3I9e3RoZW1lQ29sb3J9XG4gICAgICAgIGNyeW9zdGF0VGhlbWU9e2NyeW9zdGF0VGhlbWV9XG4gICAgICAvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBkaXNwbGF5TmFtZTogJ1N5c3RlbSBMb2FkIEF2ZXJhZ2UnLFxuICAgIGNhdGVnb3J5OiAnb3MnLFxuICAgIGZpZWxkczogWydzeXN0ZW1Mb2FkQXZlcmFnZSddLFxuICAgIG1hcHBlcjogKG1ldHJpY3M6IE1CZWFuTWV0cmljcykgPT4gW3sgbmFtZTogJ3N5c3RlbUxvYWRBdmVyYWdlJywgdmFsdWU6IG1ldHJpY3M/Lm9zPy5zeXN0ZW1Mb2FkQXZlcmFnZSB8fCAwIH1dLFxuICAgIHZpc3VhbDogKGNyeW9zdGF0VGhlbWU6IFRoZW1lVHlwZSwgdGhlbWVDb2xvcjogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBzYW1wbGVzOiBTYW1wbGVbXSkgPT4gKFxuICAgICAgPFNpbXBsZUNoYXJ0XG4gICAgICAgIHNhbXBsZXM9e3NhbXBsZXN9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgdW5pdHM9eycnfVxuICAgICAgICBpbnRlcnBvbGF0aW9uPXsnbW9ub3RvbmVYJ31cbiAgICAgICAgc3R5bGU9eydsaW5lJ31cbiAgICAgICAgdGhlbWVDb2xvcj17dGhlbWVDb2xvcn1cbiAgICAgICAgY3J5b3N0YXRUaGVtZT17Y3J5b3N0YXRUaGVtZX1cbiAgICAgIC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGRpc3BsYXlOYW1lOiAnU3lzdGVtIENQVSBMb2FkJyxcbiAgICBjYXRlZ29yeTogJ29zJyxcbiAgICBmaWVsZHM6IFsnc3lzdGVtQ3B1TG9hZCddLFxuICAgIG1hcHBlcjogKG1ldHJpY3M6IE1CZWFuTWV0cmljcykgPT4gW3sgbmFtZTogJ3N5c3RlbUNwdUxvYWQnLCB2YWx1ZTogKG1ldHJpY3M/Lm9zPy5zeXN0ZW1DcHVMb2FkIHx8IDApICogMTAwIH1dLFxuICAgIHZpc3VhbDogKGNyeW9zdGF0VGhlbWU6IFRoZW1lVHlwZSwgdGhlbWVDb2xvcjogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBzYW1wbGVzOiBTYW1wbGVbXSkgPT4gKFxuICAgICAgPFNpbXBsZUNoYXJ0XG4gICAgICAgIHNhbXBsZXM9e3NhbXBsZXN9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgdW5pdHM9eyclJ31cbiAgICAgICAgc3R5bGU9eydsaW5lJ31cbiAgICAgICAgdGhlbWVDb2xvcj17dGhlbWVDb2xvcn1cbiAgICAgICAgY3J5b3N0YXRUaGVtZT17Y3J5b3N0YXRUaGVtZX1cbiAgICAgIC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGRpc3BsYXlOYW1lOiAnUGh5c2ljYWwgTWVtb3J5JyxcbiAgICBjYXRlZ29yeTogJ29zJyxcbiAgICBmaWVsZHM6IFsnZnJlZVBoeXNpY2FsTWVtb3J5U2l6ZScsICd0b3RhbFBoeXNpY2FsTWVtb3J5U2l6ZSddLFxuICAgIC8vIFRPRE8gc2NhbGUgdW5pdHMgYXV0b21hdGljYWxseSBhbmQgcmVwb3J0IHVuaXRzIGR5bmFtaWNhbGx5XG4gICAgbWFwcGVyOiAobWV0cmljczogTUJlYW5NZXRyaWNzKSA9PiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd1c2VkUGh5c2ljYWxNZW1vcnlTaXplJyxcbiAgICAgICAgdmFsdWU6XG4gICAgICAgICAgKChtZXRyaWNzPy5vcz8udG90YWxQaHlzaWNhbE1lbW9yeVNpemUgfHwgMCkgLSAobWV0cmljcz8ub3M/LmZyZWVQaHlzaWNhbE1lbW9yeVNpemUgfHwgMCkpIC9cbiAgICAgICAgICBNYXRoLnBvdygxMDI0LCAyKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0b3RhbFBoeXNpY2FsTWVtb3J5U2l6ZScsXG4gICAgICAgIHZhbHVlOiAobWV0cmljcz8ub3M/LnRvdGFsUGh5c2ljYWxNZW1vcnlTaXplIHx8IDApIC8gTWF0aC5wb3coMTAyNCwgMiksXG4gICAgICB9LFxuICAgIF0sXG4gICAgdmlzdWFsOiAoY3J5b3N0YXRUaGVtZTogVGhlbWVUeXBlLCB0aGVtZUNvbG9yOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIHNhbXBsZXM6IFNhbXBsZVtdKSA9PiAoXG4gICAgICA8U2ltcGxlQ2hhcnRcbiAgICAgICAgc2FtcGxlcz17c2FtcGxlc31cbiAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICB1bml0cz17J01pQid9XG4gICAgICAgIGludGVycG9sYXRpb249eydzdGVwJ31cbiAgICAgICAgc3R5bGU9eydhcmVhJ31cbiAgICAgICAgdGhlbWVDb2xvcj17dGhlbWVDb2xvcn1cbiAgICAgICAgY3J5b3N0YXRUaGVtZT17Y3J5b3N0YXRUaGVtZX1cbiAgICAgIC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGRpc3BsYXlOYW1lOiAnSGVhcCBNZW1vcnkgVXNhZ2UnLFxuICAgIGNhdGVnb3J5OiAnbWVtb3J5JyxcbiAgICBmaWVsZHM6IFsnaGVhcE1lbW9yeVVzYWdleyB1c2VkIH0nXSxcbiAgICBtYXBwZXI6IChtZXRyaWNzOiBNQmVhbk1ldHJpY3MpID0+IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2hlYXBNZW1vcnlVc2VkJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucm91bmQoKG1ldHJpY3M/Lm1lbW9yeT8uaGVhcE1lbW9yeVVzYWdlPy51c2VkIHx8IDApIC8gTWF0aC5wb3coMTAyNCwgMikpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHZpc3VhbDogKGNyeW9zdGF0VGhlbWU6IFRoZW1lVHlwZSwgdGhlbWVDb2xvcjogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBzYW1wbGVzOiBTYW1wbGVbXSkgPT4gKFxuICAgICAgPFNpbXBsZUNoYXJ0XG4gICAgICAgIHNhbXBsZXM9e3NhbXBsZXN9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgdW5pdHM9eydNaUInfVxuICAgICAgICBpbnRlcnBvbGF0aW9uPXsnc3RlcCd9XG4gICAgICAgIHN0eWxlPXsnYXJlYSd9XG4gICAgICAgIHRoZW1lQ29sb3I9e3RoZW1lQ29sb3J9XG4gICAgICAgIGNyeW9zdGF0VGhlbWU9e2NyeW9zdGF0VGhlbWV9XG4gICAgICAvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBkaXNwbGF5TmFtZTogJ0hlYXAgVXNhZ2UgUGVyY2VudGFnZScsXG4gICAgY2F0ZWdvcnk6ICdtZW1vcnknLFxuICAgIGZpZWxkczogWydoZWFwTWVtb3J5VXNhZ2VQZXJjZW50J10sXG4gICAgbWFwcGVyOiAobWV0cmljczogTUJlYW5NZXRyaWNzKSA9PiBbXG4gICAgICB7IG5hbWU6ICdoZWFwTWVtb3J5VXNhZ2UnLCB2YWx1ZTogbWV0cmljcz8ubWVtb3J5Py5oZWFwTWVtb3J5VXNhZ2VQZXJjZW50IHx8IDAgfSxcbiAgICBdLFxuICAgIHNpbmdsZVZhbHVlOiB0cnVlLFxuICAgIHZpc3VhbDogKGNyeW9zdGF0VGhlbWU6IFRoZW1lU2V0dGluZywgdGhlbWVDb2xvcjogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBzYW1wbGVzOiBTYW1wbGVbXSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gMDtcbiAgICAgIGlmIChzYW1wbGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhbHVlID0gc2FtcGxlcy5zbGljZSgtMSlbMF0uZGF0YXBvaW50LnZhbHVlICogMTAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENoYXJ0RG9udXRVdGlsaXphdGlvblxuICAgICAgICAgIGNvbnN0cmFpblRvVmlzaWJsZUFyZWFcbiAgICAgICAgICBkYXRhPXt7IHg6ICdVc2VkIGhlYXAgbWVtb3J5JywgeTogdmFsdWUgfX1cbiAgICAgICAgICB0aXRsZT17YCR7dmFsdWUudG9GaXhlZCgyKX0lYH1cbiAgICAgICAgICBsYWJlbHM9eyh7IGRhdHVtIH0pID0+IChkYXR1bS54ID8gYCR7ZGF0dW0ueH06ICR7ZGF0dW0ueS50b0ZpeGVkKDIpfSVgIDogbnVsbCl9XG4gICAgICAgICAgdGl0bGVDb21wb25lbnQ9e1xuICAgICAgICAgICAgPENoYXJ0TGFiZWxcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmaWxsOlxuICAgICAgICAgICAgICAgICAgY3J5b3N0YXRUaGVtZSA9PT0gVGhlbWVTZXR0aW5nLkRBUktcbiAgICAgICAgICAgICAgICAgICAgPyAndmFyKC0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibGFjay0yMDApJ1xuICAgICAgICAgICAgICAgICAgICA6ICd2YXIoLS1wZi1jaGFydC1kb251dC0tbGFiZWwtLXRpdGxlLS1GaWxsLCAjMTUxNTE1KScsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcyNHB4JyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoZW1lQ29sb3I9e3RoZW1lQ29sb3J9XG4gICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgZGlzcGxheU5hbWU6ICdOb24tSGVhcCBNZW1vcnkgVXNhZ2UnLFxuICAgIGNhdGVnb3J5OiAnbWVtb3J5JyxcbiAgICBmaWVsZHM6IFsnbm9uSGVhcE1lbW9yeVVzYWdleyB1c2VkIH0nXSxcbiAgICBtYXBwZXI6IChtZXRyaWNzOiBNQmVhbk1ldHJpY3MpID0+IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25vbkhlYXBNZW1vcnlVc2VkJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucm91bmQoKG1ldHJpY3M/Lm1lbW9yeT8ubm9uSGVhcE1lbW9yeVVzYWdlPy51c2VkIHx8IDApIC8gTWF0aC5wb3coMTAyNCwgMikpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHZpc3VhbDogKGNyeW9zdGF0VGhlbWU6IFRoZW1lVHlwZSwgdGhlbWVDb2xvcjogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBzYW1wbGVzOiBTYW1wbGVbXSkgPT4gKFxuICAgICAgPFNpbXBsZUNoYXJ0XG4gICAgICAgIHNhbXBsZXM9e3NhbXBsZXN9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgdW5pdHM9eydNaUInfVxuICAgICAgICBpbnRlcnBvbGF0aW9uPXsnc3RlcCd9XG4gICAgICAgIHN0eWxlPXsnYXJlYSd9XG4gICAgICAgIHRoZW1lQ29sb3I9e3RoZW1lQ29sb3J9XG4gICAgICAgIGNyeW9zdGF0VGhlbWU9e2NyeW9zdGF0VGhlbWV9XG4gICAgICAvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBkaXNwbGF5TmFtZTogJ1RocmVhZHMnLFxuICAgIGNhdGVnb3J5OiAndGhyZWFkJyxcbiAgICBmaWVsZHM6IFsnZGFlbW9uVGhyZWFkQ291bnQnLCAndGhyZWFkQ291bnQnXSxcbiAgICBtYXBwZXI6IChtZXRyaWNzOiBNQmVhbk1ldHJpY3MpID0+IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RhZW1vblRocmVhZENvdW50JyxcbiAgICAgICAgdmFsdWU6IG1ldHJpY3M/LnRocmVhZD8uZGFlbW9uVGhyZWFkQ291bnQgfHwgMCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aHJlYWRDb3VudCcsXG4gICAgICAgIHZhbHVlOiBtZXRyaWNzPy50aHJlYWQ/LnRocmVhZENvdW50IHx8IDAsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdmlzdWFsOiAoY3J5b3N0YXRUaGVtZTogVGhlbWVUeXBlLCB0aGVtZUNvbG9yOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIHNhbXBsZXM6IFNhbXBsZVtdKSA9PiAoXG4gICAgICA8U2ltcGxlQ2hhcnRcbiAgICAgICAgc2FtcGxlcz17c2FtcGxlc31cbiAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICB1bml0cz17J3RocmVhZHMnfVxuICAgICAgICBpbnRlcnBvbGF0aW9uPXsnc3RlcCd9XG4gICAgICAgIHN0eWxlPXsnbGluZSd9XG4gICAgICAgIHRoZW1lQ29sb3I9e3RoZW1lQ29sb3J9XG4gICAgICAgIGNyeW9zdGF0VGhlbWU9e2NyeW9zdGF0VGhlbWV9XG4gICAgICAvPlxuICAgICksXG4gIH0sXG5dO1xuXG5mdW5jdGlvbiBnZXRDaGFydEtpbmRCeU5hbWUobmFtZTogc3RyaW5nKTogTUJlYW5NZXRyaWNzQ2hhcnRLaW5kIHtcbiAgcmV0dXJuIGNoYXJ0S2luZHMuZmlsdGVyKChrKSA9PiBrLmRpc3BsYXlOYW1lID09PSBuYW1lKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IE1CZWFuTWV0cmljc0NoYXJ0Q2FyZDogUmVhY3QuRkM8TUJlYW5NZXRyaWNzQ2hhcnRDYXJkUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW3RoZW1lXSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHNlcnZpY2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IGNvbnRyb2xsZXJDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChDaGFydENvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IFtzYW1wbGVzLCBzZXRTYW1wbGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIFNhbXBsZVtdKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCByZXNpemVPYnNlcnZlciA9IFJlYWN0LnVzZVJlZigoKTogdm9pZCA9PiB1bmRlZmluZWQpO1xuICBjb25zdCBbY2FyZFdpZHRoLCBzZXRDYXJkV2lkdGhdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgY29uc3QgY29udGFpbmVyUmVmOiBSZWFjdC5SZWY8YW55PiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2luZCA9IGdldENoYXJ0S2luZEJ5TmFtZShwcm9wcy5jaGFydEtpbmQpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRyb2xsZXJDb250ZXh0Lm1iZWFuQ29udHJvbGxlci5hdHRhY2goa2luZC5jYXRlZ29yeSwga2luZC5maWVsZHMpLnN1YnNjcmliZSgodjogTUJlYW5NZXRyaWNzKSA9PiB7XG4gICAgICAgIHNldFNhbXBsZXMoKG9sZDogU2FtcGxlW10pID0+IHtcbiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IG5ld1NhbXBsZXM6IFNhbXBsZVtdID0ga2luZC5tYXBwZXIodikubWFwKChkYXRhcG9pbnQ6IERhdGFwb2ludCk6IFNhbXBsZSA9PiAoeyB0aW1lc3RhbXAsIGRhdGFwb2ludCB9KSk7XG4gICAgICAgICAgaWYgKGtpbmQuc2luZ2xlVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdTYW1wbGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gWy4uLm9sZCwgLi4ubmV3U2FtcGxlc10uZmlsdGVyKChkKSA9PiBkLnRpbWVzdGFtcCA+IHRpbWVzdGFtcCAtIHByb3BzLmR1cmF0aW9uICogMTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250cm9sbGVyQ29udGV4dCwgcHJvcHMuY2hhcnRLaW5kLCBwcm9wcy5kdXJhdGlvbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQgJiYgY29udGFpbmVyUmVmLmN1cnJlbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgIHNldENhcmRXaWR0aChjb250YWluZXJSZWYuY3VycmVudC5jbGllbnRXaWR0aCk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyUmVmLCBzZXRDYXJkV2lkdGhdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlc2l6ZU9ic2VydmVyLmN1cnJlbnQgPSBnZXRSZXNpemVPYnNlcnZlcihjb250YWluZXJSZWYuY3VycmVudCwgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gcmVzaXplT2JzZXJ2ZXIuY3VycmVudDtcbiAgfSwgW3Jlc2l6ZU9ic2VydmVyLCBjb250YWluZXJSZWYsIGhhbmRsZVJlc2l6ZV0pO1xuXG4gIGNvbnN0IHJlZnJlc2ggPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29udHJvbGxlckNvbnRleHQubWJlYW5Db250cm9sbGVyLnJlcXVlc3RSZWZyZXNoKCk7XG4gIH0sIFtjb250cm9sbGVyQ29udGV4dF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgc2VydmljZUNvbnRleHQudGFyZ2V0LnRhcmdldCgpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICBzZXRTYW1wbGVzKFtdKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgc2VydmljZUNvbnRleHQsIHNldFNhbXBsZXMsIHJlZnJlc2hdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZnJlc2goKTtcbiAgICBhZGRTdWJzY3JpcHRpb24oaW50ZXJ2YWwocHJvcHMucGVyaW9kICogMTAwMCkuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2goKSkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBwcm9wcy5wZXJpb2QsIHJlZnJlc2hdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250cm9sbGVyQ29udGV4dC5tYmVhbkNvbnRyb2xsZXIubG9hZGluZygpLnN1YnNjcmliZShzZXRMb2FkaW5nKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRyb2xsZXJDb250ZXh0LCBzZXRMb2FkaW5nXSk7XG5cbiAgY29uc3QgcmVmcmVzaEJ1dHRvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBrZXk9ezB9XG4gICAgICAgIGFyaWEtbGFiZWw9e3QoJ0NIQVJUX0NBUkQuQlVUVE9OUy5TWU5DLkxBQkVMJywgeyBjaGFydEtpbmQ6IHByb3BzLmNoYXJ0S2luZCB9KX1cbiAgICAgICAgb25DbGljaz17cmVmcmVzaH1cbiAgICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgICAgaWNvbj17PFN5bmNBbHRJY29uIC8+fVxuICAgICAgICBpc0Rpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAvPlxuICAgICksXG4gICAgW3QsIHByb3BzLmNoYXJ0S2luZCwgcmVmcmVzaCwgaXNMb2FkaW5nXVxuICApO1xuXG4gIGNvbnN0IGFjdGlvbnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBhID0gcHJvcHMuYWN0aW9ucyB8fCBbXTtcbiAgICByZXR1cm4gW3JlZnJlc2hCdXR0b24sIC4uLmFdO1xuICB9LCBbcHJvcHMuYWN0aW9ucywgcmVmcmVzaEJ1dHRvbl0pO1xuXG4gIGNvbnN0IGhlYWRlciA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgIDxDYXJkVGl0bGU+XG4gICAgICAgICAge3QoJ0NIQVJUX0NBUkQuVElUTEUnLCB7IGNoYXJ0S2luZDogcHJvcHMuY2hhcnRLaW5kLCBkdXJhdGlvbjogcHJvcHMuZHVyYXRpb24sIHBlcmlvZDogcHJvcHMucGVyaW9kIH0pfVxuICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgPENhcmRBY3Rpb25zPnthY3Rpb25zfTwvQ2FyZEFjdGlvbnM+XG4gICAgICA8L0NhcmRIZWFkZXI+XG4gICAgKSxcbiAgICBbdCwgcHJvcHMuY2hhcnRLaW5kLCBwcm9wcy5kdXJhdGlvbiwgcHJvcHMucGVyaW9kLCBhY3Rpb25zXVxuICApO1xuXG4gIGNvbnN0IGNoYXJ0S2luZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0Q2hhcnRLaW5kQnlOYW1lKHByb3BzLmNoYXJ0S2luZCksIFtwcm9wcy5jaGFydEtpbmRdKTtcblxuICBjb25zdCB2aXN1YWwgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IHN0eWxlPXt7IGhlaWdodDogcHJvcHMuaXNGdWxsSGVpZ2h0ID8gJzEwMCUnIDogJzMwMHB4JyB9fSBjbGFzc05hbWU9XCJkaXNhYmxlZC1wb2ludGVyXCI+XG4gICAgICAgIHtjaGFydEtpbmQudmlzdWFsKHRoZW1lLCBwcm9wcy50aGVtZUNvbG9yLCBjYXJkV2lkdGgsIHNhbXBsZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbdGhlbWUsIGNvbnRhaW5lclJlZiwgcHJvcHMudGhlbWVDb2xvciwgcHJvcHMuaXNGdWxsSGVpZ2h0LCBjaGFydEtpbmQsIGNhcmRXaWR0aCwgc2FtcGxlc11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxEYXNoYm9hcmRDYXJkXG4gICAgICBpZD17cHJvcHMuY2hhcnRLaW5kICsgJy1jaGFydC1jYXJkJ31cbiAgICAgIGRhc2hib2FyZElkPXtwcm9wcy5kYXNoYm9hcmRJZH1cbiAgICAgIGNhcmRTaXplcz17TUJlYW5NZXRyaWNzQ2hhcnRDYXJkU2l6ZXN9XG4gICAgICBpc0NvbXBhY3RcbiAgICAgIGlzRHJhZ2dhYmxlPXtwcm9wcy5pc0RyYWdnYWJsZX1cbiAgICAgIGlzUmVzaXphYmxlPXtwcm9wcy5pc1Jlc2l6YWJsZX1cbiAgICAgIGlzRnVsbEhlaWdodD17cHJvcHMuaXNGdWxsSGVpZ2h0fVxuICAgICAgY2FyZEhlYWRlcj17aGVhZGVyfVxuICAgID5cbiAgICAgIDxDYXJkQm9keT57dmlzdWFsfTwvQ2FyZEJvZHk+XG4gICAgPC9EYXNoYm9hcmRDYXJkPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IE1CZWFuTWV0cmljc0NoYXJ0Q2FyZFNpemVzOiBEYXNoYm9hcmRDYXJkU2l6ZXMgPSB7XG4gIHNwYW46IHtcbiAgICBtaW5pbXVtOiAyLFxuICAgIGRlZmF1bHQ6IDQsXG4gICAgbWF4aW11bTogMTIsXG4gIH0sXG4gIGhlaWdodDoge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBoZWlnaHQgcmVzaXppbmdcbiAgICBtaW5pbXVtOiBOdW1iZXIuTmFOLFxuICAgIGRlZmF1bHQ6IE51bWJlci5OYU4sXG4gICAgbWF4aW11bTogTnVtYmVyLk5hTixcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBNQmVhbk1ldHJpY3NDaGFydENhcmREZXNjcmlwdG9yOiBEYXNoYm9hcmRDYXJkRGVzY3JpcHRvciA9IHtcbiAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTixcbiAgdGl0bGU6ICdDSEFSVF9DQVJELk1CRUFOX01FVFJJQ1NfQ0FSRF9USVRMRScsXG4gIGNhcmRTaXplczogTUJlYW5NZXRyaWNzQ2hhcnRDYXJkU2l6ZXMsXG4gIGRlc2NyaXB0aW9uOiAnQ0hBUlRfQ0FSRC5NQkVBTl9NRVRSSUNTX0NBUkRfREVTQ1JJUFRJT04nLFxuICBkZXNjcmlwdGlvbkZ1bGw6IGBDSEFSVF9DQVJELk1CRUFOX01FVFJJQ1NfQ0FSRF9ERVNDUklQVElPTl9GVUxMYCxcbiAgY29tcG9uZW50OiBNQmVhbk1ldHJpY3NDaGFydENhcmQsXG4gIHByb3BDb250cm9sczogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuUEVSRk9STUFOQ0VfTUVUUklDLk5BTUUnLFxuICAgICAga2V5OiAnY2hhcnRLaW5kJyxcbiAgICAgIHZhbHVlczogY2hhcnRLaW5kcy5tYXAoKGspID0+IGsuZGlzcGxheU5hbWUpLFxuICAgICAgZGVmYXVsdFZhbHVlOiBjaGFydEtpbmRzWzBdLmRpc3BsYXlOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuUEVSRk9STUFOQ0VfTUVUUklDLkRFU0NSSVBUSU9OJywgLy8gVE9ETyBzaG91bGQgdGhpcyBiZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHZhbHVlIGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24/XG4gICAgICBraW5kOiAnc2VsZWN0JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuREFUQV9XSU5ET1cuTkFNRScsXG4gICAgICBrZXk6ICdkdXJhdGlvbicsXG4gICAgICBkZWZhdWx0VmFsdWU6IDYwLFxuICAgICAgZGVzY3JpcHRpb246ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuREFUQV9XSU5ET1cuREVTQ1JJUFRJT04nLFxuICAgICAga2luZDogJ251bWJlcicsXG4gICAgICBleHRyYXM6IHtcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IDMwMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnQ0hBUlRfQ0FSRC5QUk9QX0NPTlRST0xTLlJFRlJFU0hfUEVSSU9ELk5BTUUnLFxuICAgICAga2V5OiAncGVyaW9kJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMTAsIC8vIFRPRE8gdGhpcyBpcyBzZXQgZXF1YWwgdG8gdGhlIGRlZmF1bHQgU2V0dGluZ3MgdmFsdWUgZm9yIG1pbmltdW0gcmVmcmVzaCBwZXJpb2QsIGJ1dCBzaG91bGQgaW5zdGVhZCBiZSBzZXQgZHluYW1pY2FsbHkgZXF1YWwgdG8gdGhhdCBhY3R1YWwgdmFsdWUuXG4gICAgICBkZXNjcmlwdGlvbjogJ0NIQVJUX0NBUkQuUFJPUF9DT05UUk9MUy5SRUZSRVNIX1BFUklPRC5ERVNDUklQVElPTicsXG4gICAgICBraW5kOiAnbnVtYmVyJyxcbiAgICAgIGV4dHJhczoge1xuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1heDogMzAwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuVEhFTUUuTkFNRScsXG4gICAgICBrZXk6ICd0aGVtZUNvbG9yJyxcbiAgICAgIHZhbHVlczogWydibHVlJywgJ2N5YW4nLCAnZ29sZCcsICdncmF5JywgJ2dyZWVuJywgJ29yYW5nZScsICdwdXJwbGUnXSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ0JsdWUnLFxuICAgICAgZGVzY3JpcHRpb246ICdDSEFSVF9DQVJELlBST1BfQ09OVFJPTFMuVEhFTUUuREVTQ1JJUFRJT04nLFxuICAgICAga2luZDogJ3NlbGVjdCcsXG4gICAgICBleHRyYXM6IHtcbiAgICAgICAgZGlzcGxheU1hcHBlcjogXy5zdGFydENhc2UsXG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIGljb246IDxNb25pdG9yaW5nSWNvbiAvPixcbiAgbGFiZWxzOiBbXG4gICAge1xuICAgICAgY29udGVudDogJ01ldHJpY3MnLFxuICAgICAgY29sb3I6ICdibHVlJyxcbiAgICB9LFxuICBdLFxuICBwcmV2aWV3OiAoXG4gICAgPE1CZWFuTWV0cmljc0NoYXJ0Q2FyZFxuICAgICAgdGhlbWVDb2xvcj17J2JsdWUnfVxuICAgICAgY2hhcnRLaW5kPXtjaGFydEtpbmRzWzBdLmRpc3BsYXlOYW1lfVxuICAgICAgZHVyYXRpb249ezYwfVxuICAgICAgcGVyaW9kPXsxfVxuICAgICAgc3Bhbj17MTJ9XG4gICAgICBpc0Z1bGxIZWlnaHRcbiAgICAgIGlzRHJhZ2dhYmxlPXtmYWxzZX1cbiAgICAgIGlzUmVzaXphYmxlPXtmYWxzZX1cbiAgICAgIGRhc2hib2FyZElkPXswfVxuICAgIC8+XG4gICksXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IE1CZWFuTWV0cmljc0NoYXJ0Q2FyZERlc2NyaXB0b3IgfSBmcm9tICdAYXBwL0Rhc2hib2FyZC9DaGFydHMvbWJlYW4vTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJztcbmltcG9ydCB7XG4gIERhc2hib2FyZExheW91dCxcbiAgTGF5b3V0VGVtcGxhdGUsXG4gIExheW91dFRlbXBsYXRlUmVjb3JkLFxuICBMYXlvdXRUZW1wbGF0ZVZlbmRvcixcbn0gZnJvbSAnQGFwcC9EYXNoYm9hcmQvZGFzaGJvYXJkLXV0aWxzJztcbmltcG9ydCB7IG1vdmUsIHN3YXAgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IGdyaWRTcGFucyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBjcmVhdGVSZWR1Y2VyIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQgeyBnZXRQZXJzaXN0ZWRTdGF0ZSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IF9kYXNoYm9hcmRDb25maWdWZXJzaW9uID0gJzQnO1xuXG4vLyBDb21tb24gYWN0aW9uIHN0cmluZyBmb3JtYXQ6IFwicmVzb3VyY2UocykvYWN0aW9uXCJcbmV4cG9ydCBlbnVtIERhc2hib2FyZENvbmZpZ0FjdGlvbiB7XG4gIENBUkRfQUREID0gJ2Rhc2hib2FyZC1jYXJkLWNvbmZpZy9hZGQnLFxuICBDQVJEX1JFTU9WRSA9ICdkYXNoYm9hcmQtY2FyZC1jb25maWcvcmVtb3ZlJyxcbiAgQ0FSRF9SRU9SREVSID0gJ2Rhc2hib2FyZC1jYXJkLWNvbmZpZy9yZW9yZGVyJyxcbiAgQ0FSRF9SRVNJWkUgPSAnZGFzaGJvYXJkLWNhcmQtY29uZmlnL3Jlc2l6ZScsXG4gIEZJUlNUX1JVTiA9ICdkYXNoYm9hcmQtY2FyZC1jb25maWcvZmlyc3QtcnVuJyxcbiAgTEFZT1VUX0FERCA9ICdsYXlvdXQtY29uZmlnL2FkZCcsXG4gIExBWU9VVF9SRU1PVkUgPSAnbGF5b3V0LWNvbmZpZy9yZW1vdmUnLFxuICBMQVlPVVRfUkVOQU1FID0gJ2xheW91dC1jb25maWcvcmVuYW1lJyxcbiAgTEFZT1VUX1JFUExBQ0UgPSAnbGF5b3V0LWNvbmZpZy9yZXBsYWNlJyxcbiAgTEFZT1VUX0ZBVk9SSVRFID0gJ2xheW91dC1jb25maWcvZmF2b3JpdGUnLFxuICBURU1QTEFURV9BREQgPSAndGVtcGxhdGUtY29uZmlnL2FkZCcsXG4gIFRFTVBMQVRFX1JFTU9WRSA9ICd0ZW1wbGF0ZS1jb25maWcvcmVtb3ZlJyxcbiAgVEVNUExBVEVfUkVOQU1FID0gJ3RlbXBsYXRlLWNvbmZpZy9yZW5hbWUnLFxuICBURU1QTEFURV9ISVNUT1JZX1BVU0ggPSAndGVtcGxhdGUtaGlzdG9yeS9wdXNoJyxcbiAgVEVNUExBVEVfSElTVE9SWV9DTEVBUiA9ICd0ZW1wbGF0ZS1oaXN0b3J5L2NsZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IGVudW1WYWx1ZXMgPSBuZXcgU2V0KE9iamVjdC52YWx1ZXMoRGFzaGJvYXJkQ29uZmlnQWN0aW9uKSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQWRkQ29uZmlnQWN0aW9uUGF5bG9hZCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc3BhbjogZ3JpZFNwYW5zO1xuICBwcm9wczogb2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZERlbGV0ZUNvbmZpZ0FjdGlvblBheWxvYWQge1xuICBpZHg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRSZXNpemVDb25maWdBY3Rpb25QYXlsb2FkIHtcbiAgaWR4OiBudW1iZXI7XG4gIHNwYW46IGdyaWRTcGFucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRPcmRlckNvbmZpZ0FjdGlvblBheWxvYWQge1xuICBwcmV2T3JkZXI6IG51bWJlcjtcbiAgbmV4dE9yZGVyOiBudW1iZXI7XG4gIHN3YXA6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkRmlyc3RSdW5BY3Rpb25QYXlsb2FkIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQWRkTGF5b3V0QWN0aW9uUGF5bG9hZCB7XG4gIGxheW91dDogRGFzaGJvYXJkTGF5b3V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZERlbGV0ZUxheW91dEFjdGlvblBheWxvYWQge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkUmVuYW1lTGF5b3V0QWN0aW9uUGF5bG9hZCB7XG4gIG9sZE5hbWU6IHN0cmluZztcbiAgbmV3TmFtZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRSZXBsYWNlTGF5b3V0QWN0aW9uUGF5bG9hZCB7XG4gIG5ld0xheW91dE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRGYXZvcml0ZUxheW91dEFjdGlvblBheWxvYWQge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQWRkVGVtcGxhdGVBY3Rpb25QYXlsb2FkIHtcbiAgdGVtcGxhdGU6IExheW91dFRlbXBsYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZERlbGV0ZVRlbXBsYXRlQWN0aW9uUGF5bG9hZCB7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRSZW5hbWVUZW1wbGF0ZUFjdGlvblBheWxvYWQge1xuICBvbGROYW1lOiBzdHJpbmc7XG4gIG5ld05hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkSGlzdG9yeVB1c2hUZW1wbGF0ZUFjdGlvblBheWxvYWQge1xuICB0ZW1wbGF0ZTogTGF5b3V0VGVtcGxhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkSGlzdG9yeUNsZWFyVGVtcGxhdGVBY3Rpb25QYXlsb2FkIHt9XG5cbmV4cG9ydCBjb25zdCBkYXNoYm9hcmRDb25maWdBZGRDYXJkSW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBEYXNoYm9hcmRDb25maWdBY3Rpb24uQ0FSRF9BREQsXG4gIChpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHNwYW46IGdyaWRTcGFucywgcHJvcHM6IG9iamVjdCkgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBzcGFuLFxuICAgICAgcHJvcHMsXG4gICAgfSBhcyBEYXNoYm9hcmRBZGRDb25maWdBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZENvbmZpZ0RlbGV0ZUNhcmRJbnRlbnQgPSBjcmVhdGVBY3Rpb24oRGFzaGJvYXJkQ29uZmlnQWN0aW9uLkNBUkRfUkVNT1ZFLCAoaWR4OiBudW1iZXIpID0+ICh7XG4gIHBheWxvYWQ6IHtcbiAgICBpZHgsXG4gIH0gYXMgRGFzaGJvYXJkRGVsZXRlQ29uZmlnQWN0aW9uUGF5bG9hZCxcbn0pKTtcblxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZENvbmZpZ1Jlc2l6ZUNhcmRJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIERhc2hib2FyZENvbmZpZ0FjdGlvbi5DQVJEX1JFU0laRSxcbiAgKGlkeDogbnVtYmVyLCBzcGFuOiBncmlkU3BhbnMpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgaWR4LFxuICAgICAgc3BhbixcbiAgICB9IGFzIERhc2hib2FyZFJlc2l6ZUNvbmZpZ0FjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkQ29uZmlnUmVvcmRlckNhcmRJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIERhc2hib2FyZENvbmZpZ0FjdGlvbi5DQVJEX1JFT1JERVIsXG4gIChwcmV2T3JkZXI6IG51bWJlciwgbmV4dE9yZGVyOiBudW1iZXIsIHN3YXAgPSBmYWxzZSkgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBwcmV2T3JkZXIsXG4gICAgICBuZXh0T3JkZXIsXG4gICAgICBzd2FwLFxuICAgIH0gYXMgRGFzaGJvYXJkT3JkZXJDb25maWdBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZENvbmZpZ0ZpcnN0UnVuSW50ZW50ID0gY3JlYXRlQWN0aW9uKERhc2hib2FyZENvbmZpZ0FjdGlvbi5GSVJTVF9SVU4sICgpID0+ICh7XG4gIHBheWxvYWQ6IHt9IGFzIERhc2hib2FyZEZpcnN0UnVuQWN0aW9uUGF5bG9hZCxcbn0pKTtcblxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZENvbmZpZ0NyZWF0ZUxheW91dEludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgRGFzaGJvYXJkQ29uZmlnQWN0aW9uLkxBWU9VVF9BREQsXG4gIChsYXlvdXQ6IERhc2hib2FyZExheW91dCkgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBsYXlvdXQsXG4gICAgfSBhcyBEYXNoYm9hcmRBZGRMYXlvdXRBY3Rpb25QYXlsb2FkLFxuICB9KVxuKTtcblxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZENvbmZpZ0RlbGV0ZUxheW91dEludGVudCA9IGNyZWF0ZUFjdGlvbihEYXNoYm9hcmRDb25maWdBY3Rpb24uTEFZT1VUX1JFTU9WRSwgKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgcGF5bG9hZDoge1xuICAgIG5hbWUsXG4gIH0gYXMgRGFzaGJvYXJkRGVsZXRlTGF5b3V0QWN0aW9uUGF5bG9hZCxcbn0pKTtcblxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZENvbmZpZ1JlbmFtZUxheW91dEludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgRGFzaGJvYXJkQ29uZmlnQWN0aW9uLkxBWU9VVF9SRU5BTUUsXG4gIChvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZykgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBvbGROYW1lLFxuICAgICAgbmV3TmFtZSxcbiAgICB9IGFzIERhc2hib2FyZFJlbmFtZUxheW91dEFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkQ29uZmlnUmVwbGFjZUxheW91dEludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgRGFzaGJvYXJkQ29uZmlnQWN0aW9uLkxBWU9VVF9SRVBMQUNFLFxuICAobmFtZTogc3RyaW5nKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIG5ld0xheW91dE5hbWU6IG5hbWUsXG4gICAgfSBhcyBEYXNoYm9hcmRSZXBsYWNlTGF5b3V0QWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBkYXNoYm9hcmRDb25maWdGYXZvcml0ZUxheW91dEludGVudCA9IGNyZWF0ZUFjdGlvbihcbiAgRGFzaGJvYXJkQ29uZmlnQWN0aW9uLkxBWU9VVF9GQVZPUklURSxcbiAgKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBwYXlsb2FkOiB7XG4gICAgICBuZXdMYXlvdXROYW1lOiBuYW1lLFxuICAgIH0gYXMgRGFzaGJvYXJkUmVwbGFjZUxheW91dEFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkQ29uZmlnQ3JlYXRlVGVtcGxhdGVJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIERhc2hib2FyZENvbmZpZ0FjdGlvbi5URU1QTEFURV9BREQsXG4gICh0ZW1wbGF0ZTogTGF5b3V0VGVtcGxhdGUpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgdGVtcGxhdGUsXG4gICAgfSBhcyBEYXNoYm9hcmRBZGRUZW1wbGF0ZUFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkQ29uZmlnRGVsZXRlVGVtcGxhdGVJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIERhc2hib2FyZENvbmZpZ0FjdGlvbi5URU1QTEFURV9SRU1PVkUsXG4gIChuYW1lOiBzdHJpbmcpID0+ICh7XG4gICAgcGF5bG9hZDoge1xuICAgICAgbmFtZSxcbiAgICB9IGFzIERhc2hib2FyZERlbGV0ZVRlbXBsYXRlQWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBkYXNoYm9hcmRDb25maWdUZW1wbGF0ZUhpc3RvcnlQdXNoSW50ZW50ID0gY3JlYXRlQWN0aW9uKFxuICBEYXNoYm9hcmRDb25maWdBY3Rpb24uVEVNUExBVEVfSElTVE9SWV9QVVNILFxuICAodGVtcGxhdGU6IExheW91dFRlbXBsYXRlKSA9PiAoe1xuICAgIHBheWxvYWQ6IHtcbiAgICAgIHRlbXBsYXRlLFxuICAgIH0gYXMgRGFzaGJvYXJkSGlzdG9yeVB1c2hUZW1wbGF0ZUFjdGlvblBheWxvYWQsXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkQ29uZmlnVGVtcGxhdGVIaXN0b3J5Q2xlYXJJbnRlbnQgPSBjcmVhdGVBY3Rpb24oXG4gIERhc2hib2FyZENvbmZpZ0FjdGlvbi5URU1QTEFURV9ISVNUT1JZX0NMRUFSLFxuICAoKSA9PiAoe1xuICAgIHBheWxvYWQ6IHt9IGFzIERhc2hib2FyZEhpc3RvcnlDbGVhclRlbXBsYXRlQWN0aW9uUGF5bG9hZCxcbiAgfSlcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ29uZmlnU3RhdGUge1xuICBsYXlvdXRzOiBEYXNoYm9hcmRMYXlvdXRbXTtcbiAgY3VzdG9tVGVtcGxhdGVzOiBMYXlvdXRUZW1wbGF0ZVtdO1xuICB0ZW1wbGF0ZUhpc3Rvcnk6IExheW91dFRlbXBsYXRlUmVjb3JkW107XG4gIGN1cnJlbnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgX3ZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFRFTVBMQVRFX0hJU1RPUllfTElNSVQgPSA1O1xuXG5jb25zdCBJTklUSUFMX1NUQVRFOiBEYXNoYm9hcmRDb25maWdTdGF0ZSA9IGdldFBlcnNpc3RlZFN0YXRlKCdEQVNIQk9BUkRfQ0ZHJywgX2Rhc2hib2FyZENvbmZpZ1ZlcnNpb24sIHtcbiAgbGF5b3V0czogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdEZWZhdWx0JyxcbiAgICAgIGNhcmRzOiBbXSxcbiAgICAgIGZhdm9yaXRlOiB0cnVlLFxuICAgIH0sXG4gIF0gYXMgRGFzaGJvYXJkTGF5b3V0W10sXG4gIGN1c3RvbVRlbXBsYXRlczogW10gYXMgTGF5b3V0VGVtcGxhdGVbXSxcbiAgdGVtcGxhdGVIaXN0b3J5OiBbXSBhcyBMYXlvdXRUZW1wbGF0ZVJlY29yZFtdLFxuICBjdXJyZW50OiAwLFxufSk7XG5cbmNvbnN0IGdldFRlbXBsYXRlSGlzdG9yeUluZGV4Rm9yTXV0YXRpb24gPSAoc3RhdGU6IERhc2hib2FyZENvbmZpZ1N0YXRlLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS50ZW1wbGF0ZUhpc3RvcnkuZmluZEluZGV4KCh0KSA9PiB0Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSAmJiB0LnZlbmRvciA9PT0gTGF5b3V0VGVtcGxhdGVWZW5kb3IuVVNFUik7XG4gIHJldHVybiBpZHg7XG59O1xuXG5leHBvcnQgY29uc3QgZGFzaGJvYXJkQ29uZmlnUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoSU5JVElBTF9TVEFURSwgKGJ1aWxkZXIpID0+IHtcbiAgYnVpbGRlclxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ0FkZENhcmRJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN0YXRlLmxheW91dHNbc3RhdGUuY3VycmVudF0uY2FyZHMucHVzaChwYXlsb2FkKTtcbiAgICB9KVxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ0RlbGV0ZUNhcmRJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN0YXRlLmxheW91dHNbc3RhdGUuY3VycmVudF0uY2FyZHMuc3BsaWNlKHBheWxvYWQuaWR4IHx8IDAsIDEpO1xuICAgIH0pXG4gICAgLmFkZENhc2UoZGFzaGJvYXJkQ29uZmlnUmVzaXplQ2FyZEludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgc3RhdGUubGF5b3V0c1tzdGF0ZS5jdXJyZW50XS5jYXJkc1twYXlsb2FkLmlkeF0uc3BhbiA9IHBheWxvYWQuc3BhbjtcbiAgICB9KVxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ1Jlb3JkZXJDYXJkSW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBpZiAocGF5bG9hZC5zd2FwKSB7XG4gICAgICAgIHN3YXAoc3RhdGUubGF5b3V0c1tzdGF0ZS5jdXJyZW50XS5jYXJkcywgcGF5bG9hZC5wcmV2T3JkZXIsIHBheWxvYWQubmV4dE9yZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vdmUoc3RhdGUubGF5b3V0c1tzdGF0ZS5jdXJyZW50XS5jYXJkcywgcGF5bG9hZC5wcmV2T3JkZXIsIHBheWxvYWQubmV4dE9yZGVyKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ0ZpcnN0UnVuSW50ZW50LCAoc3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxheW91dHNbc3RhdGUuY3VycmVudF0uY2FyZHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogYCR7TUJlYW5NZXRyaWNzQ2hhcnRDYXJkRGVzY3JpcHRvci5jb21wb25lbnQubmFtZX0tMWAsXG4gICAgICAgICAgbmFtZTogTUJlYW5NZXRyaWNzQ2hhcnRDYXJkRGVzY3JpcHRvci5jb21wb25lbnQubmFtZSxcbiAgICAgICAgICBzcGFuOiBNQmVhbk1ldHJpY3NDaGFydENhcmREZXNjcmlwdG9yLmNhcmRTaXplcy5zcGFuLmRlZmF1bHQsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRoZW1lQ29sb3I6ICdibHVlJyxcbiAgICAgICAgICAgIGNoYXJ0S2luZDogJ1Byb2Nlc3MgQ1BVIExvYWQnLFxuICAgICAgICAgICAgZHVyYXRpb246IDYwLFxuICAgICAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IGAke01CZWFuTWV0cmljc0NoYXJ0Q2FyZERlc2NyaXB0b3IuY29tcG9uZW50Lm5hbWV9LTJgLFxuICAgICAgICAgIG5hbWU6IE1CZWFuTWV0cmljc0NoYXJ0Q2FyZERlc2NyaXB0b3IuY29tcG9uZW50Lm5hbWUsXG4gICAgICAgICAgc3BhbjogTUJlYW5NZXRyaWNzQ2hhcnRDYXJkRGVzY3JpcHRvci5jYXJkU2l6ZXMuc3Bhbi5kZWZhdWx0LFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0aGVtZUNvbG9yOiAncHVycGxlJyxcbiAgICAgICAgICAgIGNoYXJ0S2luZDogJ0hlYXAgTWVtb3J5IFVzYWdlJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBgJHtNQmVhbk1ldHJpY3NDaGFydENhcmREZXNjcmlwdG9yLmNvbXBvbmVudC5uYW1lfS0zYCxcbiAgICAgICAgICBuYW1lOiBNQmVhbk1ldHJpY3NDaGFydENhcmREZXNjcmlwdG9yLmNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgIHNwYW46IE1CZWFuTWV0cmljc0NoYXJ0Q2FyZERlc2NyaXB0b3IuY2FyZFNpemVzLnNwYW4uZGVmYXVsdCxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgdGhlbWVDb2xvcjogJ2dyZWVuJyxcbiAgICAgICAgICAgIGNoYXJ0S2luZDogJ1RocmVhZHMnLFxuICAgICAgICAgICAgZHVyYXRpb246IDYwLFxuICAgICAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ0NyZWF0ZUxheW91dEludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgaWYgKHN0YXRlLmxheW91dHMuZmluZCgobGF5b3V0KSA9PiBsYXlvdXQubmFtZSA9PT0gcGF5bG9hZC5sYXlvdXQubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXlvdXQgd2l0aCBuYW1lICR7cGF5bG9hZC5sYXlvdXQubmFtZX0gYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sYXlvdXRzLnB1c2gocGF5bG9hZC5sYXlvdXQpO1xuICAgIH0pXG4gICAgLmFkZENhc2UoZGFzaGJvYXJkQ29uZmlnRGVsZXRlTGF5b3V0SW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdGF0ZS5sYXlvdXRzLmZpbmRJbmRleCgobGF5b3V0KSA9PiBsYXlvdXQubmFtZSA9PT0gcGF5bG9hZC5uYW1lKTtcbiAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5b3V0IHdpdGggbmFtZSAke3BheWxvYWQubmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sYXlvdXRzLnNwbGljZShpZHggfHwgMCwgMSk7XG4gICAgfSlcbiAgICAuYWRkQ2FzZShkYXNoYm9hcmRDb25maWdSZW5hbWVMYXlvdXRJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHN0YXRlLmxheW91dHMuZmluZEluZGV4KChsYXlvdXQpID0+IGxheW91dC5uYW1lID09PSBwYXlsb2FkLm9sZE5hbWUpO1xuICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXlvdXQgd2l0aCBuYW1lICR7cGF5bG9hZC5vbGROYW1lfSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmxheW91dHNbaWR4XS5uYW1lID0gcGF5bG9hZC5uZXdOYW1lO1xuICAgIH0pXG4gICAgLmFkZENhc2UoZGFzaGJvYXJkQ29uZmlnUmVwbGFjZUxheW91dEludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gc3RhdGUubGF5b3V0cy5maW5kSW5kZXgoKGxheW91dCkgPT4gbGF5b3V0Lm5hbWUgPT09IHBheWxvYWQubmV3TGF5b3V0TmFtZSk7XG4gICAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheW91dCB3aXRoIG5hbWUgJHtwYXlsb2FkLm5ld0xheW91dE5hbWV9IGRvZXMgbm90IGV4aXN0LmApO1xuICAgICAgfVxuICAgICAgc3RhdGUuY3VycmVudCA9IGlkeDtcbiAgICB9KVxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ0Zhdm9yaXRlTGF5b3V0SW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdGF0ZS5sYXlvdXRzLmZpbmRJbmRleCgobGF5b3V0KSA9PiBsYXlvdXQubmFtZSA9PT0gcGF5bG9hZC5uZXdMYXlvdXROYW1lKTtcbiAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5b3V0IHdpdGggbmFtZSAke3BheWxvYWQubmV3TGF5b3V0TmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sYXlvdXRzW2lkeF0uZmF2b3JpdGUgPSAhc3RhdGUubGF5b3V0c1tpZHhdLmZhdm9yaXRlO1xuICAgIH0pXG4gICAgLmFkZENhc2UoZGFzaGJvYXJkQ29uZmlnQ3JlYXRlVGVtcGxhdGVJbnRlbnQsIChzdGF0ZSwgeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gcGF5bG9hZC50ZW1wbGF0ZTtcbiAgICAgIGNvbnN0IGlkeCA9IHN0YXRlLmN1c3RvbVRlbXBsYXRlcy5maW5kSW5kZXgoKHQpID0+IHQubmFtZSA9PT0gdGVtcGxhdGUubmFtZSAmJiB0LnZlbmRvciA9PT0gdGVtcGxhdGUudmVuZG9yKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXBsYXRlIHdpdGggbmFtZSAke3RlbXBsYXRlLm5hbWV9IGFuZCB2ZW5kb3IgJHt0ZW1wbGF0ZS52ZW5kb3J9IGFscmVhZHkgZXhpc3RzLmApO1xuICAgICAgfVxuICAgICAgc3RhdGUuY3VzdG9tVGVtcGxhdGVzLnB1c2godGVtcGxhdGUpO1xuICAgIH0pXG4gICAgLy8gdGVtcGxhdGUgbXV0YXRpb25zIChkZWxldGUsIHJlbmFtZSwgZXRjLikgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBub24tY3VzdG9tIHRlbXBsYXRlcyAodmVuZG9yICE9PSBMYXlvdXRUZW1wbGF0ZVZlbmRvci5VU0VSKVxuICAgIC5hZGRDYXNlKGRhc2hib2FyZENvbmZpZ0RlbGV0ZVRlbXBsYXRlSW50ZW50LCAoc3RhdGUsIHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdGF0ZS5jdXN0b21UZW1wbGF0ZXMuZmluZEluZGV4KCh0KSA9PiB0Lm5hbWUgPT09IHBheWxvYWQubmFtZSk7XG4gICAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXBsYXRlIHdpdGggbmFtZSAke3BheWxvYWQubmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5jdXN0b21UZW1wbGF0ZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICBjb25zdCBoaXN0b3J5SWR4ID0gZ2V0VGVtcGxhdGVIaXN0b3J5SW5kZXhGb3JNdXRhdGlvbihzdGF0ZSwgcGF5bG9hZC5uYW1lKTtcbiAgICAgIGlmIChoaXN0b3J5SWR4ID49IDApIHtcbiAgICAgICAgc3RhdGUudGVtcGxhdGVIaXN0b3J5LnNwbGljZShoaXN0b3J5SWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIGFueSB0ZW1wbGF0ZSB0eXBlIGV4Y2VwdCBmb3IgdGhlICdCbGFuaycgdGVtcGxhdGUgY2FuIGJlIHB1c2hlZCB0byBoaXN0b3J5XG4gICAgLmFkZENhc2UoZGFzaGJvYXJkQ29uZmlnVGVtcGxhdGVIaXN0b3J5UHVzaEludGVudCwgKHN0YXRlLCB7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgLy8gV2Ugb25seSBwdXNoIHRoZSB0ZW1wbGF0ZSBuYW1lIGFuZCB2ZW5kb3IgdG8gdGhlIGhpc3RvcnlcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gcGF5bG9hZC50ZW1wbGF0ZTtcbiAgICAgIGlmICh0ZW1wbGF0ZS5uYW1lID09PSAnQmxhbmsnICYmIHRlbXBsYXRlLnZlbmRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkeCA9IHN0YXRlLnRlbXBsYXRlSGlzdG9yeS5maW5kSW5kZXgoKHQpID0+IHQubmFtZSA9PT0gdGVtcGxhdGUubmFtZSAmJiB0LnZlbmRvciA9PT0gdGVtcGxhdGUudmVuZG9yKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBzdGF0ZS50ZW1wbGF0ZUhpc3Rvcnkuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnRlbXBsYXRlSGlzdG9yeS5sZW5ndGggPj0gVEVNUExBVEVfSElTVE9SWV9MSU1JVCkge1xuICAgICAgICBzdGF0ZS50ZW1wbGF0ZUhpc3RvcnkucG9wKCk7XG4gICAgICB9XG4gICAgICBzdGF0ZS50ZW1wbGF0ZUhpc3RvcnkudW5zaGlmdCh7XG4gICAgICAgIG5hbWU6IHRlbXBsYXRlLm5hbWUsXG4gICAgICAgIHZlbmRvcjogdGVtcGxhdGUudmVuZG9yLFxuICAgICAgfSBhcyBMYXlvdXRUZW1wbGF0ZVJlY29yZCk7XG4gICAgfSlcbiAgICAuYWRkQ2FzZShkYXNoYm9hcmRDb25maWdUZW1wbGF0ZUhpc3RvcnlDbGVhckludGVudCwgKHN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS50ZW1wbGF0ZUhpc3RvcnkgPSBbXTtcbiAgICB9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXNoYm9hcmRDb25maWdSZWR1Y2VyO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBzYXZlVG9Mb2NhbFN0b3JhZ2UgfSBmcm9tICdAYXBwL3V0aWxzL0xvY2FsU3RvcmFnZSc7XG5pbXBvcnQgeyBNaWRkbGV3YXJlIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5pbXBvcnQgeyBlbnVtVmFsdWVzIGFzIERhc2hib2FyZENvbmZpZ0FjdGlvbnMgfSBmcm9tICcuLi9Db25maWd1cmF0aW9ucy9EYXNoYm9hcmRDb25maWdTbGljZSc7XG5pbXBvcnQgeyBlbnVtVmFsdWVzIGFzIFRvcG9sb2d5Q29uZmlnQWN0aW9ucyB9IGZyb20gJy4uL0NvbmZpZ3VyYXRpb25zL1RvcG9sb2d5Q29uZmlnU2xpY2UnO1xuaW1wb3J0IHsgZW51bVZhbHVlcyBhcyBBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbnMgfSBmcm9tICcuLi9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU2xpY2UnO1xuaW1wb3J0IHsgZW51bVZhbHVlcyBhcyBSZWNvcmRpbmdGaWx0ZXJBY3Rpb25zIH0gZnJvbSAnLi4vRmlsdGVycy9SZWNvcmRpbmdGaWx0ZXJTbGljZSc7XG5pbXBvcnQgeyBlbnVtVmFsdWVzIGFzIFRvcG9sb2d5RmlsdGVyQWN0aW9ucyB9IGZyb20gJy4uL0ZpbHRlcnMvVG9wb2xvZ3lGaWx0ZXJTbGljZSc7XG5pbXBvcnQgeyBSb290U3RhdGUgfSBmcm9tICcuLi9SZWR1eFN0b3JlJztcblxuLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzKi9cbmV4cG9ydCBjb25zdCBwZXJzaXN0TWlkZGxld2FyZTogTWlkZGxld2FyZTx7fSwgUm9vdFN0YXRlPiA9XG4gICh7IGdldFN0YXRlIH0pID0+XG4gIChuZXh0KSA9PlxuICAoYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xuICAgIC8vIEV4dHJhY3QgbmV3IHN0YXRlIGhlcmVcbiAgICBjb25zdCByb290U3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGlmIChBdXRvbWF0ZWRBbmFseXNpc0ZpbHRlckFjdGlvbnMuaGFzKGFjdGlvbi50eXBlKSkge1xuICAgICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdBVVRPTUFURURfQU5BTFlTSVNfRklMVEVSUycsIHJvb3RTdGF0ZS5hdXRvbWF0ZWRBbmFseXNpc0ZpbHRlcnMpO1xuICAgIH0gZWxzZSBpZiAoUmVjb3JkaW5nRmlsdGVyQWN0aW9ucy5oYXMoYWN0aW9uLnR5cGUpKSB7XG4gICAgICBzYXZlVG9Mb2NhbFN0b3JhZ2UoJ1RBUkdFVF9SRUNPUkRJTkdfRklMVEVSUycsIHJvb3RTdGF0ZS5yZWNvcmRpbmdGaWx0ZXJzKTtcbiAgICB9IGVsc2UgaWYgKERhc2hib2FyZENvbmZpZ0FjdGlvbnMuaGFzKGFjdGlvbi50eXBlKSkge1xuICAgICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdEQVNIQk9BUkRfQ0ZHJywgcm9vdFN0YXRlLmRhc2hib2FyZENvbmZpZ3MpO1xuICAgIH0gZWxzZSBpZiAoVG9wb2xvZ3lDb25maWdBY3Rpb25zLmhhcyhhY3Rpb24udHlwZSkpIHtcbiAgICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnVE9QT0xPR1lfQ09ORklHJywgcm9vdFN0YXRlLnRvcG9sb2d5Q29uZmlncyk7XG4gICAgfSBlbHNlIGlmIChUb3BvbG9neUZpbHRlckFjdGlvbnMuaGFzKGFjdGlvbi50eXBlKSkge1xuICAgICAgc2F2ZVRvTG9jYWxTdG9yYWdlKCdUT1BPTE9HWV9GSUxURVJTJywgcm9vdFN0YXRlLnRvcG9sb2d5RmlsdGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgQWN0aW9uICR7YWN0aW9uLnR5cGV9IGRvZXMgbm90IHBlcnNpc3Qgc3RhdGUuYCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzLCBjb25maWd1cmVTdG9yZSwgUHJlbG9hZGVkU3RhdGUgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcbmltcG9ydCBkYXNoYm9hcmRDb25maWdSZWR1Y2VyLCAqIGFzIGRhc2hib2FyZENvbmZpZ1NsaWNlIGZyb20gJy4vQ29uZmlndXJhdGlvbnMvRGFzaGJvYXJkQ29uZmlnU2xpY2UnO1xuaW1wb3J0IHRvcG9sb2d5Q29uZmlnUmVkdWNlciwgKiBhcyB0b3BvbG9neUNvbmZpZ1NsaWNlIGZyb20gJy4vQ29uZmlndXJhdGlvbnMvVG9wb2xvZ3lDb25maWdTbGljZSc7XG5pbXBvcnQgYXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJSZWR1Y2VyLCAqIGFzIGF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU2xpY2UgZnJvbSAnLi9GaWx0ZXJzL0F1dG9tYXRlZEFuYWx5c2lzRmlsdGVyU2xpY2UnO1xuaW1wb3J0IHJlY29yZGluZ0ZpbHRlclJlZHVjZXIsICogYXMgcmVjb3JkaW5nRmlsdGVyU2xpY2UgZnJvbSAnLi9GaWx0ZXJzL1JlY29yZGluZ0ZpbHRlclNsaWNlJztcbmltcG9ydCB0b3BvbG9neUZpbHRlclJlZHVjZXIsICogYXMgdG9wb2xvZ3lGaWx0ZXJTbGljZSBmcm9tICcuL0ZpbHRlcnMvVG9wb2xvZ3lGaWx0ZXJTbGljZSc7XG5pbXBvcnQgeyBwZXJzaXN0TWlkZGxld2FyZSB9IGZyb20gJy4vTWlkZGxld2FyZXMvUGVyc2lzdE1pZGRsZXdhcmUnO1xuXG4vLyBFeHBvcnQgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IHtcbiAgZGFzaGJvYXJkQ29uZmlnQWRkQ2FyZEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnRGVsZXRlQ2FyZEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnUmVvcmRlckNhcmRJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ1Jlc2l6ZUNhcmRJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ0ZpcnN0UnVuSW50ZW50LFxuICBkYXNoYm9hcmRDb25maWdDcmVhdGVMYXlvdXRJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ0RlbGV0ZUxheW91dEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnUmVuYW1lTGF5b3V0SW50ZW50LFxuICBkYXNoYm9hcmRDb25maWdSZXBsYWNlTGF5b3V0SW50ZW50LFxuICBkYXNoYm9hcmRDb25maWdGYXZvcml0ZUxheW91dEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnQ3JlYXRlVGVtcGxhdGVJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ0RlbGV0ZVRlbXBsYXRlSW50ZW50LFxuICBkYXNoYm9hcmRDb25maWdUZW1wbGF0ZUhpc3RvcnlQdXNoSW50ZW50LFxuICBkYXNoYm9hcmRDb25maWdUZW1wbGF0ZUhpc3RvcnlDbGVhckludGVudCxcbn0gPSBkYXNoYm9hcmRDb25maWdTbGljZTtcbmV4cG9ydCBjb25zdCB7XG4gIHJlY29yZGluZ0FkZEZpbHRlckludGVudCxcbiAgcmVjb3JkaW5nRGVsZXRlRmlsdGVySW50ZW50LFxuICByZWNvcmRpbmdBZGRUYXJnZXRJbnRlbnQsXG4gIHJlY29yZGluZ0RlbGV0ZVRhcmdldEludGVudCxcbiAgcmVjb3JkaW5nRGVsZXRlQ2F0ZWdvcnlGaWx0ZXJzSW50ZW50LFxuICByZWNvcmRpbmdVcGRhdGVDYXRlZ29yeUludGVudCxcbiAgcmVjb3JkaW5nRGVsZXRlQWxsRmlsdGVyc0ludGVudCxcbn0gPSByZWNvcmRpbmdGaWx0ZXJTbGljZTtcbmV4cG9ydCBjb25zdCB7XG4gIGF1dG9tYXRlZEFuYWx5c2lzQWRkR2xvYmFsRmlsdGVySW50ZW50LFxuICBhdXRvbWF0ZWRBbmFseXNpc0FkZEZpbHRlckludGVudCxcbiAgYXV0b21hdGVkQW5hbHlzaXNBZGRUYXJnZXRJbnRlbnQsXG4gIGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlQWxsRmlsdGVyc0ludGVudCxcbiAgYXV0b21hdGVkQW5hbHlzaXNEZWxldGVDYXRlZ29yeUZpbHRlcnNJbnRlbnQsXG4gIGF1dG9tYXRlZEFuYWx5c2lzRGVsZXRlRmlsdGVySW50ZW50LFxuICBhdXRvbWF0ZWRBbmFseXNpc0RlbGV0ZVRhcmdldEludGVudCxcbiAgYXV0b21hdGVkQW5hbHlzaXNVcGRhdGVDYXRlZ29yeUludGVudCxcbn0gPSBhdXRvbWF0ZWRBbmFseXNpc0ZpbHRlclNsaWNlO1xuXG5leHBvcnQgY29uc3QgeyB0b3BvbG9neUNvbmZpZ1NldFZpZXdNb2RlSW50ZW50LCB0b3BvbG9neURpc3BsYXlPcHRpb25zU2V0SW50ZW50IH0gPSB0b3BvbG9neUNvbmZpZ1NsaWNlO1xuXG5leHBvcnQgY29uc3Qge1xuICB0b3BvbG9neVVwZGF0ZUNhdGVnb3J5VHlwZUludGVudCxcbiAgdG9wb2xvZ3lVcGRhdGVDYXRlZ29yeUludGVudCxcbiAgdG9wb2xvZ3lBZGRGaWx0ZXJJbnRlbnQsXG4gIHRvcG9sb2d5RGVsZXRlQWxsRmlsdGVyc0ludGVudCxcbiAgdG9wb2xvZ3lEZWxldGVDYXRlZ29yeUZpbHRlcnNJbnRlbnQsXG4gIHRvcG9sb2d5RGVsZXRlRmlsdGVySW50ZW50LFxufSA9IHRvcG9sb2d5RmlsdGVyU2xpY2U7XG5cbmV4cG9ydCBjb25zdCByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gIGRhc2hib2FyZENvbmZpZ3M6IGRhc2hib2FyZENvbmZpZ1JlZHVjZXIsXG4gIHJlY29yZGluZ0ZpbHRlcnM6IHJlY29yZGluZ0ZpbHRlclJlZHVjZXIsXG4gIGF1dG9tYXRlZEFuYWx5c2lzRmlsdGVyczogYXV0b21hdGVkQW5hbHlzaXNGaWx0ZXJSZWR1Y2VyLFxuICB0b3BvbG9neUNvbmZpZ3M6IHRvcG9sb2d5Q29uZmlnUmVkdWNlcixcbiAgdG9wb2xvZ3lGaWx0ZXJzOiB0b3BvbG9neUZpbHRlclJlZHVjZXIsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldHVwU3RvcmUgPSAocHJlbG9hZGVkU3RhdGU/OiBQcmVsb2FkZWRTdGF0ZTxSb290U3RhdGU+KSA9PlxuICBjb25maWd1cmVTdG9yZSh7XG4gICAgcmVkdWNlcjogcm9vdFJlZHVjZXIsXG4gICAgcHJlbG9hZGVkU3RhdGUsXG4gICAgbWlkZGxld2FyZTogKGdldERlZmF1bHRNaWRkbGV3YXJlKSA9PiBnZXREZWZhdWx0TWlkZGxld2FyZSgpLmNvbmNhdChwZXJzaXN0TWlkZGxld2FyZSksXG4gIH0pO1xuXG5leHBvcnQgY29uc3Qgc3RvcmUgPSBzZXR1cFN0b3JlKCk7XG5cbi8vIEluZmVyIHRoZSBgUm9vdFN0YXRlYCBhbmQgYEFwcERpc3BhdGNoYCB0eXBlcyBmcm9tIHRoZSBzdG9yZSBpdHNlbGZcbmV4cG9ydCB0eXBlIFJvb3RTdGF0ZSA9IFJldHVyblR5cGU8dHlwZW9mIHJvb3RSZWR1Y2VyPjtcbmV4cG9ydCB0eXBlIFN0YXRlRGlzcGF0Y2ggPSB0eXBlb2Ygc3RvcmUuZGlzcGF0Y2g7XG5leHBvcnQgdHlwZSBTdG9yZSA9IFJldHVyblR5cGU8dHlwZW9mIHNldHVwU3RvcmU+O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IHBhcnNlTGFiZWxzLCBSZWNvcmRpbmdMYWJlbCB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvUmVjb3JkaW5nTGFiZWwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFiZWwsIFNlbGVjdCwgU2VsZWN0T3B0aW9uLCBTZWxlY3RWYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsRmlsdGVyUHJvcHMge1xuICByZWNvcmRpbmdzOiBSZWNvcmRpbmdbXTtcbiAgZmlsdGVyZWRMYWJlbHM6IHN0cmluZ1tdO1xuICBvblN1Ym1pdDogKGlucHV0TGFiZWw6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExhYmVsRGlzcGxheSA9IChsYWJlbDogUmVjb3JkaW5nTGFiZWwpID0+IGAke2xhYmVsLmtleX06JHtsYWJlbC52YWx1ZX1gO1xuXG5leHBvcnQgY29uc3QgTGFiZWxGaWx0ZXI6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PExhYmVsRmlsdGVyUHJvcHM+ID0gKHsgcmVjb3JkaW5ncywgZmlsdGVyZWRMYWJlbHMsIG9uU3VibWl0IH0pID0+IHtcbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldElzRXhwYW5kZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHNlbGVjdGlvbiwgaXNQbGFjZWhvbGRlcikgPT4ge1xuICAgICAgaWYgKCFpc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICBvblN1Ym1pdChzZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uU3VibWl0LCBzZXRJc0V4cGFuZGVkXVxuICApO1xuXG4gIGNvbnN0IGxhYmVscyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGxhYmVscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJlY29yZGluZ3MuZm9yRWFjaCgocikgPT4ge1xuICAgICAgaWYgKCFyIHx8ICFyLm1ldGFkYXRhIHx8ICFyLm1ldGFkYXRhLmxhYmVscykgcmV0dXJuO1xuICAgICAgcGFyc2VMYWJlbHMoci5tZXRhZGF0YS5sYWJlbHMpLm1hcCgobGFiZWwpID0+IGxhYmVscy5hZGQoZ2V0TGFiZWxEaXNwbGF5KGxhYmVsKSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGxhYmVscylcbiAgICAgIC5maWx0ZXIoKGwpID0+ICFmaWx0ZXJlZExhYmVscy5pbmNsdWRlcyhsKSlcbiAgICAgIC5zb3J0KCk7XG4gIH0sIFtyZWNvcmRpbmdzLCBmaWx0ZXJlZExhYmVsc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFyaWFudD17U2VsZWN0VmFyaWFudC50eXBlYWhlYWR9XG4gICAgICBvblRvZ2dsZT17c2V0SXNFeHBhbmRlZH1cbiAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgIGlzT3Blbj17aXNFeHBhbmRlZH1cbiAgICAgIGFyaWEtbGFiZWw9XCJGaWx0ZXIgYnkgbGFiZWxcIlxuICAgICAgdHlwZUFoZWFkQXJpYUxhYmVsPVwiRmlsdGVyIGJ5IGxhYmVsLi4uXCJcbiAgICAgIHBsYWNlaG9sZGVyVGV4dD1cIkZpbHRlciBieSBsYWJlbC4uLlwiXG4gICAgICBtYXhIZWlnaHQ9XCIxNmVtXCJcbiAgICA+XG4gICAgICB7bGFiZWxzLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICA8U2VsZWN0T3B0aW9uIGtleT17aW5kZXh9IHZhbHVlPXtvcHRpb259PlxuICAgICAgICAgIDxMYWJlbCBrZXk9e29wdGlvbn0gY29sb3I9XCJncmV5XCI+XG4gICAgICAgICAgICB7b3B0aW9ufVxuICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgIDwvU2VsZWN0T3B0aW9uPlxuICAgICAgKSl9XG4gICAgPC9TZWxlY3Q+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVjb3JkaW5nTGFiZWwgfSBmcm9tICcuL1JlY29yZGluZ0xhYmVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGlja2FibGVMYWJlbENlbGxQcm9wcyB7XG4gIGxhYmVsOiBSZWNvcmRpbmdMYWJlbDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgb25MYWJlbENsaWNrOiAobGFiZWw6IFJlY29yZGluZ0xhYmVsKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ2xpY2thYmxlTGFiZWw6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PENsaWNrYWJsZUxhYmVsQ2VsbFByb3BzPiA9ICh7IG9uTGFiZWxDbGljaywgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBbaXNIb3ZlcmVkT3JGb2N1c2VkLCBzZXRJc0hvdmVyZWRPckZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBsYWJlbENvbG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiAocHJvcHMuaXNTZWxlY3RlZCA/ICdibHVlJyA6ICdncmV5JyksIFtwcm9wcy5pc1NlbGVjdGVkXSk7XG5cbiAgY29uc3QgaGFuZGxlSG92ZXJlZE9yRm9jdXNlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHNldElzSG92ZXJlZE9yRm9jdXNlZCh0cnVlKSwgW3NldElzSG92ZXJlZE9yRm9jdXNlZF0pO1xuICBjb25zdCBoYW5kbGVOb25Ib3ZlcmVkT3JGb2N1c2VkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0SXNIb3ZlcmVkT3JGb2N1c2VkKGZhbHNlKSwgW3NldElzSG92ZXJlZE9yRm9jdXNlZF0pO1xuXG4gIGNvbnN0IHN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSG92ZXJlZE9yRm9jdXNlZCkge1xuICAgICAgY29uc3QgZGVmYXVsdFN0eWxlID0geyBjdXJzb3I6ICdwb2ludGVyJywgJy0tcGYtYy1sYWJlbF9fY29udGVudC0tYmVmb3JlLS1Cb3JkZXJXaWR0aCc6ICcyLjVweCcgfTtcbiAgICAgIGlmIChwcm9wcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmRlZmF1bHRTdHlsZSwgJy0tcGYtYy1sYWJlbF9fY29udGVudC0tYmVmb3JlLS1Cb3JkZXJDb2xvcic6ICcjMDZjJyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgLi4uZGVmYXVsdFN0eWxlLCAnLS1wZi1jLWxhYmVsX19jb250ZW50LS1iZWZvcmUtLUJvcmRlckNvbG9yJzogJyM4YThkOTAnIH07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSwgW3Byb3BzLmlzU2VsZWN0ZWQsIGlzSG92ZXJlZE9yRm9jdXNlZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUxhYmVsQ2xpY2tlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IG9uTGFiZWxDbGljayhwcm9wcy5sYWJlbCksIFtwcm9wcy5sYWJlbCwgb25MYWJlbENsaWNrXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPExhYmVsXG4gICAgICAgIGFyaWEtbGFiZWw9e2Ake3Byb3BzLmxhYmVsLmtleX06ICR7cHJvcHMubGFiZWwudmFsdWV9YH1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbk1vdXNlRW50ZXI9e2hhbmRsZUhvdmVyZWRPckZvY3VzZWR9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlTm9uSG92ZXJlZE9yRm9jdXNlZH1cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlSG92ZXJlZE9yRm9jdXNlZH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTGFiZWxDbGlja2VkfVxuICAgICAgICBrZXk9e3Byb3BzLmxhYmVsLmtleX1cbiAgICAgICAgY29sb3I9e2xhYmVsQ29sb3J9XG4gICAgICA+XG4gICAgICAgIHtgJHtwcm9wcy5sYWJlbC5rZXl9OiAke3Byb3BzLmxhYmVsLnZhbHVlfWB9XG4gICAgICA8L0xhYmVsPlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMYWJlbERpc3BsYXkgfSBmcm9tICdAYXBwL1JlY29yZGluZ3MvRmlsdGVycy9MYWJlbEZpbHRlcic7XG5pbXBvcnQgeyBVcGRhdGVGaWx0ZXJPcHRpb25zIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvRmlsdGVycy9Db21tb24nO1xuaW1wb3J0IHsgTGFiZWwsIFRleHQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDbGlja2FibGVMYWJlbCB9IGZyb20gJy4vQ2xpY2thYmxlTGFiZWwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nTGFiZWwgfSBmcm9tICcuL1JlY29yZGluZ0xhYmVsJztcblxuZXhwb3J0IGludGVyZmFjZSBMYWJlbENlbGxQcm9wcyB7XG4gIHRhcmdldDogc3RyaW5nO1xuICBsYWJlbHM6IFJlY29yZGluZ0xhYmVsW107XG4gIGNsaWNrYWJsZU9wdGlvbnM/OiB7XG4gICAgLy8gSWYgdW5kZWZpbmVkLCBsYWJlbHMgYXJlIG5vdCBjbGlja2FibGUgKGkuZS4gZGlzcGxheSBvbmx5KSBhbmQgb25seSBkaXNwbGF5ZWQgaW4gZ3JleS5cbiAgICBsYWJlbEZpbHRlcnM6IHN0cmluZ1tdO1xuICAgIHVwZGF0ZUZpbHRlcnM6ICh0YXJnZXQ6IHN0cmluZywgdXBkYXRlRmlsdGVyT3B0aW9uczogVXBkYXRlRmlsdGVyT3B0aW9ucykgPT4gdm9pZDtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IExhYmVsQ2VsbDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8TGFiZWxDZWxsUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGlzTGFiZWxTZWxlY3RlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChsYWJlbDogUmVjb3JkaW5nTGFiZWwpID0+IHtcbiAgICAgIGlmIChwcm9wcy5jbGlja2FibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsRmlsdGVyU2V0ID0gbmV3IFNldChwcm9wcy5jbGlja2FibGVPcHRpb25zLmxhYmVsRmlsdGVycyk7XG4gICAgICAgIHJldHVybiBsYWJlbEZpbHRlclNldC5oYXMoZ2V0TGFiZWxEaXNwbGF5KGxhYmVsKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBbcHJvcHMuY2xpY2thYmxlT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBnZXRMYWJlbENvbG9yID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGxhYmVsOiBSZWNvcmRpbmdMYWJlbCkgPT4gKGlzTGFiZWxTZWxlY3RlZChsYWJlbCkgPyAnYmx1ZScgOiAnZ3JleScpLFxuICAgIFtpc0xhYmVsU2VsZWN0ZWRdXG4gICk7XG4gIGNvbnN0IG9uTGFiZWxTZWxlY3RUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY2xpY2tlZExhYmVsOiBSZWNvcmRpbmdMYWJlbCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmNsaWNrYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgcHJvcHMuY2xpY2thYmxlT3B0aW9ucy51cGRhdGVGaWx0ZXJzKHByb3BzLnRhcmdldCwge1xuICAgICAgICAgIGZpbHRlcktleTogJ0xhYmVsJyxcbiAgICAgICAgICBmaWx0ZXJWYWx1ZTogZ2V0TGFiZWxEaXNwbGF5KGNsaWNrZWRMYWJlbCksXG4gICAgICAgICAgZGVsZXRlZDogaXNMYWJlbFNlbGVjdGVkKGNsaWNrZWRMYWJlbCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzTGFiZWxTZWxlY3RlZCwgcHJvcHMuY2xpY2thYmxlT3B0aW9ucywgcHJvcHMudGFyZ2V0XVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHshIXByb3BzLmxhYmVscyAmJiBwcm9wcy5sYWJlbHMubGVuZ3RoID8gKFxuICAgICAgICBwcm9wcy5sYWJlbHMubWFwKChsYWJlbCkgPT5cbiAgICAgICAgICBwcm9wcy5jbGlja2FibGVPcHRpb25zID8gKFxuICAgICAgICAgICAgPENsaWNrYWJsZUxhYmVsXG4gICAgICAgICAgICAgIGtleT17bGFiZWwua2V5fVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2lzTGFiZWxTZWxlY3RlZChsYWJlbCl9XG4gICAgICAgICAgICAgIG9uTGFiZWxDbGljaz17b25MYWJlbFNlbGVjdFRvZ2dsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMYWJlbCBhcmlhLWxhYmVsPXtgJHtsYWJlbC5rZXl9OiAke2xhYmVsLnZhbHVlfWB9IGtleT17bGFiZWwua2V5fSBjb2xvcj17Z2V0TGFiZWxDb2xvcihsYWJlbCl9PlxuICAgICAgICAgICAgICB7YCR7bGFiZWwua2V5fTogJHtsYWJlbC52YWx1ZX1gfVxuICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgOiAoXG4gICAgICAgIDxUZXh0Pi08L1RleHQ+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc0NvbnRleHQgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBSZWNvcmRpbmcgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgRHJvcGRvd24sIERyb3Bkb3duSXRlbSwgS2ViYWJUb2dnbGUgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IFRkIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93QWN0aW9uIHtcbiAgdGl0bGU6IHN0cmluZyB8IFJlYWN0LlJlYWN0Tm9kZTtcbiAga2V5OiBzdHJpbmc7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nQWN0aW9uc1Byb3BzIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgcmVjb3JkaW5nOiBSZWNvcmRpbmc7XG4gIHNvdXJjZVRhcmdldD86IE9ic2VydmFibGU8VGFyZ2V0PjtcbiAgdXBsb2FkRm46ICgpID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBjb25zdCBSZWNvcmRpbmdBY3Rpb25zOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxSZWNvcmRpbmdBY3Rpb25zUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IFJlYWN0LnVzZUNvbnRleHQoTm90aWZpY2F0aW9uc0NvbnRleHQpO1xuICBjb25zdCBbZ3JhZmFuYUVuYWJsZWQsIHNldEdyYWZhbmFFbmFibGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaVxuICAgICAgICAuZ3JhZmFuYURhdGFzb3VyY2VVcmwoKVxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHNldEdyYWZhbmFFbmFibGVkKHRydWUpKVxuICAgICk7XG4gIH0sIFtjb250ZXh0LmFwaSwgc2V0R3JhZmFuYUVuYWJsZWQsIGFkZFN1YnNjcmlwdGlvbl0pO1xuXG4gIGNvbnN0IGdyYWZhbmFVcGxvYWQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbm90aWZpY2F0aW9ucy5pbmZvKCdVcGxvYWQgU3RhcnRlZCcsIGBSZWNvcmRpbmcgXCIke3Byb3BzLnJlY29yZGluZy5uYW1lfVwiIHVwbG9hZGluZy4uLmApO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIHByb3BzXG4gICAgICAgIC51cGxvYWRGbigpXG4gICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHN1Y2Nlc3MpID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgbm90aWZpY2F0aW9ucy5zdWNjZXNzKCdVcGxvYWQgU3VjY2VzcycsIGBSZWNvcmRpbmcgXCIke3Byb3BzLnJlY29yZGluZy5uYW1lfVwiIHVwbG9hZGVkYCk7XG4gICAgICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgICAgICAuZ3JhZmFuYURhc2hib2FyZFVybCgpXG4gICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHVybCkgPT4gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBub3RpZmljYXRpb25zLCBwcm9wcywgY29udGV4dC5hcGldKTtcblxuICBjb25zdCBoYW5kbGVEb3dubG9hZFJlY29yZGluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb250ZXh0LmFwaS5kb3dubG9hZFJlY29yZGluZyhwcm9wcy5yZWNvcmRpbmcpO1xuICB9LCBbY29udGV4dC5hcGksIHByb3BzLnJlY29yZGluZ10pO1xuXG4gIGNvbnN0IGhhbmRsZVZpZXdSZXBvcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29udGV4dC5hcGkuZG93bmxvYWRSZXBvcnQocHJvcHMucmVjb3JkaW5nKTtcbiAgfSwgW2NvbnRleHQuYXBpLCBwcm9wcy5yZWNvcmRpbmddKTtcblxuICBjb25zdCBhY3Rpb25JdGVtcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbkl0ZW1zID0gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0Rvd25sb2FkIFJlY29yZGluZycsXG4gICAgICAgIGtleTogJ2Rvd25sb2FkLXJlY29yZGluZycsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZURvd25sb2FkUmVjb3JkaW5nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdWaWV3IFJlcG9ydCAuLi4nLFxuICAgICAgICBrZXk6ICd2aWV3LXJlcG9ydCcsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZVZpZXdSZXBvcnQsXG4gICAgICB9LFxuICAgIF0gYXMgUm93QWN0aW9uW107XG4gICAgaWYgKGdyYWZhbmFFbmFibGVkKSB7XG4gICAgICBhY3Rpb25JdGVtcy5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICdWaWV3IGluIEdyYWZhbmEgLi4uJyxcbiAgICAgICAga2V5OiAndmlldy1pbi1ncmFmYW5hJyxcbiAgICAgICAgb25DbGljazogZ3JhZmFuYVVwbG9hZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWN0aW9uSXRlbXM7XG4gIH0sIFtoYW5kbGVEb3dubG9hZFJlY29yZGluZywgaGFuZGxlVmlld1JlcG9ydCwgZ3JhZmFuYUVuYWJsZWQsIGdyYWZhbmFVcGxvYWRdKTtcblxuICBjb25zdCBvblNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChhY3Rpb246IFJvd0FjdGlvbikgPT4ge1xuICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgIGFjdGlvbi5vbkNsaWNrKCk7XG4gICAgfSxcbiAgICBbc2V0SXNPcGVuXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFRkIGlzQWN0aW9uQ2VsbD5cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBhcmlhLWxhYmVsPXtgJHtwcm9wcy5yZWNvcmRpbmcubmFtZX0tYWN0aW9uc2B9XG4gICAgICAgIG1lbnVBcHBlbmRUbz17ZG9jdW1lbnQuYm9keX1cbiAgICAgICAgcG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgIGRpcmVjdGlvbj1cImRvd25cIlxuICAgICAgICB0b2dnbGU9ezxLZWJhYlRvZ2dsZSBpZD1cInRvZ2dsZS1rZWJhYlwiIG9uVG9nZ2xlPXtzZXRJc09wZW59IGRhdGEtcXVpY2tzdGFydC1pZD1cInJlY29yZGluZy1rZWJhYlwiIC8+fVxuICAgICAgICBpc1BsYWluXG4gICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICBkcm9wZG93bkl0ZW1zPXthY3Rpb25JdGVtcy5tYXAoKGFjdGlvbikgPT4gKFxuICAgICAgICAgIDxEcm9wZG93bkl0ZW0ga2V5PXthY3Rpb24ua2V5fSBvbkNsaWNrPXsoKSA9PiBvblNlbGVjdChhY3Rpb24pfSBkYXRhLXF1aWNrc3RhcnQtaWQ9e2FjdGlvbi5rZXl9PlxuICAgICAgICAgICAge2FjdGlvbi50aXRsZX1cbiAgICAgICAgICA8L0Ryb3Bkb3duSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICAvPlxuICAgIDwvVGQ+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1zdHlsZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBNZXJpZGllbVBpY2tlclByb3BzIHtcbiAgb25TZWxlY3Q/OiAoaXNBTTogYm9vbGVhbikgPT4gdm9pZDtcbiAgaXNBTT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBNZXJpZGllbVBpY2tlcjogUmVhY3QuRkM8TWVyaWRpZW1QaWNrZXJQcm9wcz4gPSAoeyBvblNlbGVjdCA9ICgpID0+IHVuZGVmaW5lZCwgaXNBTSA9IHRydWUgfSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBoYW5kbGVTZWxlY3RBTSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvblNlbGVjdCh0cnVlKTtcbiAgfSwgW29uU2VsZWN0XSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UE0gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25TZWxlY3QoZmFsc2UpO1xuICB9LCBbb25TZWxlY3RdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJvbGU9eydsaXN0Ym94J31cbiAgICAgIGFyaWEtbGFiZWw9e3QoJ01lcmlkaWVtUGlja2VyLkFSSUFfTEFCRUxTLkxJU1RCT1gnKSB8fCAnJ31cbiAgICAgIGNsYXNzTmFtZT1cImRhdGV0aW1lLXBpY2tlcl9fbWVyaWRpZW0tdGl0bGUtc3RhY2tcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MoJ2RhdGV0aW1lLXBpY2tlcl9fbWVyaWRpZW0tdGlsZScsIGAke2lzQU0gPyAnJyA6ICd1bid9c2VsZWN0ZWRgKX0gb25DbGljaz17aGFuZGxlU2VsZWN0QU19PlxuICAgICAgICB7dCgnTUVSSURJRU1fQU0nLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NzcygnZGF0ZXRpbWUtcGlja2VyX19tZXJpZGllbS10aWxlJywgYCR7aXNBTSA/ICd1bicgOiAnJ31zZWxlY3RlZGApfSBvbkNsaWNrPXtoYW5kbGVTZWxlY3RQTX0+XG4gICAgICAgIHt0KCdNRVJJRElFTV9QTScsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCBkYXlqcyBmcm9tICdAaTE4bi9kYXRldGltZSc7XG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBob3VySW4xMkhyRm9ybWF0ID0gKGhvdXJJbjI0aDogbnVtYmVyKTogW251bWJlciwgYm9vbGVhbl0gPT4ge1xuICAvLyByZXR1cm4gW2hvdXIsIGlzQU1dXG4gIGhvdXJJbjI0aCA9IGNsYW1wKGhvdXJJbjI0aCwgMCwgMjMpO1xuICBpZiAoaG91ckluMjRoID4gMTIpIHtcbiAgICByZXR1cm4gW2hvdXJJbjI0aCAtIDEyLCBmYWxzZV07XG4gIH0gZWxzZSBpZiAoaG91ckluMjRoID09PSAwKSB7XG4gICAgcmV0dXJuIFsxMiwgdHJ1ZV07IC8vIDEyQU1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW2hvdXJJbjI0aCwgdHJ1ZV07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBob3VySW4yNEhyRm9ybWF0ID0gKGhvdXJJbjEyaDogbnVtYmVyLCBpc0FNOiBib29sZWFuKTogbnVtYmVyID0+IHtcbiAgaG91ckluMTJoID0gY2xhbXAoaG91ckluMTJoLCAwLCAxMik7XG4gIHJldHVybiBkYXlqcyhgMjAyMy0wMS0wMSAke2hvdXJJbjEyaH06MDA6MDAgJHtpc0FNID8gJ0FNJyA6ICdQTSd9YCwgJ1lZLU1NLUREIEg6bW06c3MgQScpLmhvdXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hvdXJJbjI0aEFNID0gKGhvdXJJbjI0aDogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIGhvdXJJbjI0aCA9IGNsYW1wKGhvdXJJbjI0aCwgMCwgMjMpO1xuICBjb25zdCBtYXJrZXIgPSBkYXlqcyhgMjAyMy0wMS0wMSAxMjowMGApO1xuICByZXR1cm4gZGF5anMoYDIwMjMtMDEtMDEgJHtob3VySW4yNGh9OjAwYCkuaXNCZWZvcmUobWFya2VyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXQyRGlnaXQgPSAodmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIHJldHVybiB2YWx1ZS50b0xvY2FsZVN0cmluZygnZW4nLCB7XG4gICAgbWluaW11bUludGVnZXJEaWdpdHM6IDIsXG4gIH0pO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTWVyaWRpZW1QaWNrZXIgfSBmcm9tICdAYXBwL0RhdGVUaW1lUGlja2VyL01lcmlkaWVtUGlja2VyJztcbmltcG9ydCB7IGZvcm1hdDJEaWdpdCwgaG91ckluMTJIckZvcm1hdCwgaG91ckluMjRIckZvcm1hdCwgaXNIb3VySW4yNGhBTSB9IGZyb20gJ0BpMThuL2RhdGV0aW1lVXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBEaXZpZGVyLFxuICBIZWxwZXJUZXh0LFxuICBIZWxwZXJUZXh0SXRlbSxcbiAgTGV2ZWwsXG4gIExldmVsSXRlbSxcbiAgUGFuZWwsXG4gIFBhbmVsRm9vdGVyLFxuICBQYW5lbE1haW4sXG4gIFBhbmVsTWFpbkJvZHksXG4gIFN0YWNrLFxuICBTdGFja0l0ZW0sXG4gIFN3aXRjaCxcbiAgVGV4dElucHV0LFxuICBUaXRsZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBBbmdsZURvd25JY29uLCBBbmdsZVVwSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lUGlja2VyUHJvcHMge1xuICBzZWxlY3RlZDoge1xuICAgIC8vIGNvbnRyb2xsZWRcbiAgICBob3VyMjQ6IG51bWJlcjsgLy8gSW4gMjRoIGZvcm1hdFxuICAgIG1pbnV0ZTogbnVtYmVyO1xuICAgIHNlY29uZDogbnVtYmVyO1xuICB9O1xuICBvbkhvdXJTZWxlY3Q/OiAoaHJJbjI0aDogbnVtYmVyKSA9PiB2b2lkO1xuICBvbk1pbnV0ZVNlbGVjdD86IChtaW51dGU6IG51bWJlcikgPT4gdm9pZDtcbiAgb25TZWNvbmRTZWxlY3Q/OiAoc2Vjb25kOiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uTWVyaWRpZW1TZWxlY3Q/OiAoaXNBTTogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFRpbWVQaWNrZXI6IFJlYWN0LkZDPFRpbWVQaWNrZXJQcm9wcz4gPSAoe1xuICBvbkhvdXJTZWxlY3QsXG4gIG9uTWludXRlU2VsZWN0LFxuICBvblNlY29uZFNlbGVjdCxcbiAgb25NZXJpZGllbVNlbGVjdCxcbiAgc2VsZWN0ZWQsXG59KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IFtpczI0aCwgc2V0SXMyNGhdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG5cbiAgY29uc3QgbWVyaWRpZW1BTSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gaXNIb3VySW4yNGhBTShzZWxlY3RlZC5ob3VyMjQpLCBbc2VsZWN0ZWQuaG91cjI0XSk7XG5cbiAgY29uc3QgaGFuZGxlSG91clNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChyYXdIb3VyOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGhvdXIgPSBpczI0aCA/IHJhd0hvdXIgOiBob3VySW4yNEhyRm9ybWF0KHJhd0hvdXIsIG1lcmlkaWVtQU0pO1xuICAgICAgb25Ib3VyU2VsZWN0ICYmIG9uSG91clNlbGVjdChob3VyKTtcbiAgICB9LFxuICAgIFtpczI0aCwgb25Ib3VyU2VsZWN0LCBtZXJpZGllbUFNXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxQYW5lbD5cbiAgICAgICAgPFBhbmVsTWFpbj5cbiAgICAgICAgICA8UGFuZWxNYWluQm9keT5cbiAgICAgICAgICAgIDxMZXZlbCBoYXNHdXR0ZXI+XG4gICAgICAgICAgICAgIDxMZXZlbEl0ZW0ga2V5PXsnaG91cid9PlxuICAgICAgICAgICAgICAgIDxUaW1lU3Bpbm5lclxuICAgICAgICAgICAgICAgICAgdmFyaWFudD17aXMyNGggPyAnaG91cjI0JyA6ICdob3VyMTInfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ0hPVVInLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtpczI0aCA/IHNlbGVjdGVkLmhvdXIyNCA6IGhvdXJJbjEySHJGb3JtYXQoc2VsZWN0ZWQuaG91cjI0KVswXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVIb3VyU2VsZWN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvTGV2ZWxJdGVtPlxuICAgICAgICAgICAgICA8TGV2ZWxJdGVtIGtleT17J3NwbGl0dGVyLTEnfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGV0aW1lLXBpY2tlcl9fY29sb24tZGl2aWRlclwiPjo8L2Rpdj5cbiAgICAgICAgICAgICAgPC9MZXZlbEl0ZW0+XG4gICAgICAgICAgICAgIDxMZXZlbEl0ZW0ga2V5PXsnbWludXRlJ30+XG4gICAgICAgICAgICAgICAgPFRpbWVTcGlubmVyXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PXsnbWludXRlJ31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXt0KCdNSU5VVEUnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZC5taW51dGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25NaW51dGVTZWxlY3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9MZXZlbEl0ZW0+XG4gICAgICAgICAgICAgIDxMZXZlbEl0ZW0ga2V5PXsnc3BsaXR0ZXItMid9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXRpbWUtcGlja2VyX19jb2xvbi1kaXZpZGVyXCI+OjwvZGl2PlxuICAgICAgICAgICAgICA8L0xldmVsSXRlbT5cbiAgICAgICAgICAgICAgPExldmVsSXRlbSBrZXk9eydzZWNvbmQnfT5cbiAgICAgICAgICAgICAgICA8VGltZVNwaW5uZXJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydzZWNvbmQnfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ1NFQ09ORCcsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkLnNlY29uZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblNlY29uZFNlbGVjdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0xldmVsSXRlbT5cbiAgICAgICAgICAgICAge2lzMjRoID8gKFxuICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExldmVsSXRlbSBrZXk9eydtZXJpZGllbSd9PlxuICAgICAgICAgICAgICAgICAgPE1lcmlkaWVtUGlja2VyIGlzQU09e21lcmlkaWVtQU19IG9uU2VsZWN0PXtvbk1lcmlkaWVtU2VsZWN0fSAvPlxuICAgICAgICAgICAgICAgIDwvTGV2ZWxJdGVtPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9MZXZlbD5cbiAgICAgICAgICA8L1BhbmVsTWFpbkJvZHk+XG4gICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICA8UGFuZWxGb290ZXI+XG4gICAgICAgICAgICA8SGVscGVyVGV4dD5cbiAgICAgICAgICAgICAgPEhlbHBlclRleHRJdGVtPnt0KCdUaW1lUGlja2VyLlVTRV8yNEhSX1RJTUUnKX08L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgICAgPC9IZWxwZXJUZXh0PlxuICAgICAgICAgICAgPFN3aXRjaCBpZD17JzI0LWhvdXItc3dpdGNoJ30gbGFiZWw9e3QoJ1RpbWVQaWNrZXIuMjRIT1VSJyl9IGlzQ2hlY2tlZD17aXMyNGh9IG9uQ2hhbmdlPXtzZXRJczI0aH0gLz5cbiAgICAgICAgICA8L1BhbmVsRm9vdGVyPlxuICAgICAgICA8L1BhbmVsTWFpbj5cbiAgICAgIDwvUGFuZWw+XG4gICAgPC8+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgVGltZVNwaW5uZXJQcm9wcyB7XG4gIHZhcmlhbnQ6ICdob3VyMTInIHwgJ2hvdXIyNCcgfCAnbWludXRlJyB8ICdzZWNvbmQnO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkO1xuICBzZWxlY3RlZDogbnVtYmVyOyAvLyBjb250cm9sbGVkLCBtdXN0IGJlIGNvcnJlc3BvbmRpbmcgdG8gdmFyaWFudFxuICBsYWJlbD86IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IFRpbWVTcGlubmVyOiBSZWFjdC5GQzxUaW1lU3Bpbm5lclByb3BzPiA9ICh7IHZhcmlhbnQsIG9uQ2hhbmdlLCBzZWxlY3RlZCwgbGFiZWwgfSkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjb21wdXRlZE1heCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHN3aXRjaCAodmFyaWFudCkge1xuICAgICAgY2FzZSAnaG91cjEyJzpcbiAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgY2FzZSAnaG91cjI0JzpcbiAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgZGVmYXVsdDogLy8gbWludXRlLCBzZWNvbmRcbiAgICAgICAgcmV0dXJuIDU5O1xuICAgIH1cbiAgfSwgW3ZhcmlhbnRdKTtcblxuICBjb25zdCBjb21wdXRlZE1pbiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHN3aXRjaCAodmFyaWFudCkge1xuICAgICAgY2FzZSAnaG91cjEyJzpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMDsgLy8gaG91cjI0LCBtaW51dGUsIHNlY29uZFxuICAgIH1cbiAgfSwgW3ZhcmlhbnRdKTtcblxuICBjb25zdCBfc2FuaXRpemVWYWx1ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbGFtcCh2YWx1ZSwgY29tcHV0ZWRNaW4sIGNvbXB1dGVkTWF4KTtcbiAgICB9LFxuICAgIFtjb21wdXRlZE1heCwgY29tcHV0ZWRNaW5dXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVmFsdWVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1ZhbCA9IF9zYW5pdGl6ZVZhbHVlKE51bWJlcih2YWx1ZSkpO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UobmV3VmFsKTtcbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgX3Nhbml0aXplVmFsdWVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlSW5jcmVtZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5ld1ZhbCA9IF9zYW5pdGl6ZVZhbHVlKHNlbGVjdGVkICsgMSk7XG4gICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UobmV3VmFsKTtcbiAgfSwgW3NlbGVjdGVkLCBfc2FuaXRpemVWYWx1ZSwgb25DaGFuZ2VdKTtcblxuICBjb25zdCBoYW5kbGVEZWNyZW1lbnQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsID0gX3Nhbml0aXplVmFsdWUoc2VsZWN0ZWQgLSAxKTtcbiAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShuZXdWYWwpO1xuICB9LCBbc2VsZWN0ZWQsIF9zYW5pdGl6ZVZhbHVlLCBvbkNoYW5nZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFN0YWNrIGFyaWEtbGFiZWw9e2xhYmVsIHx8IHZhcmlhbnR9PlxuICAgICAge2xhYmVsID8gKFxuICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgIDxUaXRsZSBjbGFzc05hbWU9XCJkYXRldGltZS1waWNrZXJfX3RpbWUtdGV4dC10b3AtbGFiZWxcIiBoZWFkaW5nTGV2ZWw9eydoNCd9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgKSA6IChcbiAgICAgICAgPD48Lz5cbiAgICAgICl9XG4gICAgICA8U3RhY2tJdGVtIGtleT17YCR7dmFyaWFudH0taW5jcmVtZW50YH0+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NzcygnZGF0ZXRpbWUtcGlja2VyX190aW1lLXNwaW4tYm94JywgJ3VwJyl9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlSW5jcmVtZW50fVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoYFRpbWVTcGlubmVyLklOQ1JFTUVOVF8ke3ZhcmlhbnQudG9VcHBlckNhc2UoKX1fVkFMVUVgKSB8fCAnJ31cbiAgICAgICAgPlxuICAgICAgICAgIDxBbmdsZVVwSWNvbiBzaXplPVwibWRcIiAvPlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgPFN0YWNrSXRlbSBrZXk9e2Ake3ZhcmlhbnR9LWlucHV0YH0+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICBpZD17YCR7dmFyaWFudH0taW5wdXRgfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoYFRpbWVTcGlubmVyLklOUFVUXyR7dmFyaWFudC50b1VwcGVyQ2FzZSgpfV9WQUxVRWApIHx8ICcnfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImRhdGV0aW1lLXBpY2tlcl9fbnVtYmVyLWlucHV0XCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBtaW49e2NvbXB1dGVkTWlufVxuICAgICAgICAgIG1heD17Y29tcHV0ZWRNYXh9XG4gICAgICAgICAgdmFsdWU9e2Zvcm1hdDJEaWdpdChzZWxlY3RlZCl9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVZhbHVlQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICA8U3RhY2tJdGVtIGtleT17YCR7dmFyaWFudH0tZGVjcmVtZW50YH0+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NzcygnZGF0ZXRpbWUtcGlja2VyX190aW1lLXNwaW4tYm94JywgJ2Rvd24nKX1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWNyZW1lbnR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChgVGltZVNwaW5uZXIuREVDUkVNRU5UXyR7dmFyaWFudC50b1VwcGVyQ2FzZSgpfV9WQUxVRWApIHx8ICcnfVxuICAgICAgICA+XG4gICAgICAgICAgPEFuZ2xlRG93bkljb24gc2l6ZT1cIm1kXCIgLz5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuLyoqXG4gKiB0KCdUaW1lU3Bpbm5lci5JTlBVVF9IT1VSMTJfVkFMVUUnKVxuICogdCgnVGltZVNwaW5uZXIuSU5QVVRfSE9VUjI0X1ZBTFVFJylcbiAqIHQoJ1RpbWVTcGlubmVyLklOUFVUX01JTlVURV9WQUxVRScpXG4gKiB0KCdUaW1lU3Bpbm5lci5JTlBVVF9TRUNPTkRfVkFMVUUnKVxuICogdCgnVGltZVNwaW5uZXIuSU5DUkVNRU5UX0hPVVIxMl9WQUxVRScpXG4gKiB0KCdUaW1lU3Bpbm5lci5JTkNSRU1FTlRfSE9VUjI0X1ZBTFVFJylcbiAqIHQoJ1RpbWVTcGlubmVyLklOQ1JFTUVOVF9NSU5VVEVfVkFMVUUnKVxuICogdCgnVGltZVNwaW5uZXIuSU5DUkVNRU5UX1NFQ09ORF9WQUxVRScpXG4gKiB0KCdUaW1lU3Bpbm5lci5ERUNSRU1FTlRfSE9VUjEyX1ZBTFVFJylcbiAqIHQoJ1RpbWVTcGlubmVyLkRFQ1JFTUVOVF9IT1VSMjRfVkFMVUUnKVxuICogdCgnVGltZVNwaW5uZXIuREVDUkVNRU5UX01JTlVURV9WQUxVRScpXG4gKiB0KCdUaW1lU3Bpbm5lci5ERUNSRU1FTlRfU0VDT05EX1ZBTFVFJylcbiAqL1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IHVzZURheWpzIH0gZnJvbSAnQGFwcC91dGlscy91c2VEYXlqcyc7XG5pbXBvcnQgeyBzdXBwb3J0ZWRUaW1lem9uZXMsIFRpbWV6b25lIH0gZnJvbSAnQGkxOG4vZGF0ZXRpbWUnO1xuaW1wb3J0IHsgU2VsZWN0LCBTZWxlY3RPcHRpb24sIFNlbGVjdFZhcmlhbnQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEdsb2JlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OVU1fT1BUSU9OUyA9IDEwO1xuXG5leHBvcnQgY29uc3QgT1BUSU9OX0lOQ1JFTUVOVCA9IDE1O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWV6b25lUGlja2VyUHJvcHMge1xuICBpc0ZsaXBFbmFibGVkPzogYm9vbGVhbjtcbiAgaXNDb21wYWN0PzogYm9vbGVhbjtcbiAgbWVudUFwcGVuZFRvPzogSFRNTEVsZW1lbnQgfCAoKCkgPT4gSFRNTEVsZW1lbnQpIHwgJ2lubGluZScgfCAncGFyZW50JyB8IHVuZGVmaW5lZDtcbiAgb25UaW1lem9uZUNoYW5nZT86ICh0aW1lem9uZTogVGltZXpvbmUpID0+IHZvaWQ7XG4gIHNlbGVjdGVkOiBUaW1lem9uZTtcbn1cblxuZXhwb3J0IGNvbnN0IFRpbWV6b25lUGlja2VyOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxUaW1lem9uZVBpY2tlclByb3BzPiA9ICh7XG4gIGlzRmxpcEVuYWJsZWQgPSB0cnVlLFxuICBpc0NvbXBhY3QsXG4gIG1lbnVBcHBlbmRUbyA9ICdwYXJlbnQnLFxuICBzZWxlY3RlZCxcbiAgb25UaW1lem9uZUNoYW5nZSA9IChfKSA9PiB1bmRlZmluZWQsXG59KSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IFtkYXlqcywgX10gPSB1c2VEYXlqcygpO1xuICBjb25zdCBbbnVtT2ZPcHRpb25zLCBzZXROdW1PZk9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUoREVGQVVMVF9OVU1fT1BUSU9OUyk7XG4gIGNvbnN0IFtpc1RpbWV6b25lT3Blbiwgc2V0SXNUaW1lem9uZU9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHRpbWV6b25lLCBpc1BsYWNlaG9sZGVyKSA9PiB7XG4gICAgICBpZiAoaXNQbGFjZWhvbGRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRJc1RpbWV6b25lT3BlbihmYWxzZSk7XG4gICAgICBvblRpbWV6b25lQ2hhbmdlKHtcbiAgICAgICAgZnVsbDogdGltZXpvbmUuZnVsbCxcbiAgICAgICAgc2hvcnQ6IHRpbWV6b25lLnNob3J0LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbb25UaW1lem9uZUNoYW5nZSwgc2V0SXNUaW1lem9uZU9wZW5dXG4gICk7XG5cbiAgY29uc3QgdGltZXpvbmVzID0gUmVhY3QudXNlTWVtbygoKSA9PiBzdXBwb3J0ZWRUaW1lem9uZXMoKSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVZpZXdNb3JlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF9lOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICBzZXROdW1PZk9wdGlvbnMoKG9sZCkgPT4gTWF0aC5taW4ob2xkICsgT1BUSU9OX0lOQ1JFTUVOVCwgdGltZXpvbmVzLmxlbmd0aCkpO1xuICAgIH0sXG4gICAgW3NldE51bU9mT3B0aW9ucywgdGltZXpvbmVzXVxuICApO1xuXG4gIGNvbnN0IG1hcFRvU2VsZWN0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRpbWV6b25lOiBUaW1lem9uZSwgaXNDb21wYWN0PzogYm9vbGVhbikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdE9wdGlvblxuICAgICAgICAgIGtleT17dGltZXpvbmUuZnVsbH1cbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgLi4udGltZXpvbmUsXG4gICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gdGltZXpvbmUuZnVsbCxcbiAgICAgICAgICAgIGNvbXBhcmVUbzogKHZhbCkgPT4gdGltZXpvbmUuZnVsbCA9PT0gdmFsLmZ1bGwsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkZXNjcmlwdGlvbj17aXNDb21wYWN0ID8gdGltZXpvbmUuZnVsbCA6IHRpbWV6b25lLnNob3J0fVxuICAgICAgICA+XG4gICAgICAgICAge2lzQ29tcGFjdCA/IHRpbWV6b25lLnNob3J0IDogYChVVEMke2RheWpzKCkudHoodGltZXpvbmUuZnVsbCkuZm9ybWF0KCdaJyl9KSAke3RpbWV6b25lLmZ1bGx9YH1cbiAgICAgICAgPC9TZWxlY3RPcHRpb24+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2RheWpzXVxuICApO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGltZXpvbmVzXG4gICAgICAuc2xpY2UoMCwgbnVtT2ZPcHRpb25zKVxuICAgICAgLm1hcCgodGltZXpvbmUpID0+IG1hcFRvU2VsZWN0aW9uKHRpbWV6b25lLCBpc0NvbXBhY3QpKVxuICAgICAgLmNvbmNhdChcbiAgICAgICAgbnVtT2ZPcHRpb25zIDwgdGltZXpvbmVzLmxlbmd0aFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICA8U2VsZWN0T3B0aW9uIGtleT1cInZpZXctbW9yZVwiIGlzUGxhY2Vob2xkZXIgb25DbGljaz17aGFuZGxlVmlld01vcmV9PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzKCdwZi1jLWJ1dHRvbicsICdwZi1tLWxpbmsnLCAncGYtbS1pbmxpbmUnKX0+XG4gICAgICAgICAgICAgICAgICB7dCgnVklFV19NT1JFJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L1NlbGVjdE9wdGlvbj4sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXVxuICAgICAgKTtcbiAgfSwgW2lzQ29tcGFjdCwgdGltZXpvbmVzLCBudW1PZk9wdGlvbnMsIHQsIGhhbmRsZVZpZXdNb3JlLCBtYXBUb1NlbGVjdGlvbl0pO1xuXG4gIGNvbnN0IG9uRmlsdGVyID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+IHwgbnVsbCwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoRXhwID0gbmV3IFJlZ0V4cCh2YWx1ZS5yZXBsYWNlKC8oWytdKS9naSwgYFxcXFwkMWApLCAnaScpO1xuICAgICAgcmV0dXJuIHRpbWV6b25lc1xuICAgICAgICAuZmlsdGVyKChvcCkgPT4gbWF0Y2hFeHAudGVzdChvcC5mdWxsKSB8fCBtYXRjaEV4cC50ZXN0KG9wLnNob3J0KSlcbiAgICAgICAgLm1hcCgodCkgPT4gbWFwVG9TZWxlY3Rpb24odCwgaXNDb21wYWN0KSk7XG4gICAgfSxcbiAgICBbdGltZXpvbmVzLCBvcHRpb25zLCBpc0NvbXBhY3QsIG1hcFRvU2VsZWN0aW9uXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFyaWFudD17U2VsZWN0VmFyaWFudC5zaW5nbGV9XG4gICAgICBvblRvZ2dsZT17c2V0SXNUaW1lem9uZU9wZW59XG4gICAgICBpc0ZsaXBFbmFibGVkPXtpc0ZsaXBFbmFibGVkfVxuICAgICAgbWVudUFwcGVuZFRvPXttZW51QXBwZW5kVG99XG4gICAgICBtYXhIZWlnaHQ9XCIxNmVtXCJcbiAgICAgIHdpZHRoPXtpc0NvbXBhY3QgPyAnOC41ZW0nIDogdW5kZWZpbmVkfVxuICAgICAgc2VsZWN0aW9ucz17e1xuICAgICAgICAuLi5zZWxlY3RlZCxcbiAgICAgICAgdG9TdHJpbmc6ICgpID0+IHNlbGVjdGVkLmZ1bGwsXG4gICAgICAgIGNvbXBhcmVUbzogKHZhbCkgPT4gc2VsZWN0ZWQuZnVsbCA9PT0gdmFsLmZ1bGwsXG4gICAgICB9fVxuICAgICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgaGFzSW5saW5lRmlsdGVyXG4gICAgICBhcmlhLWxhYmVsPXt0KCdUaW1lem9uZVBpY2tlci5BUklBX0xBQkVMUy5TRUxFQ1QnKSB8fCAnJ31cbiAgICAgIHR5cGVBaGVhZEFyaWFMYWJlbD17dCgnVGltZXpvbmVQaWNrZXIuQVJJQV9MQUJFTFMuVFlQRV9BSEVBRCcpIHx8ICcnfVxuICAgICAgaXNPcGVuPXtpc1RpbWV6b25lT3Blbn1cbiAgICAgIHRvZ2dsZUluZGljYXRvcj17PEdsb2JlSWNvbiAvPn1cbiAgICA+XG4gICAgICB7b3B0aW9uc31cbiAgICA8L1NlbGVjdD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAYXBwL0RhdGVUaW1lUGlja2VyL1RpbWVQaWNrZXInO1xuaW1wb3J0IHsgdXNlRGF5anMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZURheWpzJztcbmltcG9ydCB7IFRpbWV6b25lLCBkZWZhdWx0RGF0ZXRpbWVGb3JtYXQgfSBmcm9tICdAaTE4bi9kYXRldGltZSc7XG5pbXBvcnQgeyBpc0hvdXJJbjI0aEFNIH0gZnJvbSAnQGkxOG4vZGF0ZXRpbWVVdGlscyc7XG5pbXBvcnQge1xuICBBY3Rpb25Hcm91cCxcbiAgQnVsbHNleWUsXG4gIEJ1dHRvbixcbiAgQ2FsZW5kYXJNb250aCxcbiAgRmxleCxcbiAgRmxleEl0ZW0sXG4gIEZvcm0sXG4gIEZvcm1Hcm91cCxcbiAgVGFiLFxuICBUYWJzLFxuICBUYWJUaXRsZVRleHQsXG4gIFRleHRJbnB1dCxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFRpbWV6b25lUGlja2VyIH0gZnJvbSAnLi9UaW1lem9uZVBpY2tlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVRpbWVQaWNrZXJQcm9wcyB7XG4gIG9uU2VsZWN0PzogKGRhdGU6IERhdGUsIHRpbWV6b25lOiBUaW1lem9uZSkgPT4gdm9pZDtcbiAgcHJlZmlsbGVkRGF0ZT86IERhdGU7IC8vIHRpbWV6b25lIGlzIGlnbm9yZWRcbiAgb25EaXNtaXNzOiAoKSA9PiB2b2lkO1xufVxuXG50eXBlIF9UYWJLZXkgPSAnZGF0ZScgfCAndGltZSc7XG5cbmV4cG9ydCBjb25zdCBEYXRlVGltZVBpY2tlcjogUmVhY3QuRkM8RGF0ZVRpbWVQaWNrZXJQcm9wcz4gPSAoeyBvblNlbGVjdCwgb25EaXNtaXNzLCBwcmVmaWxsZWREYXRlIH0pID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW2RheWpzLCBfXSA9IHVzZURheWpzKCk7XG4gIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSBSZWFjdC51c2VTdGF0ZTxfVGFiS2V5PignZGF0ZScpO1xuICBjb25zdCBbZGF0ZXRpbWUsIHNldERhdGV0aW1lXSA9IFJlYWN0LnVzZVN0YXRlPERhdGU+KG5ldyBEYXRlKCkpO1xuICBjb25zdCBbdGltZXpvbmUsIHNldFRpbWV6b25lXSA9IFJlYWN0LnVzZVN0YXRlPFRpbWV6b25lPihkZWZhdWx0RGF0ZXRpbWVGb3JtYXQudGltZVpvbmUpOyAvLyBOb3QgYWZmZWN0ZWQgYnkgdXNlciBwcmVmZXJlbmNlc1xuXG4gIGNvbnN0IGhhbmRsZVRhYlNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfLCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gc2V0QWN0aXZlVGFiKGAke2tleX1gIGFzIF9UYWJLZXkpLFxuICAgIFtzZXRBY3RpdmVUYWJdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0ICYmIG9uU2VsZWN0KGRhdGV0aW1lLCB0aW1lem9uZSk7XG4gIH0sIFtkYXRldGltZSwgdGltZXpvbmUsIG9uU2VsZWN0XSk7XG5cbiAgY29uc3QgaGFuZGxlQ2FsZW5kYXJTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgc2V0RGF0ZXRpbWUoKG9sZCkgPT4ge1xuICAgICAgICBjb25zdCB3cmFwcGVkT2xkID0gZGF5anMob2xkKTtcbiAgICAgICAgcmV0dXJuIGRheWpzKGRhdGUpLmhvdXIod3JhcHBlZE9sZC5ob3VyKCkpLm1pbnV0ZSh3cmFwcGVkT2xkLm1pbnV0ZSgpKS5zZWNvbmQod3JhcHBlZE9sZC5zZWNvbmQoKSkudG9EYXRlKCk7XG4gICAgICB9KTtcbiAgICAgIHNldEFjdGl2ZVRhYigndGltZScpOyAvLyBTd2l0Y2ggdG8gdGltZVxuICAgIH0sXG4gICAgW3NldERhdGV0aW1lLCBzZXRBY3RpdmVUYWIsIGRheWpzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUhvdXJDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaHJJbjI0aDogbnVtYmVyKSA9PiB7XG4gICAgICBzZXREYXRldGltZSgob2xkKSA9PiBkYXlqcyhvbGQpLmhvdXIoaHJJbjI0aCkudG9EYXRlKCkpO1xuICAgIH0sXG4gICAgW3NldERhdGV0aW1lLCBkYXlqc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNaW51dGVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAobTogbnVtYmVyKSA9PiB7XG4gICAgICBzZXREYXRldGltZSgob2xkKSA9PiBkYXlqcyhvbGQpLm1pbnV0ZShtKS50b0RhdGUoKSk7XG4gICAgfSxcbiAgICBbc2V0RGF0ZXRpbWUsIGRheWpzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlY29uZENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChzOiBudW1iZXIpID0+IHtcbiAgICAgIHNldERhdGV0aW1lKChvbGQpID0+IGRheWpzKG9sZCkuc2Vjb25kKHMpLnRvRGF0ZSgpKTtcbiAgICB9LFxuICAgIFtzZXREYXRldGltZSwgZGF5anNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTWVyaWRpZW1DaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaXNBTTogYm9vbGVhbikgPT4ge1xuICAgICAgc2V0RGF0ZXRpbWUoKG9sZCkgPT4ge1xuICAgICAgICBjb25zdCBvbGREYXlqcyA9IGRheWpzKG9sZCk7XG4gICAgICAgIGlmIChpc0FNICE9PSBpc0hvdXJJbjI0aEFNKG9sZERheWpzLmhvdXIoKSkpIHtcbiAgICAgICAgICByZXR1cm4gKGlzQU0gPyBvbGREYXlqcy5zdWJ0cmFjdCgxMiwgJ2hvdXInKSA6IG9sZERheWpzLmFkZCgxMiwgJ2hvdXInKSkudG9EYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9sZDtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3NldERhdGV0aW1lLCBkYXlqc11cbiAgKTtcblxuICBjb25zdCBzZWxlY3RlZERhdGV0aW1lRGlzcGxheSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZGF5anMoZGF0ZXRpbWUpLmZvcm1hdCgnTCBMVFMnKSwgW2RhdGV0aW1lLCBkYXlqc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZWZpbGxlZERhdGUpIHtcbiAgICAgIHNldERhdGV0aW1lKG5ldyBEYXRlKHByZWZpbGxlZERhdGUpKTtcbiAgICB9XG4gIH0sIFtzZXREYXRldGltZSwgcHJlZmlsbGVkRGF0ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm0+XG4gICAgICA8VGFic1xuICAgICAgICBhcmlhLWxhYmVsPXt0KCdEYXRlVGltZVBpY2tlci5BUklBX0xBQkVMUy5UQUJTJykgfHwgJyd9XG4gICAgICAgIG9uU2VsZWN0PXtoYW5kbGVUYWJTZWxlY3R9XG4gICAgICAgIGFjdGl2ZUtleT17YWN0aXZlVGFifVxuICAgICAgICBpc0ZpbGxlZFxuICAgICAgICByb2xlPVwicmVnaW9uXCJcbiAgICAgID5cbiAgICAgICAgPFRhYiBrZXk9eydkYXRlJ30gZXZlbnRLZXk9eydkYXRlJ30gdGl0bGU9ezxUYWJUaXRsZVRleHQ+e3QoJ0RBVEUnLCB7IG5zOiAnY29tbW9uJyB9KX08L1RhYlRpdGxlVGV4dD59PlxuICAgICAgICAgIDxGb3JtR3JvdXA+XG4gICAgICAgICAgICA8QnVsbHNleWU+XG4gICAgICAgICAgICAgIDxDYWxlbmRhck1vbnRoXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0ZXRpbWUtcGlja2VyX19jYWxlbmRhclwiXG4gICAgICAgICAgICAgICAgaXNEYXRlRm9jdXNlZFxuICAgICAgICAgICAgICAgIGxvY2FsZT17ZGF5anMubG9jYWxlKCl9XG4gICAgICAgICAgICAgICAgaW5saW5lUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogJ2FydGljbGUnLFxuICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsbGVkYnk6ICdzdGFydC1kYXRlJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmc6IDAgfX1cbiAgICAgICAgICAgICAgICBkYXRlPXtkYXRldGltZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2FsZW5kYXJTZWxlY3R9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0J1bGxzZXllPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8L1RhYj5cbiAgICAgICAgPFRhYiBrZXk9eyd0aW1lJ30gZXZlbnRLZXk9eyd0aW1lJ30gdGl0bGU9ezxUYWJUaXRsZVRleHQ+e3QoJ1RJTUUnLCB7IG5zOiAnY29tbW9uJyB9KX08L1RhYlRpdGxlVGV4dD59PlxuICAgICAgICAgIDxGb3JtR3JvdXA+XG4gICAgICAgICAgICA8QnVsbHNleWU+XG4gICAgICAgICAgICAgIDxUaW1lUGlja2VyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3tcbiAgICAgICAgICAgICAgICAgIGhvdXIyNDogZGF5anMoZGF0ZXRpbWUpLmhvdXIoKSwgLy8gMjRociBmb3JtYXRcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZTogZGF5anMoZGF0ZXRpbWUpLm1pbnV0ZSgpLFxuICAgICAgICAgICAgICAgICAgc2Vjb25kOiBkYXlqcyhkYXRldGltZSkuc2Vjb25kKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbkhvdXJTZWxlY3Q9e2hhbmRsZUhvdXJDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25NaW51dGVTZWxlY3Q9e2hhbmRsZU1pbnV0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvblNlY29uZFNlbGVjdD17aGFuZGxlU2Vjb25kQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uTWVyaWRpZW1TZWxlY3Q9e2hhbmRsZU1lcmlkaWVtQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPC9UYWI+XG4gICAgICA8L1RhYnM+XG4gICAgICA8Rm9ybUdyb3VwIGxhYmVsPXt0KCdEYXRlVGltZVBpY2tlci5TRUxFQ1RFRF9EQVRFVElNRScpfT5cbiAgICAgICAgPEZsZXg+XG4gICAgICAgICAgPEZsZXhJdGVtPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBpZD1cInNlbGVjdGVkLWRhdGV0aW1lXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnRGF0ZVRpbWVQaWNrZXIuQVJJQV9MQUJFTFMuRElTUExBWV9TRUxFQ1RFRF9EQVRFVElNRScpIHx8ICcnfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRldGltZS1waWNrZXJfX2RhdGV0aW1lLXNlbGVjdGVkLWRpc3BsYXlcIlxuICAgICAgICAgICAgICByZWFkT25seVxuICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWREYXRldGltZURpc3BsYXl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgPEZsZXhJdGVtPlxuICAgICAgICAgICAgPFRpbWV6b25lUGlja2VyIG1lbnVBcHBlbmRUbz17ZG9jdW1lbnQuYm9keX0gb25UaW1lem9uZUNoYW5nZT17c2V0VGltZXpvbmV9IHNlbGVjdGVkPXt0aW1lem9uZX0gaXNDb21wYWN0IC8+XG4gICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgPC9GbGV4PlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8QWN0aW9uR3JvdXAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgb25DbGljaz17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICB7dCgnU0VMRUNUJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17b25EaXNtaXNzfT5cbiAgICAgICAgICB7dCgnQ0FOQ0VMJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICA8L0Zvcm0+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG4vKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BhcHAvRGF0ZVRpbWVQaWNrZXIvRGF0ZVRpbWVQaWNrZXInO1xuaW1wb3J0IHsgdXNlRGF5anMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZURheWpzJztcbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IFRpbWV6b25lIH0gZnJvbSAnQGkxOG4vZGF0ZXRpbWUnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBCdXR0b25WYXJpYW50LFxuICBGbGV4LFxuICBGbGV4SXRlbSxcbiAgSGVscGVyVGV4dCxcbiAgSGVscGVyVGV4dEl0ZW0sXG4gIElucHV0R3JvdXAsXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJQb3NpdGlvbixcbiAgU3RhY2ssXG4gIFN0YWNrSXRlbSxcbiAgVGV4dElucHV0LFxuICBWYWxpZGF0ZWRPcHRpb25zLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IE91dGxpbmVkQ2FsZW5kYXJBbHRJY29uLCBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVUaW1lRmlsdGVyUHJvcHMge1xuICBvblN1Ym1pdDogKGRhdGVJU086IHN0cmluZykgPT4gdm9pZDtcbn1cblxuY29uc3QgX2VtcHR5RGF0ZXRpbWVJbnB1dDoge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGRhdGU6IERhdGUgfCB1bmRlZmluZWQ7IC8vIElnbm9yZSB0aW1lem9uZVxuICB2YWxpZGF0aW9uOiBWYWxpZGF0ZWRPcHRpb25zO1xufSA9IHtcbiAgdGV4dDogJycsXG4gIGRhdGU6IHVuZGVmaW5lZCxcbiAgdmFsaWRhdGlvbjogVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0LFxufTtcblxuZXhwb3J0IGNvbnN0IERhdGVUaW1lRmlsdGVyOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxEYXRlVGltZUZpbHRlclByb3BzPiA9ICh7IG9uU3VibWl0IH0pID0+IHtcbiAgY29uc3QgW2RheWpzLCBkYXRldGltZUNvbnRleHRdID0gdXNlRGF5anMoKTtcbiAgY29uc3QgW2RhdGV0aW1lSW5wdXQsIHNldERhdGV0aW1lSW5wdXRdID0gUmVhY3QudXNlU3RhdGUoX2VtcHR5RGF0ZXRpbWVJbnB1dCk7XG4gIGNvbnN0IFtpc0NhbGVuZGFyT3Blbiwgc2V0SXNDYWxlbmRhck9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uVG9nZ2xlQ2FsZW5kYXIgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRJc0NhbGVuZGFyT3Blbigob3BlbikgPT4gIW9wZW4pLCBbc2V0SXNDYWxlbmRhck9wZW5dKTtcblxuICBjb25zdCBvblBvcG92ZXJEaXNtaXNzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0SXNDYWxlbmRhck9wZW4oZmFsc2UpLCBbc2V0SXNDYWxlbmRhck9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGRhdGV0aW1lSW5wdXQudmFsaWRhdGlvbiA9PT0gVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzKSB7XG4gICAgICAvLyBpbnRlcm5hbGx5IHVzZXMgSVNPU3RyaW5nIGJ1dCBkaXNwbGF5IHdpbGwgYmUgbG9jYWxpemVkLlxuICAgICAgb25TdWJtaXQoZGF5anMoZGF0ZXRpbWVJbnB1dC5kYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICAgIHNldERhdGV0aW1lSW5wdXQoX2VtcHR5RGF0ZXRpbWVJbnB1dCk7XG4gICAgfVxuICB9LCBbb25TdWJtaXQsIGRhdGV0aW1lSW5wdXQsIHNldERhdGV0aW1lSW5wdXQsIGRheWpzXSk7XG5cbiAgY29uc3QgaGFuZGxlRGF0ZXRpbWVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZGF0ZTogRGF0ZSwgdGltZXpvbmU6IFRpbWV6b25lKSA9PiB7XG4gICAgICBjb25zdCBkID0gZGF5anMoZGF0ZSkudHoodGltZXpvbmUuZnVsbCwgdHJ1ZSk7XG4gICAgICBzZXREYXRldGltZUlucHV0KHtcbiAgICAgICAgdGV4dDogZC50b0lTT1N0cmluZygpLFxuICAgICAgICBkYXRlOiBkLnRvRGF0ZSgpLFxuICAgICAgICB2YWxpZGF0aW9uOiBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MsXG4gICAgICB9KTtcbiAgICAgIG9uUG9wb3ZlckRpc21pc3MoKTtcbiAgICB9LFxuICAgIFtzZXREYXRldGltZUlucHV0LCBvblBvcG92ZXJEaXNtaXNzLCBkYXlqc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUZXh0SW5wdXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0RGF0ZXRpbWVJbnB1dCgoXykgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgcmV0dXJuIF9lbXB0eURhdGV0aW1lSW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZCA9IGRheWpzLnV0Yyh2YWx1ZSwgJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nLCB0cnVlKTsgLy8gUGFyc2UgSVNPODYwMSwgbXVzdCBiZSBpbiBVVENcbiAgICAgICAgaWYgKGQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHZhbHVlLFxuICAgICAgICAgICAgZGF0ZTogZC50b0RhdGUoKSxcbiAgICAgICAgICAgIHZhbGlkYXRpb246IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHZhbGlkYXRpb246IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0RGF0ZXRpbWVJbnB1dCwgZGF5anNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RmxleD5cbiAgICAgIDxGbGV4IGFsaWduU2VsZj17eyBkZWZhdWx0OiAnYWxpZ25TZWxmRmxleFN0YXJ0JyB9fT5cbiAgICAgICAgPEZsZXhJdGVtIHNwYWNlcj17eyBkZWZhdWx0OiAnc3BhY2VyTm9uZScgfX0+XG4gICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgYm9keUNvbnRlbnQ9e1xuICAgICAgICAgICAgICA8RGF0ZVRpbWVQaWNrZXJcbiAgICAgICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlRGF0ZXRpbWVTZWxlY3R9XG4gICAgICAgICAgICAgICAgb25EaXNtaXNzPXtvblBvcG92ZXJEaXNtaXNzfVxuICAgICAgICAgICAgICAgIHByZWZpbGxlZERhdGU9e2RhdGV0aW1lSW5wdXQuZGF0ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzVmlzaWJsZT17aXNDYWxlbmRhck9wZW59XG4gICAgICAgICAgICBzaG93Q2xvc2U9e2ZhbHNlfVxuICAgICAgICAgICAgbWluV2lkdGg9eycyOGVtJ31cbiAgICAgICAgICAgIHBvc2l0aW9uPXtQb3BvdmVyUG9zaXRpb24uYm90dG9tfVxuICAgICAgICAgICAgZmxpcEJlaGF2aW9yPXtbJ2JvdHRvbSddfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdGFjaz5cbiAgICAgICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgICAgICA8SW5wdXRHcm91cD5cbiAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGUtdGltZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtkYXlqcygpLnN0YXJ0T2YoJ3llYXInKS50eihkYXRldGltZUNvbnRleHQudGltZVpvbmUuZnVsbCwgdHJ1ZSkudG9JU09TdHJpbmcoKX1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnRGF0ZXRpbWVGaWx0ZXIuQVJJQV9MQUJFTFMuREFURVRJTUVfSU5QVVQnKSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RhdGV0aW1lSW5wdXQudGV4dH1cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkPXtkYXRldGltZUlucHV0LnZhbGlkYXRpb259XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUZXh0SW5wdXR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0RhdGV0aW1lRmlsdGVyLkFSSUFfTEFCRUxTLlRPR0dMRV9DQUxFTkRBUicpIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvblRvZ2dsZUNhbGVuZGFyfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8T3V0bGluZWRDYWxlbmRhckFsdEljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvSW5wdXRHcm91cD5cbiAgICAgICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgICAgICAgIHtkYXRldGltZUlucHV0LnZhbGlkYXRpb24gPT09IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgICAgICAgIDxIZWxwZXJUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8SGVscGVyVGV4dEl0ZW0gdmFyaWFudD1cImVycm9yXCI+e3QoJ0RhdGV0aW1lRmlsdGVyLklOVkFMSURfREFURV9URVhUJyl9PC9IZWxwZXJUZXh0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvSGVscGVyVGV4dD5cbiAgICAgICAgICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TdGFjaz5cbiAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICA8L0ZsZXg+XG4gICAgICA8RmxleEl0ZW0gYWxpZ25TZWxmPXt7IGRlZmF1bHQ6ICdhbGlnblNlbGZGbGV4U3RhcnQnIH19PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdmFyaWFudD17QnV0dG9uVmFyaWFudC5jb250cm9sfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ0RhdGV0aW1lRmlsdGVyLkFSSUFfTEFCRUxTLlNFQVJDSF9CVVRUT04nKSB8fCAnJ31cbiAgICAgICAgICBpc0Rpc2FibGVkPXtkYXRldGltZUlucHV0LnZhbGlkYXRpb24gIT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzc31cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgID5cbiAgICAgICAgICA8U2VhcmNoSWNvbiAvPlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvRmxleEl0ZW0+XG4gICAgPC9GbGV4PlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBDaGVja2JveCwgRmxleCwgRmxleEl0ZW0sIFRleHRJbnB1dCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBEdXJhdGlvbkZpbHRlclByb3BzIHtcbiAgZHVyYXRpb25zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgb25EdXJhdGlvbklucHV0OiAoZTogbnVtYmVyKSA9PiB2b2lkO1xuICBvbkNvbnRpbnVvdXNEdXJhdGlvblNlbGVjdDogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBEdXJhdGlvbkZpbHRlcjogUmVhY3QuRkM8RHVyYXRpb25GaWx0ZXJQcm9wcz4gPSAoe1xuICBkdXJhdGlvbnMsXG4gIG9uRHVyYXRpb25JbnB1dCxcbiAgb25Db250aW51b3VzRHVyYXRpb25TZWxlY3QsXG59KSA9PiB7XG4gIGNvbnN0IFtkdXJhdGlvbiwgc2V0RHVyYXRpb25dID0gUmVhY3QudXNlU3RhdGUoMzApO1xuICBjb25zdCBpc0NvbnRpbnVvdXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IGR1cmF0aW9ucyAmJiBkdXJhdGlvbnMuaW5jbHVkZXMoJ2NvbnRpbnVvdXMnKSwgW2R1cmF0aW9uc10pO1xuXG4gIGNvbnN0IGhhbmRsZUNvbnRpbnVvdXNDaGVja0JveENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkKSA9PiB7XG4gICAgICBvbkNvbnRpbnVvdXNEdXJhdGlvblNlbGVjdChjaGVja2VkKTtcbiAgICB9LFxuICAgIFtvbkNvbnRpbnVvdXNEdXJhdGlvblNlbGVjdF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFbnRlcktleSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlKSA9PiB7XG4gICAgICBpZiAoZS5rZXkgJiYgZS5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb25EdXJhdGlvbklucHV0KGR1cmF0aW9uKTtcbiAgICB9LFxuICAgIFtvbkR1cmF0aW9uSW5wdXQsIGR1cmF0aW9uXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZsZXg+XG4gICAgICA8RmxleEl0ZW0gZmxleD17eyBkZWZhdWx0OiAnZmxleF8xJyB9fT5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIHZhbHVlPXtkdXJhdGlvbn1cbiAgICAgICAgICBpZD1cImR1cmF0aW9uLWlucHV0XCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiZHVyYXRpb24gZmlsdGVyXCJcbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldER1cmF0aW9uKE51bWJlcihlKSl9XG4gICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVFbnRlcktleX1cbiAgICAgICAgLz5cbiAgICAgIDwvRmxleEl0ZW0+XG4gICAgICA8RmxleEl0ZW0+XG4gICAgICAgIDxDaGVja2JveFxuICAgICAgICAgIGxhYmVsPVwiQ29udGludW91c1wiXG4gICAgICAgICAgaWQ9XCJjb250aW51b3VzLWNoZWNrYm94XCJcbiAgICAgICAgICBpc0NoZWNrZWQ9e2lzQ29udGludW91c31cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ29udGludW91c0NoZWNrQm94Q2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9GbGV4SXRlbT5cbiAgICA8L0ZsZXg+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IFJlY29yZGluZyB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdCwgU2VsZWN0T3B0aW9uLCBTZWxlY3RWYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVGaWx0ZXJQcm9wcyB7XG4gIHJlY29yZGluZ3M6IFJlY29yZGluZ1tdO1xuICBmaWx0ZXJlZE5hbWVzOiBzdHJpbmdbXTtcbiAgb25TdWJtaXQ6IChpbnB1dE5hbWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE5hbWVGaWx0ZXI6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PE5hbWVGaWx0ZXJQcm9wcz4gPSAoeyByZWNvcmRpbmdzLCBmaWx0ZXJlZE5hbWVzLCBvblN1Ym1pdCB9KSA9PiB7XG4gIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBvblNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfLCBzZWxlY3Rpb24sIGlzUGxhY2Vob2xkZXIpID0+IHtcbiAgICAgIGlmICghaXNQbGFjZWhvbGRlcikge1xuICAgICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgb25TdWJtaXQoc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvblN1Ym1pdCwgc2V0SXNFeHBhbmRlZF1cbiAgKTtcblxuICBjb25zdCBuYW1lT3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiByZWNvcmRpbmdzXG4gICAgICAubWFwKChyKSA9PiByLm5hbWUpXG4gICAgICAuZmlsdGVyKChuKSA9PiAhZmlsdGVyZWROYW1lcy5pbmNsdWRlcyhuKSlcbiAgICAgIC5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IDxTZWxlY3RPcHRpb24ga2V5PXtpbmRleH0gdmFsdWU9e29wdGlvbn0gLz4pO1xuICB9LCBbcmVjb3JkaW5ncywgZmlsdGVyZWROYW1lc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFyaWFudD17U2VsZWN0VmFyaWFudC50eXBlYWhlYWR9XG4gICAgICBvblRvZ2dsZT17c2V0SXNFeHBhbmRlZH1cbiAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgIGlzT3Blbj17aXNFeHBhbmRlZH1cbiAgICAgIHR5cGVBaGVhZEFyaWFMYWJlbD1cIkZpbHRlciBieSBuYW1lLi4uXCJcbiAgICAgIHBsYWNlaG9sZGVyVGV4dD1cIkZpbHRlciBieSBuYW1lLi4uXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJGaWx0ZXIgYnkgbmFtZVwiXG4gICAgICBtYXhIZWlnaHQ9XCIxNmVtXCJcbiAgICA+XG4gICAgICB7bmFtZU9wdGlvbnN9XG4gICAgPC9TZWxlY3Q+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IFJlY29yZGluZ1N0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0LCBTZWxlY3RPcHRpb24sIFNlbGVjdFZhcmlhbnQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nU3RhdGVGaWx0ZXJQcm9wcyB7XG4gIGZpbHRlcmVkU3RhdGVzOiBSZWNvcmRpbmdTdGF0ZVtdIHwgdW5kZWZpbmVkO1xuICBvblNlbGVjdFRvZ2dsZTogKHN0YXRlOiBSZWNvcmRpbmdTdGF0ZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFJlY29yZGluZ1N0YXRlRmlsdGVyOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxSZWNvcmRpbmdTdGF0ZUZpbHRlclByb3BzPiA9ICh7XG4gIGZpbHRlcmVkU3RhdGVzLFxuICBvblNlbGVjdFRvZ2dsZSxcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBvblNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICBvblNlbGVjdFRvZ2dsZShzZWxlY3Rpb24pO1xuICAgIH0sXG4gICAgW3NldElzT3Blbiwgb25TZWxlY3RUb2dnbGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YXJpYW50PXtTZWxlY3RWYXJpYW50LmNoZWNrYm94fVxuICAgICAgb25Ub2dnbGU9e3NldElzT3Blbn1cbiAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgIHNlbGVjdGlvbnM9e2ZpbHRlcmVkU3RhdGVzfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBhcmlhLWxhYmVsPVwiRmlsdGVyIGJ5IHN0YXRlXCJcbiAgICAgIHBsYWNlaG9sZGVyVGV4dD1cIkZpbHRlciBieSBzdGF0ZVwiXG4gICAgPlxuICAgICAge09iamVjdC52YWx1ZXMoUmVjb3JkaW5nU3RhdGUpLm1hcCgocnMpID0+IChcbiAgICAgICAgPFNlbGVjdE9wdGlvbiBhcmlhLWxhYmVsPXtgJHtyc30gU3RhdGVgfSBrZXk9e3JzfSB2YWx1ZT17cnN9IC8+XG4gICAgICApKX1cbiAgICA8L1NlbGVjdD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgVXBkYXRlRmlsdGVyT3B0aW9ucyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvQ29tbW9uJztcbmltcG9ydCB7XG4gIGFsbG93ZWRBY3RpdmVSZWNvcmRpbmdGaWx0ZXJzLFxuICBhbGxvd2VkQXJjaGl2ZWRSZWNvcmRpbmdGaWx0ZXJzLFxufSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL1JlY29yZGluZ0ZpbHRlclNsaWNlJztcbmltcG9ydCB7IHJlY29yZGluZ1VwZGF0ZUNhdGVnb3J5SW50ZW50LCBSb290U3RhdGUsIFN0YXRlRGlzcGF0Y2ggfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IFJlY29yZGluZywgUmVjb3JkaW5nU3RhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyB1c2VEYXlqcyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlRGF5anMnO1xuaW1wb3J0IGRheWpzIGZyb20gJ0BpMThuL2RhdGV0aW1lJztcbmltcG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93bkl0ZW0sXG4gIERyb3Bkb3duUG9zaXRpb24sXG4gIERyb3Bkb3duVG9nZ2xlLFxuICBUb29sYmFyRmlsdGVyLFxuICBUb29sYmFyR3JvdXAsXG4gIFRvb2xiYXJJdGVtLFxuICBUb29sYmFyVG9nZ2xlR3JvdXAsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRmlsdGVySWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBEYXRlVGltZUZpbHRlciB9IGZyb20gJy4vRmlsdGVycy9EYXRldGltZUZpbHRlcic7XG5pbXBvcnQgeyBEdXJhdGlvbkZpbHRlciB9IGZyb20gJy4vRmlsdGVycy9EdXJhdGlvbkZpbHRlcic7XG5pbXBvcnQgeyBMYWJlbEZpbHRlciB9IGZyb20gJy4vRmlsdGVycy9MYWJlbEZpbHRlcic7XG5pbXBvcnQgeyBOYW1lRmlsdGVyIH0gZnJvbSAnLi9GaWx0ZXJzL05hbWVGaWx0ZXInO1xuaW1wb3J0IHsgUmVjb3JkaW5nU3RhdGVGaWx0ZXIgfSBmcm9tICcuL0ZpbHRlcnMvUmVjb3JkaW5nU3RhdGVGaWx0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzIHtcbiAgTmFtZTogc3RyaW5nW107XG4gIExhYmVsOiBzdHJpbmdbXTtcbiAgU3RhdGU/OiBSZWNvcmRpbmdTdGF0ZVtdO1xuICBTdGFydGVkQmVmb3JlRGF0ZT86IHN0cmluZ1tdO1xuICBTdGFydGVkQWZ0ZXJEYXRlPzogc3RyaW5nW107XG4gIER1cmF0aW9uU2Vjb25kcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgY2F0ZWdvcmllc1RvRGlzcGxheU5hbWVzID0ge1xuICBOYW1lOiAnTmFtZScsXG4gIExhYmVsOiAnTGFiZWwnLFxuICBTdGF0ZTogJ1JlY29yZGluZyBTdGF0ZScsXG4gIFN0YXJ0ZWRCZWZvcmVEYXRlOiAnU3RhcnRlZCBCZWZvcmUgRGF0ZScsXG4gIFN0YXJ0ZWRBZnRlckRhdGU6ICdTdGFydGVkIEFmdGVyIERhdGUnLFxuICBEdXJhdGlvblNlY29uZHM6ICdEdXJhdGlvbiAocyknLFxufTtcblxuZXhwb3J0IGNvbnN0IGNhdGVnb3J5SXNEYXRlID0gKGZpZWxkS2V5OiBzdHJpbmcpID0+IC9kYXRlL2kudGVzdChmaWVsZEtleSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nRmlsdGVyc1Byb3BzIHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIGJyZWFrcG9pbnQ6ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICcyeGwnO1xuICBpc0FyY2hpdmVkOiBib29sZWFuO1xuICByZWNvcmRpbmdzOiBSZWNvcmRpbmdbXTtcbiAgZmlsdGVyczogUmVjb3JkaW5nRmlsdGVyc0NhdGVnb3JpZXM7XG4gIHVwZGF0ZUZpbHRlcnM6ICh0YXJnZXQ6IHN0cmluZywgdXBkYXRlRmlsdGVyT3B0aW9uczogVXBkYXRlRmlsdGVyT3B0aW9ucykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFJlY29yZGluZ0ZpbHRlcnM6IFJlYWN0LkZDPFJlY29yZGluZ0ZpbHRlcnNQcm9wcz4gPSAoe1xuICB0YXJnZXQsXG4gIGlzQXJjaGl2ZWQsXG4gIHJlY29yZGluZ3MsXG4gIGZpbHRlcnMsXG4gIGJyZWFrcG9pbnQgPSAneGwnLFxuICB1cGRhdGVGaWx0ZXJzLFxufSkgPT4ge1xuICBjb25zdCBbZm9ybWF0dGVyLCBfXSA9IHVzZURheWpzKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2g8U3RhdGVEaXNwYXRjaD4oKTtcblxuICBjb25zdCBjdXJyZW50Q2F0ZWdvcnkgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldFJlY29yZGluZ0ZpbHRlcnMgPSBzdGF0ZS5yZWNvcmRpbmdGaWx0ZXJzLmxpc3QuZmlsdGVyKCh0YXJnZXRGaWx0ZXIpID0+IHRhcmdldEZpbHRlci50YXJnZXQgPT09IHRhcmdldCk7XG4gICAgaWYgKCF0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzLmxlbmd0aCkgcmV0dXJuICdOYW1lJzsgLy8gVGFyZ2V0IGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgcmV0dXJuIChpc0FyY2hpdmVkID8gdGFyZ2V0UmVjb3JkaW5nRmlsdGVyc1swXS5hcmNoaXZlZCA6IHRhcmdldFJlY29yZGluZ0ZpbHRlcnNbMF0uYWN0aXZlKS5zZWxlY3RlZENhdGVnb3J5O1xuICB9KTtcblxuICBjb25zdCBbaXNDYXRlZ29yeURyb3Bkb3duT3Blbiwgc2V0SXNDYXRlZ29yeURyb3Bkb3duT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25DYXRlZ29yeVRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0NhdGVnb3J5RHJvcGRvd25PcGVuKChvcGVuZWQpID0+ICFvcGVuZWQpO1xuICB9LCBbc2V0SXNDYXRlZ29yeURyb3Bkb3duT3Blbl0pO1xuXG4gIGNvbnN0IG9uQ2F0ZWdvcnlTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY2F0ZWdvcnkpID0+IHtcbiAgICAgIHNldElzQ2F0ZWdvcnlEcm9wZG93bk9wZW4oZmFsc2UpO1xuICAgICAgZGlzcGF0Y2gocmVjb3JkaW5nVXBkYXRlQ2F0ZWdvcnlJbnRlbnQodGFyZ2V0LCBjYXRlZ29yeSwgaXNBcmNoaXZlZCkpO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoLCBzZXRJc0NhdGVnb3J5RHJvcGRvd25PcGVuLCB0YXJnZXQsIGlzQXJjaGl2ZWRdXG4gICk7XG5cbiAgY29uc3Qgb25EZWxldGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY2F0ZWdvcnksIGNoaXApID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGNoaXAgPT09ICdzdHJpbmcnID8gY2hpcCA6IGNoaXAua2V5O1xuICAgICAgdXBkYXRlRmlsdGVycyh0YXJnZXQsIHsgZmlsdGVyS2V5OiBjYXRlZ29yeSwgZmlsdGVyVmFsdWU6IHZhbHVlLCBkZWxldGVkOiB0cnVlIH0pO1xuICAgIH0sXG4gICAgW3VwZGF0ZUZpbHRlcnMsIHRhcmdldF1cbiAgKTtcblxuICBjb25zdCBvbkRlbGV0ZUdyb3VwID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNoaXApID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdHlwZW9mIGNoaXAgPT09ICdzdHJpbmcnID8gY2hpcCA6IGNoaXAua2V5O1xuICAgICAgdXBkYXRlRmlsdGVycyh0YXJnZXQsIHsgZmlsdGVyS2V5OiBjYXRlZ29yeSwgZGVsZXRlZDogdHJ1ZSwgZGVsZXRlT3B0aW9uczogeyBhbGw6IHRydWUgfSB9KTtcbiAgICB9LFxuICAgIFt1cGRhdGVGaWx0ZXJzLCB0YXJnZXRdXG4gICk7XG5cbiAgY29uc3Qgb25OYW1lSW5wdXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaW5wdXROYW1lKSA9PiB1cGRhdGVGaWx0ZXJzKHRhcmdldCwgeyBmaWx0ZXJLZXk6IGN1cnJlbnRDYXRlZ29yeSwgZmlsdGVyVmFsdWU6IGlucHV0TmFtZSB9KSxcbiAgICBbdXBkYXRlRmlsdGVycywgY3VycmVudENhdGVnb3J5LCB0YXJnZXRdXG4gICk7XG5cbiAgY29uc3Qgb25MYWJlbElucHV0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGlucHV0TGFiZWwpID0+IHVwZGF0ZUZpbHRlcnModGFyZ2V0LCB7IGZpbHRlcktleTogY3VycmVudENhdGVnb3J5LCBmaWx0ZXJWYWx1ZTogaW5wdXRMYWJlbCB9KSxcbiAgICBbdXBkYXRlRmlsdGVycywgY3VycmVudENhdGVnb3J5LCB0YXJnZXRdXG4gICk7XG5cbiAgY29uc3Qgb25TdGFydGVkQmVmb3JlSW5wdXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoc2VhcmNoRGF0ZSkgPT4gdXBkYXRlRmlsdGVycyh0YXJnZXQsIHsgZmlsdGVyS2V5OiBjdXJyZW50Q2F0ZWdvcnksIGZpbHRlclZhbHVlOiBzZWFyY2hEYXRlIH0pLFxuICAgIFt1cGRhdGVGaWx0ZXJzLCBjdXJyZW50Q2F0ZWdvcnksIHRhcmdldF1cbiAgKTtcblxuICBjb25zdCBvblN0YXJ0ZWRBZnRlcklucHV0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNlYXJjaERhdGUpID0+IHVwZGF0ZUZpbHRlcnModGFyZ2V0LCB7IGZpbHRlcktleTogY3VycmVudENhdGVnb3J5LCBmaWx0ZXJWYWx1ZTogc2VhcmNoRGF0ZSB9KSxcbiAgICBbdXBkYXRlRmlsdGVycywgY3VycmVudENhdGVnb3J5LCB0YXJnZXRdXG4gICk7XG5cbiAgY29uc3Qgb25EdXJhdGlvbklucHV0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGR1cmF0aW9uKSA9PiB1cGRhdGVGaWx0ZXJzKHRhcmdldCwgeyBmaWx0ZXJLZXk6IGN1cnJlbnRDYXRlZ29yeSwgZmlsdGVyVmFsdWU6IGAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IHNgIH0pLFxuICAgIFt1cGRhdGVGaWx0ZXJzLCBjdXJyZW50Q2F0ZWdvcnksIHRhcmdldF1cbiAgKTtcblxuICBjb25zdCBvblJlY29yZGluZ1N0YXRlU2VsZWN0VG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBkZWxldGVkID0gZmlsdGVycy5TdGF0ZSAmJiBmaWx0ZXJzLlN0YXRlLmluY2x1ZGVzKHNlYXJjaFN0YXRlKTtcbiAgICAgIHVwZGF0ZUZpbHRlcnModGFyZ2V0LCB7IGZpbHRlcktleTogY3VycmVudENhdGVnb3J5LCBmaWx0ZXJWYWx1ZTogc2VhcmNoU3RhdGUsIGRlbGV0ZWQ6IGRlbGV0ZWQgfSk7XG4gICAgfSxcbiAgICBbdXBkYXRlRmlsdGVycywgY3VycmVudENhdGVnb3J5LCB0YXJnZXQsIGZpbHRlcnMuU3RhdGVdXG4gICk7XG5cbiAgY29uc3Qgb25Db250aW51b3VzRHVyYXRpb25TZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY29udCkgPT4gdXBkYXRlRmlsdGVycyh0YXJnZXQsIHsgZmlsdGVyS2V5OiBjdXJyZW50Q2F0ZWdvcnksIGZpbHRlclZhbHVlOiAnY29udGludW91cycsIGRlbGV0ZWQ6ICFjb250IH0pLFxuICAgIFt1cGRhdGVGaWx0ZXJzLCBjdXJyZW50Q2F0ZWdvcnksIHRhcmdldF1cbiAgKTtcblxuICBjb25zdCBjYXRlZ29yeURyb3Bkb3duID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcm9wZG93blxuICAgICAgICBhcmlhLWxhYmVsPXsnQ2F0ZWdvcnkgRHJvcGRvd24nfVxuICAgICAgICBwb3NpdGlvbj17RHJvcGRvd25Qb3NpdGlvbi5sZWZ0fVxuICAgICAgICB0b2dnbGU9e1xuICAgICAgICAgIDxEcm9wZG93blRvZ2dsZSBhcmlhLWxhYmVsPXtjdXJyZW50Q2F0ZWdvcnl9IG9uVG9nZ2xlPXtvbkNhdGVnb3J5VG9nZ2xlfT5cbiAgICAgICAgICAgIDxGaWx0ZXJJY29uIC8+IHtjYXRlZ29yaWVzVG9EaXNwbGF5TmFtZXNbY3VycmVudENhdGVnb3J5XX1cbiAgICAgICAgICA8L0Ryb3Bkb3duVG9nZ2xlPlxuICAgICAgICB9XG4gICAgICAgIGlzT3Blbj17aXNDYXRlZ29yeURyb3Bkb3duT3Blbn1cbiAgICAgICAgZHJvcGRvd25JdGVtcz17KCFpc0FyY2hpdmVkID8gYWxsb3dlZEFjdGl2ZVJlY29yZGluZ0ZpbHRlcnMgOiBhbGxvd2VkQXJjaGl2ZWRSZWNvcmRpbmdGaWx0ZXJzKS5tYXAoKGNhdCkgPT4gKFxuICAgICAgICAgIDxEcm9wZG93bkl0ZW0gYXJpYS1sYWJlbD17Y2F0ZWdvcmllc1RvRGlzcGxheU5hbWVzW2NhdF19IGtleT17Y2F0fSBvbkNsaWNrPXsoKSA9PiBvbkNhdGVnb3J5U2VsZWN0KGNhdCl9PlxuICAgICAgICAgICAge2NhdGVnb3JpZXNUb0Rpc3BsYXlOYW1lc1tjYXRdfVxuICAgICAgICAgIDwvRHJvcGRvd25JdGVtPlxuICAgICAgICApKX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSwgW2lzQXJjaGl2ZWQsIGlzQ2F0ZWdvcnlEcm9wZG93bk9wZW4sIGN1cnJlbnRDYXRlZ29yeSwgb25DYXRlZ29yeVRvZ2dsZSwgb25DYXRlZ29yeVNlbGVjdF0pO1xuXG4gIGNvbnN0IGZpbHRlckRyb3Bkb3duSXRlbXMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIDxOYW1lRmlsdGVyIGtleT17J25hbWUnfSByZWNvcmRpbmdzPXtyZWNvcmRpbmdzfSBvblN1Ym1pdD17b25OYW1lSW5wdXR9IGZpbHRlcmVkTmFtZXM9e2ZpbHRlcnMuTmFtZX0gLz4sXG4gICAgICA8TGFiZWxGaWx0ZXIga2V5PXsnbGFiZWwnfSByZWNvcmRpbmdzPXtyZWNvcmRpbmdzfSBvblN1Ym1pdD17b25MYWJlbElucHV0fSBmaWx0ZXJlZExhYmVscz17ZmlsdGVycy5MYWJlbH0gLz4sXG4gICAgICAuLi4oIWlzQXJjaGl2ZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICA8UmVjb3JkaW5nU3RhdGVGaWx0ZXJcbiAgICAgICAgICAgICAga2V5PXsncmVjb3JkaW5nLXN0YXRlJ31cbiAgICAgICAgICAgICAgZmlsdGVyZWRTdGF0ZXM9e2ZpbHRlcnMuU3RhdGV9XG4gICAgICAgICAgICAgIG9uU2VsZWN0VG9nZ2xlPXtvblJlY29yZGluZ1N0YXRlU2VsZWN0VG9nZ2xlfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICA8RGF0ZVRpbWVGaWx0ZXIga2V5PXsnZGF0ZXRpbWUtYmVmb3JlJ30gb25TdWJtaXQ9e29uU3RhcnRlZEJlZm9yZUlucHV0fSAvPixcbiAgICAgICAgICAgIDxEYXRlVGltZUZpbHRlciBrZXk9eydkYXRldGltZS1hZnRlcid9IG9uU3VibWl0PXtvblN0YXJ0ZWRBZnRlcklucHV0fSAvPixcbiAgICAgICAgICAgIDxEdXJhdGlvbkZpbHRlclxuICAgICAgICAgICAgICBrZXk9eydkdXJhdGlvbid9XG4gICAgICAgICAgICAgIGR1cmF0aW9ucz17ZmlsdGVycy5EdXJhdGlvblNlY29uZHN9XG4gICAgICAgICAgICAgIG9uQ29udGludW91c0R1cmF0aW9uU2VsZWN0PXtvbkNvbnRpbnVvdXNEdXJhdGlvblNlbGVjdH1cbiAgICAgICAgICAgICAgb25EdXJhdGlvbklucHV0PXtvbkR1cmF0aW9uSW5wdXR9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF0sXG4gICAgW1xuICAgICAgaXNBcmNoaXZlZCxcbiAgICAgIHJlY29yZGluZ3MsXG4gICAgICBmaWx0ZXJzLk5hbWUsXG4gICAgICBmaWx0ZXJzLkxhYmVsLFxuICAgICAgZmlsdGVycy5TdGF0ZSxcbiAgICAgIGZpbHRlcnMuRHVyYXRpb25TZWNvbmRzLFxuICAgICAgb25OYW1lSW5wdXQsXG4gICAgICBvbkxhYmVsSW5wdXQsXG4gICAgICBvblJlY29yZGluZ1N0YXRlU2VsZWN0VG9nZ2xlLFxuICAgICAgb25TdGFydGVkQWZ0ZXJJbnB1dCxcbiAgICAgIG9uU3RhcnRlZEJlZm9yZUlucHV0LFxuICAgICAgb25Db250aW51b3VzRHVyYXRpb25TZWxlY3QsXG4gICAgICBvbkR1cmF0aW9uSW5wdXQsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFRvb2xiYXJUb2dnbGVHcm91cCB0b2dnbGVJY29uPXs8RmlsdGVySWNvbiAvPn0gYnJlYWtwb2ludD17YnJlYWtwb2ludH0+XG4gICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgPFRvb2xiYXJJdGVtIHN0eWxlPXt7IGFsaWduU2VsZjogJ3N0YXJ0JyB9fSBrZXk9eydjYXRlZ29yeS1zZWxlY3QnfT5cbiAgICAgICAgICB7Y2F0ZWdvcnlEcm9wZG93bn1cbiAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAge09iamVjdC5rZXlzKGZpbHRlcnMpLm1hcCgoZmlsdGVyS2V5LCBpKSA9PiAoXG4gICAgICAgICAgPFRvb2xiYXJGaWx0ZXJcbiAgICAgICAgICAgIGtleT17YCR7ZmlsdGVyS2V5fS1maWx0ZXJgfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVjb3JkaW5nLWZpbHRlcl9fdG9vbGJhci1maWx0ZXJcIlxuICAgICAgICAgICAgY2hpcHM9e1xuICAgICAgICAgICAgICBjYXRlZ29yeUlzRGF0ZShmaWx0ZXJLZXkpXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXJzW2ZpbHRlcktleV0ubWFwKChJU09TdHI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IGZvcm1hdHRlcihJU09TdHIpLmZvcm1hdCgnTCBMVFMgeicpLFxuICAgICAgICAgICAgICAgICAgICAgIGtleTogSVNPU3RyLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGZpbHRlcnNbZmlsdGVyS2V5XS5tYXAoKHYpID0+ICh7IG5vZGU6IHYsIGtleTogdiB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZUNoaXA9e29uRGVsZXRlfVxuICAgICAgICAgICAgZGVsZXRlQ2hpcEdyb3VwPXtvbkRlbGV0ZUdyb3VwfVxuICAgICAgICAgICAgY2F0ZWdvcnlOYW1lPXt7XG4gICAgICAgICAgICAgIGtleTogZmlsdGVyS2V5LFxuICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yaWVzVG9EaXNwbGF5TmFtZXNbZmlsdGVyS2V5XSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzaG93VG9vbGJhckl0ZW09e2ZpbHRlcktleSA9PT0gY3VycmVudENhdGVnb3J5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmaWx0ZXJEcm9wZG93bkl0ZW1zW2ldfVxuICAgICAgICAgIDwvVG9vbGJhckZpbHRlcj5cbiAgICAgICAgKSl9XG4gICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICA8L1Rvb2xiYXJUb2dnbGVHcm91cD5cbiAgKTtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5leHBvcnQgY29uc3QgZmlsdGVyUmVjb3JkaW5ncyA9IChyZWNvcmRpbmdzOiBhbnlbXSwgZmlsdGVyczogUmVjb3JkaW5nRmlsdGVyc0NhdGVnb3JpZXMpID0+IHtcbiAgaWYgKCFyZWNvcmRpbmdzIHx8ICFyZWNvcmRpbmdzLmxlbmd0aCkge1xuICAgIHJldHVybiByZWNvcmRpbmdzO1xuICB9XG5cbiAgbGV0IGZpbHRlcmVkID0gcmVjb3JkaW5ncztcblxuICBpZiAoZmlsdGVycy5OYW1lLmxlbmd0aCkge1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyKSA9PiBmaWx0ZXJzLk5hbWUuaW5jbHVkZXMoci5uYW1lKSk7XG4gIH1cbiAgaWYgKCEhZmlsdGVycy5TdGF0ZSAmJiAhIWZpbHRlcnMuU3RhdGUubGVuZ3RoKSB7XG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKHIpID0+ICEhZmlsdGVycy5TdGF0ZSAmJiBmaWx0ZXJzLlN0YXRlLmluY2x1ZGVzKHIuc3RhdGUpKTtcbiAgfVxuICBpZiAoISFmaWx0ZXJzLkR1cmF0aW9uU2Vjb25kcyAmJiAhIWZpbHRlcnMuRHVyYXRpb25TZWNvbmRzLmxlbmd0aCkge1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyKSA9PiB7XG4gICAgICBpZiAoIWZpbHRlcnMuRHVyYXRpb25TZWNvbmRzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZpbHRlcnMuRHVyYXRpb25TZWNvbmRzLmluY2x1ZGVzKGAke3IuZHVyYXRpb24gLyAxMDAwfSBzYCkgfHxcbiAgICAgICAgKGZpbHRlcnMuRHVyYXRpb25TZWNvbmRzLmluY2x1ZGVzKCdjb250aW51b3VzJykgJiYgci5jb250aW51b3VzKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoISFmaWx0ZXJzLlN0YXJ0ZWRCZWZvcmVEYXRlICYmICEhZmlsdGVycy5TdGFydGVkQmVmb3JlRGF0ZS5sZW5ndGgpIHtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocmVjKSA9PiB7XG4gICAgICBpZiAoIWZpbHRlcnMuU3RhcnRlZEJlZm9yZURhdGUpIHJldHVybiB0cnVlO1xuXG4gICAgICByZXR1cm4gZmlsdGVycy5TdGFydGVkQmVmb3JlRGF0ZS5maWx0ZXIoKHN0YXJ0ZWRCZWZvcmUpID0+IHtcbiAgICAgICAgY29uc3QgYmVmb3JlRGF0ZSA9IGRheWpzKHN0YXJ0ZWRCZWZvcmUpO1xuICAgICAgICByZXR1cm4gZGF5anMocmVjLnN0YXJ0VGltZSkuaXNCZWZvcmUoYmVmb3JlRGF0ZSk7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCEhZmlsdGVycy5TdGFydGVkQWZ0ZXJEYXRlICYmICEhZmlsdGVycy5TdGFydGVkQWZ0ZXJEYXRlLmxlbmd0aCkge1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyZWMpID0+IHtcbiAgICAgIGlmICghZmlsdGVycy5TdGFydGVkQWZ0ZXJEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmaWx0ZXJzLlN0YXJ0ZWRBZnRlckRhdGUuZmlsdGVyKChzdGFydGVkQWZ0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgYWZ0ZXJEYXRlID0gZGF5anMoc3RhcnRlZEFmdGVyKTtcbiAgICAgICAgcmV0dXJuIGRheWpzKHJlYy5zdGFydFRpbWUpLmlzU2FtZShhZnRlckRhdGUpIHx8IGRheWpzKHJlYy5zdGFydFRpbWUpLmlzQWZ0ZXIoYWZ0ZXJEYXRlKTtcbiAgICAgIH0pLmxlbmd0aDtcbiAgICB9KTtcbiAgfVxuICBpZiAoZmlsdGVycy5MYWJlbC5sZW5ndGgpIHtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihcbiAgICAgIChyKSA9PiBPYmplY3QuZW50cmllcyhyLm1ldGFkYXRhLmxhYmVscykuZmlsdGVyKChbaywgdl0pID0+IGZpbHRlcnMuTGFiZWwuaW5jbHVkZXMoYCR7a306JHt2fWApKS5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgdXBsb2FkQXNUYXJnZXQgfSBmcm9tICdAYXBwL0FyY2hpdmVzL0FyY2hpdmVzJztcbmltcG9ydCB7IExhYmVsQ2VsbCB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvTGFiZWxDZWxsJztcbmltcG9ydCB7IExvYWRpbmdQcm9wc1R5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9ncmVzc0luZGljYXRvcic7XG5pbXBvcnQge1xuICBBY3RpdmVSZWNvcmRpbmcsXG4gIEFyY2hpdmVkUmVjb3JkaW5nLFxuICBSZWNvcmRpbmcsXG4gIFJlY29yZGluZ0RpcmVjdG9yeSxcbiAgVVBMT0FEU19TVUJESVJFQ1RPUlksXG59IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgTk9fVEFSR0VUIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBoYXNoQ29kZSwgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uLCBTcGxpdCwgU3BsaXRJdGVtLCBTdGFjaywgU3RhY2tJdGVtLCBUZXh0LCBUb29sdGlwLCBWYWxpZGF0ZWRPcHRpb25zIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBIZWxwSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGNvbmNhdE1hcCwgZmlsdGVyLCBmaXJzdCwgZm9ya0pvaW4sIG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluY2x1ZGVzTGFiZWwsIHBhcnNlTGFiZWxzLCBSZWNvcmRpbmdMYWJlbCB9IGZyb20gJy4vUmVjb3JkaW5nTGFiZWwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nTGFiZWxGaWVsZHMgfSBmcm9tICcuL1JlY29yZGluZ0xhYmVsRmllbGRzJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrRWRpdExhYmVsc1Byb3BzIHtcbiAgaXNUYXJnZXRSZWNvcmRpbmc6IGJvb2xlYW47XG4gIGlzVXBsb2Fkc1RhYmxlPzogYm9vbGVhbjtcbiAgY2hlY2tlZEluZGljZXM6IG51bWJlcltdO1xuICBkaXJlY3Rvcnk/OiBSZWNvcmRpbmdEaXJlY3Rvcnk7XG4gIGRpcmVjdG9yeVJlY29yZGluZ3M/OiBBcmNoaXZlZFJlY29yZGluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgQnVsa0VkaXRMYWJlbHM6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PEJ1bGtFZGl0TGFiZWxzUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW3JlY29yZGluZ3MsIHNldFJlY29yZGluZ3NdID0gUmVhY3QudXNlU3RhdGUoW10gYXMgUmVjb3JkaW5nW10pO1xuICBjb25zdCBbZWRpdGluZywgc2V0RWRpdGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjb21tb25MYWJlbHMsIHNldENvbW1vbkxhYmVsc10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBSZWNvcmRpbmdMYWJlbFtdKTtcbiAgY29uc3QgW3NhdmVkQ29tbW9uTGFiZWxzLCBzZXRTYXZlZENvbW1vbkxhYmVsc10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBSZWNvcmRpbmdMYWJlbFtdKTtcbiAgY29uc3QgW3ZhbGlkLCBzZXRWYWxpZF0gPSBSZWFjdC51c2VTdGF0ZShWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcblxuICBjb25zdCBnZXRJZHhGcm9tUmVjb3JkaW5nID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHI6IFJlY29yZGluZyk6IG51bWJlciA9PiAocHJvcHMuaXNUYXJnZXRSZWNvcmRpbmcgPyAociBhcyBBY3RpdmVSZWNvcmRpbmcpLmlkIDogaGFzaENvZGUoci5uYW1lKSksXG4gICAgW3Byb3BzLmlzVGFyZ2V0UmVjb3JkaW5nXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVBvc3RVcGRhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RWRpdGluZyhmYWxzZSk7XG4gICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gIH0sIFtzZXRMb2FkaW5nLCBzZXRFZGl0aW5nXSk7XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlTGFiZWxzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgY29uc3QgdGFza3M6IE9ic2VydmFibGU8dW5rbm93bj5bXSA9IFtdO1xuICAgIGNvbnN0IHRvRGVsZXRlID0gc2F2ZWRDb21tb25MYWJlbHMuZmlsdGVyKChsYWJlbCkgPT4gIWluY2x1ZGVzTGFiZWwoY29tbW9uTGFiZWxzLCBsYWJlbCkpO1xuXG4gICAgcmVjb3JkaW5ncy5mb3JFYWNoKChyOiBSZWNvcmRpbmcpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGdldElkeEZyb21SZWNvcmRpbmcocik7XG4gICAgICBpZiAocHJvcHMuY2hlY2tlZEluZGljZXMuaW5jbHVkZXMoaWR4KSkge1xuICAgICAgICBsZXQgdXBkYXRlZExhYmVscyA9IFsuLi5wYXJzZUxhYmVscyhyLm1ldGFkYXRhLmxhYmVscyksIC4uLmNvbW1vbkxhYmVsc107XG4gICAgICAgIHVwZGF0ZWRMYWJlbHMgPSB1cGRhdGVkTGFiZWxzLmZpbHRlcigobGFiZWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gIWluY2x1ZGVzTGFiZWwodG9EZWxldGUsIGxhYmVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcm9wcy5kaXJlY3RvcnkpIHtcbiAgICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY29udGV4dC5hcGkucG9zdFJlY29yZGluZ01ldGFkYXRhRnJvbVBhdGgocHJvcHMuZGlyZWN0b3J5Lmp2bUlkLCByLm5hbWUsIHVwZGF0ZWRMYWJlbHMpLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pc1RhcmdldFJlY29yZGluZykge1xuICAgICAgICAgIHRhc2tzLnB1c2goY29udGV4dC5hcGkucG9zdFRhcmdldFJlY29yZGluZ01ldGFkYXRhKHIubmFtZSwgdXBkYXRlZExhYmVscykucGlwZShmaXJzdCgpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuaXNVcGxvYWRzVGFibGUpIHtcbiAgICAgICAgICB0YXNrcy5wdXNoKGNvbnRleHQuYXBpLnBvc3RVcGxvYWRlZFJlY29yZGluZ01ldGFkYXRhKHIubmFtZSwgdXBkYXRlZExhYmVscykucGlwZShmaXJzdCgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFza3MucHVzaChjb250ZXh0LmFwaS5wb3N0UmVjb3JkaW5nTWV0YWRhdGEoci5uYW1lLCB1cGRhdGVkTGFiZWxzKS5waXBlKGZpcnN0KCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGZvcmtKb2luKHRhc2tzKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBoYW5kbGVQb3N0VXBkYXRlLFxuICAgICAgICBlcnJvcjogaGFuZGxlUG9zdFVwZGF0ZSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW1xuICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICBjb250ZXh0LmFwaSxcbiAgICBnZXRJZHhGcm9tUmVjb3JkaW5nLFxuICAgIGhhbmRsZVBvc3RVcGRhdGUsXG4gICAgY29tbW9uTGFiZWxzLFxuICAgIHNhdmVkQ29tbW9uTGFiZWxzLFxuICAgIHJlY29yZGluZ3MsXG4gICAgcHJvcHMuY2hlY2tlZEluZGljZXMsXG4gICAgcHJvcHMuaXNUYXJnZXRSZWNvcmRpbmcsXG4gICAgcHJvcHMuaXNVcGxvYWRzVGFibGUsXG4gICAgcHJvcHMuZGlyZWN0b3J5LFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVFZGl0TGFiZWxzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEVkaXRpbmcodHJ1ZSk7XG4gIH0sIFtzZXRFZGl0aW5nXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEVkaXRpbmcoZmFsc2UpO1xuICAgIHNldENvbW1vbkxhYmVscyhzYXZlZENvbW1vbkxhYmVscyk7XG4gIH0sIFtzZXRFZGl0aW5nLCBzZXRDb21tb25MYWJlbHMsIHNhdmVkQ29tbW9uTGFiZWxzXSk7XG5cbiAgY29uc3QgdXBkYXRlQ29tbW9uTGFiZWxzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNldExhYmVsczogKGw6IFJlY29yZGluZ0xhYmVsW10pID0+IHZvaWQpID0+IHtcbiAgICAgIGNvbnN0IGFsbFJlY29yZGluZ0xhYmVscyA9IFtdIGFzIFJlY29yZGluZ0xhYmVsW11bXTtcblxuICAgICAgcmVjb3JkaW5ncy5mb3JFYWNoKChyOiBSZWNvcmRpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaWR4ID0gZ2V0SWR4RnJvbVJlY29yZGluZyhyKTtcbiAgICAgICAgaWYgKHByb3BzLmNoZWNrZWRJbmRpY2VzLmluY2x1ZGVzKGlkeCkpIHtcbiAgICAgICAgICBhbGxSZWNvcmRpbmdMYWJlbHMucHVzaChwYXJzZUxhYmVscyhyLm1ldGFkYXRhLmxhYmVscykpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXBkYXRlZENvbW1vbkxhYmVscyA9XG4gICAgICAgIGFsbFJlY29yZGluZ0xhYmVscy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBhbGxSZWNvcmRpbmdMYWJlbHMucmVkdWNlKFxuICAgICAgICAgICAgICAocHJldiwgY3VycikgPT4gcHJldi5maWx0ZXIoKGxhYmVsKSA9PiBpbmNsdWRlc0xhYmVsKGN1cnIsIGxhYmVsKSksXG4gICAgICAgICAgICAgIGFsbFJlY29yZGluZ0xhYmVsc1swXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogW107XG5cbiAgICAgIHNldExhYmVscyh1cGRhdGVkQ29tbW9uTGFiZWxzKTtcbiAgICB9LFxuICAgIFtyZWNvcmRpbmdzLCBnZXRJZHhGcm9tUmVjb3JkaW5nLCBwcm9wcy5jaGVja2VkSW5kaWNlc11cbiAgKTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gIGNvbnN0IHJlZnJlc2hSZWNvcmRpbmdMaXN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFJlY29yZGluZ1tdPjtcbiAgICBpZiAocHJvcHMuZGlyZWN0b3J5UmVjb3JkaW5ncykge1xuICAgICAgb2JzZXJ2YWJsZSA9IG9mKHByb3BzLmRpcmVjdG9yeVJlY29yZGluZ3MpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaXNUYXJnZXRSZWNvcmRpbmcpIHtcbiAgICAgIG9ic2VydmFibGUgPSBjb250ZXh0LnRhcmdldC50YXJnZXQoKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0ICE9PSBOT19UQVJHRVQpLFxuICAgICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgICBjb250ZXh0LmFwaS5kb0dldDxBY3RpdmVSZWNvcmRpbmdbXT4oYHRhcmdldHMvJHtlbmNvZGVVUklDb21wb25lbnQodGFyZ2V0LmNvbm5lY3RVcmwpfS9yZWNvcmRpbmdzYClcbiAgICAgICAgKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JzZXJ2YWJsZSA9IHByb3BzLmlzVXBsb2Fkc1RhYmxlXG4gICAgICAgID8gY29udGV4dC5hcGlcbiAgICAgICAgICAgIC5ncmFwaHFsPGFueT4oXG4gICAgICAgICAgICAgIGBxdWVyeSBHZXRVcGxvYWRlZFJlY29yZGluZ3MoJGZpbHRlcjogQXJjaGl2ZWRSZWNvcmRpbmdGaWx0ZXJJbnB1dCkge1xuICAgICAgICAgICAgICAgIGFyY2hpdmVkUmVjb3JkaW5ncyhmaWx0ZXI6ICRmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGEge1xuICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsXG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydFVybFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICB7IGZpbHRlcjogeyBzb3VyY2VUYXJnZXQ6IFVQTE9BRFNfU1VCRElSRUNUT1JZIH0gfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgodikgPT4gdi5kYXRhLmFyY2hpdmVkUmVjb3JkaW5ncy5kYXRhIGFzIEFyY2hpdmVkUmVjb3JkaW5nW10pLFxuICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICApXG4gICAgICAgIDogY29udGV4dC50YXJnZXQudGFyZ2V0KCkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigodGFyZ2V0KSA9PiB0YXJnZXQgIT09IE5PX1RBUkdFVCksXG4gICAgICAgICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT5cbiAgICAgICAgICAgICAgY29udGV4dC5hcGkuZ3JhcGhxbDxhbnk+KFxuICAgICAgICAgICAgICAgIGBxdWVyeSBBY3RpdmVSZWNvcmRpbmdzRm9yVGFyZ2V0KCRjb25uZWN0VXJsOiBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyhmaWx0ZXI6IHsgbmFtZTogJGNvbm5lY3RVcmwgfSkge1xuICAgICAgICAgICAgICAgICAgcmVjb3JkaW5ncyB7XG4gICAgICAgICAgICAgICAgICAgIGFyY2hpdmVkIHtcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICB7IGNvbm5lY3RVcmw6IHRhcmdldC5jb25uZWN0VXJsIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1hcCgodikgPT4gdi5kYXRhLnRhcmdldE5vZGVzWzBdLnJlY29yZGluZ3MuYXJjaGl2ZWQuZGF0YSBhcyBBcmNoaXZlZFJlY29yZGluZ1tdKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFN1YnNjcmlwdGlvbihvYnNlcnZhYmxlLnN1YnNjcmliZSgodmFsdWUpID0+IHNldFJlY29yZGluZ3ModmFsdWUpKSk7XG4gIH0sIFtcbiAgICBhZGRTdWJzY3JpcHRpb24sXG4gICAgcHJvcHMuaXNUYXJnZXRSZWNvcmRpbmcsXG4gICAgcHJvcHMuaXNVcGxvYWRzVGFibGUsXG4gICAgcHJvcHMuZGlyZWN0b3J5UmVjb3JkaW5ncyxcbiAgICBjb250ZXh0LnRhcmdldCxcbiAgICBjb250ZXh0LmFwaSxcbiAgICBzZXRSZWNvcmRpbmdzLFxuICBdKTtcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbiAgY29uc3Qgc2F2ZUJ1dHRvbkxvYWRpbmdQcm9wcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIHNwaW5uZXJBcmlhVmFsdWVUZXh0OiAnU2F2aW5nJyxcbiAgICAgICAgc3Bpbm5lckFyaWFMYWJlbDogJ3NhdmluZy1yZWNvcmRpbmctbGFiZWxzJyxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nLFxuICAgICAgfSBhcyBMb2FkaW5nUHJvcHNUeXBlKSxcbiAgICBbbG9hZGluZ11cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250ZXh0LnRhcmdldC50YXJnZXQoKS5zdWJzY3JpYmUocmVmcmVzaFJlY29yZGluZ0xpc3QpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC50YXJnZXQsIHJlZnJlc2hSZWNvcmRpbmdMaXN0XSk7XG5cbiAgLy8gRGVwZW5kcyBvbmx5IG9uIFJlY29yZGluZ01ldGFkYXRhVXBkYXRlZCBub3RpZmljYXRpb25zXG4gIC8vIHNpbmNlIHVwZGF0ZXMgb24gbGlzdCBvZiByZWNvcmRpbmdzIHdpbGwgbW91bnQgYSBjb21wbGV0ZWx5IG5ldyBCdWxrRWRpdExhYmVscy5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgcHJvcHMuaXNVcGxvYWRzVGFibGUgPyBvZih1cGxvYWRBc1RhcmdldCkgOiBjb250ZXh0LnRhcmdldC50YXJnZXQoKSxcbiAgICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJlY29yZGluZ01ldGFkYXRhVXBkYXRlZCksXG4gICAgICBdKS5zdWJzY3JpYmUoKHBhcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBwYXJ0c1swXTtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBwYXJ0c1sxXTtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQuY29ubmVjdFVybCAhPSBldmVudC5tZXNzYWdlLnRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRSZWNvcmRpbmdzKChvbGQpID0+XG4gICAgICAgICAgb2xkLm1hcCgobykgPT5cbiAgICAgICAgICAgIG8ubmFtZSA9PSBldmVudC5tZXNzYWdlLnJlY29yZGluZ05hbWUgPyB7IC4uLm8sIG1ldGFkYXRhOiB7IGxhYmVsczogZXZlbnQubWVzc2FnZS5tZXRhZGF0YS5sYWJlbHMgfSB9IDogb1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC50YXJnZXQsIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgc2V0UmVjb3JkaW5ncywgcHJvcHMuaXNVcGxvYWRzVGFibGVdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHVwZGF0ZUNvbW1vbkxhYmVscyhzZXRDb21tb25MYWJlbHMpO1xuICAgIHVwZGF0ZUNvbW1vbkxhYmVscyhzZXRTYXZlZENvbW1vbkxhYmVscyk7XG5cbiAgICBpZiAoIXJlY29yZGluZ3MubGVuZ3RoICYmIGVkaXRpbmcpIHtcbiAgICAgIHNldEVkaXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW2VkaXRpbmcsIHJlY29yZGluZ3MsIHNldENvbW1vbkxhYmVscywgc2V0U2F2ZWRDb21tb25MYWJlbHMsIHVwZGF0ZUNvbW1vbkxhYmVscywgc2V0RWRpdGluZ10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwcm9wcy5jaGVja2VkSW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgIHNldEVkaXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNoZWNrZWRJbmRpY2VzLCBzZXRFZGl0aW5nXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0YWNrIGhhc0d1dHRlcj5cbiAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICA8U3BsaXQgaGFzR3V0dGVyPlxuICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgPFRleHQ+RWRpdCBSZWNvcmRpbmcgTGFiZWxzPC9UZXh0PlxuICAgICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgICA8U3BsaXRJdGVtPlxuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9e1xuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgTGFiZWxzIHByZXNlbnQgb24gYWxsIHNlbGVjdGVkIHJlY29yZGluZ3Mgd2lsbCBhcHBlYXIgaGVyZS4gRWRpdGluZyB0aGUgbGFiZWxzIHdpbGwgYWZmZWN0IEFMTFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCByZWNvcmRpbmdzLlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEhlbHBJY29uIG5vVmVydGljYWxBbGlnbiAvPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgICA8L1NwbGl0PlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICA8TGFiZWxDZWxsIHRhcmdldD1cIlwiIGxhYmVscz17c2F2ZWRDb21tb25MYWJlbHN9IC8+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgIHtlZGl0aW5nID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFJlY29yZGluZ0xhYmVsRmllbGRzXG4gICAgICAgICAgICAgICAgbGFiZWxzPXtjb21tb25MYWJlbHN9XG4gICAgICAgICAgICAgICAgc2V0TGFiZWxzPXtzZXRDb21tb25MYWJlbHN9XG4gICAgICAgICAgICAgICAgc2V0VmFsaWQ9e3NldFZhbGlkfVxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxTcGxpdCBoYXNHdXR0ZXI+XG4gICAgICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVVcGRhdGVMYWJlbHN9XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3ZhbGlkICE9IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyB8fCBsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICB7Li4uc2F2ZUJ1dHRvbkxvYWRpbmdQcm9wc31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2xvYWRpbmcgPyAnU2F2aW5nJyA6ICdTYXZlJ31cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgICAgIDxTcGxpdEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXtoYW5kbGVDYW5jZWx9IGlzRGlzYWJsZWQ9e2xvYWRpbmd9PlxuICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgICA8L1NwbGl0PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAga2V5PVwiZWRpdCBsYWJlbHNcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWRpdCBMYWJlbHNcIlxuICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRWRpdExhYmVsc31cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17IXByb3BzLmNoZWNrZWRJbmRpY2VzLmxlbmd0aH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICA8L1N0YWNrPlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBCdWxrRWRpdExhYmVscyB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvQnVsa0VkaXRMYWJlbHMnO1xuaW1wb3J0IHsgQXJjaGl2ZWRSZWNvcmRpbmcsIFJlY29yZGluZ0RpcmVjdG9yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERyYXdlckFjdGlvbnMsXG4gIERyYXdlckNsb3NlQnV0dG9uLFxuICBEcmF3ZXJIZWFkLFxuICBEcmF3ZXJQYW5lbEJvZHksXG4gIERyYXdlclBhbmVsQ29udGVudCxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0xhYmVsc1BhbmVsUHJvcHMge1xuICBzZXRTaG93UGFuZWw6IChzaG93UGFuZWw6IFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+KSA9PiB2b2lkO1xuICBpc1RhcmdldFJlY29yZGluZzogYm9vbGVhbjtcbiAgaXNVcGxvYWRzVGFibGU/OiBib29sZWFuO1xuICBjaGVja2VkSW5kaWNlczogbnVtYmVyW107XG4gIGRpcmVjdG9yeT86IFJlY29yZGluZ0RpcmVjdG9yeTtcbiAgZGlyZWN0b3J5UmVjb3JkaW5ncz86IEFyY2hpdmVkUmVjb3JkaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBSZWNvcmRpbmdMYWJlbHNQYW5lbDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVjb3JkaW5nTGFiZWxzUGFuZWxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8RHJhd2VyUGFuZWxDb250ZW50IGlzUmVzaXphYmxlPlxuICAgICAgPERyYXdlckhlYWQ+XG4gICAgICAgIDxEcmF3ZXJBY3Rpb25zPlxuICAgICAgICAgIDxEcmF3ZXJDbG9zZUJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcHJvcHMuc2V0U2hvd1BhbmVsKGZhbHNlKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaGlkZS10YWJsZS1hY3Rpb25zLXBhbmVsXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJoaWRlIHRhYmxlIGFjdGlvbnMgcGFuZWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRHJhd2VyQWN0aW9ucz5cbiAgICAgIDwvRHJhd2VySGVhZD5cbiAgICAgIDxEcmF3ZXJQYW5lbEJvZHk+XG4gICAgICAgIDxCdWxrRWRpdExhYmVsc1xuICAgICAgICAgIGlzVGFyZ2V0UmVjb3JkaW5nPXtwcm9wcy5pc1RhcmdldFJlY29yZGluZ31cbiAgICAgICAgICBjaGVja2VkSW5kaWNlcz17cHJvcHMuY2hlY2tlZEluZGljZXN9XG4gICAgICAgICAgaXNVcGxvYWRzVGFibGU9e3Byb3BzLmlzVXBsb2Fkc1RhYmxlfVxuICAgICAgICAgIGRpcmVjdG9yeT17cHJvcHMuZGlyZWN0b3J5fVxuICAgICAgICAgIGRpcmVjdG9yeVJlY29yZGluZ3M9e3Byb3BzLmRpcmVjdG9yeVJlY29yZGluZ3N9XG4gICAgICAgIC8+XG4gICAgICA8L0RyYXdlclBhbmVsQm9keT5cbiAgICA8L0RyYXdlclBhbmVsQ29udGVudD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEVycm9yVmlldywgaXNBdXRoRmFpbCB9IGZyb20gJ0BhcHAvRXJyb3JWaWV3L0Vycm9yVmlldyc7XG5pbXBvcnQgeyBMb2FkaW5nVmlldyB9IGZyb20gJ0BhcHAvTG9hZGluZ1ZpZXcvTG9hZGluZ1ZpZXcnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBUaXRsZSxcbiAgRW1wdHlTdGF0ZSxcbiAgRW1wdHlTdGF0ZUljb24sXG4gIEVtcHR5U3RhdGVCb2R5LFxuICBCdXR0b24sXG4gIEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zLFxuICBCdWxsc2V5ZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgVGFibGVDb21wb3NhYmxlLFxuICBUaGVhZCxcbiAgVHIsXG4gIFRoLFxuICBPdXRlclNjcm9sbENvbnRhaW5lcixcbiAgSW5uZXJTY3JvbGxDb250YWluZXIsXG4gIFRoUHJvcHMsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5Db25maWcge1xuICBjb2x1bW5zOiB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIH1bXTtcbiAgb25Tb3J0OiAoY29sdW1uSW5kZXg6IG51bWJlcikgPT4gVGhQcm9wc1snc29ydCddO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ3NUYWJsZVByb3BzIHtcbiAgdG9vbGJhcjogUmVhY3QuUmVhY3RFbGVtZW50O1xuICB0YWJsZUNvbHVtbnM6IENvbHVtbkNvbmZpZztcbiAgdGFibGVUaXRsZTogc3RyaW5nO1xuICB0YWJsZUZvb3Rlcj86IHN0cmluZyB8IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaXNFbXB0eTogYm9vbGVhbjtcbiAgaXNFbXB0eUZpbHRlclJlc3VsdD86IGJvb2xlYW47XG4gIGlzSGVhZGVyQ2hlY2tlZDogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBpc05lc3RlZFRhYmxlOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgb25IZWFkZXJDaGVjazogKGV2ZW50LCBjaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuICBjbGVhckZpbHRlcnM/OiAoZmlsdGVyVHlwZSkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlY29yZGluZ3NUYWJsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVjb3JkaW5nc1RhYmxlUHJvcHM+ID0gKHtcbiAgdG9vbGJhcixcbiAgdGFibGVDb2x1bW5zLFxuICB0YWJsZVRpdGxlLFxuICB0YWJsZUZvb3RlcixcbiAgaXNFbXB0eSxcbiAgaXNFbXB0eUZpbHRlclJlc3VsdCxcbiAgaXNIZWFkZXJDaGVja2VkLFxuICBpc0xvYWRpbmcsXG4gIGlzTmVzdGVkVGFibGUsXG4gIGVycm9yTWVzc2FnZSxcbiAgb25IZWFkZXJDaGVjayxcbiAgY2xlYXJGaWx0ZXJzLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBsZXQgdmlldzogSlNYLkVsZW1lbnQ7XG5cbiAgY29uc3QgYXV0aFJldHJ5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnRleHQudGFyZ2V0LnNldEF1dGhSZXRyeSgpO1xuICB9LCBbY29udGV4dC50YXJnZXRdKTtcblxuICBjb25zdCBpc0Vycm9yID0gUmVhY3QudXNlTWVtbygoKSA9PiBlcnJvck1lc3NhZ2UgIT0gJycsIFtlcnJvck1lc3NhZ2VdKTtcblxuICBpZiAoaXNFcnJvcikge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8RXJyb3JWaWV3XG4gICAgICAgICAgdGl0bGU9eydFcnJvciByZXRyaWV2aW5nIHJlY29yZGluZ3MnfVxuICAgICAgICAgIG1lc3NhZ2U9e2Vycm9yTWVzc2FnZX1cbiAgICAgICAgICByZXRyeT17aXNBdXRoRmFpbChlcnJvck1lc3NhZ2UpID8gYXV0aFJldHJ5IDogdW5kZWZpbmVkfVxuICAgICAgICAvPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICB2aWV3ID0gPExvYWRpbmdWaWV3IC8+O1xuICB9IGVsc2UgaWYgKGlzRW1wdHkpIHtcbiAgICB2aWV3ID0gKFxuICAgICAgPEJ1bGxzZXllPlxuICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgIE5vIHt0YWJsZVRpdGxlfVxuICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgIDwvQnVsbHNleWU+XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc0VtcHR5RmlsdGVyUmVzdWx0KSB7XG4gICAgdmlldyA9IChcbiAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgICAgPEVtcHR5U3RhdGVJY29uIGljb249e1NlYXJjaEljb259IC8+XG4gICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImg0XCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgICBObyB7dGFibGVUaXRsZX0gZm91bmRcbiAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICAgIDxFbXB0eVN0YXRlQm9keT5cbiAgICAgICAgICAgIE5vIHJlc3VsdHMgbWF0Y2ggdGhpcyBmaWx0ZXIgY3JpdGVyaWEuIFJlbW92ZSBhbGwgZmlsdGVycyBvciBjbGVhciBhbGwgZmlsdGVycyB0byBzaG93IHJlc3VsdHMuXG4gICAgICAgICAgPC9FbXB0eVN0YXRlQm9keT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZVNlY29uZGFyeUFjdGlvbnM+XG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17KCkgPT4gY2xlYXJGaWx0ZXJzICYmIGNsZWFyRmlsdGVycyhudWxsKX0+XG4gICAgICAgICAgICAgIENsZWFyIGFsbCBmaWx0ZXJzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0VtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICA8L0J1bGxzZXllPlxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdmlldyA9IChcbiAgICAgIDw+XG4gICAgICAgIDxUYWJsZUNvbXBvc2FibGVcbiAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgaXNTdGlja3lIZWFkZXJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0YWJsZVRpdGxlfVxuICAgICAgICAgIHZhcmlhbnQ9e2lzTmVzdGVkVGFibGUgPyAnY29tcGFjdCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiA5OSB9fSAvLyB6LWluZGV4IG9mIGZpbHRlcnMgU2VsZWN0IGRyb3Bkb3duIGlzIDEwMFxuICAgICAgICA+XG4gICAgICAgICAgPFRoZWFkPlxuICAgICAgICAgICAgPFRyPlxuICAgICAgICAgICAgICA8VGhcbiAgICAgICAgICAgICAgICBrZXk9XCJ0YWJsZS1oZWFkZXItY2hlY2stYWxsXCJcbiAgICAgICAgICAgICAgICBzZWxlY3Q9e3tcbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBvbkhlYWRlckNoZWNrLFxuICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXNIZWFkZXJDaGVja2VkLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxUaCBrZXk9XCJ0YWJsZS1oZWFkZXItZXhwYW5kXCIgLz5cbiAgICAgICAgICAgICAge3RhYmxlQ29sdW1ucy5jb2x1bW5zLm1hcCgoeyB0aXRsZSwgc29ydGFibGUgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8VGgga2V5PXtgdGFibGUtaGVhZGVyLSR7dGl0bGV9YH0gc29ydD17c29ydGFibGUgPyB0YWJsZUNvbHVtbnMub25Tb3J0KGluZGV4KSA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDxUaCBrZXk9XCJ0YWJsZS1oZWFkZXItYWN0aW9uc1wiIC8+XG4gICAgICAgICAgICA8L1RyPlxuICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1RhYmxlQ29tcG9zYWJsZT5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8T3V0ZXJTY3JvbGxDb250YWluZXIgY2xhc3NOYW1lPVwicmVjb3JkaW5nLXRhYmxlLW91dGVyLWNvbnRhaW5lclwiPlxuICAgICAgICB7aXNFcnJvciA/IG51bGwgOiB0b29sYmFyfVxuICAgICAgICA8SW5uZXJTY3JvbGxDb250YWluZXIgY2xhc3NOYW1lPVwicmVjb3JkaW5nLXRhYmxlLS1pbm5lci1jb250YWluZXJcIj57dmlld308L0lubmVyU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICB7dGFibGVGb290ZXJ9XG4gICAgICA8L091dGVyU2Nyb2xsQ29udGFpbmVyPlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgUmVjb3JkaW5nLCBpc0h0dHBFcnJvciB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzR2VuZXJhdGlvbkVycm9yIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvUmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZyYW1lUHJvcHMgZXh0ZW5kcyBSZWFjdC5IVE1MUHJvcHM8SFRNTElGcmFtZUVsZW1lbnQ+IHtcbiAgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgcmVjb3JkaW5nOiBSZWNvcmRpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBSZXBvcnRGcmFtZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UmVwb3J0RnJhbWVQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFtyZXBvcnQsIHNldFJlcG9ydF0gPSBSZWFjdC51c2VTdGF0ZSh1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyBpc0V4cGFuZGVkLCByZWNvcmRpbmcsIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwcm9wcy5pc0V4cGFuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQucmVwb3J0c1xuICAgICAgICAucmVwb3J0KHJlY29yZGluZylcbiAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogc2V0UmVwb3J0LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNHZW5lcmF0aW9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICBlcnIubWVzc2FnZURldGFpbC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoZGV0YWlsKSA9PiBzZXRSZXBvcnQoZGV0YWlsKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSHR0cEVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgc2V0UmVwb3J0KGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFJlcG9ydChKU09OLnN0cmluZ2lmeShlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQucmVwb3J0cywgcmVjb3JkaW5nLCBpc0V4cGFuZGVkLCBzZXRSZXBvcnQsIHByb3BzXSk7XG5cbiAgY29uc3Qgb25Mb2FkID0gKCkgPT4gc2V0TG9hZGVkKHRydWUpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHshbG9hZGVkICYmIDxTcGlubmVyIC8+fVxuICAgICAgPGlmcmFtZSB0aXRsZT1cIkF1dG9tYXRlZCBBbmFseXNpc1wiIHNyY0RvYz17cmVwb3J0fSB7Li4ucmVzdH0gb25Mb2FkPXtvbkxvYWR9IGhpZGRlbj17IShsb2FkZWQgJiYgaXNFeHBhbmRlZCl9IC8+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEFyY2hpdmVVcGxvYWRNb2RhbCB9IGZyb20gJ0BhcHAvQXJjaGl2ZXMvQXJjaGl2ZVVwbG9hZE1vZGFsJztcbmltcG9ydCB7IERlbGV0ZVdhcm5pbmdNb2RhbCB9IGZyb20gJ0BhcHAvTW9kYWwvRGVsZXRlV2FybmluZ01vZGFsJztcbmltcG9ydCB7IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nVXRpbHMnO1xuaW1wb3J0IHsgcGFyc2VMYWJlbHMgfSBmcm9tICdAYXBwL1JlY29yZGluZ01ldGFkYXRhL1JlY29yZGluZ0xhYmVsJztcbmltcG9ydCB7IExvYWRpbmdQcm9wc1R5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9ncmVzc0luZGljYXRvcic7XG5pbXBvcnQgeyBVcGRhdGVGaWx0ZXJPcHRpb25zIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvRmlsdGVycy9Db21tb24nO1xuaW1wb3J0IHsgZW1wdHlBcmNoaXZlZFJlY29yZGluZ0ZpbHRlcnMsIFRhcmdldFJlY29yZGluZ0ZpbHRlcnMgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9GaWx0ZXJzL1JlY29yZGluZ0ZpbHRlclNsaWNlJztcbmltcG9ydCB7XG4gIHJlY29yZGluZ0FkZEZpbHRlckludGVudCxcbiAgcmVjb3JkaW5nRGVsZXRlRmlsdGVySW50ZW50LFxuICByZWNvcmRpbmdBZGRUYXJnZXRJbnRlbnQsXG4gIHJlY29yZGluZ0RlbGV0ZUNhdGVnb3J5RmlsdGVyc0ludGVudCxcbiAgcmVjb3JkaW5nRGVsZXRlQWxsRmlsdGVyc0ludGVudCxcbiAgUm9vdFN0YXRlLFxuICBTdGF0ZURpc3BhdGNoLFxufSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IEFyY2hpdmVkUmVjb3JkaW5nLCBSZWNvcmRpbmdEaXJlY3RvcnksIFVQTE9BRFNfU1VCRElSRUNUT1JZIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnkgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Ob3RpZmljYXRpb25DaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBOT19UQVJHRVQsIFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBmb3JtYXRCeXRlcywgaGFzaENvZGUsIHNvcnRSZXNvdXJjZXMsIFRhYmxlQ29sdW1uIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBEcmF3ZXIsXG4gIERyYXdlckNvbnRlbnQsXG4gIERyYXdlckNvbnRlbnRCb2R5LFxuICBEcm9wZG93bixcbiAgS2ViYWJUb2dnbGUsXG4gIE92ZXJmbG93TWVudSxcbiAgT3ZlcmZsb3dNZW51Q29udGVudCxcbiAgT3ZlcmZsb3dNZW51Q29udHJvbCxcbiAgT3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtLFxuICBPdmVyZmxvd01lbnVHcm91cCxcbiAgT3ZlcmZsb3dNZW51SXRlbSxcbiAgVG9vbGJhcixcbiAgVG9vbGJhckNvbnRlbnQsXG4gIFRvb2xiYXJHcm91cCxcbiAgVG9vbGJhckl0ZW0sXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgVXBsb2FkSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IFRib2R5LCBUciwgVGQsIEV4cGFuZGFibGVSb3dDb250ZW50LCBUYWJsZUNvbXBvc2FibGUsIFNvcnRCeURpcmVjdGlvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luLCBtZXJnZSwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBmaWx0ZXIsIGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMYWJlbENlbGwgfSBmcm9tICcuLi9SZWNvcmRpbmdNZXRhZGF0YS9MYWJlbENlbGwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nQWN0aW9ucyB9IGZyb20gJy4vUmVjb3JkaW5nQWN0aW9ucyc7XG5pbXBvcnQgeyBSZWNvcmRpbmdGaWx0ZXJzQ2F0ZWdvcmllcywgZmlsdGVyUmVjb3JkaW5ncywgUmVjb3JkaW5nRmlsdGVycyB9IGZyb20gJy4vUmVjb3JkaW5nRmlsdGVycyc7XG5pbXBvcnQgeyBSZWNvcmRpbmdMYWJlbHNQYW5lbCB9IGZyb20gJy4vUmVjb3JkaW5nTGFiZWxzUGFuZWwnO1xuaW1wb3J0IHsgQ29sdW1uQ29uZmlnLCBSZWNvcmRpbmdzVGFibGUgfSBmcm9tICcuL1JlY29yZGluZ3NUYWJsZSc7XG5pbXBvcnQgeyBSZXBvcnRGcmFtZSB9IGZyb20gJy4vUmVwb3J0RnJhbWUnO1xuXG5jb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXG4gIHtcbiAgICB0aXRsZTogJ05hbWUnLFxuICAgIGtleVBhdGhzOiBbJ25hbWUnXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm06IChuYW1lOiBzdHJpbmcsIF9yZWNvcmRpbmc6IEFyY2hpdmVkUmVjb3JkaW5nKSA9PiB7XG4gICAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xhYmVscycsXG4gICAga2V5UGF0aHM6IFsnbWV0YWRhdGEnLCAnbGFiZWxzJ10sXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NpemUnLFxuICAgIGtleVBhdGhzOiBbJ3NpemUnXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGVQcm9wcyB7XG4gIHRhcmdldDogT2JzZXJ2YWJsZTxUYXJnZXQ+O1xuICBpc1VwbG9hZHNUYWJsZTogYm9vbGVhbjtcbiAgaXNOZXN0ZWRUYWJsZTogYm9vbGVhbjtcbiAgZGlyZWN0b3J5PzogUmVjb3JkaW5nRGlyZWN0b3J5O1xuICBkaXJlY3RvcnlSZWNvcmRpbmdzPzogQXJjaGl2ZWRSZWNvcmRpbmdbXTtcbiAgdG9vbGJhckJyZWFrUmVmZXJlbmNlPzogSFRNTEVsZW1lbnQgfCAoKCkgPT4gSFRNTEVsZW1lbnQpO1xufVxuXG5leHBvcnQgY29uc3QgQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGU6IFJlYWN0LkZDPEFyY2hpdmVkUmVjb3JkaW5nc1RhYmxlUHJvcHM+ID0gKHtcbiAgdGFyZ2V0OiBwcm9wc1RhcmdldCxcbiAgaXNVcGxvYWRzVGFibGUsXG4gIGlzTmVzdGVkVGFibGUsXG4gIGRpcmVjdG9yeTogcHJvcHNEaXJlY3RvcnksXG4gIGRpcmVjdG9yeVJlY29yZGluZ3MsXG4gIHRvb2xiYXJCcmVha1JlZmVyZW5jZSxcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2g8U3RhdGVEaXNwYXRjaD4oKTtcblxuICBjb25zdCBbdGFyZ2V0Q29ubmVjdFVSTCwgc2V0VGFyZ2V0Q29ubmVjdFVSTF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtyZWNvcmRpbmdzLCBzZXRSZWNvcmRpbmdzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIEFyY2hpdmVkUmVjb3JkaW5nW10pO1xuICBjb25zdCBbZmlsdGVyZWRSZWNvcmRpbmdzLCBzZXRGaWx0ZXJlZFJlY29yZGluZ3NdID0gUmVhY3QudXNlU3RhdGUoW10gYXMgQXJjaGl2ZWRSZWNvcmRpbmdbXSk7XG4gIGNvbnN0IFtoZWFkZXJDaGVja2VkLCBzZXRIZWFkZXJDaGVja2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2NoZWNrZWRJbmRpY2VzLCBzZXRDaGVja2VkSW5kaWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBudW1iZXJbXSk7XG4gIGNvbnN0IFtleHBhbmRlZFJvd3MsIHNldEV4cGFuZGVkUm93c10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBzdHJpbmdbXSk7XG4gIGNvbnN0IFtzaG93VXBsb2FkTW9kYWwsIHNldFNob3dVcGxvYWRNb2RhbF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93RGV0YWlsc1BhbmVsLCBzZXRTaG93RGV0YWlsc1BhbmVsXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2FjdGlvbkxvYWRpbmdzLCBzZXRBY3Rpb25Mb2FkaW5nc10gPSBSZWFjdC51c2VTdGF0ZTxSZWNvcmQ8QXJjaGl2ZUFjdGlvbnMsIGJvb2xlYW4+Pih7IERFTEVURTogZmFsc2UgfSk7XG4gIGNvbnN0IFtzb3J0QnksIGdldFNvcnRQYXJhbXNdID0gdXNlU29ydCgpO1xuXG4gIGNvbnN0IHRhcmdldFJlY29yZGluZ0ZpbHRlcnMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5yZWNvcmRpbmdGaWx0ZXJzLmxpc3QuZmlsdGVyKFxuICAgICAgKHRhcmdldEZpbHRlcjogVGFyZ2V0UmVjb3JkaW5nRmlsdGVycykgPT4gdGFyZ2V0RmlsdGVyLnRhcmdldCA9PT0gdGFyZ2V0Q29ubmVjdFVSTFxuICAgICk7XG4gICAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID4gMCA/IGZpbHRlcnNbMF0uYXJjaGl2ZWQuZmlsdGVycyA6IGVtcHR5QXJjaGl2ZWRSZWNvcmRpbmdGaWx0ZXJzO1xuICB9KSBhcyBSZWNvcmRpbmdGaWx0ZXJzQ2F0ZWdvcmllcztcblxuICBjb25zdCBoYW5kbGVIZWFkZXJDaGVjayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldmVudCwgY2hlY2tlZCkgPT4ge1xuICAgICAgc2V0SGVhZGVyQ2hlY2tlZChjaGVja2VkKTtcbiAgICAgIHNldENoZWNrZWRJbmRpY2VzKGNoZWNrZWQgPyBmaWx0ZXJlZFJlY29yZGluZ3MubWFwKChyKSA9PiBoYXNoQ29kZShyLm5hbWUpKSA6IFtdKTtcbiAgICB9LFxuICAgIFtzZXRIZWFkZXJDaGVja2VkLCBzZXRDaGVja2VkSW5kaWNlcywgZmlsdGVyZWRSZWNvcmRpbmdzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVJvd0NoZWNrID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNoZWNrZWQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBzZXRDaGVja2VkSW5kaWNlcygoY2kpID0+IFsuLi5jaSwgaW5kZXhdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEhlYWRlckNoZWNrZWQoZmFsc2UpO1xuICAgICAgICBzZXRDaGVja2VkSW5kaWNlcygoY2kpID0+IGNpLmZpbHRlcigodikgPT4gdiAhPT0gaW5kZXgpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRDaGVja2VkSW5kaWNlcywgc2V0SGVhZGVyQ2hlY2tlZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFZGl0TGFiZWxzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNob3dEZXRhaWxzUGFuZWwodHJ1ZSk7XG4gIH0sIFtzZXRTaG93RGV0YWlsc1BhbmVsXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChyZWNvcmRpbmdzKSA9PiB7XG4gICAgICBzZXRSZWNvcmRpbmdzKHJlY29yZGluZ3MpO1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9LFxuICAgIFtzZXRSZWNvcmRpbmdzLCBzZXRJc0xvYWRpbmddXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRXJyb3IgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRFcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSk7XG4gICAgICBzZXRSZWNvcmRpbmdzKFtdKTtcbiAgICB9LFxuICAgIFtzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZSwgc2V0UmVjb3JkaW5nc11cbiAgKTtcblxuICBjb25zdCBxdWVyeVRhcmdldFJlY29yZGluZ3MgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY29ubmVjdFVybDogc3RyaW5nKSA9PiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICAgICAgcmV0dXJuIGNvbnRleHQuYXBpLmdyYXBocWw8YW55PihcbiAgICAgICAgYFxuICAgICAgcXVlcnkgQXJjaGl2ZWRSZWNvcmRpbmdzRm9yVGFyZ2V0KCRjb25uZWN0VXJsOiBTdHJpbmcpIHtcbiAgICAgICAgYXJjaGl2ZWRSZWNvcmRpbmdzKGZpbHRlcjogeyBzb3VyY2VUYXJnZXQ6ICRjb25uZWN0VXJsIH0pIHtcbiAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvd25sb2FkVXJsXG4gICAgICAgICAgICByZXBvcnRVcmxcbiAgICAgICAgICAgIG1ldGFkYXRhIHtcbiAgICAgICAgICAgICAgbGFiZWxzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaXplXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9YCxcbiAgICAgICAgeyBjb25uZWN0VXJsIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbY29udGV4dC5hcGldXG4gICk7XG5cbiAgY29uc3QgcXVlcnlVcGxvYWRlZFJlY29yZGluZ3MgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICByZXR1cm4gY29udGV4dC5hcGkuZ3JhcGhxbDxhbnk+KFxuICAgICAgYHF1ZXJ5IFVwbG9hZGVkUmVjb3JkaW5ncygkZmlsdGVyOiBBcmNoaXZlZFJlY29yZGluZ0ZpbHRlcklucHV0KXtcbiAgICAgICAgYXJjaGl2ZWRSZWNvcmRpbmdzKGZpbHRlcjogJGZpbHRlcikge1xuICAgICAgICAgIGRhdGEge1xuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgZG93bmxvYWRVcmxcbiAgICAgICAgICAgIHJlcG9ydFVybFxuICAgICAgICAgICAgbWV0YWRhdGEge1xuICAgICAgICAgICAgICBsYWJlbHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1gLFxuICAgICAgeyBmaWx0ZXI6IHsgc291cmNlVGFyZ2V0OiBVUExPQURTX1NVQkRJUkVDVE9SWSB9IH1cbiAgICApO1xuICB9LCBbY29udGV4dC5hcGldKTtcblxuICBjb25zdCByZWZyZXNoUmVjb3JkaW5nTGlzdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgaWYgKHByb3BzRGlyZWN0b3J5KSB7XG4gICAgICBoYW5kbGVSZWNvcmRpbmdzKGRpcmVjdG9yeVJlY29yZGluZ3MpO1xuICAgIH0gZWxzZSBpZiAoaXNVcGxvYWRzVGFibGUpIHtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgcXVlcnlVcGxvYWRlZFJlY29yZGluZ3MoKVxuICAgICAgICAgIC5waXBlKG1hcCgodikgPT4gdi5kYXRhLmFyY2hpdmVkUmVjb3JkaW5ncy5kYXRhIGFzIEFyY2hpdmVkUmVjb3JkaW5nW10pKVxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogaGFuZGxlUmVjb3JkaW5ncyxcbiAgICAgICAgICAgIGVycm9yOiBoYW5kbGVFcnJvcixcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBwcm9wc1RhcmdldFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh0YXJnZXQpID0+IHRhcmdldCAhPT0gTk9fVEFSR0VUKSxcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBjb25jYXRNYXAoKHRhcmdldCkgPT4gcXVlcnlUYXJnZXRSZWNvcmRpbmdzKHRhcmdldC5jb25uZWN0VXJsKSksXG4gICAgICAgICAgICBtYXAoKHYpID0+IHYuZGF0YS5hcmNoaXZlZFJlY29yZGluZ3MuZGF0YSBhcyBBcmNoaXZlZFJlY29yZGluZ1tdKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGhhbmRsZVJlY29yZGluZ3MsXG4gICAgICAgICAgICBlcnJvcjogaGFuZGxlRXJyb3IsXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9LCBbXG4gICAgYWRkU3Vic2NyaXB0aW9uLFxuICAgIHNldElzTG9hZGluZyxcbiAgICBoYW5kbGVSZWNvcmRpbmdzLFxuICAgIGhhbmRsZUVycm9yLFxuICAgIHF1ZXJ5VGFyZ2V0UmVjb3JkaW5ncyxcbiAgICBxdWVyeVVwbG9hZGVkUmVjb3JkaW5ncyxcbiAgICBpc1VwbG9hZHNUYWJsZSxcbiAgICBwcm9wc0RpcmVjdG9yeSxcbiAgICBwcm9wc1RhcmdldCxcbiAgICBkaXJlY3RvcnlSZWNvcmRpbmdzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckZpbHRlcnMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVjb3JkaW5nRGVsZXRlQWxsRmlsdGVyc0ludGVudCh0YXJnZXRDb25uZWN0VVJMLCB0cnVlKSk7XG4gIH0sIFtkaXNwYXRjaCwgdGFyZ2V0Q29ubmVjdFVSTF0pO1xuXG4gIGNvbnN0IHVwZGF0ZUZpbHRlcnMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGFyZ2V0LCB7IGZpbHRlclZhbHVlLCBmaWx0ZXJLZXksIGRlbGV0ZWQgPSBmYWxzZSwgZGVsZXRlT3B0aW9ucyB9OiBVcGRhdGVGaWx0ZXJPcHRpb25zKSA9PiB7XG4gICAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgICBpZiAoZGVsZXRlT3B0aW9ucyAmJiBkZWxldGVPcHRpb25zLmFsbCkge1xuICAgICAgICAgIGRpc3BhdGNoKHJlY29yZGluZ0RlbGV0ZUNhdGVnb3J5RmlsdGVyc0ludGVudCh0YXJnZXQsIGZpbHRlcktleSwgdHJ1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpc3BhdGNoKHJlY29yZGluZ0RlbGV0ZUZpbHRlckludGVudCh0YXJnZXQsIGZpbHRlcktleSwgZmlsdGVyVmFsdWUsIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2gocmVjb3JkaW5nQWRkRmlsdGVySW50ZW50KHRhcmdldCwgZmlsdGVyS2V5LCBmaWx0ZXJWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoXVxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgcHJvcHNUYXJnZXQuc3Vic2NyaWJlKCh0YXJnZXQpID0+IHtcbiAgICAgICAgc2V0VGFyZ2V0Q29ubmVjdFVSTCh0YXJnZXQuY29ubmVjdFVybCk7XG4gICAgICAgIGRpc3BhdGNoKHJlY29yZGluZ0FkZFRhcmdldEludGVudCh0YXJnZXQuY29ubmVjdFVybCkpO1xuICAgICAgICByZWZyZXNoUmVjb3JkaW5nTGlzdCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCByZWZyZXNoUmVjb3JkaW5nTGlzdCwgZGlzcGF0Y2gsIHNldFRhcmdldENvbm5lY3RVUkwsIHByb3BzVGFyZ2V0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgcHJvcHNUYXJnZXQsXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5BcmNoaXZlZFJlY29yZGluZ0NyZWF0ZWQpLFxuICAgICAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5BY3RpdmVSZWNvcmRpbmdTYXZlZClcbiAgICAgICAgKSxcbiAgICAgIF0pLnN1YnNjcmliZSgoW2N1cnJlbnRUYXJnZXQsIGV2ZW50XSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5jb25uZWN0VXJsICE9IGV2ZW50Lm1lc3NhZ2UudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFJlY29yZGluZ3MoKG9sZCkgPT5cbiAgICAgICAgICBvbGQuZmlsdGVyKChyKSA9PiByLm5hbWUgIT09IGV2ZW50Lm1lc3NhZ2UucmVjb3JkaW5nLm5hbWUpLmNvbmNhdChldmVudC5tZXNzYWdlLnJlY29yZGluZylcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRSZWNvcmRpbmdzLCBwcm9wc1RhcmdldF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHByb3BzVGFyZ2V0LFxuICAgICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQXJjaGl2ZWRSZWNvcmRpbmdEZWxldGVkKSxcbiAgICAgIF0pLnN1YnNjcmliZSgoW2N1cnJlbnRUYXJnZXQsIGV2ZW50XSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5jb25uZWN0VXJsICE9IGV2ZW50Lm1lc3NhZ2UudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFJlY29yZGluZ3MoKG9sZCkgPT4gb2xkLmZpbHRlcigocikgPT4gci5uYW1lICE9PSBldmVudC5tZXNzYWdlLnJlY29yZGluZy5uYW1lKSk7XG4gICAgICAgIHNldENoZWNrZWRJbmRpY2VzKChvbGQpID0+IG9sZC5maWx0ZXIoKGlkeCkgPT4gaWR4ICE9PSBoYXNoQ29kZShldmVudC5tZXNzYWdlLnJlY29yZGluZy5uYW1lKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHNldFJlY29yZGluZ3MsIHNldENoZWNrZWRJbmRpY2VzLCBwcm9wc1RhcmdldF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHByb3BzVGFyZ2V0LFxuICAgICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUmVjb3JkaW5nTWV0YWRhdGFVcGRhdGVkKSxcbiAgICAgIF0pLnN1YnNjcmliZSgoW2N1cnJlbnRUYXJnZXQsIGV2ZW50XSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5jb25uZWN0VXJsICE9IGV2ZW50Lm1lc3NhZ2UudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFJlY29yZGluZ3MoKG9sZCkgPT5cbiAgICAgICAgICBvbGQubWFwKChvKSA9PlxuICAgICAgICAgICAgby5uYW1lID09IGV2ZW50Lm1lc3NhZ2UucmVjb3JkaW5nTmFtZSA/IHsgLi4ubywgbWV0YWRhdGE6IHsgbGFiZWxzOiBldmVudC5tZXNzYWdlLm1ldGFkYXRhLmxhYmVscyB9IH0gOiBvXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHNldFJlY29yZGluZ3MsIHByb3BzVGFyZ2V0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRGaWx0ZXJlZFJlY29yZGluZ3MoXG4gICAgICBzb3J0UmVzb3VyY2VzKFxuICAgICAgICB7XG4gICAgICAgICAgaW5kZXg6IHNvcnRCeS5pbmRleCA/PyAwLFxuICAgICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJSZWNvcmRpbmdzKHJlY29yZGluZ3MsIHRhcmdldFJlY29yZGluZ0ZpbHRlcnMpLFxuICAgICAgICB0YWJsZUNvbHVtbnNcbiAgICAgIClcbiAgICApO1xuICB9LCBbc29ydEJ5LCByZWNvcmRpbmdzLCB0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzLCBzZXRGaWx0ZXJlZFJlY29yZGluZ3NdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaEVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChcbiAgICAgICgpID0+IHJlZnJlc2hSZWNvcmRpbmdMaXN0KCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW2NvbnRleHQsIGNvbnRleHQuc2V0dGluZ3MsIHJlZnJlc2hSZWNvcmRpbmdMaXN0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRDaGVja2VkSW5kaWNlcygoY2kpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVjb3JkaW5nSWR4ID0gbmV3IFNldChmaWx0ZXJlZFJlY29yZGluZ3MubWFwKChyKSA9PiBoYXNoQ29kZShyLm5hbWUpKSk7XG4gICAgICByZXR1cm4gY2kuZmlsdGVyKChpZHgpID0+IGZpbHRlcmVkUmVjb3JkaW5nSWR4LmhhcyhpZHgpKTtcbiAgICB9KTtcbiAgfSwgW2ZpbHRlcmVkUmVjb3JkaW5ncywgc2V0Q2hlY2tlZEluZGljZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEhlYWRlckNoZWNrZWQoY2hlY2tlZEluZGljZXMubGVuZ3RoID09PSBmaWx0ZXJlZFJlY29yZGluZ3MubGVuZ3RoKTtcbiAgfSwgW3NldEhlYWRlckNoZWNrZWQsIGNoZWNrZWRJbmRpY2VzLCBmaWx0ZXJlZFJlY29yZGluZ3MubGVuZ3RoXSk7XG5cbiAgY29uc3QgaGFuZGxlUG9zdEFjdGlvbnMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYWN0aW9uOiBBcmNoaXZlQWN0aW9ucykgPT4ge1xuICAgICAgc2V0QWN0aW9uTG9hZGluZ3MoKG9sZCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdBY3Rpb25Mb2FkaW5ncyA9IHsgLi4ub2xkIH07XG4gICAgICAgIG5ld0FjdGlvbkxvYWRpbmdzW2FjdGlvbl0gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG5ld0FjdGlvbkxvYWRpbmdzO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0QWN0aW9uTG9hZGluZ3NdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRBY3Rpb25Mb2FkaW5ncygob2xkKSA9PiAoeyAuLi5vbGQsIERFTEVURTogdHJ1ZSB9KSk7XG4gICAgY29uc3QgdGFza3M6IE9ic2VydmFibGU8Ym9vbGVhbj5bXSA9IFtdO1xuICAgIGlmIChwcm9wc0RpcmVjdG9yeSkge1xuICAgICAgY29uc3QgZGlyZWN0b3J5ID0gcHJvcHNEaXJlY3Rvcnk7XG4gICAgICBmaWx0ZXJlZFJlY29yZGluZ3MuZm9yRWFjaCgocjogQXJjaGl2ZWRSZWNvcmRpbmcpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrZWRJbmRpY2VzLmluY2x1ZGVzKGhhc2hDb2RlKHIubmFtZSkpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnRzLmRlbGV0ZShyKTtcbiAgICAgICAgICB0YXNrcy5wdXNoKGNvbnRleHQuYXBpLmRlbGV0ZUFyY2hpdmVkUmVjb3JkaW5nRnJvbVBhdGgoZGlyZWN0b3J5Lmp2bUlkLCByLm5hbWUpLnBpcGUoZmlyc3QoKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihmb3JrSm9pbih0YXNrcykuc3Vic2NyaWJlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIHByb3BzVGFyZ2V0LnN1YnNjcmliZSgodCkgPT4ge1xuICAgICAgICAgIGZpbHRlcmVkUmVjb3JkaW5ncy5mb3JFYWNoKChyOiBBcmNoaXZlZFJlY29yZGluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGNoZWNrZWRJbmRpY2VzLmluY2x1ZGVzKGhhc2hDb2RlKHIubmFtZSkpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0cy5kZWxldGUocik7XG4gICAgICAgICAgICAgIHRhc2tzLnB1c2goY29udGV4dC5hcGkuZGVsZXRlQXJjaGl2ZWRSZWNvcmRpbmcodC5jb25uZWN0VXJsLCByLm5hbWUpLnBpcGUoZmlyc3QoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgICAgIGZvcmtKb2luKHRhc2tzKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAoKSA9PiBoYW5kbGVQb3N0QWN0aW9ucygnREVMRVRFJyksXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiBoYW5kbGVQb3N0QWN0aW9ucygnREVMRVRFJyksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICBmaWx0ZXJlZFJlY29yZGluZ3MsXG4gICAgY2hlY2tlZEluZGljZXMsXG4gICAgY29udGV4dC5yZXBvcnRzLFxuICAgIGNvbnRleHQuYXBpLFxuICAgIHByb3BzRGlyZWN0b3J5LFxuICAgIHByb3BzVGFyZ2V0LFxuICAgIHNldEFjdGlvbkxvYWRpbmdzLFxuICAgIGhhbmRsZVBvc3RBY3Rpb25zLFxuICBdKTtcblxuICBjb25zdCB0b2dnbGVFeHBhbmRlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRFeHBhbmRlZFJvd3MoKGV4cGFuZGVkUm93cykgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSBleHBhbmRlZFJvd3MuaW5kZXhPZihpZCk7XG4gICAgICAgIHJldHVybiBpZHggPj0gMFxuICAgICAgICAgID8gWy4uLmV4cGFuZGVkUm93cy5zbGljZSgwLCBpZHgpLCAuLi5leHBhbmRlZFJvd3Muc2xpY2UoaWR4ICsgMSwgZXhwYW5kZWRSb3dzLmxlbmd0aCldXG4gICAgICAgICAgOiBbLi4uZXhwYW5kZWRSb3dzLCBpZF07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRFeHBhbmRlZFJvd3NdXG4gICk7XG5cbiAgY29uc3QgUmVjb3JkaW5nc1Rvb2xiYXIgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxBcmNoaXZlZFJlY29yZGluZ3NUb29sYmFyXG4gICAgICAgIHRhcmdldD17dGFyZ2V0Q29ubmVjdFVSTH1cbiAgICAgICAgY2hlY2tlZEluZGljZXM9e2NoZWNrZWRJbmRpY2VzfVxuICAgICAgICB0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzPXt0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzfVxuICAgICAgICByZWNvcmRpbmdzPXtyZWNvcmRpbmdzfVxuICAgICAgICBmaWx0ZXJlZFJlY29yZGluZ3M9e2ZpbHRlcmVkUmVjb3JkaW5nc31cbiAgICAgICAgdXBkYXRlRmlsdGVycz17dXBkYXRlRmlsdGVyc31cbiAgICAgICAgaGFuZGxlQ2xlYXJGaWx0ZXJzPXtoYW5kbGVDbGVhckZpbHRlcnN9XG4gICAgICAgIGhhbmRsZUVkaXRMYWJlbHM9e2hhbmRsZUVkaXRMYWJlbHN9XG4gICAgICAgIGhhbmRsZURlbGV0ZVJlY29yZGluZ3M9e2hhbmRsZURlbGV0ZVJlY29yZGluZ3N9XG4gICAgICAgIGhhbmRsZVNob3dVcGxvYWRNb2RhbD17KCkgPT4gc2V0U2hvd1VwbG9hZE1vZGFsKHRydWUpfVxuICAgICAgICBpc1VwbG9hZHNUYWJsZT17aXNVcGxvYWRzVGFibGV9XG4gICAgICAgIGFjdGlvbkxvYWRpbmdzPXthY3Rpb25Mb2FkaW5nc31cbiAgICAgICAgdG9vbGJhckJyZWFrUmVmZXJlbmNlPXt0b29sYmFyQnJlYWtSZWZlcmVuY2V9XG4gICAgICAvPlxuICAgICksXG4gICAgW1xuICAgICAgdGFyZ2V0Q29ubmVjdFVSTCxcbiAgICAgIGNoZWNrZWRJbmRpY2VzLFxuICAgICAgdGFyZ2V0UmVjb3JkaW5nRmlsdGVycyxcbiAgICAgIHJlY29yZGluZ3MsXG4gICAgICBmaWx0ZXJlZFJlY29yZGluZ3MsXG4gICAgICB1cGRhdGVGaWx0ZXJzLFxuICAgICAgaGFuZGxlQ2xlYXJGaWx0ZXJzLFxuICAgICAgaGFuZGxlRWRpdExhYmVscyxcbiAgICAgIGhhbmRsZURlbGV0ZVJlY29yZGluZ3MsXG4gICAgICBzZXRTaG93VXBsb2FkTW9kYWwsXG4gICAgICBpc1VwbG9hZHNUYWJsZSxcbiAgICAgIGFjdGlvbkxvYWRpbmdzLFxuICAgICAgdG9vbGJhckJyZWFrUmVmZXJlbmNlLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVVcGxvYWRNb2RhbENsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNob3dVcGxvYWRNb2RhbChmYWxzZSk7IC8vIERvIG5vdGhpbmcgZWxzZSBhcyBub3RpZmljYXRpb25zIHdpbGwgaGFuZGxlIHVwZGF0ZVxuICB9LCBbc2V0U2hvd1VwbG9hZE1vZGFsXSk7XG5cbiAgY29uc3QgTGFiZWxzUGFuZWwgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxSZWNvcmRpbmdMYWJlbHNQYW5lbFxuICAgICAgICBzZXRTaG93UGFuZWw9e3NldFNob3dEZXRhaWxzUGFuZWx9XG4gICAgICAgIGlzVGFyZ2V0UmVjb3JkaW5nPXtmYWxzZX1cbiAgICAgICAgaXNVcGxvYWRzVGFibGU9e2lzVXBsb2Fkc1RhYmxlfVxuICAgICAgICBjaGVja2VkSW5kaWNlcz17Y2hlY2tlZEluZGljZXN9XG4gICAgICAgIGRpcmVjdG9yeT17cHJvcHNEaXJlY3Rvcnl9XG4gICAgICAgIGRpcmVjdG9yeVJlY29yZGluZ3M9e2RpcmVjdG9yeVJlY29yZGluZ3N9XG4gICAgICAvPlxuICAgICksXG4gICAgW2NoZWNrZWRJbmRpY2VzLCBzZXRTaG93RGV0YWlsc1BhbmVsLCBpc1VwbG9hZHNUYWJsZSwgcHJvcHNEaXJlY3RvcnksIGRpcmVjdG9yeVJlY29yZGluZ3NdXG4gICk7XG5cbiAgY29uc3QgdG90YWxBcmNoaXZlU2l6ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBzaXplID0gMDtcbiAgICBmaWx0ZXJlZFJlY29yZGluZ3MuZm9yRWFjaCgocikgPT4gKHNpemUgKz0gci5zaXplKSk7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sIFtmaWx0ZXJlZFJlY29yZGluZ3NdKTtcblxuICBjb25zdCBjb2x1bW5Db25maWc6IENvbHVtbkNvbmZpZyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNvbHVtbnM6IHRhYmxlQ29sdW1ucyxcbiAgICAgIG9uU29ydDogZ2V0U29ydFBhcmFtcyxcbiAgICB9KSxcbiAgICBbZ2V0U29ydFBhcmFtc11cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8RHJhd2VyIGlzRXhwYW5kZWQ9e3Nob3dEZXRhaWxzUGFuZWx9IGlzSW5saW5lIGlkPXsnYXJjaGl2ZWQtcmVjb3JkaW5nLWRyYXdlcid9PlxuICAgICAgPERyYXdlckNvbnRlbnQgcGFuZWxDb250ZW50PXtMYWJlbHNQYW5lbH0gY2xhc3NOYW1lPVwicmVjb3JkaW5ncy10YWJsZS1kcmF3ZXItY29udGVudFwiPlxuICAgICAgICA8RHJhd2VyQ29udGVudEJvZHkgaGFzUGFkZGluZz5cbiAgICAgICAgICA8UmVjb3JkaW5nc1RhYmxlXG4gICAgICAgICAgICB0YWJsZVRpdGxlPVwiQXJjaGl2ZWQgRmxpZ2h0IFJlY29yZGluZ3NcIlxuICAgICAgICAgICAgdG9vbGJhcj17UmVjb3JkaW5nc1Rvb2xiYXJ9XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnM9e2NvbHVtbkNvbmZpZ31cbiAgICAgICAgICAgIHRhYmxlRm9vdGVyPXtcbiAgICAgICAgICAgICAgZmlsdGVyZWRSZWNvcmRpbmdzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxUYWJsZUNvbXBvc2FibGUgYm9yZGVycz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgPFRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8VHI+XG4gICAgICAgICAgICAgICAgICAgICAgPFRkPjwvVGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPFRkIHdpZHRoPXsxNX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5Ub3RhbCBzaXplOiB7Zm9ybWF0Qnl0ZXModG90YWxBcmNoaXZlU2l6ZSl9PC9iPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgICAgICAgICA8L1Rib2R5PlxuICAgICAgICAgICAgICAgIDwvVGFibGVDb21wb3NhYmxlPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0hlYWRlckNoZWNrZWQ9e2hlYWRlckNoZWNrZWR9XG4gICAgICAgICAgICBvbkhlYWRlckNoZWNrPXtoYW5kbGVIZWFkZXJDaGVja31cbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICAgICAgaXNFbXB0eT17IXJlY29yZGluZ3MubGVuZ3RofVxuICAgICAgICAgICAgaXNFbXB0eUZpbHRlclJlc3VsdD17IWZpbHRlcmVkUmVjb3JkaW5ncy5sZW5ndGh9XG4gICAgICAgICAgICBjbGVhckZpbHRlcnM9e2hhbmRsZUNsZWFyRmlsdGVyc31cbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGU9e2lzTmVzdGVkVGFibGV9XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U9e2Vycm9yTWVzc2FnZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZmlsdGVyZWRSZWNvcmRpbmdzLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgICA8QXJjaGl2ZWRSZWNvcmRpbmdSb3dcbiAgICAgICAgICAgICAgICBrZXk9e3IubmFtZX1cbiAgICAgICAgICAgICAgICByZWNvcmRpbmc9e3J9XG4gICAgICAgICAgICAgICAgbGFiZWxGaWx0ZXJzPXt0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzLkxhYmVsfVxuICAgICAgICAgICAgICAgIGluZGV4PXtoYXNoQ29kZShyLm5hbWUpfVxuICAgICAgICAgICAgICAgIHNvdXJjZVRhcmdldD17cHJvcHNUYXJnZXR9XG4gICAgICAgICAgICAgICAgcHJvcHNEaXJlY3Rvcnk9e3Byb3BzRGlyZWN0b3J5fVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFRhcmdldFVSTD17dGFyZ2V0Q29ubmVjdFVSTH1cbiAgICAgICAgICAgICAgICBleHBhbmRlZFJvd3M9e2V4cGFuZGVkUm93c31cbiAgICAgICAgICAgICAgICBjaGVja2VkSW5kaWNlcz17Y2hlY2tlZEluZGljZXN9XG4gICAgICAgICAgICAgICAgdG9nZ2xlRXhwYW5kZWQ9e3RvZ2dsZUV4cGFuZGVkfVxuICAgICAgICAgICAgICAgIGhhbmRsZVJvd0NoZWNrPXtoYW5kbGVSb3dDaGVja31cbiAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJzPXt1cGRhdGVGaWx0ZXJzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9SZWNvcmRpbmdzVGFibGU+XG5cbiAgICAgICAgICB7aXNVcGxvYWRzVGFibGUgPyA8QXJjaGl2ZVVwbG9hZE1vZGFsIHZpc2libGU9e3Nob3dVcGxvYWRNb2RhbH0gb25DbG9zZT17aGFuZGxlVXBsb2FkTW9kYWxDbG9zZX0gLz4gOiBudWxsfVxuICAgICAgICA8L0RyYXdlckNvbnRlbnRCb2R5PlxuICAgICAgPC9EcmF3ZXJDb250ZW50PlxuICAgIDwvRHJhd2VyPlxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgQXJjaGl2ZUFjdGlvbnMgPSAnREVMRVRFJztcblxuZXhwb3J0IGludGVyZmFjZSBBcmNoaXZlZFJlY29yZGluZ3NUb29sYmFyUHJvcHMge1xuICB0YXJnZXQ6IHN0cmluZztcbiAgY2hlY2tlZEluZGljZXM6IG51bWJlcltdO1xuICB0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzOiBSZWNvcmRpbmdGaWx0ZXJzQ2F0ZWdvcmllcztcbiAgcmVjb3JkaW5nczogQXJjaGl2ZWRSZWNvcmRpbmdbXTtcbiAgZmlsdGVyZWRSZWNvcmRpbmdzOiBBcmNoaXZlZFJlY29yZGluZ1tdO1xuICB1cGRhdGVGaWx0ZXJzOiAodGFyZ2V0OiBzdHJpbmcsIHVwZGF0ZUZpbHRlck9wdGlvbnM6IFVwZGF0ZUZpbHRlck9wdGlvbnMpID0+IHZvaWQ7XG4gIGhhbmRsZUNsZWFyRmlsdGVyczogKCkgPT4gdm9pZDtcbiAgaGFuZGxlRWRpdExhYmVsczogKCkgPT4gdm9pZDtcbiAgaGFuZGxlRGVsZXRlUmVjb3JkaW5nczogKCkgPT4gdm9pZDtcbiAgaGFuZGxlU2hvd1VwbG9hZE1vZGFsOiAoKSA9PiB2b2lkO1xuICBpc1VwbG9hZHNUYWJsZTogYm9vbGVhbjtcbiAgYWN0aW9uTG9hZGluZ3M6IFJlY29yZDxBcmNoaXZlQWN0aW9ucywgYm9vbGVhbj47XG4gIHRvb2xiYXJCcmVha1JlZmVyZW5jZT86IEhUTUxFbGVtZW50IHwgKCgpID0+IEhUTUxFbGVtZW50KTtcbn1cblxuY29uc3QgQXJjaGl2ZWRSZWNvcmRpbmdzVG9vbGJhcjogUmVhY3QuRkM8QXJjaGl2ZWRSZWNvcmRpbmdzVG9vbGJhclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFt3YXJuaW5nTW9kYWxPcGVuLCBzZXRXYXJuaW5nTW9kYWxPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FjdGlvblRvZ2dsZU9wZW4sIHNldEFjdGlvblRvZ2dsZU9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZUFjdGlvblRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHNldEFjdGlvblRvZ2dsZU9wZW4oKG9sZCkgPT4gIW9sZCksIFtzZXRBY3Rpb25Ub2dnbGVPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlV2FybmluZ01vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0V2FybmluZ01vZGFsT3BlbihmYWxzZSk7XG4gIH0sIFtzZXRXYXJuaW5nTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQnV0dG9uID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChjb250ZXh0LnNldHRpbmdzLmRlbGV0aW9uRGlhbG9nc0VuYWJsZWRGb3IoRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlQXJjaGl2ZWRSZWNvcmRpbmdzKSkge1xuICAgICAgc2V0V2FybmluZ01vZGFsT3Blbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHMuaGFuZGxlRGVsZXRlUmVjb3JkaW5ncygpO1xuICAgIH1cbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIHNldFdhcm5pbmdNb2RhbE9wZW4sIHByb3BzXSk7XG5cbiAgY29uc3QgZGVsZXRlQXJjaGl2ZWRXYXJuaW5nTW9kYWwgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICB3YXJuaW5nVHlwZT17RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlQXJjaGl2ZWRSZWNvcmRpbmdzfVxuICAgICAgICB2aXNpYmxlPXt3YXJuaW5nTW9kYWxPcGVufVxuICAgICAgICBvbkFjY2VwdD17cHJvcHMuaGFuZGxlRGVsZXRlUmVjb3JkaW5nc31cbiAgICAgICAgb25DbG9zZT17aGFuZGxlV2FybmluZ01vZGFsQ2xvc2V9XG4gICAgICAvPlxuICAgICk7XG4gIH0sIFt3YXJuaW5nTW9kYWxPcGVuLCBwcm9wcy5oYW5kbGVEZWxldGVSZWNvcmRpbmdzLCBoYW5kbGVXYXJuaW5nTW9kYWxDbG9zZV0pO1xuXG4gIGNvbnN0IGFjdGlvbkxvYWRpbmdQcm9wcyA9IFJlYWN0LnVzZU1lbW88UmVjb3JkPEFyY2hpdmVBY3Rpb25zLCBMb2FkaW5nUHJvcHNUeXBlPj4oXG4gICAgKCkgPT4gKHtcbiAgICAgIERFTEVURToge1xuICAgICAgICBzcGlubmVyQXJpYVZhbHVlVGV4dDogJ0RlbGV0aW5nJyxcbiAgICAgICAgc3Bpbm5lckFyaWFMYWJlbDogJ2RlbGV0aW5nLWFyY2hpdmVkLXJlY29yZGluZycsXG4gICAgICAgIGlzTG9hZGluZzogcHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0RFTEVURSddLFxuICAgICAgfSBhcyBMb2FkaW5nUHJvcHNUeXBlLFxuICAgIH0pLFxuICAgIFtwcm9wc11cbiAgKTtcblxuICBjb25zdCBidXR0b25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGVmYXVsdDogKFxuICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9e3Byb3BzLmhhbmRsZUVkaXRMYWJlbHN9IGlzRGlzYWJsZWQ9eyFwcm9wcy5jaGVja2VkSW5kaWNlcy5sZW5ndGh9PlxuICAgICAgICAgICAgRWRpdCBMYWJlbHNcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKSxcbiAgICAgICAgY29sbGFwc2VkOiAoXG4gICAgICAgICAgPE92ZXJmbG93TWVudURyb3Bkb3duSXRlbSBrZXk9eydFZGl0IExhYmVscyd9IGlzU2hhcmVkIG9uQ2xpY2s9e3Byb3BzLmhhbmRsZUVkaXRMYWJlbHN9PlxuICAgICAgICAgICAgRWRpdCBMYWJlbHNcbiAgICAgICAgICA8L092ZXJmbG93TWVudURyb3Bkb3duSXRlbT5cbiAgICAgICAgKSxcbiAgICAgICAga2V5OiAnRWRpdCBMYWJlbHMnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGVmYXVsdDogKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQnV0dG9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17IXByb3BzLmNoZWNrZWRJbmRpY2VzLmxlbmd0aCB8fCBwcm9wcy5hY3Rpb25Mb2FkaW5nc1snREVMRVRFJ119XG4gICAgICAgICAgICB7Li4uYWN0aW9uTG9hZGluZ1Byb3BzWydERUxFVEUnXX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0RFTEVURSddID8gJ0RlbGV0aW5nJyA6ICdEZWxldGUnfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApLFxuICAgICAgICBjb2xsYXBzZWQ6IChcbiAgICAgICAgICA8T3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtIGtleT17J0RlbGV0ZSd9IGlzU2hhcmVkIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUJ1dHRvbn0+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0RFTEVURSddID8gJ0RlbGV0aW5nJyA6ICdEZWxldGUnfVxuICAgICAgICAgIDwvT3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtPlxuICAgICAgICApLFxuICAgICAgICBrZXk6ICdEZWxldGUnLFxuICAgICAgfSxcbiAgICBdO1xuICB9LCBbXG4gICAgcHJvcHMuaGFuZGxlRWRpdExhYmVscyxcbiAgICBoYW5kbGVEZWxldGVCdXR0b24sXG4gICAgcHJvcHMuY2hlY2tlZEluZGljZXMubGVuZ3RoLFxuICAgIHByb3BzLmFjdGlvbkxvYWRpbmdzLFxuICAgIGFjdGlvbkxvYWRpbmdQcm9wcyxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VG9vbGJhclxuICAgICAgaWQ9XCJhcmNoaXZlZC1yZWNvcmRpbmdzLXRvb2xiYXJcIlxuICAgICAgYXJpYS1sYWJlbD1cImFyY2hpdmVkLXJlY29yZGluZy10b29sYmFyXCJcbiAgICAgIGNsZWFyQWxsRmlsdGVycz17cHJvcHMuaGFuZGxlQ2xlYXJGaWx0ZXJzfVxuICAgICAgaXNTdGlja3lcbiAgICA+XG4gICAgICA8VG9vbGJhckNvbnRlbnQ+XG4gICAgICAgIDxSZWNvcmRpbmdGaWx0ZXJzXG4gICAgICAgICAgdGFyZ2V0PXtwcm9wcy50YXJnZXR9XG4gICAgICAgICAgaXNBcmNoaXZlZD17dHJ1ZX1cbiAgICAgICAgICByZWNvcmRpbmdzPXtwcm9wcy5yZWNvcmRpbmdzfVxuICAgICAgICAgIGZpbHRlcnM9e3Byb3BzLnRhcmdldFJlY29yZGluZ0ZpbHRlcnN9XG4gICAgICAgICAgdXBkYXRlRmlsdGVycz17cHJvcHMudXBkYXRlRmlsdGVyc31cbiAgICAgICAgICBicmVha3BvaW50PXsneGwnfVxuICAgICAgICAvPlxuICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJidXR0b24tZ3JvdXBcIiBzdHlsZT17eyBhbGlnblNlbGY6ICdzdGFydCcgfX0+XG4gICAgICAgICAgPFRvb2xiYXJJdGVtIHZhcmlhbnQ9XCJvdmVyZmxvdy1tZW51XCI+XG4gICAgICAgICAgICA8T3ZlcmZsb3dNZW51XG4gICAgICAgICAgICAgIGJyZWFrcG9pbnQ9XCJzbVwiXG4gICAgICAgICAgICAgIGJyZWFrcG9pbnRSZWZlcmVuY2U9e1xuICAgICAgICAgICAgICAgIHByb3BzLnRvb2xiYXJCcmVha1JlZmVyZW5jZSB8fFxuICAgICAgICAgICAgICAgICgoKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXJjaGl2ZWQtcmVjb3JkaW5ncy10b29sYmFyJykgfHwgZG9jdW1lbnQuYm9keSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8T3ZlcmZsb3dNZW51Q29udGVudD5cbiAgICAgICAgICAgICAgICA8T3ZlcmZsb3dNZW51R3JvdXAgZ3JvdXBUeXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICB7YnV0dG9ucy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPE92ZXJmbG93TWVudUl0ZW0ga2V5PXtiLmtleX0+e2IuZGVmYXVsdH08L092ZXJmbG93TWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L092ZXJmbG93TWVudUdyb3VwPlxuICAgICAgICAgICAgICA8L092ZXJmbG93TWVudUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxPdmVyZmxvd01lbnVDb250cm9sPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93blxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17J2FyY2hpdmUtcmVjb3JkaW5nLWFjdGlvbnMnfVxuICAgICAgICAgICAgICAgICAgaXNQbGFpblxuICAgICAgICAgICAgICAgICAgaXNGbGlwRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9eygpID0+IHNldEFjdGlvblRvZ2dsZU9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgbWVudUFwcGVuZFRvPXsncGFyZW50J31cbiAgICAgICAgICAgICAgICAgIGlzT3Blbj17YWN0aW9uVG9nZ2xlT3Blbn1cbiAgICAgICAgICAgICAgICAgIHRvZ2dsZT17PEtlYmFiVG9nZ2xlIGlkPVwiYXJjaGl2ZS1yZWNvcmRpbmctYWN0aW9ucy10b2dnbGUta2ViYWJcIiBvblRvZ2dsZT17aGFuZGxlQWN0aW9uVG9nZ2xlfSAvPn1cbiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duSXRlbXM9e2J1dHRvbnMubWFwKChiKSA9PiBiLmNvbGxhcHNlZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9PdmVyZmxvd01lbnVDb250cm9sPlxuICAgICAgICAgICAgPC9PdmVyZmxvd01lbnU+XG4gICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgIHtkZWxldGVBcmNoaXZlZFdhcm5pbmdNb2RhbH1cbiAgICAgICAge3Byb3BzLmlzVXBsb2Fkc1RhYmxlID8gKFxuICAgICAgICAgIDxUb29sYmFyR3JvdXAgdmFyaWFudD1cImljb24tYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgICAgICA8VG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJ1cGxvYWQtcmVjb3JkaW5nXCIgb25DbGljaz17cHJvcHMuaGFuZGxlU2hvd1VwbG9hZE1vZGFsfT5cbiAgICAgICAgICAgICAgICA8VXBsb2FkSWNvbiAvPlxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICA8L1Rvb2xiYXI+XG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyY2hpdmVkUmVjb3JkaW5nUm93UHJvcHMge1xuICByZWNvcmRpbmc6IEFyY2hpdmVkUmVjb3JkaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBwcm9wc0RpcmVjdG9yeT86IFJlY29yZGluZ0RpcmVjdG9yeTtcbiAgY3VycmVudFNlbGVjdGVkVGFyZ2V0VVJMOiBzdHJpbmc7XG4gIHNvdXJjZVRhcmdldDogT2JzZXJ2YWJsZTxUYXJnZXQ+O1xuICBleHBhbmRlZFJvd3M6IHN0cmluZ1tdO1xuICBjaGVja2VkSW5kaWNlczogbnVtYmVyW107XG4gIGxhYmVsRmlsdGVyczogc3RyaW5nW107XG4gIHRvZ2dsZUV4cGFuZGVkOiAocm93SWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgaGFuZGxlUm93Q2hlY2s6IChjaGVja2VkOiBib29sZWFuLCByb3dJZHg6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZDtcbiAgdXBkYXRlRmlsdGVyczogKHRhcmdldDogc3RyaW5nLCB1cGRhdGVGaWx0ZXJPcHRpb25zOiBVcGRhdGVGaWx0ZXJPcHRpb25zKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQXJjaGl2ZWRSZWNvcmRpbmdSb3c6IFJlYWN0LkZDPEFyY2hpdmVkUmVjb3JkaW5nUm93UHJvcHM+ID0gKHtcbiAgcmVjb3JkaW5nLFxuICBpbmRleCxcbiAgcHJvcHNEaXJlY3RvcnksXG4gIGN1cnJlbnRTZWxlY3RlZFRhcmdldFVSTCxcbiAgc291cmNlVGFyZ2V0LFxuICBleHBhbmRlZFJvd3MsXG4gIGNoZWNrZWRJbmRpY2VzLFxuICBsYWJlbEZpbHRlcnMsXG4gIHRvZ2dsZUV4cGFuZGVkLFxuICBoYW5kbGVSb3dDaGVjayxcbiAgdXBkYXRlRmlsdGVycyxcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuXG4gIGNvbnN0IHBhcnNlZExhYmVscyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBwYXJzZUxhYmVscyhyZWNvcmRpbmcubWV0YWRhdGEubGFiZWxzKTtcbiAgfSwgW3JlY29yZGluZ10pO1xuXG4gIGNvbnN0IGV4cGFuZGVkUm93SWQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGBhcmNoaXZlZC10YWJsZS1yb3ctJHtpbmRleH0tZXhwYCwgW2luZGV4XSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUV4cGFuZGVkKGV4cGFuZGVkUm93SWQpO1xuICB9LCBbZXhwYW5kZWRSb3dJZCwgdG9nZ2xlRXhwYW5kZWRdKTtcblxuICBjb25zdCBpc0V4cGFuZGVkID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGV4cGFuZGVkUm93cy5pbmNsdWRlcyhleHBhbmRlZFJvd0lkKTtcbiAgfSwgW2V4cGFuZGVkUm93SWQsIGV4cGFuZGVkUm93c10pO1xuXG4gIGNvbnN0IGhhbmRsZUNoZWNrID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGhhbmRsZVJvd0NoZWNrKGNoZWNrZWQsIGluZGV4KTtcbiAgICB9LFxuICAgIFtpbmRleCwgaGFuZGxlUm93Q2hlY2tdXG4gICk7XG5cbiAgY29uc3QgcGFyZW50Um93ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUciBrZXk9e2Ake2luZGV4fV9wYXJlbnRgfT5cbiAgICAgICAgPFRkIGtleT17YGFyY2hpdmVkLXRhYmxlLXJvdy0ke2luZGV4fV8wYH0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBuYW1lPXtgYXJjaGl2ZWQtdGFibGUtcm93LSR7aW5kZXh9LWNoZWNrYH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGVja31cbiAgICAgICAgICAgIGlzQ2hlY2tlZD17Y2hlY2tlZEluZGljZXMuaW5jbHVkZXMoaW5kZXgpfVxuICAgICAgICAgICAgaWQ9e2BhcmNoaXZlZC10YWJsZS1yb3ctJHtpbmRleH0tY2hlY2tgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZFxuICAgICAgICAgIGtleT17YGFyY2hpdmVkLXRhYmxlLXJvdy0ke2luZGV4fV8xYH1cbiAgICAgICAgICBpZD17YGFyY2hpdmVkLWV4LXRvZ2dsZS0ke2luZGV4fWB9XG4gICAgICAgICAgYXJpYS1jb250cm9scz17YGFyY2hpdmVkLWV4LWV4cGFuZC0ke2luZGV4fWB9XG4gICAgICAgICAgZXhwYW5kPXt7XG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBpc0V4cGFuZGVkOiBpc0V4cGFuZGVkLFxuICAgICAgICAgICAgb25Ub2dnbGU6IGhhbmRsZVRvZ2dsZSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8VGQga2V5PXtgYXJjaGl2ZWQtdGFibGUtcm93LSR7aW5kZXh9XzJgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1swXS50aXRsZX0+XG4gICAgICAgICAge3JlY29yZGluZy5uYW1lfVxuICAgICAgICA8L1RkPlxuICAgICAgICA8VGQga2V5PXtgYWN0aXZlLXRhYmxlLXJvdy0ke2luZGV4fV8zYH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMl0udGl0bGV9PlxuICAgICAgICAgIDxMYWJlbENlbGxcbiAgICAgICAgICAgIHRhcmdldD17Y3VycmVudFNlbGVjdGVkVGFyZ2V0VVJMfVxuICAgICAgICAgICAgY2xpY2thYmxlT3B0aW9ucz17e1xuICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJzOiB1cGRhdGVGaWx0ZXJzLFxuICAgICAgICAgICAgICBsYWJlbEZpbHRlcnM6IGxhYmVsRmlsdGVycyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBsYWJlbHM9e3BhcnNlZExhYmVsc31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1RkPlxuICAgICAgICA8VGQga2V5PXtgYXJjaGl2ZWQtdGFibGUtcm93LSR7aW5kZXh9XzRgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1sxXS50aXRsZX0+XG4gICAgICAgICAge2Zvcm1hdEJ5dGVzKHJlY29yZGluZy5zaXplKX1cbiAgICAgICAgPC9UZD5cbiAgICAgICAge3Byb3BzRGlyZWN0b3J5ID8gKFxuICAgICAgICAgIDxSZWNvcmRpbmdBY3Rpb25zXG4gICAgICAgICAgICByZWNvcmRpbmc9e3JlY29yZGluZ31cbiAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgIHVwbG9hZEZuPXsoKSA9PiBjb250ZXh0LmFwaS51cGxvYWRBcmNoaXZlZFJlY29yZGluZ1RvR3JhZmFuYUZyb21QYXRoKHByb3BzRGlyZWN0b3J5Lmp2bUlkLCByZWNvcmRpbmcubmFtZSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UmVjb3JkaW5nQWN0aW9uc1xuICAgICAgICAgICAgcmVjb3JkaW5nPXtyZWNvcmRpbmd9XG4gICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICB1cGxvYWRGbj17KCkgPT4gY29udGV4dC5hcGkudXBsb2FkQXJjaGl2ZWRSZWNvcmRpbmdUb0dyYWZhbmEoc291cmNlVGFyZ2V0LCByZWNvcmRpbmcubmFtZSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvVHI+XG4gICAgKTtcbiAgfSwgW1xuICAgIGluZGV4LFxuICAgIGNoZWNrZWRJbmRpY2VzLFxuICAgIGlzRXhwYW5kZWQsXG4gICAgcGFyc2VkTGFiZWxzLFxuICAgIGxhYmVsRmlsdGVycyxcbiAgICBjdXJyZW50U2VsZWN0ZWRUYXJnZXRVUkwsXG4gICAgc291cmNlVGFyZ2V0LFxuICAgIHByb3BzRGlyZWN0b3J5LFxuICAgIHJlY29yZGluZyxcbiAgICBjb250ZXh0LmFwaSxcbiAgICB1cGRhdGVGaWx0ZXJzLFxuICAgIGhhbmRsZUNoZWNrLFxuICAgIGhhbmRsZVRvZ2dsZSxcbiAgXSk7XG5cbiAgY29uc3QgY2hpbGRSb3cgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRyIGtleT17YCR7aW5kZXh9X2NoaWxkYH0gaXNFeHBhbmRlZD17aXNFeHBhbmRlZH0+XG4gICAgICAgIDxUZCBrZXk9e2BhcmNoaXZlZC1leC1leHBhbmQtJHtpbmRleH1gfSBkYXRhTGFiZWw9eydDb250ZW50IERldGFpbHMnfSBjb2xTcGFuPXt0YWJsZUNvbHVtbnMubGVuZ3RoICsgM30+XG4gICAgICAgICAgPEV4cGFuZGFibGVSb3dDb250ZW50PlxuICAgICAgICAgICAgPFJlcG9ydEZyYW1lIGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9IHJlY29yZGluZz17cmVjb3JkaW5nfSB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI2NDBcIiAvPlxuICAgICAgICAgIDwvRXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgIDwvVGQ+XG4gICAgICA8L1RyPlxuICAgICk7XG4gIH0sIFtyZWNvcmRpbmcsIGluZGV4LCBpc0V4cGFuZGVkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VGJvZHkga2V5PXtpbmRleH0gaXNFeHBhbmRlZD17aXNFeHBhbmRlZH0+XG4gICAgICB7cGFyZW50Um93fVxuICAgICAge2NoaWxkUm93fVxuICAgIDwvVGJvZHk+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IFJlY29yZGluZ0RpcmVjdG9yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IGluY2x1ZGVzRGlyZWN0b3J5ID0gKGFycjogUmVjb3JkaW5nRGlyZWN0b3J5W10sIGRpcjogUmVjb3JkaW5nRGlyZWN0b3J5KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBhcnIuc29tZSgodCkgPT4gdC5jb25uZWN0VXJsID09PSBkaXIuY29ubmVjdFVybCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5kZXhPZkRpcmVjdG9yeSA9IChhcnI6IFJlY29yZGluZ0RpcmVjdG9yeVtdLCBkaXI6IFJlY29yZGluZ0RpcmVjdG9yeSk6IG51bWJlciA9PiB7XG4gIGxldCBpbmRleCA9IC0xO1xuICBhcnIuZm9yRWFjaCgoZCwgaWR4KSA9PiB7XG4gICAgaWYgKGQuY29ubmVjdFVybCA9PT0gZGlyLmNvbm5lY3RVcmwpIHtcbiAgICAgIGluZGV4ID0gaWR4O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpbmRleDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRGcm9tRGlyZWN0b3J5ID0gKGRpcjogUmVjb3JkaW5nRGlyZWN0b3J5KTogVGFyZ2V0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb25uZWN0VXJsOiBkaXIuY29ubmVjdFVybCxcbiAgICBhbGlhczogZGlyLmp2bUlkLFxuICB9O1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTG9hZGluZ1ZpZXcgfSBmcm9tICdAYXBwL0xvYWRpbmdWaWV3L0xvYWRpbmdWaWV3JztcbmltcG9ydCB7IEFyY2hpdmVkUmVjb3JkaW5nc1RhYmxlIH0gZnJvbSAnQGFwcC9SZWNvcmRpbmdzL0FyY2hpdmVkUmVjb3JkaW5nc1RhYmxlJztcbmltcG9ydCB7IEFyY2hpdmVkUmVjb3JkaW5nLCBSZWNvcmRpbmdEaXJlY3RvcnkgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiwgcG9ydGFsUm9vdCwgc29ydFJlc291cmNlcyB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgVG9vbGJhcixcbiAgVG9vbGJhckNvbnRlbnQsXG4gIFRvb2xiYXJHcm91cCxcbiAgVG9vbGJhckl0ZW0sXG4gIFNlYXJjaElucHV0LFxuICBCYWRnZSxcbiAgRW1wdHlTdGF0ZSxcbiAgRW1wdHlTdGF0ZUljb24sXG4gIFRleHQsXG4gIFRpdGxlLFxuICBUb29sdGlwLFxuICBTcGxpdCxcbiAgU3BsaXRJdGVtLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEhlbHBJY29uLCBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgVGFibGVDb21wb3NhYmxlLFxuICBUaCxcbiAgVGhlYWQsXG4gIFRib2R5LFxuICBUcixcbiAgVGQsXG4gIEV4cGFuZGFibGVSb3dDb250ZW50LFxuICBTb3J0QnlEaXJlY3Rpb24sXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRUYXJnZXRGcm9tRGlyZWN0b3J5LCBpbmNsdWRlc0RpcmVjdG9yeSwgaW5kZXhPZkRpcmVjdG9yeSB9IGZyb20gJy4vQXJjaGl2ZURpcmVjdG9yeVV0aWwnO1xuXG5jb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXG4gIHtcbiAgICB0aXRsZTogJ0RpcmVjdG9yeScsXG4gICAga2V5UGF0aHM6IFsnY29ubmVjdFVybCddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIHdpZHRoOiA4MCxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQXJjaGl2ZXMnLFxuICAgIGtleVBhdGhzOiBbJ3JlY29yZGluZ3MnXSxcbiAgICB0cmFuc2Zvcm06IChyZWNvcmRpbmdzOiBBcmNoaXZlZFJlY29yZGluZ1tdLCBfb2JqOiBfUmVjb3JkaW5nRGlyZWN0b3J5KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb3JkaW5ncy5sZW5ndGg7XG4gICAgfSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB3aWR0aDogMTUsXG4gIH0sXG5dO1xuXG50eXBlIF9SZWNvcmRpbmdEaXJlY3RvcnkgPSBSZWNvcmRpbmdEaXJlY3RvcnkgJiB7IHRhcmdldEFzT2JzOiBPYnNlcnZhYmxlPFRhcmdldD4gfTtcblxuZXhwb3J0IGludGVyZmFjZSBBbGxBcmNoaXZlZFJlY29yZGluZ3NUYWJsZVByb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBBbGxBcmNoaXZlZFJlY29yZGluZ3NUYWJsZTogUmVhY3QuRkM8QWxsQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGVQcm9wcz4gPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcblxuICBjb25zdCBbZGlyZWN0b3JpZXMsIHNldERpcmVjdG9yaWVzXSA9IFJlYWN0LnVzZVN0YXRlPF9SZWNvcmRpbmdEaXJlY3RvcnlbXT4oW10pO1xuICBjb25zdCBbc2VhcmNoVGV4dCwgc2V0U2VhcmNoVGV4dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtleHBhbmRlZERpcmVjdG9yaWVzLCBzZXRFeHBhbmRlZERpcmVjdG9yaWVzXSA9IFJlYWN0LnVzZVN0YXRlPF9SZWNvcmRpbmdEaXJlY3RvcnlbXT4oW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IFtzb3J0QnksIGdldFNvcnRQYXJhbXNdID0gdXNlU29ydCgpO1xuXG4gIGNvbnN0IGhhbmRsZURpcmVjdG9yaWVzQW5kQ291bnRzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGRpcmVjdG9yaWVzOiBSZWNvcmRpbmdEaXJlY3RvcnlbXSkgPT4ge1xuICAgICAgc2V0RGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMubWFwKChkaXIpID0+ICh7IC4uLmRpciwgdGFyZ2V0QXNPYnM6IG9mKGdldFRhcmdldEZyb21EaXJlY3RvcnkoZGlyKSkgfSkpKTtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfSxcbiAgICBbc2V0RGlyZWN0b3JpZXMsIHNldElzTG9hZGluZ11cbiAgKTtcblxuICBjb25zdCByZWZyZXNoRGlyZWN0b3JpZXNBbmRDb3VudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQuYXBpLmRvR2V0PFJlY29yZGluZ0RpcmVjdG9yeVtdPignZnMvcmVjb3JkaW5ncycsICdiZXRhJykuc3Vic2NyaWJlKGhhbmRsZURpcmVjdG9yaWVzQW5kQ291bnRzKVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCBzZXRJc0xvYWRpbmcsIGhhbmRsZURpcmVjdG9yaWVzQW5kQ291bnRzXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoc2VhcmNoSW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoVGV4dChzZWFyY2hJbnB1dCk7XG4gICAgfSxcbiAgICBbc2V0U2VhcmNoVGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dENsZWFyID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaFRleHQoJycpO1xuICB9LCBbc2V0U2VhcmNoVGV4dF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVmcmVzaERpcmVjdG9yaWVzQW5kQ291bnRzKCk7XG4gIH0sIFtyZWZyZXNoRGlyZWN0b3JpZXNBbmRDb3VudHNdKTtcblxuICBjb25zdCBzZWFyY2hlZERpcmVjdG9yaWVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHVwZGF0ZWRTZWFyY2hlZERpcmVjdG9yaWVzOiBfUmVjb3JkaW5nRGlyZWN0b3J5W107XG4gICAgaWYgKCFzZWFyY2hUZXh0KSB7XG4gICAgICB1cGRhdGVkU2VhcmNoZWREaXJlY3RvcmllcyA9IGRpcmVjdG9yaWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVwZGF0ZWRTZWFyY2hlZERpcmVjdG9yaWVzID0gZGlyZWN0b3JpZXMuZmlsdGVyKFxuICAgICAgICAoZDogX1JlY29yZGluZ0RpcmVjdG9yeSkgPT5cbiAgICAgICAgICBkLmp2bUlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZm9ybWF0dGVkU2VhcmNoVGV4dCkgfHxcbiAgICAgICAgICBkLmNvbm5lY3RVcmwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmb3JtYXR0ZWRTZWFyY2hUZXh0KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRSZXNvdXJjZXMoXG4gICAgICB7XG4gICAgICAgIGluZGV4OiBzb3J0QnkuaW5kZXggPz8gMCxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3J0QnkuZGlyZWN0aW9uID8/IFNvcnRCeURpcmVjdGlvbi5hc2MsXG4gICAgICB9LFxuICAgICAgdXBkYXRlZFNlYXJjaGVkRGlyZWN0b3JpZXMsXG4gICAgICB0YWJsZUNvbHVtbnNcbiAgICApO1xuICB9LCBbZGlyZWN0b3JpZXMsIHNlYXJjaFRleHQsIHNvcnRCeV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gcmVmcmVzaERpcmVjdG9yaWVzQW5kQ291bnRzKCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIHJlZnJlc2hEaXJlY3Rvcmllc0FuZENvdW50c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJlY29yZGluZ01ldGFkYXRhVXBkYXRlZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgcmVmcmVzaERpcmVjdG9yaWVzQW5kQ291bnRzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgcmVmcmVzaERpcmVjdG9yaWVzQW5kQ291bnRzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQWN0aXZlUmVjb3JkaW5nU2F2ZWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHJlZnJlc2hEaXJlY3Rvcmllc0FuZENvdW50cygpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHJlZnJlc2hEaXJlY3Rvcmllc0FuZENvdW50c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFyY2hpdmVkUmVjb3JkaW5nQ3JlYXRlZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgcmVmcmVzaERpcmVjdG9yaWVzQW5kQ291bnRzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgcmVmcmVzaERpcmVjdG9yaWVzQW5kQ291bnRzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQXJjaGl2ZWRSZWNvcmRpbmdEZWxldGVkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICByZWZyZXNoRGlyZWN0b3JpZXNBbmRDb3VudHMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCByZWZyZXNoRGlyZWN0b3JpZXNBbmRDb3VudHNdKTtcblxuICBjb25zdCB0b2dnbGVFeHBhbmRlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChkaXIpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGluZGV4T2ZEaXJlY3RvcnkoZXhwYW5kZWREaXJlY3RvcmllcywgZGlyKTtcbiAgICAgIHNldEV4cGFuZGVkRGlyZWN0b3JpZXMoKHByZXZFeHBhbmRlZERpcmVjdG9yaWVzKSA9PlxuICAgICAgICBpZHggPj0gMFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAuLi5wcmV2RXhwYW5kZWREaXJlY3Rvcmllcy5zbGljZSgwLCBpZHgpLFxuICAgICAgICAgICAgICAuLi5wcmV2RXhwYW5kZWREaXJlY3Rvcmllcy5zbGljZShpZHggKyAxLCBwcmV2RXhwYW5kZWREaXJlY3Rvcmllcy5sZW5ndGgpLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogWy4uLnByZXZFeHBhbmRlZERpcmVjdG9yaWVzLCBkaXJdXG4gICAgICApO1xuICAgIH0sXG4gICAgW2V4cGFuZGVkRGlyZWN0b3JpZXMsIHNldEV4cGFuZGVkRGlyZWN0b3JpZXNdXG4gICk7XG5cbiAgY29uc3QgZGlyZWN0b3J5Um93cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzZWFyY2hlZERpcmVjdG9yaWVzLm1hcCgoZGlyLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBpbmNsdWRlc0RpcmVjdG9yeShleHBhbmRlZERpcmVjdG9yaWVzLCBkaXIpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VHIga2V5PXtgJHtpZHh9X3BhcmVudGB9PlxuICAgICAgICAgIDxUZFxuICAgICAgICAgICAga2V5PXtgZGlyZWN0b3J5LXRhYmxlLXJvdy0ke2lkeH1fMWB9XG4gICAgICAgICAgICBpZD17YGRpcmVjdG9yeS1leC10b2dnbGUtJHtpZHh9YH1cbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e2BkaXJlY3RvcnktZXgtZXhwYW5kLSR7aWR4fWB9XG4gICAgICAgICAgICBleHBhbmQ9e3tcbiAgICAgICAgICAgICAgcm93SW5kZXg6IGlkeCxcbiAgICAgICAgICAgICAgaXNFeHBhbmRlZDogaXNFeHBhbmRlZCxcbiAgICAgICAgICAgICAgb25Ub2dnbGU6ICgpID0+IHRvZ2dsZUV4cGFuZGVkKGRpciksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRkIGtleT17YGRpcmVjdG9yeS10YWJsZS1yb3ctJHtpZHh9XzJgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1swXS50aXRsZX0+XG4gICAgICAgICAgICA8U3BsaXQgaGFzR3V0dGVyPlxuICAgICAgICAgICAgICA8U3BsaXRJdGVtPlxuICAgICAgICAgICAgICAgIDxUZXh0PntkaXIuY29ubmVjdFVybH08L1RleHQ+XG4gICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgICA8U3BsaXRJdGVtPlxuICAgICAgICAgICAgICAgIDxUb29sdGlwIGhpZGRlbj17IWRpci5qdm1JZH0gY29udGVudD17YEpWTSBoYXNoIElEOiAke2Rpci5qdm1JZH1gfSBhcHBlbmRUbz17cG9ydGFsUm9vdH0+XG4gICAgICAgICAgICAgICAgICA8SGVscEljb24gLz5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgPC9TcGxpdD5cbiAgICAgICAgICA8L1RkPlxuICAgICAgICAgIDxUZCBrZXk9e2BkaXJlY3RvcnktdGFibGUtcm93LSR7aWR4fV8zYH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMV0udGl0bGV9PlxuICAgICAgICAgICAgPEJhZGdlIGtleT17YCR7aWR4fV9jb3VudGB9PntkaXIucmVjb3JkaW5ncy5sZW5ndGggfHwgMH08L0JhZGdlPlxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgIDwvVHI+XG4gICAgICApO1xuICAgIH0pO1xuICB9LCBbdG9nZ2xlRXhwYW5kZWQsIHNlYXJjaGVkRGlyZWN0b3JpZXMsIGV4cGFuZGVkRGlyZWN0b3JpZXNdKTtcblxuICBjb25zdCByZWNvcmRpbmdSb3dzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHNlYXJjaGVkRGlyZWN0b3JpZXMubWFwKChkaXIsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZDogYm9vbGVhbiA9IGluY2x1ZGVzRGlyZWN0b3J5KGV4cGFuZGVkRGlyZWN0b3JpZXMsIGRpcik7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUciBrZXk9e2Ake2lkeH1fY2hpbGRgfSBpc0V4cGFuZGVkPXtpc0V4cGFuZGVkfT5cbiAgICAgICAgICA8VGQga2V5PXtgZGlyZWN0b3J5LWV4LWV4cGFuZC0ke2lkeH1gfSBkYXRhTGFiZWw9eydDb250ZW50IERldGFpbHMnfSBjb2xTcGFuPXt0YWJsZUNvbHVtbnMubGVuZ3RoICsgMX0+XG4gICAgICAgICAgICB7aXNFeHBhbmRlZCA/IChcbiAgICAgICAgICAgICAgPEV4cGFuZGFibGVSb3dDb250ZW50PlxuICAgICAgICAgICAgICAgIDxBcmNoaXZlZFJlY29yZGluZ3NUYWJsZVxuICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5PXtkaXJ9XG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9e2Rpci50YXJnZXRBc09ic31cbiAgICAgICAgICAgICAgICAgIGlzVXBsb2Fkc1RhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGlzTmVzdGVkVGFibGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICBkaXJlY3RvcnlSZWNvcmRpbmdzPXtkaXIucmVjb3JkaW5nc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V4cGFuZGFibGVSb3dDb250ZW50PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgPC9Ucj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH0sIFtzZWFyY2hlZERpcmVjdG9yaWVzLCBleHBhbmRlZERpcmVjdG9yaWVzXSk7XG5cbiAgY29uc3Qgcm93UGFpcnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByb3dQYWlyczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0b3J5Um93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93UGFpcnMucHVzaChkaXJlY3RvcnlSb3dzW2ldKTtcbiAgICAgIHJvd1BhaXJzLnB1c2gocmVjb3JkaW5nUm93c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByb3dQYWlycztcbiAgfSwgW2RpcmVjdG9yeVJvd3MsIHJlY29yZGluZ1Jvd3NdKTtcblxuICBsZXQgdmlldzogSlNYLkVsZW1lbnQ7XG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICB2aWV3ID0gPExvYWRpbmdWaWV3IC8+O1xuICB9IGVsc2UgaWYgKCFzZWFyY2hlZERpcmVjdG9yaWVzLmxlbmd0aCkge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgIE5vIEFyY2hpdmVkIFJlY29yZGluZ3NcbiAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICA8Lz5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8VGFibGVDb21wb3NhYmxlIGFyaWEtbGFiZWw9XCJhbGwtYXJjaGl2ZXMtdGFibGVcIj5cbiAgICAgICAgICA8VGhlYWQ+XG4gICAgICAgICAgICA8VHI+XG4gICAgICAgICAgICAgIDxUaCBrZXk9XCJ0YWJsZS1oZWFkZXItZXhwYW5kXCIgLz5cbiAgICAgICAgICAgICAge3RhYmxlQ29sdW1ucy5tYXAoKHsgdGl0bGUsIHdpZHRoIH0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPFRoXG4gICAgICAgICAgICAgICAgICBrZXk9e2B0YWJsZS1oZWFkZXItJHt0aXRsZX1gfVxuICAgICAgICAgICAgICAgICAgc29ydD17Z2V0U29ydFBhcmFtcyhpbmRleCl9XG4gICAgICAgICAgICAgICAgICB3aWR0aD17d2lkdGggYXMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRoPlsnd2lkdGgnXX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1RyPlxuICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAgPFRib2R5Pntyb3dQYWlyc308L1Rib2R5PlxuICAgICAgICA8L1RhYmxlQ29tcG9zYWJsZT5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VG9vbGJhciBpZD1cImFsbC1hcmNoaXZlcy10b29sYmFyXCI+XG4gICAgICAgIDxUb29sYmFyQ29udGVudD5cbiAgICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgPFNlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hUZXh0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2hJbnB1dH1cbiAgICAgICAgICAgICAgICBvbkNsZWFyPXtoYW5kbGVTZWFyY2hJbnB1dENsZWFyfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICAgIDwvVG9vbGJhcj5cbiAgICAgIHt2aWV3fVxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTG9hZGluZ1ZpZXcgfSBmcm9tICdAYXBwL0xvYWRpbmdWaWV3L0xvYWRpbmdWaWV3JztcbmltcG9ydCB7IEFyY2hpdmVkUmVjb3JkaW5nc1RhYmxlIH0gZnJvbSAnQGFwcC9SZWNvcmRpbmdzL0FyY2hpdmVkUmVjb3JkaW5nc1RhYmxlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgaW5jbHVkZXNUYXJnZXQsIGluZGV4T2ZUYXJnZXQsIGlzRXF1YWxUYXJnZXQsIFRhcmdldCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldERpc2NvdmVyeUV2ZW50IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBoYXNoQ29kZSwgc29ydFJlc291cmNlcywgVGFibGVDb2x1bW4gfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIFRvb2xiYXIsXG4gIFRvb2xiYXJDb250ZW50LFxuICBUb29sYmFyR3JvdXAsXG4gIFRvb2xiYXJJdGVtLFxuICBTZWFyY2hJbnB1dCxcbiAgQmFkZ2UsXG4gIENoZWNrYm94LFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlSWNvbixcbiAgVGl0bGUsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7XG4gIFRhYmxlQ29tcG9zYWJsZSxcbiAgVGgsXG4gIFRoZWFkLFxuICBUYm9keSxcbiAgVHIsXG4gIFRkLFxuICBFeHBhbmRhYmxlUm93Q29udGVudCxcbiAgU29ydEJ5RGlyZWN0aW9uLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXG4gIHtcbiAgICB0aXRsZTogJ1RhcmdldCcsXG4gICAga2V5UGF0aHM6IFsndGFyZ2V0J10sXG4gICAgdHJhbnNmb3JtOiAodGFyZ2V0OiBUYXJnZXQsIF9vYmo6IEFyY2hpdmVzRm9yVGFyZ2V0KSA9PiB7XG4gICAgICByZXR1cm4gdGFyZ2V0LmFsaWFzID09PSB0YXJnZXQuY29ubmVjdFVybCB8fCAhdGFyZ2V0LmFsaWFzXG4gICAgICAgID8gYCR7dGFyZ2V0LmNvbm5lY3RVcmx9YFxuICAgICAgICA6IGAke3RhcmdldC5hbGlhc30gKCR7dGFyZ2V0LmNvbm5lY3RVcmx9KWA7XG4gICAgfSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB3aWR0aDogODAsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0FyY2hpdmVzJyxcbiAgICBrZXlQYXRoczogWydhcmNoaXZlQ291bnQnXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICB3aWR0aDogMTUsXG4gIH0sXG5dO1xuXG50eXBlIEFyY2hpdmVzRm9yVGFyZ2V0ID0ge1xuICB0YXJnZXQ6IFRhcmdldDtcbiAgdGFyZ2V0QXNPYnM6IE9ic2VydmFibGU8VGFyZ2V0PjtcbiAgYXJjaGl2ZUNvdW50OiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsbFRhcmdldHNBcmNoaXZlZFJlY29yZGluZ3NUYWJsZVByb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBBbGxUYXJnZXRzQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGU6IFJlYWN0LkZDPEFsbFRhcmdldHNBcmNoaXZlZFJlY29yZGluZ3NUYWJsZVByb3BzPiA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBbc2VhcmNoVGV4dCwgc2V0U2VhcmNoVGV4dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFthcmNoaXZlc0ZvclRhcmdldHMsIHNldEFyY2hpdmVzRm9yVGFyZ2V0c10gPSBSZWFjdC51c2VTdGF0ZTxBcmNoaXZlc0ZvclRhcmdldFtdPihbXSk7XG4gIGNvbnN0IFtleHBhbmRlZFRhcmdldHMsIHNldEV4cGFuZGVkVGFyZ2V0c10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBUYXJnZXRbXSk7XG4gIGNvbnN0IFtoaWRlRW1wdHlUYXJnZXRzLCBzZXRIaWRlRW1wdHlUYXJnZXRzXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IFtzb3J0QnksIGdldFNvcnRQYXJhbXNdID0gdXNlU29ydCgpO1xuXG4gIGNvbnN0IHVwZGF0ZUNvdW50ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNvbm5lY3RVcmw6IHN0cmluZywgZGVsdGE6IG51bWJlcikgPT4ge1xuICAgICAgc2V0QXJjaGl2ZXNGb3JUYXJnZXRzKChvbGQpID0+IHtcbiAgICAgICAgY29uc3QgaWR4ID0gb2xkLmZpbmRJbmRleCgoeyB0YXJnZXQgfSkgPT4gdGFyZ2V0LmNvbm5lY3RVcmwgPT09IGNvbm5lY3RVcmwpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkID0gb2xkW2lkeF07XG4gICAgICAgICAgb2xkLnNwbGljZShpZHgsIDEsIHsgLi4ubWF0Y2hlZCwgYXJjaGl2ZUNvdW50OiBtYXRjaGVkLmFyY2hpdmVDb3VudCArIGRlbHRhIH0pO1xuICAgICAgICAgIHJldHVybiBbLi4ub2xkXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2xkO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0QXJjaGl2ZXNGb3JUYXJnZXRzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUFyY2hpdmVzRm9yVGFyZ2V0cyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gICAgKHRhcmdldE5vZGVzOiBhbnlbXSkgPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEFyY2hpdmVzRm9yVGFyZ2V0cyhcbiAgICAgICAgdGFyZ2V0Tm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0OiBUYXJnZXQgPSB7XG4gICAgICAgICAgICBjb25uZWN0VXJsOiBub2RlLnRhcmdldC5zZXJ2aWNlVXJpLFxuICAgICAgICAgICAgYWxpYXM6IG5vZGUudGFyZ2V0LmFsaWFzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldEFzT2JzOiBvZih0YXJnZXQpLFxuICAgICAgICAgICAgYXJjaGl2ZUNvdW50OiBub2RlLnJlY29yZGluZ3MuYXJjaGl2ZWQuYWdncmVnYXRlLmNvdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW3NldEFyY2hpdmVzRm9yVGFyZ2V0cywgc2V0SXNMb2FkaW5nXVxuICApO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgY29uc3QgcmVmcmVzaEFyY2hpdmVzRm9yVGFyZ2V0cyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5hcGlcbiAgICAgICAgLmdyYXBocWw8YW55PihcbiAgICAgICAgICBgcXVlcnkgQWxsVGFyZ2V0c0FyY2hpdmVzIHtcbiAgICAgICAgICAgICAgIHRhcmdldE5vZGVzIHtcbiAgICAgICAgICAgICAgICAgdGFyZ2V0IHtcbiAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVXJpXG4gICAgICAgICAgICAgICAgICAgYWxpYXNcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICByZWNvcmRpbmdzIHtcbiAgICAgICAgICAgICAgICAgICBhcmNoaXZlZCB7XG4gICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGUge1xuICAgICAgICAgICAgICAgICAgICAgICBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1gXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUobWFwKCh2KSA9PiB2LmRhdGEudGFyZ2V0Tm9kZXMpKVxuICAgICAgICAuc3Vic2NyaWJlKGhhbmRsZUFyY2hpdmVzRm9yVGFyZ2V0cylcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaSwgc2V0SXNMb2FkaW5nLCBoYW5kbGVBcmNoaXZlc0ZvclRhcmdldHNdKTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gIGNvbnN0IGdldENvdW50Rm9yTmV3VGFyZ2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVGFyZ2V0KSA9PiB7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIGNvbnRleHQuYXBpXG4gICAgICAgICAgLmdyYXBocWw8YW55PihcbiAgICAgICAgICAgIGBcbiAgICAgICAgcXVlcnkgQXJjaGl2ZUNvdW50Rm9yVGFyZ2V0KCRjb25uZWN0VXJsOiBTdHJpbmcpIHtcbiAgICAgICAgICB0YXJnZXROb2RlcyhmaWx0ZXI6IHsgbmFtZTogJGNvbm5lY3RVcmwgfSkge1xuICAgICAgICAgICAgcmVjb3JkaW5ncyB7XG4gICAgICAgICAgICAgIGFyY2hpdmVkIHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGUge1xuICAgICAgICAgICAgICAgICAgY291bnRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1gLFxuICAgICAgICAgICAgeyBjb25uZWN0VXJsOiB0YXJnZXQuY29ubmVjdFVybCB9XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgICAgIHNldEFyY2hpdmVzRm9yVGFyZ2V0cygob2xkKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4ub2xkLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0QXNPYnM6IG9mKHRhcmdldCksXG4gICAgICAgICAgICAgICAgICBhcmNoaXZlQ291bnQ6IHYuZGF0YS50YXJnZXROb2Rlc1swXS5yZWNvcmRpbmdzLmFyY2hpdmVkLmFnZ3JlZ2F0ZS5jb3VudCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaV1cbiAgKTtcblxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgY29uc3QgaGFuZGxlTG9zdFRhcmdldCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0YXJnZXQ6IFRhcmdldCkgPT4ge1xuICAgICAgc2V0QXJjaGl2ZXNGb3JUYXJnZXRzKChvbGQpID0+IG9sZC5maWx0ZXIoKHsgdGFyZ2V0OiB0IH0pID0+ICFpc0VxdWFsVGFyZ2V0KHQsIHRhcmdldCkpKTtcbiAgICAgIHNldEV4cGFuZGVkVGFyZ2V0cygob2xkKSA9PiBvbGQuZmlsdGVyKCh0KSA9PiAhaXNFcXVhbFRhcmdldCh0LCB0YXJnZXQpKSk7XG4gICAgfSxcbiAgICBbc2V0QXJjaGl2ZXNGb3JUYXJnZXRzLCBzZXRFeHBhbmRlZFRhcmdldHNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGFyZ2V0Tm90aWZpY2F0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2dDogVGFyZ2V0RGlzY292ZXJ5RXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldDogVGFyZ2V0ID0ge1xuICAgICAgICBjb25uZWN0VXJsOiBldnQuc2VydmljZVJlZi5jb25uZWN0VXJsLFxuICAgICAgICBhbGlhczogZXZ0LnNlcnZpY2VSZWYuYWxpYXMsXG4gICAgICB9O1xuICAgICAgaWYgKGV2dC5raW5kID09PSAnRk9VTkQnKSB7XG4gICAgICAgIGdldENvdW50Rm9yTmV3VGFyZ2V0KHRhcmdldCk7XG4gICAgICB9IGVsc2UgaWYgKGV2dC5raW5kID09PSAnTU9ESUZJRUQnKSB7XG4gICAgICAgIHNldEFyY2hpdmVzRm9yVGFyZ2V0cygob2xkKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gb2xkLmZpbmRJbmRleCgoeyB0YXJnZXQ6IHQgfSkgPT4gaXNFcXVhbFRhcmdldCh0LCB0YXJnZXQpKTtcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBvbGRbaWR4XTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY29ubmVjdFVybCA9PT0gbWF0Y2hlZC50YXJnZXQuY29ubmVjdFVybCAmJiB0YXJnZXQuYWxpYXMgPT09IG1hdGNoZWQudGFyZ2V0LmFsaWFzKSB7XG4gICAgICAgICAgICAgIC8vIElmIGFsaWFzIGFuZCBjb25uZWN0VXJsIGFyZSBub3QgdXBkYXRlZCwgaWdub3JlIGNoYW5nZXMuXG4gICAgICAgICAgICAgIHJldHVybiBvbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2xkLnNwbGljZShpZHgsIDEsIHsgLi4ubWF0Y2hlZCwgdGFyZ2V0OiB0YXJnZXQsIHRhcmdldEFzT2JzOiBvZih0YXJnZXQpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2xkO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZ0LmtpbmQgPT09ICdMT1NUJykge1xuICAgICAgICBoYW5kbGVMb3N0VGFyZ2V0KHRhcmdldCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0QXJjaGl2ZXNGb3JUYXJnZXRzLCBnZXRDb3VudEZvck5ld1RhcmdldCwgaGFuZGxlTG9zdFRhcmdldF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChzZWFyY2hJbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWFyY2hUZXh0KHNlYXJjaElucHV0KTtcbiAgICB9LFxuICAgIFtzZXRTZWFyY2hUZXh0XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaElucHV0Q2xlYXIgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VhcmNoVGV4dCgnJyk7XG4gIH0sIFtzZXRTZWFyY2hUZXh0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWZyZXNoQXJjaGl2ZXNGb3JUYXJnZXRzKCk7XG4gIH0sIFtyZWZyZXNoQXJjaGl2ZXNGb3JUYXJnZXRzXSk7XG5cbiAgY29uc3Qgc2VhcmNoZWRBcmNoaXZlc0ZvclRhcmdldHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgdXBkYXRlZDogQXJjaGl2ZXNGb3JUYXJnZXRbXTtcbiAgICBpZiAoIXNlYXJjaFRleHQpIHtcbiAgICAgIHVwZGF0ZWQgPSBhcmNoaXZlc0ZvclRhcmdldHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFNlYXJjaFRleHQgPSBzZWFyY2hUZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdXBkYXRlZCA9IGFyY2hpdmVzRm9yVGFyZ2V0cy5maWx0ZXIoXG4gICAgICAgICh7IHRhcmdldDogdCB9KSA9PlxuICAgICAgICAgIHQuYWxpYXMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmb3JtYXR0ZWRTZWFyY2hUZXh0KSB8fFxuICAgICAgICAgIHQuY29ubmVjdFVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZvcm1hdHRlZFNlYXJjaFRleHQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc29ydFJlc291cmNlcyhcbiAgICAgIHtcbiAgICAgICAgaW5kZXg6IHNvcnRCeS5pbmRleCA/PyAwLFxuICAgICAgICBkaXJlY3Rpb246IHNvcnRCeS5kaXJlY3Rpb24gPz8gU29ydEJ5RGlyZWN0aW9uLmFzYyxcbiAgICAgIH0sXG4gICAgICB1cGRhdGVkLmZpbHRlcigodikgPT4gIWhpZGVFbXB0eVRhcmdldHMgfHwgdi5hcmNoaXZlQ291bnQgPiAwKSxcbiAgICAgIHRhYmxlQ29sdW1uc1xuICAgICk7XG4gIH0sIFtzZWFyY2hUZXh0LCBhcmNoaXZlc0ZvclRhcmdldHMsIHNvcnRCeSwgaGlkZUVtcHR5VGFyZ2V0c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gcmVmcmVzaEFyY2hpdmVzRm9yVGFyZ2V0cygpLFxuICAgICAgY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFBlcmlvZCgpICogY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFVuaXRzKClcbiAgICApO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpZCk7XG4gIH0sIFtjb250ZXh0LnRhcmdldCwgY29udGV4dC5zZXR0aW5ncywgcmVmcmVzaEFyY2hpdmVzRm9yVGFyZ2V0c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsXG4gICAgICAgIC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRKdm1EaXNjb3ZlcnkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHYpID0+IGhhbmRsZVRhcmdldE5vdGlmaWNhdGlvbih2Lm1lc3NhZ2UuZXZlbnQpKVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgaGFuZGxlVGFyZ2V0Tm90aWZpY2F0aW9uXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQWN0aXZlUmVjb3JkaW5nU2F2ZWQpLnN1YnNjcmliZSgodikgPT4ge1xuICAgICAgICB1cGRhdGVDb3VudCh2Lm1lc3NhZ2UudGFyZ2V0LCAxKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCB1cGRhdGVDb3VudF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFyY2hpdmVkUmVjb3JkaW5nQ3JlYXRlZCkuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICAgIHVwZGF0ZUNvdW50KHYubWVzc2FnZS50YXJnZXQsIDEpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHVwZGF0ZUNvdW50XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQXJjaGl2ZWRSZWNvcmRpbmdEZWxldGVkKS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgdXBkYXRlQ291bnQodi5tZXNzYWdlLnRhcmdldCwgLTEpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHVwZGF0ZUNvdW50XSk7XG5cbiAgY29uc3QgdG9nZ2xlRXhwYW5kZWQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBpbmRleE9mVGFyZ2V0KGV4cGFuZGVkVGFyZ2V0cywgdGFyZ2V0KTtcbiAgICAgIHNldEV4cGFuZGVkVGFyZ2V0cygoZXhwYW5kZWRUYXJnZXRzKSA9PlxuICAgICAgICBpZHggPj0gMFxuICAgICAgICAgID8gWy4uLmV4cGFuZGVkVGFyZ2V0cy5zbGljZSgwLCBpZHgpLCAuLi5leHBhbmRlZFRhcmdldHMuc2xpY2UoaWR4ICsgMSwgZXhwYW5kZWRUYXJnZXRzLmxlbmd0aCldXG4gICAgICAgICAgOiBbLi4uZXhwYW5kZWRUYXJnZXRzLCB0YXJnZXRdXG4gICAgICApO1xuICAgIH0sXG4gICAgW2V4cGFuZGVkVGFyZ2V0cywgc2V0RXhwYW5kZWRUYXJnZXRzXVxuICApO1xuXG4gIGNvbnN0IHRhcmdldFJvd3MgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gc2VhcmNoZWRBcmNoaXZlc0ZvclRhcmdldHMubWFwKCh7IHRhcmdldCwgYXJjaGl2ZUNvdW50IH0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZDogYm9vbGVhbiA9IGluY2x1ZGVzVGFyZ2V0KGV4cGFuZGVkVGFyZ2V0cywgdGFyZ2V0KTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRyIGtleT17YCR7aWR4fV9wYXJlbnRgfT5cbiAgICAgICAgICA8VGRcbiAgICAgICAgICAgIGtleT17YHRhcmdldC10YWJsZS1yb3ctJHtpZHh9XzFgfVxuICAgICAgICAgICAgaWQ9e2B0YXJnZXQtZXgtdG9nZ2xlLSR7aWR4fWB9XG4gICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtgdGFyZ2V0LWV4LWV4cGFuZC0ke2lkeH1gfVxuICAgICAgICAgICAgZXhwYW5kPXt7XG4gICAgICAgICAgICAgIHJvd0luZGV4OiBpZHgsXG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ6IGlzRXhwYW5kZWQsXG4gICAgICAgICAgICAgIG9uVG9nZ2xlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlRXhwYW5kZWQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8VGQga2V5PXtgdGFyZ2V0LXRhYmxlLXJvdy0ke2lkeH1fMmB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzBdLnRpdGxlfT5cbiAgICAgICAgICAgIHt0YXJnZXQuYWxpYXMgPT0gdGFyZ2V0LmNvbm5lY3RVcmwgfHwgIXRhcmdldC5hbGlhc1xuICAgICAgICAgICAgICA/IGAke3RhcmdldC5jb25uZWN0VXJsfWBcbiAgICAgICAgICAgICAgOiBgJHt0YXJnZXQuYWxpYXN9ICgke3RhcmdldC5jb25uZWN0VXJsfSlgfVxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgICAgPFRkIGtleT17YHRhcmdldC10YWJsZS1yb3ctJHtpZHh9XzNgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1sxXS50aXRsZX0+XG4gICAgICAgICAgICA8QmFkZ2Uga2V5PXtgJHtpZHh9X2NvdW50YH0+e2FyY2hpdmVDb3VudH08L0JhZGdlPlxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgIDwvVHI+XG4gICAgICApO1xuICAgIH0pO1xuICB9LCBbdG9nZ2xlRXhwYW5kZWQsIHNlYXJjaGVkQXJjaGl2ZXNGb3JUYXJnZXRzLCBleHBhbmRlZFRhcmdldHNdKTtcblxuICBjb25zdCByZWNvcmRpbmdSb3dzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHNlYXJjaGVkQXJjaGl2ZXNGb3JUYXJnZXRzLm1hcCgoeyB0YXJnZXQsIHRhcmdldEFzT2JzIH0pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBpbmNsdWRlc1RhcmdldChleHBhbmRlZFRhcmdldHMsIHRhcmdldCk7XG4gICAgICBjb25zdCBrZXlCYXNlID0gaGFzaENvZGUoSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VHIga2V5PXtgY2hpbGQtJHtrZXlCYXNlfWB9IGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9PlxuICAgICAgICAgIDxUZCBrZXk9e2B0YXJnZXQtZXgtZXhwYW5kLSR7a2V5QmFzZX1gfSBkYXRhTGFiZWw9eydDb250ZW50IERldGFpbHMnfSBjb2xTcGFuPXt0YWJsZUNvbHVtbnMubGVuZ3RoICsgMX0+XG4gICAgICAgICAgICB7aXNFeHBhbmRlZCA/IChcbiAgICAgICAgICAgICAgPEV4cGFuZGFibGVSb3dDb250ZW50PlxuICAgICAgICAgICAgICAgIDxBcmNoaXZlZFJlY29yZGluZ3NUYWJsZSB0YXJnZXQ9e3RhcmdldEFzT2JzfSBpc1VwbG9hZHNUYWJsZT17ZmFsc2V9IGlzTmVzdGVkVGFibGU9e3RydWV9IC8+XG4gICAgICAgICAgICAgIDwvRXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1RkPlxuICAgICAgICA8L1RyPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfSwgW3NlYXJjaGVkQXJjaGl2ZXNGb3JUYXJnZXRzLCBleHBhbmRlZFRhcmdldHNdKTtcblxuICBjb25zdCByb3dQYWlycyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJvd1BhaXJzOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dQYWlycy5wdXNoKHRhcmdldFJvd3NbaV0pO1xuICAgICAgcm93UGFpcnMucHVzaChyZWNvcmRpbmdSb3dzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd1BhaXJzO1xuICB9LCBbdGFyZ2V0Um93cywgcmVjb3JkaW5nUm93c10pO1xuXG4gIGxldCB2aWV3OiBKU1guRWxlbWVudDtcbiAgaWYgKGlzTG9hZGluZykge1xuICAgIHZpZXcgPSA8TG9hZGluZ1ZpZXcgLz47XG4gIH0gZWxzZSBpZiAoIXNlYXJjaGVkQXJjaGl2ZXNGb3JUYXJnZXRzLmxlbmd0aCkge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgIE5vIFRhcmdldHNcbiAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICA8Lz5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHZpZXcgPSAoXG4gICAgICA8PlxuICAgICAgICA8VGFibGVDb21wb3NhYmxlIGFyaWEtbGFiZWw9XCJhbGwtdGFyZ2V0cy10YWJsZVwiPlxuICAgICAgICAgIDxUaGVhZD5cbiAgICAgICAgICAgIDxUcj5cbiAgICAgICAgICAgICAgPFRoIGtleT1cInRhYmxlLWhlYWRlci1leHBhbmRcIiAvPlxuICAgICAgICAgICAgICB7dGFibGVDb2x1bW5zLm1hcCgoeyB0aXRsZSwgd2lkdGggfSwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgPFRoXG4gICAgICAgICAgICAgICAgICBrZXk9e2B0YWJsZS1oZWFkZXItJHt0aXRsZX1gfVxuICAgICAgICAgICAgICAgICAgd2lkdGg9e3dpZHRoIGFzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUaD5bJ3dpZHRoJ119XG4gICAgICAgICAgICAgICAgICBzb3J0PXtnZXRTb3J0UGFyYW1zKGlkeCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvVGg+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9Ucj5cbiAgICAgICAgICA8L1RoZWFkPlxuICAgICAgICAgIDxUYm9keT57cm93UGFpcnN9PC9UYm9keT5cbiAgICAgICAgPC9UYWJsZUNvbXBvc2FibGU+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRvb2xiYXIgaWQ9XCJhbGwtdGFyZ2V0cy10b29sYmFyXCI+XG4gICAgICAgIDxUb29sYmFyQ29udGVudD5cbiAgICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgPFNlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hUZXh0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2hJbnB1dH1cbiAgICAgICAgICAgICAgICBvbkNsZWFyPXtoYW5kbGVTZWFyY2hJbnB1dENsZWFyfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICAgICAgICA8VG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBuYW1lPXtgYWxsLXRhcmdldHMtaGlkZS1jaGVja2B9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJIaWRlIHRhcmdldHMgd2l0aCB6ZXJvIHJlY29yZGluZ3NcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRIaWRlRW1wdHlUYXJnZXRzfVxuICAgICAgICAgICAgICAgIGlzQ2hlY2tlZD17aGlkZUVtcHR5VGFyZ2V0c31cbiAgICAgICAgICAgICAgICBpZD17YGFsbC10YXJnZXRzLWhpZGUtY2hlY2tgfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BhbGwtdGFyZ2V0cy1oaWRlLWNoZWNrYH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgIDwvVG9vbGJhckNvbnRlbnQ+XG4gICAgICA8L1Rvb2xiYXI+XG4gICAgICB7dmlld31cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEJyZWFkY3J1bWJQYWdlIH0gZnJvbSAnQGFwcC9CcmVhZGNydW1iUGFnZS9CcmVhZGNydW1iUGFnZSc7XG5pbXBvcnQgeyBBcmNoaXZlZFJlY29yZGluZ3NUYWJsZSB9IGZyb20gJ0BhcHAvUmVjb3JkaW5ncy9BcmNoaXZlZFJlY29yZGluZ3NUYWJsZSc7XG5pbXBvcnQgeyBVUExPQURTX1NVQkRJUkVDVE9SWSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUYWIsIHN3aXRjaFRhYiB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZEJvZHksIEVtcHR5U3RhdGUsIEVtcHR5U3RhdGVJY29uLCBUYWIsIFRhYnMsIFRhYlRpdGxlVGV4dCwgVGl0bGUgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5LCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFsbEFyY2hpdmVkUmVjb3JkaW5nc1RhYmxlIH0gZnJvbSAnLi9BbGxBcmNoaXZlZFJlY29yZGluZ3NUYWJsZSc7XG5pbXBvcnQgeyBBbGxUYXJnZXRzQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGUgfSBmcm9tICcuL0FsbFRhcmdldHNBcmNoaXZlZFJlY29yZGluZ3NUYWJsZSc7XG4vKlxuICBUaGlzIHNwZWNpZmljIHRhcmdldCBpcyB1c2VkIGFzIHRoZSBcInNvdXJjZVwiIGZvciB0aGUgVXBsb2FkcyB2ZXJzaW9uIG9mIHRoZSBBcmNoaXZlZFJlY29yZGluZ3NUYWJsZS5cbiAgVGhlIGNvbm5lY3RVcmwgaXMgdGhlICd1cGxvYWRzJyBiZWNhdXNlIGZvciBhY3Rpb25zIHBlcmZvcm1lZCBvbiB1cGxvYWRlZCBhcmNoaXZlZCByZWNvcmRpbmdzLFxuICB0aGUgYmFja2VuZCBpc3N1ZXMgYSBub3RpZmljYXRpb24gd2l0aCB0aGUgXCJ0YXJnZXRcIiBmaWVsZCBzZXQgdG8gdGhlICd1cGxvYWRzJywgc2lnbmFsbGluZyB0aGF0IFxuICB0aGVzZSByZWNvcmRpbmdzIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0YXJnZXQuIFdlIGNhbiB0aGVuIG1hdGNoIG9uIHRoZSAndXBsb2Fkcycgd2hlbiBwZXJmb3JtaW5nXG4gIG5vdGlmaWNhdGlvbiBoYW5kbGluZyBpbiB0aGUgQXJjaGl2ZWRSZWNvcmRpbmdzVGFibGUuXG4qL1xuZXhwb3J0IGNvbnN0IHVwbG9hZEFzVGFyZ2V0OiBUYXJnZXQgPSB7XG4gIGNvbm5lY3RVcmw6IFVQTE9BRFNfU1VCRElSRUNUT1JZLFxuICBhbGlhczogJycsXG59O1xuXG5lbnVtIEFyY2hpdmVUYWIge1xuICBBTExfQVJDSElWRVMgPSAnYWxsLWFyY2hpdmVzJyxcbiAgQUxMX1RBUkdFVFMgPSAnYWxsLXRhcmdldHMnLFxuICBVUExPQURTID0gJ3VwbG9hZHMnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFyY2hpdmVzUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IEFyY2hpdmVzOiBSZWFjdC5GQzxBcmNoaXZlc1Byb3BzPiA9ICh7IC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgeyBzZWFyY2gsIHBhdGhuYW1lIH0gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcblxuICBjb25zdCBhY3RpdmVUYWIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZ2V0QWN0aXZlVGFiKHNlYXJjaCwgJ3RhYicsIE9iamVjdC52YWx1ZXMoQXJjaGl2ZVRhYiksIEFyY2hpdmVUYWIuQUxMX1RBUkdFVFMpO1xuICB9LCBbc2VhcmNoXSk7XG5cbiAgY29uc3QgW2FyY2hpdmVFbmFibGVkLCBzZXRBcmNoaXZlRW5hYmxlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oY29udGV4dC5hcGkuaXNBcmNoaXZlRW5hYmxlZCgpLnN1YnNjcmliZShzZXRBcmNoaXZlRW5hYmxlZCkpO1xuICB9LCBbY29udGV4dC5hcGksIGFkZFN1YnNjcmlwdGlvbiwgc2V0QXJjaGl2ZUVuYWJsZWRdKTtcblxuICBjb25zdCBvblRhYlNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfOiBSZWFjdC5Nb3VzZUV2ZW50LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT5cbiAgICAgIHN3aXRjaFRhYihoaXN0b3J5LCBwYXRobmFtZSwgc2VhcmNoLCB7IHRhYktleTogJ3RhYicsIHRhYlZhbHVlOiBgJHtrZXl9YCB9KSxcbiAgICBbaGlzdG9yeSwgcGF0aG5hbWUsIHNlYXJjaF1cbiAgKTtcblxuICBjb25zdCB1cGxvYWRUYXJnZXRBc09icyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gb2YodXBsb2FkQXNUYXJnZXQpLCBbXSk7XG5cbiAgY29uc3QgY2FyZEJvZHkgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYXJjaGl2ZUVuYWJsZWQgPyAoXG4gICAgICA8VGFicyBpZD1cImFyY2hpdmVzXCIgYWN0aXZlS2V5PXthY3RpdmVUYWJ9IG9uU2VsZWN0PXtvblRhYlNlbGVjdH0gdW5tb3VudE9uRXhpdD5cbiAgICAgICAgPFRhYiBpZD1cImFsbC10YXJnZXRzXCIgZXZlbnRLZXk9e0FyY2hpdmVUYWIuQUxMX1RBUkdFVFN9IHRpdGxlPXs8VGFiVGl0bGVUZXh0PkFsbCBUYXJnZXRzPC9UYWJUaXRsZVRleHQ+fT5cbiAgICAgICAgICA8QWxsVGFyZ2V0c0FyY2hpdmVkUmVjb3JkaW5nc1RhYmxlIC8+XG4gICAgICAgIDwvVGFiPlxuICAgICAgICA8VGFiIGlkPVwiYWxsLWFyY2hpdmVzXCIgZXZlbnRLZXk9e0FyY2hpdmVUYWIuQUxMX0FSQ0hJVkVTfSB0aXRsZT17PFRhYlRpdGxlVGV4dD5BbGwgQXJjaGl2ZXM8L1RhYlRpdGxlVGV4dD59PlxuICAgICAgICAgIDxBbGxBcmNoaXZlZFJlY29yZGluZ3NUYWJsZSAvPlxuICAgICAgICA8L1RhYj5cbiAgICAgICAgPFRhYiBpZD1cInVwbG9hZHNcIiBldmVudEtleT17QXJjaGl2ZVRhYi5VUExPQURTfSB0aXRsZT17PFRhYlRpdGxlVGV4dD5VcGxvYWRzPC9UYWJUaXRsZVRleHQ+fT5cbiAgICAgICAgICA8QXJjaGl2ZWRSZWNvcmRpbmdzVGFibGUgdGFyZ2V0PXt1cGxvYWRUYXJnZXRBc09ic30gaXNVcGxvYWRzVGFibGU9e3RydWV9IGlzTmVzdGVkVGFibGU9e2ZhbHNlfSAvPlxuICAgICAgICA8L1RhYj5cbiAgICAgIDwvVGFicz5cbiAgICApIDogKFxuICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgIDxFbXB0eVN0YXRlSWNvbiBpY29uPXtTZWFyY2hJY29ufSAvPlxuICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICBBcmNoaXZlcyBVbmF2YWlsYWJsZVxuICAgICAgICA8L1RpdGxlPlxuICAgICAgPC9FbXB0eVN0YXRlPlxuICAgICk7XG4gIH0sIFthcmNoaXZlRW5hYmxlZCwgYWN0aXZlVGFiLCB1cGxvYWRUYXJnZXRBc09icywgb25UYWJTZWxlY3RdKTtcblxuICByZXR1cm4gKFxuICAgIDxCcmVhZGNydW1iUGFnZSB7Li4ucHJvcHN9IHBhZ2VUaXRsZT1cIkFyY2hpdmVzXCI+XG4gICAgICA8Q2FyZD5cbiAgICAgICAgPENhcmRCb2R5PntjYXJkQm9keX08L0NhcmRCb2R5PlxuICAgICAgPC9DYXJkPlxuICAgIDwvQnJlYWRjcnVtYlBhZ2U+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcmNoaXZlcztcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTGluZWFyRG90U3Bpbm5lciB9IGZyb20gJ0BhcHAvU2hhcmVkL0xpbmVhckRvdFNwaW5uZXInO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBnZXRUYXJnZXRSZXByZXNlbnRhdGlvbiwgaXNFcXVhbFRhcmdldCwgTk9fVEFSR0VULCBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRGcm9tTG9jYWxTdG9yYWdlLCByZW1vdmVGcm9tTG9jYWxTdG9yYWdlLCBzYXZlVG9Mb2NhbFN0b3JhZ2UgfSBmcm9tICdAYXBwL3V0aWxzL0xvY2FsU3RvcmFnZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IEJ1dHRvbiwgRGl2aWRlciwgU2VsZWN0LCBTZWxlY3RHcm91cCwgU2VsZWN0T3B0aW9uLCBTZWxlY3RWYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmV4cG9ydCBjb25zdCBUYXJnZXRDb250ZXh0U2VsZWN0b3I6IFJlYWN0LkZDPHsgY2xhc3NOYW1lPzogc3RyaW5nIH0+ID0gKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFt0YXJnZXRzLCBzZXRUYXJnZXRzXSA9IFJlYWN0LnVzZVN0YXRlPFRhcmdldFtdPihbXSk7XG4gIGNvbnN0IFtzZWxlY3RlZFRhcmdldCwgc2V0U2VsZWN0ZWRUYXJnZXRdID0gUmVhY3QudXNlU3RhdGU8VGFyZ2V0PihOT19UQVJHRVQpO1xuICBjb25zdCBbZmF2b3JpdGVzLCBzZXRGYXZvcml0ZXNdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nW10+KGdldEZyb21Mb2NhbFN0b3JhZ2UoJ1RBUkdFVF9GQVZPUklURVMnLCBbXSkpO1xuICBjb25zdCBbaXNUYXJnZXRPcGVuLCBzZXRJc1RhcmdldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRJc1RhcmdldE9wZW4oKG9sZCkgPT4gIW9sZCksIFtzZXRJc1RhcmdldE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVUYXJnZXRTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgeyB0YXJnZXQgfSwgaXNQbGFjZWhvbGRlcikgPT4ge1xuICAgICAgc2V0SXNUYXJnZXRPcGVuKGZhbHNlKTtcbiAgICAgIGNvbnN0IHRvU2VsZWN0OiBUYXJnZXQgPSBpc1BsYWNlaG9sZGVyID8gTk9fVEFSR0VUIDogdGFyZ2V0O1xuICAgICAgaWYgKCFpc0VxdWFsVGFyZ2V0KHRvU2VsZWN0LCBzZWxlY3RlZFRhcmdldCkpIHtcbiAgICAgICAgY29udGV4dC50YXJnZXQuc2V0VGFyZ2V0KHRvU2VsZWN0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRJc1RhcmdldE9wZW4sIHNlbGVjdGVkVGFyZ2V0LCBjb250ZXh0LnRhcmdldF1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0LnRhcmdldCgpLnN1YnNjcmliZSgodGFyZ2V0KSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkVGFyZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICh0YXJnZXQgIT09IE5PX1RBUkdFVCkge1xuICAgICAgICAgIC8vIE9ubHkgc2F2ZSB0byBsb2NhbCBzdG9yYWdlIHdoZW4gdGFyZ2V0IGlzIHZhbGlkXG4gICAgICAgICAgLy8gTk9fVEFSR0VUIHdpbGwgY2xlYXIgc3RvcmFnZVxuICAgICAgICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnVEFSR0VUJywgdGFyZ2V0LmNvbm5lY3RVcmwpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0LCBzZXRTZWxlY3RlZFRhcmdldF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0cy50YXJnZXRzKCkuc3Vic2NyaWJlKHNldFRhcmdldHMpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC50YXJnZXRzLCBzZXRUYXJnZXRzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXRhcmdldHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlZFRhcmdldFVybCA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoJ1RBUkdFVCcsIE5PX1RBUkdFVCk7XG4gICAgY29uc3QgbWF0Y2hlZFRhcmdldCA9IHRhcmdldHMuZmluZCgodCkgPT4gdC5jb25uZWN0VXJsID09PSBjYWNoZWRUYXJnZXRVcmwpO1xuXG4gICAgaWYgKG1hdGNoZWRUYXJnZXQpIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0LnNldFRhcmdldChtYXRjaGVkVGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC50YXJnZXQuc2V0VGFyZ2V0KE5PX1RBUkdFVCk7XG4gICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKCdUQVJHRVQnKTtcbiAgICB9XG4gICAgc2V0RmF2b3JpdGVzKChvbGQpID0+IG9sZC5maWx0ZXIoKGYpID0+IHRhcmdldHMuc29tZSgodCkgPT4gdC5jb25uZWN0VXJsID09PSBmKSkpO1xuICB9LCBbdGFyZ2V0cywgY29udGV4dC50YXJnZXQsIHNldEZhdm9yaXRlc10pO1xuXG4gIGNvbnN0IHJlZnJlc2hUYXJnZXRMaXN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0cy5xdWVyeUZvclRhcmdldHMoKS5zdWJzY3JpYmUoKCkgPT4gc2V0TG9hZGluZyhmYWxzZSkpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC50YXJnZXRzLCBzZXRMb2FkaW5nXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRleHQuc2V0dGluZ3MuYXV0b1JlZnJlc2hFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoXG4gICAgICAoKSA9PiByZWZyZXNoVGFyZ2V0TGlzdCgpLFxuICAgICAgY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFBlcmlvZCgpICogY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFVuaXRzKClcbiAgICApO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpZCk7XG4gIH0sIFtjb250ZXh0LnNldHRpbmdzLCByZWZyZXNoVGFyZ2V0TGlzdF0pO1xuXG4gIGNvbnN0IG5vT3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gdGFyZ2V0cy5sZW5ndGggPT09IDAsIFt0YXJnZXRzXSk7XG5cbiAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChub09wdGlvbnMpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIDxTZWxlY3RPcHRpb24ga2V5PXsnbm8tdGFyZ2V0LWZvdW5kJ30gaXNQbGFjZWhvbGRlciBpc0Rpc2FibGVkPlxuICAgICAgICAgIE5vIHRhcmdldCBmb3VuZFxuICAgICAgICA8L1NlbGVjdE9wdGlvbj4sXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IGZhdlNldCA9IG5ldyBTZXQoZmF2b3JpdGVzKTtcblxuICAgIGNvbnN0IGdyb3VwTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICB0YXJnZXRzLmZvckVhY2goKHQpID0+IGdyb3VwTmFtZXMuYWRkKHQuYW5ub3RhdGlvbnM/LmNyeW9zdGF0WydSRUFMTSddIHx8ICdPdGhlcnMnKSk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gQXJyYXkuZnJvbShncm91cE5hbWVzKVxuICAgICAgLm1hcCgobmFtZSkgPT4gKFxuICAgICAgICA8U2VsZWN0R3JvdXAga2V5PXtuYW1lfSBsYWJlbD17bmFtZX0+XG4gICAgICAgICAge3RhcmdldHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHQpID0+ICh0LmFubm90YXRpb25zPy5jcnlvc3RhdFsnUkVBTE0nXSB8fCAnT3RoZXJzJykgPT09IG5hbWUpXG4gICAgICAgICAgICAubWFwKCh0OiBUYXJnZXQpID0+IChcbiAgICAgICAgICAgICAgPFNlbGVjdE9wdGlvblxuICAgICAgICAgICAgICAgIGlzRmF2b3JpdGU9e2ZhdlNldC5oYXModC5jb25uZWN0VXJsKX1cbiAgICAgICAgICAgICAgICBpZD17dC5jb25uZWN0VXJsfVxuICAgICAgICAgICAgICAgIGtleT17dC5jb25uZWN0VXJsfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gZ2V0VGFyZ2V0UmVwcmVzZW50YXRpb24odCksXG4gICAgICAgICAgICAgICAgICBjb21wYXJlVG86IChvdGhlcikgPT4gb3RoZXIudGFyZ2V0LmNvbm5lY3RVcmwgPT09IHQuY29ubmVjdFVybCxcbiAgICAgICAgICAgICAgICAgIC4uLnsgdGFyZ2V0OiB0IH0sIC8vIEJ5cGFzc2luZyB0eXBlIGNoZWNrc1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9TZWxlY3RHcm91cD5cbiAgICAgICkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYCR7YS5wcm9wc1snbGFiZWwnXX1gLmxvY2FsZUNvbXBhcmUoYCR7Yi5wcm9wc1snbGFiZWwnXX1gKSk7XG5cbiAgICBjb25zdCBmYXZHcm91cCA9IGZhdm9yaXRlcy5sZW5ndGhcbiAgICAgID8gW1xuICAgICAgICAgIDxTZWxlY3RHcm91cCBrZXk9eydGYXZvcml0ZXMnfSBsYWJlbD17J0Zhdm9yaXRlcyd9PlxuICAgICAgICAgICAge2Zhdm9yaXRlc1xuICAgICAgICAgICAgICAubWFwKChmKSA9PiB0YXJnZXRzLmZpbmQoKHQpID0+IHQuY29ubmVjdFVybCA9PT0gZikpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHQpID0+IHQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgLm1hcCgodDogVGFyZ2V0KSA9PiAoXG4gICAgICAgICAgICAgICAgPFNlbGVjdE9wdGlvblxuICAgICAgICAgICAgICAgICAgaXNGYXZvcml0ZVxuICAgICAgICAgICAgICAgICAgaWQ9e3QuY29ubmVjdFVybH1cbiAgICAgICAgICAgICAgICAgIGtleT17YGZhdm9yaXRlZC0ke3QuY29ubmVjdFVybH1gfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IGdldFRhcmdldFJlcHJlc2VudGF0aW9uKHQpLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlVG86IChvdGhlcikgPT4gb3RoZXIudGFyZ2V0LmNvbm5lY3RVcmwgPT09IHQuY29ubmVjdFVybCxcbiAgICAgICAgICAgICAgICAgICAgLi4ueyB0YXJnZXQ6IHQgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TZWxlY3RHcm91cD4sXG4gICAgICAgICAgPERpdmlkZXIga2V5PXsnZmF2b3JpdGUtZGl2aWRlcid9IC8+LFxuICAgICAgICBdXG4gICAgICA6IFtdO1xuXG4gICAgcmV0dXJuIGZhdkdyb3VwLmNvbmNhdChvcHRpb25zKTtcbiAgfSwgW3RhcmdldHMsIG5vT3B0aW9ucywgZmF2b3JpdGVzXSk7XG5cbiAgY29uc3QgaGFuZGxlVGFyZ2V0RmlsdGVyID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghdmFsdWUgfHwgbm9PcHRpb25zKSB7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgZW1wdHkgb3B0aW9ucywgcGxhY2Vob2xkZXIgaXMgcmV0dXJuZWQuXG4gICAgICAgIHJldHVybiBzZWxlY3RPcHRpb25zO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaEV4cCA9IG5ldyBSZWdFeHAodmFsdWUsICdpJyk7XG4gICAgICByZXR1cm4gc2VsZWN0T3B0aW9uc1xuICAgICAgICAuZmlsdGVyKChncnApID0+IGdycC5wcm9wcy5jaGlsZHJlbilcbiAgICAgICAgLm1hcCgoZ3JwKSA9PlxuICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChncnAsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBncnAucHJvcHMuY2hpbGRyZW4uZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IG9wdGlvbi5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRXhwLnRlc3QodGFyZ2V0LmNvbm5lY3RVcmwpIHx8IG1hdGNoRXhwLnRlc3QodGFyZ2V0LmFsaWFzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoZ3JwKSA9PiBncnAucHJvcHMuY2hpbGRyZW4ubGVuZ3RoID4gMCk7XG4gICAgfSxcbiAgICBbc2VsZWN0T3B0aW9ucywgbm9PcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUZhdm9yaXRlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGl0ZW1JZDogc3RyaW5nLCBpc0Zhdm9yaXRlOiBib29sZWFuKSA9PiB7XG4gICAgICBzZXRGYXZvcml0ZXMoKG9sZCkgPT4ge1xuICAgICAgICBjb25zdCB0b1VwZGF0ZSA9ICFpc0Zhdm9yaXRlID8gWy4uLm9sZCwgaXRlbUlkXSA6IG9sZC5maWx0ZXIoKGYpID0+IGYgIT09IGl0ZW1JZCk7XG4gICAgICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnVEFSR0VUX0ZBVk9SSVRFUycsIHRvVXBkYXRlKTtcbiAgICAgICAgcmV0dXJuIHRvVXBkYXRlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0RmF2b3JpdGVzXVxuICApO1xuXG4gIGNvbnN0IHNlbGVjdGlvblByZWZpeCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKHNlbGVjdGVkVGFyZ2V0ICE9PSBOT19UQVJHRVQgPyA8c3BhbiBzdHlsZT17eyBmb250V2VpZ2h0OiA3MDAgfX0+VGFyZ2V0Ojwvc3Bhbj4gOiB1bmRlZmluZWQpLFxuICAgIFtzZWxlY3RlZFRhcmdldF1cbiAgKTtcblxuICBjb25zdCBzZWxlY3RGb290ZXIgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxMaW5rIHRvPXsnL3RvcG9sb2d5L2NyZWF0ZS1jdXN0b20tdGFyZ2V0J30+XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiPkNyZWF0ZSBUYXJnZXQ8L0J1dHRvbj5cbiAgICAgIDwvTGluaz5cbiAgICApLFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YXJnZXQtY29udGV4dC1zZWxlY3Rvcl9fd3JhcHBlclwiIHsuLi5wcm9wc30gZGF0YS1xdWlja3N0YXJ0LWlkPXsndGFyZ2V0LXNlbGVjdCd9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxMaW5lYXJEb3RTcGlubmVyIGNsYXNzTmFtZT1cInRhcmdldC1jb250ZXh0LXNlbGVjdG9yX19saW5lYXItZG90LXNwaW5uZXJcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgaXNQbGFpblxuICAgICAgICAgICAgdmFyaWFudD17U2VsZWN0VmFyaWFudC5zaW5nbGV9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IFRhcmdldFwiXG4gICAgICAgICAgICBtYXhIZWlnaHQ9XCIzMGVtXCJcbiAgICAgICAgICAgIGlzRmxpcEVuYWJsZWQ9e3RydWV9XG4gICAgICAgICAgICBtZW51QXBwZW5kVG89eydwYXJlbnQnfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PXsnU2VsZWN0IGEgdGFyZ2V0J31cbiAgICAgICAgICAgIGlzT3Blbj17aXNUYXJnZXRPcGVufVxuICAgICAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVNlbGVjdFRvZ2dsZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVUYXJnZXRTZWxlY3R9XG4gICAgICAgICAgICBoYXNJbmxpbmVGaWx0ZXJcbiAgICAgICAgICAgIGlubGluZUZpbHRlclBsYWNlaG9sZGVyVGV4dD1cIkZpbHRlciBieSB0YXJnZXQuLi5cIlxuICAgICAgICAgICAgdG9nZ2xlSWNvbj17c2VsZWN0aW9uUHJlZml4fVxuICAgICAgICAgICAgb25GaWx0ZXI9e2hhbmRsZVRhcmdldEZpbHRlcn1cbiAgICAgICAgICAgIGlzR3JvdXBlZD17IW5vT3B0aW9uc31cbiAgICAgICAgICAgIHNlbGVjdGlvbnM9e1xuICAgICAgICAgICAgICBzZWxlY3RlZFRhcmdldCAhPT0gTk9fVEFSR0VUXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiBnZXRUYXJnZXRSZXByZXNlbnRhdGlvbihzZWxlY3RlZFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVUbzogKG90aGVyKSA9PiBvdGhlci50YXJnZXQuY29ubmVjdFVybCA9PT0gc2VsZWN0ZWRUYXJnZXQuY29ubmVjdFVybCxcbiAgICAgICAgICAgICAgICAgICAgLi4ueyB0YXJnZXQ6IHNlbGVjdGVkVGFyZ2V0IH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvb3Rlcj17c2VsZWN0Rm9vdGVyfVxuICAgICAgICAgICAgZmF2b3JpdGVzPXtmYXZvcml0ZXN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlPXtoYW5kbGVGYXZvcml0ZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c2VsZWN0T3B0aW9uc31cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPERpdmlkZXIgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEJyZWFkY3J1bWJQYWdlLCBCcmVhZGNydW1iVHJhaWwgfSBmcm9tICdAYXBwL0JyZWFkY3J1bWJQYWdlL0JyZWFkY3J1bWJQYWdlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgTk9fVEFSR0VUIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm9UYXJnZXRTZWxlY3RlZCB9IGZyb20gJy4vTm9UYXJnZXRTZWxlY3RlZCc7XG5pbXBvcnQgeyBUYXJnZXRDb250ZXh0U2VsZWN0b3IgfSBmcm9tICcuL1RhcmdldENvbnRleHRTZWxlY3Rvcic7XG5cbmludGVyZmFjZSBUYXJnZXRWaWV3UHJvcHMge1xuICBhdHRhY2htZW50cz86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIGJyZWFkY3J1bWJzPzogQnJlYWRjcnVtYlRyYWlsW107XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBUYXJnZXRWaWV3OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxUYXJnZXRWaWV3UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2hhc1NlbGVjdGlvbiwgc2V0SGFzU2VsZWN0aW9uXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC50YXJnZXRcbiAgICAgICAgLnRhcmdldCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgodGFyZ2V0KSA9PiB0YXJnZXQgIT09IE5PX1RBUkdFVCksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoc2V0SGFzU2VsZWN0aW9uKVxuICAgICk7XG4gIH0sIFtjb250ZXh0LnRhcmdldCwgYWRkU3Vic2NyaXB0aW9uLCBzZXRIYXNTZWxlY3Rpb25dKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGFyZ2V0Q29udGV4dFNlbGVjdG9yIC8+XG4gICAgICB7cHJvcHMuYXR0YWNobWVudHN9XG4gICAgICA8QnJlYWRjcnVtYlBhZ2UgcGFnZVRpdGxlPXtwcm9wcy5wYWdlVGl0bGV9IGJyZWFkY3J1bWJzPXtwcm9wcy5icmVhZGNydW1ic30+XG4gICAgICAgIHtoYXNTZWxlY3Rpb24gPyBwcm9wcy5jaGlsZHJlbiA6IDxOb1RhcmdldFNlbGVjdGVkIC8+fVxuICAgICAgPC9CcmVhZGNydW1iUGFnZT5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEZvcm1TZWxlY3QsIEZvcm1TZWxlY3RPcHRpb24sIFNwbGl0LCBTcGxpdEl0ZW0sIFRleHRJbnB1dCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIER1cmF0aW9uUGlja2VyUHJvcHMge1xuICBvblBlcmlvZENoYW5nZTogKHBlcmlvZDogbnVtYmVyKSA9PiB2b2lkO1xuICBvblVuaXRTY2FsYXJDaGFuZ2U6ICh1bml0U2NhbGFyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBlcmlvZDogbnVtYmVyO1xuICB1bml0U2NhbGFyOiBudW1iZXI7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBEdXJhdGlvblBpY2tlcjogUmVhY3QuRkM8RHVyYXRpb25QaWNrZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNwbGl0IGhhc0d1dHRlcj17dHJ1ZX0+XG4gICAgICAgIDxTcGxpdEl0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgdmFsdWU9e3Byb3BzLnBlcmlvZH1cbiAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgaWQ9XCJkdXJhdGlvbi1waWNrZXItcGVyaW9kXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEdXJhdGlvbiBQaWNrZXIgUGVyaW9kIElucHV0XCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsodikgPT4gcHJvcHMub25QZXJpb2RDaGFuZ2UoTnVtYmVyKHYpKX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9eyFwcm9wcy5lbmFibGVkfVxuICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgIDxTcGxpdEl0ZW0+XG4gICAgICAgICAgPEZvcm1TZWxlY3RcbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy51bml0U2NhbGFyfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyh2KSA9PiBwcm9wcy5vblVuaXRTY2FsYXJDaGFuZ2UoTnVtYmVyKHYpKX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEdXJhdGlvbiBQaWNrZXIgVW5pdHMgSW5wdXRcIlxuICAgICAgICAgICAgaXNEaXNhYmxlZD17IXByb3BzLmVuYWJsZWR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMVwiIHZhbHVlPXsxICogMTAwMH0gbGFiZWw9XCJTZWNvbmRzXCIgLz5cbiAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjJcIiB2YWx1ZT17NjAgKiAxMDAwfSBsYWJlbD1cIk1pbnV0ZXNcIiAvPlxuICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiM1wiIHZhbHVlPXs2MCAqIDYwICogMTAwMH0gbGFiZWw9XCJIb3Vyc1wiIC8+XG4gICAgICAgICAgPC9Gb3JtU2VsZWN0PlxuICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgIDwvU3BsaXQ+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBEdXJhdGlvblBpY2tlciB9IGZyb20gJ0BhcHAvRHVyYXRpb25QaWNrZXIvRHVyYXRpb25QaWNrZXInO1xuaW1wb3J0IHsgYXV0aEZhaWxNZXNzYWdlLCBFcnJvclZpZXcsIGlzQXV0aEZhaWwgfSBmcm9tICdAYXBwL0Vycm9yVmlldy9FcnJvclZpZXcnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc0NvbnRleHQgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBSZWNvcmRpbmdMYWJlbCB9IGZyb20gJ0BhcHAvUmVjb3JkaW5nTWV0YWRhdGEvUmVjb3JkaW5nTGFiZWwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nTGFiZWxGaWVsZHMgfSBmcm9tICdAYXBwL1JlY29yZGluZ01ldGFkYXRhL1JlY29yZGluZ0xhYmVsRmllbGRzJztcbmltcG9ydCB7IExvYWRpbmdQcm9wc1R5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9ncmVzc0luZGljYXRvcic7XG5pbXBvcnQgeyBTZWxlY3RUZW1wbGF0ZVNlbGVjdG9yRm9ybSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlbGVjdFRlbXBsYXRlU2VsZWN0b3JGb3JtJztcbmltcG9ydCB7IFJlY29yZGluZ09wdGlvbnMsIFJlY29yZGluZ0F0dHJpYnV0ZXMsIFRlbXBsYXRlVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgaXNUYXJnZXRBZ2VudEh0dHAsIE5PX1RBUkdFVCwgVGFyZ2V0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBBY3Rpb25Hcm91cCxcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRXhwYW5kYWJsZVNlY3Rpb24sXG4gIEZvcm0sXG4gIEZvcm1Hcm91cCxcbiAgRm9ybVNlbGVjdCxcbiAgRm9ybVNlbGVjdE9wdGlvbixcbiAgSGVscGVyVGV4dCxcbiAgSGVscGVyVGV4dEl0ZW0sXG4gIExhYmVsLFxuICBTcGxpdCxcbiAgU3BsaXRJdGVtLFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFRleHRWYXJpYW50cyxcbiAgVG9vbHRpcCxcbiAgVmFsaWRhdGVkT3B0aW9ucyxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBIZWxwSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEV2ZW50VGVtcGxhdGUgfSBmcm9tICcuL0NyZWF0ZVJlY29yZGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVjb3JkaW5nRm9ybVByb3BzIHtcbiAgcHJlZmlsbGVkPzoge1xuICAgIHJlc3RhcnRFeGlzdGluZz86IGJvb2xlYW47XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB0ZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVUeXBlPzogVGVtcGxhdGVUeXBlO1xuICAgIGxhYmVscz86IFJlY29yZGluZ0xhYmVsW107XG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgbWF4QWdlPzogbnVtYmVyO1xuICAgIG1heFNpemU/OiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBSZWNvcmRpbmdOYW1lUGF0dGVybiA9IC9eW1xcd19dKyQvO1xuZXhwb3J0IGNvbnN0IER1cmF0aW9uUGF0dGVybiA9IC9eWzEtOV1bMC05XSokLztcblxuZXhwb3J0IGNvbnN0IEN1c3RvbVJlY29yZGluZ0Zvcm06IFJlYWN0LkZDPEN1c3RvbVJlY29yZGluZ0Zvcm1Qcm9wcz4gPSAoeyBwcmVmaWxsZWQgfSkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBSZWFjdC51c2VDb250ZXh0KE5vdGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFtyZWNvcmRpbmdOYW1lLCBzZXRSZWNvcmRpbmdOYW1lXSA9IFJlYWN0LnVzZVN0YXRlKHByZWZpbGxlZD8ubmFtZSB8fCAnJyk7XG4gIGNvbnN0IFtuYW1lVmFsaWQsIHNldE5hbWVWYWxpZF0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICBwcmVmaWxsZWQ/Lm5hbWVcbiAgICAgID8gUmVjb3JkaW5nTmFtZVBhdHRlcm4udGVzdChyZWNvcmRpbmdOYW1lKVxuICAgICAgICA/IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzc1xuICAgICAgICA6IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3JcbiAgICAgIDogVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0XG4gICk7XG4gIGNvbnN0IFtyZXN0YXJ0RXhpc3RpbmcsIHNldFJlc3RhcnRFeGlzdGluZ10gPSBSZWFjdC51c2VTdGF0ZShwcmVmaWxsZWQ/LnJlc3RhcnRFeGlzdGluZyB8fCBmYWxzZSk7XG4gIGNvbnN0IFtjb250aW51b3VzLCBzZXRDb250aW51b3VzXSA9IFJlYWN0LnVzZVN0YXRlKChwcmVmaWxsZWQ/LmR1cmF0aW9uIHx8IDMwKSA8IDEpO1xuICBjb25zdCBbYXJjaGl2ZU9uU3RvcCwgc2V0QXJjaGl2ZU9uU3RvcF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2R1cmF0aW9uLCBzZXREdXJhdGlvbl0gPSBSZWFjdC51c2VTdGF0ZShwcmVmaWxsZWQ/LmR1cmF0aW9uIHx8IDMwKTtcbiAgY29uc3QgW2R1cmF0aW9uVW5pdCwgc2V0RHVyYXRpb25Vbml0XSA9IFJlYWN0LnVzZVN0YXRlKDEwMDApO1xuICBjb25zdCBbZHVyYXRpb25WYWxpZCwgc2V0RHVyYXRpb25WYWxpZF0gPSBSZWFjdC51c2VTdGF0ZShWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MpO1xuICBjb25zdCBbdGVtcGxhdGVzLCBzZXRUZW1wbGF0ZXNdID0gUmVhY3QudXNlU3RhdGU8RXZlbnRUZW1wbGF0ZVtdPihbXSk7XG4gIGNvbnN0IFt0ZW1wbGF0ZSwgc2V0VGVtcGxhdGVdID0gUmVhY3QudXNlU3RhdGU8UGljazxQYXJ0aWFsPEV2ZW50VGVtcGxhdGU+LCAnbmFtZScgfCAndHlwZSc+Pih7XG4gICAgbmFtZTogcHJlZmlsbGVkPy50ZW1wbGF0ZU5hbWUsXG4gICAgdHlwZTogcHJlZmlsbGVkPy50ZW1wbGF0ZVR5cGUsXG4gIH0pO1xuICBjb25zdCBbbWF4QWdlLCBzZXRNYXhBZ2VdID0gUmVhY3QudXNlU3RhdGUocHJlZmlsbGVkPy5tYXhBZ2UgfHwgMCk7XG4gIGNvbnN0IFttYXhBZ2VVbml0cywgc2V0TWF4QWdlVW5pdHNdID0gUmVhY3QudXNlU3RhdGUoMSk7XG4gIGNvbnN0IFttYXhTaXplLCBzZXRNYXhTaXplXSA9IFJlYWN0LnVzZVN0YXRlKHByZWZpbGxlZD8ubWF4U2l6ZSB8fCAwKTtcbiAgY29uc3QgW21heFNpemVVbml0cywgc2V0TWF4U2l6ZVVuaXRzXSA9IFJlYWN0LnVzZVN0YXRlKDEpO1xuICBjb25zdCBbdG9EaXNrLCBzZXRUb0Rpc2tdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtsYWJlbHMsIHNldExhYmVsc10gPSBSZWFjdC51c2VTdGF0ZShwcmVmaWxsZWQ/LmxhYmVscyB8fCBbXSk7XG4gIGNvbnN0IFtsYWJlbHNWYWxpZCwgc2V0TGFiZWxzVmFsaWRdID0gUmVhY3QudXNlU3RhdGUoVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0KTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZVJlY29yZGluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChyZWNvcmRpbmdBdHRyaWJ1dGVzOiBSZWNvcmRpbmdBdHRyaWJ1dGVzKSA9PiB7XG4gICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgIC5jcmVhdGVSZWNvcmRpbmcocmVjb3JkaW5nQXR0cmlidXRlcylcbiAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3ApID0+IHtcbiAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5vaykge1xuICAgICAgICAgICAgICBoaXN0b3J5LmdvQmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIGhpc3RvcnksIHNldExvYWRpbmddXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlUmVzdGFydEV4aXN0aW5nQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNoZWNrZWQpID0+IHtcbiAgICAgIHNldFJlc3RhcnRFeGlzdGluZyhjaGVja2VkKTtcbiAgICB9LFxuICAgIFtzZXRSZXN0YXJ0RXhpc3RpbmddXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ29udGludW91c0NoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkKSA9PiB7XG4gICAgICBzZXRDb250aW51b3VzKGNoZWNrZWQpO1xuICAgICAgc2V0RHVyYXRpb24oMCk7XG4gICAgICBzZXREdXJhdGlvblZhbGlkKGNoZWNrZWQgPyBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MgOiBWYWxpZGF0ZWRPcHRpb25zLmVycm9yKTtcbiAgICB9LFxuICAgIFtzZXRDb250aW51b3VzLCBzZXREdXJhdGlvbiwgc2V0RHVyYXRpb25WYWxpZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVEdXJhdGlvbkNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldER1cmF0aW9uKE51bWJlcihldnQpKTtcbiAgICAgIHNldER1cmF0aW9uVmFsaWQoRHVyYXRpb25QYXR0ZXJuLnRlc3QoZXZ0KSA/IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyA6IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IpO1xuICAgIH0sXG4gICAgW3NldER1cmF0aW9uVmFsaWQsIHNldER1cmF0aW9uXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUR1cmF0aW9uVW5pdENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldER1cmF0aW9uVW5pdChOdW1iZXIoZXZ0KSk7XG4gICAgfSxcbiAgICBbc2V0RHVyYXRpb25Vbml0XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRlbXBsYXRlQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRlbXBsYXRlTmFtZT86IHN0cmluZywgdGVtcGxhdGVUeXBlPzogVGVtcGxhdGVUeXBlKSA9PiB7XG4gICAgICBzZXRUZW1wbGF0ZSh7XG4gICAgICAgIG5hbWU6IHRlbXBsYXRlTmFtZSxcbiAgICAgICAgdHlwZTogdGVtcGxhdGVUeXBlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0VGVtcGxhdGVdXG4gICk7XG5cbiAgY29uc3QgZXZlbnRTcGVjaWZpZXJTdHJpbmcgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgc3RyID0gJyc7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlIH0gPSB0ZW1wbGF0ZTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgc3RyICs9IGB0ZW1wbGF0ZT0ke25hbWV9YDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIHN0ciArPSBgLHR5cGU9JHt0eXBlfWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH0sIFt0ZW1wbGF0ZV0pO1xuXG4gIGNvbnN0IGdldEZvcm1hdHRlZExhYmVscyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIGxhYmVscy5mb3JFYWNoKChsKSA9PiB7XG4gICAgICBpZiAoISFsLmtleSAmJiAhIWwudmFsdWUpIHtcbiAgICAgICAgb2JqW2wua2V5XSA9IGwudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9LCBbbGFiZWxzXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVjb3JkaW5nTmFtZUNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChuYW1lKSA9PiB7XG4gICAgICBzZXROYW1lVmFsaWQoUmVjb3JkaW5nTmFtZVBhdHRlcm4udGVzdChuYW1lKSA/IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyA6IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IpO1xuICAgICAgc2V0UmVjb3JkaW5nTmFtZShuYW1lKTtcbiAgICB9LFxuICAgIFtzZXROYW1lVmFsaWQsIHNldFJlY29yZGluZ05hbWVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTWF4QWdlQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2dCkgPT4ge1xuICAgICAgc2V0TWF4QWdlKE51bWJlcihldnQpKTtcbiAgICB9LFxuICAgIFtzZXRNYXhBZ2VdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTWF4QWdlVW5pdENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldE1heEFnZVVuaXRzKE51bWJlcihldnQpKTtcbiAgICB9LFxuICAgIFtzZXRNYXhBZ2VVbml0c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNYXhTaXplQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2dCkgPT4ge1xuICAgICAgc2V0TWF4U2l6ZShOdW1iZXIoZXZ0KSk7XG4gICAgfSxcbiAgICBbc2V0TWF4U2l6ZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNYXhTaXplVW5pdENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldE1heFNpemVVbml0cyhOdW1iZXIoZXZ0KSk7XG4gICAgfSxcbiAgICBbc2V0TWF4U2l6ZVVuaXRzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRvRGlza0NoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkLCBldnQpID0+IHtcbiAgICAgIHNldFRvRGlzayhldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgIH0sXG4gICAgW3NldFRvRGlza11cbiAgKTtcblxuICBjb25zdCBzZXRSZWNvcmRpbmdPcHRpb25zID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbnM6IFJlY29yZGluZ09wdGlvbnMpID0+IHtcbiAgICAgIC8vIHRvRGlzayBpcyBub3Qgc2V0LCBhbmQgZGVmYXVsdHMgdG8gdHJ1ZSBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9jcnlvc3RhdGlvL2NyeW9zdGF0L2lzc3Vlcy8yNjNcbiAgICAgIHNldE1heEFnZShwcmVmaWxsZWQ/Lm1heEFnZSB8fCBvcHRpb25zLm1heEFnZSB8fCAwKTtcbiAgICAgIHNldE1heEFnZVVuaXRzKDEpO1xuICAgICAgc2V0TWF4U2l6ZShwcmVmaWxsZWQ/Lm1heFNpemUgfHwgb3B0aW9ucy5tYXhTaXplIHx8IDApO1xuICAgICAgc2V0TWF4U2l6ZVVuaXRzKDEpO1xuICAgIH0sXG4gICAgW3NldE1heEFnZSwgc2V0TWF4QWdlVW5pdHMsIHNldE1heFNpemUsIHNldE1heFNpemVVbml0cywgcHJlZmlsbGVkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobmFtZVZhbGlkICE9PSBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIG5vdGlmaWNhdGlvbk1lc3NhZ2VzLnB1c2goYFJlY29yZGluZyBuYW1lICR7cmVjb3JkaW5nTmFtZX0gaXMgaW52YWxpZGApO1xuICAgIH1cblxuICAgIGlmIChub3RpZmljYXRpb25NZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gbm90aWZpY2F0aW9uTWVzc2FnZXMuam9pbignLiAnKS50cmltKCkgKyAnLic7XG4gICAgICBub3RpZmljYXRpb25zLndhcm5pbmcoJ0ludmFsaWQgZm9ybSBkYXRhJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uczogUmVjb3JkaW5nT3B0aW9ucyA9IHtcbiAgICAgIHJlc3RhcnQ6IHJlc3RhcnRFeGlzdGluZyxcbiAgICAgIHRvRGlzazogdG9EaXNrLFxuICAgICAgbWF4QWdlOiB0b0Rpc2sgPyAoY29udGludW91cyA/IG1heEFnZSAqIG1heEFnZVVuaXRzIDogdW5kZWZpbmVkKSA6IHVuZGVmaW5lZCxcbiAgICAgIG1heFNpemU6IHRvRGlzayA/IG1heFNpemUgKiBtYXhTaXplVW5pdHMgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCByZWNvcmRpbmdBdHRyaWJ1dGVzOiBSZWNvcmRpbmdBdHRyaWJ1dGVzID0ge1xuICAgICAgbmFtZTogcmVjb3JkaW5nTmFtZSxcbiAgICAgIGV2ZW50czogZXZlbnRTcGVjaWZpZXJTdHJpbmcsXG4gICAgICBkdXJhdGlvbjogY29udGludW91cyA/IHVuZGVmaW5lZCA6IGR1cmF0aW9uICogKGR1cmF0aW9uVW5pdCAvIDEwMDApLFxuICAgICAgYXJjaGl2ZU9uU3RvcDogYXJjaGl2ZU9uU3RvcCAmJiAhY29udGludW91cyxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBtZXRhZGF0YTogeyBsYWJlbHM6IGdldEZvcm1hdHRlZExhYmVscygpIH0sXG4gICAgfTtcbiAgICBoYW5kbGVDcmVhdGVSZWNvcmRpbmcocmVjb3JkaW5nQXR0cmlidXRlcyk7XG4gIH0sIFtcbiAgICBldmVudFNwZWNpZmllclN0cmluZyxcbiAgICBnZXRGb3JtYXR0ZWRMYWJlbHMsXG4gICAgYXJjaGl2ZU9uU3RvcCxcbiAgICBjb250aW51b3VzLFxuICAgIGR1cmF0aW9uLFxuICAgIGR1cmF0aW9uVW5pdCxcbiAgICBtYXhBZ2UsXG4gICAgbWF4QWdlVW5pdHMsXG4gICAgbWF4U2l6ZSxcbiAgICBtYXhTaXplVW5pdHMsXG4gICAgbmFtZVZhbGlkLFxuICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgcmVjb3JkaW5nTmFtZSxcbiAgICByZXN0YXJ0RXhpc3RpbmcsXG4gICAgdG9EaXNrLFxuICAgIGhhbmRsZUNyZWF0ZVJlY29yZGluZyxcbiAgXSk7XG5cbiAgY29uc3QgcmVmcmVzaEZvcm1PcHRpb25zID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVGFyZ2V0KSA9PiB7XG4gICAgICBpZiAodGFyZ2V0ID09PSBOT19UQVJHRVQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgdGVtcGxhdGVzOiBjb250ZXh0LmFwaS5kb0dldDxFdmVudFRlbXBsYXRlW10+KGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vdGVtcGxhdGVzYCksXG4gICAgICAgICAgcmVjb3JkaW5nT3B0aW9uczogY29udGV4dC5hcGkuZG9HZXQ8UmVjb3JkaW5nT3B0aW9ucz4oXG4gICAgICAgICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0YXJnZXQuY29ubmVjdFVybCl9L3JlY29yZGluZ09wdGlvbnNgXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoeyB0ZW1wbGF0ZXMsIHJlY29yZGluZ09wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICAgICAgICAgIHNldFRlbXBsYXRlcyh0ZW1wbGF0ZXMpO1xuICAgICAgICAgICAgc2V0VGVtcGxhdGUoKG9sZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gdGVtcGxhdGVzLmZpbmQoKHQpID0+IHQubmFtZSA9PT0gb2xkLm5hbWUgJiYgdC50eXBlID09PSB0LnR5cGUpO1xuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlZCA/IHsgbmFtZTogbWF0Y2hlZC5uYW1lLCB0eXBlOiBtYXRjaGVkLnR5cGUgfSA6IHt9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRSZWNvcmRpbmdPcHRpb25zKHJlY29yZGluZ09wdGlvbnMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKGlzVGFyZ2V0QWdlbnRIdHRwKHRhcmdldCkgPyAnVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiBDcmVhdGUgcmVjb3JkaW5ncycgOiBlcnJvci5tZXNzYWdlKTsgLy8gSWYgYm90aCB0aHJvdywgZmlyc3QgZXJyb3Igd2lsbCBiZSBzaG93blxuICAgICAgICAgICAgc2V0VGVtcGxhdGVzKFtdKTtcbiAgICAgICAgICAgIHNldFRlbXBsYXRlKHt9KTtcbiAgICAgICAgICAgIHNldFJlY29yZGluZ09wdGlvbnMoe30pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIHNldFRlbXBsYXRlcywgc2V0VGVtcGxhdGUsIHNldFJlY29yZGluZ09wdGlvbnMsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0LmF1dGhGYWlsdXJlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgc2V0RXJyb3JNZXNzYWdlKGF1dGhGYWlsTWVzc2FnZSk7XG4gICAgICAgIHNldFRlbXBsYXRlcyhbXSk7XG4gICAgICAgIHNldFRlbXBsYXRlKHt9KTtcbiAgICAgICAgc2V0UmVjb3JkaW5nT3B0aW9ucyh7fSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtjb250ZXh0LnRhcmdldCwgc2V0RXJyb3JNZXNzYWdlLCBhZGRTdWJzY3JpcHRpb24sIHNldFRlbXBsYXRlcywgc2V0VGVtcGxhdGUsIHNldFJlY29yZGluZ09wdGlvbnNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250ZXh0LnRhcmdldC50YXJnZXQoKS5zdWJzY3JpYmUocmVmcmVzaEZvcm1PcHRpb25zKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0LCByZWZyZXNoRm9ybU9wdGlvbnNdKTtcblxuICBjb25zdCBpc0Zvcm1JbnZhbGlkOiBib29sZWFuID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWVWYWxpZCAhPT0gVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzIHx8XG4gICAgICBkdXJhdGlvblZhbGlkICE9PSBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MgfHxcbiAgICAgICF0ZW1wbGF0ZS5uYW1lIHx8XG4gICAgICAhdGVtcGxhdGUudHlwZSB8fFxuICAgICAgbGFiZWxzVmFsaWQgIT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzc1xuICAgICk7XG4gIH0sIFtuYW1lVmFsaWQsIGR1cmF0aW9uVmFsaWQsIHRlbXBsYXRlLCBsYWJlbHNWYWxpZF0pO1xuXG4gIGNvbnN0IGhhc1Jlc2VydmVkTGFiZWxzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBsYWJlbHMuc29tZSgobGFiZWwpID0+IGxhYmVsLmtleSA9PT0gJ3RlbXBsYXRlLm5hbWUnIHx8IGxhYmVsLmtleSA9PT0gJ3RlbXBsYXRlLnR5cGUnKSxcbiAgICBbbGFiZWxzXVxuICApO1xuXG4gIGNvbnN0IGNyZWF0ZUJ1dHRvbkxvYWRpbmdQcm9wcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIHNwaW5uZXJBcmlhVmFsdWVUZXh0OiAnQ3JlYXRpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnY3JlYXRlLWFjdGl2ZS1yZWNvcmRpbmcnLFxuICAgICAgICBpc0xvYWRpbmc6IGxvYWRpbmcsXG4gICAgICB9IGFzIExvYWRpbmdQcm9wc1R5cGUpLFxuICAgIFtsb2FkaW5nXVxuICApO1xuXG4gIGNvbnN0IHNlbGVjdGVkU3BlY2lmaWVyID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlIH0gPSB0ZW1wbGF0ZTtcbiAgICBpZiAobmFtZSAmJiB0eXBlKSB7XG4gICAgICByZXR1cm4gYCR7bmFtZX0sJHt0eXBlfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfSwgW3RlbXBsYXRlXSk7XG5cbiAgY29uc3QgYXV0aFJldHJ5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnRleHQudGFyZ2V0LnNldEF1dGhSZXRyeSgpO1xuICB9LCBbY29udGV4dC50YXJnZXRdKTtcblxuICBpZiAoZXJyb3JNZXNzYWdlICE9ICcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvclZpZXdcbiAgICAgICAgdGl0bGU9eydFcnJvciBkaXNwbGF5aW5nIHJlY29yZGluZyBjcmVhdGlvbiBmb3JtJ31cbiAgICAgICAgbWVzc2FnZT17ZXJyb3JNZXNzYWdlfVxuICAgICAgICByZXRyeT17aXNBdXRoRmFpbChlcnJvck1lc3NhZ2UpID8gYXV0aFJldHJ5IDogdW5kZWZpbmVkfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnNtYWxsfT5cbiAgICAgICAgSkRLIEZsaWdodCBSZWNvcmRpbmdzIGFyZSBjb21wYWN0IHJlY29yZHMgb2YgZXZlbnRzIHdoaWNoIGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSB0YXJnZXQgSlZNLiBNYW55IGV2ZW50IHR5cGVzXG4gICAgICAgIGFyZSBidWlsdCBpbiB0byB0aGUgSlZNIGl0c2VsZiwgd2hpbGUgb3RoZXJzIGFyZSB1c2VyIGRlZmluZWQuXG4gICAgICA8L1RleHQ+XG4gICAgICA8Rm9ybSBpc0hvcml6b250YWw+XG4gICAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgICBsYWJlbD1cIk5hbWVcIlxuICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICBmaWVsZElkPVwicmVjb3JkaW5nLW5hbWVcIlxuICAgICAgICAgIGhlbHBlclRleHQ9XCJFbnRlciBhIHJlY29yZGluZyBuYW1lLiBUaGlzIHdpbGwgYmUgdW5pcXVlIHdpdGhpbiB0aGUgdGFyZ2V0IEpWTS5cIlxuICAgICAgICAgIGhlbHBlclRleHRJbnZhbGlkPVwiQSByZWNvcmRpbmcgbmFtZSBjYW4gY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlcy5cIlxuICAgICAgICAgIHZhbGlkYXRlZD17bmFtZVZhbGlkfVxuICAgICAgICA+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgdmFsdWU9e3JlY29yZGluZ05hbWV9XG4gICAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgaWQ9XCJyZWNvcmRpbmctbmFtZVwiXG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwicmVjb3JkaW5nLW5hbWUtaGVscGVyXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVSZWNvcmRpbmdOYW1lQ2hhbmdlfVxuICAgICAgICAgICAgdmFsaWRhdGVkPXtuYW1lVmFsaWR9XG4gICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjcmYtbmFtZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGxhYmVsPVwiUmVzdGFydCBpZiByZWNvcmRpbmcgYWxyZWFkeSBleGlzdHNcIlxuICAgICAgICAgICAgaXNDaGVja2VkPXtyZXN0YXJ0RXhpc3Rpbmd9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVJlc3RhcnRFeGlzdGluZ0NoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZXN0YXJ0RXhpc3RpbmcgY2hlY2tib3hcIlxuICAgICAgICAgICAgaWQ9XCJyZWNvcmRpbmctcmVzdGFydC1leGlzdGluZ1wiXG4gICAgICAgICAgICBuYW1lPVwicmVjb3JkaW5nLXJlc3RhcnQtZXhpc3RpbmdcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8Rm9ybUdyb3VwXG4gICAgICAgICAgbGFiZWw9XCJEdXJhdGlvblwiXG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIGZpZWxkSWQ9XCJyZWNvcmRpbmctZHVyYXRpb25cIlxuICAgICAgICAgIHZhbGlkYXRlZD17ZHVyYXRpb25WYWxpZH1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICAgIGNvbnRpbnVvdXNcbiAgICAgICAgICAgICAgPyAnQSBjb250aW51b3VzIHJlY29yZGluZyB3aWxsIG5ldmVyIGJlIGF1dG9tYXRpY2FsbHkgc3RvcHBlZC4nXG4gICAgICAgICAgICAgIDogYXJjaGl2ZU9uU3RvcFxuICAgICAgICAgICAgICA/ICdUaW1lIGJlZm9yZSB0aGUgcmVjb3JkaW5nIGlzIGF1dG9tYXRpY2FsbHkgc3RvcHBlZCBhbmQgY29waWVkIHRvIGFyY2hpdmUuJ1xuICAgICAgICAgICAgICA6ICdUaW1lIGJlZm9yZSB0aGUgcmVjb3JkaW5nIGlzIGF1dG9tYXRpY2FsbHkgc3RvcHBlZC4nXG4gICAgICAgICAgfVxuICAgICAgICAgIGhlbHBlclRleHRJbnZhbGlkPVwiVGhlIHJlY29yZGluZyBkdXJhdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cIlxuICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImNyZi1kdXJhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8U3BsaXQgaGFzR3V0dGVyPlxuICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJDb250aW51b3VzXCJcbiAgICAgICAgICAgICAgICBpc0NoZWNrZWQ9e2NvbnRpbnVvdXN9XG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ29udGludW91c0NoYW5nZX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29udGludW91cyBjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJyZWNvcmRpbmctY29udGludW91c1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cInJlY29yZGluZy1jb250aW51b3VzXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJBcmNoaXZlIG9uIFN0b3BcIlxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2NvbnRpbnVvdXMgfHwgbG9hZGluZ31cbiAgICAgICAgICAgICAgICBpc0NoZWNrZWQ9e2FyY2hpdmVPblN0b3AgJiYgIWNvbnRpbnVvdXN9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEFyY2hpdmVPblN0b3B9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFyY2hpdmVPblN0b3AgY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwicmVjb3JkaW5nLWFyY2hpdmUtb24tc3RvcFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInJlY29yZGluZy1hcmNoaXZlLW9uLXN0b3BcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgPC9TcGxpdD5cbiAgICAgICAgICA8RHVyYXRpb25QaWNrZXJcbiAgICAgICAgICAgIGVuYWJsZWQ9eyFjb250aW51b3VzICYmICFsb2FkaW5nfVxuICAgICAgICAgICAgcGVyaW9kPXtkdXJhdGlvbn1cbiAgICAgICAgICAgIG9uUGVyaW9kQ2hhbmdlPXtoYW5kbGVEdXJhdGlvbkNoYW5nZX1cbiAgICAgICAgICAgIHVuaXRTY2FsYXI9e2R1cmF0aW9uVW5pdH1cbiAgICAgICAgICAgIG9uVW5pdFNjYWxhckNoYW5nZT17aGFuZGxlRHVyYXRpb25Vbml0Q2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8Rm9ybUdyb3VwXG4gICAgICAgICAgbGFiZWw9XCJUZW1wbGF0ZVwiXG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIGZpZWxkSWQ9XCJyZWNvcmRpbmctdGVtcGxhdGVcIlxuICAgICAgICAgIHZhbGlkYXRlZD17IXRlbXBsYXRlLm5hbWUgPyBWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQgOiBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3N9XG4gICAgICAgICAgaGVscGVyVGV4dD17J1RoZSBFdmVudCBUZW1wbGF0ZSB0byBiZSBhcHBsaWVkIGluIHRoaXMgcmVjb3JkaW5nJ31cbiAgICAgICAgICBoZWxwZXJUZXh0SW52YWxpZD1cIkEgVGVtcGxhdGUgbXVzdCBiZSBzZWxlY3RlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8U2VsZWN0VGVtcGxhdGVTZWxlY3RvckZvcm1cbiAgICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZFNwZWNpZmllcn1cbiAgICAgICAgICAgIHRlbXBsYXRlcz17dGVtcGxhdGVzfVxuICAgICAgICAgICAgdmFsaWRhdGVkPXshdGVtcGxhdGUubmFtZSA/IFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdCA6IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzc31cbiAgICAgICAgICAgIGRpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVRlbXBsYXRlQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8RXhwYW5kYWJsZVNlY3Rpb25cbiAgICAgICAgICB0b2dnbGVUZXh0RXhwYW5kZWQ9XCJIaWRlIG1ldGFkYXRhIG9wdGlvbnNcIlxuICAgICAgICAgIHRvZ2dsZVRleHRDb2xsYXBzZWQ9XCJTaG93IG1ldGFkYXRhIG9wdGlvbnNcIlxuICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImNyZi1tZXRhZGF0YS1vcHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgICAgbGFiZWw9XCJMYWJlbHNcIlxuICAgICAgICAgICAgZmllbGRJZD1cImxhYmVsc1wiXG4gICAgICAgICAgICBsYWJlbEljb249e1xuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9ezxUZXh0PlVuaXF1ZSBrZXktdmFsdWUgcGFpcnMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3JkaW5nLjwvVGV4dD59XG4gICAgICAgICAgICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SGVscEljb24gbm9WZXJ0aWNhbEFsaWduIC8+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzSGVscGVyVGV4dEJlZm9yZUZpZWxkXG4gICAgICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICAgICAgPEhlbHBlclRleHQ+XG4gICAgICAgICAgICAgICAgPEhlbHBlclRleHRJdGVtXG4gICAgICAgICAgICAgICAgICBpc0R5bmFtaWNcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9e2hhc1Jlc2VydmVkTGFiZWxzID8gJ3dhcm5pbmcnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaGFzSWNvbj17aGFzUmVzZXJ2ZWRMYWJlbHN9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgTGFiZWxzIHdpdGgga2V5IDxMYWJlbCBpc0NvbXBhY3Q+dGVtcGxhdGUubmFtZTwvTGFiZWw+IGFuZCA8TGFiZWwgaXNDb21wYWN0PnRlbXBsYXRlLnR5cGU8L0xhYmVsPiBhcmVcbiAgICAgICAgICAgICAgICAgIHNldCBieSBDcnlvc3RhdCBhbmQgd2lsbCBiZSBvdmVyd3JpdHRlbiBpZiBzcGVjaWZlZC5cbiAgICAgICAgICAgICAgICA8L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgICAgICA8L0hlbHBlclRleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFJlY29yZGluZ0xhYmVsRmllbGRzXG4gICAgICAgICAgICAgIGxhYmVscz17bGFiZWxzfVxuICAgICAgICAgICAgICBzZXRMYWJlbHM9e3NldExhYmVsc31cbiAgICAgICAgICAgICAgc2V0VmFsaWQ9e3NldExhYmVsc1ZhbGlkfVxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPC9FeHBhbmRhYmxlU2VjdGlvbj5cbiAgICAgICAgPEV4cGFuZGFibGVTZWN0aW9uXG4gICAgICAgICAgdG9nZ2xlVGV4dEV4cGFuZGVkPVwiSGlkZSBhZHZhbmNlZCBvcHRpb25zXCJcbiAgICAgICAgICB0b2dnbGVUZXh0Q29sbGFwc2VkPVwiU2hvdyBhZHZhbmNlZCBvcHRpb25zXCJcbiAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjcmYtYWR2YW5jZWQtb3B0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnNtYWxsfT5BIHZhbHVlIG9mIDAgZm9yIG1heGltdW0gc2l6ZSBvciBhZ2UgbWVhbnMgdW5ib3VuZGVkLjwvVGV4dD5cbiAgICAgICAgICA8Rm9ybUdyb3VwXG4gICAgICAgICAgICBmaWVsZElkPVwiVG8gRGlza1wiXG4gICAgICAgICAgICBoZWxwZXJUZXh0PVwiV3JpdGUgY29udGVudHMgb2YgYnVmZmVyIG9udG8gZGlzay4gSWYgZGlzYWJsZWQsIHRoZSBidWZmZXIgYWN0cyBhcyBjaXJjdWxhciBidWZmZXIgb25seSBrZWVwaW5nIHRoZSBtb3N0IHJlY2VudCByZWNvcmRpbmcgaW5mb3JtYXRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBsYWJlbD1cIlRvIERpc2tcIlxuICAgICAgICAgICAgICBpZD1cInRvRGlzay1jaGVja2JveFwiXG4gICAgICAgICAgICAgIGlzQ2hlY2tlZD17dG9EaXNrfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlVG9EaXNrQ2hhbmdlfVxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgICA8Rm9ybUdyb3VwXG4gICAgICAgICAgICBsYWJlbD1cIk1heGltdW0gc2l6ZVwiXG4gICAgICAgICAgICBmaWVsZElkPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICBoZWxwZXJUZXh0PVwiVGhlIG1heGltdW0gc2l6ZSBvZiByZWNvcmRpbmcgZGF0YSBzYXZlZCB0byBkaXNrXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3BsaXQgaGFzR3V0dGVyPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFNwbGl0SXRlbSBpc0ZpbGxlZD5cbiAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bWF4U2l6ZX1cbiAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJtYXggc2l6ZSB2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlTWF4U2l6ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17IXRvRGlzayB8fCBsb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgICA8U3BsaXRJdGVtPlxuICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bWF4U2l6ZVVuaXRzfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU1heFNpemVVbml0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1heCBzaXplIHVuaXRzIGlucHV0XCJcbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9eyF0b0Rpc2sgfHwgbG9hZGluZ31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbiBrZXk9XCIxXCIgdmFsdWU9XCIxXCIgbGFiZWw9XCJCXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjJcIiB2YWx1ZT17MTAyNH0gbGFiZWw9XCJLaUJcIiAvPlxuICAgICAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiM1wiIHZhbHVlPXsxMDI0ICogMTAyNH0gbGFiZWw9XCJNaUJcIiAvPlxuICAgICAgICAgICAgICAgIDwvRm9ybVNlbGVjdD5cbiAgICAgICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgICA8L1NwbGl0PlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9XCJNYXhpbXVtIGFnZVwiIGZpZWxkSWQ9XCJtYXhBZ2VcIiBoZWxwZXJUZXh0PVwiVGhlIG1heGltdW0gYWdlIG9mIHJlY29yZGluZyBkYXRhIHN0b3JlZCB0byBkaXNrXCI+XG4gICAgICAgICAgICA8U3BsaXQgaGFzR3V0dGVyPXt0cnVlfT5cbiAgICAgICAgICAgICAgPFNwbGl0SXRlbSBpc0ZpbGxlZD5cbiAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bWF4QWdlfVxuICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1heEFnZUR1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNYXggYWdlIGR1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVNYXhBZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9eyFjb250aW51b3VzIHx8ICF0b0Rpc2sgfHwgbG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgICA8Rm9ybVNlbGVjdFxuICAgICAgICAgICAgICAgICAgdmFsdWU9e21heEFnZVVuaXRzfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU1heEFnZVVuaXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTWF4IEFnZSB1bml0cyBJbnB1dFwiXG4gICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXshY29udGludW91cyB8fCAhdG9EaXNrIHx8IGxvYWRpbmd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMVwiIHZhbHVlPVwiMVwiIGxhYmVsPVwiU2Vjb25kc1wiIC8+XG4gICAgICAgICAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbiBrZXk9XCIyXCIgdmFsdWU9ezYwfSBsYWJlbD1cIk1pbnV0ZXNcIiAvPlxuICAgICAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiM1wiIHZhbHVlPXs2MCAqIDYwfSBsYWJlbD1cIkhvdXJzXCIgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm1TZWxlY3Q+XG4gICAgICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgPC9TcGxpdD5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPC9FeHBhbmRhYmxlU2VjdGlvbj5cbiAgICAgICAgPEFjdGlvbkdyb3VwPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRm9ybUludmFsaWQgfHwgbG9hZGluZ31cbiAgICAgICAgICAgIHsuLi5jcmVhdGVCdXR0b25Mb2FkaW5nUHJvcHN9XG4gICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjcmYtY3JlYXRlLWJ0blwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xvYWRpbmcgPyAnQ3JlYXRpbmcnIDogJ0NyZWF0ZSd9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17aGlzdG9yeS5nb0JhY2t9IGlzRGlzYWJsZWQ9e2xvYWRpbmd9PlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvQWN0aW9uR3JvdXA+XG4gICAgICA8L0Zvcm0+XG4gICAgPC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBhdXRoRmFpbE1lc3NhZ2UsIEVycm9yVmlldywgaXNBdXRoRmFpbCwgbWlzc2luZ1NTTE1lc3NhZ2UgfSBmcm9tICdAYXBwL0Vycm9yVmlldy9FcnJvclZpZXcnO1xuaW1wb3J0IHsgTG9hZGluZ1Byb3BzVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1Byb2dyZXNzSW5kaWNhdG9yJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cCwgQnV0dG9uLCBGb3JtLCBUZXh0LCBUZXh0VmFyaWFudHMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RSZWNvcmRpbmdGb3JtUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IFNuYXBzaG90UmVjb3JkaW5nRm9ybTogUmVhY3QuRkM8U25hcHNob3RSZWNvcmRpbmdGb3JtUHJvcHM+ID0gKF8pID0+IHtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGVTbmFwc2hvdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQuYXBpXG4gICAgICAgIC5jcmVhdGVTbmFwc2hvdCgpXG4gICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHN1Y2Nlc3MpID0+IHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgaGlzdG9yeS5wdXNoKCcvcmVjb3JkaW5ncycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaSwgaGlzdG9yeSwgc2V0TG9hZGluZ10pO1xuXG4gIGNvbnN0IGNyZWF0ZUJ1dHRvbkxvYWRpbmdQcm9wcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIHNwaW5uZXJBcmlhVmFsdWVUZXh0OiAnQ3JlYXRpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnY3JlYXRlLXNuYXBzaG90LXJlY29yZGluZycsXG4gICAgICAgIGlzTG9hZGluZzogbG9hZGluZyxcbiAgICAgIH0gYXMgTG9hZGluZ1Byb3BzVHlwZSksXG4gICAgW2xvYWRpbmddXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldC5zc2xGYWlsdXJlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gYWxzbyB0cmlnZ2VyZWQgaWYgYXBpIGNhbGxzIGluIEN1c3RvbSBSZWNvcmRpbmcgZm9ybSBmYWlsXG4gICAgICAgIHNldEVycm9yTWVzc2FnZShtaXNzaW5nU1NMTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtjb250ZXh0LnRhcmdldCwgc2V0RXJyb3JNZXNzYWdlLCBhZGRTdWJzY3JpcHRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0LmF1dGhSZXRyeSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHNldEVycm9yTWVzc2FnZSgnJyk7IC8vIFJlc2V0IG9uIHJldHJ5XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtjb250ZXh0LnRhcmdldCwgc2V0RXJyb3JNZXNzYWdlLCBhZGRTdWJzY3JpcHRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0LmF1dGhGYWlsdXJlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gYWxzbyB0cmlnZ2VyZWQgaWYgYXBpIGNhbGxzIGluIEN1c3RvbSBSZWNvcmRpbmcgZm9ybSBmYWlsXG4gICAgICAgIHNldEVycm9yTWVzc2FnZShhdXRoRmFpbE1lc3NhZ2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbY29udGV4dC50YXJnZXQsIHNldEVycm9yTWVzc2FnZSwgYWRkU3Vic2NyaXB0aW9uXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldC50YXJnZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRFcnJvck1lc3NhZ2UoJycpOyAvLyBSZXNldCBvbiBjaGFuZ2VcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2NvbnRleHQudGFyZ2V0LCBzZXRFcnJvck1lc3NhZ2UsIGFkZFN1YnNjcmlwdGlvbl0pO1xuXG4gIGNvbnN0IGF1dGhSZXRyeSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb250ZXh0LnRhcmdldC5zZXRBdXRoUmV0cnkoKTtcbiAgfSwgW2NvbnRleHQudGFyZ2V0XSk7XG5cbiAgaWYgKGVycm9yTWVzc2FnZSAhPSAnJykge1xuICAgIHJldHVybiAoXG4gICAgICA8RXJyb3JWaWV3XG4gICAgICAgIHRpdGxlPXsnRXJyb3IgZGlzcGxheWluZyByZWNvcmRpbmcgY3JlYXRpb24gZm9ybSd9XG4gICAgICAgIG1lc3NhZ2U9e2Vycm9yTWVzc2FnZX1cbiAgICAgICAgcmV0cnk9e2lzQXV0aEZhaWwoZXJyb3JNZXNzYWdlKSA/IGF1dGhSZXRyeSA6IHVuZGVmaW5lZH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Rm9ybSBpc0hvcml6b250YWw+XG4gICAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnB9PlxuICAgICAgICAgIEEgU25hcHNob3QgcmVjb3JkaW5nIGlzIG9uZSB3aGljaCBjb250YWlucyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBjYXB0dXJlZCBpbiB0aGVcbiAgICAgICAgICBjdXJyZW50IHNlc3Npb24gYnkgPGk+b3RoZXIsJm5ic3A7IG5vbi1TbmFwc2hvdDwvaT4gcmVjb3JkaW5ncy4gU25hcHNob3RzIGRvIG5vdCB0aGVtc2VsdmVzIGRlZmluZSB3aGljaFxuICAgICAgICAgIGV2ZW50cyBhcmUgZW5hYmxlZCwgdGhlaXIgdGhyZXNob2xkcywgb3IgYW55IG90aGVyIG9wdGlvbnMuIEEgU25hcHNob3QgaXMgb25seSBldmVyIGluIHRoZSBTVE9QUEVEIHN0YXRlIGZyb21cbiAgICAgICAgICB0aGUgbW9tZW50IGl0IGlzIGNyZWF0ZWQuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPEFjdGlvbkdyb3VwPlxuICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVDcmVhdGVTbmFwc2hvdH0gaXNEaXNhYmxlZD17bG9hZGluZ30gey4uLmNyZWF0ZUJ1dHRvbkxvYWRpbmdQcm9wc30+XG4gICAgICAgICAgICB7bG9hZGluZyA/ICdDcmVhdGluZycgOiAnQ3JlYXRlJ31cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXtoaXN0b3J5LmdvQmFja30gaXNEaXNhYmxlZD17bG9hZGluZ30+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICAgIDwvRm9ybT5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IFJlY29yZGluZ0xhYmVsIH0gZnJvbSAnQGFwcC9SZWNvcmRpbmdNZXRhZGF0YS9SZWNvcmRpbmdMYWJlbCc7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXRWaWV3IH0gZnJvbSAnQGFwcC9UYXJnZXRWaWV3L1RhcmdldFZpZXcnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZEJvZHksIFRhYiwgVGFicyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3RhdGljQ29udGV4dCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyBSb3V0ZUNvbXBvbmVudFByb3BzLCB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBDdXN0b21SZWNvcmRpbmdGb3JtIH0gZnJvbSAnLi9DdXN0b21SZWNvcmRpbmdGb3JtJztcbmltcG9ydCB7IFNuYXBzaG90UmVjb3JkaW5nRm9ybSB9IGZyb20gJy4vU25hcHNob3RSZWNvcmRpbmdGb3JtJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZWNvcmRpbmdQcm9wcyB7XG4gIHJlc3RhcnRFeGlzdGluZz86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbXBsYXRlTmFtZT86IHN0cmluZztcbiAgdGVtcGxhdGVUeXBlPzogVGVtcGxhdGVUeXBlO1xuICBsYWJlbHM/OiBSZWNvcmRpbmdMYWJlbFtdO1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgbWF4QWdlPzogbnVtYmVyO1xuICBtYXhTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VGVtcGxhdGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIHR5cGU6IFRlbXBsYXRlVHlwZTtcbn1cblxuY29uc3QgQ29tcDogUmVhY3QuRkM8Um91dGVDb21wb25lbnRQcm9wczxSZWNvcmQ8c3RyaW5nLCBuZXZlcj4sIFN0YXRpY0NvbnRleHQsIENyZWF0ZVJlY29yZGluZ1Byb3BzPj4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IG9uVGFiU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2dCwgaWR4KSA9PiBzZXRBY3RpdmVUYWIoTnVtYmVyKGlkeCkpLCBbc2V0QWN0aXZlVGFiXSk7XG5cbiAgY29uc3QgcHJlZmlsbGVkID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgcmVzdGFydEV4aXN0aW5nOiBwcm9wcy5sb2NhdGlvbj8uc3RhdGU/LnJlc3RhcnRFeGlzdGluZyxcbiAgICAgIG5hbWU6IHByb3BzLmxvY2F0aW9uPy5zdGF0ZT8ubmFtZSxcbiAgICAgIHRlbXBsYXRlTmFtZTogcHJvcHMubG9jYXRpb24/LnN0YXRlPy50ZW1wbGF0ZU5hbWUsXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHByb3BzLmxvY2F0aW9uPy5zdGF0ZT8udGVtcGxhdGVUeXBlLFxuICAgICAgbGFiZWxzOiBwcm9wcy5sb2NhdGlvbj8uc3RhdGU/LmxhYmVscyxcbiAgICAgIGR1cmF0aW9uOiBwcm9wcy5sb2NhdGlvbj8uc3RhdGU/LmR1cmF0aW9uLFxuICAgICAgbWF4QWdlOiBwcm9wcy5sb2NhdGlvbj8uc3RhdGU/Lm1heEFnZSxcbiAgICAgIG1heFNpemU6IHByb3BzLmxvY2F0aW9uPy5zdGF0ZT8ubWF4U2l6ZSxcbiAgICB9KSxcbiAgICBbcHJvcHMubG9jYXRpb25dXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8VGFyZ2V0VmlldyBwYWdlVGl0bGU9XCJDcmVhdGUgUmVjb3JkaW5nXCIgYnJlYWRjcnVtYnM9e1t7IHRpdGxlOiAnUmVjb3JkaW5ncycsIHBhdGg6ICcvcmVjb3JkaW5ncycgfV19PlxuICAgICAgPENhcmQ+XG4gICAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgICA8VGFicyBhY3RpdmVLZXk9e2FjdGl2ZVRhYn0gb25TZWxlY3Q9e29uVGFiU2VsZWN0fT5cbiAgICAgICAgICAgIDxUYWIgZXZlbnRLZXk9ezB9IHRpdGxlPVwiQ3VzdG9tIEZsaWdodCBSZWNvcmRpbmdcIj5cbiAgICAgICAgICAgICAgPEN1c3RvbVJlY29yZGluZ0Zvcm0gcHJlZmlsbGVkPXtwcmVmaWxsZWR9IC8+XG4gICAgICAgICAgICA8L1RhYj5cbiAgICAgICAgICAgIDxUYWIgZXZlbnRLZXk9ezF9IHRpdGxlPVwiU25hcHNob3QgUmVjb3JkaW5nXCI+XG4gICAgICAgICAgICAgIDxTbmFwc2hvdFJlY29yZGluZ0Zvcm0gLz5cbiAgICAgICAgICAgIDwvVGFiPlxuICAgICAgICAgIDwvVGFicz5cbiAgICAgICAgPC9DYXJkQm9keT5cbiAgICAgIDwvQ2FyZD5cbiAgICA8L1RhcmdldFZpZXc+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQ3JlYXRlUmVjb3JkaW5nID0gd2l0aFJvdXRlcihDb21wKTtcbmV4cG9ydCBkZWZhdWx0IENyZWF0ZVJlY29yZGluZztcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNGZWF0dXJlRmxhZ1Byb3BzIHtcbiAgbGV2ZWxzOiBGZWF0dXJlTGV2ZWxbXTtcbiAgY29tcG9uZW50OiAobGV2ZWw6IEZlYXR1cmVMZXZlbCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBkZWZhdWx0Q29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgY29uc3QgRHluYW1pY0ZlYXR1cmVGbGFnOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxEeW5hbWljRmVhdHVyZUZsYWdQcm9wcz4gPSAoe1xuICBsZXZlbHMsXG4gIGNvbXBvbmVudCxcbiAgZGVmYXVsdENvbXBvbmVudCxcbn0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IFthY3RpdmVMZXZlbCwgc2V0QWN0aXZlTGV2ZWxdID0gUmVhY3QudXNlU3RhdGUoRmVhdHVyZUxldmVsLlBST0RVQ1RJT04pO1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQuc2V0dGluZ3MuZmVhdHVyZUxldmVsKCkuc3Vic2NyaWJlKChmZWF0dXJlTGV2ZWwpID0+IHNldEFjdGl2ZUxldmVsKGZlYXR1cmVMZXZlbCkpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5zZXR0aW5ncywgc2V0QWN0aXZlTGV2ZWxdKTtcblxuICBjb25zdCB0b1JlbmRlciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsZXZlbHMuaW5jbHVkZXMoYWN0aXZlTGV2ZWwpKSB7XG4gICAgICByZXR1cm4gY29tcG9uZW50KGFjdGl2ZUxldmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnQ7XG4gIH0sIFtsZXZlbHMsIGFjdGl2ZUxldmVsLCBjb21wb25lbnQsIGRlZmF1bHRDb21wb25lbnRdKTtcblxuICByZXR1cm4gPD57dG9SZW5kZXJ9PC8+O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ1Byb3BzIHtcbiAgc3RyaWN0PzogYm9vbGVhbjtcbiAgbGV2ZWw6IEZlYXR1cmVMZXZlbDtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlRmxhZzogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8RmVhdHVyZUZsYWdQcm9wcz4gPSAoeyBsZXZlbCwgc3RyaWN0LCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IGxldmVscyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKHN0cmljdCA/IFtsZXZlbF0gOiBbLi4uQXJyYXkuZnJvbSh7IGxlbmd0aDogbGV2ZWwgKyAxIH0sIChfLCBpKSA9PiBpKV0pLFxuICAgIFtzdHJpY3QsIGxldmVsXVxuICApO1xuICBjb25zdCBjb21wb25lbnQgPSBSZWFjdC51c2VDYWxsYmFjaygoXykgPT4gPD57Y2hpbGRyZW59PC8+LCBbY2hpbGRyZW5dKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHluYW1pY0ZlYXR1cmVGbGFnIGxldmVscz17bGV2ZWxzfSBjb21wb25lbnQ9e2NvbXBvbmVudH0gLz5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlciB9IGZyb20gJ0BhcHAvRGFzaGJvYXJkL0NoYXJ0cy9qZnIvSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlcic7XG5pbXBvcnQgeyBNQmVhbk1ldHJpY3NDaGFydENvbnRyb2xsZXIgfSBmcm9tICdAYXBwL0Rhc2hib2FyZC9DaGFydHMvbWJlYW4vTUJlYW5NZXRyaWNzQ2hhcnRDb250cm9sbGVyJztcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJ0BhcHAvRXZlbnRzL0V2ZW50VHlwZXMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9ucywgTm90aWZpY2F0aW9uc0luc3RhbmNlIH0gZnJvbSAnQGFwcC9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgUnVsZSB9IGZyb20gJ0BhcHAvUnVsZXMvUnVsZXMnO1xuaW1wb3J0IHtcbiAgQWN0aXZlUmVjb3JkaW5nLFxuICBBY3RpdmVSZWNvcmRpbmdGaWx0ZXJJbnB1dCxcbiAgQXBpU2VydmljZSxcbiAgQXJjaGl2ZWRSZWNvcmRpbmcsXG4gIENoYXJ0Q29udHJvbGxlckNvbmZpZyxcbiAgRXZlbnRQcm9iZSxcbiAgRXZlbnRUZW1wbGF0ZSxcbiAgTUJlYW5NZXRyaWNzLFxuICBSZWNvcmRpbmcsXG4gIFJlY29yZGluZ0F0dHJpYnV0ZXMsXG4gIFJlY29yZGluZ1N0YXRlLFxuICBTaW1wbGVSZXNwb25zZSxcbiAgU3RvcmVkQ3JlZGVudGlhbCxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBDYWNoZWRSZXBvcnRWYWx1ZSwgUmVwb3J0U2VydmljZSwgUnVsZUV2YWx1YXRpb24gfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9SZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBkZWZhdWx0U2VydmljZXMsIFNlcnZpY2VzIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXQsIFRhcmdldFNlcnZpY2UgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgZmFrZVRhcmdldDogVGFyZ2V0ID0ge1xuICBqdm1JZDogJ3JwWmVZTkI5d01fVEVuWG9KdkFGdVIwamRjVUJYWmd2a1hpS2hqUUdGdlk9JyxcbiAgY29ubmVjdFVybDogJ3NlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLzEwLTEyOC0yLTI1Lm15LW5hbWVzcGFjZS5wb2Q6OTA5Ny9qbXhybWknLFxuICBhbGlhczogJ3F1YXJrdXMtdGVzdC03N2Y1NTY1ODZjLTI1Ymt2JyxcbiAgbGFiZWxzOiB7XG4gICAgJ3BvZC10ZW1wbGF0ZS1oYXNoJzogJzc3ZjU1NjU4NmMnLFxuICAgIGRlcGxveW1lbnQ6ICdxdWFya3VzLXRlc3QnLFxuICB9LFxuICBhbm5vdGF0aW9uczoge1xuICAgIGNyeW9zdGF0OiB7XG4gICAgICBIT1NUOiAnMTAuMTI4LjIuMjUnLFxuICAgICAgUE9SVDogJzkwOTcnLFxuICAgICAgUE9EX05BTUU6ICdxdWFya3VzLXRlc3QtNzdmNTU2NTg2Yy0yNWJrdicsXG4gICAgICBSRUFMTTogJ0t1YmVybmV0ZXNBcGknLFxuICAgICAgTkFNRVNQQUNFOiAnbXktbmFtZXNwYWNlJyxcbiAgICB9LFxuICAgIHBsYXRmb3JtOiB7fSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBmYWtlQUFSZWNvcmRpbmc6IEFjdGl2ZVJlY29yZGluZyA9IHtcbiAgbmFtZTogJ2F1dG9tYXRlZC1hbmFseXNpcycsXG4gIGRvd25sb2FkVXJsOlxuICAgICdodHRwczovL2NsdXN0ZXJjcnlvc3RhdC1zYW1wbGUtZGVmYXVsdC5hcHBzLmNpLWxuLTI1Zmc1ZjItNzZlZjgub3JpZ2luLWNpLWludC1hd3MuZGV2LnJoY2xvdWQuY29tOjQ0My9hcGkvdjEvdGFyZ2V0cy9zZXJ2aWNlOmpteDpybWk6JTJGJTJGJTJGam5kaSUyRnJtaTolMkYlMkYxMC0xMjgtMi0yNy5teS1uYW1lc3BhY2UucG9kOjkwOTclMkZqbXhybWkvcmVjb3JkaW5ncy9hdXRvbWF0ZWQtYW5hbHlzaXMnLFxuICByZXBvcnRVcmw6XG4gICAgJ2h0dHBzOi8vY2x1c3RlcmNyeW9zdGF0LXNhbXBsZS1kZWZhdWx0LmFwcHMuY2ktbG4tMjVmZzVmMi03NmVmOC5vcmlnaW4tY2ktaW50LWF3cy5kZXYucmhjbG91ZC5jb206NDQzL2FwaS92MS90YXJnZXRzL3NlcnZpY2U6am14OnJtaTolMkYlMkYlMkZqbmRpJTJGcm1pOiUyRiUyRjEwLTEyOC0yLTI3Lm15LW5hbWVzcGFjZS5wb2Q6OTA5NyUyRmpteHJtaS9yZXBvcnRzL2F1dG9tYXRlZC1hbmFseXNpcycsXG4gIG1ldGFkYXRhOiB7XG4gICAgbGFiZWxzOiB7XG4gICAgICAndGVtcGxhdGUubmFtZSc6ICdQcm9maWxpbmcnLFxuICAgICAgJ3RlbXBsYXRlLnR5cGUnOiAnVEFSR0VUJyxcbiAgICAgIG9yaWdpbjogJ2F1dG9tYXRlZC1hbmFseXNpcycsXG4gICAgfSxcbiAgfSxcbiAgc3RhcnRUaW1lOiAxNjgwNzMyODA3LFxuICBpZDogMCxcbiAgc3RhdGU6IFJlY29yZGluZ1N0YXRlLlJVTk5JTkcsXG4gIGR1cmF0aW9uOiAwLCAvLyBDb250aW51b3VzXG4gIGNvbnRpbnVvdXM6IGZhbHNlLFxuICB0b0Rpc2s6IGZhbHNlLFxuICBtYXhTaXplOiAxMDQ4NTc2LFxuICBtYXhBZ2U6IDAsXG59O1xuXG5leHBvcnQgY29uc3QgZmFrZUV2YWx1YXRpb25zOiBSdWxlRXZhbHVhdGlvbltdID0gW1xuICB7XG4gICAgbmFtZTogJ1Bhc3N3b3JkcyBpbiBFbnZpcm9ubWVudCBWYXJpYWJsZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgcmVjb3JkaW5nIG1heSBjb250YWluIHBhc3N3b3Jkcy4nLFxuICAgIHNjb3JlOiAxMDAsXG4gICAgdG9waWM6ICdlbnZpcm9ubWVudF92YXJpYWJsZXMnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0NsYXNzIExlYWsnLFxuICAgIGRlc2NyaXB0aW9uOiAnTm8gY2xhc3NlcyB3aXRoIGlkZW50aWNhbCBuYW1lcyBoYXZlIGJlZW4gbG9hZGVkIG1vcmUgdGltZXMgdGhhbiB0aGUgbGltaXQuJyxcbiAgICBzY29yZTogMCxcbiAgICB0b3BpYzogJ2NsYXNzbG9hZGluZycsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQ2xhc3MgTG9hZGluZyBQcmVzc3VyZScsXG4gICAgZGVzY3JpcHRpb246ICdObyBzaWduaWZpY2FudCB0aW1lIHdhcyBzcGVudCBsb2FkaW5nIG5ldyBjbGFzc2VzIGR1cmluZyB0aGlzIHJlY29yZGluZy4nLFxuICAgIHNjb3JlOiAwLFxuICAgIHRvcGljOiAnY2xhc3Nsb2FkaW5nJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdEaXNjb3VyYWdlZCBNYW5hZ2VtZW50IEFnZW50IFNldHRpbmdzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0luc2VjdXJlIG1hbmFnZW1lbnQgYWdlbnQgc2V0dGluZ3M6IFNTTCBkaXNhYmxlZC4nLFxuICAgIHNjb3JlOiA1MCxcbiAgICB0b3BpYzogJ2p2bV9pbmZvcm1hdGlvbicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGhyb3duIEV4Y2VwdGlvbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlIHByb2dyYW0gZ2VuZXJhdGVkIDMxLjggZXhjZXB0aW9ucyBwZXIgc2Vjb25kIGR1cmluZyAxLjAwNiBzIHN0YXJ0aW5nIGF0IDEvMjMvNDUsIDY6Nzg6OTAgQU0uJyxcbiAgICBzY29yZTogMC4yLFxuICAgIHRvcGljOiAnZXhjZXB0aW9ucycsXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgZmFrZUNhY2hlZFJlcG9ydDogQ2FjaGVkUmVwb3J0VmFsdWUgPSB7XG4gIHJlcG9ydDogZmFrZUV2YWx1YXRpb25zLFxuICB0aW1lc3RhbXA6IDE2NjMwMjcyMDAwMDAsXG59O1xuXG5jbGFzcyBGYWtlVGFyZ2V0U2VydmljZSBleHRlbmRzIFRhcmdldFNlcnZpY2Uge1xuICB0YXJnZXQoKTogT2JzZXJ2YWJsZTxUYXJnZXQ+IHtcbiAgICByZXR1cm4gb2YoZmFrZVRhcmdldCk7XG4gIH1cbn1cblxuY2xhc3MgRmFrZVJlcG9ydFNlcnZpY2UgZXh0ZW5kcyBSZXBvcnRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3Iobm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9ucywgbG9naW46IExvZ2luU2VydmljZSkge1xuICAgIHN1cGVyKGxvZ2luLCBub3RpZmljYXRpb25zKTtcbiAgfVxuXG4gIHJlcG9ydEpzb24oX3JlY29yZGluZzogUmVjb3JkaW5nLCBfY29ubmVjdFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSdWxlRXZhbHVhdGlvbltdPiB7XG4gICAgcmV0dXJuIG9mKGZha2VFdmFsdWF0aW9ucyk7XG4gIH1cblxuICBnZXRDYWNoZWRBbmFseXNpc1JlcG9ydChfY29ubmVjdFVybDogc3RyaW5nKTogQ2FjaGVkUmVwb3J0VmFsdWUge1xuICAgIHJldHVybiBmYWtlQ2FjaGVkUmVwb3J0O1xuICB9XG59XG5cbmNsYXNzIEZha2VTZXR0aW5nIGV4dGVuZHMgU2V0dGluZ3NTZXJ2aWNlIHtcbiAgY2hhcnRDb250cm9sbGVyQ29uZmlnKFxuICAgIF9kZWZhdWx0Q29uZmlnID0ge1xuICAgICAgbWluUmVmcmVzaDogMC4xLFxuICAgIH1cbiAgKTogQ2hhcnRDb250cm9sbGVyQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWluUmVmcmVzaDogMC4xLFxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgRmFrZUFwaVNlcnZpY2UgZXh0ZW5kcyBBcGlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IodGFyZ2V0OiBUYXJnZXRTZXJ2aWNlLCBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zLCBsb2dpbjogTG9naW5TZXJ2aWNlKSB7XG4gICAgc3VwZXIodGFyZ2V0LCBub3RpZmljYXRpb25zLCBsb2dpbik7XG4gIH1cblxuICAvLyBNQmVhbiBNZXRyaWNzIGNhcmRcbiAgZ2V0VGFyZ2V0TUJlYW5NZXRyaWNzKF90YXJnZXQ6IFRhcmdldCwgX3F1ZXJpZXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxNQmVhbk1ldHJpY3M+IHtcbiAgICByZXR1cm4gb2Yoe1xuICAgICAgdGhyZWFkOiB7XG4gICAgICAgIHRocmVhZENvdW50OiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDUpLFxuICAgICAgICBkYWVtb25UaHJlYWRDb3VudDogTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA1KSxcbiAgICAgIH0sXG4gICAgICBvczoge1xuICAgICAgICBhcmNoOiAneDg2XzY0JyxcbiAgICAgICAgYXZhaWxhYmxlUHJvY2Vzc29yczogTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA4KSxcbiAgICAgICAgdmVyc2lvbjogJzEwLjAuMScsXG4gICAgICAgIHN5c3RlbUNwdUxvYWQ6IE1hdGgucmFuZG9tKCksXG4gICAgICAgIHN5c3RlbUxvYWRBdmVyYWdlOiBNYXRoLnJhbmRvbSgpLFxuICAgICAgICBwcm9jZXNzQ3B1TG9hZDogTWF0aC5yYW5kb20oKSxcbiAgICAgICAgdG90YWxQaHlzaWNhbE1lbW9yeVNpemU6IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogNjQpLFxuICAgICAgICBmcmVlUGh5c2ljYWxNZW1vcnlTaXplOiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDY0KSxcbiAgICAgIH0sXG4gICAgICBtZW1vcnk6IHtcbiAgICAgICAgaGVhcE1lbW9yeVVzYWdlOiB7XG4gICAgICAgICAgaW5pdDogTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA2NCksXG4gICAgICAgICAgdXNlZDogTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA2NCksXG4gICAgICAgICAgY29tbWl0dGVkOiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDY0KSxcbiAgICAgICAgICBtYXg6IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogNjQpLFxuICAgICAgICB9LFxuICAgICAgICBub25IZWFwTWVtb3J5VXNhZ2U6IHtcbiAgICAgICAgICBpbml0OiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDY0KSxcbiAgICAgICAgICB1c2VkOiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDY0KSxcbiAgICAgICAgICBjb21taXR0ZWQ6IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogNjQpLFxuICAgICAgICAgIG1heDogTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiA2NCksXG4gICAgICAgIH0sXG4gICAgICAgIGhlYXBNZW1vcnlVc2FnZVBlcmNlbnQ6IE1hdGgucmFuZG9tKCksXG4gICAgICB9LFxuICAgICAgcnVudGltZToge1xuICAgICAgICBib290Q2xhc3NQYXRoOiAnL3BhdGgvdG8vYm9vdC9jbGFzc3BhdGgnLFxuICAgICAgICBjbGFzc1BhdGg6ICcvcGF0aC90by9jbGFzc3BhdGgnLFxuICAgICAgICBpbnB1dEFyZ3VtZW50czogWyctWG14MWcnLCAnLURqYXZhLnNlY3VyaXR5LnBvbGljeT0uLi4nXSxcbiAgICAgICAgbGlicmFyeVBhdGg6ICcvcGF0aC90by9saWJyYXJ5L3BhdGgnLFxuICAgICAgICBtYW5hZ2VtZW50U3BlY1ZlcnNpb246ICcxLjAnLFxuICAgICAgICBuYW1lOiAnSmF2YSBWaXJ0dWFsIE1hY2hpbmUnLFxuICAgICAgICBzcGVjTmFtZTogJ0phdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24nLFxuICAgICAgICBzcGVjVmVuZG9yOiAnT3JhY2xlIENvcnBvcmF0aW9uJyxcbiAgICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAvLyBzeXN0ZW1Qcm9wZXJ0aWVzOiB7Li4ufVxuICAgICAgICB1cHRpbWU6IERhdGUubm93KCksXG4gICAgICAgIHZtTmFtZTogJ0phdmEgSG90U3BvdChUTSkgNjQtQml0IFNlcnZlciBWTScsXG4gICAgICAgIHZtVmVuZG9yOiAnT3JhY2xlIENvcnBvcmF0aW9uJyxcbiAgICAgICAgdm1WZXJzaW9uOiAnMjUuMTMxLWIxMScsXG4gICAgICAgIGJvb3RDbGFzc1BhdGhTdXBwb3J0ZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0gYXMgTUJlYW5NZXRyaWNzKTtcbiAgfVxuXG4gIC8vIEpGUiBNZXRyaWNzIGNhcmRcbiAgdGFyZ2V0SGFzUmVjb3JkaW5nKF90YXJnZXQ6IFRhcmdldCwgX2ZpbHRlcj86IEFjdGl2ZVJlY29yZGluZ0ZpbHRlcklucHV0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG9mKHRydWUpO1xuICB9XG5cbiAgdXBsb2FkQWN0aXZlUmVjb3JkaW5nVG9HcmFmYW5hKF9yZWNvcmRpbmdOYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cblxuICBncmFmYW5hRGFzaGJvYXJkVXJsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG9mKCdodHRwczovL2dyYWZhbmEtdXJsJyk7XG4gIH1cblxuICAvLyBKVk0gRGV0YWlsIENhcmRzXG4gIC8vIE5vdGUgVCBpcyBleHBlY3RlZCB0byBhcnJheSBkdWUgdG8gaXRzIHVzYWdlIGluIEVudGl0eURldGFpbCBjb21wb25lbnQuXG4gIGdldFRhcmdldEFjdGl2ZVJlY29yZGluZ3MoX3RhcmdldDogVGFyZ2V0KTogT2JzZXJ2YWJsZTxBY3RpdmVSZWNvcmRpbmdbXT4ge1xuICAgIHJldHVybiBvZihbZmFrZUFBUmVjb3JkaW5nXSk7XG4gIH1cblxuICBnZXRUYXJnZXRBcmNoaXZlZFJlY29yZGluZ3MoX3RhcmdldDogVGFyZ2V0KTogT2JzZXJ2YWJsZTxBcmNoaXZlZFJlY29yZGluZ1tdPiB7XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFRhcmdldEV2ZW50VGVtcGxhdGVzKF90YXJnZXQ6IFRhcmdldCk6IE9ic2VydmFibGU8RXZlbnRUZW1wbGF0ZVtdPiB7XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFRhcmdldEV2ZW50VHlwZXMoX3RhcmdldDogVGFyZ2V0KTogT2JzZXJ2YWJsZTxFdmVudFR5cGVbXT4ge1xuICAgIHJldHVybiBvZihbXSk7XG4gIH1cblxuICBnZXRBY3RpdmVQcm9iZXNGb3JUYXJnZXQoXG4gICAgX3RhcmdldDogVGFyZ2V0LFxuICAgIF9zdXBwcmVzc05vdGlmaWNhdGlvbnM/OiBib29sZWFuLFxuICAgIF9za2lwU3RhdHVzQ2hlY2s/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8RXZlbnRQcm9iZVtdPiB7XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFJ1bGVzKF9zdXBwcmVzc05vdGlmaWNhdGlvbnM/OiBib29sZWFuLCBfc2tpcFN0YXR1c0NoZWNrPzogYm9vbGVhbik6IE9ic2VydmFibGU8UnVsZVtdPiB7XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKF9zdXBwcmVzc05vdGlmaWNhdGlvbnM/OiBib29sZWFuLCBfc2tpcFN0YXR1c0NoZWNrPzogYm9vbGVhbik6IE9ic2VydmFibGU8U3RvcmVkQ3JlZGVudGlhbFtdPiB7XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIC8vIEF1dG9tYXRpYyBBbmFseXNpcyBDYXJkXG4gIC8vIFRoaXMgZmFrZXMgdGhlIGZldGNoIGZvciBBdXRvbWF0aWMgQW5hbHlzaXMgcmVjb3JkaW5nIHRvIHJldHVybiBhdmFpbGFibGUuXG4gIC8vIFRoZW4gc3Vic2VxdWVudCBncmFwaHFsIGNhbGwgZm9yIGFyY2hpdmVkIHJlY29yZGluZyBpcyBpZ25vcmVkXG4gIGdyYXBocWw8VD4oXG4gICAgX3F1ZXJ5OiBzdHJpbmcsXG4gICAgX3ZhcmlhYmxlcz86IHVua25vd24sXG4gICAgX3N1cHByZXNzTm90aWZpY2F0aW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICAgX3NraXBTdGF0dXNDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGFyZ2V0Tm9kZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWNvcmRpbmdzOiB7XG4gICAgICAgICAgICAgIGFjdGl2ZToge1xuICAgICAgICAgICAgICAgIGRhdGE6IFtmYWtlQUFSZWNvcmRpbmddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9IGFzIFQpO1xuICB9XG5cbiAgY3JlYXRlUmVjb3JkaW5nKF9yZWNvcmRpbmdBdHRyaWJ1dGVzOiBSZWNvcmRpbmdBdHRyaWJ1dGVzKTogT2JzZXJ2YWJsZTxTaW1wbGVSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBvZih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHN0YXR1czogMjAwLFxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlUmVjb3JkaW5nKF9yZWNvcmRpbmdOYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cblxuY29uc3QgdGFyZ2V0ID0gbmV3IEZha2VUYXJnZXRTZXJ2aWNlKCk7XG5jb25zdCBhcGkgPSBuZXcgRmFrZUFwaVNlcnZpY2UodGFyZ2V0LCBOb3RpZmljYXRpb25zSW5zdGFuY2UsIGRlZmF1bHRTZXJ2aWNlcy5sb2dpbik7XG5jb25zdCByZXBvcnRzID0gbmV3IEZha2VSZXBvcnRTZXJ2aWNlKE5vdGlmaWNhdGlvbnNJbnN0YW5jZSwgZGVmYXVsdFNlcnZpY2VzLmxvZ2luKTtcbmNvbnN0IHNldHRpbmdzID0gbmV3IEZha2VTZXR0aW5nKCk7XG5cbmV4cG9ydCBjb25zdCBmYWtlU2VydmljZXM6IFNlcnZpY2VzID0ge1xuICAuLi5kZWZhdWx0U2VydmljZXMsXG4gIHRhcmdldCxcbiAgYXBpLFxuICByZXBvcnRzLFxuICBzZXR0aW5ncyxcbn07XG5cbmV4cG9ydCBjb25zdCBmYWtlQ2hhcnRDb250ZXh0ID0ge1xuICBqZnJDb250cm9sbGVyOiBuZXcgSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlcihcbiAgICBmYWtlU2VydmljZXMuYXBpLFxuICAgIGZha2VTZXJ2aWNlcy50YXJnZXQsXG4gICAgZmFrZVNlcnZpY2VzLm5vdGlmaWNhdGlvbkNoYW5uZWwsXG4gICAgZmFrZVNlcnZpY2VzLnNldHRpbmdzXG4gICksXG4gIG1iZWFuQ29udHJvbGxlcjogbmV3IE1CZWFuTWV0cmljc0NoYXJ0Q29udHJvbGxlcihmYWtlU2VydmljZXMuYXBpLCBmYWtlU2VydmljZXMudGFyZ2V0LCBmYWtlU2VydmljZXMuc2V0dGluZ3MpLFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgZGFzaGJvYXJkQ29uZmlnQWRkQ2FyZEludGVudCwgU3RhdGVEaXNwYXRjaCB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L1JlZHV4U3RvcmUnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBFbXB0eVRleHQgfSBmcm9tICdAYXBwL1RvcG9sb2d5L1NoYXJlZC9FbXB0eVRleHQnO1xuaW1wb3J0IFF1aWNrU2VhcmNoSWNvbiBmcm9tICdAYXBwL1RvcG9sb2d5L1NoYXJlZC9RdWlja1NlYXJjaEljb24nO1xuaW1wb3J0IHsgZmFrZUNoYXJ0Q29udGV4dCwgZmFrZVNlcnZpY2VzIH0gZnJvbSAnQGFwcC91dGlscy9mYWtlRGF0YSc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL3V0aWxzL3VzZUZlYXR1cmVMZXZlbCc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIEJ1bGxzZXllLFxuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRCb2R5LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIERyYXdlcixcbiAgRHJhd2VyQWN0aW9ucyxcbiAgRHJhd2VyQ2xvc2VCdXR0b24sXG4gIERyYXdlckNvbnRlbnQsXG4gIERyYXdlckNvbnRlbnRCb2R5LFxuICBEcmF3ZXJIZWFkLFxuICBEcmF3ZXJQYW5lbEJvZHksXG4gIERyYXdlclBhbmVsQ29udGVudCxcbiAgRW1wdHlTdGF0ZSxcbiAgRW1wdHlTdGF0ZUJvZHksXG4gIEVtcHR5U3RhdGVJY29uLFxuICBFbXB0eVN0YXRlVmFyaWFudCxcbiAgRmxleCxcbiAgRmxleEl0ZW0sXG4gIEZvcm0sXG4gIEZvcm1Hcm91cCxcbiAgR3JpZCxcbiAgR3JpZEl0ZW0sXG4gIExhYmVsLFxuICBMYWJlbEdyb3VwLFxuICBMZXZlbCxcbiAgTGV2ZWxJdGVtLFxuICBNb2RhbCxcbiAgTnVtYmVySW5wdXQsXG4gIFNlbGVjdCxcbiAgU2VsZWN0T3B0aW9uLFxuICBTZWxlY3RPcHRpb25PYmplY3QsXG4gIFN0YWNrLFxuICBTdGFja0l0ZW0sXG4gIFN3aXRjaCxcbiAgVGV4dCxcbiAgVGV4dEFyZWEsXG4gIFRleHRJbnB1dCxcbiAgVGl0bGUsXG4gIFRvb2x0aXAsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tV2l6YXJkTmF2RnVuY3Rpb24sXG4gIFdpemFyZCxcbiAgV2l6YXJkQ29udHJvbFN0ZXAsXG4gIFdpemFyZEhlYWRlcixcbiAgV2l6YXJkTmF2LFxuICBXaXphcmROYXZJdGVtLFxuICBXaXphcmRTdGVwLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlL2Rpc3QvanMvbmV4dCc7XG5pbXBvcnQgeyBQbHVzQ2lyY2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IFRGdW5jdGlvbiB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFydENvbnRleHQgfSBmcm9tICcuL0NoYXJ0cy9DaGFydENvbnRleHQnO1xuaW1wb3J0IHtcbiAgZ2V0Q2FyZERlc2NyaXB0b3JCeVRpdGxlLFxuICBnZXREYXNoYm9hcmRDYXJkcyxcbiAgQ2FyZENvbmZpZyxcbiAgRGFzaGJvYXJkQ2FyZERlc2NyaXB0b3IsXG4gIFByb3BDb250cm9sLFxufSBmcm9tICcuL2Rhc2hib2FyZC11dGlscyc7XG5cbmludGVyZmFjZSBBZGRDYXJkUHJvcHMge1xuICB2YXJpYW50OiAnY2FyZCcgfCAnaWNvbi1idXR0b24nO1xufVxuXG5leHBvcnQgY29uc3QgQWRkQ2FyZDogUmVhY3QuRkM8QWRkQ2FyZFByb3BzPiA9ICh7IHZhcmlhbnQsIC4uLl9wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2g8U3RhdGVEaXNwYXRjaD4oKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IFtzaG93V2l6YXJkLCBzZXRTaG93V2l6YXJkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGlvbiwgc2V0U2VsZWN0aW9uXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Byb3BzQ29uZmlnLCBzZXRQcm9wc0NvbmZpZ10gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG5cbiAgY29uc3QgY2F0YWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0Lk1vdXNlRXZlbnQsIHNlbGVjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGMgPSB7fTtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgZ2V0Q2FyZERlc2NyaXB0b3JCeVRpdGxlKHNlbGVjdGlvbiwgdCkucHJvcENvbnRyb2xzLmZvckVhY2goKGN0cmwpID0+IChjW2N0cmwua2V5XSA9IGN0cmwuZGVmYXVsdFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBzZXRQcm9wc0NvbmZpZyhjKTtcbiAgICB9LFxuICAgIFt0LCBzZXRTZWxlY3Rpb24sIHNldFByb3BzQ29uZmlnXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUFkZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93V2l6YXJkKGZhbHNlKTtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDYXJkRGVzY3JpcHRvckJ5VGl0bGUoc2VsZWN0aW9uLCB0KTtcbiAgICBjb25zdCBjYXJkQ29uZmlnOiBDYXJkQ29uZmlnID0ge1xuICAgICAgaWQ6IGAke2NvbmZpZy5jb21wb25lbnQubmFtZX0tJHtuYW5vaWQoKX1gLFxuICAgICAgbmFtZTogY29uZmlnLmNvbXBvbmVudC5uYW1lLFxuICAgICAgc3BhbjogY29uZmlnLmNhcmRTaXplcy5zcGFuLmRlZmF1bHQsXG4gICAgICBwcm9wczogcHJvcHNDb25maWcsXG4gICAgfTtcbiAgICBkaXNwYXRjaChkYXNoYm9hcmRDb25maWdBZGRDYXJkSW50ZW50KGNhcmRDb25maWcuaWQsIGNhcmRDb25maWcubmFtZSwgY2FyZENvbmZpZy5zcGFuLCBjYXJkQ29uZmlnLnByb3BzKSk7XG4gIH0sIFtkaXNwYXRjaCwgdCwgc2V0U2hvd1dpemFyZCwgc2VsZWN0aW9uLCBwcm9wc0NvbmZpZ10pO1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNob3dXaXphcmQodHJ1ZSk7XG4gICAgY2F0YWxvZ1JlZi5jdXJyZW50Py5ibHVyKCk7XG4gIH0sIFtzZXRTaG93V2l6YXJkXSk7XG5cbiAgY29uc3QgaGFuZGxlU3RvcCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93V2l6YXJkKGZhbHNlKTtcbiAgICBzZXRTZWxlY3Rpb24oJycpO1xuICAgIHNldFByb3BzQ29uZmlnKHt9KTtcbiAgfSwgW3NldFNlbGVjdGlvbiwgc2V0U2hvd1dpemFyZCwgc2V0UHJvcHNDb25maWddKTtcblxuICAvLyBjdXN0b20gbmF2IGZvciBkaXNhYmxpbmcgc3Vic2VxdWVudCBzdGVwcyAoZXguIGNvbmZpZ3VyYXRpb24pIGlmIGEgY2FyZCB0eXBlIGhhc24ndCBiZWVuIHNlbGVjdGVkIGZpcnN0XG4gIGNvbnN0IGN1c3RvbU5hdjogQ3VzdG9tV2l6YXJkTmF2RnVuY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBpc0V4cGFuZGVkOiBib29sZWFuLFxuICAgICAgc3RlcHM6IFdpemFyZENvbnRyb2xTdGVwW10sXG4gICAgICBhY3RpdmVTdGVwOiBXaXphcmRDb250cm9sU3RlcCxcbiAgICAgIGdvVG9TdGVwQnlJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgICApID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXaXphcmROYXYgaXNFeHBhbmRlZD17aXNFeHBhbmRlZH0+XG4gICAgICAgICAge3N0ZXBzXG4gICAgICAgICAgICAuZmlsdGVyKChzdGVwKSA9PiAhc3RlcC5pc0hpZGRlbilcbiAgICAgICAgICAgIC5tYXAoKHN0ZXAsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICA8V2l6YXJkTmF2SXRlbVxuICAgICAgICAgICAgICAgIGtleT17c3RlcC5pZH1cbiAgICAgICAgICAgICAgICBpZD17c3RlcC5pZH1cbiAgICAgICAgICAgICAgICBjb250ZW50PXtzdGVwLm5hbWV9XG4gICAgICAgICAgICAgICAgaXNDdXJyZW50PXthY3RpdmVTdGVwLmlkID09PSBzdGVwLmlkfVxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3N0ZXAuaXNEaXNhYmxlZCB8fCAoaWR4ID4gMCAmJiAhc2VsZWN0aW9uKX1cbiAgICAgICAgICAgICAgICBzdGVwSW5kZXg9e3N0ZXAuaW5kZXh9XG4gICAgICAgICAgICAgICAgb25OYXZJdGVtQ2xpY2s9e2dvVG9TdGVwQnlJbmRleH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L1dpemFyZE5hdj5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbc2VsZWN0aW9uXVxuICApO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcbiAgICAgIGNhc2UgJ2NhcmQnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDYXJkIGlzUm91bmRlZCBpc0NvbXBhY3QgaXNGdWxsSGVpZ2h0PlxuICAgICAgICAgICAgPENhcmRCb2R5PlxuICAgICAgICAgICAgICA8QnVsbHNleWU+XG4gICAgICAgICAgICAgICAgPEVtcHR5U3RhdGUgdmFyaWFudD17RW1wdHlTdGF0ZVZhcmlhbnQubGFyZ2V9PlxuICAgICAgICAgICAgICAgICAgPEVtcHR5U3RhdGVJY29uIGljb249e1BsdXNDaXJjbGVJY29ufSAvPlxuICAgICAgICAgICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImgyXCIgc2l6ZT1cIm1kXCI+XG4gICAgICAgICAgICAgICAgICAgIEFkZCBhIG5ldyBjYXJkXG4gICAgICAgICAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICAgICAgICAgICAgPEVtcHR5U3RhdGVCb2R5Pnt0KCdEYXNoYm9hcmQuQ0FSRF9DQVRBTE9HX0RFU0NSSVBUSU9OJyl9PC9FbXB0eVN0YXRlQm9keT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVTdGFydH0gZGF0YS1xdWlja3N0YXJ0LWlkPVwiZGFzaGJvYXJkLWFkZC1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgQWRkXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICAgICAgICAgIDwvQnVsbHNleWU+XG4gICAgICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ2ljb24tYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgY29udGVudD17J0FkZCBjYXJkJ31cbiAgICAgICAgICAgIGFwcGVuZFRvPXsoKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaGJvYXJkLWNhdGFsb2ctYnRuLXdyYXBwZXInKSB8fCBkb2N1bWVudC5ib2R5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFkZCBjYXJkXCJcbiAgICAgICAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPXsnZGFzaGJvYXJkLWFkZC1idG4nfVxuICAgICAgICAgICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydH1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZzogMCB9fVxuICAgICAgICAgICAgICByZWY9e2NhdGFsb2dSZWZ9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxRdWlja1NlYXJjaEljb24gLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwgW2hhbmRsZVN0YXJ0LCB0LCB2YXJpYW50XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBpZD1cImRhc2hib2FyZC1jYXRhbG9nLWJ0bi13cmFwcGVyXCI+e2NvbnRlbnR9PC9kaXY+XG4gICAgICA8TW9kYWxcbiAgICAgICAgYXJpYS1sYWJlbD1cIkRhc2hib2FyZCBDYXJkIENhdGFsb2cgTW9kYWxcIlxuICAgICAgICBpc09wZW49e3Nob3dXaXphcmR9XG4gICAgICAgIHdpZHRoPXsnOTAlJ31cbiAgICAgICAgY2xhc3NOYW1lPVwiY2FyZC1jYXRhbG9nX193aXphcmQtbW9kYWxcIlxuICAgICAgICBoYXNOb0JvZHlXcmFwcGVyXG4gICAgICAgIHNob3dDbG9zZT17ZmFsc2V9XG4gICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgPlxuICAgICAgICA8V2l6YXJkXG4gICAgICAgICAgaWQ9eydjYXJkLWNhdGFsb2ctd2l6YXJkJ31cbiAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVTdG9wfVxuICAgICAgICAgIG9uU2F2ZT17aGFuZGxlQWRkfVxuICAgICAgICAgIG5hdj17Y3VzdG9tTmF2fVxuICAgICAgICAgIGhlYWRlcj17XG4gICAgICAgICAgICA8V2l6YXJkSGVhZGVyXG4gICAgICAgICAgICAgIHRpdGxlPXt0KCdEYXNoYm9hcmQuQ0FSRF9DQVRBTE9HX1RJVExFJyl9XG4gICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZVN0b3B9XG4gICAgICAgICAgICAgIGNsb3NlQnV0dG9uQXJpYUxhYmVsPVwiQ2xvc2UgYWRkIGNhcmQgZm9ybVwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXt0KCdEYXNoYm9hcmQuQ0FSRF9DQVRBTE9HX0RFU0NSSVBUSU9OJyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxXaXphcmRTdGVwXG4gICAgICAgICAgICBpZD1cImNhcmQtdHlwZS1zZWxlY3RcIlxuICAgICAgICAgICAgbmFtZT17dCgnQ0FSRF9UWVBFJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICBmb290ZXI9e3tcbiAgICAgICAgICAgICAgaXNOZXh0RGlzYWJsZWQ6ICFzZWxlY3Rpb24sXG4gICAgICAgICAgICAgIG5leHRCdXR0b25UZXh0OlxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgICFnZXRDYXJkRGVzY3JpcHRvckJ5VGl0bGUoc2VsZWN0aW9uLCB0KS5wcm9wQ29udHJvbHMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgIWdldENhcmREZXNjcmlwdG9yQnlUaXRsZShzZWxlY3Rpb24sIHQpLmFkdmFuY2VkQ29uZmlnXG4gICAgICAgICAgICAgICAgICA/ICdGaW5pc2gnXG4gICAgICAgICAgICAgICAgICA6ICdOZXh0JyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN0YWNrPlxuICAgICAgICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgICAgICAgIDxUZXh0Pnt0KCdEYXNoYm9hcmQuQUREX0NBUkRfSEVMUEVSX1RFWFQnKX08L1RleHQ+XG4gICAgICAgICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICAgICAgICA8U3RhY2tJdGVtIGlzRmlsbGVkIHN0eWxlPXt7IG92ZXJmbG93OiAnYXV0bycgfX0+XG4gICAgICAgICAgICAgICAgPENhcmRHYWxsZXJ5IHNlbGVjdGlvbj17c2VsZWN0aW9ufSBvblNlbGVjdD17aGFuZGxlU2VsZWN0fSAvPlxuICAgICAgICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgICAgIDwvU3RhY2s+XG4gICAgICAgICAgPC9XaXphcmRTdGVwPlxuICAgICAgICAgIDxXaXphcmRTdGVwXG4gICAgICAgICAgICBpZD1cImNhcmQtcHJvcHMtY29uZmlnXCJcbiAgICAgICAgICAgIG5hbWU9XCJDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgIGZvb3Rlcj17e1xuICAgICAgICAgICAgICBuZXh0QnV0dG9uVGV4dDogc2VsZWN0aW9uICYmICFnZXRDYXJkRGVzY3JpcHRvckJ5VGl0bGUoc2VsZWN0aW9uLCB0KS5hZHZhbmNlZENvbmZpZyA/ICdGaW5pc2gnIDogJ05leHQnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGlzSGlkZGVuPXshc2VsZWN0aW9uIHx8ICFnZXRDYXJkRGVzY3JpcHRvckJ5VGl0bGUoc2VsZWN0aW9uLCB0KS5wcm9wQ29udHJvbHMubGVuZ3RofVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzZWxlY3Rpb24gJiYgKFxuICAgICAgICAgICAgICA8UHJvcHNDb25maWdGb3JtXG4gICAgICAgICAgICAgICAgY2FyZFRpdGxlPXtzZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgY29uZmlnPXtwcm9wc0NvbmZpZ31cbiAgICAgICAgICAgICAgICBjb250cm9scz17Z2V0Q2FyZERlc2NyaXB0b3JCeVRpdGxlKHNlbGVjdGlvbiwgdCkucHJvcENvbnRyb2xzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRQcm9wc0NvbmZpZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9XaXphcmRTdGVwPlxuICAgICAgICAgIDxXaXphcmRTdGVwXG4gICAgICAgICAgICBpZD1cImNhcmQtYWR2LWNvbmZpZ1wiXG4gICAgICAgICAgICBuYW1lPVwiQWR2YW5jZWQgQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICBmb290ZXI9e3sgbmV4dEJ1dHRvblRleHQ6ICdGaW5pc2gnIH19XG4gICAgICAgICAgICBpc0hpZGRlbj17IXNlbGVjdGlvbiB8fCAhZ2V0Q2FyZERlc2NyaXB0b3JCeVRpdGxlKHNlbGVjdGlvbiwgdCkuYWR2YW5jZWRDb25maWd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImg1XCI+UHJvdmlkZSBhZHZhbmNlZCBjb25maWd1cmF0aW9uIGZvciB0aGUge3NlbGVjdGlvbn0gY2FyZDwvVGl0bGU+XG4gICAgICAgICAgICB7c2VsZWN0aW9uICYmIGdldENhcmREZXNjcmlwdG9yQnlUaXRsZShzZWxlY3Rpb24sIHQpLmFkdmFuY2VkQ29uZmlnfVxuICAgICAgICAgIDwvV2l6YXJkU3RlcD5cbiAgICAgICAgPC9XaXphcmQ+XG4gICAgICA8L01vZGFsPlxuICAgIDwvPlxuICApO1xufTtcblxuY29uc3QgZ2V0RnVsbERlc2NyaXB0aW9uID0gKHNlbGVjdGlvbjogc3RyaW5nLCB0OiBURnVuY3Rpb24pID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q2FyZERlc2NyaXB0b3JCeVRpdGxlKHNlbGVjdGlvbiwgdCkuZGVzY3JpcHRpb25GdWxsO1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdChjb25maWcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEdhbGxlcnlQcm9wcyB7XG4gIHNlbGVjdGlvbjogc3RyaW5nOyAvLyBUcmFuc2xhdGVkIGNhcmQgdGl0bGVcbiAgb25TZWxlY3Q6IChldmVudDogUmVhY3QuTW91c2VFdmVudCwgc2VsZWN0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBDYXJkR2FsbGVyeTogUmVhY3QuRkM8Q2FyZEdhbGxlcnlQcm9wcz4gPSAoeyBzZWxlY3Rpb24sIG9uU2VsZWN0IH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBhY3RpdmVMZXZlbCA9IHVzZUZlYXR1cmVMZXZlbCgpO1xuICBjb25zdCBbdG9WaWV3Q2FyZCwgc2V0VG9WaWV3Q2FyZF0gPSBSZWFjdC51c2VTdGF0ZTxEYXNoYm9hcmRDYXJkRGVzY3JpcHRvcj4oKTtcblxuICBjb25zdCBhdmFpbGFibGVDYXJkcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0RGFzaGJvYXJkQ2FyZHMoYWN0aXZlTGV2ZWwpLCBbYWN0aXZlTGV2ZWxdKTtcblxuICBjb25zdCBpdGVtcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBhdmFpbGFibGVDYXJkcy5tYXAoKGNhcmQpID0+IHtcbiAgICAgIGNvbnN0IHsgaWNvbiwgbGFiZWxzLCB0aXRsZSwgZGVzY3JpcHRpb24gfSA9IGNhcmQ7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIGlkPXt0aXRsZX1cbiAgICAgICAgICBrZXk9e3RpdGxlfVxuICAgICAgICAgIGhhc1NlbGVjdGFibGVJbnB1dFxuICAgICAgICAgIGlzU2VsZWN0YWJsZVJhaXNlZFxuICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiA9PT0gdCh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgc2V0VG9WaWV3Q2FyZChhdmFpbGFibGVDYXJkcy5maW5kKChjYXJkKSA9PiB0KGNhcmQudGl0bGUpID09PSBzZWxlY3Rpb24pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9uU2VsZWN0KGV2ZW50LCB0KHRpdGxlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBpc0Z1bGxIZWlnaHRcbiAgICAgICAgICBpc0ZsYXRcbiAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3Rpb24gPT09IHQodGl0bGUpfVxuICAgICAgICA+XG4gICAgICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgICAgICA8TGV2ZWwgaGFzR3V0dGVyPlxuICAgICAgICAgICAgICB7aWNvbiA/IDxMZXZlbEl0ZW0+e2ljb259PC9MZXZlbEl0ZW0+IDogbnVsbH1cbiAgICAgICAgICAgICAgPExldmVsSXRlbT5cbiAgICAgICAgICAgICAgICA8Q2FyZFRpdGxlPnt0KHRpdGxlKX08L0NhcmRUaXRsZT5cbiAgICAgICAgICAgICAgPC9MZXZlbEl0ZW0+XG4gICAgICAgICAgICAgIDxMZXZlbEl0ZW0+XG4gICAgICAgICAgICAgICAge2xhYmVscyA/IChcbiAgICAgICAgICAgICAgICAgIDxMYWJlbEdyb3VwPlxuICAgICAgICAgICAgICAgICAgICB7bGFiZWxzLm1hcCgoeyBjb250ZW50LCBpY29uLCBjb2xvciB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGtleT17Y29udGVudH0gY29sb3I9e2NvbG9yfSBpY29uPXtpY29ufSBpc0NvbXBhY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWxHcm91cD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9MZXZlbEl0ZW0+XG4gICAgICAgICAgICA8L0xldmVsPlxuICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgICA8Q2FyZEJvZHk+e3QoZGVzY3JpcHRpb24pfTwvQ2FyZEJvZHk+XG4gICAgICAgIDwvQ2FyZD5cbiAgICAgICk7XG4gICAgfSk7XG4gIH0sIFt0LCBhdmFpbGFibGVDYXJkcywgc2VsZWN0aW9uLCBvblNlbGVjdF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VG9WaWV3Q2FyZChhdmFpbGFibGVDYXJkcy5maW5kKChjYXJkKSA9PiB0KGNhcmQudGl0bGUpID09PSBzZWxlY3Rpb24pKTtcbiAgfSwgW3NlbGVjdGlvbiwgYXZhaWxhYmxlQ2FyZHMsIHRdKTtcblxuICBjb25zdCBwYW5lbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXRvVmlld0NhcmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB7IHRpdGxlLCBpY29uLCBsYWJlbHMsIHByZXZpZXcgfSA9IHRvVmlld0NhcmQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmF3ZXJQYW5lbENvbnRlbnQgaXNSZXNpemFibGUgZGVmYXVsdFNpemU9XCI1MCVcIj5cbiAgICAgICAgPERyYXdlckhlYWQ+XG4gICAgICAgICAgPERyYXdlckFjdGlvbnM+XG4gICAgICAgICAgICA8RHJhd2VyQ2xvc2VCdXR0b24gb25DbGljaz17KCkgPT4gc2V0VG9WaWV3Q2FyZCh1bmRlZmluZWQpfSAvPlxuICAgICAgICAgIDwvRHJhd2VyQWN0aW9ucz5cbiAgICAgICAgPC9EcmF3ZXJIZWFkPlxuICAgICAgICA8RHJhd2VyUGFuZWxCb2R5IGNsYXNzTmFtZT1cImNhcmQtY2F0YWxvZ19fZGV0YWlsLXBhbmVsLWJvZHlcIj5cbiAgICAgICAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgICAgPEZsZXggc3BhY2VyPXt7IGRlZmF1bHQ6ICdzcGFjZXJTbScgfX0+XG4gICAgICAgICAgICAgICAge2ljb24gPyA8RmxleEl0ZW0+e2ljb259PC9GbGV4SXRlbT4gOiBudWxsfVxuICAgICAgICAgICAgICAgIDxGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9eydoMyd9Pnt0KHRpdGxlKX08L1RpdGxlPlxuICAgICAgICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDwvRmxleD5cbiAgICAgICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgICAge2xhYmVscyAmJiBsYWJlbHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxMYWJlbEdyb3VwPlxuICAgICAgICAgICAgICAgICAge2xhYmVscy5tYXAoKHsgY29udGVudCwgaWNvbiwgY29sb3IgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwga2V5PXtjb250ZW50fSBjb2xvcj17Y29sb3J9IGljb249e2ljb259PlxuICAgICAgICAgICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbEdyb3VwPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICAgICAgPFN0YWNrSXRlbT57Z2V0RnVsbERlc2NyaXB0aW9uKHQodGl0bGUpLCB0KX08L1N0YWNrSXRlbT5cbiAgICAgICAgICAgIDxTdGFja0l0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgICAgIHtwcmV2aWV3ID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGFzaGJvYXJkLWNhcmQtcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJub24taW50ZXJhY3RpdmUtb3ZlcmxheVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFNlcnZpY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmYWtlU2VydmljZXN9PlxuICAgICAgICAgICAgICAgICAgICA8Q2hhcnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmYWtlQ2hhcnRDb250ZXh0fT57cHJldmlld308L0NoYXJ0Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgIDwvU2VydmljZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEJ1bGxzZXllPlxuICAgICAgICAgICAgICAgICAgPEVtcHR5VGV4dCB0ZXh0PXsnTm8gcHJldmlldyd9IC8+XG4gICAgICAgICAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICAgIDwvU3RhY2s+XG4gICAgICAgIDwvRHJhd2VyUGFuZWxCb2R5PlxuICAgICAgPC9EcmF3ZXJQYW5lbENvbnRlbnQ+XG4gICAgKTtcbiAgfSwgW3QsIHNldFRvVmlld0NhcmQsIHRvVmlld0NhcmRdKTtcblxuICByZXR1cm4gKFxuICAgIDxEcmF3ZXIgaXNFeHBhbmRlZD17ISF0b1ZpZXdDYXJkfSBpc0lubGluZT5cbiAgICAgIDxEcmF3ZXJDb250ZW50IHBhbmVsQ29udGVudD17cGFuZWxDb250ZW50fT5cbiAgICAgICAgPERyYXdlckNvbnRlbnRCb2R5PlxuICAgICAgICAgIDxHcmlkIGhhc0d1dHRlciBzdHlsZT17eyBhbGlnbkl0ZW1zOiAnc3RyZXRjaCcsIG1hcmdpblRvcDogJzFlbScsIG1hcmdpblJpZ2h0OiAhdG9WaWV3Q2FyZCA/IDAgOiAnMWVtJyB9fT5cbiAgICAgICAgICAgIHtpdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgPEdyaWRJdGVtIHNwYW49ezR9IGtleT17aXRlbS5rZXl9PlxuICAgICAgICAgICAgICAgIHtpdGVtfVxuICAgICAgICAgICAgICA8L0dyaWRJdGVtPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICA8L0RyYXdlckNvbnRlbnRCb2R5PlxuICAgICAgPC9EcmF3ZXJDb250ZW50PlxuICAgIDwvRHJhd2VyPlxuICApO1xufTtcblxuaW50ZXJmYWNlIFByb3BzQ29uZmlnRm9ybVByb3BzIHtcbiAgY2FyZFRpdGxlOiBzdHJpbmc7XG4gIGNvbnRyb2xzOiBQcm9wQ29udHJvbFtdO1xuICBjb25maWc6IG9iamVjdDtcbiAgb25DaGFuZ2U6IChjb25maWc6IG9iamVjdCkgPT4gdm9pZDtcbn1cblxuY29uc3QgUHJvcHNDb25maWdGb3JtID0gKHsgb25DaGFuZ2UsIC4uLnByb3BzIH06IFByb3BzQ29uZmlnRm9ybVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGspID0+IChlKSA9PiB7XG4gICAgICBjb25zdCBjb3B5ID0geyAuLi5wcm9wcy5jb25maWcgfTtcbiAgICAgIGNvcHlba10gPSBlO1xuICAgICAgb25DaGFuZ2UoY29weSk7XG4gICAgfSxcbiAgICBbb25DaGFuZ2UsIHByb3BzLmNvbmZpZ11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVOdW1lcmljID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGspID0+IChlKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgIGNvbnN0IGNvcHkgPSB7IC4uLnByb3BzLmNvbmZpZyB9O1xuICAgICAgY29weVtrXSA9IHZhbHVlO1xuICAgICAgb25DaGFuZ2UoY29weSk7XG4gICAgfSxcbiAgICBbb25DaGFuZ2UsIHByb3BzLmNvbmZpZ11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVOdW1lcmljU3RlcCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChrLCB2KSA9PiAoXykgPT4ge1xuICAgICAgY29uc3QgY29weSA9IHsgLi4ucHJvcHMuY29uZmlnIH07XG4gICAgICBjb3B5W2tdID0gcHJvcHMuY29uZmlnW2tdICsgdjtcbiAgICAgIG9uQ2hhbmdlKGNvcHkpO1xuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBwcm9wcy5jb25maWddXG4gICk7XG5cbiAgY29uc3QgY3JlYXRlQ29udHJvbCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjdHJsOiBQcm9wQ29udHJvbCk6IEpTWC5FbGVtZW50ID0+IHtcbiAgICAgIGxldCBpbnB1dDogSlNYLkVsZW1lbnQ7XG4gICAgICBzd2l0Y2ggKGN0cmwua2luZCkge1xuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICBpbnB1dCA9IChcbiAgICAgICAgICAgIDxTd2l0Y2ggbGFiZWw9XCJPblwiIGxhYmVsT2ZmPVwiT2ZmXCIgaXNDaGVja2VkPXtwcm9wcy5jb25maWdbY3RybC5rZXldfSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlKGN0cmwua2V5KX0gLz5cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIGlucHV0ID0gKFxuICAgICAgICAgICAgPE51bWJlcklucHV0XG4gICAgICAgICAgICAgIGlucHV0TmFtZT17dChjdHJsLm5hbWUpfVxuICAgICAgICAgICAgICBpbnB1dEFyaWFMYWJlbD17YCR7dChjdHJsLm5hbWUpfSBpbnB1dGB9XG4gICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5jb25maWdbY3RybC5rZXldfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlTnVtZXJpYyhjdHJsLmtleSl9XG4gICAgICAgICAgICAgIG9uUGx1cz17aGFuZGxlTnVtZXJpY1N0ZXAoY3RybC5rZXksIDEpfVxuICAgICAgICAgICAgICBvbk1pbnVzPXtoYW5kbGVOdW1lcmljU3RlcChjdHJsLmtleSwgLTEpfVxuICAgICAgICAgICAgICBtaW49e2N0cmwuZXh0cmFzPy5taW59XG4gICAgICAgICAgICAgIG1heD17Y3RybC5leHRyYXM/Lm1heH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBpbnB1dCA9IChcbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgJHtjdHJsLmtleX0gaW5wdXRgfVxuICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuY29uZmlnW2N0cmwua2V5XX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZShjdHJsLmtleSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgIGlucHV0ID0gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7Y3RybC5rZXl9IGlucHV0YH1cbiAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmNvbmZpZ1tjdHJsLmtleV19XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2UoY3RybC5rZXkpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICAgIGlucHV0ID0gKFxuICAgICAgICAgICAgPFNlbGVjdENvbnRyb2xcbiAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlPXtoYW5kbGVDaGFuZ2UoY3RybC5rZXkpfVxuICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZz17cHJvcHMuY29uZmlnW2N0cmwua2V5XX1cbiAgICAgICAgICAgICAgY29udHJvbD17Y3RybH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpbnB1dCA9IDxUZXh0PkJhZCBjb25maWc8L1RleHQ+O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEZvcm1Hcm91cCBrZXk9e2Ake2N0cmwua2V5fWB9IGxhYmVsPXt0KGN0cmwubmFtZSl9IGhlbHBlclRleHQ9e3QoY3RybC5kZXNjcmlwdGlvbil9IGlzSW5saW5lIGlzU3RhY2s+XG4gICAgICAgICAge2lucHV0fVxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbdCwgcHJvcHMuY29uZmlnLCBoYW5kbGVDaGFuZ2UsIGhhbmRsZU51bWVyaWMsIGhhbmRsZU51bWVyaWNTdGVwXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtwcm9wcy5jb250cm9scy5sZW5ndGggPiAwID8gKFxuICAgICAgICA8Rm9ybT5cbiAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPXsnaDUnfT5Db25maWd1cmUgdGhlIHtwcm9wcy5jYXJkVGl0bGV9IGNhcmQ8L1RpdGxlPlxuICAgICAgICAgIHtwcm9wcy5jb250cm9scy5tYXAoKGN0cmwpID0+IGNyZWF0ZUNvbnRyb2woY3RybCkpfVxuICAgICAgICA8L0Zvcm0+XG4gICAgICApIDogKFxuICAgICAgICA8VGV4dD5ObyBjb25maWd1cmF0aW9uIHJlcXVpcmVkLjwvVGV4dD5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU2VsZWN0Q29udHJvbFByb3BzIHtcbiAgaGFuZGxlQ2hhbmdlOiAoc2VsZWN0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNvbnRyb2w6IFByb3BDb250cm9sO1xuICBzZWxlY3RlZENvbmZpZzogc3RyaW5nIHwgU2VsZWN0T3B0aW9uT2JqZWN0O1xufVxuXG5jb25zdCBTZWxlY3RDb250cm9sID0gKHsgaGFuZGxlQ2hhbmdlLCBjb250cm9sLCBzZWxlY3RlZENvbmZpZyB9OiBTZWxlY3RDb250cm9sUHJvcHMpID0+IHtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFtzZWxlY3RPcGVuLCBzZXRTZWxlY3RPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2Vycm9yZWQsIHNldEVycm9yZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfLCBzZWxlY3Rpb24sIGlzUGxhY2Vob2xkZXIpID0+IHtcbiAgICAgIGlmICghaXNQbGFjZWhvbGRlcikge1xuICAgICAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdE9wZW4oZmFsc2UpO1xuICAgIH0sXG4gICAgW2hhbmRsZUNoYW5nZSwgc2V0U2VsZWN0T3Blbl1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBvYnM7XG4gICAgaWYgKGNvbnRyb2wudmFsdWVzIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgb2JzID0gY29udHJvbC52YWx1ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9icyA9IG9mKGNvbnRyb2wudmFsdWVzKTtcbiAgICB9XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgb2JzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2KSA9PiB7XG4gICAgICAgICAgc2V0RXJyb3JlZChmYWxzZSk7XG4gICAgICAgICAgc2V0T3B0aW9ucygob2xkKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdi5tYXAoKHMpID0+IFN0cmluZyhzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWy4uLm9sZCwgU3RyaW5nKHYpXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBzZXRFcnJvcmVkKHRydWUpO1xuICAgICAgICAgIHNldE9wdGlvbnMoW2Ake2Vycn1gXSk7XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIHNldE9wdGlvbnMsIHNldEVycm9yZWQsIGNvbnRyb2wsIGNvbnRyb2wudmFsdWVzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICBvblRvZ2dsZT17c2V0U2VsZWN0T3Blbn1cbiAgICAgIGlzT3Blbj17c2VsZWN0T3Blbn1cbiAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3R9XG4gICAgICBzZWxlY3Rpb25zPXtzZWxlY3RlZENvbmZpZ31cbiAgICAgIG1lbnVBcHBlbmRUbz17cG9ydGFsUm9vdH1cbiAgICAgIGlzRmxpcEVuYWJsZWRcbiAgICAgIG1heEhlaWdodD17JzE2ZW0nfVxuICAgID5cbiAgICAgIHtlcnJvcmVkXG4gICAgICAgID8gWzxTZWxlY3RPcHRpb24ga2V5PXswfSB2YWx1ZT17YExvYWQgRXJyb3I6ICR7b3B0aW9uc1swXX1gfSBpc1BsYWNlaG9sZGVyIGlzRGlzYWJsZWQgLz5dXG4gICAgICAgIDogb3B0aW9ucy5tYXAoKGNob2ljZSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC5leHRyYXMgJiYgY29udHJvbC5leHRyYXMuZGlzcGxheU1hcHBlcikge1xuICAgICAgICAgICAgICBjaG9pY2UgPSBjb250cm9sLmV4dHJhcy5kaXNwbGF5TWFwcGVyKGNob2ljZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gPFNlbGVjdE9wdGlvbiBrZXk9e2lkeCArIDF9IHZhbHVlPXtjaG9pY2V9IC8+O1xuICAgICAgICAgIH0pfVxuICAgIDwvU2VsZWN0PlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgRHJvcGRvd24sIERyb3Bkb3duSXRlbSwgS2ViYWJUb2dnbGUgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkQ2FyZEFjdGlvblByb3BzIHtcbiAgb25SZW1vdmU6ICgpID0+IHZvaWQ7XG4gIG9uVmlldzogKCkgPT4gdm9pZDtcbiAgb25SZXNldFNpemU6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRDYXJkQWN0aW9uTWVudTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8RGFzaGJvYXJkQ2FyZEFjdGlvblByb3BzPiA9ICh7XG4gIG9uUmVtb3ZlLFxuICBvblJlc2V0U2l6ZSxcbiAgb25WaWV3LFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8pID0+IHtcbiAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgIH0sXG4gICAgW3NldE9wZW5dXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3Bkb3duXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgaXNQbGFpblxuICAgICAgICBpc0ZsaXBFbmFibGVkXG4gICAgICAgIG1lbnVBcHBlbmRUbz17KCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rhc2hib2FyZC1ncmlkJykgfHwgcG9ydGFsUm9vdH1cbiAgICAgICAgcG9zaXRpb249eydyaWdodCd9XG4gICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICB0b2dnbGU9ezxLZWJhYlRvZ2dsZSBvblRvZ2dsZT17c2V0T3Blbn0gLz59XG4gICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgZHJvcGRvd25JdGVtcz17W1xuICAgICAgICAgIDxEcm9wZG93bkl0ZW0ga2V5PVwiVmlld1wiIG9uQ2xpY2s9e29uVmlld30+XG4gICAgICAgICAgICB7dCgnVklFVycsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICAgIDwvRHJvcGRvd25JdGVtPixcbiAgICAgICAgICA8RHJvcGRvd25JdGVtIGtleT1cIlJlbW92ZVwiIG9uQ2xpY2s9e29uUmVtb3ZlfT5cbiAgICAgICAgICAgIHt0KCdSRU1PVkUnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICA8L0Ryb3Bkb3duSXRlbT4sXG4gICAgICAgICAgPERyb3Bkb3duSXRlbSBrZXk9XCJSZXNldCBTaXplXCIgb25DbGljaz17b25SZXNldFNpemV9PlxuICAgICAgICAgICAge3QoJ0Rhc2hib2FyZENhcmRBY3Rpb25NZW51LlJFU0VUX1NJWkUnKX1cbiAgICAgICAgICA8L0Ryb3Bkb3duSXRlbT4sXG4gICAgICAgIF19XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTGF5b3V0VGVtcGxhdGUsIExheW91dFRlbXBsYXRlVmVuZG9yLCBMYXlvdXRUZW1wbGF0ZVZlcnNpb24gfSBmcm9tICcuL2Rhc2hib2FyZC11dGlscyc7XG5cbmNvbnN0IENVUlJfVkVSU0lPTjogTGF5b3V0VGVtcGxhdGVWZXJzaW9uID0gTGF5b3V0VGVtcGxhdGVWZXJzaW9uWyd2Mi4zJ107XG5cbmV4cG9ydCBjb25zdCBCbGFua0xheW91dDogTGF5b3V0VGVtcGxhdGUgPSB7XG4gIG5hbWU6ICdCbGFuaycsXG4gIGRlc2NyaXB0aW9uOiAnQSBibGFuayBsYXlvdXQgdGVtcGxhdGUgZm9yIGNyZWF0aW5nIHlvdXIgb3duIGRhc2hib2FyZC4nLFxuICBjYXJkczogW10sXG4gIHZlcnNpb246IENVUlJfVkVSU0lPTixcbiAgdmVuZG9yOiBMYXlvdXRUZW1wbGF0ZVZlbmRvci5CTEFOSyxcbn07XG5cbmNvbnN0IEdlbmVyYWxMYXlvdXQ6IExheW91dFRlbXBsYXRlID0ge1xuICBuYW1lOiAnR2VuZXJhbCcsXG4gIGRlc2NyaXB0aW9uOiBcIkEgZ2VuZXJhbCBsYXlvdXQgdGVtcGxhdGUgZm9yIG1vbml0b3JpbmcgYSBKVk0ncyBtZXRyaWNzIGFuZCBwZXJmb3JtYW5jZS5cIixcbiAgdmVuZG9yOiBMYXlvdXRUZW1wbGF0ZVZlbmRvci5DUllPU1RBVCxcbiAgY2FyZHM6IFtcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjaGFydEtpbmQ6ICdIZWFwIFVzYWdlIFBlcmNlbnRhZ2UnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgIHRoZW1lQ29sb3I6ICdjeWFuJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjaGFydEtpbmQ6ICdTeXN0ZW0gQ1BVIExvYWQnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgIHRoZW1lQ29sb3I6ICdnb2xkJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZUNvbG9yOiAnYmx1ZScsXG4gICAgICAgIGNoYXJ0S2luZDogJ1Byb2Nlc3MgQ1BVIExvYWQnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ01CZWFuTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY2hhcnRLaW5kOiAnUGh5c2ljYWwgTWVtb3J5JyxcbiAgICAgICAgZHVyYXRpb246IDYwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgICB0aGVtZUNvbG9yOiAnb3JhbmdlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZUNvbG9yOiAncHVycGxlJyxcbiAgICAgICAgY2hhcnRLaW5kOiAnSGVhcCBNZW1vcnkgVXNhZ2UnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdUaHJlYWQgU3RhdGlzdGljcycsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdDb21waWxlciBUb3RhbCBUaW1lJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ0NsYXNzbG9hZGluZyBTdGF0aXN0aWNzJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ05ldHdvcmsgVXRpbGl6YXRpb24nLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnRXhjZXB0aW9uIFN0YXRpc3RpY3MnLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnRmlsZSBJL08nLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnUmVjb3JkaW5nIER1cmF0aW9uJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgdmVyc2lvbjogQ1VSUl9WRVJTSU9OLFxufTtcblxuY29uc3QgVGhyZWFkTW9uaXRvcmluZ0xheW91dDogTGF5b3V0VGVtcGxhdGUgPSB7XG4gIG5hbWU6ICdUaHJlYWQgTW9uaXRvcmluZycsXG4gIGRlc2NyaXB0aW9uOiBcIkEgbGF5b3V0IHRlbXBsYXRlIGZvciBtb25pdG9yaW5nIGEgSlZNJ3MgdGhyZWFkcy5cIixcbiAgdmVuZG9yOiBMYXlvdXRUZW1wbGF0ZVZlbmRvci5DUllPU1RBVCxcbiAgY2FyZHM6IFtcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ1RocmVhZCBDb3VudCcsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdUaHJlYWQgU3RhdGlzdGljcycsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdUaHJlYWQgQ29udGV4dCBTd2l0Y2ggUmF0ZScsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdDb3JlIENvdW50JyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgdmVyc2lvbjogQ1VSUl9WRVJTSU9OLFxufTtcblxuY29uc3QgTWVtb3J5TW9uaXRvcmluZ0xheW91dDogTGF5b3V0VGVtcGxhdGUgPSB7XG4gIG5hbWU6ICdNZW1vcnkgTW9uaXRvcmluZycsXG4gIGRlc2NyaXB0aW9uOiBcIkEgbGF5b3V0IHRlbXBsYXRlIGZvciBtb25pdG9yaW5nIGEgSlZNJ3MgbWVtb3J5LlwiLFxuICB2ZW5kb3I6IExheW91dFRlbXBsYXRlVmVuZG9yLkNSWU9TVEFULFxuICBjYXJkczogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnTWVtb3J5IFVzYWdlJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ1RvdGFsIE1lbW9yeScsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ01CZWFuTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY2hhcnRLaW5kOiAnSGVhcCBVc2FnZSBQZXJjZW50YWdlJyxcbiAgICAgICAgZHVyYXRpb246IDYwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgICB0aGVtZUNvbG9yOiAnZ29sZCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdIZWFwIFVzYWdlJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDQsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjaGFydEtpbmQ6ICdQaHlzaWNhbCBNZW1vcnknLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgIHRoZW1lQ29sb3I6ICdibHVlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDQsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjaGFydEtpbmQ6ICdIZWFwIE1lbW9yeSBVc2FnZScsXG4gICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgdGhlbWVDb2xvcjogJ2N5YW4nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNQmVhbk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogNCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNoYXJ0S2luZDogJ05vbi1IZWFwIE1lbW9yeSBVc2FnZScsXG4gICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgdGhlbWVDb2xvcjogJ3B1cnBsZScsXG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIHZlcnNpb246IENVUlJfVkVSU0lPTixcbn07XG5cbmNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzTGF5b3V0OiBMYXlvdXRUZW1wbGF0ZSA9IHtcbiAgbmFtZTogJ0F1dG9tYXRlZCBBbmFseXNpcycsXG4gIGRlc2NyaXB0aW9uOiAnQSBsYXlvdXQgdGVtcGxhdGUgZm9yIGlkZW50aWZ5aW5nIGFuZCBjYWxjdWxhdGluZyByaXNrIHNjb3JlcyBmb3IgY29tbW9uIHBlcmZvcm1hbmNlIGlzc3VlcyBpbiBhIEpWTS4nLFxuICB2ZW5kb3I6IExheW91dFRlbXBsYXRlVmVuZG9yLkNSWU9TVEFULFxuICBjYXJkczogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdBdXRvbWF0ZWRBbmFseXNpc0NhcmQnLFxuICAgICAgc3BhbjogNyxcbiAgICAgIHByb3BzOiB7fSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKdm1EZXRhaWxzQ2FyZCcsXG4gICAgICBzcGFuOiA1LFxuICAgICAgcHJvcHM6IHt9LFxuICAgIH0sXG4gIF0sXG4gIHZlcnNpb246IENVUlJfVkVSU0lPTixcbn07XG5cbmNvbnN0IE1CZWFuTWV0cmljc0xheW91dDogTGF5b3V0VGVtcGxhdGUgPSB7XG4gIG5hbWU6ICdNQmVhbiBNZXRyaWNzJyxcbiAgZGVzY3JpcHRpb246IFwiQSBsYXlvdXQgdGVtcGxhdGUgZm9yIG1vbml0b3Jpbmcgc29tZSBvZiBhIEpWTSdzIE1CZWFuIG1ldHJpY3MuXCIsXG4gIHZlbmRvcjogTGF5b3V0VGVtcGxhdGVWZW5kb3IuQ1JZT1NUQVQsXG4gIGNhcmRzOiBbXG4gICAge1xuICAgICAgbmFtZTogJ01CZWFuTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiA0LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY2hhcnRLaW5kOiAnUHJvY2VzcyBDUFUgTG9hZCcsXG4gICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgdGhlbWVDb2xvcjogJ2JsdWUnLFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgbmFtZTogJ01CZWFuTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiA0LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY2hhcnRLaW5kOiAnU3lzdGVtIExvYWQgQXZlcmFnZScsXG4gICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgdGhlbWVDb2xvcjogJ2N5YW4nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNQmVhbk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogNCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNoYXJ0S2luZDogJ1N5c3RlbSBDUFUgTG9hZCcsXG4gICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgdGhlbWVDb2xvcjogJ2dvbGQnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNQmVhbk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogNCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNoYXJ0S2luZDogJ0hlYXAgVXNhZ2UgUGVyY2VudGFnZScsXG4gICAgICAgIGR1cmF0aW9uOiA2MCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgICAgdGhlbWVDb2xvcjogJ29yYW5nZScsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ01CZWFuTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiA0LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY2hhcnRLaW5kOiAnSGVhcCBNZW1vcnkgVXNhZ2UnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgIHRoZW1lQ29sb3I6ICdncmF5JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTUJlYW5NZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDQsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjaGFydEtpbmQ6ICdOb24tSGVhcCBNZW1vcnkgVXNhZ2UnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgIHRoZW1lQ29sb3I6ICdwdXJwbGUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdNQmVhbk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogNCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNoYXJ0S2luZDogJ1RocmVhZHMnLFxuICAgICAgICBkdXJhdGlvbjogNjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICAgIHRoZW1lQ29sb3I6ICdncmVlbicsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ01CZWFuTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiA0LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY2hhcnRLaW5kOiAnUGh5c2ljYWwgTWVtb3J5JyxcbiAgICAgICAgZHVyYXRpb246IDYwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgICB0aGVtZUNvbG9yOiAnZ29sZCcsXG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIHZlcnNpb246IENVUlJfVkVSU0lPTixcbn07XG5cbmNvbnN0IEpGUk1vbml0b3JpbmdMYXlvdXQ6IExheW91dFRlbXBsYXRlID0ge1xuICBuYW1lOiAnSkZSIE1vbml0b3JpbmcnLFxuICBkZXNjcmlwdGlvbjogXCJBIGxheW91dCB0ZW1wbGF0ZSBmb3IgbW9uaXRvcmluZyBhIEpWTSdzIEpGUiBldmVudHMgdXNpbmcgZW1iZWRkZWQgR3JhZmFuYSBjaGFydHMuXCIsXG4gIHZlbmRvcjogTGF5b3V0VGVtcGxhdGVWZW5kb3IuQ1JZT1NUQVQsXG4gIGNhcmRzOiBbXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdSZWNvcmRpbmcgU3RhcnQgVGltZScsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdDUFUgTG9hZCcsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdIZWFwIFVzYWdlJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ01lbW9yeSBVc2FnZScsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdDbGFzc2xvYWRpbmcgU3RhdGlzdGljcycsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdUaHJlYWQgU3RhdGlzdGljcycsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdOZXR3b3JrIFV0aWxpemF0aW9uJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ0V4Y2VwdGlvbiBTdGF0aXN0aWNzJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ1RocmVhZCBDb250ZXh0IFN3aXRjaCBSYXRlJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSkZSTWV0cmljc0NoYXJ0Q2FyZCcsXG4gICAgICBzcGFuOiAzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGhlbWU6ICdsaWdodCcsXG4gICAgICAgIGNoYXJ0S2luZDogJ0NvbXBpbGVyIFN0YXRpc3RpY3MnLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnQ29tcGlsZXIgVG90YWwgVGltZScsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdTYWZlcG9pbnQgRHVyYXRpb24nLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnRmlsZSBJL08nLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnQ29tcGlsZXIgVG90YWwgVGltZScsXG4gICAgICAgIGR1cmF0aW9uOiAxMjAsXG4gICAgICAgIHBlcmlvZDogMTAsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0pGUk1ldHJpY3NDaGFydENhcmQnLFxuICAgICAgc3BhbjogMyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRoZW1lOiAnbGlnaHQnLFxuICAgICAgICBjaGFydEtpbmQ6ICdDb21waWxlciBQZWFrIFRpbWUnLFxuICAgICAgICBkdXJhdGlvbjogMTIwLFxuICAgICAgICBwZXJpb2Q6IDEwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyxcbiAgICAgIHNwYW46IDMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aGVtZTogJ2xpZ2h0JyxcbiAgICAgICAgY2hhcnRLaW5kOiAnT2JqZWN0IEFsbG9jYXRpb24gU2FtcGxlJyxcbiAgICAgICAgZHVyYXRpb246IDEyMCxcbiAgICAgICAgcGVyaW9kOiAxMCxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgdmVyc2lvbjogQ1VSUl9WRVJTSU9OLFxufTtcblxuZXhwb3J0IGNvbnN0IENyeW9zdGF0TGF5b3V0VGVtcGxhdGVzOiBMYXlvdXRUZW1wbGF0ZVtdID0gW1xuICBHZW5lcmFsTGF5b3V0LFxuICBBdXRvbWF0ZWRBbmFseXNpc0xheW91dCxcbiAgTUJlYW5NZXRyaWNzTGF5b3V0LFxuICBKRlJNb25pdG9yaW5nTGF5b3V0LFxuICBNZW1vcnlNb25pdG9yaW5nTGF5b3V0LFxuICBUaHJlYWRNb25pdG9yaW5nTGF5b3V0LFxuXTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgZGFzaGJvYXJkQ29uZmlnVGVtcGxhdGVIaXN0b3J5Q2xlYXJJbnRlbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBDYXRhbG9nVGlsZSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNhdGFsb2ctdmlldy1leHRlbnNpb24nO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBEcm9wZG93bixcbiAgRHJvcGRvd25JdGVtLFxuICBHYWxsZXJ5LFxuICBLZWJhYlRvZ2dsZSxcbiAgTGFiZWwsXG4gIFNwbGl0LFxuICBTcGxpdEl0ZW0sXG4gIFRpdGxlLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBDYXJkQ29uZmlnLFxuICBpY29uaWZ5LFxuICBMYXlvdXRUZW1wbGF0ZSxcbiAgTGF5b3V0VGVtcGxhdGVDb250ZXh0LFxuICBMYXlvdXRUZW1wbGF0ZUZpbHRlcixcbiAgTGF5b3V0VGVtcGxhdGVWZW5kb3IsXG4gIFNlbGVjdGVkTGF5b3V0VGVtcGxhdGUsXG4gIFNlcmlhbENhcmRDb25maWcsXG4gIGdldENhcmREZXNjcmlwdG9yQnlOYW1lLFxufSBmcm9tICcuL2Rhc2hib2FyZC11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0VGVtcGxhdGVHcm91cFByb3BzIHtcbiAgdGl0bGU6IExheW91dFRlbXBsYXRlRmlsdGVyO1xuICB0ZW1wbGF0ZXM6IExheW91dFRlbXBsYXRlW107XG4gIG9uVGVtcGxhdGVTZWxlY3Q6ICh0ZW1wbGF0ZTogU2VsZWN0ZWRMYXlvdXRUZW1wbGF0ZSkgPT4gdm9pZDtcbiAgb25UZW1wbGF0ZURlbGV0ZTogKHRlbXBsYXRlTmFtZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3Qgc21hbGxlc3RGZWF0dXJlTGV2ZWwgPSAoY2FyZHM6IFNlcmlhbENhcmRDb25maWdbXSk6IEZlYXR1cmVMZXZlbCA9PiB7XG4gIHJldHVybiBjYXJkcy5yZWR1Y2UoKG1pbkZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsLCBjYXJkOiBDYXJkQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgZmVhdHVyZUxldmVsID0gZ2V0Q2FyZERlc2NyaXB0b3JCeU5hbWUoY2FyZC5uYW1lKS5mZWF0dXJlTGV2ZWw7XG4gICAgcmV0dXJuIE1hdGgubWluKG1pbkZlYXR1cmVMZXZlbCwgZmVhdHVyZUxldmVsKTtcbiAgfSwgRmVhdHVyZUxldmVsLlBST0RVQ1RJT04pO1xufTtcblxuZXhwb3J0IGNvbnN0IExheW91dFRlbXBsYXRlR3JvdXA6IFJlYWN0LkZDPExheW91dFRlbXBsYXRlR3JvdXBQcm9wcz4gPSAoe1xuICBvblRlbXBsYXRlU2VsZWN0LFxuICBvblRlbXBsYXRlRGVsZXRlLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgeyBzZWxlY3RlZFRlbXBsYXRlLCBzZXRTZWxlY3RlZFRlbXBsYXRlIH0gPSBSZWFjdC51c2VDb250ZXh0KExheW91dFRlbXBsYXRlQ29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGVtcGxhdGU6IExheW91dFRlbXBsYXRlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHtcbiAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgICAgICBjYXRlZ29yeTogcHJvcHMudGl0bGUsXG4gICAgICB9IGFzIFNlbGVjdGVkTGF5b3V0VGVtcGxhdGU7XG4gICAgICBzZXRTZWxlY3RlZFRlbXBsYXRlKHNlbGVjdGVkKTtcbiAgICAgIG9uVGVtcGxhdGVTZWxlY3Qoc2VsZWN0ZWQpO1xuICAgIH0sXG4gICAgW3NldFNlbGVjdGVkVGVtcGxhdGUsIG9uVGVtcGxhdGVTZWxlY3QsIHByb3BzLnRpdGxlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNsZWFyUmVjZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ1RlbXBsYXRlSGlzdG9yeUNsZWFySW50ZW50KCkpO1xuICB9LCBbZGlzcGF0Y2hdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3BsaXQ+XG4gICAgICAgIDxTcGxpdEl0ZW0+XG4gICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImgyXCIgc2l6ZT1cImxnXCIgc3R5bGU9e3sgcGFkZGluZzogJzFlbScgfX0+XG4gICAgICAgICAgICB7cHJvcHMudGl0bGV9ICh7dCgnTGF5b3V0VGVtcGxhdGVHcm91cC5JVEVNUycsIHsgY291bnQ6IHByb3BzLnRlbXBsYXRlcy5sZW5ndGggfSl9KVxuICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICB7cHJvcHMudGl0bGUgPT09IHQoJ1NVR0dFU1RFRCcsIHsgbnM6ICdjb21tb24nIH0pICYmIHByb3BzLnRlbXBsYXRlcy5sZW5ndGggIT09IDEgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U3BsaXRJdGVtIGlzRmlsbGVkPjwvU3BsaXRJdGVtPlxuICAgICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwibGlua1wiIG9uQ2xpY2s9e2hhbmRsZUNsZWFyUmVjZW50fT5cbiAgICAgICAgICAgICAgICB7dCgnQ0xFQVJfUkVDRU5UJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NwbGl0PlxuICAgICAgPEdhbGxlcnkgaGFzR3V0dGVyIGNsYXNzTmFtZT1cImxheW91dC10ZW1wbGF0ZS1waWNrZXJcIj5cbiAgICAgICAge3Byb3BzLnRlbXBsYXRlcy5tYXAoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBzbWFsbGVzdEZlYXR1cmVMZXZlbCh0ZW1wbGF0ZS5jYXJkcyk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXt0ZW1wbGF0ZS5uYW1lfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgc2VsZWN0ZWQgdGVtcGxhdGUgdGhhdCBpcyAqKmNsaWNrZWQqKiBpcyBoaWdobGlnaHRlZCBhbmQgbm90IGFueSBjb3BpZXMgdGhhdCBtYXkgYmUgaW4gb3RoZXIgY2F0ZWdvcmllcyAoaS5lLiBzdWdnZXN0ZWQpXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUZW1wbGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGVtcGxhdGUudGVtcGxhdGUubmFtZSA9PT0gdGVtcGxhdGUubmFtZSAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGVtcGxhdGUudGVtcGxhdGUudmVuZG9yID09IHRlbXBsYXRlLnZlbmRvciAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGVtcGxhdGUuY2F0ZWdvcnkgPT0gcHJvcHMudGl0bGVcbiAgICAgICAgICAgICAgICAgID8gJ2xheW91dC10ZW1wbGF0ZS1jYXJkX19mZWF0dXJlZCdcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPENhdGFsb2dUaWxlXG4gICAgICAgICAgICAgICAgZmVhdHVyZWQ9e1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUZW1wbGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUZW1wbGF0ZS50ZW1wbGF0ZS5uYW1lID09PSB0ZW1wbGF0ZS5uYW1lICYmXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFRlbXBsYXRlLnRlbXBsYXRlLnZlbmRvciA9PSB0ZW1wbGF0ZS52ZW5kb3IgJiZcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVGVtcGxhdGUuY2F0ZWdvcnkgPT0gcHJvcHMudGl0bGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWQ9e3RlbXBsYXRlLm5hbWV9XG4gICAgICAgICAgICAgICAga2V5PXt0ZW1wbGF0ZS5uYW1lfVxuICAgICAgICAgICAgICAgIGljb249e2ljb25pZnkodGVtcGxhdGUudmVuZG9yKX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dGVtcGxhdGUubmFtZX1cbiAgICAgICAgICAgICAgICB2ZW5kb3I9e3RlbXBsYXRlLnZlbmRvcn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUZW1wbGF0ZVNlbGVjdCh0ZW1wbGF0ZSl9XG4gICAgICAgICAgICAgICAgYmFkZ2VzPXtbXG4gICAgICAgICAgICAgICAgICBsZXZlbCAhPT0gRmVhdHVyZUxldmVsLlBST0RVQ1RJT04gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3RlbXBsYXRlLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgaXNDb21wYWN0XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06ICdjYXBpdGFsaXplJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzEuMWNoJyxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtsZXZlbCA9PT0gRmVhdHVyZUxldmVsLkJFVEEgPyAnZ3JlZW4nIDogJ3JlZCd9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7RmVhdHVyZUxldmVsW2xldmVsXS50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIDxLZWJhYkNhdGFsb2dUaWxlQmFkZ2UgdGVtcGxhdGU9e3RlbXBsYXRlfSBvblRlbXBsYXRlRGVsZXRlPXtvblRlbXBsYXRlRGVsZXRlfSBrZXk9e3RlbXBsYXRlLm5hbWV9IC8+LFxuICAgICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dGVtcGxhdGUuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgIDwvQ2F0YWxvZ1RpbGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvR2FsbGVyeT5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2ViYWJDYXRhbG9nVGlsZUJhZGdlUHJvcHMge1xuICB0ZW1wbGF0ZTogTGF5b3V0VGVtcGxhdGU7XG4gIG9uVGVtcGxhdGVEZWxldGU6ICh0ZW1wbGF0ZU5hbWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEtlYmFiQ2F0YWxvZ1RpbGVCYWRnZTogUmVhY3QuRkM8S2ViYWJDYXRhbG9nVGlsZUJhZGdlUHJvcHM+ID0gKHsgdGVtcGxhdGUsIG9uVGVtcGxhdGVEZWxldGUgfSkgPT4ge1xuICBjb25zdCBzZXJ2aWNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdCBvblNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfZXYpID0+IHtcbiAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgfSxcbiAgICBbc2V0SXNPcGVuXVxuICApO1xuXG4gIGNvbnN0IG9wZW5LZWJhYiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHNldElzT3Blbih2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0SXNPcGVuXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRlbXBsYXRlRG93bmxvYWQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHNlcnZpY2VDb250ZXh0LmFwaS5kb3dubG9hZExheW91dFRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICB9LFxuICAgIFtzZXJ2aWNlQ29udGV4dC5hcGksIHRlbXBsYXRlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRlbXBsYXRlRGVsZXRlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBvblRlbXBsYXRlRGVsZXRlKHRlbXBsYXRlLm5hbWUpO1xuICAgIH0sXG4gICAgW29uVGVtcGxhdGVEZWxldGUsIHRlbXBsYXRlLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgZHJvcGRvd25JdGVtcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICA8RHJvcGRvd25JdGVtIGtleT17J2Rvd25sb2FkJ30gb25DbGljaz17aGFuZGxlVGVtcGxhdGVEb3dubG9hZH0+XG4gICAgICAgIHt0KCdET1dOTE9BRCcsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgPC9Ecm9wZG93bkl0ZW0+LFxuICAgICAgPERyb3Bkb3duSXRlbSBrZXk9eydkZWxldGUnfSBvbkNsaWNrPXtoYW5kbGVUZW1wbGF0ZURlbGV0ZX0+XG4gICAgICAgIHt0KCdERUxFVEUnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgIDwvRHJvcGRvd25JdGVtPixcbiAgICBdO1xuICB9LCBbdCwgaGFuZGxlVGVtcGxhdGVEb3dubG9hZCwgaGFuZGxlVGVtcGxhdGVEZWxldGVdKTtcblxuICByZXR1cm4gKFxuICAgIDxEcm9wZG93blxuICAgICAgbWVudUFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICAgICAgdG9nZ2xlPXs8S2ViYWJUb2dnbGUgaXNEaXNhYmxlZD17dGVtcGxhdGUudmVuZG9yICE9PSBMYXlvdXRUZW1wbGF0ZVZlbmRvci5VU0VSfSBvblRvZ2dsZT17b3BlbktlYmFifSAvPn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgaXNQbGFpblxuICAgICAgZHJvcGRvd25JdGVtcz17ZHJvcGRvd25JdGVtc31cbiAgICAvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRlbnQsIE1lbnVJdGVtLCBNZW51TGlzdCwgUG9wcGVyLCBTZWFyY2hJbnB1dCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hBdXRvY29tcGxldGVQcm9wcyB7XG4gIHZhbHVlczogc3RyaW5nW107XG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFNlYXJjaEF1dG9jb21wbGV0ZTogUmVhY3QuRkM8U2VhcmNoQXV0b2NvbXBsZXRlUHJvcHM+ID0gKHsgb25DaGFuZ2UsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtoaW50LCBzZXRIaW50XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2F1dG9jb21wbGV0ZU9wdGlvbnMsIHNldEF1dG9jb21wbGV0ZU9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8SlNYLkVsZW1lbnRbXT4oW10pO1xuXG4gIGNvbnN0IFtpc0F1dG9jb21wbGV0ZU9wZW4sIHNldElzQXV0b2NvbXBsZXRlT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1dG9jb21wbGV0ZVJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgb25DbGVhciA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRWYWx1ZSgnJyk7XG4gICAgb25DaGFuZ2UoJycpO1xuICB9LCBbc2V0VmFsdWUsIG9uQ2hhbmdlXSk7XG5cbiAgY29uc3Qgb25TZWFyY2hDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gJycgJiYgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJiBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIHZhbHVlIG9mIHRoZSBzZWFyY2ggaW5wdXQgY2hhbmdlcywgYnVpbGQgYSBsaXN0IG9mIG5vIG1vcmUgdGhhbiAxMCBhdXRvY29tcGxldGUgb3B0aW9ucy5cbiAgICAgICAgbGV0IG9wdGlvbnMgPSBwcm9wcy52YWx1ZXNcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobmV3VmFsdWUudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW0gaXRlbUlkPXtvcHRpb259IGtleT17b3B0aW9ufT5cbiAgICAgICAgICAgICAge29wdGlvbn1cbiAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgKSk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuc2xpY2UoMCwgMTApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBoaW50IGlzIHNldCB3aGVuZXZlciB0aGVyZSBpcyBvbmx5IG9uZSBhdXRvY29tcGxldGUgb3B0aW9uIGxlZnQuXG4gICAgICAgIHNldEhpbnQob3B0aW9ucy5sZW5ndGggPT09IDEgPyBuZXdWYWx1ZSArIG9wdGlvbnNbMF0ucHJvcHMuaXRlbUlkLnN1YnN0cmluZyhuZXdWYWx1ZS5sZW5ndGgpIDogJycpO1xuICAgICAgICAvLyBUaGUgbWVudSBpcyBoaWRkZW4gaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnNcbiAgICAgICAgc2V0SXNBdXRvY29tcGxldGVPcGVuKG9wdGlvbnMubGVuZ3RoID4gMCk7XG4gICAgICAgIHNldEF1dG9jb21wbGV0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJc0F1dG9jb21wbGV0ZU9wZW4oZmFsc2UpO1xuICAgICAgICBzZXRBdXRvY29tcGxldGVPcHRpb25zKFtdKTtcbiAgICAgICAgc2V0SGludCgnJyk7XG4gICAgICB9XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICBvbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VmFsdWUsIHNldEhpbnQsIHNldElzQXV0b2NvbXBsZXRlT3Blbiwgc2V0QXV0b2NvbXBsZXRlT3B0aW9ucywgb25DaGFuZ2UsIHByb3BzLnZhbHVlc11cbiAgKTtcblxuICAvLyBXaGVuZXZlciBhbiBhdXRvY29tcGxldGUgb3B0aW9uIGlzIHNlbGVjdGVkLCBzZXQgdGhlIHNlYXJjaCBpbnB1dCB2YWx1ZSwgY2xvc2UgdGhlIG1lbnUsIGFuZCBwdXQgdGhlIGJyb3dzZXJcbiAgLy8gZm9jdXMgYmFjayBvbiB0aGUgc2VhcmNoIGlucHV0XG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGUsIGl0ZW1JZCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHNldFZhbHVlKGl0ZW1JZCk7XG4gICAgICBzZXRIaW50KCcnKTtcbiAgICAgIHNldElzQXV0b2NvbXBsZXRlT3BlbihmYWxzZSk7XG4gICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9LFxuICAgIFtzZXRWYWx1ZSwgc2V0SGludCwgc2V0SXNBdXRvY29tcGxldGVPcGVuXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVLZXlzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIGhpbnQgd2hpbGUgdGhlIGJyb3dzZXIgZm9jdXMgaXMgb24gdGhlIHNlYXJjaCBpbnB1dCwgdGFiIG9yIHJpZ2h0IGFycm93IHdpbGwgJ2FjY2VwdCcgdGhlIGhpbnQgdmFsdWVcbiAgICAgIC8vIGFuZCBzZXQgaXQgYXMgdGhlIHNlYXJjaCBpbnB1dCB2YWx1ZVxuICAgICAgaWYgKGhpbnQgJiYgKGV2ZW50LmtleSA9PT0gJ1RhYicgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpICYmIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgPT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgICBzZXRWYWx1ZShoaW50KTtcbiAgICAgICAgc2V0SGludCgnJyk7XG4gICAgICAgIHNldElzQXV0b2NvbXBsZXRlT3BlbihmYWxzZSk7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIGF1dG9jb21wbGV0ZSBpcyBvcGVuIGFuZCB0aGUgYnJvd3NlciBmb2N1cyBpcyBvbiB0aGUgc2VhcmNoIGlucHV0LFxuICAgICAgfSBlbHNlIGlmIChpc0F1dG9jb21wbGV0ZU9wZW4gJiYgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJiBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgICAgLy8gdGhlIGVzY2FwZSBrZXkgY2xvc2VzIHRoZSBhdXRvY29tcGxldGUgbWVudSBhbmQga2VlcHMgdGhlIGZvY3VzIG9uIHRoZSBzZWFyY2ggaW5wdXQuXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgc2V0SXNBdXRvY29tcGxldGVPcGVuKGZhbHNlKTtcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgLy8gdGhlIHVwIGFuZCBkb3duIGFycm93IGtleXMgbW92ZSBicm93c2VyIGZvY3VzIGludG8gdGhlIGF1dG9jb21wbGV0ZSBtZW51XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgIGlmIChhdXRvY29tcGxldGVSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gYXV0b2NvbXBsZXRlUmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignbGkgPiBidXR0b246bm90KDpkaXNhYmxlZCknKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gYnkgZGVmYXVsdCwgdGhlIHVwIGFuZCBkb3duIGFycm93IGtleXMgc2Nyb2xsIHRoZSB3aW5kb3dcbiAgICAgICAgICAvLyB0aGUgdGFiLCBlbnRlciwgYW5kIHNwYWNlIGtleXMgd2lsbCBjbG9zZSB0aGUgbWVudSwgYW5kIHRoZSB0YWIga2V5IHdpbGwgbW92ZSBicm93c2VyXG4gICAgICAgICAgLy8gZm9jdXMgZm9yd2FyZCBvbmUgZWxlbWVudCAoYnkgZGVmYXVsdClcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdUYWInIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdTcGFjZScpIHtcbiAgICAgICAgICBzZXRJc0F1dG9jb21wbGV0ZU9wZW4oZmFsc2UpO1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnU3BhY2UnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW4gYW5kIHRoZSBicm93c2VyIGZvY3VzIGlzIGluIHRoZSBhdXRvY29tcGxldGUgbWVudVxuICAgICAgICAvLyBoaXR0aW5nIHRhYiB3aWxsIGNsb3NlIHRoZSBhdXRvY29tcGxldGUgYW5kIGJ1dCBicm93c2VyIGZvY3VzIGJhY2sgb24gdGhlIHNlYXJjaCBpbnB1dC5cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGlzQXV0b2NvbXBsZXRlT3BlbiAmJlxuICAgICAgICBhdXRvY29tcGxldGVSZWYuY3VycmVudCAmJlxuICAgICAgICBhdXRvY29tcGxldGVSZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgIGV2ZW50LmtleSA9PT0gJ1RhYidcbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRJc0F1dG9jb21wbGV0ZU9wZW4oZmFsc2UpO1xuICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoaW50LCBpc0F1dG9jb21wbGV0ZU9wZW5dXG4gICk7XG5cbiAgLy8gVGhlIGF1dG9jb21wbGV0ZSBtZW51IHNob3VsZCBjbG9zZSBpZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSB0aGUgbWVudS5cbiAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoaXNBdXRvY29tcGxldGVPcGVuICYmIGF1dG9jb21wbGV0ZVJlZi5jdXJyZW50ICYmICFhdXRvY29tcGxldGVSZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgIHNldElzQXV0b2NvbXBsZXRlT3BlbihmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaXNBdXRvY29tcGxldGVPcGVuXVxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVNZW51S2V5cyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVNZW51S2V5cyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVNZW51S2V5cyk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZU1lbnVLZXlzLCBoYW5kbGVDbGlja091dHNpZGVdKTtcblxuICBjb25zdCBzZWFyY2hJbnB1dCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPFNlYXJjaElucHV0XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e29uU2VhcmNoQ2hhbmdlfVxuICAgICAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICBoaW50PXtoaW50fVxuICAgICAgICBpZD1cImNyeW9zdGF0LWF1dG9jb21wbGV0ZS1zZWFyY2hcIlxuICAgICAgLz5cbiAgICApLFxuICAgIFt2YWx1ZSwgb25TZWFyY2hDaGFuZ2UsIG9uQ2xlYXIsIGhpbnRdXG4gICk7XG5cbiAgY29uc3QgYXV0b2NvbXBsZXRlID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8TWVudSByZWY9e2F1dG9jb21wbGV0ZVJlZn0gb25TZWxlY3Q9e29uU2VsZWN0fT5cbiAgICAgICAgPE1lbnVDb250ZW50PlxuICAgICAgICAgIDxNZW51TGlzdD57YXV0b2NvbXBsZXRlT3B0aW9uc308L01lbnVMaXN0PlxuICAgICAgICA8L01lbnVDb250ZW50PlxuICAgICAgPC9NZW51PlxuICAgICksXG4gICAgW2F1dG9jb21wbGV0ZU9wdGlvbnMsIG9uU2VsZWN0XVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFBvcHBlclxuICAgICAgdHJpZ2dlcj17c2VhcmNoSW5wdXR9XG4gICAgICBwb3BwZXI9e2F1dG9jb21wbGV0ZX1cbiAgICAgIGlzVmlzaWJsZT17aXNBdXRvY29tcGxldGVPcGVufVxuICAgICAgZW5hYmxlRmxpcD17ZmFsc2V9XG4gICAgICAvLyBhcHBlbmQgdGhlIGF1dG9jb21wbGV0ZSBtZW51IHRvIHRoZSBzZWFyY2ggaW5wdXQgaW4gdGhlIERPTSBmb3IgdGhlIHNha2Ugb2YgdGhlIGtleWJvYXJkIG5hdmlnYXRpb24gZXhwZXJpZW5jZVxuICAgICAgYXBwZW5kVG89eygpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjcnlvc3RhdC1hdXRvY29tcGxldGUtc2VhcmNoJykgfHwgcG9ydGFsUm9vdH1cbiAgICAvPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgRGVsZXRlV2FybmluZ01vZGFsIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nTW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdVdGlscyc7XG5pbXBvcnQgeyBSb290U3RhdGUsIGRhc2hib2FyZENvbmZpZ0RlbGV0ZVRlbXBsYXRlSW50ZW50IH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IGZha2VDaGFydENvbnRleHQsIGZha2VTZXJ2aWNlcyB9IGZyb20gJ0BhcHAvdXRpbHMvZmFrZURhdGEnO1xuaW1wb3J0IHsgdXNlRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC91dGlscy91c2VGZWF0dXJlTGV2ZWwnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnVsbHNleWUsXG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2FyZEJvZHksXG4gIENhcmRIZWFkZXIsXG4gIERlc2NyaXB0aW9uTGlzdCxcbiAgRGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24sXG4gIERlc2NyaXB0aW9uTGlzdEdyb3VwLFxuICBEZXNjcmlwdGlvbkxpc3RUZXJtLFxuICBEaXZpZGVyLFxuICBEcmF3ZXIsXG4gIERyYXdlckFjdGlvbnMsXG4gIERyYXdlckNsb3NlQnV0dG9uLFxuICBEcmF3ZXJDb250ZW50LFxuICBEcmF3ZXJDb250ZW50Qm9keSxcbiAgRHJhd2VySGVhZCxcbiAgRHJhd2VyUGFuZWxCb2R5LFxuICBEcmF3ZXJQYW5lbENvbnRlbnQsXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVCb2R5LFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRW1wdHlTdGF0ZVZhcmlhbnQsXG4gIEdyaWQsXG4gIEdyaWRJdGVtLFxuICBMaXN0LFxuICBMaXN0SXRlbSxcbiAgTGlzdFZhcmlhbnQsXG4gIFNlbGVjdCxcbiAgU2VsZWN0T3B0aW9uLFxuICBTZWxlY3RPcHRpb25PYmplY3QsXG4gIFNlbGVjdFZhcmlhbnQsXG4gIFN0YWNrLFxuICBTdGFja0l0ZW0sXG4gIFRpdGxlLFxuICBUb29sYmFyLFxuICBUb29sYmFyQ29udGVudCxcbiAgVG9vbGJhckZpbHRlcixcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbiAgVG9vbGJhclRvZ2dsZUdyb3VwLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7XG4gIEFycm93c0FsdFZJY29uLFxuICBGaWx0ZXJJY29uLFxuICBJbmZvQ2lyY2xlSWNvbixcbiAgUGZpY29uVGVtcGxhdGVJY29uLFxuICBTb3J0QW1vdW50RG93bkFsdEljb24sXG4gIFNvcnRBbW91bnRVcEFsdEljb24sXG4gIFVwbG9hZEljb24sXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IElubmVyU2Nyb2xsQ29udGFpbmVyLCBPdXRlclNjcm9sbENvbnRhaW5lciB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXRhYmxlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgQ2hhcnRDb250ZXh0IH0gZnJvbSAnLi9DaGFydHMvQ2hhcnRDb250ZXh0JztcbmltcG9ydCB7IENyeW9zdGF0TGF5b3V0VGVtcGxhdGVzLCBCbGFua0xheW91dCB9IGZyb20gJy4vY3J5b3N0YXQtZGFzaGJvYXJkLXRlbXBsYXRlcyc7XG5pbXBvcnQge1xuICBnZXRDYXJkRGVzY3JpcHRvckJ5TmFtZSxcbiAgaGFzQ2FyZERlc2NyaXB0b3JCeU5hbWUsXG4gIExheW91dFRlbXBsYXRlLFxuICBMYXlvdXRUZW1wbGF0ZUNvbnRleHQsXG4gIExheW91dFRlbXBsYXRlRmlsdGVyLFxuICBMYXlvdXRUZW1wbGF0ZVJlY29yZCxcbiAgU2VsZWN0ZWRMYXlvdXRUZW1wbGF0ZSxcbiAgcmVjb3JkVG9MYXlvdXRUZW1wbGF0ZSxcbn0gZnJvbSAnLi9kYXNoYm9hcmQtdXRpbHMnO1xuaW1wb3J0IHsgTGF5b3V0VGVtcGxhdGVHcm91cCwgc21hbGxlc3RGZWF0dXJlTGV2ZWwgfSBmcm9tICcuL0xheW91dFRlbXBsYXRlR3JvdXAnO1xuaW1wb3J0IHsgU2VhcmNoQXV0b2NvbXBsZXRlIH0gZnJvbSAnLi9TZWFyY2hBdXRvY29tcGxldGUnO1xuXG5leHBvcnQgZW51bSBMYXlvdXRUZW1wbGF0ZVNvcnQge1xuICBOQU1FID0gJ05hbWUnLFxuICBDQVJEX0NPVU5UID0gJ0NhcmQgQ291bnQnLFxuICAvLyBUT0RPOiBhZGQgJ1ZlcnNpb24nIGFmdGVyIG1vcmUgdmVyc2lvbiBhcmUgcmVsZWFzZWRcbn1cblxuY29uc3QgQ0FSRF9QUkVWSUVXX0xJTUlUID0gMTY7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0VGVtcGxhdGVQaWNrZXJQcm9wcyB7XG4gIG9uVGVtcGxhdGVTZWxlY3Q6IChzZWxlY3RlZFRlbXBsYXRlOiBTZWxlY3RlZExheW91dFRlbXBsYXRlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTGF5b3V0VGVtcGxhdGVQaWNrZXI6IFJlYWN0LkZDPExheW91dFRlbXBsYXRlUGlja2VyUHJvcHM+ID0gKHsgb25UZW1wbGF0ZVNlbGVjdCB9KSA9PiB7XG4gIGNvbnN0IHsgc2VsZWN0ZWRUZW1wbGF0ZSwgc2V0U2VsZWN0ZWRUZW1wbGF0ZSwgc2V0SXNVcGxvYWRNb2RhbE9wZW4gfSA9IFJlYWN0LnVzZUNvbnRleHQoTGF5b3V0VGVtcGxhdGVDb250ZXh0KTtcbiAgY29uc3Qgc2VydmljZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBhY3RpdmVMZXZlbCA9IHVzZUZlYXR1cmVMZXZlbCgpO1xuXG4gIGNvbnN0IFtzZWFyY2hGaWx0ZXIsIHNldFNlYXJjaEZpbHRlcl0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtpc0ZpbHRlclNlbGVjdE9wZW4sIHNldElzRmlsdGVyU2VsZWN0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3RlZEZpbHRlcnMsIHNldFNlbGVjdGVkRmlsdGVyc10gPSBSZWFjdC51c2VTdGF0ZTxMYXlvdXRUZW1wbGF0ZUZpbHRlcltdPihbXSk7XG5cbiAgY29uc3QgW2lzU29ydFNlbGVjdE9wZW4sIHNldElzU29ydFNlbGVjdE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VsZWN0ZWRTb3J0LCBzZXRTZWxlY3RlZFNvcnRdID0gUmVhY3QudXNlU3RhdGU8TGF5b3V0VGVtcGxhdGVTb3J0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBbc29ydERpcmVjdGlvbiwgc2V0U29ydERpcmVjdGlvbl0gPSBSZWFjdC51c2VTdGF0ZTwnYXNjJyB8ICdkZXNjJz4oJ2FzYycpO1xuXG4gIGNvbnN0IFtpc0RyYXdlckV4cGFuZGVkLCBzZXRJc0RyYXdlckV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBbaXNEZWxldGVXYXJuaW5nTW9kYWxPcGVuLCBzZXRJc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdG9EZWxldGUsIHNldFRvRGVsZXRlXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4oJycpO1xuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgcmVjZW50VGVtcGxhdGVSZWNvcmRzOiBMYXlvdXRUZW1wbGF0ZVJlY29yZFtdID0gdXNlU2VsZWN0b3IoXG4gICAgKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLmRhc2hib2FyZENvbmZpZ3MudGVtcGxhdGVIaXN0b3J5XG4gICk7XG4gIGNvbnN0IHVzZXJTdWJtaXR0ZWRUZW1wbGF0ZXM6IExheW91dFRlbXBsYXRlW10gPSB1c2VTZWxlY3RvcihcbiAgICAoc3RhdGU6IFJvb3RTdGF0ZSkgPT4gc3RhdGUuZGFzaGJvYXJkQ29uZmlncy5jdXN0b21UZW1wbGF0ZXNcbiAgKTtcblxuICBjb25zdCBzZWFyY2hGaWx0ZXJlZFRlbXBsYXRlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0ZW1wbGF0ZXM6IExheW91dFRlbXBsYXRlW10pOiBMYXlvdXRUZW1wbGF0ZVtdID0+IHtcbiAgICAgIGlmICghc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcigodCkgPT4gdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoRmlsdGVyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICB9LFxuICAgIFtzZWFyY2hGaWx0ZXJdXG4gICk7XG5cbiAgY29uc3QgYWxsVGVtcGxhdGVzOiBMYXlvdXRUZW1wbGF0ZVtdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIFtCbGFua0xheW91dCwgLi4uQ3J5b3N0YXRMYXlvdXRUZW1wbGF0ZXMsIC4uLnVzZXJTdWJtaXR0ZWRUZW1wbGF0ZXNdO1xuICB9LCBbdXNlclN1Ym1pdHRlZFRlbXBsYXRlc10pO1xuXG4gIGNvbnN0IGFsbFNlYXJjaGFibGVUZW1wbGF0ZU5hbWVzOiBzdHJpbmdbXSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoc2VhcmNoRmlsdGVyZWRUZW1wbGF0ZXMoYWxsVGVtcGxhdGVzKS5tYXAoKHQpID0+IHQubmFtZSkpKTtcbiAgfSwgW3NlYXJjaEZpbHRlcmVkVGVtcGxhdGVzLCBhbGxUZW1wbGF0ZXNdKTtcblxuICBjb25zdCBvbklubmVyVGVtcGxhdGVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGVtcGxhdGU6IFNlbGVjdGVkTGF5b3V0VGVtcGxhdGUpID0+IHtcbiAgICAgIG9uVGVtcGxhdGVTZWxlY3QodGVtcGxhdGUpO1xuICAgICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgICBzZXRJc0RyYXdlckV4cGFuZGVkKHRydWUpO1xuICAgIH0sXG4gICAgW29uVGVtcGxhdGVTZWxlY3QsIHNldFNlbGVjdGVkVGVtcGxhdGUsIHNldElzRHJhd2VyRXhwYW5kZWRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVEZWxldGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAobmFtZSkgPT4ge1xuICAgICAgZGlzcGF0Y2goZGFzaGJvYXJkQ29uZmlnRGVsZXRlVGVtcGxhdGVJbnRlbnQobmFtZSkpO1xuICAgICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZSgocHJldikgPT4ge1xuICAgICAgICBpZiAocHJldj8udGVtcGxhdGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaCwgc2V0U2VsZWN0ZWRUZW1wbGF0ZV1cbiAgKTtcblxuICBjb25zdCBvbklubmVyVGVtcGxhdGVEZWxldGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGVtcGxhdGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5kZWxldGlvbkRpYWxvZ3NFbmFibGVkRm9yKERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUxheW91dFRlbXBsYXRlKSkge1xuICAgICAgICBzZXRJc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4odHJ1ZSk7XG4gICAgICAgIHNldFRvRGVsZXRlKHRlbXBsYXRlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVUZW1wbGF0ZURlbGV0ZSh0ZW1wbGF0ZU5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3NlcnZpY2VDb250ZXh0LnNldHRpbmdzLCBzZXRJc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4sIHNldFRvRGVsZXRlLCBoYW5kbGVUZW1wbGF0ZURlbGV0ZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVXYXJuaW5nTW9kYWxDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4oZmFsc2UpO1xuICAgIHNldFRvRGVsZXRlKCcnKTtcbiAgfSwgW3NldElzRGVsZXRlV2FybmluZ01vZGFsT3Blbiwgc2V0VG9EZWxldGVdKTtcblxuICBjb25zdCBkZWxldGVXYXJuaW5nTW9kYWwgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICB3YXJuaW5nVHlwZT17RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlTGF5b3V0VGVtcGxhdGV9XG4gICAgICAgIHZpc2libGU9e2lzRGVsZXRlV2FybmluZ01vZGFsT3Blbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlRGVsZXRlV2FybmluZ01vZGFsQ2xvc2V9XG4gICAgICAgIG9uQWNjZXB0PXsoKSA9PiBoYW5kbGVUZW1wbGF0ZURlbGV0ZSh0b0RlbGV0ZSl9XG4gICAgICAvPlxuICAgICk7XG4gIH0sIFtpc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4sIHRvRGVsZXRlLCBoYW5kbGVEZWxldGVXYXJuaW5nTW9kYWxDbG9zZSwgaGFuZGxlVGVtcGxhdGVEZWxldGVdKTtcblxuICBjb25zdCBoYW5kbGVVcGxvYWRCdXR0b24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNVcGxvYWRNb2RhbE9wZW4odHJ1ZSk7XG4gIH0sIFtzZXRJc1VwbG9hZE1vZGFsT3Blbl0pO1xuXG4gIGNvbnN0IHVwbG9hZEJ1dHRvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBrZXk9XCJ1cGxvYWRcIlxuICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgYXJpYS1sYWJlbD17dCgnRGFzaGJvYXJkTGF5b3V0VG9vbGJhci5VUExPQUQuTEFCRUwnKX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlVXBsb2FkQnV0dG9ufVxuICAgICAgICBpY29uPXs8VXBsb2FkSWNvbiAvPn1cbiAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwiZGFzaGJvYXJkLXVwbG9hZC1idG5cIlxuICAgICAgPlxuICAgICAgICB7dCgnVVBMT0FEJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICA8L0J1dHRvbj5cbiAgICApLFxuICAgIFt0LCBoYW5kbGVVcGxvYWRCdXR0b25dXG4gICk7XG5cbiAgY29uc3Qgb25TZWFyY2hDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoRmlsdGVyKHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZXRTZWFyY2hGaWx0ZXJdXG4gICk7XG5cbiAgY29uc3Qgb25EZWxldGVDaGlwID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF9jYXRlZ29yeTogc3RyaW5nLCBjaGlwOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldFNlbGVjdGVkRmlsdGVycygocHJldikgPT4gcHJldi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGNoaXApKTtcbiAgICB9LFxuICAgIFtzZXRTZWxlY3RlZEZpbHRlcnNdXG4gICk7XG5cbiAgY29uc3Qgb25GaWx0ZXJTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBfZXY6IFJlYWN0Lk1vdXNlRXZlbnQgfCBSZWFjdC5DaGFuZ2VFdmVudCxcbiAgICAgIHNlbGVjdGlvbjogc3RyaW5nIHwgU2VsZWN0T3B0aW9uT2JqZWN0LFxuICAgICAgaXNQbGFjZWhvbGRlcjogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb24gYXMgTGF5b3V0VGVtcGxhdGVGaWx0ZXI7XG4gICAgICBzZXRTZWxlY3RlZEZpbHRlcnMoKHByZXYpID0+IHtcbiAgICAgICAgaWYgKGlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXYuaW5jbHVkZXMoc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCBzZWxlY3RlZF07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRTZWxlY3RlZEZpbHRlcnNdXG4gICk7XG5cbiAgY29uc3Qgb25GaWx0ZXJTZWxlY3RUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaXNFeHBhbmRlZDogYm9vbGVhbikgPT4ge1xuICAgICAgc2V0SXNGaWx0ZXJTZWxlY3RPcGVuKGlzRXhwYW5kZWQpO1xuICAgIH0sXG4gICAgW3NldElzRmlsdGVyU2VsZWN0T3Blbl1cbiAgKTtcblxuICBjb25zdCBvbkNsZWFyQWxsRmlsdGVycyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWxlY3RlZEZpbHRlcnMoW10pO1xuICB9LCBbc2V0U2VsZWN0ZWRGaWx0ZXJzXSk7XG5cbiAgY29uc3Qgb25Tb3J0U2VsZWN0VG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGlzRXhwYW5kZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIHNldElzU29ydFNlbGVjdE9wZW4oaXNFeHBhbmRlZCk7XG4gICAgfSxcbiAgICBbc2V0SXNTb3J0U2VsZWN0T3Blbl1cbiAgKTtcblxuICBjb25zdCBvblNvcnRTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBfZXY6IFJlYWN0Lk1vdXNlRXZlbnQgfCBSZWFjdC5DaGFuZ2VFdmVudCxcbiAgICAgIHNlbGVjdGlvbjogc3RyaW5nIHwgU2VsZWN0T3B0aW9uT2JqZWN0LFxuICAgICAgaXNQbGFjZWhvbGRlcjogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb24udmFsdWVPZigpIGFzIExheW91dFRlbXBsYXRlU29ydDtcbiAgICAgIHNldFNlbGVjdGVkU29ydCgoX3ByZXYpID0+IHtcbiAgICAgICAgaWYgKGlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgIH0pO1xuICAgICAgc2V0SXNTb3J0U2VsZWN0T3BlbihmYWxzZSk7XG4gICAgfSxcbiAgICBbc2V0U2VsZWN0ZWRTb3J0LCBzZXRJc1NvcnRTZWxlY3RPcGVuXVxuICApO1xuXG4gIGNvbnN0IHNvcnRBcnJvd0ljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkU29ydCkge1xuICAgICAgcmV0dXJuIDxBcnJvd3NBbHRWSWNvbiAvPjtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gPFNvcnRBbW91bnREb3duQWx0SWNvbiAvPiA6IDxTb3J0QW1vdW50VXBBbHRJY29uIC8+O1xuICB9LCBbc2VsZWN0ZWRTb3J0LCBzb3J0RGlyZWN0aW9uXSk7XG5cbiAgY29uc3Qgb25Tb3J0RGlyZWN0aW9uQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNvcnREaXJlY3Rpb24oKHByZXYpID0+IChwcmV2ID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnKSk7XG4gIH0sIFtzZXRTb3J0RGlyZWN0aW9uXSk7XG5cbiAgY29uc3Qgb25EcmF3ZXJDbG9zZUNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzRHJhd2VyRXhwYW5kZWQoZmFsc2UpO1xuICB9LCBbc2V0SXNEcmF3ZXJFeHBhbmRlZF0pO1xuXG4gIGNvbnN0IHBhbmVsQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gc2VsZWN0ZWRUZW1wbGF0ZT8udGVtcGxhdGU7XG4gICAgY29uc3QgbnVtQ2FyZHMgPSB0ZW1wbGF0ZT8uY2FyZHMubGVuZ3RoID8/IDA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmF3ZXJQYW5lbENvbnRlbnQgaXNSZXNpemFibGUgZGVmYXVsdFNpemU9XCI1MCVcIiBjbGFzc05hbWU9eydsYXlvdXQtdGVtcGxhdGUtcGlja2VyLWRyYXdlcl9fcGFuZWwnfT5cbiAgICAgICAgPERyYXdlckhlYWQ+XG4gICAgICAgICAgPERyYXdlckFjdGlvbnM+XG4gICAgICAgICAgICA8RHJhd2VyQ2xvc2VCdXR0b24gb25DbGljaz17b25EcmF3ZXJDbG9zZUNsaWNrfSAvPlxuICAgICAgICAgIDwvRHJhd2VyQWN0aW9ucz5cbiAgICAgICAgPC9EcmF3ZXJIZWFkPlxuICAgICAgICA8RHJhd2VyUGFuZWxCb2R5IHN0eWxlPXt7IG1hcmdpblRvcDogJy0zLjVlbScgfX0+XG4gICAgICAgICAge3RlbXBsYXRlID8gKFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdCBpc0ZpbGxDb2x1bW5zPlxuICAgICAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0R3JvdXA+XG4gICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdFRlcm0+TmFtZTwvRGVzY3JpcHRpb25MaXN0VGVybT5cbiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24+e3RlbXBsYXRlLm5hbWV9PC9EZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPC9EZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdEdyb3VwPlxuICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbkxpc3RUZXJtPkRlc2NyaXB0aW9uPC9EZXNjcmlwdGlvbkxpc3RUZXJtPlxuICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj57dGVtcGxhdGUuZGVzY3JpcHRpb259PC9EZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPC9EZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICAgICAgICAgICAge3RlbXBsYXRlLnZlbmRvciAmJiAoXG4gICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdEdyb3VwPlxuICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdFRlcm0+VmVuZG9yPC9EZXNjcmlwdGlvbkxpc3RUZXJtPlxuICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdERlc2NyaXB0aW9uPnt0ZW1wbGF0ZS52ZW5kb3J9PC9EZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICA8L0Rlc2NyaXB0aW9uTGlzdEdyb3VwPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7dGVtcGxhdGU/LnZlcnNpb24gJiYgKFxuICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbkxpc3RUZXJtPlZlcnNpb248L0Rlc2NyaXB0aW9uTGlzdFRlcm0+XG4gICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0RGVzY3JpcHRpb24+e3RlbXBsYXRlLnZlcnNpb259PC9EZXNjcmlwdGlvbkxpc3REZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICA8L0Rlc2NyaXB0aW9uTGlzdEdyb3VwPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8RGVzY3JpcHRpb25MaXN0R3JvdXA+XG4gICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uTGlzdFRlcm0+UHJldmlldyAoe251bUNhcmRzfSBDYXJkcyk8L0Rlc2NyaXB0aW9uTGlzdFRlcm0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgPFNlcnZpY2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmYWtlU2VydmljZXN9PlxuICAgICAgICAgICAgICAgICAgICA8Q2hhcnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmYWtlQ2hhcnRDb250ZXh0fT5cbiAgICAgICAgICAgICAgICAgICAgICA8R3JpZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9eydkYXNoYm9hcmQtbGF5b3V0LXByZXZpZXctZ3JpZCd9XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNHdXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge251bUNhcmRzID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RW1wdHlTdGF0ZUJvZHk+RW1wdHkgcHJldmlldzwvRW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RlbXBsYXRlLmNhcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgQ0FSRF9QUkVWSUVXX0xJTUlUKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2ZnKSA9PiBoYXNDYXJkRGVzY3JpcHRvckJ5TmFtZShjZmcubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjZmcsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUNhcmRzID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcubmFtZSA9PT0gJ0F1dG9tYXRlZEFuYWx5c2lzQ2FyZCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5uYW1lID09PSAnSnZtRGV0YWlsc0NhcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMTJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aWR4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyPXt7IGRlZmF1bHQ6IGlkeC50b1N0cmluZygpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogVE9ETzogcmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGEgcHJldmlldyBmb3IgSkZSTWV0cmljc0NoYXJ0Q2FyZCAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2ZnLm5hbWUgPT09ICdKRlJNZXRyaWNzQ2hhcnRDYXJkJyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkIGlzRnVsbEhlaWdodCBpc0NvbXBhY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9eydoNCd9PntjZmcucHJvcHNbJ2NoYXJ0S2luZCddfTwvVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmRCb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFbXB0eVN0YXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RW1wdHlTdGF0ZUJvZHk+RW1wdHkgcHJldmlldzwvRW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwcmV2aWV3LWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoZ2V0Q2FyZERlc2NyaXB0b3JCeU5hbWUoY2ZnLm5hbWUpLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW46IGNmZy5zcGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNmZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRJZDogaWR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdWxsSGVpZ2h0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge251bUNhcmRzID4gQ0FSRF9QUkVWSUVXX0xJTUlUICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHcmlkSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuPXsxMn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtDQVJEX1BSRVZJRVdfTElNSVR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyPXt7IGRlZmF1bHQ6IENBUkRfUFJFVklFV19MSU1JVC50b1N0cmluZygpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkIGlzRnVsbEhlaWdodCBpc0NvbXBhY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPXsnaDQnfT5SZW1haW5pbmcgY2FyZHMgKHtudW1DYXJkcyAtIENBUkRfUFJFVklFV19MSU1JVH0pPC9UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmRIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmRCb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QgdmFyaWFudD17TGlzdFZhcmlhbnQuaW5saW5lfSBpc1BsYWluPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGVtcGxhdGUuY2FyZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoQ0FSRF9QUkVWSUVXX0xJTUlUKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNmZykgPT4gaGFzQ2FyZERlc2NyaXB0b3JCeU5hbWUoY2ZnLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNmZywgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlzdEl0ZW0ga2V5PXtpZHh9IGljb249e2dldENhcmREZXNjcmlwdG9yQnlOYW1lKGNmZy5uYW1lKS5pY29ufT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2ZnLnByb3BzWydjaGFydEtpbmQnXSB8fCB0KGdldENhcmREZXNjcmlwdG9yQnlOYW1lKGNmZy5uYW1lKS50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgICAgICAgICAgPC9DaGFydENvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8L1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9EZXNjcmlwdGlvbkxpc3RHcm91cD5cbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb25MaXN0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8QnVsbHNleWU+XG4gICAgICAgICAgICAgIDxFbXB0eVN0YXRlIHZhcmlhbnQ9e0VtcHR5U3RhdGVWYXJpYW50LmZ1bGx9PlxuICAgICAgICAgICAgICAgIDxFbXB0eVN0YXRlSWNvbiBpY29uPXtJbmZvQ2lyY2xlSWNvbn0gLz5cbiAgICAgICAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDVcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgICAgICAgIE5vIHRlbXBsYXRlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgPC9UaXRsZT5cbiAgICAgICAgICAgICAgPC9FbXB0eVN0YXRlPlxuICAgICAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L0RyYXdlclBhbmVsQm9keT5cbiAgICAgIDwvRHJhd2VyUGFuZWxDb250ZW50PlxuICAgICk7XG4gIH0sIFt0LCBvbkRyYXdlckNsb3NlQ2xpY2ssIHNlbGVjdGVkVGVtcGxhdGVdKTtcblxuICBjb25zdCBzb3J0ZWRGaWx0ZXJlZEZlYXR1cmVMZXZlbGVkVGVtcGxhdGVMYXlvdXRHcm91cCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0aXRsZTogTGF5b3V0VGVtcGxhdGVGaWx0ZXIsIHRlbXBsYXRlczogTGF5b3V0VGVtcGxhdGVbXSkgPT4ge1xuICAgICAgY29uc3QgZmVhdHVyZWRMZXZlbGxlZCA9IHRlbXBsYXRlcy5maWx0ZXIoKHQpID0+IHNtYWxsZXN0RmVhdHVyZUxldmVsKHQuY2FyZHMpID49IGFjdGl2ZUxldmVsKTtcbiAgICAgIGNvbnN0IHNvcnRlZFNlYXJjaEZpbHRlcmVkVGVtcGxhdGVzID0gc2VhcmNoRmlsdGVyZWRUZW1wbGF0ZXMoZmVhdHVyZWRMZXZlbGxlZCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBzd2l0Y2ggKHNlbGVjdGVkU29ydCkge1xuICAgICAgICAgIGNhc2UgJ05hbWUnOlxuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09ICdhc2MnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGIubmFtZS5sb2NhbGVDb21wYXJlKGEubmFtZSk7XG4gICAgICAgICAgLy8gVE9ETzogdW5jb21tZW50IHZlcnNpb24gYWZ0ZXIgbW9yZSB2ZXJzaW9ucyBhcmUgYWRkZWRcbiAgICAgICAgICAvLyBjYXNlICdWZXJzaW9uJzpcbiAgICAgICAgICAvLyAgIGlmIChzb3J0RGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgIC8vICAgICByZXR1cm4gYS52ZXJzaW9uLmxvY2FsZUNvbXBhcmUoYi52ZXJzaW9uKTtcbiAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyAgIHJldHVybiBiLnZlcnNpb24ubG9jYWxlQ29tcGFyZShhLnZlcnNpb24pO1xuICAgICAgICAgIGNhc2UgJ0NhcmQgQ291bnQnOlxuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09ICdhc2MnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhLmNhcmRzLmxlbmd0aCAtIGIuY2FyZHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGIuY2FyZHMubGVuZ3RoIC0gYS5jYXJkcy5sZW5ndGg7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHNvcnRlZFNlYXJjaEZpbHRlcmVkVGVtcGxhdGVzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAoc2VsZWN0ZWRGaWx0ZXJzLmluY2x1ZGVzKHRpdGxlKSB8fCBzZWxlY3RlZEZpbHRlcnMubGVuZ3RoID09PSAwKSA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgICAgPExheW91dFRlbXBsYXRlR3JvdXBcbiAgICAgICAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICAgICAgICB0ZW1wbGF0ZXM9e3NvcnRlZFNlYXJjaEZpbHRlcmVkVGVtcGxhdGVzfVxuICAgICAgICAgICAgICBvblRlbXBsYXRlU2VsZWN0PXtvbklubmVyVGVtcGxhdGVTZWxlY3R9XG4gICAgICAgICAgICAgIG9uVGVtcGxhdGVEZWxldGU9e29uSW5uZXJUZW1wbGF0ZURlbGV0ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgIDwvPlxuICAgICAgKSA6IChcbiAgICAgICAgPD48Lz5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBhY3RpdmVMZXZlbCxcbiAgICAgIHNlYXJjaEZpbHRlcmVkVGVtcGxhdGVzLFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJzLFxuICAgICAgc2VsZWN0ZWRTb3J0LFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIG9uSW5uZXJUZW1wbGF0ZVNlbGVjdCxcbiAgICAgIG9uSW5uZXJUZW1wbGF0ZURlbGV0ZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgUmVjZW50VGVtcGxhdGVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHJlY2VudFRlbXBsYXRlUmVjb3Jkc1xuICAgICAgLm1hcCgocikgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHJlY29yZFRvTGF5b3V0VGVtcGxhdGUociwgYWxsVGVtcGxhdGVzKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBmaW5kIHRlbXBsYXRlIGZvciByZWNvcmQgJHtyLm5hbWV9IHdpdGggdmVuZG9yICR7ci52ZW5kb3J9YCk7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHQpID0+IHQgIT09IHVuZGVmaW5lZCkgYXMgTGF5b3V0VGVtcGxhdGVbXTtcbiAgfSwgW3JlY2VudFRlbXBsYXRlUmVjb3JkcywgYWxsVGVtcGxhdGVzXSk7XG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRUZW1wbGF0ZSkge1xuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtdGVtcGxhdGUtcGlja2VyIC5jYXRhbG9nLXRpbGUtcGYuZmVhdHVyZWQnKVxuICAgICAgICA/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRUZW1wbGF0ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPERyYXdlciBpc0V4cGFuZGVkPXtpc0RyYXdlckV4cGFuZGVkfSBpc0lubGluZT5cbiAgICAgIDxEcmF3ZXJDb250ZW50IHBhbmVsQ29udGVudD17cGFuZWxDb250ZW50fT5cbiAgICAgICAgPERyYXdlckNvbnRlbnRCb2R5PlxuICAgICAgICAgIDxPdXRlclNjcm9sbENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxJbm5lclNjcm9sbENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPFRvb2xiYXIgaXNTdGlja3kgY2xlYXJBbGxGaWx0ZXJzPXtvbkNsZWFyQWxsRmlsdGVyc30+XG4gICAgICAgICAgICAgICAgPFRvb2xiYXJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgPFRvb2xiYXJUb2dnbGVHcm91cCB0b2dnbGVJY29uPXs8RmlsdGVySWNvbiAvPn0gYnJlYWtwb2ludD17J21kJ30+XG4gICAgICAgICAgICAgICAgICAgIDxUb29sYmFyR3JvdXAgdmFyaWFudD1cImZpbHRlci1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxUb29sYmFySXRlbSB2YXJpYW50PVwic2VhcmNoLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEF1dG9jb21wbGV0ZSB2YWx1ZXM9e2FsbFRlbXBsYXRlcy5tYXAoKHQpID0+IHQubmFtZSl9IG9uQ2hhbmdlPXtvblNlYXJjaENoYW5nZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDxUb29sYmFyRmlsdGVyIGNoaXBzPXtzZWxlY3RlZEZpbHRlcnN9IGRlbGV0ZUNoaXA9e29uRGVsZXRlQ2hpcH0gY2F0ZWdvcnlOYW1lPVwiQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudUFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXtTZWxlY3RWYXJpYW50LmNoZWNrYm94fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHRlbXBsYXRlIGNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGU9e29uRmlsdGVyU2VsZWN0VG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17b25GaWx0ZXJTZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbnM9e3NlbGVjdGVkRmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPcGVuPXtpc0ZpbHRlclNlbGVjdE9wZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyVGV4dD1cIlRlbXBsYXRlIFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0T3B0aW9uIGtleT1cInN1Z2dlc3RlZFwiIHZhbHVlPXt0KCdTVUdHRVNURUQnLCB7IG5zOiAnY29tbW9uJyB9KX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdE9wdGlvbiBrZXk9XCJjcnlvc3RhdFwiIHZhbHVlPVwiQ3J5b3N0YXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0T3B0aW9uIGtleT1cInVzZXItc3VibWl0dGVkXCIgdmFsdWU9e3QoJ1VTRVJfU1VCTUlUVEVEJywgeyBuczogJ2NvbW1vbicgfSl9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2xiYXJGaWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgICAgICAgPC9Ub29sYmFyVG9nZ2xlR3JvdXA+XG4gICAgICAgICAgICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJpY29uLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8VG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudUFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCBzb3J0aW5nIGNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlPXtvblNvcnRTZWxlY3RUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17b25Tb3J0U2VsZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucz17c2VsZWN0ZWRTb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPcGVuPXtpc1NvcnRTZWxlY3RPcGVufVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PXt0KCdMYXlvdXRUZW1wbGF0ZVBpY2tlci5TT1JUX0JZLlBMQUNFSE9MREVSJykgYXMgc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtMYXlvdXRUZW1wbGF0ZVNvcnQuTkFNRX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiBgJHt0KCdMYXlvdXRUZW1wbGF0ZVBpY2tlci5TT1JUX0JZLk5BTUUnKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVPZjogKCkgPT4gTGF5b3V0VGVtcGxhdGVTb3J0Lk5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBTZWxlY3RPcHRpb25PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtMYXlvdXRUZW1wbGF0ZVNvcnQuQ0FSRF9DT1VOVH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiBgJHt0KCdMYXlvdXRUZW1wbGF0ZVBpY2tlci5TT1JUX0JZLkNBUkRfQ09VTlQnKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVPZjogKCkgPT4gTGF5b3V0VGVtcGxhdGVTb3J0LkNBUkRfQ09VTlQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBTZWxlY3RPcHRpb25PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvblNvcnREaXJlY3Rpb25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FyaWFEaXNhYmxlZD17IXNlbGVjdGVkU29ydH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c29ydEFycm93SWNvbn1cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgICAgICAgPFRvb2xiYXJHcm91cD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPnt1cGxvYWRCdXR0b259PC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgICAgIDwvVG9vbGJhckNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvVG9vbGJhcj5cbiAgICAgICAgICAgICAgPFN0YWNrPlxuICAgICAgICAgICAgICAgIHthbGxTZWFyY2hhYmxlVGVtcGxhdGVOYW1lcy5sZW5ndGggIT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7c29ydGVkRmlsdGVyZWRGZWF0dXJlTGV2ZWxlZFRlbXBsYXRlTGF5b3V0R3JvdXAodCgnU1VHR0VTVEVEJywgeyBuczogJ2NvbW1vbicgfSksIFtcbiAgICAgICAgICAgICAgICAgICAgICBCbGFua0xheW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAuLi5SZWNlbnRUZW1wbGF0ZXMsXG4gICAgICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICAgICAgICB7c29ydGVkRmlsdGVyZWRGZWF0dXJlTGV2ZWxlZFRlbXBsYXRlTGF5b3V0R3JvdXAoJ0NyeW9zdGF0JywgQ3J5b3N0YXRMYXlvdXRUZW1wbGF0ZXMpfVxuICAgICAgICAgICAgICAgICAgICB7c29ydGVkRmlsdGVyZWRGZWF0dXJlTGV2ZWxlZFRlbXBsYXRlTGF5b3V0R3JvdXAoXG4gICAgICAgICAgICAgICAgICAgICAgdCgnVVNFUl9TVUJNSVRURUQnLCB7IG5zOiAnY29tbW9uJyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICB1c2VyU3VibWl0dGVkVGVtcGxhdGVzXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPEVtcHR5U3RhdGVJY29uIGljb249e1BmaWNvblRlbXBsYXRlSWNvbn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGl0bGUgc2l6ZT1cImxnXCIgaGVhZGluZ0xldmVsPVwiaDRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vIHRlbXBsYXRlcyBmb3VuZFxuICAgICAgICAgICAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPEVtcHR5U3RhdGVCb2R5PlVwbG9hZCBhIHRlbXBsYXRlIGFuZCB0cnkgYWdhaW4uPC9FbXB0eVN0YXRlQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPC9FbXB0eVN0YXRlPlxuICAgICAgICAgICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9TdGFjaz5cbiAgICAgICAgICAgIDwvSW5uZXJTY3JvbGxDb250YWluZXI+XG4gICAgICAgICAgPC9PdXRlclNjcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9EcmF3ZXJDb250ZW50Qm9keT5cbiAgICAgIDwvRHJhd2VyQ29udGVudD5cbiAgICAgIHtkZWxldGVXYXJuaW5nTW9kYWx9XG4gICAgPC9EcmF3ZXI+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQge1xuICBkYXNoYm9hcmRDb25maWdDcmVhdGVMYXlvdXRJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ1JlbmFtZUxheW91dEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnUmVwbGFjZUxheW91dEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnVGVtcGxhdGVIaXN0b3J5UHVzaEludGVudCxcbiAgUm9vdFN0YXRlLFxufSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIEFjdGlvbkdyb3VwLFxuICBCdXR0b24sXG4gIEZvcm0sXG4gIEZvcm1Hcm91cCxcbiAgRm9ybVNlY3Rpb24sXG4gIE1vZGFsLFxuICBUZXh0SW5wdXQsXG4gIFRpdGxlLFxuICBUaXRsZVNpemVzLFxuICBWYWxpZGF0ZWRPcHRpb25zLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBCbGFua0xheW91dCB9IGZyb20gJy4vY3J5b3N0YXQtZGFzaGJvYXJkLXRlbXBsYXRlcyc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRMYXlvdXROYW1lUGF0dGVybixcbiAgREVGQVVMVF9EQVNIQk9BUkRfTkFNRSxcbiAgbGF5b3V0aXplLFxuICBMYXlvdXRUZW1wbGF0ZUNvbnRleHQsXG4gIFNlbGVjdGVkTGF5b3V0VGVtcGxhdGUsXG59IGZyb20gJy4vZGFzaGJvYXJkLXV0aWxzJztcbmltcG9ydCB7IExheW91dFRlbXBsYXRlUGlja2VyIH0gZnJvbSAnLi9MYXlvdXRUZW1wbGF0ZVBpY2tlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkTGF5b3V0Q3JlYXRlTW9kYWxQcm9wcyB7XG4gIG9sZE5hbWU/OiBzdHJpbmc7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbDogUmVhY3QuRkM8RGFzaGJvYXJkTGF5b3V0Q3JlYXRlTW9kYWxQcm9wcz4gPSAoeyBvbkNsb3NlLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBkYXNoYm9hcmRDb25maWdzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLmRhc2hib2FyZENvbmZpZ3MpO1xuICBjb25zdCBbbmFtZVZhbGlkYXRlZCwgc2V0TmFtZVZhbGlkYXRlZF0gPSBSZWFjdC51c2VTdGF0ZTxWYWxpZGF0ZWRPcHRpb25zPihWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nPignJyk7XG4gIGNvbnN0IFtuYW1lLCBzZXROYW1lXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4oJycpO1xuICBjb25zdCB7IHNlbGVjdGVkVGVtcGxhdGUsIHNldFNlbGVjdGVkVGVtcGxhdGUgfSA9IFJlYWN0LnVzZUNvbnRleHQoTGF5b3V0VGVtcGxhdGVDb250ZXh0KTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE5hbWUocHJvcHMub2xkTmFtZSB8fCAnJyk7XG4gIH0sIFtzZXROYW1lLCBwcm9wcy5vbGROYW1lXSk7XG5cbiAgY29uc3QgaXNDcmVhdGVNb2RhbCA9IFJlYWN0LnVzZU1lbW8oKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBwcm9wcy5vbGROYW1lID09PSB1bmRlZmluZWQ7XG4gIH0sIFtwcm9wcy5vbGROYW1lXSk7XG5cbiAgY29uc3QgaGFuZGxlTmFtZUNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXROYW1lKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2V0TmFtZVZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLmVycm9yKTtcbiAgICAgICAgc2V0RXJyb3JNZXNzYWdlKHQoJ0Rhc2hib2FyZExheW91dENyZWF0ZU1vZGFsLkVSUk9SLk5BTUVfUkVRVUlSRUQnKSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIHNldE5hbWVWYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5lcnJvcik7XG4gICAgICAgIHNldEVycm9yTWVzc2FnZSh0KCdEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbC5FUlJPUi5OQU1FX1RPT19MT05HJykpO1xuICAgICAgfSBlbHNlIGlmIChkYXNoYm9hcmRDb25maWdzLmxheW91dHMuc29tZSgobGF5b3V0KSA9PiBsYXlvdXQubmFtZSA9PT0gdmFsdWUpIHx8IHZhbHVlID09PSBERUZBVUxUX0RBU0hCT0FSRF9OQU1FKSB7XG4gICAgICAgIHNldE5hbWVWYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5lcnJvcik7XG4gICAgICAgIHNldEVycm9yTWVzc2FnZSh0KCdEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbC5FUlJPUi5OQU1FX1RBS0VOJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKERhc2hib2FyZExheW91dE5hbWVQYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgc2V0TmFtZVZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldE5hbWVWYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5lcnJvcik7XG4gICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKHQoJ0Rhc2hib2FyZExheW91dENyZWF0ZU1vZGFsLkVSUk9SLk5BTUVfSU5WQUxJRCcpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW3QsIHNldE5hbWUsIHNldE5hbWVWYWxpZGF0ZWQsIHNldEVycm9yTWVzc2FnZSwgZGFzaGJvYXJkQ29uZmlnc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldj86IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGV2ICYmIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgc2V0TmFtZShwcm9wcy5vbGROYW1lIHx8ICcnKTtcbiAgICAgIHNldE5hbWVWYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9LFxuICAgIFtzZXROYW1lLCBzZXROYW1lVmFsaWRhdGVkLCBvbkNsb3NlLCBwcm9wcy5vbGROYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldj86IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGV2ICYmIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKG5hbWVWYWxpZGF0ZWQgPT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyAmJiBzZWxlY3RlZFRlbXBsYXRlKSB7XG4gICAgICAgIGlmIChpc0NyZWF0ZU1vZGFsKSB7XG4gICAgICAgICAgY29uc3QgbmV3TGF5b3V0ID0gbGF5b3V0aXplKHNlbGVjdGVkVGVtcGxhdGUudGVtcGxhdGUsIG5hbWUpO1xuICAgICAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0NyZWF0ZUxheW91dEludGVudChuZXdMYXlvdXQpKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRUZW1wbGF0ZS50ZW1wbGF0ZSAhPT0gQmxhbmtMYXlvdXQpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ1RlbXBsYXRlSGlzdG9yeVB1c2hJbnRlbnQoc2VsZWN0ZWRUZW1wbGF0ZS50ZW1wbGF0ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkaXNwYXRjaChkYXNoYm9hcmRDb25maWdSZXBsYWNlTGF5b3V0SW50ZW50KG5ld0xheW91dC5uYW1lKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByb3BzLm9sZE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goZGFzaGJvYXJkQ29uZmlnUmVuYW1lTGF5b3V0SW50ZW50KHByb3BzLm9sZE5hbWUsIG5hbWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfSxcbiAgICBbZGlzcGF0Y2gsIGhhbmRsZUNsb3NlLCBzZWxlY3RlZFRlbXBsYXRlLCBuYW1lLCBuYW1lVmFsaWRhdGVkLCBpc0NyZWF0ZU1vZGFsLCBwcm9wcy5vbGROYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUtleVVwID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2OiBSZWFjdC5LZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChldi5jb2RlID09PSAnRW50ZXInICYmIG5hbWVWYWxpZGF0ZWQgPT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzcykge1xuICAgICAgICBoYW5kbGVTdWJtaXQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVTdWJtaXQsIG5hbWVWYWxpZGF0ZWRdXG4gICk7XG5cbiAgY29uc3Qgb25UZW1wbGF0ZVNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0ZW1wbGF0ZTogU2VsZWN0ZWRMYXlvdXRUZW1wbGF0ZSkgPT4ge1xuICAgICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBbc2V0U2VsZWN0ZWRUZW1wbGF0ZV1cbiAgKTtcblxuICBjb25zdCBmb3JtR3JvdXAgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZvcm1TZWN0aW9uPlxuICAgICAgICB7aXNDcmVhdGVNb2RhbCAmJiAoXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17J1RlbXBsYXRlJ30gZmllbGRJZD1cInRlbXBsYXRlXCIgaXNSZXF1aXJlZCBoZWlnaHQ9XCIzNWVtXCIgdmFsaWRhdGVkPXtuYW1lVmFsaWRhdGVkfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyQ29sb3ItLTEwMCknLCBoZWlnaHQ6ICczM2VtJyB9fT5cbiAgICAgICAgICAgICAgPExheW91dFRlbXBsYXRlUGlja2VyIG9uVGVtcGxhdGVTZWxlY3Q9e29uVGVtcGxhdGVTZWxlY3R9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgKX1cbiAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgIGxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbC5OQU1FLkxBQkVMJyl9XG4gICAgICAgICAgZmllbGRJZD1cIm5hbWVcIlxuICAgICAgICAgIGhlbHBlclRleHQ9e3QoJ0Rhc2hib2FyZExheW91dENyZWF0ZU1vZGFsLk5BTUUuSEVMUEVSX1RFWFQnKX1cbiAgICAgICAgICBoZWxwZXJUZXh0SW52YWxpZD17ZXJyb3JNZXNzYWdlfVxuICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICB2YWxpZGF0ZWQ9e25hbWVWYWxpZGF0ZWR9XG4gICAgICAgID5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBpZD1cIm5hbWVcIlxuICAgICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17J25hbWUtaGVscGVyJ31cbiAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU5hbWVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9uXCJcbiAgICAgICAgICAgIHZhbGlkYXRlZD17bmFtZVZhbGlkYXRlZH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIDwvRm9ybVNlY3Rpb24+XG4gICAgKTtcbiAgfSwgW3QsIGlzQ3JlYXRlTW9kYWwsIG5hbWVWYWxpZGF0ZWQsIGVycm9yTWVzc2FnZSwgbmFtZSwgb25UZW1wbGF0ZVNlbGVjdCwgaGFuZGxlTmFtZUNoYW5nZSwgaGFuZGxlS2V5VXBdKTtcblxuICBjb25zdCBhY3Rpb25Hcm91cCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8QWN0aW9uR3JvdXA+XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9IGlzQXJpYURpc2FibGVkPXtuYW1lVmFsaWRhdGVkICE9PSAnc3VjY2Vzcyd9PlxuICAgICAgICAgIHtpc0NyZWF0ZU1vZGFsID8gdCgnQ1JFQVRFJywgeyBuczogJ2NvbW1vbicgfSkgOiB0KCdSRU5BTUUnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cImxpbmtcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+XG4gICAgICAgICAge3QoJ0NBTkNFTCcsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvQWN0aW9uR3JvdXA+XG4gICAgKTtcbiAgfSwgW3QsIGhhbmRsZVN1Ym1pdCwgaGFuZGxlQ2xvc2UsIG5hbWVWYWxpZGF0ZWQsIGlzQ3JlYXRlTW9kYWxdKTtcblxuICBjb25zdCBoZWFkZXIgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxUaXRsZSBpZD1cIm1vZGFsLWN1c3RvbS1oZWFkZXItbGFiZWxcIiBoZWFkaW5nTGV2ZWw9XCJoMVwiIHNpemU9e1RpdGxlU2l6ZXNbJzJ4bCddfT5cbiAgICAgICAge2lzQ3JlYXRlTW9kYWwgPyB0KCdEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbC5DUkVBVEVfTEFZT1VUJykgOiB0KCdEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbC5SRU5BTUVfTEFZT1VUJyl9XG4gICAgICA8L1RpdGxlPlxuICAgICksXG4gICAgW3QsIGlzQ3JlYXRlTW9kYWxdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGFyaWEtbGFiZWw9e3QoJ0Rhc2hib2FyZExheW91dENyZWF0ZU1vZGFsLkxBQkVMJyl9XG4gICAgICB3aWR0aD17aXNDcmVhdGVNb2RhbCA/ICcxMTBlbScgOiAnNDAlJ31cbiAgICAgIGhlaWdodD17aXNDcmVhdGVNb2RhbCA/ICc5MCUnIDogJ2F1dG8nfVxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICBpc09wZW49e3Byb3BzLnZpc2libGV9XG4gICAgICBzaG93Q2xvc2U9e3RydWV9XG4gICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgIGhlYWRlcj17aGVhZGVyfVxuICAgID5cbiAgICAgIDxGb3JtIG9uU3VibWl0PXsoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfT5cbiAgICAgICAge2Zvcm1Hcm91cH1cbiAgICAgICAge2FjdGlvbkdyb3VwfVxuICAgICAgPC9Gb3JtPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zQ29udGV4dCB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IGRhc2hib2FyZENvbmZpZ0NyZWF0ZVRlbXBsYXRlSW50ZW50LCBSb290U3RhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9SZWR1eC9SZWR1eFN0b3JlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXAsIEJ1dHRvbiwgRm9ybSwgRm9ybUdyb3VwLCBNb2RhbCwgTW9kYWxWYXJpYW50LCBUZXh0QXJlYSwgVGV4dElucHV0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0ZWRPcHRpb25zIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZS9kaXN0L2pzL2hlbHBlcnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIERhc2hib2FyZExheW91dE5hbWVQYXR0ZXJuLFxuICBMYXlvdXRUZW1wbGF0ZURlc2NyaXB0aW9uUGF0dGVybixcbiAgTEFZT1VUX1RFTVBMQVRFX0RFU0NSSVBUSU9OX1dPUkRfTElNSVQsXG4gIHRlbXBsYXRpemUsXG59IGZyb20gJy4vZGFzaGJvYXJkLXV0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWxQcm9wcyB7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIGRvd25sb2FkTW9kYWw/OiBib29sZWFuO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgRGFzaGJvYXJkTGF5b3V0U2V0QXNUZW1wbGF0ZU1vZGFsOiBSZWFjdC5GQzxEYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWxQcm9wcz4gPSAoe1xuICBvbkNsb3NlLFxuICBkb3dubG9hZE1vZGFsID0gZmFsc2UsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgZGFzaGJvYXJkQ29uZmlncyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiBzdGF0ZS5kYXNoYm9hcmRDb25maWdzKTtcbiAgY29uc3QgdGVtcGxhdGVzID0gZGFzaGJvYXJkQ29uZmlncy5jdXN0b21UZW1wbGF0ZXM7XG4gIGNvbnN0IHNlcnZpY2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBSZWFjdC51c2VDb250ZXh0KE5vdGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkZXNjcmlwdGlvbiwgc2V0RGVzY3JpcHRpb25dID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IFtuYW1lVmFsaWRhdGVkLCBzZXROYW1lVmFsaWRhdGVkXSA9IFJlYWN0LnVzZVN0YXRlPFZhbGlkYXRlZE9wdGlvbnM+KFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdCk7XG4gIGNvbnN0IFtkZXNjcmlwdGlvblZhbGlkYXRlZCwgc2V0RGVzY3JpcHRpb25WYWxpZGF0ZWRdID0gUmVhY3QudXNlU3RhdGU8VmFsaWRhdGVkT3B0aW9ucz4oVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0KTtcbiAgY29uc3QgW25hbWVFcnJvck1lc3NhZ2UsIHNldE5hbWVFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbZGVzY3JpcHRpb25FcnJvck1lc3NhZ2UsIHNldERlc2NyaXB0aW9uRXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCBjdXJyTGF5b3V0ID0gUmVhY3QudXNlTWVtbygoKSA9PiBkYXNoYm9hcmRDb25maWdzLmxheW91dHNbZGFzaGJvYXJkQ29uZmlncy5jdXJyZW50XSwgW2Rhc2hib2FyZENvbmZpZ3NdKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldj86IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICBldiAmJiBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHNldE5hbWUoJycpO1xuICAgICAgc2V0RGVzY3JpcHRpb24oJycpO1xuICAgICAgc2V0TmFtZVZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICAgICAgc2V0RGVzY3JpcHRpb25WYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgIHNldE5hbWVFcnJvck1lc3NhZ2UoJycpO1xuICAgICAgc2V0RGVzY3JpcHRpb25FcnJvck1lc3NhZ2UoJycpO1xuICAgICAgb25DbG9zZSgpO1xuICAgIH0sXG4gICAgW1xuICAgICAgb25DbG9zZSxcbiAgICAgIHNldE5hbWUsXG4gICAgICBzZXREZXNjcmlwdGlvbixcbiAgICAgIHNldE5hbWVWYWxpZGF0ZWQsXG4gICAgICBzZXREZXNjcmlwdGlvblZhbGlkYXRlZCxcbiAgICAgIHNldE5hbWVFcnJvck1lc3NhZ2UsXG4gICAgICBzZXREZXNjcmlwdGlvbkVycm9yTWVzc2FnZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2PzogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHtcbiAgICAgIGlmIChkb3dubG9hZE1vZGFsKSB7XG4gICAgICAgIHNlcnZpY2VDb250ZXh0LmFwaS5kb3dubG9hZExheW91dFRlbXBsYXRlKHRlbXBsYXRpemUoY3VyckxheW91dCwgbmFtZSwgZGVzY3JpcHRpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0NyZWF0ZVRlbXBsYXRlSW50ZW50KHRlbXBsYXRpemUoY3VyckxheW91dCwgbmFtZSwgZGVzY3JpcHRpb24pKSk7XG4gICAgICAgIG5vdGlmaWNhdGlvbnMuc3VjY2VzcyhcbiAgICAgICAgICAnTGF5b3V0IFRlbXBsYXRlIENyZWF0ZWQnLFxuICAgICAgICAgIGAke25hbWV9IHdhcyBjcmVhdGVkIGFzIGEgbGF5b3V0IHRlbXBsYXRlYCxcbiAgICAgICAgICBOb3RpZmljYXRpb25DYXRlZ29yeS5MYXlvdXRUZW1wbGF0ZUNyZWF0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKGV2KTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaCwgaGFuZGxlQ2xvc2UsIHNlcnZpY2VDb250ZXh0LmFwaSwgZG93bmxvYWRNb2RhbCwgY3VyckxheW91dCwgbmFtZSwgZGVzY3JpcHRpb24sIG5vdGlmaWNhdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTmFtZUNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXROYW1lKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2V0TmFtZVZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLmVycm9yKTtcbiAgICAgICAgc2V0TmFtZUVycm9yTWVzc2FnZSh0KCdEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbC5FUlJPUi5OQU1FX1JFUVVJUkVEJykpO1xuICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZXMuc29tZSgobGF5b3V0KSA9PiBsYXlvdXQubmFtZSA9PT0gdmFsdWUpKSB7XG4gICAgICAgIHNldE5hbWVWYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5lcnJvcik7XG4gICAgICAgIHNldE5hbWVFcnJvck1lc3NhZ2UodCgnRGFzaGJvYXJkTGF5b3V0Q3JlYXRlTW9kYWwuRVJST1IuTkFNRV9UQUtFTicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChEYXNoYm9hcmRMYXlvdXROYW1lUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgIHNldE5hbWVWYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzKTtcbiAgICAgICAgICBzZXROYW1lRXJyb3JNZXNzYWdlKCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXROYW1lVmFsaWRhdGVkKFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IpO1xuICAgICAgICAgIHNldE5hbWVFcnJvck1lc3NhZ2UodCgnRGFzaGJvYXJkTGF5b3V0Q3JlYXRlTW9kYWwuRVJST1IuTkFNRV9JTlZBTElEJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbdCwgc2V0TmFtZSwgc2V0TmFtZVZhbGlkYXRlZCwgc2V0TmFtZUVycm9yTWVzc2FnZSwgdGVtcGxhdGVzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZURlc2NyaXB0aW9uQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldERlc2NyaXB0aW9uKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2V0RGVzY3JpcHRpb25WYWxpZGF0ZWQoVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgICAgc2V0RGVzY3JpcHRpb25FcnJvck1lc3NhZ2UoJycpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiBMQVlPVVRfVEVNUExBVEVfREVTQ1JJUFRJT05fV09SRF9MSU1JVCkge1xuICAgICAgICBzZXREZXNjcmlwdGlvblZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLmVycm9yKTtcbiAgICAgICAgc2V0RGVzY3JpcHRpb25FcnJvck1lc3NhZ2UodCgnRGFzaGJvYXJkTGF5b3V0U2V0QXNUZW1wbGF0ZU1vZGFsLkVSUk9SLkRFU0NSSVBUSU9OX1RPT19MT05HJykpO1xuICAgICAgfSBlbHNlIGlmIChMYXlvdXRUZW1wbGF0ZURlc2NyaXB0aW9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICBzZXREZXNjcmlwdGlvblZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MpO1xuICAgICAgICBzZXREZXNjcmlwdGlvbkVycm9yTWVzc2FnZSgnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXREZXNjcmlwdGlvblZhbGlkYXRlZChWYWxpZGF0ZWRPcHRpb25zLmVycm9yKTtcbiAgICAgICAgc2V0RGVzY3JpcHRpb25FcnJvck1lc3NhZ2UodCgnRGFzaGJvYXJkTGF5b3V0U2V0QXNUZW1wbGF0ZU1vZGFsLkVSUk9SLkRFU0NSSVBUSU9OX0lOVkFMSUQnKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdCwgc2V0RGVzY3JpcHRpb24sIHNldERlc2NyaXB0aW9uVmFsaWRhdGVkLCBzZXREZXNjcmlwdGlvbkVycm9yTWVzc2FnZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICBpc09wZW49e3Byb3BzLnZpc2libGV9XG4gICAgICB2YXJpYW50PXtNb2RhbFZhcmlhbnQubWVkaXVtfVxuICAgICAgc2hvd0Nsb3NlPXt0cnVlfVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICB0aXRsZT17XG4gICAgICAgIGRvd25sb2FkTW9kYWxcbiAgICAgICAgICA/IHQoJ0Rhc2hib2FyZExheW91dFNldEFzVGVtcGxhdGVNb2RhbC5ET1dOTE9BRC5USVRMRScpXG4gICAgICAgICAgOiB0KCdEYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWwuU0VUX1RFTVBMQVRFLlRJVExFJylcbiAgICAgIH1cbiAgICAgIGRlc2NyaXB0aW9uPXtcbiAgICAgICAgZG93bmxvYWRNb2RhbFxuICAgICAgICAgID8gdChgRGFzaGJvYXJkTGF5b3V0U2V0QXNUZW1wbGF0ZU1vZGFsLkRPV05MT0FELkRFU0NSSVBUSU9OYClcbiAgICAgICAgICA6IHQoYERhc2hib2FyZExheW91dFNldEFzVGVtcGxhdGVNb2RhbC5TRVRfVEVNUExBVEUuREVTQ1JJUFRJT05gKVxuICAgICAgfVxuICAgID5cbiAgICAgIDxGb3JtIG9uU3VibWl0PXsoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfT5cbiAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgIGxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWwuRk9STV9HUk9VUC5OQU1FLkxBQkVMJyl9XG4gICAgICAgICAgZmllbGRJZD1cIm5hbWVcIlxuICAgICAgICAgIGhlbHBlclRleHQ9e3QoJ0Rhc2hib2FyZExheW91dFNldEFzVGVtcGxhdGVNb2RhbC5GT1JNX0dST1VQLk5BTUUuSEVMUEVSX1RFWFQnKX1cbiAgICAgICAgICBoZWxwZXJUZXh0SW52YWxpZD17bmFtZUVycm9yTWVzc2FnZX1cbiAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgdmFsaWRhdGVkPXtuYW1lVmFsaWRhdGVkfVxuICAgICAgICA+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgaWQ9XCJuYW1lXCJcbiAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9eyduYW1lLWhlbHBlcid9XG4gICAgICAgICAgICB2YWx1ZT17bmFtZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVOYW1lQ2hhbmdlfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib25cIlxuICAgICAgICAgICAgdmFsaWRhdGVkPXtuYW1lVmFsaWRhdGVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2N1cnJMYXlvdXQubmFtZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPEZvcm1Hcm91cFxuICAgICAgICAgIGxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWwuRk9STV9HUk9VUC5ERVNDUklQVElPTi5MQUJFTCcpfVxuICAgICAgICAgIGZpZWxkSWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgaGVscGVyVGV4dD17dCgnRGFzaGJvYXJkTGF5b3V0U2V0QXNUZW1wbGF0ZU1vZGFsLkZPUk1fR1JPVVAuREVTQ1JJUFRJT04uSEVMUEVSX1RFWFQnKX1cbiAgICAgICAgICBoZWxwZXJUZXh0SW52YWxpZD17ZGVzY3JpcHRpb25FcnJvck1lc3NhZ2V9XG4gICAgICAgICAgdmFsaWRhdGVkPXtkZXNjcmlwdGlvblZhbGlkYXRlZH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17J2Rlc2NyaXB0aW9uLWhlbHBlcid9XG4gICAgICAgICAgICB2YWx1ZT17ZGVzY3JpcHRpb259XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRGVzY3JpcHRpb25DaGFuZ2V9XG4gICAgICAgICAgICB2YWxpZGF0ZWQ9e2Rlc2NyaXB0aW9uVmFsaWRhdGVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ0Rhc2hib2FyZExheW91dFNldEFzVGVtcGxhdGVNb2RhbC5GT1JNX0dST1VQLkRFU0NSSVBUSU9OLlBMQUNFSE9MREVSJyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICAgIDxBY3Rpb25Hcm91cD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtuYW1lVmFsaWRhdGVkICE9PSBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MgfHwgZGVzY3JpcHRpb25WYWxpZGF0ZWQgPT09IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3J9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Rvd25sb2FkTW9kYWwgPyB0KCdET1dOTE9BRCcsIHsgbnM6ICdjb21tb24nIH0pIDogdCgnU1VCTUlUJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwibGlua1wiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT5cbiAgICAgICAgICAgIHt0KCdDQU5DRUwnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICAgIDwvRm9ybT5cbiAgICA8L01vZGFsPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgRlVwbG9hZCwgTXVsdGlGaWxlVXBsb2FkLCBVcGxvYWRDYWxsYmFja3MgfSBmcm9tICdAYXBwL1NoYXJlZC9GaWxlVXBsb2Fkcyc7XG5pbXBvcnQgeyBMb2FkaW5nUHJvcHNUeXBlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUHJvZ3Jlc3NJbmRpY2F0b3InO1xuaW1wb3J0IHsgZGFzaGJvYXJkQ29uZmlnQ3JlYXRlVGVtcGxhdGVJbnRlbnQsIFJvb3RTdGF0ZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L1JlZHV4U3RvcmUnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IEFjdGlvbkdyb3VwLCBCdXR0b24sIEZvcm0sIEZvcm1Hcm91cCwgTW9kYWwsIE1vZGFsVmFyaWFudCwgUG9wb3ZlciwgVGV4dCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgSGVscEljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGRlZmF1bHRJZkVtcHR5LCBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERhc2hib2FyZExheW91dE5hbWVQYXR0ZXJuLFxuICBMQVlPVVRfVEVNUExBVEVfREVTQ1JJUFRJT05fV09SRF9MSU1JVCxcbiAgTGF5b3V0VGVtcGxhdGUsXG4gIExheW91dFRlbXBsYXRlQ29udGV4dCxcbiAgTGF5b3V0VGVtcGxhdGVEZXNjcmlwdGlvblBhdHRlcm4sXG4gIExheW91dFRlbXBsYXRlVmVuZG9yLFxuICBMYXlvdXRUZW1wbGF0ZVZlcnNpb24sXG4gIFNlcmlhbExheW91dFRlbXBsYXRlLFxuICBtb2NrU2VyaWFsQ2FyZENvbmZpZyxcbiAgbW9ja1NlcmlhbExheW91dFRlbXBsYXRlLFxuICBnZXREYXNoYm9hcmRDYXJkcyxcbn0gZnJvbSAnLi9kYXNoYm9hcmQtdXRpbHMnO1xuaW1wb3J0IHsgc21hbGxlc3RGZWF0dXJlTGV2ZWwgfSBmcm9tICcuL0xheW91dFRlbXBsYXRlR3JvdXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFRlbXBsYXRlVXBsb2FkTW9kYWxQcm9wcyB7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBMYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsOiBSZWFjdC5GQzxMYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsUHJvcHM+ID0gKHsgb25DbG9zZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgeyBzZXRTZWxlY3RlZFRlbXBsYXRlIH0gPSBSZWFjdC51c2VDb250ZXh0KExheW91dFRlbXBsYXRlQ29udGV4dCk7XG4gIGNvbnN0IGN1c3RvbVRlbXBsYXRlcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiBzdGF0ZS5kYXNoYm9hcmRDb25maWdzLmN1c3RvbVRlbXBsYXRlcyk7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3Qgc3VibWl0UmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTsgLy8gVXNlIHJlZiB0byByZWZlciB0byBzdWJtaXQgdHJpZ2dlciBkaXZcbiAgY29uc3QgYWJvcnRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpOyAvLyBVc2UgcmVmIHRvIHJlZmVyIHRvIGFib3J0IHRyaWdnZXIgZGl2XG5cbiAgY29uc3QgW251bU9mRmlsZXMsIHNldE51bU9mRmlsZXNdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IFthbGxPa3MsIHNldEFsbE9rc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt1cGxvYWRpbmcsIHNldFVwbG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgdmFsaWRhdGVQYXJzZVRlbXBsYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPExheW91dFRlbXBsYXRlPiA9PiB7XG4gICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgZmlsZS50ZXh0KCkudGhlbigoY29udGVudCkgPT4ge1xuICAgICAgICAgIGxldCB0ZW1wbGF0ZTogU2VyaWFsTGF5b3V0VGVtcGxhdGU7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0KCdMYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsLkVSUk9SLlBBUlNFJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKCduYW1lJyBpbiB0ZW1wbGF0ZSAmJiAnZGVzY3JpcHRpb24nIGluIHRlbXBsYXRlICYmICdjYXJkcycgaW4gdGVtcGxhdGUgJiYgJ3ZlcnNpb24nIGluIHRlbXBsYXRlKSB8fFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGVtcGxhdGUpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMobW9ja1NlcmlhbExheW91dFRlbXBsYXRlKS5sZW5ndGhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0KCdMYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsLkVSUk9SLlRFTVBMQVRFX0lOVkFMSUQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGVtcGxhdGUubmFtZSB8fCAhRGFzaGJvYXJkTGF5b3V0TmFtZVBhdHRlcm4udGVzdCh0ZW1wbGF0ZS5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHQoJ0xheW91dFRlbXBsYXRlVXBsb2FkTW9kYWwuRVJST1IuTkFNRV9JTlZBTElEJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGVtcGxhdGUuZGVzY3JpcHRpb24gfHxcbiAgICAgICAgICAgICFMYXlvdXRUZW1wbGF0ZURlc2NyaXB0aW9uUGF0dGVybi50ZXN0KHRlbXBsYXRlLmRlc2NyaXB0aW9uKSB8fFxuICAgICAgICAgICAgdGVtcGxhdGUuZGVzY3JpcHRpb24ubGVuZ3RoID4gTEFZT1VUX1RFTVBMQVRFX0RFU0NSSVBUSU9OX1dPUkRfTElNSVRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0KCdMYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsLkVSUk9SLkRFU0NSSVBUSU9OX0lOVkFMSUQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXN0b21UZW1wbGF0ZXMuc29tZSgodikgPT4gdi5uYW1lID09PSB0ZW1wbGF0ZS5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHQoJ0xheW91dFRlbXBsYXRlVXBsb2FkTW9kYWwuRVJST1IuTkFNRV9UQUtFTicsIHsgbmFtZTogdGVtcGxhdGUubmFtZSB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZS5jYXJkcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0KCdMYXlvdXRUZW1wbGF0ZVVwbG9hZE1vZGFsLkVSUk9SLkNPTkZJR19JTlZBTElEJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRDb25maWcgb2YgdGVtcGxhdGUuY2FyZHMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY2FyZENvbmZpZykubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhtb2NrU2VyaWFsQ2FyZENvbmZpZykubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIGNhcmRDb25maWcubmFtZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICFnZXREYXNoYm9hcmRDYXJkcygpXG4gICAgICAgICAgICAgICAgLm1hcCgoYykgPT4gYy5jb21wb25lbnQubmFtZSlcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoY2FyZENvbmZpZy5uYW1lKSB8fFxuICAgICAgICAgICAgICBjYXJkQ29uZmlnLnNwYW4gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBjYXJkQ29uZmlnLnByb3BzID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodCgnTGF5b3V0VGVtcGxhdGVVcGxvYWRNb2RhbC5FUlJPUi5DT05GSUdfSU5WQUxJRCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEodGVtcGxhdGUudmVyc2lvbiBpbiBMYXlvdXRUZW1wbGF0ZVZlcnNpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodCgnTGF5b3V0VGVtcGxhdGVVcGxvYWRNb2RhbC5FUlJPUi5WRVJTSU9OX0lOVkFMSUQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFsbCB1cGxvYWRlZCB0ZW1wbGF0ZXMgYXJlIHVzZXItc3VibWl0dGVkXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRlbXBsYXRlLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGVtcGxhdGUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB2ZXJzaW9uOiB0ZW1wbGF0ZS52ZXJzaW9uLFxuICAgICAgICAgICAgY2FyZHM6IHRlbXBsYXRlLmNhcmRzLFxuICAgICAgICAgICAgdmVuZG9yOiBMYXlvdXRUZW1wbGF0ZVZlbmRvci5VU0VSLFxuICAgICAgICAgIH0gYXMgTGF5b3V0VGVtcGxhdGU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW3QsIGN1c3RvbVRlbXBsYXRlc11cbiAgKTtcblxuICBjb25zdCByZXNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXROdW1PZkZpbGVzKDApO1xuICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gIH0sIFtzZXROdW1PZkZpbGVzLCBzZXRVcGxvYWRpbmddKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldj86IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICBldiAmJiBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmICh1cGxvYWRpbmcpIHtcbiAgICAgICAgYWJvcnRSZWYuY3VycmVudCAmJiBhYm9ydFJlZi5jdXJyZW50LmNsaWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldCgpO1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdXBsb2FkaW5nLCByZXNldCwgb25DbG9zZV1cbiAgKTtcblxuICBjb25zdCBvbkZpbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBmaWxlVXBsb2FkczogRlVwbG9hZFtdLFxuICAgICAgeyBnZXRQcm9ncmVzc1VwZGF0ZUNhbGxiYWNrOiBfZ2V0UHJvZ3Jlc3NVcGRhdGVDYWxsYmFjaywgb25TaW5nbGVTdWNjZXNzLCBvblNpbmdsZUZhaWx1cmUgfTogVXBsb2FkQ2FsbGJhY2tzXG4gICAgKSA9PiB7XG4gICAgICBzZXRVcGxvYWRpbmcodHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHRhc2tzOiBPYnNlcnZhYmxlPFNlcmlhbExheW91dFRlbXBsYXRlIHwgbnVsbD5bXSA9IFtdO1xuXG4gICAgICBmaWxlVXBsb2Fkcy5mb3JFYWNoKChmaWxlVXBsb2FkKSA9PiB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgdmFsaWRhdGVQYXJzZVRlbXBsYXRlKGZpbGVVcGxvYWQuZmlsZSkucGlwZShcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBjb25jYXRNYXAoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGFzaGJvYXJkQ29uZmlnQ3JlYXRlVGVtcGxhdGVJbnRlbnQodGVtcGxhdGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXJkTGV2ZWwgPSBzbWFsbGVzdEZlYXR1cmVMZXZlbCh0ZW1wbGF0ZS5jYXJkcyk7XG4gICAgICAgICAgICAgICAgaWYgKGNhcmRMZXZlbCA8PSBGZWF0dXJlTGV2ZWwuQkVUQSkge1xuICAgICAgICAgICAgICAgICAgb25TaW5nbGVTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICBmaWxlVXBsb2FkLmZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29tcG9uZW50PVwicFwiIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tcGYtZ2xvYmFsLS13YXJuaW5nLWNvbG9yLS0yMDApJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBXYXJuaW5nOiBUbyBzZWUgdGhpcyB0ZW1wbGF0ZSBpbiB0aGUgdGVtcGxhdGUgcGlja2VyLCBtYWtlIHN1cmUgdGhlIENyeW9zdGF0IEZlYXR1cmUgTGV2ZWwgaXMgc2V0XG4gICAgICAgICAgICAgICAgICAgICAgdG8gQkVUQS5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb25TaW5nbGVTdWNjZXNzKGZpbGVVcGxvYWQuZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gdGVtcGxhdGUgbmFtZSBhbHJlYWR5IHRha2VuIGZyb20gcHJldmlvdXMgdXBsb2FkXG4gICAgICAgICAgICAgICAgb25TaW5nbGVGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgZmlsZVVwbG9hZC5maWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBuZXcgRXJyb3IodCgnTGF5b3V0VGVtcGxhdGVVcGxvYWRNb2RhbC5FUlJPUi5EVVBMSUNBVEVfVVBMT0FEJywgeyBuYW1lOiB0ZW1wbGF0ZS5uYW1lIH0pKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgICBvblNpbmdsZUZhaWx1cmUoZmlsZVVwbG9hZC5maWxlLm5hbWUsIGVycik7XG4gICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgZm9ya0pvaW4odGFza3MpXG4gICAgICAgICAgLnBpcGUoZGVmYXVsdElmRW1wdHkoW251bGxdKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChva3MpID0+IHtcbiAgICAgICAgICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRBbGxPa3Mob2tzLmV2ZXJ5KChvKSA9PiBvICE9PSBudWxsKSk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZExheW91dHMgPSBva3MuZmlsdGVyKChvKSA9PiBvICE9PSBudWxsKSBhcyBMYXlvdXRUZW1wbGF0ZVtdO1xuICAgICAgICAgICAgaWYgKHZhbGlkTGF5b3V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkVGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB2YWxpZExheW91dHNbMF0sXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdVc2VyLXN1Ym1pdHRlZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FkZFN1YnNjcmlwdGlvbiwgZGlzcGF0Y2gsIHQsIHZhbGlkYXRlUGFyc2VUZW1wbGF0ZSwgc2V0VXBsb2FkaW5nLCBzZXRTZWxlY3RlZFRlbXBsYXRlLCBzZXRBbGxPa3NdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN1Ym1pdFJlZi5jdXJyZW50ICYmIHN1Ym1pdFJlZi5jdXJyZW50LmNsaWNrKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkZpbGVzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVVcGxvYWRzOiBGVXBsb2FkW10pID0+IHtcbiAgICAgIHNldEFsbE9rcyghZmlsZVVwbG9hZHMuc29tZSgoZikgPT4gIWYucHJvZ3Jlc3MgfHwgZi5wcm9ncmVzcy5wcm9ncmVzc1ZhcmlhbnQgIT09ICdzdWNjZXNzJykpO1xuICAgICAgc2V0TnVtT2ZGaWxlcyhmaWxlVXBsb2Fkcy5sZW5ndGgpO1xuICAgIH0sXG4gICAgW3NldE51bU9mRmlsZXMsIHNldEFsbE9rc11cbiAgKTtcblxuICBjb25zdCBzdWJtaXRCdXR0b25Mb2FkaW5nUHJvcHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBzcGlubmVyQXJpYVZhbHVlVGV4dDogdCgnU1VCTUlUVElORycsIHsgbnM6ICdjb21tb24nIH0pLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnc3VibWl0dGluZy1sYXlvdXQtdGVtcGxhdGVzJyxcbiAgICAgICAgaXNMb2FkaW5nOiB1cGxvYWRpbmcsXG4gICAgICB9IGFzIExvYWRpbmdQcm9wc1R5cGUpLFxuICAgIFt0LCB1cGxvYWRpbmddXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgaXNPcGVuPXtwcm9wcy52aXNpYmxlfVxuICAgICAgdmFyaWFudD17TW9kYWxWYXJpYW50LmxhcmdlfVxuICAgICAgc2hvd0Nsb3NlPXt0cnVlfVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICB0aXRsZT17dCgnTGF5b3V0VGVtcGxhdGVVcGxvYWRNb2RhbC5USVRMRScpfVxuICAgICAgZGVzY3JpcHRpb249e3QoYExheW91dFRlbXBsYXRlVXBsb2FkTW9kYWwuREVTQ1JJUFRJT05gKX1cbiAgICAgIGhlbHA9e1xuICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgIGhlYWRlckNvbnRlbnQ9ezxkaXY+e3QoJ1dIQVRTX1RISVMnLCB7IG5zOiAnY29tbW9uJyB9KX08L2Rpdj59XG4gICAgICAgICAgYm9keUNvbnRlbnQ9ezxkaXY+e3QoYExheW91dFRlbXBsYXRlVXBsb2FkTW9kYWwuSEVMUC5DT05URU5UYCl9PC9kaXY+fVxuICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICA+XG4gICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwicGxhaW5cIiBhcmlhLWxhYmVsPXt0KCdIRUxQJywgeyBuczogJ2NvbW1vbicgfSl9PlxuICAgICAgICAgICAgPEhlbHBJY29uIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgIH1cbiAgICA+XG4gICAgICA8Rm9ybT5cbiAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD1cIkpTT04gRmlsZVwiIGlzUmVxdWlyZWQgZmllbGRJZD1cImZpbGVcIj5cbiAgICAgICAgICA8TXVsdGlGaWxlVXBsb2FkXG4gICAgICAgICAgICBzdWJtaXRSZWY9e3N1Ym1pdFJlZn1cbiAgICAgICAgICAgIGFib3J0UmVmPXthYm9ydFJlZn1cbiAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nfVxuICAgICAgICAgICAgZHJvcFpvbmVBY2NlcHRzPXtbJ2FwcGxpY2F0aW9uL2pzb24nXX1cbiAgICAgICAgICAgIGRpc3BsYXlBY2NlcHRzPXtbJ0pTT04nXX1cbiAgICAgICAgICAgIG9uRmlsZVN1Ym1pdD17b25GaWxlU3VibWl0fVxuICAgICAgICAgICAgb25GaWxlc0NoYW5nZT17b25GaWxlc0NoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPEFjdGlvbkdyb3VwPlxuICAgICAgICAgIHthbGxPa3MgJiYgbnVtT2ZGaWxlcyA/IChcbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+XG4gICAgICAgICAgICAgIHt0KCdDTE9TRScsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9eyFudW1PZkZpbGVzIHx8IHVwbG9hZGluZ31cbiAgICAgICAgICAgICAgICB7Li4uc3VibWl0QnV0dG9uTG9hZGluZ1Byb3BzfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoJ1NVQk1JVCcsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwibGlua1wiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT5cbiAgICAgICAgICAgICAgICB7dCgnQ0FOQ0VMJywgeyBuczogJ2NvbW1vbicgfSl9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICAgIDwvRm9ybT5cbiAgICA8L01vZGFsPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgRGVsZXRlV2FybmluZ01vZGFsIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nTW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdVdGlscyc7XG5pbXBvcnQge1xuICBkYXNoYm9hcmRDb25maWdDcmVhdGVMYXlvdXRJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ0RlbGV0ZUxheW91dEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnRmF2b3JpdGVMYXlvdXRJbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ1JlcGxhY2VMYXlvdXRJbnRlbnQsXG4gIFJvb3RTdGF0ZSxcbiAgU3RhdGVEaXNwYXRjaCxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgRGl2aWRlcixcbiAgRHJvcGRvd24gYXMgUEY0RHJvcGRvd24sXG4gIERyb3Bkb3duSXRlbSBhcyBQRjREcm9wZG93bkl0ZW0sXG4gIERyb3Bkb3duVG9nZ2xlLFxuICBEcm9wZG93blRvZ2dsZUFjdGlvbixcbiAgTWVudSxcbiAgTWVudUNvbnRlbnQsXG4gIE1lbnVGb290ZXIsXG4gIE1lbnVHcm91cCxcbiAgTWVudUl0ZW0sXG4gIE1lbnVJdGVtQWN0aW9uLFxuICBNZW51TGlzdCxcbiAgTWVudVRvZ2dsZSxcbiAgVG9vbGJhcixcbiAgVG9vbGJhckNvbnRlbnQsXG4gIFRvb2xiYXJHcm91cCxcbiAgVG9vbGJhckl0ZW0sXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRHJvcGRvd24sIERyb3Bkb3duSXRlbSwgRHJvcGRvd25MaXN0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZS9kaXN0L2pzL25leHQnO1xuaW1wb3J0IHtcbiAgRWxsaXBzaXNWSWNvbixcbiAgRmlsZUljb24sXG4gIFBlbmNpbEFsdEljb24sXG4gIFBmaWNvblRlbXBsYXRlSWNvbixcbiAgUGx1c0NpcmNsZUljb24sXG4gIFRyYXNoSWNvbixcbiAgVXBsb2FkSWNvbixcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBBZGRDYXJkIH0gZnJvbSAnLi9BZGRDYXJkJztcbmltcG9ydCB7IEJsYW5rTGF5b3V0IH0gZnJvbSAnLi9jcnlvc3RhdC1kYXNoYm9hcmQtdGVtcGxhdGVzJztcbmltcG9ydCB7XG4gIERhc2hib2FyZExheW91dCxcbiAgREVGQVVMVF9EQVNIQk9BUkRfTkFNRSxcbiAgZ2V0VW5pcXVlSW5jcmVtZW50aW5nTmFtZSxcbiAgTGF5b3V0VGVtcGxhdGVDb250ZXh0LFxuICBTZWxlY3RlZExheW91dFRlbXBsYXRlLFxufSBmcm9tICcuL2Rhc2hib2FyZC11dGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbCB9IGZyb20gJy4vRGFzaGJvYXJkTGF5b3V0Q3JlYXRlTW9kYWwnO1xuaW1wb3J0IHsgRGFzaGJvYXJkTGF5b3V0U2V0QXNUZW1wbGF0ZU1vZGFsIH0gZnJvbSAnLi9EYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWwnO1xuaW1wb3J0IHsgTGF5b3V0VGVtcGxhdGVVcGxvYWRNb2RhbCB9IGZyb20gJy4vTGF5b3V0VGVtcGxhdGVVcGxvYWRNb2RhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkTGF5b3V0VG9vbGJhclByb3BzIHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmNvbnN0IERlZmF1bHRTZWxlY3RlZFRlbXBsYXRlOiBTZWxlY3RlZExheW91dFRlbXBsYXRlID0ge1xuICB0ZW1wbGF0ZTogQmxhbmtMYXlvdXQsXG4gIGNhdGVnb3J5OiAnU3VnZ2VzdGVkJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRMYXlvdXRUb29sYmFyOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxEYXNoYm9hcmRMYXlvdXRUb29sYmFyUHJvcHM+ID0gKF9wcm9wcykgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoPFN0YXRlRGlzcGF0Y2g+KCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBkYXNoYm9hcmRDb25maWdzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLmRhc2hib2FyZENvbmZpZ3MpO1xuXG4gIGNvbnN0IFtzZWxlY3RlZFRlbXBsYXRlLCBzZXRTZWxlY3RlZFRlbXBsYXRlXSA9IFJlYWN0LnVzZVN0YXRlPFNlbGVjdGVkTGF5b3V0VGVtcGxhdGU+KHtcbiAgICB0ZW1wbGF0ZTogQmxhbmtMYXlvdXQsXG4gICAgY2F0ZWdvcnk6ICdTdWdnZXN0ZWQnLFxuICB9KTtcblxuICBjb25zdCBbaXNVcGxvYWRNb2RhbE9wZW4sIHNldElzVXBsb2FkTW9kYWxPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBsYXlvdXQgc2VsZWN0b3JcbiAgY29uc3QgW2lzU2VsZWN0b3JPcGVuLCBzZXRJc1NlbGVjdG9yT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gY3JlYXRlIG5ldyAvIHJlbmFtZSBsYXlvdXQgbW9kYWxcbiAgY29uc3QgW2lzQ3JlYXRlTW9kYWxPcGVuLCBzZXRJc0NyZWF0ZU1vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtvbGROYW1lLCBzZXRPbGROYW1lXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyBjcmVhdGUgbmV3IGxheW91dCBkcm9wZG93blxuICBjb25zdCBbaXNDcmVhdGVEcm9wZG93bk9wZW4sIHNldElzQ3JlYXRlRHJvcGRvd25PcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBkZWxldGUgbGF5b3V0XG4gIGNvbnN0IFtpc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4sIHNldElzRGVsZXRlV2FybmluZ01vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3REZWxldGUsIHNldFNlbGVjdERlbGV0ZV0gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmc+KCcnKTtcblxuICAvLyB0b29sYmFyIGtlYmFiXG4gIGNvbnN0IFtpc0tlYmFiT3Blbiwgc2V0SXNLZWJhYk9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNUZW1wbGF0ZU1vZGFsT3Blbiwgc2V0SXNUZW1wbGF0ZU1vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Rvd25sb2FkTW9kYWwsIHNldElzRG93bmxvYWRNb2RhbF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgZGVsZXRlUmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKTtcblxuICBjb25zdCBjdXJyTGF5b3V0ID0gUmVhY3QudXNlTWVtbygoKSA9PiBkYXNoYm9hcmRDb25maWdzLmxheW91dHNbZGFzaGJvYXJkQ29uZmlncy5jdXJyZW50XSwgW2Rhc2hib2FyZENvbmZpZ3NdKTtcblxuICBjb25zdCBoYW5kbGVVcGxvYWRNb2RhbE9wZW4gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoX2V2OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4ge1xuICAgICAgc2V0SXNVcGxvYWRNb2RhbE9wZW4odHJ1ZSk7XG4gICAgfSxcbiAgICBbc2V0SXNVcGxvYWRNb2RhbE9wZW5dXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVXBsb2FkTW9kYWxDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc1VwbG9hZE1vZGFsT3BlbihmYWxzZSk7XG4gIH0sIFtzZXRJc1VwbG9hZE1vZGFsT3Blbl0pO1xuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZU1vZGFsT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfZXY6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICBzZXRPbGROYW1lKHVuZGVmaW5lZCk7XG4gICAgICBzZXRJc0NyZWF0ZU1vZGFsT3Blbih0cnVlKTtcbiAgICAgIHNldElzU2VsZWN0b3JPcGVuKGZhbHNlKTtcbiAgICAgIHNldFNlbGVjdGVkVGVtcGxhdGUoRGVmYXVsdFNlbGVjdGVkVGVtcGxhdGUpO1xuICAgIH0sXG4gICAgW3NldE9sZE5hbWUsIHNldElzQ3JlYXRlTW9kYWxPcGVuLCBzZXRJc1NlbGVjdG9yT3Blbl1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGVNb2RhbENsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzQ3JlYXRlTW9kYWxPcGVuKGZhbHNlKTtcbiAgICBzZXRTZWxlY3RlZFRlbXBsYXRlKERlZmF1bHRTZWxlY3RlZFRlbXBsYXRlKTtcbiAgfSwgW3NldElzQ3JlYXRlTW9kYWxPcGVuLCBzZXRTZWxlY3RlZFRlbXBsYXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlV2FybmluZ01vZGFsT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfZXY6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+LCBsYXlvdXQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VsZWN0RGVsZXRlKGxheW91dCk7XG4gICAgICBzZXRJc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4odHJ1ZSk7XG4gICAgfSxcbiAgICBbc2V0U2VsZWN0RGVsZXRlLCBzZXRJc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW5dXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlV2FybmluZ01vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNEZWxldGVXYXJuaW5nTW9kYWxPcGVuKGZhbHNlKTtcbiAgICBzZXRTZWxlY3REZWxldGUoJycpO1xuICB9LCBbc2V0SXNEZWxldGVXYXJuaW5nTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlTGF5b3V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0RlbGV0ZUxheW91dEludGVudChzZWxlY3REZWxldGUpKTtcbiAgICBkaXNwYXRjaChkYXNoYm9hcmRDb25maWdSZXBsYWNlTGF5b3V0SW50ZW50KERFRkFVTFRfREFTSEJPQVJEX05BTUUpKTtcbiAgICBzZXRTZWxlY3REZWxldGUoJycpO1xuICB9LCBbZGlzcGF0Y2gsIHNldFNlbGVjdERlbGV0ZSwgc2VsZWN0RGVsZXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQnV0dG9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PiwgbGF5b3V0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChjb250ZXh0LnNldHRpbmdzLmRlbGV0aW9uRGlhbG9nc0VuYWJsZWRGb3IoRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlRGFzaGJvYXJkTGF5b3V0KSkge1xuICAgICAgICBoYW5kbGVEZWxldGVXYXJuaW5nTW9kYWxPcGVuKGV2LCBsYXlvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2goZGFzaGJvYXJkQ29uZmlnRGVsZXRlTGF5b3V0SW50ZW50KGxheW91dCkpO1xuICAgICAgICBkaXNwYXRjaChkYXNoYm9hcmRDb25maWdSZXBsYWNlTGF5b3V0SW50ZW50KERFRkFVTFRfREFTSEJPQVJEX05BTUUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWxldGVSZWYuY3VycmVudCkgZGVsZXRlUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgIH0sXG4gICAgW2NvbnRleHQuc2V0dGluZ3MsIGRpc3BhdGNoLCBoYW5kbGVEZWxldGVXYXJuaW5nTW9kYWxPcGVuXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVJlbmFtZUxheW91dCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChvbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldE9sZE5hbWUob2xkTmFtZSk7XG4gICAgICBzZXRJc0NyZWF0ZU1vZGFsT3Blbih0cnVlKTtcbiAgICB9LFxuICAgIFtzZXRPbGROYW1lLCBzZXRJc0NyZWF0ZU1vZGFsT3Blbl1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVGYXZvcml0ZUxheW91dCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChsYXlvdXROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0Zhdm9yaXRlTGF5b3V0SW50ZW50KGxheW91dE5hbWUpKTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaF1cbiAgKTtcblxuICBjb25zdCBvbkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGFzaGJvYXJkLWxheW91dC1kcm9wZG93bi10b2dnbGUnKTtcbiAgICBpZiAoZWxlbWVudCkgZWxlbWVudC5mb2N1cygpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25MYXlvdXRTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoX2V2OiBSZWFjdC5Nb3VzZUV2ZW50PEVsZW1lbnQsIE1vdXNlRXZlbnQ+IHwgdW5kZWZpbmVkLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBkYXNoYm9hcmRDb25maWdzLmxheW91dHMuZmluZCgobCkgPT4gbC5uYW1lID09PSBpdGVtSWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ1JlcGxhY2VMYXlvdXRJbnRlbnQoZm91bmQubmFtZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbGF5b3V0IG5vdCBmb3VuZCAnICsgaXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIHNldElzU2VsZWN0b3JPcGVuKGZhbHNlKTtcbiAgICAgIG9uRm9jdXMoKTtcbiAgICB9LFxuICAgIFtkaXNwYXRjaCwgc2V0SXNTZWxlY3Rvck9wZW4sIG9uRm9jdXMsIGRhc2hib2FyZENvbmZpZ3NdXG4gICk7XG5cbiAgY29uc3Qgb25BY3Rpb25DbGljayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldjogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4sIGl0ZW1JZDogc3RyaW5nLCBhY3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudCB0aGUgZHJvcGRvd24gZnJvbSBjbG9zaW5nXG4gICAgICBpZiAoYWN0aW9uSWQgPT09ICdyZW5hbWUnKSB7XG4gICAgICAgIGhhbmRsZVJlbmFtZUxheW91dChpdGVtSWQpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb25JZCA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgaGFuZGxlRGVsZXRlQnV0dG9uKGV2LCBpdGVtSWQpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb25JZCA9PT0gJ2ZhdicpIHtcbiAgICAgICAgaGFuZGxlRmF2b3JpdGVMYXlvdXQoaXRlbUlkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVSZW5hbWVMYXlvdXQsIGhhbmRsZURlbGV0ZUJ1dHRvbiwgaGFuZGxlRmF2b3JpdGVMYXlvdXRdXG4gICk7XG5cbiAgY29uc3Qgb25Ub2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoX2V2OiBSZWFjdC5Nb3VzZUV2ZW50PEVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICBzZXRJc1NlbGVjdG9yT3Blbigob3BlbikgPT4gIW9wZW4pO1xuICAgIH0sXG4gICAgW3NldElzU2VsZWN0b3JPcGVuXVxuICApO1xuXG4gIGNvbnN0IG9uQ3JlYXRlRHJvcGRvd25TZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNDcmVhdGVEcm9wZG93bk9wZW4oZmFsc2UpO1xuICB9LCBbc2V0SXNDcmVhdGVEcm9wZG93bk9wZW5dKTtcblxuICBjb25zdCBjcmVhdGVCbGFua0xheW91dCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuYW1lID0gZ2V0VW5pcXVlSW5jcmVtZW50aW5nTmFtZShcbiAgICAgICdDdXN0b20nLFxuICAgICAgZGFzaGJvYXJkQ29uZmlncy5sYXlvdXRzLm1hcCgobCkgPT4gbC5uYW1lKVxuICAgICk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZTogRGFzaGJvYXJkTGF5b3V0ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGNhcmRzOiBbXSxcbiAgICAgIGZhdm9yaXRlOiBmYWxzZSxcbiAgICB9O1xuICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0NyZWF0ZUxheW91dEludGVudCh0ZW1wbGF0ZSkpO1xuICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ1JlcGxhY2VMYXlvdXRJbnRlbnQobmFtZSkpO1xuICAgIHNldElzQ3JlYXRlRHJvcGRvd25PcGVuKGZhbHNlKTtcbiAgfSwgW2Rpc3BhdGNoLCBkYXNoYm9hcmRDb25maWdzLCBzZXRJc0NyZWF0ZURyb3Bkb3duT3Blbl0pO1xuXG4gIGNvbnN0IGNyZWF0ZVRlbXBsYXRlRHJvcGRvd25JdGVtcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgPFBGNERyb3Bkb3duSXRlbSBrZXk9XCJhY3Rpb25cIiBvbkNsaWNrPXtjcmVhdGVCbGFua0xheW91dH0gYXV0b0ZvY3VzIGljb249ezxGaWxlSWNvbiAvPn0+XG4gICAgICAgIEJsYW5rIExheW91dFxuICAgICAgPC9QRjREcm9wZG93bkl0ZW0+LFxuICAgICAgPFBGNERyb3Bkb3duSXRlbSBrZXk9XCJ0ZW1wbGF0ZVwiIG9uQ2xpY2s9e2hhbmRsZUNyZWF0ZU1vZGFsT3Blbn0gaWNvbj17PFBmaWNvblRlbXBsYXRlSWNvbiAvPn0+XG4gICAgICAgIENob29zZSBUZW1wbGF0ZVxuICAgICAgPC9QRjREcm9wZG93bkl0ZW0+LFxuICAgICAgPFBGNERyb3Bkb3duSXRlbSBrZXk9XCJ1cGxvYWRcIiBvbkNsaWNrPXtoYW5kbGVVcGxvYWRNb2RhbE9wZW59IGljb249ezxVcGxvYWRJY29uIC8+fT5cbiAgICAgICAgVXBsb2FkIFRlbXBsYXRlXG4gICAgICA8L1BGNERyb3Bkb3duSXRlbT4sXG4gICAgXSxcbiAgICBbY3JlYXRlQmxhbmtMYXlvdXQsIGhhbmRsZUNyZWF0ZU1vZGFsT3BlbiwgaGFuZGxlVXBsb2FkTW9kYWxPcGVuXVxuICApO1xuXG4gIGNvbnN0IGNyZWF0ZVRlbXBsYXRlQnV0dG9uID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8UEY0RHJvcGRvd25cbiAgICAgICAgb25TZWxlY3Q9e29uQ3JlYXRlRHJvcGRvd25TZWxlY3R9XG4gICAgICAgIHRvZ2dsZT17XG4gICAgICAgICAgPERyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICBpZD1cImRhc2hib2FyZC1sYXlvdXQtY3JlYXRlLWRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICBzcGxpdEJ1dHRvbkl0ZW1zPXtbXG4gICAgICAgICAgICAgIDxEcm9wZG93blRvZ2dsZUFjdGlvblxuICAgICAgICAgICAgICAgIGtleT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KF9lKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjcmVhdGVCbGFua0xheW91dCgpO1xuICAgICAgICAgICAgICAgICAgc2V0SXNTZWxlY3Rvck9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAgPFBsdXNDaXJjbGVJY29uIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAndmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLXNtKScgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHt0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLk5FV19MQVlPVVQnKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25Ub2dnbGVBY3Rpb24+LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHRvZ2dsZVZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIHNwbGl0QnV0dG9uVmFyaWFudD1cImFjdGlvblwiXG4gICAgICAgICAgICBvblRvZ2dsZT17KG9wZW4pID0+IHNldElzQ3JlYXRlRHJvcGRvd25PcGVuKG9wZW4pfVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAgaXNPcGVuPXtpc0NyZWF0ZURyb3Bkb3duT3Blbn1cbiAgICAgICAgZHJvcGRvd25JdGVtcz17Y3JlYXRlVGVtcGxhdGVEcm9wZG93bkl0ZW1zfVxuICAgICAgLz5cbiAgICApLFxuICAgIFtcbiAgICAgIHQsXG4gICAgICBjcmVhdGVCbGFua0xheW91dCxcbiAgICAgIHNldElzU2VsZWN0b3JPcGVuLFxuICAgICAgb25DcmVhdGVEcm9wZG93blNlbGVjdCxcbiAgICAgIHNldElzQ3JlYXRlRHJvcGRvd25PcGVuLFxuICAgICAgaXNDcmVhdGVEcm9wZG93bk9wZW4sXG4gICAgICBjcmVhdGVUZW1wbGF0ZURyb3Bkb3duSXRlbXMsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IHJlbmFtZUJ1dHRvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBrZXk9XCJyZW5hbWVcIlxuICAgICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgICBpc0FyaWFEaXNhYmxlZD17Y3VyckxheW91dC5uYW1lID09PSBERUZBVUxUX0RBU0hCT0FSRF9OQU1FfVxuICAgICAgICBhcmlhLWxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLlJFTkFNRS5MQUJFTCcpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVSZW5hbWVMYXlvdXQoY3VyckxheW91dC5uYW1lKX1cbiAgICAgICAgaWNvbj17PFBlbmNpbEFsdEljb24gLz59XG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImRhc2hib2FyZC1yZW5hbWUtYnRuXCJcbiAgICAgIC8+XG4gICAgKSxcbiAgICBbdCwgaGFuZGxlUmVuYW1lTGF5b3V0LCBjdXJyTGF5b3V0Lm5hbWVdXG4gICk7XG5cbiAgY29uc3QgZGVsZXRlQnV0dG9uID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8QnV0dG9uXG4gICAgICAgIHJlZj17ZGVsZXRlUmVmfVxuICAgICAgICBrZXk9XCJkZWxldGVcIlxuICAgICAgICB2YXJpYW50PVwiZGFuZ2VyXCJcbiAgICAgICAgaXNBcmlhRGlzYWJsZWQ9e2N1cnJMYXlvdXQubmFtZSA9PT0gREVGQVVMVF9EQVNIQk9BUkRfTkFNRX1cbiAgICAgICAgYXJpYS1sYWJlbD17dCgnRGFzaGJvYXJkTGF5b3V0VG9vbGJhci5ERUxFVEUuTEFCRUwnKX1cbiAgICAgICAgb25DbGljaz17KGV2KSA9PiBoYW5kbGVEZWxldGVCdXR0b24oZXYsIGN1cnJMYXlvdXQubmFtZSl9XG4gICAgICAgIGljb249ezxUcmFzaEljb24gLz59XG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImRhc2hib2FyZC1kZWxldGUtYnRuXCJcbiAgICAgID5cbiAgICAgICAge3QoJ0RFTEVURScsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgPC9CdXR0b24+XG4gICAgKSxcbiAgICBbdCwgaGFuZGxlRGVsZXRlQnV0dG9uLCBjdXJyTGF5b3V0Lm5hbWVdXG4gICk7XG5cbiAgY29uc3QgZHJvcGRvd25JdGVtcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJvcGRvd25MaXN0PlxuICAgICAgICA8RHJvcGRvd25JdGVtIGtleT1cInRlbXBsYXRlXCIgaXRlbUlkPXsndGVtcGxhdGUnfT5cbiAgICAgICAgICB7dCgnRGFzaGJvYXJkTGF5b3V0VG9vbGJhci5TRVRfQVNfVEVNUExBVEUnKX1cbiAgICAgICAgPC9Ecm9wZG93bkl0ZW0+XG4gICAgICAgIDxEcm9wZG93bkl0ZW0ga2V5PVwiZG93bmxvYWRcIiBpdGVtSWQ9eydkb3dubG9hZCd9PlxuICAgICAgICAgIHt0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLkRPV05MT0FEX0FTX1RFTVBMQVRFJyl9XG4gICAgICAgIDwvRHJvcGRvd25JdGVtPlxuICAgICAgPC9Ecm9wZG93bkxpc3Q+XG4gICAgKTtcbiAgfSwgW3RdKTtcblxuICBjb25zdCBoYW5kbGVEb3dubG9hZFRlbXBsYXRlTW9kYWxPcGVuID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzRG93bmxvYWRNb2RhbCh0cnVlKTtcbiAgICBzZXRJc1RlbXBsYXRlTW9kYWxPcGVuKHRydWUpO1xuICB9LCBbc2V0SXNEb3dubG9hZE1vZGFsLCBzZXRJc1RlbXBsYXRlTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlU2V0QXNUZW1wbGF0ZU1vZGFsT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0Rvd25sb2FkTW9kYWwoZmFsc2UpO1xuICAgIHNldElzVGVtcGxhdGVNb2RhbE9wZW4odHJ1ZSk7XG4gIH0sIFtzZXRJc1RlbXBsYXRlTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVNb2RhbENsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzVGVtcGxhdGVNb2RhbE9wZW4oZmFsc2UpO1xuICB9LCBbc2V0SXNUZW1wbGF0ZU1vZGFsT3Blbl0pO1xuXG4gIGNvbnN0IG9uS2ViYWJTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoX2V2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEVsZW1lbnQsIE1vdXNlRXZlbnQ+IHwgdW5kZWZpbmVkLCBpdGVtSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgc3dpdGNoIChpdGVtSWQpIHtcbiAgICAgICAgY2FzZSAndGVtcGxhdGUnOlxuICAgICAgICAgIGhhbmRsZVNldEFzVGVtcGxhdGVNb2RhbE9wZW4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZG93bmxvYWQnOlxuICAgICAgICAgIGhhbmRsZURvd25sb2FkVGVtcGxhdGVNb2RhbE9wZW4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd1bmtub3duIGl0ZW0gaWQgJyArIGl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBzZXRJc0tlYmFiT3BlbihmYWxzZSk7XG4gICAgfSxcbiAgICBbaGFuZGxlU2V0QXNUZW1wbGF0ZU1vZGFsT3BlbiwgaGFuZGxlRG93bmxvYWRUZW1wbGF0ZU1vZGFsT3Blbiwgc2V0SXNLZWJhYk9wZW5dXG4gICk7XG5cbiAgY29uc3Qga2ViYWJEcm9wZG93biA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPERyb3Bkb3duXG4gICAgICAgIGlzT3Blbj17aXNLZWJhYk9wZW59XG4gICAgICAgIG9uU2VsZWN0PXtvbktlYmFiU2VsZWN0fVxuICAgICAgICBtaW5XaWR0aD1cIjEyZW1cIlxuICAgICAgICBvbk9wZW5DaGFuZ2U9eyhpc09wZW4pID0+IHtcbiAgICAgICAgICBzZXRJc0tlYmFiT3Blbihpc09wZW4pO1xuICAgICAgICB9fVxuICAgICAgICB0b2dnbGU9eyh0b2dnbGVSZWYpID0+IChcbiAgICAgICAgICA8TWVudVRvZ2dsZVxuICAgICAgICAgICAgcmVmPXt0b2dnbGVSZWZ9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLk1FTlUuTEFCRUwnKX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0tlYmFiT3BlbighaXNLZWJhYk9wZW4pfVxuICAgICAgICAgICAgaXNFeHBhbmRlZD17aXNLZWJhYk9wZW59XG4gICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJsYXlvdXQtdG9vbGJhci1rZWJhYi1idG5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxFbGxpcHNpc1ZJY29uIC8+XG4gICAgICAgICAgPC9NZW51VG9nZ2xlPlxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7ZHJvcGRvd25JdGVtc31cbiAgICAgIDwvRHJvcGRvd24+XG4gICAgKSxcbiAgICBbdCwgb25LZWJhYlNlbGVjdCwgc2V0SXNLZWJhYk9wZW4sIGlzS2ViYWJPcGVuLCBkcm9wZG93bkl0ZW1zXVxuICApO1xuXG4gIGNvbnN0IG1lbnVHcm91cHMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAobGFiZWw6IHN0cmluZywgZmF2b3JpdGVHcm91cDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgbGF5b3V0cyA9IGRhc2hib2FyZENvbmZpZ3MubGF5b3V0cy5maWx0ZXIoZmF2b3JpdGVHcm91cCA/IChsOiBEYXNoYm9hcmRMYXlvdXQpID0+IGwuZmF2b3JpdGUgOiAoKSA9PiB0cnVlKTtcbiAgICAgIGlmIChsYXlvdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxNZW51R3JvdXAgbGFiZWw9e2xhYmVsfSBsYWJlbEhlYWRpbmdMZXZlbD1cImgzXCI+XG4gICAgICAgICAgPE1lbnVMaXN0PlxuICAgICAgICAgICAge2xheW91dHMubWFwKChsKSA9PiAoXG4gICAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgIGtleT17bC5uYW1lfVxuICAgICAgICAgICAgICAgIGl0ZW1JZD17bC5uYW1lfVxuICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2wubmFtZSA9PT0gY3VyckxheW91dC5uYW1lfVxuICAgICAgICAgICAgICAgIGlzRmF2b3JpdGVkPXtsLmZhdm9yaXRlfVxuICAgICAgICAgICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPE1lbnVJdGVtQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj17PFBlbmNpbEFsdEljb24gLz59XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uSWQ9XCJyZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2wubmFtZSA9PT0gREVGQVVMVF9EQVNIQk9BUkRfTkFNRX1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLlJFTkFNRS5MQUJFTCcpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8TWVudUl0ZW1BY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8VHJhc2hJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbklkPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtsLm5hbWUgPT09IERFRkFVTFRfREFTSEJPQVJEX05BTUV9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnRGFzaGJvYXJkTGF5b3V0VG9vbGJhci5ERUxFVEUuTEFCRUwnKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtsLm5hbWV9XG4gICAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L01lbnVMaXN0PlxuICAgICAgICA8L01lbnVHcm91cD5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbdCwgY3VyckxheW91dC5uYW1lLCBkYXNoYm9hcmRDb25maWdzLmxheW91dHNdXG4gICk7XG5cbiAgY29uc3Qgb25PcGVuQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF9pc09wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChpc0RlbGV0ZVdhcm5pbmdNb2RhbE9wZW4gfHwgaXNDcmVhdGVNb2RhbE9wZW4gfHwgaXNVcGxvYWRNb2RhbE9wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0SXNTZWxlY3Rvck9wZW4oX2lzT3Blbik7XG4gICAgfSxcbiAgICBbc2V0SXNTZWxlY3Rvck9wZW4sIGlzRGVsZXRlV2FybmluZ01vZGFsT3BlbiwgaXNDcmVhdGVNb2RhbE9wZW4sIGlzVXBsb2FkTW9kYWxPcGVuXVxuICApO1xuXG4gIGNvbnN0IG1lbnVEcm9wZG93biA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RHJvcGRvd25cbiAgICAgICAgaXNPcGVuPXtpc1NlbGVjdG9yT3Blbn1cbiAgICAgICAgb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9XG4gICAgICAgIHRvZ2dsZT17KHRvZ2dsZVJlZikgPT4gKFxuICAgICAgICAgIDxNZW51VG9nZ2xlXG4gICAgICAgICAgICByZWY9e3RvZ2dsZVJlZn1cbiAgICAgICAgICAgIGlkPVwiZGFzaGJvYXJkLWxheW91dC1kcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgb25DbGljaz17b25Ub2dnbGV9XG4gICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJkYXNoYm9hcmQtbGF5b3V0LXNlbGVjdG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y3VyckxheW91dC5uYW1lfVxuICAgICAgICAgIDwvTWVudVRvZ2dsZT5cbiAgICAgICAgKX1cbiAgICAgID5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLk1FTlUuTEFCRUwnKX1cbiAgICAgICAgICBpc1Njcm9sbGFibGVcbiAgICAgICAgICBvblNlbGVjdD17b25MYXlvdXRTZWxlY3R9XG4gICAgICAgICAgb25BY3Rpb25DbGljaz17b25BY3Rpb25DbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIDxNZW51Q29udGVudCBtYXhNZW51SGVpZ2h0PVwiMjEuNWVtXCIgaWQ9XCJkYXNoYm9hcmQtbGF5b3V0LW1lbnUtY29udGVudFwiPlxuICAgICAgICAgICAge21lbnVHcm91cHModCgnRGFzaGJvYXJkTGF5b3V0VG9vbGJhci5NRU5VLkZBVk9SSVRFUycpLCB0cnVlKX1cbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICB7bWVudUdyb3Vwcyh0KCdEYXNoYm9hcmRMYXlvdXRUb29sYmFyLk1FTlUuT1RIRVJTJyksIGZhbHNlKX1cbiAgICAgICAgICA8L01lbnVDb250ZW50PlxuICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgPE1lbnVGb290ZXI+e2NyZWF0ZVRlbXBsYXRlQnV0dG9ufTwvTWVudUZvb3Rlcj5cbiAgICAgICAgPC9NZW51PlxuICAgICAgPC9Ecm9wZG93bj5cbiAgICApO1xuICB9LCBbXG4gICAgdCxcbiAgICBvbkxheW91dFNlbGVjdCxcbiAgICBvbkFjdGlvbkNsaWNrLFxuICAgIG9uT3BlbkNoYW5nZSxcbiAgICBvblRvZ2dsZSxcbiAgICBtZW51R3JvdXBzLFxuICAgIGNyZWF0ZVRlbXBsYXRlQnV0dG9uLFxuICAgIGlzU2VsZWN0b3JPcGVuLFxuICAgIGN1cnJMYXlvdXQubmFtZSxcbiAgXSk7XG5cbiAgY29uc3QgdG9vbGJhckNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRvb2xiYXJDb250ZW50IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiAnMjRweCcgfX0+XG4gICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICA8QWRkQ2FyZCB2YXJpYW50PVwiaWNvbi1idXR0b25cIiAvPlxuICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICA8VG9vbGJhckdyb3VwPlxuICAgICAgICAgIDxUb29sYmFySXRlbSBzcGFjZXI9e3sgZGVmYXVsdDogJ3NwYWNlck5vbmUnIH19PnttZW51RHJvcGRvd259PC9Ub29sYmFySXRlbT5cbiAgICAgICAgICA8VG9vbGJhckl0ZW0+e3JlbmFtZUJ1dHRvbn08L1Rvb2xiYXJJdGVtPlxuICAgICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICAgICAgPFRvb2xiYXJHcm91cCB2YXJpYW50PVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgICAgPFRvb2xiYXJJdGVtPntkZWxldGVCdXR0b259PC9Ub29sYmFySXRlbT5cbiAgICAgICAgICA8VG9vbGJhckl0ZW0+e2tlYmFiRHJvcGRvd259PC9Ub29sYmFySXRlbT5cbiAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICA8L1Rvb2xiYXJDb250ZW50PlxuICAgICk7XG4gIH0sIFttZW51RHJvcGRvd24sIHJlbmFtZUJ1dHRvbiwgZGVsZXRlQnV0dG9uLCBrZWJhYkRyb3Bkb3duXSk7XG5cbiAgY29uc3QgZGVsZXRlV2FybmluZ01vZGFsID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEZWxldGVXYXJuaW5nTW9kYWxcbiAgICAgICAgd2FybmluZ1R5cGU9e0RlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZURhc2hib2FyZExheW91dH1cbiAgICAgICAgdmlzaWJsZT17aXNEZWxldGVXYXJuaW5nTW9kYWxPcGVufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVEZWxldGVXYXJuaW5nTW9kYWxDbG9zZX1cbiAgICAgICAgb25BY2NlcHQ9e2hhbmRsZURlbGV0ZUxheW91dH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSwgW2lzRGVsZXRlV2FybmluZ01vZGFsT3BlbiwgaGFuZGxlRGVsZXRlV2FybmluZ01vZGFsQ2xvc2UsIGhhbmRsZURlbGV0ZUxheW91dF0pO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dFRlbXBsYXRlQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2VsZWN0ZWRUZW1wbGF0ZTogc2VsZWN0ZWRUZW1wbGF0ZSxcbiAgICAgICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZTogc2V0U2VsZWN0ZWRUZW1wbGF0ZSxcbiAgICAgICAgaXNVcGxvYWRNb2RhbE9wZW46IGlzVXBsb2FkTW9kYWxPcGVuLFxuICAgICAgICBzZXRJc1VwbG9hZE1vZGFsT3Blbjogc2V0SXNVcGxvYWRNb2RhbE9wZW4sXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxUb29sYmFyPlxuICAgICAgICB7dG9vbGJhckNvbnRlbnR9XG4gICAgICAgIDxEYXNoYm9hcmRMYXlvdXRDcmVhdGVNb2RhbCB2aXNpYmxlPXtpc0NyZWF0ZU1vZGFsT3Blbn0gb25DbG9zZT17aGFuZGxlQ3JlYXRlTW9kYWxDbG9zZX0gb2xkTmFtZT17b2xkTmFtZX0gLz5cbiAgICAgICAgPExheW91dFRlbXBsYXRlVXBsb2FkTW9kYWwgdmlzaWJsZT17aXNVcGxvYWRNb2RhbE9wZW59IG9uQ2xvc2U9e2hhbmRsZVVwbG9hZE1vZGFsQ2xvc2V9IC8+XG4gICAgICAgIDxEYXNoYm9hcmRMYXlvdXRTZXRBc1RlbXBsYXRlTW9kYWxcbiAgICAgICAgICB2aXNpYmxlPXtpc1RlbXBsYXRlTW9kYWxPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZVRlbXBsYXRlTW9kYWxDbG9zZX1cbiAgICAgICAgICBkb3dubG9hZE1vZGFsPXtpc0Rvd25sb2FkTW9kYWx9XG4gICAgICAgIC8+XG4gICAgICAgIHtkZWxldGVXYXJuaW5nTW9kYWx9XG4gICAgICA8L1Rvb2xiYXI+XG4gICAgPC9MYXlvdXRUZW1wbGF0ZUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQge1xuICBCdWxsc2V5ZSxcbiAgQ2FyZEJvZHksXG4gIERhdGFMaXN0LFxuICBEYXRhTGlzdENlbGwsXG4gIERhdGFMaXN0SXRlbSxcbiAgRGF0YUxpc3RJdGVtQ2VsbHMsXG4gIERhdGFMaXN0SXRlbVJvdyxcbiAgRW1wdHlTdGF0ZSxcbiAgRW1wdHlTdGF0ZUJvZHksXG4gIEVtcHR5U3RhdGVJY29uLFxuICBFbXB0eVN0YXRlUHJpbWFyeSxcbiAgRW1wdHlTdGF0ZVZhcmlhbnQsXG4gIFRpdGxlLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IFdyZW5jaEljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgQ2FyZENvbmZpZywgQ2FyZFZhbGlkYXRpb25SZXN1bHQsIERhc2hib2FyZENhcmRTaXplcywgRGFzaGJvYXJkQ2FyZFR5cGVQcm9wcyB9IGZyb20gJy4vZGFzaGJvYXJkLXV0aWxzJztcbmltcG9ydCB7IERhc2hib2FyZENhcmQgfSBmcm9tICcuL0Rhc2hib2FyZENhcmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQ2FyZFByb3BzIGV4dGVuZHMgRGFzaGJvYXJkQ2FyZFR5cGVQcm9wcyB7XG4gIHZhbGlkYXRpb25SZXN1bHQ6IENhcmRWYWxpZGF0aW9uUmVzdWx0O1xuICBjYXJkQ29uZmlnOiBDYXJkQ29uZmlnO1xufVxuXG4vLyBUT0RPOiBGaXggdGl0bGUgKyBkZXNpZ24gYm9keVxuZXhwb3J0IGNvbnN0IEVycm9yQ2FyZDogUmVhY3QuRkM8RXJyb3JDYXJkUHJvcHM+ID0gKHtcbiAgdmFsaWRhdGlvblJlc3VsdCxcbiAgY2FyZENvbmZpZzogX2NhcmRDb25maWcsXG4gIGRhc2hib2FyZElkLFxuICBhY3Rpb25zLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IHsgZXJyb3JzLCBjYWxsRm9yQWN0aW9uIH0gPSB2YWxpZGF0aW9uUmVzdWx0O1xuXG4gIGNvbnN0IGVycm9yRGVzY3JpcHRpb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERhdGFMaXN0IGlzQ29tcGFjdCBhcmlhLWxhYmVsPXsnQ2FyZCBDb25maWd1cmF0aW9uIEVycm9ycyd9IGNsYXNzTmFtZT17J2NvbmZpZ3VyYXRpb24tZXJyb3ItbGlzdCd9PlxuICAgICAgICB7ZXJyb3JzLm1hcCgoZXJyLCBpZHgpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERhdGFMaXN0SXRlbSBrZXk9e2BlcnJvci1tZXNzYWdlaXRlbS0ke2lkeH1gfT5cbiAgICAgICAgICAgICAgPERhdGFMaXN0SXRlbVJvdz5cbiAgICAgICAgICAgICAgICA8RGF0YUxpc3RJdGVtQ2VsbHNcbiAgICAgICAgICAgICAgICAgIGRhdGFMaXN0Q2VsbHM9e1s8RGF0YUxpc3RDZWxsIGtleT17YGVycm9yLW1lc3NhZ2UtY2VsbC0ke2lkeH1gfT57ZXJyLm1lc3NhZ2V9PC9EYXRhTGlzdENlbGw+XX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0RhdGFMaXN0SXRlbVJvdz5cbiAgICAgICAgICAgIDwvRGF0YUxpc3RJdGVtPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9EYXRhTGlzdD5cbiAgICApO1xuICB9LCBbZXJyb3JzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGFzaGJvYXJkQ2FyZFxuICAgICAgey4uLnByb3BzfVxuICAgICAgaWQ9e2Ake2Rhc2hib2FyZElkfWB9XG4gICAgICBkYXNoYm9hcmRJZD17ZGFzaGJvYXJkSWR9XG4gICAgICBjYXJkU2l6ZXM9e0Vycm9yQ2FyZFNpemVzfVxuICAgICAgaXNDb21wYWN0XG4gICAgICBjYXJkSGVhZGVyPXthY3Rpb25zfVxuICAgID5cbiAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgPEJ1bGxzZXllPlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZhcmlhbnQ9e0VtcHR5U3RhdGVWYXJpYW50LmZ1bGx9PlxuICAgICAgICAgICAgPEVtcHR5U3RhdGVJY29uIGljb249e1dyZW5jaEljb259IC8+XG4gICAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPXsnaDQnfT57dCgnRGFzaGJvYXJkLklOVkFMSURfQ0FSRF9DT05GSUdVUkFUSU9OUycpfTwvVGl0bGU+XG4gICAgICAgICAgICA8RW1wdHlTdGF0ZUJvZHk+e2Vycm9yRGVzY3JpcHRpb259PC9FbXB0eVN0YXRlQm9keT5cbiAgICAgICAgICAgIHtjYWxsRm9yQWN0aW9uID8gPEVtcHR5U3RhdGVQcmltYXJ5PntjYWxsRm9yQWN0aW9ufTwvRW1wdHlTdGF0ZVByaW1hcnk+IDogbnVsbH1cbiAgICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICAgIDwvQnVsbHNleWU+XG4gICAgICA8L0NhcmRCb2R5PlxuICAgIDwvRGFzaGJvYXJkQ2FyZD5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBFcnJvckNhcmRTaXplczogRGFzaGJvYXJkQ2FyZFNpemVzID0ge1xuICBzcGFuOiB7XG4gICAgbWluaW11bTogMixcbiAgICBkZWZhdWx0OiA0LFxuICAgIG1heGltdW06IDEyLFxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgaGVpZ2h0IHJlc2l6aW5nXG4gICAgbWluaW11bTogTnVtYmVyLk5hTixcbiAgICBkZWZhdWx0OiBOdW1iZXIuTmFOLFxuICAgIG1heGltdW06IE51bWJlci5OYU4sXG4gIH0sXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBGZWF0dXJlRmxhZyB9IGZyb20gJ0BhcHAvU2hhcmVkL0ZlYXR1cmVGbGFnL0ZlYXR1cmVGbGFnJztcbmltcG9ydCB7IERhc2hib2FyZENvbmZpZ1N0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvQ29uZmlndXJhdGlvbnMvRGFzaGJvYXJkQ29uZmlnU2xpY2UnO1xuaW1wb3J0IHtcbiAgZGFzaGJvYXJkQ29uZmlnRGVsZXRlQ2FyZEludGVudCxcbiAgZGFzaGJvYXJkQ29uZmlnRmlyc3RSdW5JbnRlbnQsXG4gIGRhc2hib2FyZENvbmZpZ1Jlc2l6ZUNhcmRJbnRlbnQsXG4gIFJvb3RTdGF0ZSxcbiAgU3RhdGVEaXNwYXRjaCxcbn0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0VmlldyB9IGZyb20gJ0BhcHAvVGFyZ2V0Vmlldy9UYXJnZXRWaWV3JztcbmltcG9ydCB7IGdldEZyb21Mb2NhbFN0b3JhZ2UgfSBmcm9tICdAYXBwL3V0aWxzL0xvY2FsU3RvcmFnZSc7XG5pbXBvcnQgeyBHcmlkLCBHcmlkSXRlbSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFkZENhcmQgfSBmcm9tICcuL0FkZENhcmQnO1xuaW1wb3J0IHsgQ2hhcnRDb250ZXh0IH0gZnJvbSAnLi9DaGFydHMvQ2hhcnRDb250ZXh0JztcbmltcG9ydCB7IEpGUk1ldHJpY3NDaGFydENvbnRyb2xsZXIgfSBmcm9tICcuL0NoYXJ0cy9qZnIvSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlcic7XG5pbXBvcnQgeyBNQmVhbk1ldHJpY3NDaGFydENvbnRyb2xsZXIgfSBmcm9tICcuL0NoYXJ0cy9tYmVhbi9NQmVhbk1ldHJpY3NDaGFydENvbnRyb2xsZXInO1xuaW1wb3J0IHsgZ2V0Q2FyZERlc2NyaXB0b3JCeU5hbWUsIHZhbGlkYXRlQ2FyZENvbmZpZyB9IGZyb20gJy4vZGFzaGJvYXJkLXV0aWxzJztcbmltcG9ydCB7IERhc2hib2FyZENhcmRBY3Rpb25NZW51IH0gZnJvbSAnLi9EYXNoYm9hcmRDYXJkQWN0aW9uTWVudSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRMYXlvdXRUb29sYmFyIH0gZnJvbSAnLi9EYXNoYm9hcmRMYXlvdXRUb29sYmFyJztcbmltcG9ydCB7IEVycm9yQ2FyZCB9IGZyb20gJy4vRXJyb3JDYXJkJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDb21wb25lbnRQcm9wcyB7fVxuXG5leHBvcnQgY29uc3QgRGFzaGJvYXJkOiBSZWFjdC5GQzxEYXNoYm9hcmRDb21wb25lbnRQcm9wcz4gPSAoXykgPT4ge1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBzZXJ2aWNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoPFN0YXRlRGlzcGF0Y2g+KCk7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgZGFzaGJvYXJkQ29uZmlnczogRGFzaGJvYXJkQ29uZmlnU3RhdGUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4gc3RhdGUuZGFzaGJvYXJkQ29uZmlncyk7XG4gIGNvbnN0IGpmckNoYXJ0Q29udHJvbGxlciA9IFJlYWN0LnVzZVJlZihcbiAgICBuZXcgSkZSTWV0cmljc0NoYXJ0Q29udHJvbGxlcihcbiAgICAgIHNlcnZpY2VDb250ZXh0LmFwaSxcbiAgICAgIHNlcnZpY2VDb250ZXh0LnRhcmdldCxcbiAgICAgIHNlcnZpY2VDb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsXG4gICAgICBzZXJ2aWNlQ29udGV4dC5zZXR0aW5nc1xuICAgIClcbiAgKTtcbiAgY29uc3QgbWJlYW5DaGFydENvbnRyb2xsZXIgPSBSZWFjdC51c2VSZWYoXG4gICAgbmV3IE1CZWFuTWV0cmljc0NoYXJ0Q29udHJvbGxlcihzZXJ2aWNlQ29udGV4dC5hcGksIHNlcnZpY2VDb250ZXh0LnRhcmdldCwgc2VydmljZUNvbnRleHQuc2V0dGluZ3MpXG4gICk7XG5cbiAgY29uc3QgY3VyckxheW91dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkYXNoYm9hcmRDb25maWdzLmxheW91dHNbZGFzaGJvYXJkQ29uZmlncy5jdXJyZW50XTtcbiAgfSwgW2Rhc2hib2FyZENvbmZpZ3NdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dHMgPSBnZXRGcm9tTG9jYWxTdG9yYWdlKCdEQVNIQk9BUkRfQ0ZHJywge30pIGFzIERhc2hib2FyZENvbmZpZ1N0YXRlO1xuICAgIGlmIChsYXlvdXRzLl92ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRpc3BhdGNoKGRhc2hib2FyZENvbmZpZ0ZpcnN0UnVuSW50ZW50KCkpO1xuICAgIH1cbiAgfSwgW2Rpc3BhdGNoXSk7XG5cbiAgY29uc3QgY2hhcnRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGpmckNvbnRyb2xsZXI6IGpmckNoYXJ0Q29udHJvbGxlci5jdXJyZW50LFxuICAgICAgbWJlYW5Db250cm9sbGVyOiBtYmVhbkNoYXJ0Q29udHJvbGxlci5jdXJyZW50LFxuICAgIH07XG4gIH0sIFtqZnJDaGFydENvbnRyb2xsZXIsIG1iZWFuQ2hhcnRDb250cm9sbGVyXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqZnJDb250cm9sbGVyID0gamZyQ2hhcnRDb250cm9sbGVyLmN1cnJlbnQ7XG4gICAgY29uc3QgbWJlYW5Db250cm9sbGVyID0gbWJlYW5DaGFydENvbnRyb2xsZXIuY3VycmVudDtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgamZyQ29udHJvbGxlci5fdGVhckRvd24oKTtcbiAgICAgIG1iZWFuQ29udHJvbGxlci5fdGVhckRvd24oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBkaXNwYXRjaChkYXNoYm9hcmRDb25maWdEZWxldGVDYXJkSW50ZW50KGlkeCkpO1xuICAgIH0sXG4gICAgW2Rpc3BhdGNoXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVJlc2V0U2l6ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpZHg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFNwYW4gPSBnZXRDYXJkRGVzY3JpcHRvckJ5TmFtZShjdXJyTGF5b3V0LmNhcmRzW2lkeF0ubmFtZSkuY2FyZFNpemVzLnNwYW4uZGVmYXVsdDtcbiAgICAgIGlmIChkZWZhdWx0U3BhbiA9PT0gY3VyckxheW91dC5jYXJkc1tpZHhdLnNwYW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2goZGFzaGJvYXJkQ29uZmlnUmVzaXplQ2FyZEludGVudChpZHgsIGRlZmF1bHRTcGFuKSk7XG4gICAgfSxcbiAgICBbZGlzcGF0Y2gsIGN1cnJMYXlvdXRdXG4gICk7XG5cbiAgY29uc3QgZW1wdHlMYXlvdXQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICFjdXJyTGF5b3V0LmNhcmRzIHx8ICFjdXJyTGF5b3V0LmNhcmRzLmxlbmd0aCwgW2N1cnJMYXlvdXQuY2FyZHNdKTtcblxuICByZXR1cm4gKFxuICAgIDxUYXJnZXRWaWV3IHBhZ2VUaXRsZT17dCgnRGFzaGJvYXJkLlBBR0VfVElUTEUnKX0gYXR0YWNobWVudHM9ezxEYXNoYm9hcmRMYXlvdXRUb29sYmFyIC8+fT5cbiAgICAgIDxDaGFydENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NoYXJ0Q29udGV4dH0gZGF0YS1mdWxsLWhlaWdodD5cbiAgICAgICAge2VtcHR5TGF5b3V0ID8gKFxuICAgICAgICAgIDxBZGRDYXJkIHZhcmlhbnQ9XCJjYXJkXCIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8R3JpZCBpZD17J2Rhc2hib2FyZC1ncmlkJ30gaGFzR3V0dGVyPlxuICAgICAgICAgICAge2N1cnJMYXlvdXQuY2FyZHMubWFwKChjZmcsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUNhcmRDb25maWcoY2ZnLCBpZHgpO1xuICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkID0gcmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZXJyb3JzLmxlbmd0aDtcblxuICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gaW52YWxpZCA/IChcbiAgICAgICAgICAgICAgICA8RXJyb3JDYXJkIHZhbGlkYXRpb25SZXN1bHQ9e3Jlc3VsdH0gY2FyZENvbmZpZz17Y2ZnfSBkYXNoYm9hcmRJZD17aWR4fSBhY3Rpb25zPXtbXX0gc3Bhbj17Y2ZnLnNwYW59IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChnZXRDYXJkRGVzY3JpcHRvckJ5TmFtZShjZmcubmFtZSkuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICBzcGFuOiBjZmcuc3BhbixcbiAgICAgICAgICAgICAgICAgIC4uLmNmZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgIGRhc2hib2FyZElkOiBpZHgsXG4gICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIDxEYXNoYm9hcmRDYXJkQWN0aW9uTWVudVxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7Y2ZnLm5hbWV9LWFjdGlvbnNgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmUoaWR4KX1cbiAgICAgICAgICAgICAgICAgICAgICBvblJlc2V0U2l6ZT17KCkgPT4gaGFuZGxlUmVzZXRTaXplKGlkeCl9XG4gICAgICAgICAgICAgICAgICAgICAgb25WaWV3PXsoKSA9PiBoaXN0b3J5LnB1c2goYC9kLXNvbG8/bGF5b3V0PSR7Y3VyckxheW91dC5uYW1lfSZjYXJkSWQ9JHtjZmcuaWR9YCl9XG4gICAgICAgICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIC8vIEFsd2F5cyBzaG93IGludmFsaWQgY2FyZHNcbiAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZUxldmVsID0gaW52YWxpZCA/IEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OIDogZ2V0Q2FyZERlc2NyaXB0b3JCeU5hbWUoY2ZnLm5hbWUpLmZlYXR1cmVMZXZlbDtcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGZWF0dXJlRmxhZyBsZXZlbD17ZmVhdHVyZUxldmVsfSBrZXk9e2Ake2NmZy5pZH0td3JhcHBlcmB9PlxuICAgICAgICAgICAgICAgICAgPEdyaWRJdGVtIHNwYW49e2NmZy5zcGFufSBrZXk9e2NmZy5pZH0gb3JkZXI9e3sgZGVmYXVsdDogaWR4LnRvU3RyaW5nKCkgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgPC9HcmlkSXRlbT5cbiAgICAgICAgICAgICAgICA8L0ZlYXR1cmVGbGFnPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICApfVxuICAgICAgPC9DaGFydENvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8PjwvPlxuICAgIDwvVGFyZ2V0Vmlldz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERhc2hib2FyZDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgUm9vdFN0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBUYXJnZXRWaWV3IH0gZnJvbSAnQGFwcC9UYXJnZXRWaWV3L1RhcmdldFZpZXcnO1xuaW1wb3J0IHsgQnVsbHNleWUsIEJ1dHRvbiwgRW1wdHlTdGF0ZSwgRW1wdHlTdGF0ZUJvZHksIEVtcHR5U3RhdGVJY29uLCBUaXRsZSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0ljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZUxvY2F0aW9uLCB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBDYXJkQ29uZmlnLCBnZXRDYXJkRGVzY3JpcHRvckJ5TmFtZSB9IGZyb20gJy4vZGFzaGJvYXJkLXV0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRTb2xvUHJvcHMge31cblxuY29uc3QgRGFzaGJvYXJkU29sbzogUmVhY3QuRkM8RGFzaGJvYXJkU29sb1Byb3BzPiA9ICh7IC4uLl9wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IHsgc2VhcmNoIH0gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuXG4gIGNvbnN0IGRhc2hib2FyZENvbmZpZ3MgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4gc3RhdGUuZGFzaGJvYXJkQ29uZmlncyk7XG5cbiAgY29uc3QgbGF5b3V0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKS5nZXQoJ2xheW91dCcpO1xuICB9LCBbc2VhcmNoXSk7XG5cbiAgY29uc3QgY2FyZENvbmZpZ3M6IENhcmRDb25maWdbXSA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIChkYXNoYm9hcmRDb25maWdzLmxheW91dHMuZmluZCgobCkgPT4gbC5uYW1lID09PSBsYXlvdXQpID8/IGRhc2hib2FyZENvbmZpZ3MubGF5b3V0c1tkYXNoYm9hcmRDb25maWdzLmN1cnJlbnRdKVxuICAgICAgICAuY2FyZHMsXG4gICAgW2Rhc2hib2FyZENvbmZpZ3MsIGxheW91dF1cbiAgKTtcblxuICBjb25zdCBjYXJkQ29uZmlnID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgY2FyZElkID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2gpLmdldCgnY2FyZElkJyk7XG4gICAgcmV0dXJuIGNhcmRDb25maWdzLmZpbmQoKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBjYXJkSWQpO1xuICB9LCBbc2VhcmNoLCBjYXJkQ29uZmlnc10pO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNhcmRDb25maWcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZSB2YXJpYW50PVwibGFyZ2VcIj5cbiAgICAgICAgICAgIDxFbXB0eVN0YXRlSWNvbiB2YXJpYW50PVwiY29udGFpbmVyXCIgY29tcG9uZW50PXtNb25pdG9yaW5nSWNvbn0gLz5cbiAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9XCJoM1wiIHNpemU9XCJsZ1wiPlxuICAgICAgICAgICAgICBEYXNoYm9hcmQgY2FyZCBub3QgZm91bmRcbiAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgICA8RW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgICAgIFByb3ZpZGUgdmFsaWQgPGNvZGU+bGF5b3V0PC9jb2RlPiBhbmQgPGNvZGU+Y2FyZElkPC9jb2RlPiBxdWVyeSBwYXJhbWV0ZXJzIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgICAgICA8L0VtcHR5U3RhdGVCb2R5PlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwicHJpbWFyeVwiIG9uQ2xpY2s9eygpID0+IGhpc3RvcnkucHVzaCgnLycpfT5cbiAgICAgICAgICAgICAgQmFjayB0byBEYXNoYm9hcmRcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNwYW4sIHByb3BzIH0gPSBjYXJkQ29uZmlnO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gVXNlIGRlZmF1bHQgY2hhcnQgY29udHJvbGxlclxuICAgICAgICA8VGFyZ2V0VmlldyBwYWdlVGl0bGU9e2NhcmRDb25maWcuaWR9IGJyZWFkY3J1bWJzPXtbeyBwYXRoOiAnLycsIHRpdGxlOiAnRGFzaGJvYXJkJyB9XX0+XG4gICAgICAgICAgPGRpdiBkYXRhLWZ1bGwtaGVpZ2h0IHN0eWxlPXt7IGhlaWdodDogJzEwMCUnIH19PlxuICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoZ2V0Q2FyZERlc2NyaXB0b3JCeU5hbWUobmFtZSkuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNwYW46IHNwYW4sXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgICBpc0RyYWdnYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGlzUmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNGdWxsSGVpZ2h0OiB0cnVlLFxuICAgICAgICAgICAgICBkYXNoYm9hcmRJZDogaWQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8PjwvPlxuICAgICAgICA8L1RhcmdldFZpZXc+XG4gICAgICApO1xuICAgIH1cbiAgfSwgW2NhcmRDb25maWcsIGhpc3RvcnldKTtcblxuICByZXR1cm4gY29udGVudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXIoRGFzaGJvYXJkU29sbyk7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IENhcmQsIENhcmRCb2R5LCBDYXJkVGl0bGUgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBBYm91dEFnZW50Q2FyZFByb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBBYm91dEFnZW50Q2FyZDogUmVhY3QuRkM8QWJvdXRBZ2VudENhcmRQcm9wcz4gPSAoXykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDYXJkPlxuICAgICAgPENhcmRUaXRsZT5BYm91dCB0aGUgSk1DIEFnZW50PC9DYXJkVGl0bGU+XG4gICAgICA8Q2FyZEJvZHk+XG4gICAgICAgIFRoZSBKTUMgQWdlbnQgYWxsb3dzIHVzZXJzIHRvIGR5bmFtaWNhbGx5IGluamVjdCBjdXN0b20gSkZSIGV2ZW50cyBpbnRvIHJ1bm5pbmcgSlZNcy4gSW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2ZcbiAgICAgICAgdGhlIEpNQyBBZ2VudCwgdGhlIGFnZW50IGphciBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHNhbWUgY29udGFpbmVyIGFzIHRoZSB0YXJnZXQsIGFuZCB0aGUgdGFyZ2V0IG11c3QgYmUgc3RhcnRlZFxuICAgICAgICB3aXRoIHRoZSBhZ2VudCAoLWphdmFhZ2VudDovcGF0aC90by9hZ2VudC5qYXIpLiBPbmNlIHRoZXNlIHByZS1yZXF1aXNpdGVzIGFyZSBtZXQsIHRoZSB1c2VyIGNhbiB1cGxvYWQgcHJvYmVcbiAgICAgICAgdGVtcGxhdGVzIHRvIENyeW9zdGF0IGFuZCBpbnNlcnQgdGhlbSB0byB0aGUgdGFyZ2V0LCBhcyB3ZWxsIGFzIHZpZXcgb3IgcmVtb3ZlIGN1cnJlbnRseSBhY3RpdmUgcHJvYmVzLlxuICAgICAgPC9DYXJkQm9keT5cbiAgICA8L0NhcmQ+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBhdXRoRmFpbE1lc3NhZ2UsIEVycm9yVmlldywgaXNBdXRoRmFpbCB9IGZyb20gJ0BhcHAvRXJyb3JWaWV3L0Vycm9yVmlldyc7XG5pbXBvcnQgeyBMb2FkaW5nVmlldyB9IGZyb20gJ0BhcHAvTG9hZGluZ1ZpZXcvTG9hZGluZ1ZpZXcnO1xuaW1wb3J0IHsgRGVsZXRlV2FybmluZ01vZGFsIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nTW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdVdGlscyc7XG5pbXBvcnQgeyBMb2FkaW5nUHJvcHNUeXBlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUHJvZ3Jlc3NJbmRpY2F0b3InO1xuaW1wb3J0IHsgRXZlbnRQcm9iZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBzb3J0UmVzb3VyY2VzLCBUYWJsZUNvbHVtbiB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBUb29sYmFyLFxuICBUb29sYmFyQ29udGVudCxcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbiAgVGV4dElucHV0LFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlSWNvbixcbiAgVGl0bGUsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7XG4gIFRhYmxlVmFyaWFudCxcbiAgSVNvcnRCeSxcbiAgU29ydEJ5RGlyZWN0aW9uLFxuICBUaFByb3BzLFxuICBUYWJsZUNvbXBvc2FibGUsXG4gIFRib2R5LFxuICBUaCxcbiAgVGhlYWQsXG4gIFRyLFxuICBUZCxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJvdXRBZ2VudENhcmQgfSBmcm9tICcuL0Fib3V0QWdlbnRDYXJkJztcblxuZXhwb3J0IHR5cGUgTGl2ZVByb2JlQWN0aW9ucyA9ICdSRU1PVkUnO1xuXG5jb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXG4gIHtcbiAgICB0aXRsZTogJ0lEJyxcbiAgICBrZXlQYXRoczogWydpZCddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdOYW1lJyxcbiAgICBrZXlQYXRoczogWyduYW1lJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NsYXNzJyxcbiAgICBrZXlQYXRoczogWydjbGF6eiddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdEZXNjcmlwdGlvbicsXG4gICAga2V5UGF0aHM6IFsnZGVzY3JpcHRpb24nXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTWV0aG9kJyxcbiAgICBrZXlQYXRoczogWydtZXRob2ROYW1lJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50TGl2ZVByb2Jlc1Byb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBBZ2VudExpdmVQcm9iZXM6IFJlYWN0LkZDPEFnZW50TGl2ZVByb2Jlc1Byb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFtwcm9iZXMsIHNldFByb2Jlc10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBFdmVudFByb2JlW10pO1xuICBjb25zdCBbZmlsdGVyZWRQcm9iZXMsIHNldEZpbHRlcmVkUHJvYmVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIEV2ZW50UHJvYmVbXSk7XG4gIGNvbnN0IFtmaWx0ZXJUZXh0LCBzZXRGaWx0ZXJUZXh0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3NvcnRCeSwgc2V0U29ydEJ5XSA9IFJlYWN0LnVzZVN0YXRlKHt9IGFzIElTb3J0QnkpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbd2FybmluZ01vZGFsT3Blbiwgc2V0V2FybmluZ01vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthY3Rpb25Mb2FkaW5ncywgc2V0QWN0aW9uTG9hZGluZ3NdID0gUmVhY3QudXNlU3RhdGU8UmVjb3JkPExpdmVQcm9iZUFjdGlvbnMsIGJvb2xlYW4+Pih7IFJFTU9WRTogZmFsc2UgfSk7XG5cbiAgY29uc3QgZ2V0U29ydFBhcmFtcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjb2x1bW5JbmRleDogbnVtYmVyKTogVGhQcm9wc1snc29ydCddID0+ICh7XG4gICAgICBzb3J0Qnk6IHNvcnRCeSxcbiAgICAgIG9uU29ydDogKF9ldmVudCwgaW5kZXgsIGRpcmVjdGlvbikgPT4ge1xuICAgICAgICBzZXRTb3J0Qnkoe1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgY29sdW1uSW5kZXgsXG4gICAgfSksXG4gICAgW3NvcnRCeSwgc2V0U29ydEJ5XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVByb2JlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChwcm9iZXMpID0+IHtcbiAgICAgIHNldFByb2Jlcyhwcm9iZXMpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfSxcbiAgICBbc2V0UHJvYmVzLCBzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9LFxuICAgIFtzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBjb25zdCByZWZyZXNoUHJvYmVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaS5nZXRBY3RpdmVQcm9iZXModHJ1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiBoYW5kbGVQcm9iZXModmFsdWUpLFxuICAgICAgICBlcnJvcjogKGVycikgPT4gaGFuZGxlRXJyb3IoZXJyKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIHNldElzTG9hZGluZywgaGFuZGxlUHJvYmVzLCBoYW5kbGVFcnJvcl0pO1xuXG4gIGNvbnN0IGF1dGhSZXRyeSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb250ZXh0LnRhcmdldC5zZXRBdXRoUmV0cnkoKTtcbiAgfSwgW2NvbnRleHQudGFyZ2V0XSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQWxsUHJvYmVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEFjdGlvbkxvYWRpbmdzKChvbGQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9sZCxcbiAgICAgICAgUkVNT1ZFOiB0cnVlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaS5yZW1vdmVQcm9iZXMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRBY3Rpb25Mb2FkaW5ncygob2xkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm9sZCxcbiAgICAgICAgICAgIFJFTU9WRTogZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCBzZXRBY3Rpb25Mb2FkaW5nc10pO1xuXG4gIGNvbnN0IGhhbmRsZVdhcm5pbmdNb2RhbEFjY2VwdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IGhhbmRsZURlbGV0ZUFsbFByb2JlcygpLCBbaGFuZGxlRGVsZXRlQWxsUHJvYmVzXSk7XG5cbiAgY29uc3QgaGFuZGxlV2FybmluZ01vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0V2FybmluZ01vZGFsT3BlbihmYWxzZSk7XG4gIH0sIFtzZXRXYXJuaW5nTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQnV0dG9uID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChjb250ZXh0LnNldHRpbmdzLmRlbGV0aW9uRGlhbG9nc0VuYWJsZWRGb3IoRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlQWN0aXZlUHJvYmVzKSkge1xuICAgICAgc2V0V2FybmluZ01vZGFsT3Blbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlRGVsZXRlQWxsUHJvYmVzKCk7XG4gICAgfVxuICB9LCBbY29udGV4dC5zZXR0aW5ncywgc2V0V2FybmluZ01vZGFsT3BlbiwgaGFuZGxlRGVsZXRlQWxsUHJvYmVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldC50YXJnZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJUZXh0KCcnKTtcbiAgICAgICAgcmVmcmVzaFByb2JlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbY29udGV4dCwgY29udGV4dC50YXJnZXQsIGFkZFN1YnNjcmlwdGlvbiwgc2V0RmlsdGVyVGV4dCwgcmVmcmVzaFByb2Jlc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gcmVmcmVzaFByb2JlcygpLFxuICAgICAgY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFBlcmlvZCgpICogY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFVuaXRzKClcbiAgICApO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpZCk7XG4gIH0sIFtjb250ZXh0LnNldHRpbmdzLCByZWZyZXNoUHJvYmVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldC5hdXRoRmFpbHVyZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHNldEVycm9yTWVzc2FnZShhdXRoRmFpbE1lc3NhZ2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldCwgc2V0RXJyb3JNZXNzYWdlXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgY29udGV4dC50YXJnZXQudGFyZ2V0KCksXG4gICAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5Qcm9iZVRlbXBsYXRlQXBwbGllZCksXG4gICAgICBdKS5zdWJzY3JpYmUoKFtjdXJyZW50VGFyZ2V0LCBlXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5jb25uZWN0VXJsICE9IGUubWVzc2FnZS50YXJnZXRJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRQcm9iZXMoKG9sZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb2JlcyA9IGUubWVzc2FnZS5ldmVudHMgYXMgRXZlbnRQcm9iZVtdO1xuICAgICAgICAgIGNvbnN0IHByb2JlSWRzID0gcHJvYmVzLm1hcCgocCkgPT4gcC5pZCk7XG4gICAgICAgICAgaWYgKHByb2Jlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5vbGQuZmlsdGVyKChwcm9iZSkgPT4gIXByb2JlSWRzLmluY2x1ZGVzKHByb2JlLmlkKSksIC4uLnByb2Jlc107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvbGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIGNvbnRleHQudGFyZ2V0LCBzZXRQcm9iZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5Qcm9iZXNSZW1vdmVkKS5zdWJzY3JpYmUoKF8pID0+IHNldFByb2JlcyhbXSkpXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRQcm9iZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBmaWx0ZXJlZDogRXZlbnRQcm9iZVtdO1xuICAgIGlmICghZmlsdGVyVGV4dCkge1xuICAgICAgZmlsdGVyZWQgPSBwcm9iZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZ0ID0gZmlsdGVyVGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGZpbHRlcmVkID0gcHJvYmVzLmZpbHRlcihcbiAgICAgICAgKHQ6IEV2ZW50UHJvYmUpID0+XG4gICAgICAgICAgdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnQpIHx8XG4gICAgICAgICAgdC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZ0KSB8fFxuICAgICAgICAgIHQuY2xhenoudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmdCkgfHxcbiAgICAgICAgICB0Lm1ldGhvZERlc2NyaXB0b3IudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmdCkgfHxcbiAgICAgICAgICB0Lm1ldGhvZE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmdClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0RmlsdGVyZWRQcm9iZXMoXG4gICAgICBzb3J0UmVzb3VyY2VzKFxuICAgICAgICB7XG4gICAgICAgICAgaW5kZXg6IHNvcnRCeS5pbmRleCA/PyAwLFxuICAgICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJlZCxcbiAgICAgICAgdGFibGVDb2x1bW5zXG4gICAgICApXG4gICAgKTtcbiAgfSwgW2ZpbHRlclRleHQsIHByb2Jlcywgc29ydEJ5LCBzZXRGaWx0ZXJlZFByb2Jlc10pO1xuXG4gIGNvbnN0IHByb2JlUm93cyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGZpbHRlcmVkUHJvYmVzLm1hcCgodDogRXZlbnRQcm9iZSwgaW5kZXgpID0+IChcbiAgICAgICAgPFRyIGtleT17YGFjdGl2ZS1wcm9iZS0ke2luZGV4fWB9PlxuICAgICAgICAgIDxUZCBrZXk9e2BhY3RpdmUtcHJvYmUtaWQtJHtpbmRleH1gfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1swXS50aXRsZX0+XG4gICAgICAgICAgICB7dC5pZH1cbiAgICAgICAgICA8L1RkPlxuICAgICAgICAgIDxUZCBrZXk9e2BhY3RpdmUtcHJvYmUtbmFtZS0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzFdLnRpdGxlfT5cbiAgICAgICAgICAgIHt0Lm5hbWV9XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgICA8VGQga2V5PXtgYWN0aXZlLXByb2JlLWNsYXp6LSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMl0udGl0bGV9PlxuICAgICAgICAgICAge3QuY2xhenp9XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgICA8VGQga2V5PXtgYWN0aXZlLXByb2JlLWRlc2NyaXB0aW9uLSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbM10udGl0bGV9PlxuICAgICAgICAgICAge3QuZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgICA8VGQga2V5PXtgYWN0aXZlLXByb2JlLW1ldGhvZG5hbWUtJHtpbmRleH1gfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1s0XS50aXRsZX0+XG4gICAgICAgICAgICB7dC5tZXRob2ROYW1lfVxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgIDwvVHI+XG4gICAgICApKSxcbiAgICBbZmlsdGVyZWRQcm9iZXNdXG4gICk7XG5cbiAgY29uc3QgYWN0aW9uTG9hZGluZ1Byb3BzID0gUmVhY3QudXNlTWVtbzxSZWNvcmQ8TGl2ZVByb2JlQWN0aW9ucywgTG9hZGluZ1Byb3BzVHlwZT4+KFxuICAgICgpID0+ICh7XG4gICAgICBSRU1PVkU6IHtcbiAgICAgICAgc3Bpbm5lckFyaWFWYWx1ZVRleHQ6ICdSZW1vdmluZycsXG4gICAgICAgIHNwaW5uZXJBcmlhTGFiZWw6ICdyZW1vdmluZy1hbGwtcHJvYmVzJyxcbiAgICAgICAgaXNMb2FkaW5nOiBhY3Rpb25Mb2FkaW5nc1snUkVNT1ZFJ10sXG4gICAgICB9IGFzIExvYWRpbmdQcm9wc1R5cGUsXG4gICAgfSksXG4gICAgW2FjdGlvbkxvYWRpbmdzXVxuICApO1xuXG4gIGlmIChlcnJvck1lc3NhZ2UgIT0gJycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEVycm9yVmlld1xuICAgICAgICB0aXRsZT17J0Vycm9yIHJldHJpZXZpbmcgYWN0aXZlIHByb2Jlcyd9XG4gICAgICAgIG1lc3NhZ2U9e2Ake2Vycm9yTWVzc2FnZX0uIE5vdGU6IFRoaXMgZXJyb3IgaXMgZ2VuZXJhbGx5IGNhdXNlZCB3aGVuIHRoZSBhZ2VudCBpcyBub3QgbG9hZGVkIG9yIGlzIG5vdCBhY3RpdmUuIENoZWNrIHRoYXQgdGhlIHRhcmdldCB3YXMgc3RhcnRlZCB3aXRoIHRoZSBhZ2VudCAoLWphdmFhZ2VudDovcGF0aC90by9hZ2VudC5qYXIpLmB9XG4gICAgICAgIHJldHJ5PXtpc0F1dGhGYWlsKGVycm9yTWVzc2FnZSkgPyBhdXRoUmV0cnkgOiB1bmRlZmluZWR9XG4gICAgICAvPlxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxMb2FkaW5nVmlldyAvPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN0YWNrIGhhc0d1dHRlciBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgIDxTdGFja0l0ZW0+XG4gICAgICAgICAgICA8QWJvdXRBZ2VudENhcmQgLz5cbiAgICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgICAgPFRvb2xiYXIgaWQ9XCJhY3RpdmUtcHJvYmVzLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgPFRvb2xiYXJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxUb29sYmFyR3JvdXAgdmFyaWFudD1cImZpbHRlci1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFjdGl2ZVByb2JlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGl2ZVByb2JlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlci4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFjdGl2ZSBwcm9iZSBmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJUZXh0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICAgICAgICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJpY29uLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWxldGVCdXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17IWZpbHRlcmVkUHJvYmVzLmxlbmd0aCB8fCBhY3Rpb25Mb2FkaW5nc1snUkVNT1ZFJ119XG4gICAgICAgICAgICAgICAgICAgICAgey4uLmFjdGlvbkxvYWRpbmdQcm9wc1snUkVNT1ZFJ119XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTG9hZGluZ3NbJ1JFTU9WRSddID8gJ1JlbW92aW5nJyA6ICdSZW1vdmUnfSBBbGwgUHJvYmVzXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXJHcm91cD5cbiAgICAgICAgICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICAgICAgICAgICAgPERlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICAgICAgICAgIHdhcm5pbmdUeXBlPXtEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVBY3RpdmVQcm9iZXN9XG4gICAgICAgICAgICAgICAgdmlzaWJsZT17d2FybmluZ01vZGFsT3Blbn1cbiAgICAgICAgICAgICAgICBvbkFjY2VwdD17aGFuZGxlV2FybmluZ01vZGFsQWNjZXB0fVxuICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZVdhcm5pbmdNb2RhbENsb3NlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Ub29sYmFyPlxuICAgICAgICAgICAge3Byb2JlUm93cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgIDxUYWJsZUNvbXBvc2FibGUgYXJpYS1sYWJlbD1cIkFjdGl2ZSBQcm9iZSBUYWJsZVwiIHZhcmlhbnQ9e1RhYmxlVmFyaWFudC5jb21wYWN0fT5cbiAgICAgICAgICAgICAgICA8VGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8VHI+XG4gICAgICAgICAgICAgICAgICAgIHt0YWJsZUNvbHVtbnMubWFwKCh7IHRpdGxlLCBzb3J0YWJsZSB9LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUaCBrZXk9e2BhY3RpdmUtcHJvYmUtaGVhZGVyLSR7dGl0bGV9YH0gc29ydD17c29ydGFibGUgPyBnZXRTb3J0UGFyYW1zKGluZGV4KSA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L1RyPlxuICAgICAgICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAgICAgICAgPFRib2R5Pntwcm9iZVJvd3N9PC9UYm9keT5cbiAgICAgICAgICAgICAgPC9UYWJsZUNvbXBvc2FibGU+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgICAgICAgIE5vIEFjdGl2ZSBQcm9iZXNcbiAgICAgICAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICAgICAgICA8L0VtcHR5U3RhdGU+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICA8L1N0YWNrPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgRXJyb3JWaWV3IH0gZnJvbSAnQGFwcC9FcnJvclZpZXcvRXJyb3JWaWV3JztcbmltcG9ydCB7IExvYWRpbmdWaWV3IH0gZnJvbSAnQGFwcC9Mb2FkaW5nVmlldy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgeyBEZWxldGVXYXJuaW5nTW9kYWwgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdNb2RhbCc7XG5pbXBvcnQgeyBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSB9IGZyb20gJ0BhcHAvTW9kYWwvRGVsZXRlV2FybmluZ1V0aWxzJztcbmltcG9ydCB7IEZVcGxvYWQsIE11bHRpRmlsZVVwbG9hZCwgVXBsb2FkQ2FsbGJhY2tzIH0gZnJvbSAnQGFwcC9TaGFyZWQvRmlsZVVwbG9hZHMnO1xuaW1wb3J0IHsgTG9hZGluZ1Byb3BzVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1Byb2dyZXNzSW5kaWNhdG9yJztcbmltcG9ydCB7IFByb2JlVGVtcGxhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4sIHBvcnRhbFJvb3QsIHNvcnRSZXNvdXJjZXMgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIEFjdGlvbkdyb3VwLFxuICBCdXR0b24sXG4gIERyb3Bkb3duLFxuICBEcm9wZG93bkl0ZW0sXG4gIERyb3Bkb3duUG9zaXRpb24sXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVJY29uLFxuICBGb3JtLFxuICBGb3JtR3JvdXAsXG4gIEtlYmFiVG9nZ2xlLFxuICBNb2RhbCxcbiAgTW9kYWxWYXJpYW50LFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxuICBUZXh0SW5wdXQsXG4gIFRpdGxlLFxuICBUb29sYmFyLFxuICBUb29sYmFyQ29udGVudCxcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uLCBVcGxvYWRJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgSVNvcnRCeSxcbiAgU29ydEJ5RGlyZWN0aW9uLFxuICBUYWJsZUNvbXBvc2FibGUsXG4gIFRhYmxlVmFyaWFudCxcbiAgVGJvZHksXG4gIFRkLFxuICBUaCxcbiAgVGhlYWQsXG4gIFRoUHJvcHMsXG4gIFRyLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlZmF1bHRJZkVtcHR5LCBmaXJzdCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJvdXRBZ2VudENhcmQgfSBmcm9tICcuL0Fib3V0QWdlbnRDYXJkJztcblxuY29uc3QgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW1xuICB7XG4gICAgdGl0bGU6ICdOYW1lJyxcbiAgICBrZXlQYXRoczogWyduYW1lJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1hNTCcsXG4gICAga2V5UGF0aHM6IFsneG1sJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UHJvYmVUZW1wbGF0ZXNQcm9wcyB7XG4gIGFnZW50RGV0ZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBZ2VudFByb2JlVGVtcGxhdGVzOiBSZWFjdC5GQzxBZ2VudFByb2JlVGVtcGxhdGVzUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFt0ZW1wbGF0ZXMsIHNldFRlbXBsYXRlc10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBQcm9iZVRlbXBsYXRlW10pO1xuICBjb25zdCBbZmlsdGVyZWRUZW1wbGF0ZXMsIHNldEZpbHRlcmVkVGVtcGxhdGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIFByb2JlVGVtcGxhdGVbXSk7XG4gIGNvbnN0IFtmaWx0ZXJUZXh0LCBzZXRGaWx0ZXJUZXh0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3VwbG9hZE1vZGFsT3Blbiwgc2V0VXBsb2FkTW9kYWxPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NvcnRCeSwgc2V0U29ydEJ5XSA9IFJlYWN0LnVzZVN0YXRlKHt9IGFzIElTb3J0QnkpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbdGVtcGxhdGVUb0RlbGV0ZSwgc2V0VGVtcGxhdGVUb0RlbGV0ZV0gPSBSZWFjdC51c2VTdGF0ZSh1bmRlZmluZWQgYXMgUHJvYmVUZW1wbGF0ZSB8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt3YXJuaW5nTW9kYWxPcGVuLCBzZXRXYXJuaW5nTW9kYWxPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBnZXRTb3J0UGFyYW1zID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNvbHVtbkluZGV4OiBudW1iZXIpOiBUaFByb3BzWydzb3J0J10gPT4gKHtcbiAgICAgIHNvcnRCeTogc29ydEJ5LFxuICAgICAgb25Tb3J0OiAoX2V2ZW50LCBpbmRleCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIHNldFNvcnRCeSh7XG4gICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICB9KSxcbiAgICBbc29ydEJ5LCBzZXRTb3J0QnldXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRlbXBsYXRlcykgPT4ge1xuICAgICAgc2V0VGVtcGxhdGVzKHRlbXBsYXRlcyk7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICB9LFxuICAgIFtzZXRUZW1wbGF0ZXMsIHNldElzTG9hZGluZywgc2V0RXJyb3JNZXNzYWdlXVxuICApO1xuICBjb25zdCBoYW5kbGVFcnJvciA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlKTtcbiAgICB9LFxuICAgIFtzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBjb25zdCByZWZyZXNoVGVtcGxhdGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaS5nZXRQcm9iZVRlbXBsYXRlcygpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4gaGFuZGxlVGVtcGxhdGVzKHZhbHVlKSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGhhbmRsZUVycm9yKGVyciksXG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCBzZXRJc0xvYWRpbmcsIGhhbmRsZVRlbXBsYXRlcywgaGFuZGxlRXJyb3JdKTtcblxuICBjb25zdCBoYW5kbGVEZWxldGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGVtcGxhdGU6IFByb2JlVGVtcGxhdGUpID0+IHtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgY29udGV4dC5hcGkuZGVsZXRlQ3VzdG9tUHJvYmVUZW1wbGF0ZSh0ZW1wbGF0ZS5uYW1lKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8qKiBEbyBub3RoaW5nLiBOb3RpZmljYXRpb25zIGhvb2sgd2lsbCBoYW5kbGUgKi9cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVXYXJuaW5nTW9kYWxBY2NlcHQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRlbXBsYXRlVG9EZWxldGUpIHtcbiAgICAgIGhhbmRsZURlbGV0ZSh0ZW1wbGF0ZVRvRGVsZXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gdGVtcGxhdGUgdG8gZGVsZXRlJyk7XG4gICAgfVxuICB9LCBbaGFuZGxlRGVsZXRlLCB0ZW1wbGF0ZVRvRGVsZXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlV2FybmluZ01vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0V2FybmluZ01vZGFsT3BlbihmYWxzZSk7XG4gIH0sIFtzZXRXYXJuaW5nTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVVcGxvYWQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VXBsb2FkTW9kYWxPcGVuKHRydWUpO1xuICB9LCBbc2V0VXBsb2FkTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlVXBsb2FkTW9kYWxDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRVcGxvYWRNb2RhbE9wZW4oZmFsc2UpO1xuICB9LCBbc2V0VXBsb2FkTW9kYWxPcGVuXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWZyZXNoVGVtcGxhdGVzKCk7XG4gIH0sIFtyZWZyZXNoVGVtcGxhdGVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRleHQuc2V0dGluZ3MuYXV0b1JlZnJlc2hFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoXG4gICAgICAoKSA9PiByZWZyZXNoVGVtcGxhdGVzKCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIHJlZnJlc2hUZW1wbGF0ZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5Qcm9iZVRlbXBsYXRlVXBsb2FkZWQpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0VGVtcGxhdGVzKChvbGQpID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ub2xkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBldmVudC5tZXNzYWdlLnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgeG1sOiBldmVudC5tZXNzYWdlLnRlbXBsYXRlQ29udGVudCxcbiAgICAgICAgICAgIH0gYXMgUHJvYmVUZW1wbGF0ZSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRUZW1wbGF0ZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5Qcm9iZVRlbXBsYXRlRGVsZXRlZCkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBzZXRUZW1wbGF0ZXMoKG9sZCkgPT4gb2xkLmZpbHRlcigodCkgPT4gdC5uYW1lICE9PSBldmVudC5tZXNzYWdlLnByb2JlVGVtcGxhdGUpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRUZW1wbGF0ZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBmaWx0ZXJlZDogUHJvYmVUZW1wbGF0ZVtdO1xuICAgIGlmICghZmlsdGVyVGV4dCkge1xuICAgICAgZmlsdGVyZWQgPSB0ZW1wbGF0ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZ0ID0gZmlsdGVyVGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGZpbHRlcmVkID0gdGVtcGxhdGVzLmZpbHRlcihcbiAgICAgICAgKHQ6IFByb2JlVGVtcGxhdGUpID0+IHQubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZ0KSB8fCB0LnhtbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZ0KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXJlZFRlbXBsYXRlcyhcbiAgICAgIHNvcnRSZXNvdXJjZXMoXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRleDogc29ydEJ5LmluZGV4ID8/IDAsXG4gICAgICAgICAgZGlyZWN0aW9uOiBzb3J0QnkuZGlyZWN0aW9uID8/IFNvcnRCeURpcmVjdGlvbi5hc2MsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcmVkLFxuICAgICAgICB0YWJsZUNvbHVtbnNcbiAgICAgIClcbiAgICApO1xuICB9LCBbZmlsdGVyVGV4dCwgdGVtcGxhdGVzLCBzb3J0QnksIHNldEZpbHRlcmVkVGVtcGxhdGVzXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQWN0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRlbXBsYXRlOiBQcm9iZVRlbXBsYXRlKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC5zZXR0aW5ncy5kZWxldGlvbkRpYWxvZ3NFbmFibGVkRm9yKERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUV2ZW50VGVtcGxhdGVzKSkge1xuICAgICAgICBzZXRUZW1wbGF0ZVRvRGVsZXRlKHRlbXBsYXRlKTtcbiAgICAgICAgc2V0V2FybmluZ01vZGFsT3Blbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZURlbGV0ZSh0ZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbY29udGV4dC5zZXR0aW5ncywgc2V0V2FybmluZ01vZGFsT3Blbiwgc2V0VGVtcGxhdGVUb0RlbGV0ZSwgaGFuZGxlRGVsZXRlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUluc2VydEFjdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0ZW1wbGF0ZTogUHJvYmVUZW1wbGF0ZSkgPT4ge1xuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgIC5pbnNlcnRQcm9iZXModGVtcGxhdGUubmFtZSlcbiAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpXVxuICApO1xuXG4gIGNvbnN0IHRlbXBsYXRlUm93cyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGZpbHRlcmVkVGVtcGxhdGVzLm1hcCgodDogUHJvYmVUZW1wbGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VHIga2V5PXtgcHJvYmUtdGVtcGxhdGUtJHtpbmRleH1gfT5cbiAgICAgICAgICAgIDxUZCBrZXk9e2Bwcm9iZS10ZW1wbGF0ZS1uYW1lLSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMF0udGl0bGV9PlxuICAgICAgICAgICAgICB7dC5uYW1lfVxuICAgICAgICAgICAgPC9UZD5cbiAgICAgICAgICAgIDxUZCBrZXk9e2Bwcm9iZS10ZW1wbGF0ZS14bWwtJHtpbmRleH1gfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1sxXS50aXRsZX0+XG4gICAgICAgICAgICAgIHt0LnhtbH1cbiAgICAgICAgICAgIDwvVGQ+XG4gICAgICAgICAgICA8VGQga2V5PXtgcHJvYmUtdGVtcGxhdGUtYWN0aW9uLSR7aW5kZXh9YH0gaXNBY3Rpb25DZWxsIHN0eWxlPXt7IHBhZGRpbmdSaWdodDogJzAnIH19PlxuICAgICAgICAgICAgICA8QWdlbnRUZW1wbGF0ZUFjdGlvblxuICAgICAgICAgICAgICAgIHRlbXBsYXRlPXt0fVxuICAgICAgICAgICAgICAgIG9uRGVsZXRlPXtoYW5kbGVEZWxldGVBY3Rpb259XG4gICAgICAgICAgICAgICAgb25JbnNlcnQ9e3Byb3BzLmFnZW50RGV0ZWN0ZWQgPyBoYW5kbGVJbnNlcnRBY3Rpb24gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1RkPlxuICAgICAgICAgIDwvVHI+XG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICBbZmlsdGVyZWRUZW1wbGF0ZXMsIHByb3BzLmFnZW50RGV0ZWN0ZWQsIGhhbmRsZUluc2VydEFjdGlvbiwgaGFuZGxlRGVsZXRlQWN0aW9uXVxuICApO1xuXG4gIGlmIChlcnJvck1lc3NhZ2UgIT0gJycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEVycm9yVmlld1xuICAgICAgICB0aXRsZT17J0Vycm9yIHJldHJpZXZpbmcgcHJvYmUgdGVtcGxhdGVzJ31cbiAgICAgICAgbWVzc2FnZT17YCR7ZXJyb3JNZXNzYWdlfS4gTm90ZTogVGhpcyBlcnJvciBpcyBnZW5lcmFsbHkgY2F1c2VkIHdoZW4gdGhlIGFnZW50IGlzIG5vdCBsb2FkZWQgb3IgaXMgbm90IGFjdGl2ZS4gQ2hlY2sgdGhhdCB0aGUgdGFyZ2V0IHdhcyBzdGFydGVkIHdpdGggdGhlIGFnZW50ICgtamF2YWFnZW50Oi9wYXRoL3RvL2FnZW50LmphcikuYH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICByZXR1cm4gPExvYWRpbmdWaWV3IC8+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U3RhY2sgaGFzR3V0dGVyIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIG1hcmdpbkJvdHRvbTogJzEuNWVtJyB9fT5cbiAgICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgICAgPEFib3V0QWdlbnRDYXJkIC8+XG4gICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgICAgIDxUb29sYmFyIGlkPVwicHJvYmUtdGVtcGxhdGVzLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgPFRvb2xiYXJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxUb29sYmFyR3JvdXAgdmFyaWFudD1cImZpbHRlci1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRlbXBsYXRlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInRlbXBsYXRlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlci4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlByb2JlIHRlbXBsYXRlIGZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlclRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2ZpbHRlclRleHR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgICAgIDxUb29sYmFyR3JvdXAgdmFyaWFudD1cImljb24tYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PVwidXBsb2FkXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJVcGxvYWRcIiBvbkNsaWNrPXtoYW5kbGVUZW1wbGF0ZVVwbG9hZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPFVwbG9hZEljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgICAgIDxEZWxldGVXYXJuaW5nTW9kYWxcbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdUeXBlPXtEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVQcm9iZVRlbXBsYXRlc31cbiAgICAgICAgICAgICAgICAgIHZpc2libGU9e3dhcm5pbmdNb2RhbE9wZW59XG4gICAgICAgICAgICAgICAgICBvbkFjY2VwdD17aGFuZGxlV2FybmluZ01vZGFsQWNjZXB0fVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlV2FybmluZ01vZGFsQ2xvc2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICAgICAgICAgIDwvVG9vbGJhcj5cbiAgICAgICAgICAgIHt0ZW1wbGF0ZVJvd3MubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8VGFibGVDb21wb3NhYmxlIGFyaWEtbGFiZWw9XCJQcm9iZSBUZW1wbGF0ZXMgVGFibGVcIiB2YXJpYW50PXtUYWJsZVZhcmlhbnQuY29tcGFjdH0+XG4gICAgICAgICAgICAgICAgPFRoZWFkPlxuICAgICAgICAgICAgICAgICAgPFRyPlxuICAgICAgICAgICAgICAgICAgICB7dGFibGVDb2x1bW5zLm1hcCgoeyB0aXRsZSwgc29ydGFibGUgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VGgga2V5PXtgcHJvYmUtdGVtcGxhdGUtaGVhZGVyLSR7dGl0bGV9YH0gc29ydD17c29ydGFibGUgPyBnZXRTb3J0UGFyYW1zKGluZGV4KSA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L1RyPlxuICAgICAgICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAgICAgICAgPFRib2R5PnsuLi50ZW1wbGF0ZVJvd3N9PC9UYm9keT5cbiAgICAgICAgICAgICAgPC9UYWJsZUNvbXBvc2FibGU+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgICAgICAgIE5vIFByb2JlIFRlbXBsYXRlc1xuICAgICAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QWdlbnRQcm9iZVRlbXBsYXRlVXBsb2FkTW9kYWwgaXNPcGVuPXt1cGxvYWRNb2RhbE9wZW59IG9uQ2xvc2U9e2hhbmRsZVVwbG9hZE1vZGFsQ2xvc2V9IC8+XG4gICAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgIDwvU3RhY2s+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UHJvYmVUZW1wbGF0ZVVwbG9hZE1vZGFsUHJvcHMge1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBBZ2VudFByb2JlVGVtcGxhdGVVcGxvYWRNb2RhbDogUmVhY3QuRkM8QWdlbnRQcm9iZVRlbXBsYXRlVXBsb2FkTW9kYWxQcm9wcz4gPSAoeyBvbkNsb3NlLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBzdWJtaXRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpOyAvLyBVc2UgcmVmIHRvIHJlZmVyIHRvIHN1Ym1pdCB0cmlnZ2VyIGRpdlxuICBjb25zdCBhYm9ydFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7IC8vIFVzZSByZWYgdG8gcmVmZXIgdG8gYWJvcnQgdHJpZ2dlciBkaXZcblxuICBjb25zdCBbbnVtT2ZGaWxlcywgc2V0TnVtT2ZGaWxlc10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2FsbE9rcywgc2V0QWxsT2tzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3VwbG9hZGluZywgc2V0VXBsb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCByZXNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXROdW1PZkZpbGVzKDApO1xuICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gIH0sIFtzZXROdW1PZkZpbGVzLCBzZXRVcGxvYWRpbmddKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXBsb2FkaW5nKSB7XG4gICAgICBhYm9ydFJlZi5jdXJyZW50ICYmIGFib3J0UmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXQoKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFt1cGxvYWRpbmcsIGFib3J0UmVmLCByZXNldCwgb25DbG9zZV0pO1xuXG4gIGNvbnN0IG9uRmlsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChmaWxlVXBsb2FkczogRlVwbG9hZFtdLCB7IGdldFByb2dyZXNzVXBkYXRlQ2FsbGJhY2ssIG9uU2luZ2xlU3VjY2Vzcywgb25TaW5nbGVGYWlsdXJlIH06IFVwbG9hZENhbGxiYWNrcykgPT4ge1xuICAgICAgc2V0VXBsb2FkaW5nKHRydWUpO1xuXG4gICAgICBjb25zdCB0YXNrczogT2JzZXJ2YWJsZTxib29sZWFuPltdID0gW107XG5cbiAgICAgIGZpbGVVcGxvYWRzLmZvckVhY2goKGZpbGVVcGxvYWQpID0+IHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgICAgLmFkZEN1c3RvbVByb2JlVGVtcGxhdGUoXG4gICAgICAgICAgICAgIGZpbGVVcGxvYWQuZmlsZSxcbiAgICAgICAgICAgICAgZ2V0UHJvZ3Jlc3NVcGRhdGVDYWxsYmFjayhmaWxlVXBsb2FkLmZpbGUubmFtZSksXG4gICAgICAgICAgICAgIGZpbGVVcGxvYWQuYWJvcnRTaWduYWxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICBvblNpbmdsZVN1Y2Nlc3MoZmlsZVVwbG9hZC5maWxlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9uU2luZ2xlRmFpbHVyZShmaWxlVXBsb2FkLmZpbGUubmFtZSwgZXJyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoXykgPT4gb2YoZmFsc2UpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgZm9ya0pvaW4odGFza3MpXG4gICAgICAgICAgLnBpcGUoZGVmYXVsdElmRW1wdHkoW3RydWVdKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChva3MpID0+IHtcbiAgICAgICAgICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRBbGxPa3Mob2tzLnJlZHVjZSgocHJldiwgY3VyciwgXykgPT4gcHJldiAmJiBjdXJyLCB0cnVlKSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaSwgc2V0QWxsT2tzLCBzZXRVcGxvYWRpbmddXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN1Ym1pdFJlZi5jdXJyZW50ICYmIHN1Ym1pdFJlZi5jdXJyZW50LmNsaWNrKCk7XG4gIH0sIFtzdWJtaXRSZWZdKTtcblxuICBjb25zdCBvbkZpbGVzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVVcGxvYWRzOiBGVXBsb2FkW10pID0+IHtcbiAgICAgIHNldEFsbE9rcyghZmlsZVVwbG9hZHMuc29tZSgoZikgPT4gIWYucHJvZ3Jlc3MgfHwgZi5wcm9ncmVzcy5wcm9ncmVzc1ZhcmlhbnQgIT09ICdzdWNjZXNzJykpO1xuICAgICAgc2V0TnVtT2ZGaWxlcyhmaWxlVXBsb2Fkcy5sZW5ndGgpO1xuICAgIH0sXG4gICAgW3NldE51bU9mRmlsZXMsIHNldEFsbE9rc11cbiAgKTtcblxuICBjb25zdCBzdWJtaXRCdXR0b25Mb2FkaW5nUHJvcHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBzcGlubmVyQXJpYVZhbHVlVGV4dDogJ1N1Ym1pdHRpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnc3VibWl0dGluZy1wcm9iZS10ZW1wbGF0ZScsXG4gICAgICAgIGlzTG9hZGluZzogdXBsb2FkaW5nLFxuICAgICAgfSBhcyBMb2FkaW5nUHJvcHNUeXBlKSxcbiAgICBbdXBsb2FkaW5nXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBhcHBlbmRUbz17cG9ydGFsUm9vdH1cbiAgICAgIGlzT3Blbj17cHJvcHMuaXNPcGVufVxuICAgICAgdmFyaWFudD17TW9kYWxWYXJpYW50LmxhcmdlfVxuICAgICAgc2hvd0Nsb3NlPXt0cnVlfVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICB0aXRsZT1cIkNyZWF0ZSBDdXN0b20gUHJvYmUgVGVtcGxhdGVcIlxuICAgICAgZGVzY3JpcHRpb249XCJDcmVhdGUgYSBjdXN0b21pemVkIHByb2JlIHRlbXBsYXRlLiBUaGlzIGlzIGEgc3BlY2lhbGl6ZWQgWE1MIGZpbGUgdHlwaWNhbGx5IGNyZWF0ZWQgdXNpbmcgSkRLIE1pc3Npb24gQ29udHJvbCwgd2hpY2ggZGVmaW5lcyBhIHNldCBvZiBldmVudHMgdG8gaW5qZWN0IGFuZCB0aGVpciBvcHRpb25zIHRvIGNvbmZpZ3VyZS5cIlxuICAgID5cbiAgICAgIDxGb3JtPlxuICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPVwiVGVtcGxhdGUgWE1MXCIgaXNSZXF1aXJlZCBmaWVsZElkPVwidGVtcGxhdGVcIj5cbiAgICAgICAgICA8TXVsdGlGaWxlVXBsb2FkXG4gICAgICAgICAgICBzdWJtaXRSZWY9e3N1Ym1pdFJlZn1cbiAgICAgICAgICAgIGFib3J0UmVmPXthYm9ydFJlZn1cbiAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nfVxuICAgICAgICAgICAgZGlzcGxheUFjY2VwdHM9e1snWE1MJ119XG4gICAgICAgICAgICBvbkZpbGVTdWJtaXQ9e29uRmlsZVN1Ym1pdH1cbiAgICAgICAgICAgIG9uRmlsZXNDaGFuZ2U9e29uRmlsZXNDaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICAgIDxBY3Rpb25Hcm91cD5cbiAgICAgICAgICB7YWxsT2tzICYmIG51bU9mRmlsZXMgPyAoXG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PlxuICAgICAgICAgICAgICBDbG9zZVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9eyFudW1PZkZpbGVzIHx8IHVwbG9hZGluZ31cbiAgICAgICAgICAgICAgICB7Li4uc3VibWl0QnV0dG9uTG9hZGluZ1Byb3BzfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU3VibWl0XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PlxuICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQWN0aW9uR3JvdXA+XG4gICAgICA8L0Zvcm0+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRUZW1wbGF0ZUFjdGlvblByb3BzIHtcbiAgdGVtcGxhdGU6IFByb2JlVGVtcGxhdGU7XG4gIG9uSW5zZXJ0PzogKHRlbXBsYXRlOiBQcm9iZVRlbXBsYXRlKSA9PiB2b2lkO1xuICBvbkRlbGV0ZTogKHRlbXBsYXRlOiBQcm9iZVRlbXBsYXRlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQWdlbnRUZW1wbGF0ZUFjdGlvbjogUmVhY3QuRkM8QWdlbnRUZW1wbGF0ZUFjdGlvblByb3BzPiA9ICh7IG9uSW5zZXJ0LCBvbkRlbGV0ZSwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGFjdGlvbkl0ZW1zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnaW5zZXJ0LXRlbXBsYXRlJyxcbiAgICAgICAgdGl0bGU6ICdJbnNlcnQgUHJvYmVzLi4uJyxcbiAgICAgICAgb25DbGljazogKCkgPT4gb25JbnNlcnQgJiYgb25JbnNlcnQocHJvcHMudGVtcGxhdGUpLFxuICAgICAgICBpc0Rpc2FibGVkOiAhb25JbnNlcnQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdkZWxldGUtdGVtcGxhdGUnLFxuICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uRGVsZXRlKHByb3BzLnRlbXBsYXRlKSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSwgW29uSW5zZXJ0LCBvbkRlbGV0ZSwgcHJvcHMudGVtcGxhdGVdKTtcblxuICByZXR1cm4gKFxuICAgIDxEcm9wZG93blxuICAgICAgaXNQbGFpblxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICB0b2dnbGU9ezxLZWJhYlRvZ2dsZSBpZD1cInByb2JlLXRlbXBsYXRlLXRvZ2dsZS1rZWJhYlwiIG9uVG9nZ2xlPXtzZXRJc09wZW59IC8+fVxuICAgICAgbWVudUFwcGVuZFRvPXtkb2N1bWVudC5ib2R5fVxuICAgICAgcG9zaXRpb249e0Ryb3Bkb3duUG9zaXRpb24ucmlnaHR9XG4gICAgICBpc0ZsaXBFbmFibGVkXG4gICAgICBkcm9wZG93bkl0ZW1zPXthY3Rpb25JdGVtcy5tYXAoKGFjdGlvbikgPT4gKFxuICAgICAgICA8RHJvcGRvd25JdGVtXG4gICAgICAgICAga2V5PXthY3Rpb24ua2V5fVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICBhY3Rpb24ub25DbGljaygpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgaXNEaXNhYmxlZD17YWN0aW9uLmlzRGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICB7YWN0aW9uLnRpdGxlfVxuICAgICAgICA8L0Ryb3Bkb3duSXRlbT5cbiAgICAgICkpfVxuICAgIC8+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBDcmVhdGVSZWNvcmRpbmdQcm9wcyB9IGZyb20gJ0BhcHAvQ3JlYXRlUmVjb3JkaW5nL0NyZWF0ZVJlY29yZGluZyc7XG5pbXBvcnQgeyBhdXRoRmFpbE1lc3NhZ2UsIEVycm9yVmlldywgaXNBdXRoRmFpbCB9IGZyb20gJ0BhcHAvRXJyb3JWaWV3L0Vycm9yVmlldyc7XG5pbXBvcnQgeyBMb2FkaW5nVmlldyB9IGZyb20gJ0BhcHAvTG9hZGluZ1ZpZXcvTG9hZGluZ1ZpZXcnO1xuaW1wb3J0IHsgRGVsZXRlV2FybmluZ01vZGFsIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nTW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdVdGlscyc7XG5pbXBvcnQgeyBGVXBsb2FkLCBNdWx0aUZpbGVVcGxvYWQsIFVwbG9hZENhbGxiYWNrcyB9IGZyb20gJ0BhcHAvU2hhcmVkL0ZpbGVVcGxvYWRzJztcbmltcG9ydCB7IExvYWRpbmdQcm9wc1R5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9ncmVzc0luZGljYXRvcic7XG5pbXBvcnQgeyBFdmVudFRlbXBsYXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnkgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Ob3RpZmljYXRpb25DaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBOT19UQVJHRVQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHBvcnRhbFJvb3QsIHNvcnRSZXNvdXJjZXMsIFRhYmxlQ29sdW1uIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBBY3Rpb25Hcm91cCxcbiAgQnV0dG9uLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRm9ybSxcbiAgRm9ybUdyb3VwLFxuICBNb2RhbCxcbiAgTW9kYWxWYXJpYW50LFxuICBUZXh0SW5wdXQsXG4gIFRpdGxlLFxuICBUb29sYmFyLFxuICBUb29sYmFyQ29udGVudCxcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uLCBVcGxvYWRJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uc0NvbHVtbixcbiAgSUFjdGlvbixcbiAgSVNvcnRCeSxcbiAgU29ydEJ5RGlyZWN0aW9uLFxuICBUYWJsZUNvbXBvc2FibGUsXG4gIFRhYmxlVmFyaWFudCxcbiAgVGJvZHksXG4gIFRkLFxuICBUaCxcbiAgVGhlYWQsXG4gIFRoUHJvcHMsXG4gIFRyLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5IH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZGVmYXVsdElmRW1wdHksIGZpbHRlciwgZmlyc3QsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuY29uc3QgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW1xuICB7XG4gICAgdGl0bGU6ICdOYW1lJyxcbiAgICBrZXlQYXRoczogWyduYW1lJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0Rlc2NyaXB0aW9uJyxcbiAgICBrZXlQYXRoczogWydkZXNjcmlwdGlvbiddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdQcm92aWRlcicsXG4gICAga2V5UGF0aHM6IFsncHJvdmlkZXInXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVHlwZScsXG4gICAga2V5UGF0aHM6IFsndHlwZSddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFRlbXBsYXRlc1Byb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBFdmVudFRlbXBsYXRlczogUmVhY3QuRkM8RXZlbnRUZW1wbGF0ZXNQcm9wcz4gPSAoXykgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG5cbiAgY29uc3QgW3RlbXBsYXRlcywgc2V0VGVtcGxhdGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIEV2ZW50VGVtcGxhdGVbXSk7XG4gIGNvbnN0IFtmaWx0ZXJlZFRlbXBsYXRlcywgc2V0RmlsdGVyZWRUZW1wbGF0ZXNdID0gUmVhY3QudXNlU3RhdGUoW10gYXMgRXZlbnRUZW1wbGF0ZVtdKTtcbiAgY29uc3QgW2ZpbHRlclRleHQsIHNldEZpbHRlclRleHRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbd2FybmluZ01vZGFsT3Blbiwgc2V0V2FybmluZ01vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt1cGxvYWRNb2RhbE9wZW4sIHNldFVwbG9hZE1vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSBSZWFjdC51c2VTdGF0ZSh7fSBhcyBJU29ydEJ5KTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3RlbXBsYXRlVG9EZWxldGUsIHNldFRlbXBsYXRlVG9EZWxldGVdID0gUmVhY3QudXNlU3RhdGU8RXZlbnRUZW1wbGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IGdldFNvcnRQYXJhbXMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY29sdW1uSW5kZXg6IG51bWJlcik6IFRoUHJvcHNbJ3NvcnQnXSA9PiAoe1xuICAgICAgc29ydEJ5OiBzb3J0QnksXG4gICAgICBvblNvcnQ6IChfZXZlbnQsIGluZGV4LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgc2V0U29ydEJ5KHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgIH0pLFxuICAgIFtzb3J0QnksIHNldFNvcnRCeV1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBmaWx0ZXJlZDogRXZlbnRUZW1wbGF0ZVtdO1xuICAgIGlmICghZmlsdGVyVGV4dCkge1xuICAgICAgZmlsdGVyZWQgPSB0ZW1wbGF0ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZ0ID0gZmlsdGVyVGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGZpbHRlcmVkID0gdGVtcGxhdGVzLmZpbHRlcihcbiAgICAgICAgKHQ6IEV2ZW50VGVtcGxhdGUpID0+XG4gICAgICAgICAgdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnQpIHx8XG4gICAgICAgICAgdC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZ0KSB8fFxuICAgICAgICAgIHQucHJvdmlkZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmdClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0RmlsdGVyZWRUZW1wbGF0ZXMoXG4gICAgICBzb3J0UmVzb3VyY2VzKFxuICAgICAgICB7XG4gICAgICAgICAgaW5kZXg6IHNvcnRCeS5pbmRleCA/PyAwLFxuICAgICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJlZCxcbiAgICAgICAgdGFibGVDb2x1bW5zXG4gICAgICApXG4gICAgKTtcbiAgfSwgW2ZpbHRlclRleHQsIHRlbXBsYXRlcywgc29ydEJ5XSk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRlbXBsYXRlcykgPT4ge1xuICAgICAgc2V0VGVtcGxhdGVzKHRlbXBsYXRlcyk7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICB9LFxuICAgIFtzZXRUZW1wbGF0ZXMsIHNldElzTG9hZGluZywgc2V0RXJyb3JNZXNzYWdlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUVycm9yID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH0sXG4gICAgW3NldElzTG9hZGluZywgc2V0RXJyb3JNZXNzYWdlXVxuICApO1xuXG4gIGNvbnN0IHJlZnJlc2hUZW1wbGF0ZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0XG4gICAgICAgIC50YXJnZXQoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0ICE9PSBOT19UQVJHRVQpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgY29uY2F0TWFwKCh0YXJnZXQpID0+XG4gICAgICAgICAgICBjb250ZXh0LmFwaS5kb0dldDxFdmVudFRlbXBsYXRlW10+KGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vdGVtcGxhdGVzYClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogaGFuZGxlVGVtcGxhdGVzLFxuICAgICAgICAgIGVycm9yOiBoYW5kbGVFcnJvcixcbiAgICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaSwgY29udGV4dC50YXJnZXQsIHNldElzTG9hZGluZywgaGFuZGxlVGVtcGxhdGVzLCBoYW5kbGVFcnJvcl0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC50YXJnZXQudGFyZ2V0KCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgc2V0RmlsdGVyVGV4dCgnJyk7XG4gICAgICAgIHJlZnJlc2hUZW1wbGF0ZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2NvbnRleHQudGFyZ2V0LCBhZGRTdWJzY3JpcHRpb24sIHJlZnJlc2hUZW1wbGF0ZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbFxuICAgICAgICAubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuVGVtcGxhdGVVcGxvYWRlZClcbiAgICAgICAgLnN1YnNjcmliZSgodikgPT4gc2V0VGVtcGxhdGVzKChvbGQpID0+IG9sZC5jb25jYXQodi5tZXNzYWdlLnRlbXBsYXRlKSkpXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRUZW1wbGF0ZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbFxuICAgICAgICAubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuVGVtcGxhdGVEZWxldGVkKVxuICAgICAgICAuc3Vic2NyaWJlKCh2KSA9PlxuICAgICAgICAgIHNldFRlbXBsYXRlcygob2xkKSA9PlxuICAgICAgICAgICAgb2xkLmZpbHRlcigobykgPT4gby5uYW1lICE9IHYubWVzc2FnZS50ZW1wbGF0ZS5uYW1lIHx8IG8udHlwZSAhPSB2Lm1lc3NhZ2UudGVtcGxhdGUudHlwZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHNldFRlbXBsYXRlc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gcmVmcmVzaFRlbXBsYXRlcygpLFxuICAgICAgY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFBlcmlvZCgpICogY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaFVuaXRzKClcbiAgICApO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpZCk7XG4gIH0sIFtjb250ZXh0LnNldHRpbmdzLCByZWZyZXNoVGVtcGxhdGVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldC5hdXRoRmFpbHVyZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHNldEVycm9yTWVzc2FnZShhdXRoRmFpbE1lc3NhZ2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldCwgc2V0RXJyb3JNZXNzYWdlXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHQ6IEV2ZW50VGVtcGxhdGUpID0+IHtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgY29udGV4dC5hcGlcbiAgICAgICAgICAuZGVsZXRlQ3VzdG9tRXZlbnRUZW1wbGF0ZSh0Lm5hbWUpXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHVuZGVmaW5lZCAvKiBkbyBub3RoaW5nIC0gbm90aWZpY2F0aW9uIHdpbGwgaGFuZGxlIHVwZGF0aW5nIHN0YXRlICovKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUJ1dHRvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0OiBFdmVudFRlbXBsYXRlKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC5zZXR0aW5ncy5kZWxldGlvbkRpYWxvZ3NFbmFibGVkRm9yKERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUV2ZW50VGVtcGxhdGVzKSkge1xuICAgICAgICBzZXRUZW1wbGF0ZVRvRGVsZXRlKHQpO1xuICAgICAgICBzZXRXYXJuaW5nTW9kYWxPcGVuKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlRGVsZXRlKHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbnRleHQuc2V0dGluZ3MsIHNldFdhcm5pbmdNb2RhbE9wZW4sIHNldFRlbXBsYXRlVG9EZWxldGUsIGhhbmRsZURlbGV0ZV1cbiAgKTtcblxuICBjb25zdCBhY3Rpb25zUmVzb2x2ZXIgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodDogRXZlbnRUZW1wbGF0ZSkgPT4ge1xuICAgICAgbGV0IGFjdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0NyZWF0ZSBSZWNvcmRpbmcuLi4nLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+XG4gICAgICAgICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICAgICAgICBwYXRobmFtZTogJy9yZWNvcmRpbmdzL2NyZWF0ZScsXG4gICAgICAgICAgICAgIHN0YXRlOiB7IHRlbXBsYXRlTmFtZTogdC5uYW1lLCB0ZW1wbGF0ZVR5cGU6IHQudHlwZSB9IGFzIENyZWF0ZVJlY29yZGluZ1Byb3BzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICBdIGFzIElBY3Rpb25bXTtcblxuICAgICAgaWYgKHQubmFtZSAhPT0gJ0FMTCcgfHwgdC50eXBlICE9PSAnVEFSR0VUJykge1xuICAgICAgICBhY3Rpb25zID0gYWN0aW9ucy5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnRG93bmxvYWQnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4gY29udGV4dC5hcGkuZG93bmxvYWRUZW1wbGF0ZSh0KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIGlmICh0LnR5cGUgPT09ICdDVVNUT00nKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBoYW5kbGVEZWxldGVCdXR0b24odCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9LFxuICAgIFtjb250ZXh0LmFwaSwgaGlzdG9yeSwgaGFuZGxlRGVsZXRlQnV0dG9uXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZE1vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VXBsb2FkTW9kYWxPcGVuKGZhbHNlKTtcbiAgfSwgW3NldFVwbG9hZE1vZGFsT3Blbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZE1vZGFsT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRVcGxvYWRNb2RhbE9wZW4odHJ1ZSk7XG4gIH0sIFtzZXRVcGxvYWRNb2RhbE9wZW5dKTtcblxuICBjb25zdCB0ZW1wbGF0ZVJvd3MgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBmaWx0ZXJlZFRlbXBsYXRlcy5tYXAoKHQ6IEV2ZW50VGVtcGxhdGUsIGluZGV4KSA9PiAoXG4gICAgICAgIDxUciBrZXk9e2BldmVudC10ZW1wbGF0ZS0ke2luZGV4fWB9PlxuICAgICAgICAgIDxUZCBrZXk9e2BldmVudC10ZW1wbGF0ZS1uYW1lLSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMF0udGl0bGV9PlxuICAgICAgICAgICAge3QubmFtZX1cbiAgICAgICAgICA8L1RkPlxuICAgICAgICAgIDxUZCBrZXk9e2BldmVudC10ZW1wbGF0ZS1kZXNjcmlwdGlvbi0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzFdLnRpdGxlfT5cbiAgICAgICAgICAgIHt0LmRlc2NyaXB0aW9ufVxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgICAgPFRkIGtleT17YGV2ZW50LXRlbXBsYXRlLXByb3ZpZGVyLSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMl0udGl0bGV9PlxuICAgICAgICAgICAge3QucHJvdmlkZXJ9XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgICA8VGQga2V5PXtgZXZlbnQtdGVtcGxhdGUtdHlwZS0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzNdLnRpdGxlfT5cbiAgICAgICAgICAgIHt0LnR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0LnR5cGUuc2xpY2UoMSkudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICA8L1RkPlxuICAgICAgICAgIDxUZCBrZXk9e2BldmVudC10ZW1wbGF0ZS1hY3Rpb24tJHtpbmRleH1gfSBpc0FjdGlvbkNlbGwgc3R5bGU9e3sgcGFkZGluZ1JpZ2h0OiAnMCcgfX0+XG4gICAgICAgICAgICA8QWN0aW9uc0NvbHVtbiBpdGVtcz17YWN0aW9uc1Jlc29sdmVyKHQpfSAvPlxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgIDwvVHI+XG4gICAgICApKSxcbiAgICBbYWN0aW9uc1Jlc29sdmVyLCBmaWx0ZXJlZFRlbXBsYXRlc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVXYXJuaW5nTW9kYWxBY2NlcHQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRlbXBsYXRlVG9EZWxldGUpIHtcbiAgICAgIGhhbmRsZURlbGV0ZSh0ZW1wbGF0ZVRvRGVsZXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gdGVtcGxhdGUgdG8gZGVsZXRlJyk7XG4gICAgfVxuICB9LCBbaGFuZGxlRGVsZXRlLCB0ZW1wbGF0ZVRvRGVsZXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlV2FybmluZ01vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0V2FybmluZ01vZGFsT3BlbihmYWxzZSk7XG4gIH0sIFtzZXRXYXJuaW5nTW9kYWxPcGVuXSk7XG5cbiAgY29uc3QgYXV0aFJldHJ5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnRleHQudGFyZ2V0LnNldEF1dGhSZXRyeSgpO1xuICB9LCBbY29udGV4dC50YXJnZXRdKTtcblxuICBpZiAoZXJyb3JNZXNzYWdlICE9ICcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvclZpZXdcbiAgICAgICAgdGl0bGU9eydFcnJvciByZXRyaWV2aW5nIGV2ZW50IHRlbXBsYXRlcyd9XG4gICAgICAgIG1lc3NhZ2U9e2Vycm9yTWVzc2FnZX1cbiAgICAgICAgcmV0cnk9e2lzQXV0aEZhaWwoZXJyb3JNZXNzYWdlKSA/IGF1dGhSZXRyeSA6IHVuZGVmaW5lZH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICByZXR1cm4gPExvYWRpbmdWaWV3IC8+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8VG9vbGJhciBpZD1cImV2ZW50LXRlbXBsYXRlcy10b29sYmFyXCI+XG4gICAgICAgICAgPFRvb2xiYXJDb250ZW50PlxuICAgICAgICAgICAgPFRvb2xiYXJHcm91cCB2YXJpYW50PVwiZmlsdGVyLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICBuYW1lPVwidGVtcGxhdGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZW1wbGF0ZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyLi4uXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFdmVudCB0ZW1wbGF0ZSBmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlclRleHR9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZmlsdGVyVGV4dH1cbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2Vycm9yTWVzc2FnZSAhPSAnJ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJpY29uLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJVcGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVVcGxvYWRNb2RhbE9wZW59XG4gICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtlcnJvck1lc3NhZ2UgIT0gJyd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFVwbG9hZEljb24gLz5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgPERlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICAgICAgICB3YXJuaW5nVHlwZT17RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlRXZlbnRUZW1wbGF0ZXN9XG4gICAgICAgICAgICAgIHZpc2libGU9e3dhcm5pbmdNb2RhbE9wZW59XG4gICAgICAgICAgICAgIG9uQWNjZXB0PXtoYW5kbGVXYXJuaW5nTW9kYWxBY2NlcHR9XG4gICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZVdhcm5pbmdNb2RhbENsb3NlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1Rvb2xiYXJDb250ZW50PlxuICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICAgIHt0ZW1wbGF0ZVJvd3MubGVuZ3RoID8gKFxuICAgICAgICAgIDxUYWJsZUNvbXBvc2FibGUgYXJpYS1sYWJlbD1cIkV2ZW50IFRlbXBsYXRlcyBUYWJsZVwiIHZhcmlhbnQ9e1RhYmxlVmFyaWFudC5jb21wYWN0fT5cbiAgICAgICAgICAgIDxUaGVhZD5cbiAgICAgICAgICAgICAgPFRyPlxuICAgICAgICAgICAgICAgIHt0YWJsZUNvbHVtbnMubWFwKCh7IHRpdGxlLCBzb3J0YWJsZSB9LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRoIGtleT17YGV2ZW50LXRlbXBsYXRlLWhlYWRlci0ke3RpdGxlfWB9IHNvcnQ9e3NvcnRhYmxlID8gZ2V0U29ydFBhcmFtcyhpbmRleCkgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICA8L1RoPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RyPlxuICAgICAgICAgICAgPC9UaGVhZD5cbiAgICAgICAgICAgIDxUYm9keT57dGVtcGxhdGVSb3dzfTwvVGJvZHk+XG4gICAgICAgICAgPC9UYWJsZUNvbXBvc2FibGU+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9XCJoNFwiIHNpemU9XCJsZ1wiPlxuICAgICAgICAgICAgICBObyBFdmVudCBUZW1wbGF0ZXNcbiAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgPC9FbXB0eVN0YXRlPlxuICAgICAgICApfVxuICAgICAgICA8RXZlbnRUZW1wbGF0ZXNVcGxvYWRNb2RhbCBpc09wZW49e3VwbG9hZE1vZGFsT3Blbn0gb25DbG9zZT17aGFuZGxlVXBsb2FkTW9kYWxDbG9zZX0gLz5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRUZW1wbGF0ZXNVcGxvYWRNb2RhbFByb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgRXZlbnRUZW1wbGF0ZXNVcGxvYWRNb2RhbDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8RXZlbnRUZW1wbGF0ZXNVcGxvYWRNb2RhbFByb3BzPiA9ICh7XG4gIG9uQ2xvc2UsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBzdWJtaXRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpOyAvLyBVc2UgcmVmIHRvIHJlZmVyIHRvIHN1Ym1pdCB0cmlnZ2VyIGRpdlxuICBjb25zdCBhYm9ydFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7IC8vIFVzZSByZWYgdG8gcmVmZXIgdG8gYWJvcnQgdHJpZ2dlciBkaXZcblxuICBjb25zdCBbbnVtT2ZGaWxlcywgc2V0TnVtT2ZGaWxlc10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2FsbE9rcywgc2V0QWxsT2tzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3VwbG9hZGluZywgc2V0VXBsb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCByZXNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXROdW1PZkZpbGVzKDApO1xuICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gIH0sIFtzZXROdW1PZkZpbGVzLCBzZXRVcGxvYWRpbmddKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXBsb2FkaW5nKSB7XG4gICAgICBhYm9ydFJlZi5jdXJyZW50ICYmIGFib3J0UmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXQoKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFt1cGxvYWRpbmcsIGFib3J0UmVmLCByZXNldCwgb25DbG9zZV0pO1xuXG4gIGNvbnN0IG9uRmlsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChmaWxlVXBsb2FkczogRlVwbG9hZFtdLCB7IGdldFByb2dyZXNzVXBkYXRlQ2FsbGJhY2ssIG9uU2luZ2xlU3VjY2Vzcywgb25TaW5nbGVGYWlsdXJlIH06IFVwbG9hZENhbGxiYWNrcykgPT4ge1xuICAgICAgc2V0VXBsb2FkaW5nKHRydWUpO1xuXG4gICAgICBjb25zdCB0YXNrczogT2JzZXJ2YWJsZTxib29sZWFuPltdID0gW107XG5cbiAgICAgIGZpbGVVcGxvYWRzLmZvckVhY2goKGZpbGVVcGxvYWQpID0+IHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgICAgLmFkZEN1c3RvbUV2ZW50VGVtcGxhdGUoXG4gICAgICAgICAgICAgIGZpbGVVcGxvYWQuZmlsZSxcbiAgICAgICAgICAgICAgZ2V0UHJvZ3Jlc3NVcGRhdGVDYWxsYmFjayhmaWxlVXBsb2FkLmZpbGUubmFtZSksXG4gICAgICAgICAgICAgIGZpbGVVcGxvYWQuYWJvcnRTaWduYWxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICBvblNpbmdsZVN1Y2Nlc3MoZmlsZVVwbG9hZC5maWxlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9uU2luZ2xlRmFpbHVyZShmaWxlVXBsb2FkLmZpbGUubmFtZSwgZXJyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoXykgPT4gb2YoZmFsc2UpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgZm9ya0pvaW4odGFza3MpXG4gICAgICAgICAgLnBpcGUoZGVmYXVsdElmRW1wdHkoW3RydWVdKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChva3MpID0+IHtcbiAgICAgICAgICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRBbGxPa3Mob2tzLnJlZHVjZSgocHJldiwgY3VyciwgXykgPT4gcHJldiAmJiBjdXJyLCB0cnVlKSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LmFwaSwgc2V0VXBsb2FkaW5nLCBzZXRBbGxPa3NdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN1Ym1pdFJlZi5jdXJyZW50ICYmIHN1Ym1pdFJlZi5jdXJyZW50LmNsaWNrKCk7XG4gIH0sIFtzdWJtaXRSZWZdKTtcblxuICBjb25zdCBvbkZpbGVzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVVcGxvYWRzOiBGVXBsb2FkW10pID0+IHtcbiAgICAgIHNldEFsbE9rcyghZmlsZVVwbG9hZHMuc29tZSgoZikgPT4gIWYucHJvZ3Jlc3MgfHwgZi5wcm9ncmVzcy5wcm9ncmVzc1ZhcmlhbnQgIT09ICdzdWNjZXNzJykpO1xuICAgICAgc2V0TnVtT2ZGaWxlcyhmaWxlVXBsb2Fkcy5sZW5ndGgpO1xuICAgIH0sXG4gICAgW3NldE51bU9mRmlsZXMsIHNldEFsbE9rc11cbiAgKTtcblxuICBjb25zdCBzdWJtaXRCdXR0b25Mb2FkaW5nUHJvcHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBzcGlubmVyQXJpYVZhbHVlVGV4dDogJ1N1Ym1pdHRpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnc3VibWl0dGluZy1jdXN0b20tZXZlbnQtdGVtcGxhdGUnLFxuICAgICAgICBpc0xvYWRpbmc6IHVwbG9hZGluZyxcbiAgICAgIH0gYXMgTG9hZGluZ1Byb3BzVHlwZSksXG4gICAgW3VwbG9hZGluZ11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICBpc09wZW49e3Byb3BzLmlzT3Blbn1cbiAgICAgIHZhcmlhbnQ9e01vZGFsVmFyaWFudC5sYXJnZX1cbiAgICAgIHNob3dDbG9zZT17dHJ1ZX1cbiAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxuICAgICAgdGl0bGU9XCJDcmVhdGUgQ3VzdG9tIEV2ZW50IFRlbXBsYXRlXCJcbiAgICAgIGRlc2NyaXB0aW9uPVwiQ3JlYXRlIGEgY3VzdG9taXplZCBldmVudCB0ZW1wbGF0ZS4gVGhpcyBpcyBhIHNwZWNpYWxpemVkIFhNTCBmaWxlIHdpdGggdGhlIGV4dGVuc2lvbiAuamZjLCB0eXBpY2FsbHkgY3JlYXRlZCB1c2luZyBKREsgTWlzc2lvbiBDb250cm9sLCB3aGljaCBkZWZpbmVzIGEgc2V0IG9mIGV2ZW50cyBhbmQgdGhlaXIgb3B0aW9ucyB0byBjb25maWd1cmUuIE5vdCBhbGwgY3VzdG9taXplZCB0ZW1wbGF0ZXMgYXJlIGFwcGxpY2FibGUgdG8gYWxsIHRhcmdldHMgLS0gYSB0ZW1wbGF0ZSBtYXkgc3BlY2lmeSBhIGN1c3RvbSBhcHBsaWNhdGlvbiBldmVudCB0eXBlLCB3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0YXJnZXRzIHJ1bm5pbmcgdGhlIGFzc29jaWF0ZWQgYXBwbGljYXRpb24uXCJcbiAgICA+XG4gICAgICA8Rm9ybT5cbiAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD1cIlRlbXBsYXRlIFhNTFwiIGlzUmVxdWlyZWQgZmllbGRJZD1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgPE11bHRpRmlsZVVwbG9hZFxuICAgICAgICAgICAgc3VibWl0UmVmPXtzdWJtaXRSZWZ9XG4gICAgICAgICAgICBhYm9ydFJlZj17YWJvcnRSZWZ9XG4gICAgICAgICAgICB1cGxvYWRpbmc9e3VwbG9hZGluZ31cbiAgICAgICAgICAgIGRpc3BsYXlBY2NlcHRzPXtbJ1hNTCcsICdKRkMnXX1cbiAgICAgICAgICAgIG9uRmlsZVN1Ym1pdD17b25GaWxlU3VibWl0fVxuICAgICAgICAgICAgb25GaWxlc0NoYW5nZT17b25GaWxlc0NoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgPEFjdGlvbkdyb3VwPlxuICAgICAgICAgIHthbGxPa3MgJiYgbnVtT2ZGaWxlcyA/IChcbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+XG4gICAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17IW51bU9mRmlsZXMgfHwgdXBsb2FkaW5nfVxuICAgICAgICAgICAgICAgIHsuLi5zdWJtaXRCdXR0b25Mb2FkaW5nUHJvcHN9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dXBsb2FkaW5nID8gJ1N1Ym1pdHRpbmcnIDogJ1N1Ym1pdCd9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJsaW5rXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PlxuICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQWN0aW9uR3JvdXA+XG4gICAgICA8L0Zvcm0+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IGF1dGhGYWlsTWVzc2FnZSwgRXJyb3JWaWV3LCBpc0F1dGhGYWlsIH0gZnJvbSAnQGFwcC9FcnJvclZpZXcvRXJyb3JWaWV3JztcbmltcG9ydCB7IExvYWRpbmdWaWV3IH0gZnJvbSAnQGFwcC9Mb2FkaW5nVmlldy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IE5PX1RBUkdFVCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1RhcmdldC5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBoYXNoQ29kZSwgc29ydFJlc291cmNlcywgVGFibGVDb2x1bW4gfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIFRvb2xiYXIsXG4gIFRvb2xiYXJDb250ZW50LFxuICBUb29sYmFySXRlbSxcbiAgVG9vbGJhckl0ZW1WYXJpYW50LFxuICBQYWdpbmF0aW9uLFxuICBUZXh0SW5wdXQsXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVJY29uLFxuICBUaXRsZSxcbiAgVGV4dCxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgRXhwYW5kYWJsZVJvd0NvbnRlbnQsXG4gIFNvcnRCeURpcmVjdGlvbixcbiAgVGFibGVDb21wb3NhYmxlLFxuICBUYWJsZVZhcmlhbnQsXG4gIFRib2R5LFxuICBUZCxcbiAgVGgsXG4gIFRoZWFkLFxuICBUcixcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBmaWx0ZXIsIGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VHlwZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZUlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmdbXTtcbiAgb3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBPcHRpb25EZXNjcmlwdG9yIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25EZXNjcmlwdG9yIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJvd0RhdGEge1xuICBldmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgY2VsbENvbnRlbnRzOiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmNvbnN0IGdldENhdGVnb3J5U3RyaW5nID0gKGV2ZW50VHlwZTogRXZlbnRUeXBlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGV2ZW50VHlwZS5jYXRlZ29yeS5qb2luKCcsICcpLnRyaW0oKTtcbn07XG5cbmNvbnN0IGluY2x1ZGVzU3Vic3RyID0gKGE6IHN0cmluZywgYjogc3RyaW5nKSA9PiAhIWEgJiYgISFiICYmIGEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhiLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW1xuICB7XG4gICAgdGl0bGU6ICdOYW1lJyxcbiAgICBrZXlQYXRoczogWyduYW1lJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1R5cGUgSUQnLFxuICAgIGtleVBhdGhzOiBbJ3R5cGVJZCddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdEZXNjcmlwdGlvbicsXG4gICAga2V5UGF0aHM6IFsnZGVzY3JpcHRpb24nXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ2F0ZWdvcmllcycsXG4gICAga2V5UGF0aHM6IFsnY2F0ZWdvcnknXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRUeXBlc1Byb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBFdmVudFR5cGVzOiBSZWFjdC5GQzxFdmVudFR5cGVzUHJvcHM+ID0gKF8pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IHByZXZQZXJQYWdlID0gUmVhY3QudXNlUmVmKDEwKTtcblxuICBjb25zdCBbdHlwZXMsIHNldFR5cGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIEV2ZW50VHlwZVtdKTtcbiAgY29uc3QgW2N1cnJlbnRQYWdlLCBzZXRDdXJyZW50UGFnZV0gPSBSZWFjdC51c2VTdGF0ZSgxKTtcbiAgY29uc3QgW3BlclBhZ2UsIHNldFBlclBhZ2VdID0gUmVhY3QudXNlU3RhdGUoMTApO1xuICBjb25zdCBbb3BlblJvd3MsIHNldE9wZW5Sb3dzXSA9IFJlYWN0LnVzZVN0YXRlPG51bWJlcltdPihbXSk7XG4gIGNvbnN0IFtmaWx0ZXJUZXh0LCBzZXRGaWx0ZXJUZXh0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3NvcnRCeSwgZ2V0U29ydFBhcmFtc10gPSB1c2VTb3J0KCk7XG5cbiAgY29uc3QgaGFuZGxlVHlwZXMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodHlwZXMpID0+IHtcbiAgICAgIHNldFR5cGVzKHR5cGVzKTtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgIH0sXG4gICAgW3NldFR5cGVzLCBzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlKTtcbiAgICB9LFxuICAgIFtzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBjb25zdCByZWZyZXNoRXZlbnRzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldFxuICAgICAgICAudGFyZ2V0KClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCh0YXJnZXQpID0+IHRhcmdldCAhPT0gTk9fVEFSR0VUKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIGNvbmNhdE1hcCgodGFyZ2V0KSA9PlxuICAgICAgICAgICAgY29udGV4dC5hcGkuZG9HZXQ8RXZlbnRUeXBlW10+KGB0YXJnZXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb25uZWN0VXJsKX0vZXZlbnRzYClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogaGFuZGxlVHlwZXMsXG4gICAgICAgICAgZXJyb3I6IGhhbmRsZUVycm9yLFxuICAgICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0LCBjb250ZXh0LmFwaSwgaGFuZGxlVHlwZXMsIGhhbmRsZUVycm9yXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldC50YXJnZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJUZXh0KCcnKTtcbiAgICAgICAgcmVmcmVzaEV2ZW50cygpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0LnRhcmdldCwgcmVmcmVzaEV2ZW50c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQudGFyZ2V0LmF1dGhGYWlsdXJlKCkuc3Vic2NyaWJlKCgpID0+IHNldEVycm9yTWVzc2FnZShhdXRoRmFpbE1lc3NhZ2UpKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0XSk7XG5cbiAgY29uc3QgZmlsdGVyVHlwZXNCeVRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB3aXRoRmlsdGVycyA9ICh0OiBFdmVudFR5cGUpID0+XG4gICAgICBmaWx0ZXJUZXh0ID09PSAnJyB8fFxuICAgICAgaW5jbHVkZXNTdWJzdHIodC5uYW1lLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgaW5jbHVkZXNTdWJzdHIodC50eXBlSWQsIGZpbHRlclRleHQpIHx8XG4gICAgICBpbmNsdWRlc1N1YnN0cih0LmRlc2NyaXB0aW9uLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgaW5jbHVkZXNTdWJzdHIoZ2V0Q2F0ZWdvcnlTdHJpbmcodCksIGZpbHRlclRleHQpO1xuICAgIHJldHVybiBzb3J0UmVzb3VyY2VzKFxuICAgICAge1xuICAgICAgICBpbmRleDogc29ydEJ5LmluZGV4ID8/IDAsXG4gICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgfSxcbiAgICAgIHR5cGVzLmZpbHRlcih3aXRoRmlsdGVycyksXG4gICAgICB0YWJsZUNvbHVtbnNcbiAgICApO1xuICB9LCBbdHlwZXMsIGZpbHRlclRleHQsIHNvcnRCeV0pO1xuXG4gIGNvbnN0IGRpc3BsYXllZFR5cGVSb3dEYXRhID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiBwZXJQYWdlO1xuICAgIGNvbnN0IHZpc2libGVUeXBlcyA9IGZpbHRlclR5cGVzQnlUZXh0LnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgcGVyUGFnZSk7XG5cbiAgICBjb25zdCByb3dzOiBSb3dEYXRhW10gPSBbXTtcbiAgICB2aXNpYmxlVHlwZXMuZm9yRWFjaCgodDogRXZlbnRUeXBlKSA9PiB7XG4gICAgICBsZXQgY2hpbGQgPSAnJztcbiAgICAgIGZvciAoY29uc3Qgb3B0IGluIHQub3B0aW9ucykge1xuICAgICAgICBjaGlsZCArPSBgJHtvcHR9PVske3Qub3B0aW9uc1tvcHRdLmRlZmF1bHRWYWx1ZX1dXFx0YDtcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIGV2ZW50VHlwZTogdCxcbiAgICAgICAgY2VsbENvbnRlbnRzOiBbdC5uYW1lLCB0LnR5cGVJZCwgdC5kZXNjcmlwdGlvbiwgZ2V0Q2F0ZWdvcnlTdHJpbmcodCldLFxuICAgICAgICBpc0V4cGFuZGVkOiBvcGVuUm93cy5zb21lKChpZCkgPT4gaWQgPT09IGhhc2hDb2RlKHQudHlwZUlkKSksXG4gICAgICAgIGNoaWxkcmVuOiA8VGV4dD57Y2hpbGR9PC9UZXh0PixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3M7XG4gIH0sIFtjdXJyZW50UGFnZSwgcGVyUGFnZSwgZmlsdGVyVHlwZXNCeVRleHQsIG9wZW5Sb3dzXSk7XG5cbiAgY29uc3Qgb25DdXJyZW50UGFnZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfLCBjdXJyZW50UGFnZTogbnVtYmVyKSA9PiB7XG4gICAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgfSxcbiAgICBbc2V0Q3VycmVudFBhZ2VdXG4gICk7XG5cbiAgY29uc3Qgb25QZXJQYWdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIHBlclBhZ2U6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiBwcmV2UGVyUGFnZS5jdXJyZW50O1xuICAgICAgcHJldlBlclBhZ2UuY3VycmVudCA9IHBlclBhZ2U7XG4gICAgICBzZXRQZXJQYWdlKHBlclBhZ2UpO1xuICAgICAgc2V0Q3VycmVudFBhZ2UoMSArIE1hdGguZmxvb3Iob2Zmc2V0IC8gcGVyUGFnZSkpO1xuICAgIH0sXG4gICAgW2N1cnJlbnRQYWdlLCBwcmV2UGVyUGFnZSwgc2V0UGVyUGFnZSwgc2V0Q3VycmVudFBhZ2VdXG4gICk7XG5cbiAgY29uc3Qgb25Ub2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodDogRXZlbnRUeXBlKSA9PiB7XG4gICAgICBzZXRPcGVuUm93cygob2xkKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGVJZCA9IGhhc2hDb2RlKHQudHlwZUlkKTtcbiAgICAgICAgaWYgKG9sZC5zb21lKChpZCkgPT4gaWQgPT09IHR5cGVJZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkLmZpbHRlcigoaWQpID0+IGlkICE9PSB0eXBlSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4ub2xkLCB0eXBlSWRdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc2V0T3BlblJvd3NdXG4gICk7XG5cbiAgY29uc3Qgb25GaWx0ZXJUZXh0Q2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbHRlclRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0RmlsdGVyVGV4dChmaWx0ZXJUZXh0KTtcbiAgICAgIHNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH0sXG4gICAgW3NldEZpbHRlclRleHQsIHNldEN1cnJlbnRQYWdlXVxuICApO1xuXG4gIGNvbnN0IGF1dGhSZXRyeSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb250ZXh0LnRhcmdldC5zZXRBdXRoUmV0cnkoKTtcbiAgfSwgW2NvbnRleHQudGFyZ2V0XSk7XG5cbiAgY29uc3QgdHlwZVJvd1BhaXJzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGRpc3BsYXllZFR5cGVSb3dEYXRhLm1hcCgocm93RGF0YTogUm93RGF0YSwgaW5kZXgpID0+IChcbiAgICAgIDxUYm9keSBrZXk9e2BldmVudC10eXBlLXJvdy1wYWlyLSR7aW5kZXh9YH0gaXNFeHBhbmRlZD17cm93RGF0YS5pc0V4cGFuZGVkfT5cbiAgICAgICAgPFRyIGtleT17YGV2ZW50LXR5cGUtJHtpbmRleH1gfT5cbiAgICAgICAgICA8VGRcbiAgICAgICAgICAgIGtleT17YGV2ZW50LXR5cGUtZXhwYW5kYWJsZS0ke2luZGV4fWB9XG4gICAgICAgICAgICBleHBhbmQ9e3tcbiAgICAgICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICBpc0V4cGFuZGVkOiByb3dEYXRhLmlzRXhwYW5kZWQsXG4gICAgICAgICAgICAgIGV4cGFuZElkOiBgZXhwYW5kYWJsZS1ldmVudC10eXBlLXJvdy0ke2luZGV4fWAsXG4gICAgICAgICAgICAgIG9uVG9nZ2xlOiAoKSA9PiBvblRvZ2dsZShyb3dEYXRhLmV2ZW50VHlwZSksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3Jvd0RhdGEuY2VsbENvbnRlbnRzLm1hcCgoY29udGVudCwgaWR4KSA9PiAoXG4gICAgICAgICAgICA8VGQga2V5PXtgZXZlbnQtdHlwZS0ke3RhYmxlQ29sdW1uc1tpZHhdLnRpdGxlfS0ke2lkeH1gfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1tpZHhdLnRpdGxlfT5cbiAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L1RkPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1RyPlxuICAgICAgICA8VHIga2V5PXtgZXZlbnQtdHlwZS0ke2luZGV4fS1leHBhbmRhYmxlLWNoaWxkYH0gaXNFeHBhbmRlZD17cm93RGF0YS5pc0V4cGFuZGVkfT5cbiAgICAgICAgICA8VGQgZGF0YUxhYmVsPVwiZXZlbnQtZGV0YWlsc1wiIGNvbFNwYW49e3RhYmxlQ29sdW1ucy5sZW5ndGh9PlxuICAgICAgICAgICAgPEV4cGFuZGFibGVSb3dDb250ZW50Pntyb3dEYXRhLmNoaWxkcmVufTwvRXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgPC9Ucj5cbiAgICAgIDwvVGJvZHk+XG4gICAgKSk7XG4gIH0sIFtkaXNwbGF5ZWRUeXBlUm93RGF0YSwgb25Ub2dnbGVdKTtcblxuICBpZiAoZXJyb3JNZXNzYWdlICE9ICcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvclZpZXdcbiAgICAgICAgdGl0bGU9eydFcnJvciByZXRyaWV2aW5nIGV2ZW50IHR5cGVzJ31cbiAgICAgICAgbWVzc2FnZT17ZXJyb3JNZXNzYWdlfVxuICAgICAgICByZXRyeT17aXNBdXRoRmFpbChlcnJvck1lc3NhZ2UpID8gYXV0aFJldHJ5IDogdW5kZWZpbmVkfVxuICAgICAgLz5cbiAgICApO1xuICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgIHJldHVybiA8TG9hZGluZ1ZpZXcgLz47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxUb29sYmFyIGlkPVwiZXZlbnQtdHlwZXMtdG9vbGJhclwiPlxuICAgICAgICAgIDxUb29sYmFyQ29udGVudD5cbiAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgIG5hbWU9XCJldmVudEZpbHRlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJldmVudEZpbHRlclwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIuLi5cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFdmVudCBmaWx0ZXJcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkZpbHRlclRleHRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17ZXJyb3JNZXNzYWdlICE9ICcnfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgICAgIDxUb29sYmFySXRlbSB2YXJpYW50PXtUb29sYmFySXRlbVZhcmlhbnQucGFnaW5hdGlvbn0+XG4gICAgICAgICAgICAgIDxQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgaXRlbUNvdW50PXtmaWx0ZXJUeXBlc0J5VGV4dC5sZW5ndGh9XG4gICAgICAgICAgICAgICAgcGFnZT17Y3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAgcGVyUGFnZT17cGVyUGFnZX1cbiAgICAgICAgICAgICAgICBvblNldFBhZ2U9e29uQ3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAgd2lkZ2V0SWQ9XCJldmVudC10eXBlcy1wYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICBvblBlclBhZ2VTZWxlY3Q9e29uUGVyUGFnZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICAgICAgPC9Ub29sYmFyPlxuICAgICAgICB7dHlwZVJvd1BhaXJzLmxlbmd0aCA/IChcbiAgICAgICAgICAvLyBUT0RPIHJlcGxhY2UgdGFibGUgd2l0aCBkYXRhIGxpc3Qgc28gY29sbGFwc2VkIGV2ZW50IG9wdGlvbnMgY2FuIGJlIGN1c3RvbSBmb3JtYXR0ZWRcbiAgICAgICAgICA8VGFibGVDb21wb3NhYmxlIGFyaWEtbGFiZWw9XCJFdmVudCBUeXBlcyBUYWJsZVwiIHZhcmlhbnQ9e1RhYmxlVmFyaWFudC5jb21wYWN0fT5cbiAgICAgICAgICAgIDxUaGVhZD5cbiAgICAgICAgICAgICAgPFRyPlxuICAgICAgICAgICAgICAgIDxUaCAvPlxuICAgICAgICAgICAgICAgIHt0YWJsZUNvbHVtbnMubWFwKCh7IHRpdGxlIH0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGgga2V5PXtgZXZlbnQtdHlwZS1oZWFkZXItJHt0aXRsZX1gfSBzb3J0PXtnZXRTb3J0UGFyYW1zKGluZGV4KX0+XG4gICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICAgIDwvVGg+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgICA8L1RoZWFkPlxuICAgICAgICAgICAge3R5cGVSb3dQYWlyc31cbiAgICAgICAgICA8L1RhYmxlQ29tcG9zYWJsZT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICAgIDxFbXB0eVN0YXRlSWNvbiBpY29uPXtTZWFyY2hJY29ufSAvPlxuICAgICAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImg0XCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgICAgIE5vIEV2ZW50IFR5cGVzXG4gICAgICAgICAgICA8L1RpdGxlPlxuICAgICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEFnZW50TGl2ZVByb2JlcyB9IGZyb20gJ0BhcHAvQWdlbnQvQWdlbnRMaXZlUHJvYmVzJztcbmltcG9ydCB7IEFnZW50UHJvYmVUZW1wbGF0ZXMgfSBmcm9tICdAYXBwL0FnZW50L0FnZW50UHJvYmVUZW1wbGF0ZXMnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBOT19UQVJHRVQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXRWaWV3IH0gZnJvbSAnQGFwcC9UYXJnZXRWaWV3L1RhcmdldFZpZXcnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUYWIsIHN3aXRjaFRhYiB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZEJvZHksIFN0YWNrLCBTdGFja0l0ZW0sIFRhYiwgVGFicywgVG9vbHRpcCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFdmVudFRlbXBsYXRlcyB9IGZyb20gJy4vRXZlbnRUZW1wbGF0ZXMnO1xuaW1wb3J0IHsgRXZlbnRUeXBlcyB9IGZyb20gJy4vRXZlbnRUeXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRzUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IEV2ZW50czogUmVhY3QuRkM8RXZlbnRzUHJvcHM+ID0gKHsgLi4ucHJvcHMgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxUYXJnZXRWaWV3IHsuLi5wcm9wc30gcGFnZVRpdGxlPVwiRXZlbnRzXCI+XG4gICAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgICA8U3RhY2tJdGVtPlxuICAgICAgICAgIDxDYXJkPlxuICAgICAgICAgICAgPENhcmRCb2R5PlxuICAgICAgICAgICAgICA8RXZlbnRUYWJzIC8+XG4gICAgICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICAgIDxTdGFja0l0ZW0+XG4gICAgICAgICAgPENhcmQ+XG4gICAgICAgICAgICA8Q2FyZEJvZHk+XG4gICAgICAgICAgICAgIDxBZ2VudFRhYnMgLz5cbiAgICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIDwvU3RhY2s+XG4gICAgPC9UYXJnZXRWaWV3PlxuICApO1xufTtcblxuZW51bSBFdmVudFRhYiB7XG4gIEVWRU5UX1RFTVBMQVRFID0gJ2V2ZW50LXRlbXBsYXRlJyxcbiAgRVZFTlRfVFlQRSA9ICdldmVudC10eXBlJyxcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50VGFiczogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgc2VhcmNoLCBwYXRobmFtZSB9ID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcblxuICBjb25zdCBhY3RpdmVUYWIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZ2V0QWN0aXZlVGFiKHNlYXJjaCwgJ2V2ZW50VGFiJywgT2JqZWN0LnZhbHVlcyhFdmVudFRhYiksIEV2ZW50VGFiLkVWRU5UX1RFTVBMQVRFKTtcbiAgfSwgW3NlYXJjaF0pO1xuXG4gIGNvbnN0IG9uVGFiU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0Lk1vdXNlRXZlbnQsIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PlxuICAgICAgc3dpdGNoVGFiKGhpc3RvcnksIHBhdGhuYW1lLCBzZWFyY2gsIHsgdGFiS2V5OiAnZXZlbnRUYWInLCB0YWJWYWx1ZTogYCR7a2V5fWAgfSksXG4gICAgW2hpc3RvcnksIHBhdGhuYW1lLCBzZWFyY2hdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8VGFicyBhY3RpdmVLZXk9e2FjdGl2ZVRhYn0gb25TZWxlY3Q9e29uVGFiU2VsZWN0fT5cbiAgICAgIDxUYWIgZXZlbnRLZXk9e0V2ZW50VGFiLkVWRU5UX1RFTVBMQVRFfSB0aXRsZT1cIkV2ZW50IFRlbXBsYXRlc1wiPlxuICAgICAgICA8RXZlbnRUZW1wbGF0ZXMgLz5cbiAgICAgIDwvVGFiPlxuICAgICAgPFRhYiBldmVudEtleT17RXZlbnRUYWIuRVZFTlRfVFlQRX0gdGl0bGU9XCJFdmVudCBUeXBlc1wiPlxuICAgICAgICA8RXZlbnRUeXBlcyAvPlxuICAgICAgPC9UYWI+XG4gICAgPC9UYWJzPlxuICApO1xufTtcblxuZW51bSBBZ2VudFRhYiB7XG4gIEFHRU5UX1RFTVBMQVRFID0gJ2FnZW50LXRlbXBsYXRlJyxcbiAgQUdFTlRfUFJPQkUgPSAnYWdlbnQtcHJvYmUnLFxufVxuXG5leHBvcnQgY29uc3QgQWdlbnRUYWJzOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG5cbiAgY29uc3QgeyBzZWFyY2gsIHBhdGhuYW1lIH0gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuXG4gIGNvbnN0IGFjdGl2ZVRhYiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBnZXRBY3RpdmVUYWIoc2VhcmNoLCAnYWdlbnRUYWInLCBPYmplY3QudmFsdWVzKEFnZW50VGFiKSwgQWdlbnRUYWIuQUdFTlRfVEVNUExBVEUpO1xuICB9LCBbc2VhcmNoXSk7XG5cbiAgY29uc3QgW2FnZW50RGV0ZWN0ZWQsIHNldEFnZW50RGV0ZWN0ZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uVGFiU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0Lk1vdXNlRXZlbnQsIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PlxuICAgICAgc3dpdGNoVGFiKGhpc3RvcnksIHBhdGhuYW1lLCBzZWFyY2gsIHsgdGFiS2V5OiAnYWdlbnRUYWInLCB0YWJWYWx1ZTogYCR7a2V5fWAgfSksXG4gICAgW2hpc3RvcnksIHBhdGhuYW1lLCBzZWFyY2hdXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LnRhcmdldFxuICAgICAgICAudGFyZ2V0KClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCh0YXJnZXQpID0+IHRhcmdldCAhPT0gTk9fVEFSR0VUKSxcbiAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IGNvbnRleHQuYXBpLmlzUHJvYmVFbmFibGVkKCkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzZXRBZ2VudERldGVjdGVkKVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQudGFyZ2V0LCBjb250ZXh0LmFwaSwgc2V0QWdlbnREZXRlY3RlZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPFRhYnMgYWN0aXZlS2V5PXthY3RpdmVUYWJ9IG9uU2VsZWN0PXtvblRhYlNlbGVjdH0+XG4gICAgICA8VGFiIGV2ZW50S2V5PXtBZ2VudFRhYi5BR0VOVF9URU1QTEFURX0gdGl0bGU9XCJQcm9iZSBUZW1wbGF0ZXNcIj5cbiAgICAgICAgPEFnZW50UHJvYmVUZW1wbGF0ZXMgYWdlbnREZXRlY3RlZD17YWdlbnREZXRlY3RlZH0gLz5cbiAgICAgIDwvVGFiPlxuICAgICAgPFRhYlxuICAgICAgICBldmVudEtleT17QWdlbnRUYWIuQUdFTlRfUFJPQkV9XG4gICAgICAgIHRpdGxlPVwiTGl2ZSBDb25maWd1cmF0aW9uXCJcbiAgICAgICAgaXNBcmlhRGlzYWJsZWQ9eyFhZ2VudERldGVjdGVkfVxuICAgICAgICB0b29sdGlwPXtcbiAgICAgICAgICBhZ2VudERldGVjdGVkID8gdW5kZWZpbmVkIDogKFxuICAgICAgICAgICAgPFRvb2x0aXAgY29udGVudD1cIkpNQyBCeXRlQ29kZSBJbnN0cnVtZW50YXRpb24gQWdlbnQgbm90IGRldGVjdGVkIGZvciB0aGUgc2VsZWN0ZWQgVGFyZ2V0IEpWTVwiIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxBZ2VudExpdmVQcm9iZXMgLz5cbiAgICAgIDwvVGFiPlxuICAgIDwvVGFicz5cbiAgKTtcbn07XG5leHBvcnQgZGVmYXVsdCBFdmVudHM7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGxvY2FsZVJlYWRhYmxlID0gKGxvY2FsZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIG5ldyBJbnRsLkRpc3BsYXlOYW1lcyhbbG9jYWxlXSwgeyB0eXBlOiAnbGFuZ3VhZ2UnLCBsYW5ndWFnZURpc3BsYXk6ICdzdGFuZGFyZCcgfSkub2YobG9jYWxlKSB8fCBsb2NhbGU7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGkxOG5MYW5ndWFnZXMsIGkxOG5SZXNvdXJjZXMgfSBmcm9tICdAaTE4bi9jb25maWcnO1xuaW1wb3J0IHsgbG9jYWxlUmVhZGFibGUgfSBmcm9tICdAaTE4bi9pMThuZXh0VXRpbCc7XG5pbXBvcnQgeyBTZWxlY3QsIFNlbGVjdE9wdGlvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFNldHRpbmdUYWIsIFVzZXJTZXR0aW5nIH0gZnJvbSAnLi9TZXR0aW5nc1V0aWxzJztcblxuY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICBjb25zdCBbdCwgaTE4bl0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRPcGVuKCh2KSA9PiAhdiksIFtzZXRPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgdikgPT4ge1xuICAgICAgaTE4bi5jaGFuZ2VMYW5ndWFnZSh2KTtcbiAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgIH0sXG4gICAgW2kxOG4sIHNldE9wZW5dXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWkxOG5MYW5ndWFnZXMuaW5jbHVkZXMoaTE4bi5sYW5ndWFnZSkpIHtcbiAgICAgIGkxOG4uY2hhbmdlTGFuZ3VhZ2UoJ2VuJyk7XG4gICAgfVxuICB9LCBbaTE4biwgaTE4bi5sYW5ndWFnZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgaXNPcGVuPXtvcGVufVxuICAgICAgYXJpYS1sYWJlbD17dCgnU0VUVElOR1MuTEFOR1VBR0UuQVJJQV9MQUJFTFMuU0VMRUNUJykgfHwgJyd9XG4gICAgICBvblRvZ2dsZT17aGFuZGxlTGFuZ3VhZ2VUb2dnbGV9XG4gICAgICBvblNlbGVjdD17aGFuZGxlTGFuZ3VhZ2VTZWxlY3R9XG4gICAgICBzZWxlY3Rpb25zPXtsb2NhbGVSZWFkYWJsZShpMThuLmxhbmd1YWdlKX1cbiAgICAgIGlzRmxpcEVuYWJsZWRcbiAgICAgIG1lbnVBcHBlbmRUbz1cInBhcmVudFwiXG4gICAgPlxuICAgICAge09iamVjdC5rZXlzKGkxOG5SZXNvdXJjZXMpLm1hcCgobCkgPT4gKFxuICAgICAgICA8U2VsZWN0T3B0aW9uIGtleT17bH0gdmFsdWU9e2x9PlxuICAgICAgICAgIHtsb2NhbGVSZWFkYWJsZShsKX1cbiAgICAgICAgPC9TZWxlY3RPcHRpb24+XG4gICAgICApKX1cbiAgICA8L1NlbGVjdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBMYW5ndWFnZTogVXNlclNldHRpbmcgPSB7XG4gIHRpdGxlS2V5OiAnU0VUVElOR1MuTEFOR1VBR0UuVElUTEUnLFxuICBkZXNjQ29uc3RydWN0OiAnU0VUVElOR1MuTEFOR1VBR0UuREVTQ1JJUFRJT04nLFxuICBjb250ZW50OiBDb21wb25lbnQsXG4gIGNhdGVnb3J5OiBTZXR0aW5nVGFiLkdFTkVSQUwsXG4gIG9yZGVySW5Hcm91cDogMSxcbiAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuQkVUQSxcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEF1dGhNZXRob2QgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Mb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXAsIEJ1dHRvbiwgQ2hlY2tib3gsIEZvcm0sIEZvcm1Hcm91cCwgVGV4dCwgVGV4dElucHV0LCBUZXh0VmFyaWFudHMgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gJ2pzLWJhc2U2NCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JtUHJvcHMgfSBmcm9tICcuL0Zvcm1Qcm9wcyc7XG5cbmV4cG9ydCBjb25zdCBCYXNpY0F1dGhGb3JtOiBSZWFjdC5GQzxGb3JtUHJvcHM+ID0gKHsgb25TdWJtaXQgfSkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFt1c2VybmFtZSwgc2V0VXNlcm5hbWVdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3JlbWVtYmVyTWUsIHNldFJlbWVtYmVyTWVdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdWIgPSBjb250ZXh0LmxvZ2luXG4gICAgICAuZ2V0VG9rZW4oKVxuICAgICAgLnBpcGUobWFwKEJhc2U2NC5kZWNvZGUpKVxuICAgICAgLnN1YnNjcmliZSgoY3JlZHMpID0+IHtcbiAgICAgICAgaWYgKCFjcmVkcy5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgc2V0VXNlcm5hbWUoY3JlZHMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBjcmVkcy5zcGxpdCgnOicpO1xuICAgICAgICBzZXRVc2VybmFtZShwYXJ0c1swXSk7XG4gICAgICAgIHNldFBhc3N3b3JkKHBhcnRzWzFdKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiBzdWIudW5zdWJzY3JpYmUoKTtcbiAgfSwgW2NvbnRleHQsIGNvbnRleHQuYXBpLCBzZXRVc2VybmFtZSwgc2V0UGFzc3dvcmRdKTtcblxuICBjb25zdCBoYW5kbGVVc2VyQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2dCkgPT4ge1xuICAgICAgc2V0VXNlcm5hbWUoZXZ0KTtcbiAgICB9LFxuICAgIFtzZXRVc2VybmFtZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQYXNzd29yZENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldFBhc3N3b3JkKGV2dCk7XG4gICAgfSxcbiAgICBbc2V0UGFzc3dvcmRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlUmVtZW1iZXJNZVRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldFJlbWVtYmVyTWUoZXZ0KTtcbiAgICB9LFxuICAgIFtzZXRSZW1lbWJlck1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIG9uU3VibWl0KGV2dCwgYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCwgQXV0aE1ldGhvZC5CQVNJQywgcmVtZW1iZXJNZSk7XG4gICAgfSxcbiAgICBbb25TdWJtaXQsIHVzZXJuYW1lLCBwYXNzd29yZCwgcmVtZW1iZXJNZV1cbiAgKTtcblxuICAvLyBGSVhNRSBQYXR0ZXJuZmx5IEZvcm0gY29tcG9uZW50IG9uU3VibWl0IGlzIG5vdCB0cmlnZ2VyZWQgYnkgRW50ZXIga2V5ZG93biB3aGVuIHRoZSBGb3JtIGNvbnRhaW5zXG4gIC8vIG11bHRpcGxlIEZvcm1Hcm91cHMuIFRoaXMga2V5IGhhbmRsZXIgaXMgYSB3b3JrYXJvdW5kIHRvIGFsbG93IGtleWJvYXJkLWRyaXZlbiB1c2Ugb2YgdGhlIGZvcm1cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIGlmIChldnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGhhbmRsZVN1Ym1pdChldnQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVN1Ym1pdF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxGb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuICAgICAgPEZvcm1Hcm91cCBsYWJlbD1cIlVzZXJuYW1lXCIgaXNSZXF1aXJlZCBmaWVsZElkPVwidXNlcm5hbWVcIiBoZWxwZXJUZXh0PVwiUGxlYXNlIHByb3ZpZGUgeW91ciB1c2VybmFtZVwiPlxuICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBpZD1cInVzZXJuYW1lXCJcbiAgICAgICAgICBuYW1lPVwidXNlcm5hbWVcIlxuICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJ1c2VybmFtZS1oZWxwZXJcIlxuICAgICAgICAgIHZhbHVlPXt1c2VybmFtZX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlVXNlckNoYW5nZX1cbiAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIC8+XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIDxGb3JtR3JvdXAgbGFiZWw9XCJQYXNzd29yZFwiIGlzUmVxdWlyZWQgZmllbGRJZD1cInBhc3N3b3JkXCIgaGVscGVyVGV4dD1cIlBsZWFzZSBwcm92aWRlIHlvdXIgcGFzc3dvcmRcIj5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgIGlkPVwicGFzc3dvcmRcIlxuICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cInBhc3N3b3JkLWhlbHBlclwiXG4gICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVQYXNzd29yZENoYW5nZX1cbiAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIC8+XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIDxDaGVja2JveCBpZD1cInJlbWVtYmVyLW1lXCIgbGFiZWw9XCJSZW1lbWJlciBNZVwiIGlzQ2hlY2tlZD17cmVtZW1iZXJNZX0gb25DaGFuZ2U9e2hhbmRsZVJlbWVtYmVyTWVUb2dnbGV9IC8+XG4gICAgICA8QWN0aW9uR3JvdXA+XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9PlxuICAgICAgICAgIExvZ2luXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICA8L0Zvcm0+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQmFzaWNBdXRoRGVzY3JpcHRpb25UZXh0ID0gKCkgPT4ge1xuICByZXR1cm4gPFRleHQgY29tcG9uZW50PXtUZXh0VmFyaWFudHMucH0+VGhlIENyeW9zdGF0IHNlcnZlciBpcyBjb25maWd1cmVkIHdpdGggQmFzaWMgYXV0aGVudGljYXRpb24uPC9UZXh0Pjtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEVtcHR5U3RhdGUsIEVtcHR5U3RhdGVCb2R5LCBFbXB0eVN0YXRlSWNvbiwgVGl0bGUgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEV4Y2xhbWF0aW9uQ2lyY2xlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25FcnJvciA9ICgpID0+IChcbiAgPEVtcHR5U3RhdGU+XG4gICAgPEVtcHR5U3RhdGVJY29uIHZhcmlhbnQ9XCJjb250YWluZXJcIiBjb21wb25lbnQ9e0V4Y2xhbWF0aW9uQ2lyY2xlSWNvbn0gLz5cbiAgICA8VGl0bGUgc2l6ZT1cImxnXCIgaGVhZGluZ0xldmVsPVwiaDRcIj5cbiAgICAgIFVuYWJsZSB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXJcbiAgICA8L1RpdGxlPlxuICAgIDxFbXB0eVN0YXRlQm9keT5DaGVjayB5b3VyIGNvbm5lY3Rpb24gYW5kIHJlbG9hZCB0aGUgcGFnZS48L0VtcHR5U3RhdGVCb2R5PlxuICA8L0VtcHR5U3RhdGU+XG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBBdXRoTWV0aG9kIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTG9naW4uc2VydmljZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtUHJvcHMgfSBmcm9tICcuL0Zvcm1Qcm9wcyc7XG5cbmV4cG9ydCBjb25zdCBOb29wQXV0aEZvcm06IFJlYWN0LkZDPEZvcm1Qcm9wcz4gPSAoeyBvblN1Ym1pdCB9KSA9PiB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgbm9vcEV2dCA9IHtcbiAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfSBhcyBFdmVudDtcblxuICAgIG9uU3VibWl0KG5vb3BFdnQsICcnLCBBdXRoTWV0aG9kLk5PTkUsIGZhbHNlKTtcbiAgfSwgW29uU3VibWl0XSk7XG5cbiAgcmV0dXJuIDw+PC8+O1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc0NvbnRleHQgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBdXRoTWV0aG9kLCBTZXNzaW9uU3RhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Mb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBCdXR0b24sIEVtcHR5U3RhdGUsIEVtcHR5U3RhdGVCb2R5LCBFbXB0eVN0YXRlSWNvbiwgVGV4dCwgVGV4dFZhcmlhbnRzLCBUaXRsZSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgTG9ja0ljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtUHJvcHMgfSBmcm9tICcuL0Zvcm1Qcm9wcyc7XG5cbmV4cG9ydCBjb25zdCBPcGVuU2hpZnRQbGFjZWhvbGRlckF1dGhGb3JtOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxGb3JtUHJvcHM+ID0gKHsgb25TdWJtaXQgfSkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBSZWFjdC51c2VDb250ZXh0KE5vdGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgY29uc3QgW3Nob3dQZXJtaXNzaW9uRGVuaWVkLCBzZXRTaG93UGVybWlzc2lvbkRlbmllZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbWJpbmVMYXRlc3QoW2NvbnRleHQubG9naW4uZ2V0U2Vzc2lvblN0YXRlKCksIG5vdGlmaWNhdGlvbnMucHJvYmxlbXNOb3RpZmljYXRpb25zKCldKS5zdWJzY3JpYmUoKHBhcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25TdGF0ZSA9IHBhcnRzWzBdO1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBwYXJ0c1sxXTtcbiAgICAgICAgY29uc3QgbWlzc2luZ0NyeW9zdGF0UGVybWlzc2lvbnMgPSBlcnJvcnMuZmluZCgoZXJyb3IpID0+IGVycm9yLnRpdGxlLmluY2x1ZGVzKCc0MDEnKSkgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgc2V0U2hvd1Blcm1pc3Npb25EZW5pZWQoc2Vzc2lvblN0YXRlID09PSBTZXNzaW9uU3RhdGUuTk9fVVNFUl9TRVNTSU9OICYmIG1pc3NpbmdDcnlvc3RhdFBlcm1pc3Npb25zKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgbm90aWZpY2F0aW9ucywgY29udGV4dC5sb2dpbiwgc2V0U2hvd1Blcm1pc3Npb25EZW5pZWRdKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZ0KSA9PiB7XG4gICAgICAvLyBUcmlnZ2VycyBhIHJlZGlyZWN0IHRvIE9wZW5TaGlmdCBDb250YWluZXIgUGxhdGZvcm0gbG9naW4gcGFnZVxuICAgICAgb25TdWJtaXQoZXZ0LCAnYW5JbnZhbGlkVG9rZW4nLCBBdXRoTWV0aG9kLkJFQVJFUiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBbb25TdWJtaXRdXG4gICk7XG5cbiAgY29uc3QgcGVybWlzc2lvbkRlbmllZCA9IChcbiAgICA8RW1wdHlTdGF0ZT5cbiAgICAgIDxFbXB0eVN0YXRlSWNvbiB2YXJpYW50PVwiY29udGFpbmVyXCIgY29tcG9uZW50PXtMb2NrSWNvbn0gLz5cbiAgICAgIDxUaXRsZSBzaXplPVwibGdcIiBoZWFkaW5nTGV2ZWw9XCJoNFwiPlxuICAgICAgICBBY2Nlc3MgcGVybWlzc2lvbnMgcmVxdWlyZWRcbiAgICAgIDwvVGl0bGU+XG4gICAgICA8RW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHtgVG8gY29udGludWUsIGFkZCBwZXJtaXNzaW9ucyB0byB5b3VyIGN1cnJlbnQgYWNjb3VudCBvciBsb2dpbiB3aXRoIGFcbiAgICAgICAgZGlmZmVyZW50IGFjY291bnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFVzZXIgQXV0aGVudGljYXRpb24gc2VjdGlvbiBvZiB0aGUgYH1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dFxuICAgICAgICAgIGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLmF9XG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2NyeW9zdGF0aW8vY3J5b3N0YXQtb3BlcmF0b3IjdXNlci1hdXRoZW50aWNhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICBDcnlvc3RhdCBPcGVyYXRvciBSRUFETUUuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvRW1wdHlTdGF0ZUJvZHk+XG4gICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgb25DbGljaz17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgUmV0cnkgTG9naW5cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvRW1wdHlTdGF0ZT5cbiAgKTtcblxuICByZXR1cm4gPD57c2hvd1Blcm1pc3Npb25EZW5pZWQgJiYgcGVybWlzc2lvbkRlbmllZH08Lz47XG59O1xuXG5leHBvcnQgY29uc3QgT3BlblNoaWZ0QXV0aERlc2NyaXB0aW9uVGV4dCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5wfT5UaGUgQ3J5b3N0YXQgc2VydmVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIE9wZW5TaGlmdCBPQXV0aCBhdXRoZW50aWNhdGlvbi48L1RleHQ+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBMYW5ndWFnZSB9IGZyb20gJ0BhcHAvU2V0dGluZ3MvTGFuZ3VhZ2UnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWcgfSBmcm9tICdAYXBwL1NoYXJlZC9GZWF0dXJlRmxhZy9GZWF0dXJlRmxhZyc7XG5pbXBvcnQgeyBBdXRoTWV0aG9kIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQge1xuICBDYXJkLFxuICBDYXJkQWN0aW9ucyxcbiAgQ2FyZEJvZHksXG4gIENhcmRGb290ZXIsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRUaXRsZSxcbiAgUGFnZVNlY3Rpb24sXG4gIFRleHQsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc0NvbnRleHQgfSBmcm9tICcuLi9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgQmFzaWNBdXRoRGVzY3JpcHRpb25UZXh0LCBCYXNpY0F1dGhGb3JtIH0gZnJvbSAnLi9CYXNpY0F1dGhGb3JtJztcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gJy4vQ29ubmVjdGlvbkVycm9yJztcbmltcG9ydCB7IE5vb3BBdXRoRm9ybSB9IGZyb20gJy4vTm9vcEF1dGhGb3JtJztcbmltcG9ydCB7IE9wZW5TaGlmdEF1dGhEZXNjcmlwdGlvblRleHQsIE9wZW5TaGlmdFBsYWNlaG9sZGVyQXV0aEZvcm0gfSBmcm9tICcuL09wZW5TaGlmdFBsYWNlaG9sZGVyQXV0aEZvcm0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IExvZ2luOiBSZWFjdC5GQzxMb2dpblByb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBub3RpZmljYXRpb25zID0gUmVhY3QudXNlQ29udGV4dChOb3RpZmljYXRpb25zQ29udGV4dCk7XG4gIGNvbnN0IFthdXRoTWV0aG9kLCBzZXRBdXRoTWV0aG9kXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZ0LCB0b2tlbiwgYXV0aE1ldGhvZCwgcmVtZW1iZXJNZSkgPT4ge1xuICAgICAgc2V0QXV0aE1ldGhvZChhdXRoTWV0aG9kKTtcbiAgICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgY29udGV4dC5sb2dpbi5jaGVja0F1dGgodG9rZW4sIGF1dGhNZXRob2QsIHJlbWVtYmVyTWUpLnN1YnNjcmliZSgoYXV0aFN1Y2Nlc3MpID0+IHtcbiAgICAgICAgICBpZiAoIWF1dGhTdWNjZXNzKSB7XG4gICAgICAgICAgICBub3RpZmljYXRpb25zLmRhbmdlcignQXV0aGVudGljYXRpb24gRmFpbHVyZScsIGAke2F1dGhNZXRob2R9IGF1dGhlbnRpY2F0aW9uIGZhaWxlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9LFxuICAgIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQubG9naW4sIG5vdGlmaWNhdGlvbnMsIHNldEF1dGhNZXRob2RdXG4gICk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oY29udGV4dC5sb2dpbi5nZXRBdXRoTWV0aG9kKCkuc3Vic2NyaWJlKHNldEF1dGhNZXRob2QpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5sb2dpbiwgc2V0QXV0aE1ldGhvZF0pO1xuXG4gIGNvbnN0IGxvZ2luRm9ybSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHN3aXRjaCAoYXV0aE1ldGhvZCkge1xuICAgICAgY2FzZSBBdXRoTWV0aG9kLkJBU0lDOlxuICAgICAgICByZXR1cm4gPEJhc2ljQXV0aEZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gLz47XG4gICAgICBjYXNlIEF1dGhNZXRob2QuQkVBUkVSOlxuICAgICAgICByZXR1cm4gPE9wZW5TaGlmdFBsYWNlaG9sZGVyQXV0aEZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gLz47XG4gICAgICBjYXNlIEF1dGhNZXRob2QuTk9ORTpcbiAgICAgICAgcmV0dXJuIDxOb29wQXV0aEZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gLz47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gPENvbm5lY3Rpb25FcnJvciAvPjtcbiAgICB9XG4gIH0sIFtoYW5kbGVTdWJtaXQsIGF1dGhNZXRob2RdKTtcblxuICBjb25zdCBkZXNjcmlwdGlvblRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBzd2l0Y2ggKGF1dGhNZXRob2QpIHtcbiAgICAgIGNhc2UgQXV0aE1ldGhvZC5CQVNJQzpcbiAgICAgICAgcmV0dXJuIDxCYXNpY0F1dGhEZXNjcmlwdGlvblRleHQgLz47XG4gICAgICBjYXNlIEF1dGhNZXRob2QuQkVBUkVSOlxuICAgICAgICByZXR1cm4gPE9wZW5TaGlmdEF1dGhEZXNjcmlwdGlvblRleHQgLz47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gPFRleHQgLz47XG4gICAgfVxuICB9LCBbYXV0aE1ldGhvZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPFBhZ2VTZWN0aW9uPlxuICAgICAgPENhcmQ+XG4gICAgICAgIDxDYXJkSGVhZGVyPlxuICAgICAgICAgIDxDYXJkVGl0bGU+TG9naW48L0NhcmRUaXRsZT5cbiAgICAgICAgICA8Q2FyZEFjdGlvbnM+XG4gICAgICAgICAgICA8RmVhdHVyZUZsYWcgbGV2ZWw9e0ZlYXR1cmVMZXZlbC5CRVRBfT57UmVhY3QuY3JlYXRlRWxlbWVudChMYW5ndWFnZS5jb250ZW50LCBudWxsKX08L0ZlYXR1cmVGbGFnPlxuICAgICAgICAgIDwvQ2FyZEFjdGlvbnM+XG4gICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgPENhcmRCb2R5Pntsb2dpbkZvcm19PC9DYXJkQm9keT5cbiAgICAgICAgPENhcmRGb290ZXI+e2Rlc2NyaXB0aW9uVGV4dH08L0NhcmRGb290ZXI+XG4gICAgICA8L0NhcmQ+XG4gICAgPC9QYWdlU2VjdGlvbj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2luO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IENhcmQsIENhcmRUaXRsZSwgQ2FyZEJvZHksIENhcmRGb290ZXIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuZXhwb3J0IGNvbnN0IE5vdEZvdW5kQ2FyZCA9ICh7IHRpdGxlLCBib2R5VGV4dCwgbGlua1RleHQsIGxpbmtQYXRoIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPENhcmQgY2xhc3NOYW1lPVwicGYtYy1jYXJkLW5vdC1mb3VuZFwiPlxuICAgICAgICA8Q2FyZFRpdGxlPnt0aXRsZX08L0NhcmRUaXRsZT5cbiAgICAgICAgPENhcmRCb2R5Pntib2R5VGV4dH08L0NhcmRCb2R5PlxuICAgICAgICA8Q2FyZEZvb3RlciBjbGFzc05hbWU9XCJwZi1jLWNhcmQtbm90LWZvdW5kX19mb290ZXJcIj5cbiAgICAgICAgICA8TGluayB0bz17bGlua1BhdGh9PntsaW5rVGV4dH08L0xpbms+XG4gICAgICAgIDwvQ2FyZEZvb3Rlcj5cbiAgICAgIDwvQ2FyZD5cbiAgICA8Lz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCAnQGFwcC9hcHAuY3NzJztcbmltcG9ydCB7IElBcHBSb3V0ZSwgcm91dGVzLCBmbGF0dGVuIH0gZnJvbSAnQGFwcC9yb3V0ZXMnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRW1wdHlTdGF0ZUJvZHksXG4gIEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zLFxuICBUaXRsZSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBNYXBNYXJrZWRBbHRJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgTm90Rm91bmRDYXJkIH0gZnJvbSAnLi9Ob3RGb3VuZENhcmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdEZvdW5kUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IE5vdEZvdW5kOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxOb3RGb3VuZFByb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBbYWN0aXZlTGV2ZWwsIHNldEFjdGl2ZUxldmVsXSA9IFJlYWN0LnVzZVN0YXRlKEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OKTtcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250ZXh0LnNldHRpbmdzLmZlYXR1cmVMZXZlbCgpLnN1YnNjcmliZSgoZmVhdHVyZUxldmVsKSA9PiBzZXRBY3RpdmVMZXZlbChmZWF0dXJlTGV2ZWwpKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuc2V0dGluZ3MsIHNldEFjdGl2ZUxldmVsXSk7XG5cbiAgY29uc3QgY2FyZHMgPSBmbGF0dGVuKHJvdXRlcylcbiAgICAuZmlsdGVyKChyb3V0ZTogSUFwcFJvdXRlKTogYm9vbGVhbiA9PiAhIXJvdXRlLmRlc2NyaXB0aW9uKVxuICAgIC5maWx0ZXIoKHIpID0+IHIuZmVhdHVyZUxldmVsID09PSB1bmRlZmluZWQgfHwgci5mZWF0dXJlTGV2ZWwgPj0gYWN0aXZlTGV2ZWwpXG4gICAgLnNvcnQoKGE6IElBcHBSb3V0ZSwgYjogSUFwcFJvdXRlKTogbnVtYmVyID0+IGEudGl0bGUubG9jYWxlQ29tcGFyZShiLnRpdGxlKSlcbiAgICAubWFwKChyb3V0ZTogSUFwcFJvdXRlKSA9PiAoXG4gICAgICA8Tm90Rm91bmRDYXJkXG4gICAgICAgIGtleT17cm91dGUudGl0bGV9XG4gICAgICAgIHRpdGxlPXtyb3V0ZS50aXRsZX1cbiAgICAgICAgYm9keVRleHQ9e3JvdXRlLmRlc2NyaXB0aW9ufVxuICAgICAgICBsaW5rVGV4dD17YFZpZXcgJHtyb3V0ZS50aXRsZS50b0xvY2FsZUxvd2VyQ2FzZSgpfWB9XG4gICAgICAgIGxpbmtQYXRoPXtyb3V0ZS5wYXRofVxuICAgICAgLz5cbiAgICApKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RW1wdHlTdGF0ZSBjbGFzc05hbWU9XCJwZi1jLWVtcHR5LXN0YXRlLW5vdC1mb3VuZFwiPlxuICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17TWFwTWFya2VkQWx0SWNvbn0gLz5cbiAgICAgICAgPFRpdGxlIGhlYWRpbmdMZXZlbD1cImg0XCIgc2l6ZT1cImxnXCI+XG4gICAgICAgICAgNDA0OiBXZSBjb3VsZG4mYXBvczt0IGZpbmQgdGhhdCBwYWdlXG4gICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDxFbXB0eVN0YXRlQm9keT5PbmUgb2YgdGhlIGZvbGxvd2luZyBwYWdlcyBtaWdodCBoYXZlIHdoYXQgeW91JmFwb3M7cmUgbG9va2luZyBmb3IuPC9FbXB0eVN0YXRlQm9keT5cbiAgICAgICAgPEVtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPntjYXJkc308L0VtcHR5U3RhdGVTZWNvbmRhcnlBY3Rpb25zPlxuICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgY29tcG9uZW50PXsocHJvcHMpID0+IDxMaW5rIHsuLi5wcm9wc30gdG89XCIvXCIgLz59PlxuICAgICAgICAgIFRha2UgbWUgaG9tZVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5vdEZvdW5kO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBRdWlja1N0YXJ0Q2F0YWxvZ1BhZ2UgfSBmcm9tICdAcGF0dGVybmZseS9xdWlja3N0YXJ0cyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuZXhwb3J0IGludGVyZmFjZSBRdWlja1N0YXJ0c0NhdGFsb2dQYWdlUHJvcHMge31cblxuY29uc3QgUXVpY2tTdGFydHNDYXRhbG9nUGFnZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8UXVpY2tTdGFydHNDYXRhbG9nUGFnZVByb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICAvLyBUT0RPOiBRdWljayBzdGFydCBjYXRlZ29yaWVzIChwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzIHN1cHBvcnRzIHRoaXMgdGhyb3VnaCBpbmRpdmlkdWFsIGNvbXBvbmVudHMpXG4gIC8vIGUuZy4gRGFzaGJvYXJkIFF1aWNrIFN0YXJ0cywgVG9wb2xvZ3kgUXVpY2sgU3RhcnRzLCBSZWNvcmRpbmcgUXVpY2sgU3RhcnRzLCBldGMuXG4gIHJldHVybiAoXG4gICAgPFF1aWNrU3RhcnRDYXRhbG9nUGFnZVxuICAgICAgdGl0bGU9e3QoJ1F1aWNrU3RhcnRzLkNBVEFMT0dfUEFHRS5USVRMRScpfVxuICAgICAgaGludD17dCgnUXVpY2tTdGFydHMuQ0FUQUxPR19QQUdFLkhJTlQnKX1cbiAgICAgIHNob3dUaXRsZVxuICAgICAgc2hvd0ZpbHRlclxuICAgICAgc29ydEZuYz17KGEsIGIpID0+IGEubWV0YWRhdGEub3JkZXIgLSBiLm1ldGFkYXRhLm9yZGVyfVxuICAgIC8+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFF1aWNrU3RhcnRzQ2F0YWxvZ1BhZ2UpO1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGF1dGhGYWlsTWVzc2FnZSB9IGZyb20gJ0BhcHAvRXJyb3JWaWV3L0Vycm9yVmlldyc7XG5pbXBvcnQgeyBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSB9IGZyb20gJ0BhcHAvTW9kYWwvRGVsZXRlV2FybmluZ1V0aWxzJztcbmltcG9ydCB7IHBhcnNlTGFiZWxzIH0gZnJvbSAnQGFwcC9SZWNvcmRpbmdNZXRhZGF0YS9SZWNvcmRpbmdMYWJlbCc7XG5pbXBvcnQgeyBMb2FkaW5nUHJvcHNUeXBlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUHJvZ3Jlc3NJbmRpY2F0b3InO1xuaW1wb3J0IHsgVXBkYXRlRmlsdGVyT3B0aW9ucyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvQ29tbW9uJztcbmltcG9ydCB7IGVtcHR5QWN0aXZlUmVjb3JkaW5nRmlsdGVycywgVGFyZ2V0UmVjb3JkaW5nRmlsdGVycyB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0ZpbHRlcnMvUmVjb3JkaW5nRmlsdGVyU2xpY2UnO1xuaW1wb3J0IHtcbiAgcmVjb3JkaW5nQWRkRmlsdGVySW50ZW50LFxuICByZWNvcmRpbmdBZGRUYXJnZXRJbnRlbnQsXG4gIHJlY29yZGluZ0RlbGV0ZUFsbEZpbHRlcnNJbnRlbnQsXG4gIHJlY29yZGluZ0RlbGV0ZUNhdGVnb3J5RmlsdGVyc0ludGVudCxcbiAgcmVjb3JkaW5nRGVsZXRlRmlsdGVySW50ZW50LFxuICBSb290U3RhdGUsXG4gIFN0YXRlRGlzcGF0Y2gsXG59IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L1JlZHV4U3RvcmUnO1xuaW1wb3J0IHsgQWN0aXZlUmVjb3JkaW5nLCBSZWNvcmRpbmdTdGF0ZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL0FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNhdGVnb3J5IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgTk9fVEFSR0VUIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlRGF5anMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZURheWpzJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBzb3J0UmVzb3VyY2VzLCBUYWJsZUNvbHVtbiB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRHJhd2VyLFxuICBEcmF3ZXJDb250ZW50LFxuICBEcmF3ZXJDb250ZW50Qm9keSxcbiAgRHJvcGRvd24sXG4gIEtlYmFiVG9nZ2xlLFxuICBPdmVyZmxvd01lbnUsXG4gIE92ZXJmbG93TWVudUNvbnRlbnQsXG4gIE92ZXJmbG93TWVudUNvbnRyb2wsXG4gIE92ZXJmbG93TWVudURyb3Bkb3duSXRlbSxcbiAgT3ZlcmZsb3dNZW51R3JvdXAsXG4gIE92ZXJmbG93TWVudUl0ZW0sXG4gIFRleHQsXG4gIFRpbWVzdGFtcCxcbiAgVGltZXN0YW1wVG9vbHRpcFZhcmlhbnQsXG4gIFRvb2xiYXIsXG4gIFRvb2xiYXJDb250ZW50LFxuICBUb29sYmFyR3JvdXAsXG4gIFRvb2xiYXJJdGVtLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCB7IEV4cGFuZGFibGVSb3dDb250ZW50LCBTb3J0QnlEaXJlY3Rpb24sIFRib2R5LCBUZCwgVHIgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC10YWJsZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5LCB1c2VSb3V0ZU1hdGNoIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZmlsdGVyLCBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERlbGV0ZVdhcm5pbmdNb2RhbCB9IGZyb20gJy4uL01vZGFsL0RlbGV0ZVdhcm5pbmdNb2RhbCc7XG5pbXBvcnQgeyBMYWJlbENlbGwgfSBmcm9tICcuLi9SZWNvcmRpbmdNZXRhZGF0YS9MYWJlbENlbGwnO1xuaW1wb3J0IHsgUmVjb3JkaW5nQWN0aW9ucyB9IGZyb20gJy4vUmVjb3JkaW5nQWN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXJSZWNvcmRpbmdzLCBSZWNvcmRpbmdGaWx0ZXJzLCBSZWNvcmRpbmdGaWx0ZXJzQ2F0ZWdvcmllcyB9IGZyb20gJy4vUmVjb3JkaW5nRmlsdGVycyc7XG5pbXBvcnQgeyBSZWNvcmRpbmdMYWJlbHNQYW5lbCB9IGZyb20gJy4vUmVjb3JkaW5nTGFiZWxzUGFuZWwnO1xuaW1wb3J0IHsgQ29sdW1uQ29uZmlnLCBSZWNvcmRpbmdzVGFibGUgfSBmcm9tICcuL1JlY29yZGluZ3NUYWJsZSc7XG5pbXBvcnQgeyBSZXBvcnRGcmFtZSB9IGZyb20gJy4vUmVwb3J0RnJhbWUnO1xuXG5leHBvcnQgZW51bSBQYW5lbENvbnRlbnQge1xuICBMQUJFTFMsXG59XG5cbmNvbnN0IHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtcbiAge1xuICAgIHRpdGxlOiAnTmFtZScsXG4gICAga2V5UGF0aHM6IFsnbmFtZSddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdTdGFydCBUaW1lJyxcbiAgICBrZXlQYXRoczogWydzdGFydFRpbWUnXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnRHVyYXRpb24nLFxuICAgIGtleVBhdGhzOiBbJ2R1cmF0aW9uJ10sXG4gICAgdHJhbnNmb3JtOiAoZHVyYXRpb246IG51bWJlciwgX3JlYzogQWN0aXZlUmVjb3JkaW5nKSA9PiB7XG4gICAgICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIE51bWJlci5NQVhfVkFMVUU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZHVyYXRpb247XG4gICAgfSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnU3RhdGUnLFxuICAgIGtleVBhdGhzOiBbJ3N0YXRlJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xhYmVscycsXG4gICAga2V5UGF0aHM6IFsnbWV0YWRhdGEnLCAnbGFiZWxzJ10sXG4gIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2ZVJlY29yZGluZ3NUYWJsZVByb3BzIHtcbiAgYXJjaGl2ZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHRvb2xiYXJCcmVha1JlZmVyZW5jZT86IEhUTUxFbGVtZW50IHwgKCgpID0+IEhUTUxFbGVtZW50KTtcbn1cblxuZXhwb3J0IGNvbnN0IEFjdGl2ZVJlY29yZGluZ3NUYWJsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8QWN0aXZlUmVjb3JkaW5nc1RhYmxlUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcblxuICBjb25zdCByb3V0ZXJIaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCB7IHVybCB9ID0gdXNlUm91dGVNYXRjaCgpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2g8U3RhdGVEaXNwYXRjaD4oKTtcblxuICBjb25zdCBbdGFyZ2V0Q29ubmVjdFVSTCwgc2V0VGFyZ2V0Q29ubmVjdFVSTF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtyZWNvcmRpbmdzLCBzZXRSZWNvcmRpbmdzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIEFjdGl2ZVJlY29yZGluZ1tdKTtcbiAgY29uc3QgW2ZpbHRlcmVkUmVjb3JkaW5ncywgc2V0RmlsdGVyZWRSZWNvcmRpbmdzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIEFjdGl2ZVJlY29yZGluZ1tdKTtcbiAgY29uc3QgW2hlYWRlckNoZWNrZWQsIHNldEhlYWRlckNoZWNrZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbY2hlY2tlZEluZGljZXMsIHNldENoZWNrZWRJbmRpY2VzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIG51bWJlcltdKTtcbiAgY29uc3QgW2V4cGFuZGVkUm93cywgc2V0RXhwYW5kZWRSb3dzXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIHN0cmluZ1tdKTtcbiAgY29uc3QgW3Nob3dEZXRhaWxzUGFuZWwsIHNldFNob3dEZXRhaWxzUGFuZWxdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcGFuZWxDb250ZW50LCBzZXRQYW5lbENvbnRlbnRdID0gUmVhY3QudXNlU3RhdGUoUGFuZWxDb250ZW50LkxBQkVMUyk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvck1lc3NhZ2UsIHNldEVycm9yTWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFthY3Rpb25Mb2FkaW5ncywgc2V0QWN0aW9uTG9hZGluZ3NdID0gUmVhY3QudXNlU3RhdGU8UmVjb3JkPEFjdGl2ZUFjdGlvbnMsIGJvb2xlYW4+Pih7XG4gICAgQVJDSElWRTogZmFsc2UsXG4gICAgREVMRVRFOiBmYWxzZSxcbiAgICBTVE9QOiBmYWxzZSxcbiAgfSk7XG4gIGNvbnN0IFtzb3J0QnksIGdldFNvcnRQYXJhbXNdID0gdXNlU29ydCgpO1xuXG4gIGNvbnN0IHRhcmdldFJlY29yZGluZ0ZpbHRlcnMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFJvb3RTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5yZWNvcmRpbmdGaWx0ZXJzLmxpc3QuZmlsdGVyKFxuICAgICAgKHRhcmdldEZpbHRlcjogVGFyZ2V0UmVjb3JkaW5nRmlsdGVycykgPT4gdGFyZ2V0RmlsdGVyLnRhcmdldCA9PT0gdGFyZ2V0Q29ubmVjdFVSTFxuICAgICk7XG4gICAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID4gMCA/IGZpbHRlcnNbMF0uYWN0aXZlLmZpbHRlcnMgOiBlbXB0eUFjdGl2ZVJlY29yZGluZ0ZpbHRlcnM7XG4gIH0pIGFzIFJlY29yZGluZ0ZpbHRlcnNDYXRlZ29yaWVzO1xuXG4gIGNvbnN0IGhhbmRsZVJvd0NoZWNrID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNoZWNrZWQ6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIHNldENoZWNrZWRJbmRpY2VzKChjaSkgPT4gWy4uLmNpLCBpbmRleF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SGVhZGVyQ2hlY2tlZChmYWxzZSk7XG4gICAgICAgIHNldENoZWNrZWRJbmRpY2VzKChjaSkgPT4gY2kuZmlsdGVyKCh2KSA9PiB2ICE9PSBpbmRleCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3NldENoZWNrZWRJbmRpY2VzLCBzZXRIZWFkZXJDaGVja2VkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUhlYWRlckNoZWNrID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF8sIGNoZWNrZWQ6IGJvb2xlYW4gfCAoKHByZXZTdGF0ZTogYm9vbGVhbikgPT4gYm9vbGVhbikpID0+IHtcbiAgICAgIHNldEhlYWRlckNoZWNrZWQoY2hlY2tlZCk7XG4gICAgICBzZXRDaGVja2VkSW5kaWNlcyhjaGVja2VkID8gZmlsdGVyZWRSZWNvcmRpbmdzLm1hcCgocikgPT4gci5pZCkgOiBbXSk7XG4gICAgfSxcbiAgICBbc2V0SGVhZGVyQ2hlY2tlZCwgc2V0Q2hlY2tlZEluZGljZXMsIGZpbHRlcmVkUmVjb3JkaW5nc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGVSZWNvcmRpbmcgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcm91dGVySGlzdG9yeS5wdXNoKGAke3VybH0vY3JlYXRlYCk7XG4gIH0sIFtyb3V0ZXJIaXN0b3J5LCB1cmxdKTtcblxuICBjb25zdCBoYW5kbGVFZGl0TGFiZWxzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNob3dEZXRhaWxzUGFuZWwodHJ1ZSk7XG4gICAgc2V0UGFuZWxDb250ZW50KFBhbmVsQ29udGVudC5MQUJFTFMpO1xuICB9LCBbc2V0U2hvd0RldGFpbHNQYW5lbCwgc2V0UGFuZWxDb250ZW50XSk7XG5cbiAgY29uc3QgaGFuZGxlUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChyZWNvcmRpbmdzOiBSZWFjdC5TZXRTdGF0ZUFjdGlvbjxBY3RpdmVSZWNvcmRpbmdbXT4pID0+IHtcbiAgICAgIHNldFJlY29yZGluZ3MocmVjb3JkaW5ncyk7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICB9LFxuICAgIFtzZXRSZWNvcmRpbmdzLCBzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlcnJvcjogeyBtZXNzYWdlOiBSZWFjdC5TZXRTdGF0ZUFjdGlvbjxzdHJpbmc+IH0pID0+IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRFcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSk7XG4gICAgICBzZXRSZWNvcmRpbmdzKFtdKTtcbiAgICB9LFxuICAgIFtzZXRJc0xvYWRpbmcsIHNldEVycm9yTWVzc2FnZSwgc2V0UmVjb3JkaW5nc11cbiAgKTtcblxuICBjb25zdCByZWZyZXNoUmVjb3JkaW5nTGlzdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC50YXJnZXRcbiAgICAgICAgLnRhcmdldCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigodGFyZ2V0KSA9PiB0YXJnZXQgIT09IE5PX1RBUkdFVCksXG4gICAgICAgICAgY29uY2F0TWFwKCh0YXJnZXQpID0+XG4gICAgICAgICAgICBjb250ZXh0LmFwaS5kb0dldDxBY3RpdmVSZWNvcmRpbmdbXT4oYHRhcmdldHMvJHtlbmNvZGVVUklDb21wb25lbnQodGFyZ2V0LmNvbm5lY3RVcmwpfS9yZWNvcmRpbmdzYClcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBoYW5kbGVSZWNvcmRpbmdzLFxuICAgICAgICAgIGVycm9yOiBoYW5kbGVFcnJvcixcbiAgICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldCwgY29udGV4dC5hcGksIHNldElzTG9hZGluZywgaGFuZGxlUmVjb3JkaW5ncywgaGFuZGxlRXJyb3JdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0LnRhcmdldCgpLnN1YnNjcmliZSgodGFyZ2V0KSA9PiB7XG4gICAgICAgIHNldFRhcmdldENvbm5lY3RVUkwodGFyZ2V0LmNvbm5lY3RVcmwpO1xuICAgICAgICBkaXNwYXRjaChyZWNvcmRpbmdBZGRUYXJnZXRJbnRlbnQodGFyZ2V0LmNvbm5lY3RVcmwpKTtcbiAgICAgICAgcmVmcmVzaFJlY29yZGluZ0xpc3QoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC50YXJnZXQsIHJlZnJlc2hSZWNvcmRpbmdMaXN0LCBzZXRUYXJnZXRDb25uZWN0VVJMLCBkaXNwYXRjaF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIGNvbnRleHQudGFyZ2V0LnRhcmdldCgpLFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQWN0aXZlUmVjb3JkaW5nQ3JlYXRlZCksXG4gICAgICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlNuYXBzaG90Q3JlYXRlZClcbiAgICAgICAgKSxcbiAgICAgIF0pLnN1YnNjcmliZSgoW2N1cnJlbnRUYXJnZXQsIGV2ZW50XSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5jb25uZWN0VXJsICE9IGV2ZW50Lm1lc3NhZ2UudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFJlY29yZGluZ3MoKG9sZCkgPT4gb2xkLmNvbmNhdChbZXZlbnQubWVzc2FnZS5yZWNvcmRpbmddKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQsIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgc2V0UmVjb3JkaW5nc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIGNvbnRleHQudGFyZ2V0LnRhcmdldCgpLFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQWN0aXZlUmVjb3JkaW5nRGVsZXRlZCksXG4gICAgICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlNuYXBzaG90RGVsZXRlZClcbiAgICAgICAgKSxcbiAgICAgIF0pLnN1YnNjcmliZSgoW2N1cnJlbnRUYXJnZXQsIGV2ZW50XSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldC5jb25uZWN0VXJsICE9IGV2ZW50Lm1lc3NhZ2UudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0UmVjb3JkaW5ncygob2xkKSA9PiBvbGQuZmlsdGVyKChyKSA9PiByLm5hbWUgIT09IGV2ZW50Lm1lc3NhZ2UucmVjb3JkaW5nLm5hbWUpKTtcbiAgICAgICAgc2V0Q2hlY2tlZEluZGljZXMoKG9sZCkgPT4gb2xkLmZpbHRlcigoaWR4KSA9PiBpZHggIT09IGV2ZW50Lm1lc3NhZ2UucmVjb3JkaW5nLmlkKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQsIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgc2V0UmVjb3JkaW5ncywgc2V0Q2hlY2tlZEluZGljZXNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBjb250ZXh0LnRhcmdldC50YXJnZXQoKSxcbiAgICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkFjdGl2ZVJlY29yZGluZ1N0b3BwZWQpLFxuICAgICAgXSkuc3Vic2NyaWJlKChbY3VycmVudFRhcmdldCwgZXZlbnRdKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0LmNvbm5lY3RVcmwgIT0gZXZlbnQubWVzc2FnZS50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmVjb3JkaW5ncygob2xkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IFsuLi5vbGRdO1xuICAgICAgICAgIGZvciAoY29uc3QgciBvZiB1cGRhdGVkKSB7XG4gICAgICAgICAgICBpZiAoci5uYW1lID09PSBldmVudC5tZXNzYWdlLnJlY29yZGluZy5uYW1lKSB7XG4gICAgICAgICAgICAgIHIuc3RhdGUgPSBSZWNvcmRpbmdTdGF0ZS5TVE9QUEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQsIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgc2V0UmVjb3JkaW5nc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC50YXJnZXQuYXV0aEZhaWx1cmUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRFcnJvck1lc3NhZ2UoYXV0aEZhaWxNZXNzYWdlKTtcbiAgICAgICAgc2V0UmVjb3JkaW5ncyhbXSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtjb250ZXh0LCBjb250ZXh0LnRhcmdldCwgc2V0RXJyb3JNZXNzYWdlLCBhZGRTdWJzY3JpcHRpb24sIHNldFJlY29yZGluZ3NdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBjb250ZXh0LnRhcmdldC50YXJnZXQoKSxcbiAgICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJlY29yZGluZ01ldGFkYXRhVXBkYXRlZCksXG4gICAgICBdKS5zdWJzY3JpYmUoKFtjdXJyZW50VGFyZ2V0LCBldmVudF0pID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQuY29ubmVjdFVybCAhPSBldmVudC5tZXNzYWdlLnRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRSZWNvcmRpbmdzKChvbGQpID0+XG4gICAgICAgICAgb2xkLm1hcCgobykgPT5cbiAgICAgICAgICAgIG8ubmFtZSA9PSBldmVudC5tZXNzYWdlLnJlY29yZGluZ05hbWUgPyB7IC4uLm8sIG1ldGFkYXRhOiB7IGxhYmVsczogZXZlbnQubWVzc2FnZS5tZXRhZGF0YS5sYWJlbHMgfSB9IDogb1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRSZWNvcmRpbmdzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRGaWx0ZXJlZFJlY29yZGluZ3MoXG4gICAgICBzb3J0UmVzb3VyY2VzKFxuICAgICAgICB7XG4gICAgICAgICAgaW5kZXg6IHNvcnRCeS5pbmRleCA/PyAwLFxuICAgICAgICAgIGRpcmVjdGlvbjogc29ydEJ5LmRpcmVjdGlvbiA/PyBTb3J0QnlEaXJlY3Rpb24uYXNjLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJSZWNvcmRpbmdzKHJlY29yZGluZ3MsIHRhcmdldFJlY29yZGluZ0ZpbHRlcnMpLFxuICAgICAgICB0YWJsZUNvbHVtbnNcbiAgICAgIClcbiAgICApO1xuICB9LCBbc29ydEJ5LCByZWNvcmRpbmdzLCB0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzLCBzZXRGaWx0ZXJlZFJlY29yZGluZ3NdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldENoZWNrZWRJbmRpY2VzKChjaSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRSZWNvcmRpbmdJZHggPSBuZXcgU2V0KGZpbHRlcmVkUmVjb3JkaW5ncy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICAgIHJldHVybiBjaS5maWx0ZXIoKGlkeCkgPT4gZmlsdGVyZWRSZWNvcmRpbmdJZHguaGFzKGlkeCkpO1xuICAgIH0pO1xuICB9LCBbZmlsdGVyZWRSZWNvcmRpbmdzLCBzZXRDaGVja2VkSW5kaWNlc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SGVhZGVyQ2hlY2tlZChjaGVja2VkSW5kaWNlcy5sZW5ndGggPT09IGZpbHRlcmVkUmVjb3JkaW5ncy5sZW5ndGgpO1xuICB9LCBbc2V0SGVhZGVyQ2hlY2tlZCwgY2hlY2tlZEluZGljZXMsIGZpbHRlcmVkUmVjb3JkaW5ncy5sZW5ndGhdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaEVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChcbiAgICAgICgpID0+IHJlZnJlc2hSZWNvcmRpbmdMaXN0KCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW3JlZnJlc2hSZWNvcmRpbmdMaXN0LCBjb250ZXh0LCBjb250ZXh0LnNldHRpbmdzXSk7XG5cbiAgY29uc3QgaGFuZGxlUG9zdEFjdGlvbnMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYWN0aW9uOiBBY3RpdmVBY3Rpb25zKSA9PiB7XG4gICAgICBzZXRBY3Rpb25Mb2FkaW5ncygob2xkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0FjdGlvbkxvYWRpbmdzID0geyAuLi5vbGQgfTtcbiAgICAgICAgbmV3QWN0aW9uTG9hZGluZ3NbYWN0aW9uXSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbmV3QWN0aW9uTG9hZGluZ3M7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRBY3Rpb25Mb2FkaW5nc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVBcmNoaXZlUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRBY3Rpb25Mb2FkaW5ncygob2xkKSA9PiAoeyAuLi5vbGQsIEFSQ0hJVkU6IHRydWUgfSkpO1xuICAgIGNvbnN0IHRhc2tzOiBPYnNlcnZhYmxlPGJvb2xlYW4+W10gPSBbXTtcbiAgICBmaWx0ZXJlZFJlY29yZGluZ3MuZm9yRWFjaCgocjogQWN0aXZlUmVjb3JkaW5nKSA9PiB7XG4gICAgICBpZiAoY2hlY2tlZEluZGljZXMuaW5jbHVkZXMoci5pZCkpIHtcbiAgICAgICAgaGFuZGxlUm93Q2hlY2soZmFsc2UsIHIuaWQpO1xuICAgICAgICB0YXNrcy5wdXNoKGNvbnRleHQuYXBpLmFyY2hpdmVSZWNvcmRpbmcoci5uYW1lKS5waXBlKGZpcnN0KCkpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBmb3JrSm9pbih0YXNrcykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4gaGFuZGxlUG9zdEFjdGlvbnMoJ0FSQ0hJVkUnKSxcbiAgICAgICAgZXJyb3I6ICgpID0+IGhhbmRsZVBvc3RBY3Rpb25zKCdBUkNISVZFJyksXG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtcbiAgICBmaWx0ZXJlZFJlY29yZGluZ3MsXG4gICAgY2hlY2tlZEluZGljZXMsXG4gICAgaGFuZGxlUm93Q2hlY2ssXG4gICAgY29udGV4dC5hcGksXG4gICAgYWRkU3Vic2NyaXB0aW9uLFxuICAgIHNldEFjdGlvbkxvYWRpbmdzLFxuICAgIGhhbmRsZVBvc3RBY3Rpb25zLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVTdG9wUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRBY3Rpb25Mb2FkaW5ncygob2xkKSA9PiAoeyAuLi5vbGQsIFNUT1A6IHRydWUgfSkpO1xuICAgIGNvbnN0IHRhc2tzOiBPYnNlcnZhYmxlPGJvb2xlYW4+W10gPSBbXTtcbiAgICBmaWx0ZXJlZFJlY29yZGluZ3MuZm9yRWFjaCgocjogQWN0aXZlUmVjb3JkaW5nKSA9PiB7XG4gICAgICBpZiAoY2hlY2tlZEluZGljZXMuaW5jbHVkZXMoci5pZCkpIHtcbiAgICAgICAgaGFuZGxlUm93Q2hlY2soZmFsc2UsIHIuaWQpO1xuICAgICAgICBpZiAoci5zdGF0ZSA9PT0gUmVjb3JkaW5nU3RhdGUuUlVOTklORyB8fCByLnN0YXRlID09PSBSZWNvcmRpbmdTdGF0ZS5TVEFSVElORykge1xuICAgICAgICAgIHRhc2tzLnB1c2goY29udGV4dC5hcGkuc3RvcFJlY29yZGluZyhyLm5hbWUpLnBpcGUoZmlyc3QoKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgZm9ya0pvaW4odGFza3MpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IGhhbmRsZVBvc3RBY3Rpb25zKCdTVE9QJyksXG4gICAgICAgIGVycm9yOiAoKSA9PiBoYW5kbGVQb3N0QWN0aW9ucygnU1RPUCcpLFxuICAgICAgfSlcbiAgICApO1xuICB9LCBbXG4gICAgZmlsdGVyZWRSZWNvcmRpbmdzLFxuICAgIGNoZWNrZWRJbmRpY2VzLFxuICAgIGhhbmRsZVJvd0NoZWNrLFxuICAgIGNvbnRleHQuYXBpLFxuICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICBzZXRBY3Rpb25Mb2FkaW5ncyxcbiAgICBoYW5kbGVQb3N0QWN0aW9ucyxcbiAgXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlUmVjb3JkaW5ncyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRBY3Rpb25Mb2FkaW5ncygob2xkKSA9PiAoeyAuLi5vbGQsIERFTEVURTogdHJ1ZSB9KSk7XG4gICAgY29uc3QgdGFza3M6IE9ic2VydmFibGU8Ym9vbGVhbj5bXSA9IFtdO1xuICAgIGZpbHRlcmVkUmVjb3JkaW5ncy5mb3JFYWNoKChyOiBBY3RpdmVSZWNvcmRpbmcpID0+IHtcbiAgICAgIGlmIChjaGVja2VkSW5kaWNlcy5pbmNsdWRlcyhyLmlkKSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydHMuZGVsZXRlKHIpO1xuICAgICAgICB0YXNrcy5wdXNoKGNvbnRleHQuYXBpLmRlbGV0ZVJlY29yZGluZyhyLm5hbWUpLnBpcGUoZmlyc3QoKSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGZvcmtKb2luKHRhc2tzKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiBoYW5kbGVQb3N0QWN0aW9ucygnREVMRVRFJyksXG4gICAgICAgIGVycm9yOiAoKSA9PiBoYW5kbGVQb3N0QWN0aW9ucygnREVMRVRFJyksXG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtcbiAgICBmaWx0ZXJlZFJlY29yZGluZ3MsXG4gICAgY2hlY2tlZEluZGljZXMsXG4gICAgY29udGV4dC5yZXBvcnRzLFxuICAgIGNvbnRleHQuYXBpLFxuICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICBzZXRBY3Rpb25Mb2FkaW5ncyxcbiAgICBoYW5kbGVQb3N0QWN0aW9ucyxcbiAgXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXJGaWx0ZXJzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHJlY29yZGluZ0RlbGV0ZUFsbEZpbHRlcnNJbnRlbnQodGFyZ2V0Q29ubmVjdFVSTCwgZmFsc2UpKTtcbiAgfSwgW2Rpc3BhdGNoLCB0YXJnZXRDb25uZWN0VVJMXSk7XG5cbiAgY29uc3QgdXBkYXRlRmlsdGVycyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0YXJnZXQ6IHN0cmluZywgeyBmaWx0ZXJWYWx1ZSwgZmlsdGVyS2V5LCBkZWxldGVkID0gZmFsc2UsIGRlbGV0ZU9wdGlvbnMgfTogVXBkYXRlRmlsdGVyT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKGRlbGV0ZWQpIHtcbiAgICAgICAgaWYgKGRlbGV0ZU9wdGlvbnMgJiYgZGVsZXRlT3B0aW9ucy5hbGwpIHtcbiAgICAgICAgICBkaXNwYXRjaChyZWNvcmRpbmdEZWxldGVDYXRlZ29yeUZpbHRlcnNJbnRlbnQodGFyZ2V0LCBmaWx0ZXJLZXksIGZhbHNlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzcGF0Y2gocmVjb3JkaW5nRGVsZXRlRmlsdGVySW50ZW50KHRhcmdldCwgZmlsdGVyS2V5LCBmaWx0ZXJWYWx1ZSwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2gocmVjb3JkaW5nQWRkRmlsdGVySW50ZW50KHRhcmdldCwgZmlsdGVyS2V5LCBmaWx0ZXJWYWx1ZSwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNwYXRjaF1cbiAgKTtcblxuICBjb25zdCB0b2dnbGVFeHBhbmRlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRFeHBhbmRlZFJvd3MoKGV4cGFuZGVkUm93cykgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSBleHBhbmRlZFJvd3MuaW5kZXhPZihpZCk7XG4gICAgICAgIHJldHVybiBpZHggPj0gMFxuICAgICAgICAgID8gWy4uLmV4cGFuZGVkUm93cy5zbGljZSgwLCBpZHgpLCAuLi5leHBhbmRlZFJvd3Muc2xpY2UoaWR4ICsgMSwgZXhwYW5kZWRSb3dzLmxlbmd0aCldXG4gICAgICAgICAgOiBbLi4uZXhwYW5kZWRSb3dzLCBpZF07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRFeHBhbmRlZFJvd3NdXG4gICk7XG5cbiAgY29uc3QgUmVjb3JkaW5nc1Rvb2xiYXIgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxBY3RpdmVSZWNvcmRpbmdzVG9vbGJhclxuICAgICAgICB0YXJnZXQ9e3RhcmdldENvbm5lY3RVUkx9XG4gICAgICAgIGNoZWNrZWRJbmRpY2VzPXtjaGVja2VkSW5kaWNlc31cbiAgICAgICAgdGFyZ2V0UmVjb3JkaW5nRmlsdGVycz17dGFyZ2V0UmVjb3JkaW5nRmlsdGVyc31cbiAgICAgICAgcmVjb3JkaW5ncz17cmVjb3JkaW5nc31cbiAgICAgICAgZmlsdGVyZWRSZWNvcmRpbmdzPXtmaWx0ZXJlZFJlY29yZGluZ3N9XG4gICAgICAgIHVwZGF0ZUZpbHRlcnM9e3VwZGF0ZUZpbHRlcnN9XG4gICAgICAgIGhhbmRsZUNsZWFyRmlsdGVycz17aGFuZGxlQ2xlYXJGaWx0ZXJzfVxuICAgICAgICBhcmNoaXZlRW5hYmxlZD17cHJvcHMuYXJjaGl2ZUVuYWJsZWR9XG4gICAgICAgIGhhbmRsZUNyZWF0ZVJlY29yZGluZz17aGFuZGxlQ3JlYXRlUmVjb3JkaW5nfVxuICAgICAgICBoYW5kbGVBcmNoaXZlUmVjb3JkaW5ncz17aGFuZGxlQXJjaGl2ZVJlY29yZGluZ3N9XG4gICAgICAgIGhhbmRsZUVkaXRMYWJlbHM9e2hhbmRsZUVkaXRMYWJlbHN9XG4gICAgICAgIGhhbmRsZVN0b3BSZWNvcmRpbmdzPXtoYW5kbGVTdG9wUmVjb3JkaW5nc31cbiAgICAgICAgaGFuZGxlRGVsZXRlUmVjb3JkaW5ncz17aGFuZGxlRGVsZXRlUmVjb3JkaW5nc31cbiAgICAgICAgYWN0aW9uTG9hZGluZ3M9e2FjdGlvbkxvYWRpbmdzfVxuICAgICAgICB0b29sYmFyQnJlYWtSZWZlcmVuY2U9e3Byb3BzLnRvb2xiYXJCcmVha1JlZmVyZW5jZX1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBbXG4gICAgICB0YXJnZXRDb25uZWN0VVJMLFxuICAgICAgY2hlY2tlZEluZGljZXMsXG4gICAgICB0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzLFxuICAgICAgcmVjb3JkaW5ncyxcbiAgICAgIGZpbHRlcmVkUmVjb3JkaW5ncyxcbiAgICAgIHVwZGF0ZUZpbHRlcnMsXG4gICAgICBoYW5kbGVDbGVhckZpbHRlcnMsXG4gICAgICBwcm9wcy5hcmNoaXZlRW5hYmxlZCxcbiAgICAgIGhhbmRsZUNyZWF0ZVJlY29yZGluZyxcbiAgICAgIGhhbmRsZUFyY2hpdmVSZWNvcmRpbmdzLFxuICAgICAgaGFuZGxlRWRpdExhYmVscyxcbiAgICAgIGhhbmRsZVN0b3BSZWNvcmRpbmdzLFxuICAgICAgaGFuZGxlRGVsZXRlUmVjb3JkaW5ncyxcbiAgICAgIGFjdGlvbkxvYWRpbmdzLFxuICAgICAgcHJvcHMudG9vbGJhckJyZWFrUmVmZXJlbmNlLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBMYWJlbHNQYW5lbCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPFJlY29yZGluZ0xhYmVsc1BhbmVsXG4gICAgICAgIHNldFNob3dQYW5lbD17c2V0U2hvd0RldGFpbHNQYW5lbH1cbiAgICAgICAgaXNUYXJnZXRSZWNvcmRpbmc9e3RydWV9XG4gICAgICAgIGNoZWNrZWRJbmRpY2VzPXtjaGVja2VkSW5kaWNlc31cbiAgICAgIC8+XG4gICAgKSxcbiAgICBbY2hlY2tlZEluZGljZXMsIHNldFNob3dEZXRhaWxzUGFuZWxdXG4gICk7XG5cbiAgY29uc3QgY29sdW1uQ29uZmlnOiBDb2x1bW5Db25maWcgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICBvblNvcnQ6IGdldFNvcnRQYXJhbXMsXG4gICAgfSksXG4gICAgW2dldFNvcnRQYXJhbXNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJhd2VyIGlzRXhwYW5kZWQ9e3Nob3dEZXRhaWxzUGFuZWx9IGlzSW5saW5lIGlkPXsnYWN0aXZlLXJlY29yZGluZy1kcmF3ZXInfT5cbiAgICAgIDxEcmF3ZXJDb250ZW50XG4gICAgICAgIHBhbmVsQ29udGVudD17eyBbUGFuZWxDb250ZW50LkxBQkVMU106IExhYmVsc1BhbmVsIH1bcGFuZWxDb250ZW50XX1cbiAgICAgICAgY2xhc3NOYW1lPVwicmVjb3JkaW5ncy10YWJsZS1kcmF3ZXItY29udGVudFwiXG4gICAgICA+XG4gICAgICAgIDxEcmF3ZXJDb250ZW50Qm9keSBoYXNQYWRkaW5nPlxuICAgICAgICAgIDxSZWNvcmRpbmdzVGFibGVcbiAgICAgICAgICAgIHRhYmxlVGl0bGU9XCJBY3RpdmUgRmxpZ2h0IFJlY29yZGluZ3NcIlxuICAgICAgICAgICAgdG9vbGJhcj17UmVjb3JkaW5nc1Rvb2xiYXJ9XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnM9e2NvbHVtbkNvbmZpZ31cbiAgICAgICAgICAgIGlzSGVhZGVyQ2hlY2tlZD17aGVhZGVyQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uSGVhZGVyQ2hlY2s9e2hhbmRsZUhlYWRlckNoZWNrfVxuICAgICAgICAgICAgaXNFbXB0eT17IXJlY29yZGluZ3MubGVuZ3RofVxuICAgICAgICAgICAgaXNFbXB0eUZpbHRlclJlc3VsdD17IWZpbHRlcmVkUmVjb3JkaW5ncy5sZW5ndGh9XG4gICAgICAgICAgICBjbGVhckZpbHRlcnM9e2hhbmRsZUNsZWFyRmlsdGVyc31cbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U9e2Vycm9yTWVzc2FnZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZmlsdGVyZWRSZWNvcmRpbmdzLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgICA8QWN0aXZlUmVjb3JkaW5nUm93XG4gICAgICAgICAgICAgICAga2V5PXtyLm5hbWV9XG4gICAgICAgICAgICAgICAgcmVjb3JkaW5nPXtyfVxuICAgICAgICAgICAgICAgIGxhYmVsRmlsdGVycz17dGFyZ2V0UmVjb3JkaW5nRmlsdGVycy5MYWJlbH1cbiAgICAgICAgICAgICAgICBpbmRleD17ci5pZH1cbiAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRUYXJnZXRVUkw9e3RhcmdldENvbm5lY3RVUkx9XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRSb3dzPXtleHBhbmRlZFJvd3N9XG4gICAgICAgICAgICAgICAgY2hlY2tlZEluZGljZXM9e2NoZWNrZWRJbmRpY2VzfVxuICAgICAgICAgICAgICAgIHRvZ2dsZUV4cGFuZGVkPXt0b2dnbGVFeHBhbmRlZH1cbiAgICAgICAgICAgICAgICBoYW5kbGVSb3dDaGVjaz17aGFuZGxlUm93Q2hlY2t9XG4gICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVycz17dXBkYXRlRmlsdGVyc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvUmVjb3JkaW5nc1RhYmxlPlxuICAgICAgICA8L0RyYXdlckNvbnRlbnRCb2R5PlxuICAgICAgPC9EcmF3ZXJDb250ZW50PlxuICAgIDwvRHJhd2VyPlxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aXZlQWN0aW9ucyA9ICdBUkNISVZFJyB8ICdTVE9QJyB8ICdERUxFVEUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2ZVJlY29yZGluZ3NUb29sYmFyUHJvcHMge1xuICB0YXJnZXQ6IHN0cmluZztcbiAgY2hlY2tlZEluZGljZXM6IG51bWJlcltdO1xuICB0YXJnZXRSZWNvcmRpbmdGaWx0ZXJzOiBSZWNvcmRpbmdGaWx0ZXJzQ2F0ZWdvcmllcztcbiAgcmVjb3JkaW5nczogQWN0aXZlUmVjb3JkaW5nW107XG4gIGZpbHRlcmVkUmVjb3JkaW5nczogQWN0aXZlUmVjb3JkaW5nW107XG4gIHVwZGF0ZUZpbHRlcnM6ICh0YXJnZXQ6IHN0cmluZywgdXBkYXRlRmlsdGVyT3B0aW9uczogVXBkYXRlRmlsdGVyT3B0aW9ucykgPT4gdm9pZDtcbiAgaGFuZGxlQ2xlYXJGaWx0ZXJzOiAoKSA9PiB2b2lkO1xuICBhcmNoaXZlRW5hYmxlZDogYm9vbGVhbjtcbiAgaGFuZGxlQ3JlYXRlUmVjb3JkaW5nOiAoKSA9PiB2b2lkO1xuICBoYW5kbGVBcmNoaXZlUmVjb3JkaW5nczogKCkgPT4gdm9pZDtcbiAgaGFuZGxlRWRpdExhYmVsczogKCkgPT4gdm9pZDtcbiAgaGFuZGxlU3RvcFJlY29yZGluZ3M6ICgpID0+IHZvaWQ7XG4gIGhhbmRsZURlbGV0ZVJlY29yZGluZ3M6ICgpID0+IHZvaWQ7XG4gIGFjdGlvbkxvYWRpbmdzOiBSZWNvcmQ8QWN0aXZlQWN0aW9ucywgYm9vbGVhbj47XG4gIHRvb2xiYXJCcmVha1JlZmVyZW5jZT86IEhUTUxFbGVtZW50IHwgKCgpID0+IEhUTUxFbGVtZW50KTtcbn1cblxuY29uc3QgQWN0aXZlUmVjb3JkaW5nc1Rvb2xiYXI6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PEFjdGl2ZVJlY29yZGluZ3NUb29sYmFyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW3dhcm5pbmdNb2RhbE9wZW4sIHNldFdhcm5pbmdNb2RhbE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYWN0aW9uVG9nZ2xlT3Blbiwgc2V0QWN0aW9uVG9nZ2xlT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaGFuZGxlQWN0aW9uVG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0QWN0aW9uVG9nZ2xlT3Blbigob2xkKSA9PiAhb2xkKSwgW3NldEFjdGlvblRvZ2dsZU9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVXYXJuaW5nTW9kYWxDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRXYXJuaW5nTW9kYWxPcGVuKGZhbHNlKTtcbiAgfSwgW3NldFdhcm5pbmdNb2RhbE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVCdXR0b24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGNvbnRleHQuc2V0dGluZ3MuZGVsZXRpb25EaWFsb2dzRW5hYmxlZEZvcihEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVBY3RpdmVSZWNvcmRpbmdzKSkge1xuICAgICAgc2V0V2FybmluZ01vZGFsT3Blbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHMuaGFuZGxlRGVsZXRlUmVjb3JkaW5ncygpO1xuICAgIH1cbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIHNldFdhcm5pbmdNb2RhbE9wZW4sIHByb3BzXSk7XG5cbiAgY29uc3QgaXNTdG9wRGlzYWJsZWQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXByb3BzLmNoZWNrZWRJbmRpY2VzLmxlbmd0aCB8fCBwcm9wcy5hY3Rpb25Mb2FkaW5nc1snU1RPUCddKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyZWQgPSBwcm9wcy5maWx0ZXJlZFJlY29yZGluZ3MuZmlsdGVyKChyKSA9PiBwcm9wcy5jaGVja2VkSW5kaWNlcy5pbmNsdWRlcyhyLmlkKSk7XG4gICAgY29uc3QgYW55UnVubmluZyA9IGZpbHRlcmVkLnNvbWUoKHIpID0+IHIuc3RhdGUgPT09IFJlY29yZGluZ1N0YXRlLlJVTk5JTkcgfHwgci5zdGF0ZSA9PSBSZWNvcmRpbmdTdGF0ZS5TVEFSVElORyk7XG4gICAgcmV0dXJuICFhbnlSdW5uaW5nO1xuICB9LCBbcHJvcHMuYWN0aW9uTG9hZGluZ3MsIHByb3BzLmNoZWNrZWRJbmRpY2VzLCBwcm9wcy5maWx0ZXJlZFJlY29yZGluZ3NdKTtcblxuICBjb25zdCBhY3Rpb25Mb2FkaW5nUHJvcHMgPSBSZWFjdC51c2VNZW1vPFJlY29yZDxBY3RpdmVBY3Rpb25zLCBMb2FkaW5nUHJvcHNUeXBlPj4oXG4gICAgKCkgPT4gKHtcbiAgICAgIEFSQ0hJVkU6IHtcbiAgICAgICAgc3Bpbm5lckFyaWFWYWx1ZVRleHQ6ICdBcmNoaXZpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnYXJjaGl2ZS1hY3RpdmUtcmVjb3JkaW5nJyxcbiAgICAgICAgaXNMb2FkaW5nOiBwcm9wcy5hY3Rpb25Mb2FkaW5nc1snQVJDSElWRSddLFxuICAgICAgfSxcbiAgICAgIFNUT1A6IHtcbiAgICAgICAgc3Bpbm5lckFyaWFWYWx1ZVRleHQ6ICdTdG9wcGluZycsXG4gICAgICAgIHNwaW5uZXJBcmlhTGFiZWw6ICdzdG9wLWFjdGl2ZS1yZWNvcmRpbmcnLFxuICAgICAgICBpc0xvYWRpbmc6IHByb3BzLmFjdGlvbkxvYWRpbmdzWydTVE9QJ10sXG4gICAgICB9LFxuICAgICAgREVMRVRFOiB7XG4gICAgICAgIHNwaW5uZXJBcmlhVmFsdWVUZXh0OiAnRGVsZXRpbmcnLFxuICAgICAgICBzcGlubmVyQXJpYUxhYmVsOiAnZGVsZXRpbmctYWN0aXZlLXJlY29yZGluZycsXG4gICAgICAgIGlzTG9hZGluZzogcHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0RFTEVURSddLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBbcHJvcHMuYWN0aW9uTG9hZGluZ3NdXG4gICk7XG5cbiAgY29uc3QgYnV0dG9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBhcnIgPSBbXG4gICAgICB7XG4gICAgICAgIGRlZmF1bHQ6IChcbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgb25DbGljaz17cHJvcHMuaGFuZGxlQ3JlYXRlUmVjb3JkaW5nfSBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJyZWNvcmRpbmdzLWNyZWF0ZS1idG5cIj5cbiAgICAgICAgICAgIENyZWF0ZVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApLFxuICAgICAgICBjb2xsYXBzZWQ6IChcbiAgICAgICAgICA8T3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtIGtleT17J0NyZWF0ZSd9IGlzU2hhcmVkIG9uQ2xpY2s9e3Byb3BzLmhhbmRsZUNyZWF0ZVJlY29yZGluZ30+XG4gICAgICAgICAgICBDcmVhdGVcbiAgICAgICAgICA8L092ZXJmbG93TWVudURyb3Bkb3duSXRlbT5cbiAgICAgICAgKSxcbiAgICAgICAga2V5OiAnQ3JlYXRlJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBpZiAocHJvcHMuYXJjaGl2ZUVuYWJsZWQpIHtcbiAgICAgIGFyci5wdXNoKHtcbiAgICAgICAgZGVmYXVsdDogKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgb25DbGljaz17cHJvcHMuaGFuZGxlQXJjaGl2ZVJlY29yZGluZ3N9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXshcHJvcHMuY2hlY2tlZEluZGljZXMubGVuZ3RoIHx8IHByb3BzLmFjdGlvbkxvYWRpbmdzWydBUkNISVZFJ119XG4gICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJyZWNvcmRpbmdzLWFyY2hpdmUtYnRuXCJcbiAgICAgICAgICAgIHsuLi5hY3Rpb25Mb2FkaW5nUHJvcHNbJ0FSQ0hJVkUnXX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0FSQ0hJVkUnXSA/ICdBcmNoaXZpbmcnIDogJ0FyY2hpdmUnfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApLFxuICAgICAgICBjb2xsYXBzZWQ6IChcbiAgICAgICAgICA8T3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtIGtleT17J0FyY2hpdmUnfSBpc1NoYXJlZCBvbkNsaWNrPXtwcm9wcy5oYW5kbGVBcmNoaXZlUmVjb3JkaW5nc30+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0FSQ0hJVkUnXSA/ICdBcmNoaXZpbmcnIDogJ0FyY2hpdmUnfVxuICAgICAgICAgIDwvT3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtPlxuICAgICAgICApLFxuICAgICAgICBrZXk6ICdBcmNoaXZlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhcnIgPSBbXG4gICAgICAuLi5hcnIsXG4gICAgICB7XG4gICAgICAgIGRlZmF1bHQ6IChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3Byb3BzLmhhbmRsZUVkaXRMYWJlbHN9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXshcHJvcHMuY2hlY2tlZEluZGljZXMubGVuZ3RofVxuICAgICAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwicmVjb3JkaW5ncy1sYWJlbHMtYnRuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBFZGl0IExhYmVsc1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApLFxuICAgICAgICBjb2xsYXBzZWQ6IChcbiAgICAgICAgICA8T3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtIGtleT17J0VkaXQgTGFiZWxzJ30gaXNTaGFyZWQgb25DbGljaz17cHJvcHMuaGFuZGxlRWRpdExhYmVsc30+XG4gICAgICAgICAgICBFZGl0IExhYmVsc1xuICAgICAgICAgIDwvT3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtPlxuICAgICAgICApLFxuICAgICAgICBrZXk6ICdFZGl0IExhYmVscycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkZWZhdWx0OiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3Byb3BzLmhhbmRsZVN0b3BSZWNvcmRpbmdzfVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNTdG9wRGlzYWJsZWR9XG4gICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJyZWNvcmRpbmdzLXN0b3AtYnRuXCJcbiAgICAgICAgICAgIHsuLi5hY3Rpb25Mb2FkaW5nUHJvcHNbJ1NUT1AnXX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ1NUT1AnXSA/ICdTdG9wcGluZycgOiAnU3RvcCd9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICksXG4gICAgICAgIGNvbGxhcHNlZDogKFxuICAgICAgICAgIDxPdmVyZmxvd01lbnVEcm9wZG93bkl0ZW0ga2V5PXsnU3RvcCd9IGlzU2hhcmVkIG9uQ2xpY2s9e3Byb3BzLmhhbmRsZVN0b3BSZWNvcmRpbmdzfT5cbiAgICAgICAgICAgIHtwcm9wcy5hY3Rpb25Mb2FkaW5nc1snU1RPUCddID8gJ1N0b3BwaW5nJyA6ICdTdG9wJ31cbiAgICAgICAgICA8L092ZXJmbG93TWVudURyb3Bkb3duSXRlbT5cbiAgICAgICAgKSxcbiAgICAgICAga2V5OiAnU3RvcCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkZWZhdWx0OiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImRhbmdlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWxldGVCdXR0b259XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXshcHJvcHMuY2hlY2tlZEluZGljZXMubGVuZ3RoIHx8IHByb3BzLmFjdGlvbkxvYWRpbmdzWydERUxFVEUnXX1cbiAgICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInJlY29yZGluZ3MtZGVsZXRlLWJ0blwiXG4gICAgICAgICAgICB7Li4uYWN0aW9uTG9hZGluZ1Byb3BzWydERUxFVEUnXX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0RFTEVURSddID8gJ0RlbGV0aW5nJyA6ICdEZWxldGUnfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApLFxuICAgICAgICBjb2xsYXBzZWQ6IChcbiAgICAgICAgICA8T3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtIGtleT17J0RlbGV0ZSd9IGlzU2hhcmVkIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUJ1dHRvbn0+XG4gICAgICAgICAgICB7cHJvcHMuYWN0aW9uTG9hZGluZ3NbJ0RFTEVURSddID8gJ0RlbGV0aW5nJyA6ICdEZWxldGUnfVxuICAgICAgICAgIDwvT3ZlcmZsb3dNZW51RHJvcGRvd25JdGVtPlxuICAgICAgICApLFxuICAgICAgICBrZXk6ICdEZWxldGUnLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFtcbiAgICBoYW5kbGVEZWxldGVCdXR0b24sXG4gICAgaXNTdG9wRGlzYWJsZWQsXG4gICAgYWN0aW9uTG9hZGluZ1Byb3BzLFxuICAgIHByb3BzLmhhbmRsZUNyZWF0ZVJlY29yZGluZyxcbiAgICBwcm9wcy5oYW5kbGVBcmNoaXZlUmVjb3JkaW5ncyxcbiAgICBwcm9wcy5oYW5kbGVFZGl0TGFiZWxzLFxuICAgIHByb3BzLmhhbmRsZVN0b3BSZWNvcmRpbmdzLFxuICAgIHByb3BzLmFjdGlvbkxvYWRpbmdzLFxuICAgIHByb3BzLmFyY2hpdmVFbmFibGVkLFxuICAgIHByb3BzLmNoZWNrZWRJbmRpY2VzLFxuICBdKTtcblxuICBjb25zdCBkZWxldGVBY3RpdmVXYXJuaW5nTW9kYWwgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICB3YXJuaW5nVHlwZT17RGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGUuRGVsZXRlQWN0aXZlUmVjb3JkaW5nc31cbiAgICAgICAgdmlzaWJsZT17d2FybmluZ01vZGFsT3Blbn1cbiAgICAgICAgb25BY2NlcHQ9e3Byb3BzLmhhbmRsZURlbGV0ZVJlY29yZGluZ3N9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZVdhcm5pbmdNb2RhbENsb3NlfVxuICAgICAgLz5cbiAgICApO1xuICB9LCBbd2FybmluZ01vZGFsT3BlbiwgcHJvcHMuaGFuZGxlRGVsZXRlUmVjb3JkaW5ncywgaGFuZGxlV2FybmluZ01vZGFsQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIDxUb29sYmFyXG4gICAgICBpZD1cImFjdGl2ZS1yZWNvcmRpbmdzLXRvb2xiYXJcIlxuICAgICAgYXJpYS1sYWJlbD1cImFjdGl2ZS1yZWNvcmRpbmctdG9vbGJhclwiXG4gICAgICBjbGVhckFsbEZpbHRlcnM9e3Byb3BzLmhhbmRsZUNsZWFyRmlsdGVyc31cbiAgICAgIGlzU3RpY2t5XG4gICAgPlxuICAgICAgPFRvb2xiYXJDb250ZW50PlxuICAgICAgICA8UmVjb3JkaW5nRmlsdGVyc1xuICAgICAgICAgIHRhcmdldD17cHJvcHMudGFyZ2V0fVxuICAgICAgICAgIGlzQXJjaGl2ZWQ9e2ZhbHNlfVxuICAgICAgICAgIHJlY29yZGluZ3M9e3Byb3BzLnJlY29yZGluZ3N9XG4gICAgICAgICAgZmlsdGVycz17cHJvcHMudGFyZ2V0UmVjb3JkaW5nRmlsdGVyc31cbiAgICAgICAgICB1cGRhdGVGaWx0ZXJzPXtwcm9wcy51cGRhdGVGaWx0ZXJzfVxuICAgICAgICAgIGJyZWFrcG9pbnQ9eyd4bCd9XG4gICAgICAgIC8+XG4gICAgICAgIDxUb29sYmFyR3JvdXAgc3R5bGU9e3sgYWxpZ25TZWxmOiAnc3RhcnQnIH19IHZhcmlhbnQ9XCJidXR0b24tZ3JvdXBcIj5cbiAgICAgICAgICA8VG9vbGJhckl0ZW0gdmFyaWFudD1cIm92ZXJmbG93LW1lbnVcIj5cbiAgICAgICAgICAgIDxPdmVyZmxvd01lbnVcbiAgICAgICAgICAgICAgYnJlYWtwb2ludD1cImxnXCJcbiAgICAgICAgICAgICAgYnJlYWtwb2ludFJlZmVyZW5jZT17XG4gICAgICAgICAgICAgICAgcHJvcHMudG9vbGJhckJyZWFrUmVmZXJlbmNlIHx8XG4gICAgICAgICAgICAgICAgKCgpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RpdmUtcmVjb3JkaW5ncy10b29sYmFyJykgfHwgZG9jdW1lbnQuYm9keSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8T3ZlcmZsb3dNZW51Q29udGVudD5cbiAgICAgICAgICAgICAgICA8T3ZlcmZsb3dNZW51R3JvdXAgZ3JvdXBUeXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICB7YnV0dG9ucy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPE92ZXJmbG93TWVudUl0ZW0ga2V5PXtiLmtleX0+e2IuZGVmYXVsdH08L092ZXJmbG93TWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L092ZXJmbG93TWVudUdyb3VwPlxuICAgICAgICAgICAgICA8L092ZXJmbG93TWVudUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxPdmVyZmxvd01lbnVDb250cm9sPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93blxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17J2FjdGl2ZS1yZWNvcmRpbmctYWN0aW9ucyd9XG4gICAgICAgICAgICAgICAgICBpc1BsYWluXG4gICAgICAgICAgICAgICAgICBpc0ZsaXBFbmFibGVkXG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gc2V0QWN0aW9uVG9nZ2xlT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICBtZW51QXBwZW5kVG89e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICAgICAgICBpc09wZW49e2FjdGlvblRvZ2dsZU9wZW59XG4gICAgICAgICAgICAgICAgICB0b2dnbGU9ezxLZWJhYlRvZ2dsZSBpZD1cImFjdGl2ZS1yZWNvcmRpbmctYWN0aW9ucy10b2dnbGUta2ViYWJcIiBvblRvZ2dsZT17aGFuZGxlQWN0aW9uVG9nZ2xlfSAvPn1cbiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duSXRlbXM9e2J1dHRvbnMubWFwKChiKSA9PiBiLmNvbGxhcHNlZCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9PdmVyZmxvd01lbnVDb250cm9sPlxuICAgICAgICAgICAgPC9PdmVyZmxvd01lbnU+XG4gICAgICAgICAgPC9Ub29sYmFySXRlbT5cbiAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgIHtkZWxldGVBY3RpdmVXYXJuaW5nTW9kYWx9XG4gICAgICA8L1Rvb2xiYXJDb250ZW50PlxuICAgIDwvVG9vbGJhcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlUmVjb3JkaW5nUm93UHJvcHMge1xuICByZWNvcmRpbmc6IEFjdGl2ZVJlY29yZGluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgY3VycmVudFNlbGVjdGVkVGFyZ2V0VVJMOiBzdHJpbmc7XG4gIGV4cGFuZGVkUm93czogc3RyaW5nW107XG4gIGNoZWNrZWRJbmRpY2VzOiBudW1iZXJbXTtcbiAgbGFiZWxGaWx0ZXJzOiBzdHJpbmdbXTtcbiAgdG9nZ2xlRXhwYW5kZWQ6IChyb3dJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBoYW5kbGVSb3dDaGVjazogKGNoZWNrZWQ6IGJvb2xlYW4sIHJvd0lkeDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVGaWx0ZXJzOiAodGFyZ2V0OiBzdHJpbmcsIHVwZGF0ZUZpbHRlck9wdGlvbnM6IFVwZGF0ZUZpbHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBBY3RpdmVSZWNvcmRpbmdSb3c6IFJlYWN0LkZDPEFjdGl2ZVJlY29yZGluZ1Jvd1Byb3BzPiA9ICh7XG4gIHJlY29yZGluZyxcbiAgaW5kZXgsXG4gIGN1cnJlbnRTZWxlY3RlZFRhcmdldFVSTCxcbiAgZXhwYW5kZWRSb3dzLFxuICBjaGVja2VkSW5kaWNlcyxcbiAgbGFiZWxGaWx0ZXJzLFxuICB0b2dnbGVFeHBhbmRlZCxcbiAgaGFuZGxlUm93Q2hlY2ssXG4gIHVwZGF0ZUZpbHRlcnMsXG59KSA9PiB7XG4gIGNvbnN0IFtkYXlqcywgZGF0ZXRpbWVDb250ZXh0XSA9IHVzZURheWpzKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcblxuICBjb25zdCBwYXJzZWRMYWJlbHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gcGFyc2VMYWJlbHMocmVjb3JkaW5nLm1ldGFkYXRhLmxhYmVscyk7XG4gIH0sIFtyZWNvcmRpbmddKTtcblxuICBjb25zdCBleHBhbmRlZFJvd0lkID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBgYWN0aXZlLXRhYmxlLXJvdy0ke3JlY29yZGluZy5uYW1lfS0ke3JlY29yZGluZy5zdGFydFRpbWV9LWV4cGAsXG4gICAgW3JlY29yZGluZ11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVFeHBhbmRlZChleHBhbmRlZFJvd0lkKSwgW2V4cGFuZGVkUm93SWQsIHRvZ2dsZUV4cGFuZGVkXSk7XG5cbiAgY29uc3QgaXNFeHBhbmRlZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBleHBhbmRlZFJvd3MuaW5jbHVkZXMoZXhwYW5kZWRSb3dJZCk7XG4gIH0sIFtleHBhbmRlZFJvd0lkLCBleHBhbmRlZFJvd3NdKTtcblxuICBjb25zdCBoYW5kbGVDaGVjayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgICBoYW5kbGVSb3dDaGVjayhjaGVja2VkLCBpbmRleCk7XG4gICAgfSxcbiAgICBbaW5kZXgsIGhhbmRsZVJvd0NoZWNrXVxuICApO1xuXG4gIGNvbnN0IHBhcmVudFJvdyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IFJlY29yZGluZ0R1cmF0aW9uID0gKHByb3BzOiB7IGR1cmF0aW9uOiBudW1iZXIgfSkgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gUmVhY3QudXNlTWVtbyhcbiAgICAgICAgKCkgPT4gKHByb3BzLmR1cmF0aW9uID09PSAwID8gJ0NvbnRpbnVvdXMnIDogYCR7cHJvcHMuZHVyYXRpb24gLyAxMDAwfXNgKSxcbiAgICAgICAgW3Byb3BzLmR1cmF0aW9uXVxuICAgICAgKTtcbiAgICAgIHJldHVybiA8c3Bhbj57c3RyfTwvc3Bhbj47XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8VHIga2V5PXtgJHtpbmRleH1fcGFyZW50YH0+XG4gICAgICAgIDxUZCBrZXk9e2BhY3RpdmUtdGFibGUtcm93LSR7aW5kZXh9XzBgfT5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIG5hbWU9e2BhY3RpdmUtdGFibGUtcm93LSR7aW5kZXh9LWNoZWNrYH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGVja31cbiAgICAgICAgICAgIGlzQ2hlY2tlZD17Y2hlY2tlZEluZGljZXMuaW5jbHVkZXMoaW5kZXgpfVxuICAgICAgICAgICAgaWQ9e2BhY3RpdmUtdGFibGUtcm93LSR7aW5kZXh9LWNoZWNrYH1cbiAgICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImFjdGl2ZS1yZWNvcmRpbmdzLWNoZWNrYm94XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1RkPlxuICAgICAgICA8VGRcbiAgICAgICAgICBrZXk9e2BhY3RpdmUtdGFibGUtcm93LSR7aW5kZXh9XzFgfVxuICAgICAgICAgIGlkPXtgYWN0aXZlLWV4LXRvZ2dsZS0ke2luZGV4fWB9XG4gICAgICAgICAgYXJpYS1jb250cm9scz17YGFjdGl2ZS1leC1leHBhbmQtJHtpbmRleH1gfVxuICAgICAgICAgIGV4cGFuZD17e1xuICAgICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgaXNFeHBhbmRlZDogaXNFeHBhbmRlZCxcbiAgICAgICAgICAgIG9uVG9nZ2xlOiBoYW5kbGVUb2dnbGUsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRkIGtleT17YGFjdGl2ZS10YWJsZS1yb3ctJHtpbmRleH1fMmB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzBdLnRpdGxlfT5cbiAgICAgICAgICB7cmVjb3JkaW5nLm5hbWV9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhY3RpdmUtdGFibGUtcm93LSR7aW5kZXh9XzNgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1sxXS50aXRsZX0+XG4gICAgICAgICAgPFRpbWVzdGFtcFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVjb3JkaW5nLXRhYmxlX190aW1lc3RhbXBcIlxuICAgICAgICAgICAgdG9vbHRpcD17eyB2YXJpYW50OiBUaW1lc3RhbXBUb29sdGlwVmFyaWFudC5jdXN0b20sIGNvbnRlbnQ6IGRheWpzKHJlY29yZGluZy5zdGFydFRpbWUpLnRvSVNPU3RyaW5nKCkgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZGF5anMocmVjb3JkaW5nLnN0YXJ0VGltZSkudHooZGF0ZXRpbWVDb250ZXh0LnRpbWVab25lLmZ1bGwpLmZvcm1hdCgnTCBMVFMgeicpfVxuICAgICAgICAgIDwvVGltZXN0YW1wPlxuICAgICAgICA8L1RkPlxuICAgICAgICA8VGQga2V5PXtgYWN0aXZlLXRhYmxlLXJvdy0ke2luZGV4fV80YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMl0udGl0bGV9PlxuICAgICAgICAgIDxSZWNvcmRpbmdEdXJhdGlvbiBkdXJhdGlvbj17cmVjb3JkaW5nLmR1cmF0aW9ufSAvPlxuICAgICAgICA8L1RkPlxuICAgICAgICA8VGQga2V5PXtgYWN0aXZlLXRhYmxlLXJvdy0ke2luZGV4fV81YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbM10udGl0bGV9PlxuICAgICAgICAgIHtyZWNvcmRpbmcuc3RhdGV9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhY3RpdmUtdGFibGUtcm93LSR7aW5kZXh9XzZgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1s0XS50aXRsZX0+XG4gICAgICAgICAgPExhYmVsQ2VsbFxuICAgICAgICAgICAgdGFyZ2V0PXtjdXJyZW50U2VsZWN0ZWRUYXJnZXRVUkx9XG4gICAgICAgICAgICBjbGlja2FibGVPcHRpb25zPXt7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbHRlcnM6IHVwZGF0ZUZpbHRlcnMsXG4gICAgICAgICAgICAgIGxhYmVsRmlsdGVyczogbGFiZWxGaWx0ZXJzLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGxhYmVscz17cGFyc2VkTGFiZWxzfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxSZWNvcmRpbmdBY3Rpb25zXG4gICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgIHJlY29yZGluZz17cmVjb3JkaW5nfVxuICAgICAgICAgIHVwbG9hZEZuPXsoKSA9PiBjb250ZXh0LmFwaS51cGxvYWRBY3RpdmVSZWNvcmRpbmdUb0dyYWZhbmEocmVjb3JkaW5nLm5hbWUpfVxuICAgICAgICAvPlxuICAgICAgPC9Ucj5cbiAgICApO1xuICB9LCBbXG4gICAgaW5kZXgsXG4gICAgZGF5anMsXG4gICAgZGF0ZXRpbWVDb250ZXh0LnRpbWVab25lLmZ1bGwsXG4gICAgY2hlY2tlZEluZGljZXMsXG4gICAgaXNFeHBhbmRlZCxcbiAgICByZWNvcmRpbmcsXG4gICAgbGFiZWxGaWx0ZXJzLFxuICAgIGN1cnJlbnRTZWxlY3RlZFRhcmdldFVSTCxcbiAgICBwYXJzZWRMYWJlbHMsXG4gICAgY29udGV4dC5hcGksXG4gICAgaGFuZGxlQ2hlY2ssXG4gICAgaGFuZGxlVG9nZ2xlLFxuICAgIHVwZGF0ZUZpbHRlcnMsXG4gIF0pO1xuXG4gIGNvbnN0IGNoaWxkUm93ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUciBrZXk9e2Ake2luZGV4fV9jaGlsZGB9IGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9PlxuICAgICAgICA8VGQga2V5PXtgYWN0aXZlLWV4LWV4cGFuZC0ke2luZGV4fWB9IGRhdGFMYWJlbD17J0NvbnRlbnQgRGV0YWlscyd9IGNvbFNwYW49e3RhYmxlQ29sdW1ucy5sZW5ndGggKyAzfT5cbiAgICAgICAgICA8RXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgICAgICA8VGV4dD5SZWNvcmRpbmcgT3B0aW9uczo8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgdG9EaXNrID0ge1N0cmluZyhyZWNvcmRpbmcudG9EaXNrKX0gJmVtc3A7IG1heEFnZSA9IHtyZWNvcmRpbmcubWF4QWdlIC8gMTAwMH1zICZlbXNwOyBtYXhTaXplID17JyAnfVxuICAgICAgICAgICAgICB7cmVjb3JkaW5nLm1heFNpemV9QlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPGJyPjwvYnI+XG4gICAgICAgICAgICA8aHI+PC9ocj5cbiAgICAgICAgICAgIDxicj48L2JyPlxuICAgICAgICAgICAgPFRleHQ+QXV0b21hdGVkIEFuYWx5c2lzOjwvVGV4dD5cbiAgICAgICAgICAgIDxSZXBvcnRGcmFtZSBpc0V4cGFuZGVkPXtpc0V4cGFuZGVkfSByZWNvcmRpbmc9e3JlY29yZGluZ30gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNjQwXCIgLz5cbiAgICAgICAgICA8L0V4cGFuZGFibGVSb3dDb250ZW50PlxuICAgICAgICA8L1RkPlxuICAgICAgPC9Ucj5cbiAgICApO1xuICB9LCBbcmVjb3JkaW5nLCBpbmRleCwgaXNFeHBhbmRlZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPFRib2R5IGtleT17aW5kZXh9IGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9PlxuICAgICAge3BhcmVudFJvd31cbiAgICAgIHtjaGlsZFJvd31cbiAgICA8L1Rib2R5PlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXJnZXRWaWV3IH0gZnJvbSAnQGFwcC9UYXJnZXRWaWV3L1RhcmdldFZpZXcnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUYWIsIHN3aXRjaFRhYiB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZEJvZHksIENhcmRUaXRsZSwgVGFiLCBUYWJzLCBUYWJUaXRsZVRleHQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IEFjdGl2ZVJlY29yZGluZ3NUYWJsZSB9IGZyb20gJy4vQWN0aXZlUmVjb3JkaW5nc1RhYmxlJztcbmltcG9ydCB7IEFyY2hpdmVkUmVjb3JkaW5nc1RhYmxlIH0gZnJvbSAnLi9BcmNoaXZlZFJlY29yZGluZ3NUYWJsZSc7XG5cbmVudW0gUmVjb3JkaW5nVGFiIHtcbiAgQUNUSVZFX1JFQ09SRElORyA9ICdhY3RpdmUtcmVjb3JkaW5nJyxcbiAgQVJDSElWRURfUkVDT1JESU5HID0gJ2FyY2hpdmVkLXJlY29yZGluZycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nc1Byb3BzIHt9XG5cbmV4cG9ydCBjb25zdCBSZWNvcmRpbmdzOiBSZWFjdC5GQzxSZWNvcmRpbmdzUHJvcHM+ID0gKHsgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCB7IHNlYXJjaCwgcGF0aG5hbWUgfSA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IGFjdGl2ZVRhYiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBnZXRBY3RpdmVUYWIoc2VhcmNoLCAndGFiJywgT2JqZWN0LnZhbHVlcyhSZWNvcmRpbmdUYWIpLCBSZWNvcmRpbmdUYWIuQUNUSVZFX1JFQ09SRElORyk7XG4gIH0sIFtzZWFyY2hdKTtcblxuICBjb25zdCBbYXJjaGl2ZUVuYWJsZWQsIHNldEFyY2hpdmVFbmFibGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihjb250ZXh0LmFwaS5pc0FyY2hpdmVFbmFibGVkKCkuc3Vic2NyaWJlKHNldEFyY2hpdmVFbmFibGVkKSk7XG4gIH0sIFtjb250ZXh0LmFwaSwgYWRkU3Vic2NyaXB0aW9uLCBzZXRBcmNoaXZlRW5hYmxlZF0pO1xuXG4gIGNvbnN0IG9uVGFiU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0Lk1vdXNlRXZlbnQsIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PlxuICAgICAgc3dpdGNoVGFiKGhpc3RvcnksIHBhdGhuYW1lLCBzZWFyY2gsIHsgdGFiS2V5OiAndGFiJywgdGFiVmFsdWU6IGAke2tleX1gIH0pLFxuICAgIFtoaXN0b3J5LCBwYXRobmFtZSwgc2VhcmNoXVxuICApO1xuXG4gIGNvbnN0IHRhcmdldEFzT2JzID0gUmVhY3QudXNlTWVtbygoKSA9PiBjb250ZXh0LnRhcmdldC50YXJnZXQoKSwgW2NvbnRleHQudGFyZ2V0XSk7XG5cbiAgY29uc3QgY2FyZEJvZHkgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYXJjaGl2ZUVuYWJsZWQgPyAoXG4gICAgICA8VGFicyBpZD1cInJlY29yZGluZ3NcIiBhY3RpdmVLZXk9e2FjdGl2ZVRhYn0gb25TZWxlY3Q9e29uVGFiU2VsZWN0fSB1bm1vdW50T25FeGl0PlxuICAgICAgICA8VGFiXG4gICAgICAgICAgaWQ9XCJhY3RpdmUtcmVjb3JkaW5nc1wiXG4gICAgICAgICAgZXZlbnRLZXk9e1JlY29yZGluZ1RhYi5BQ1RJVkVfUkVDT1JESU5HfVxuICAgICAgICAgIHRpdGxlPXs8VGFiVGl0bGVUZXh0PkFjdGl2ZSBSZWNvcmRpbmdzPC9UYWJUaXRsZVRleHQ+fVxuICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImFjdGl2ZS1yZWNvcmRpbmdzLXRhYlwiXG4gICAgICAgID5cbiAgICAgICAgICA8QWN0aXZlUmVjb3JkaW5nc1RhYmxlIGFyY2hpdmVFbmFibGVkPXt0cnVlfSAvPlxuICAgICAgICA8L1RhYj5cbiAgICAgICAgPFRhYlxuICAgICAgICAgIGlkPVwiYXJjaGl2ZWQtcmVjb3JkaW5nc1wiXG4gICAgICAgICAgZXZlbnRLZXk9e1JlY29yZGluZ1RhYi5BUkNISVZFRF9SRUNPUkRJTkd9XG4gICAgICAgICAgdGl0bGU9ezxUYWJUaXRsZVRleHQ+QXJjaGl2ZWQgUmVjb3JkaW5nczwvVGFiVGl0bGVUZXh0Pn1cbiAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJhcmNoaXZlZC1yZWNvcmRpbmdzLXRhYlwiXG4gICAgICAgID5cbiAgICAgICAgICA8QXJjaGl2ZWRSZWNvcmRpbmdzVGFibGUgdGFyZ2V0PXt0YXJnZXRBc09ic30gaXNVcGxvYWRzVGFibGU9e2ZhbHNlfSBpc05lc3RlZFRhYmxlPXtmYWxzZX0gLz5cbiAgICAgICAgPC9UYWI+XG4gICAgICA8L1RhYnM+XG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIDxDYXJkVGl0bGU+QWN0aXZlIFJlY29yZGluZ3M8L0NhcmRUaXRsZT5cbiAgICAgICAgPEFjdGl2ZVJlY29yZGluZ3NUYWJsZSBhcmNoaXZlRW5hYmxlZD17ZmFsc2V9IC8+XG4gICAgICA8Lz5cbiAgICApO1xuICB9LCBbYXJjaGl2ZUVuYWJsZWQsIGFjdGl2ZVRhYiwgb25UYWJTZWxlY3QsIHRhcmdldEFzT2JzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VGFyZ2V0VmlldyB7Li4ucHJvcHN9IHBhZ2VUaXRsZT1cIlJlY29yZGluZ3NcIj5cbiAgICAgIDxDYXJkPlxuICAgICAgICA8Q2FyZEJvZHk+e2NhcmRCb2R5fTwvQ2FyZEJvZHk+XG4gICAgICA8L0NhcmQ+XG4gICAgPC9UYXJnZXRWaWV3PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVjb3JkaW5ncztcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgQnJlYWRjcnVtYlBhZ2UsIEJyZWFkY3J1bWJUcmFpbCB9IGZyb20gJ0BhcHAvQnJlYWRjcnVtYlBhZ2UvQnJlYWRjcnVtYlBhZ2UnO1xuaW1wb3J0IHsgRXZlbnRUZW1wbGF0ZSB9IGZyb20gJ0BhcHAvQ3JlYXRlUmVjb3JkaW5nL0NyZWF0ZVJlY29yZGluZyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zQ29udGV4dCB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IE1hdGNoRXhwcmVzc2lvbkhpbnQgfSBmcm9tICdAYXBwL1NoYXJlZC9NYXRjaEV4cHJlc3Npb24vTWF0Y2hFeHByZXNzaW9uSGludCc7XG5pbXBvcnQgeyBNYXRjaEV4cHJlc3Npb25WaXN1YWxpemVyIH0gZnJvbSAnQGFwcC9TaGFyZWQvTWF0Y2hFeHByZXNzaW9uL01hdGNoRXhwcmVzc2lvblZpc3VhbGl6ZXInO1xuaW1wb3J0IHsgTG9hZGluZ1Byb3BzVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1Byb2dyZXNzSW5kaWNhdG9yJztcbmltcG9ydCB7IFNlbGVjdFRlbXBsYXRlU2VsZWN0b3JGb3JtIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VsZWN0VGVtcGxhdGVTZWxlY3RvckZvcm0nO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hFeHByU2VydmljZSwgU2VhcmNoRXhwclNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9Ub3BvbG9neS9TaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBldmFsdWF0ZVRhcmdldFdpdGhFeHByLCBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBBY3Rpb25Hcm91cCxcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDYXJkQm9keSxcbiAgRm9ybSxcbiAgRm9ybUdyb3VwLFxuICBGb3JtU2VsZWN0LFxuICBGb3JtU2VsZWN0T3B0aW9uLFxuICBHcmlkLFxuICBHcmlkSXRlbSxcbiAgUG9wb3ZlcixcbiAgU3BsaXQsXG4gIFNwbGl0SXRlbSxcbiAgU3dpdGNoLFxuICBUZXh0LFxuICBUZXh0QXJlYSxcbiAgVGV4dElucHV0LFxuICBUZXh0VmFyaWFudHMsXG4gIFZhbGlkYXRlZE9wdGlvbnMsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgSGVscEljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgZm9ya0pvaW4sIGlpZiwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSdWxlIH0gZnJvbSAnLi9SdWxlcyc7XG5cbi8vIEZJWE1FIGNoZWNrIGlmIHRoaXMgaXMgY29ycmVjdC9tYXRjaGVzIGJhY2tlbmQgbmFtZSB2YWxpZGF0aW9uXG5leHBvcnQgY29uc3QgUnVsZU5hbWVQYXR0ZXJuID0gL15bXFx3X10rJC87XG5cbmludGVyZmFjZSBDcmVhdGVSdWxlRm9ybVByb3BzIHt9XG5cbmNvbnN0IENyZWF0ZVJ1bGVGb3JtOiBSZWFjdC5GQzxDcmVhdGVSdWxlRm9ybVByb3BzPiA9ICh7IC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBub3RpZmljYXRpb25zID0gUmVhY3QudXNlQ29udGV4dChOb3RpZmljYXRpb25zQ29udGV4dCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIC8vIE5vdGU6IERvIG5vdCB1c2UgdXNlU2VhcmNoRXhwcmVzc2lvbigpLiBUaGlzIGNhdXNlcyB0aGUgY3Vyc29yIHRvIGp1bXAgdG8gdGhlIGVuZCBkdWUgdG8gYXN5bmMgdXBkYXRlcy5cbiAgY29uc3QgbWF0Y2hFeHByU2VydmljZSA9IFJlYWN0LnVzZUNvbnRleHQoU2VhcmNoRXhwclNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW21hdGNoRXhwcmVzc2lvbiwgc2V0TWF0Y2hFeHByZXNzaW9uXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IFtuYW1lLCBzZXROYW1lXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW25hbWVWYWxpZCwgc2V0TmFtZVZhbGlkXSA9IFJlYWN0LnVzZVN0YXRlKFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdCk7XG4gIGNvbnN0IFtkZXNjcmlwdGlvbiwgc2V0RGVzY3JpcHRpb25dID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbZW5hYmxlZCwgc2V0RW5hYmxlZF0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW21hdGNoRXhwcmVzc2lvblZhbGlkLCBzZXRNYXRjaEV4cHJlc3Npb25WYWxpZF0gPSBSZWFjdC51c2VTdGF0ZShWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQpO1xuICBjb25zdCBbdGVtcGxhdGVzLCBzZXRUZW1wbGF0ZXNdID0gUmVhY3QudXNlU3RhdGU8RXZlbnRUZW1wbGF0ZVtdPihbXSk7XG4gIGNvbnN0IFt0ZW1wbGF0ZSwgc2V0VGVtcGxhdGVdID0gUmVhY3QudXNlU3RhdGU8UGljazxQYXJ0aWFsPEV2ZW50VGVtcGxhdGU+LCAnbmFtZScgfCAndHlwZSc+Pih7fSk7XG4gIGNvbnN0IFttYXhBZ2UsIHNldE1heEFnZV0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW21heEFnZVVuaXRzLCBzZXRNYXhBZ2VVbml0c10gPSBSZWFjdC51c2VTdGF0ZSgxKTtcbiAgY29uc3QgW21heFNpemUsIHNldE1heFNpemVdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IFttYXhTaXplVW5pdHMsIHNldE1heFNpemVVbml0c10gPSBSZWFjdC51c2VTdGF0ZSgxKTtcbiAgY29uc3QgW2FyY2hpdmFsUGVyaW9kLCBzZXRBcmNoaXZhbFBlcmlvZF0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2FyY2hpdmFsUGVyaW9kVW5pdHMsIHNldEFyY2hpdmFsUGVyaW9kVW5pdHNdID0gUmVhY3QudXNlU3RhdGUoMSk7XG4gIGNvbnN0IFtpbml0aWFsRGVsYXksIHNldEluaXRpYWxEZWxheV0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2luaXRpYWxEZWxheVVuaXRzLCBzZXRJbml0aWFsRGVsYXlVbml0c10gPSBSZWFjdC51c2VTdGF0ZSgxKTtcbiAgY29uc3QgW3ByZXNlcnZlZEFyY2hpdmVzLCBzZXRQcmVzZXJ2ZWRBcmNoaXZlc10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdGFyZ2V0cywgc2V0VGFyZ2V0c10gPSBSZWFjdC51c2VTdGF0ZTxUYXJnZXRbXT4oW10pO1xuXG4gIGNvbnN0IG1hdGNoZWRUYXJnZXRzUmVmID0gUmVhY3QudXNlUmVmKG5ldyBTdWJqZWN0PFRhcmdldFtdPigpKTtcbiAgY29uc3QgbWF0Y2hlZFRhcmdldHMgPSBtYXRjaGVkVGFyZ2V0c1JlZi5jdXJyZW50O1xuXG4gIGNvbnN0IGhhbmRsZU5hbWVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAobmFtZSkgPT4ge1xuICAgICAgc2V0TmFtZVZhbGlkKFJ1bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpID8gVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzIDogVmFsaWRhdGVkT3B0aW9ucy5lcnJvcik7XG4gICAgICBzZXROYW1lKG5hbWUpO1xuICAgIH0sXG4gICAgW3NldE5hbWVWYWxpZCwgc2V0TmFtZV1cbiAgKTtcblxuICBjb25zdCBldmVudFNwZWNpZmllclN0cmluZyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IHRlbXBsYXRlO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICBzdHIgKz0gYHRlbXBsYXRlPSR7bmFtZX1gO1xuICAgIH1cbiAgICBpZiAodHlwZSkge1xuICAgICAgc3RyICs9IGAsdHlwZT0ke3R5cGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfSwgW3RlbXBsYXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlVGVtcGxhdGVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGVtcGxhdGVOYW1lPzogc3RyaW5nLCB0ZW1wbGF0ZVR5cGU/OiBUZW1wbGF0ZVR5cGUpID0+IHtcbiAgICAgIHNldFRlbXBsYXRlKHtcbiAgICAgICAgbmFtZTogdGVtcGxhdGVOYW1lLFxuICAgICAgICB0eXBlOiB0ZW1wbGF0ZVR5cGUsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRUZW1wbGF0ZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNYXhBZ2VDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjaygobWF4QWdlKSA9PiBzZXRNYXhBZ2UoTnVtYmVyKG1heEFnZSkpLCBbc2V0TWF4QWdlXSk7XG5cbiAgY29uc3QgaGFuZGxlTWF4QWdlVW5pdENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChtYXhBZ2VVbml0KSA9PiBzZXRNYXhBZ2VVbml0cyhOdW1iZXIobWF4QWdlVW5pdCkpLFxuICAgIFtzZXRNYXhBZ2VVbml0c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNYXhTaXplQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soKG1heFNpemUpID0+IHNldE1heFNpemUoTnVtYmVyKG1heFNpemUpKSwgW3NldE1heFNpemVdKTtcblxuICBjb25zdCBoYW5kbGVNYXhTaXplVW5pdENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChtYXhTaXplVW5pdCkgPT4gc2V0TWF4U2l6ZVVuaXRzKE51bWJlcihtYXhTaXplVW5pdCkpLFxuICAgIFtzZXRNYXhTaXplVW5pdHNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQXJjaGl2YWxQZXJpb2RDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYXJjaGl2YWxQZXJpb2QpID0+IHNldEFyY2hpdmFsUGVyaW9kKE51bWJlcihhcmNoaXZhbFBlcmlvZCkpLFxuICAgIFtzZXRBcmNoaXZhbFBlcmlvZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVBcmNoaXZhbFBlcmlvZFVuaXRzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGV2dCkgPT4gc2V0QXJjaGl2YWxQZXJpb2RVbml0cyhOdW1iZXIoZXZ0KSksXG4gICAgW3NldEFyY2hpdmFsUGVyaW9kVW5pdHNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlSW5pdGlhbERlbGF5Q2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGluaXRpYWxEZWxheSkgPT4gc2V0SW5pdGlhbERlbGF5KE51bWJlcihpbml0aWFsRGVsYXkpKSxcbiAgICBbc2V0SW5pdGlhbERlbGF5XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUluaXRpYWxEZWxheVVuaXRzQ2hhbmdlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpbml0aWFsRGVsYXlVbml0KSA9PiBzZXRJbml0aWFsRGVsYXlVbml0cyhOdW1iZXIoaW5pdGlhbERlbGF5VW5pdCkpLFxuICAgIFtzZXRJbml0aWFsRGVsYXlVbml0c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQcmVzZXJ2ZWRBcmNoaXZlc0NoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChwcmVzZXJ2ZWRBcmNoaXZlcykgPT4gc2V0UHJlc2VydmVkQXJjaGl2ZXMoTnVtYmVyKHByZXNlcnZlZEFyY2hpdmVzKSksXG4gICAgW3NldFByZXNlcnZlZEFyY2hpdmVzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpOiB2b2lkID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChuYW1lVmFsaWQgIT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzcykge1xuICAgICAgbm90aWZpY2F0aW9uTWVzc2FnZXMucHVzaChgUnVsZSBuYW1lICR7bmFtZX0gaXMgaW52YWxpZGApO1xuICAgIH1cbiAgICBpZiAobm90aWZpY2F0aW9uTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IG5vdGlmaWNhdGlvbk1lc3NhZ2VzLmpvaW4oJy4gJykudHJpbSgpICsgJy4nO1xuICAgICAgbm90aWZpY2F0aW9ucy53YXJuaW5nKCdJbnZhbGlkIGZvcm0gZGF0YScsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBydWxlOiBSdWxlID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZW5hYmxlZCxcbiAgICAgIG1hdGNoRXhwcmVzc2lvbixcbiAgICAgIGV2ZW50U3BlY2lmaWVyOiBldmVudFNwZWNpZmllclN0cmluZyxcbiAgICAgIGFyY2hpdmFsUGVyaW9kU2Vjb25kczogYXJjaGl2YWxQZXJpb2QgKiBhcmNoaXZhbFBlcmlvZFVuaXRzLFxuICAgICAgaW5pdGlhbERlbGF5U2Vjb25kczogaW5pdGlhbERlbGF5ICogaW5pdGlhbERlbGF5VW5pdHMsXG4gICAgICBwcmVzZXJ2ZWRBcmNoaXZlcyxcbiAgICAgIG1heEFnZVNlY29uZHM6IG1heEFnZSAqIG1heEFnZVVuaXRzLFxuICAgICAgbWF4U2l6ZUJ5dGVzOiBtYXhTaXplICogbWF4U2l6ZVVuaXRzLFxuICAgIH07XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5hcGkuY3JlYXRlUnVsZShydWxlKS5zdWJzY3JpYmUoKHN1Y2Nlc3MpID0+IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgaGlzdG9yeS5wdXNoKCcvcnVsZXMnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9LCBbXG4gICAgc2V0TG9hZGluZyxcbiAgICBhZGRTdWJzY3JpcHRpb24sXG4gICAgY29udGV4dC5hcGksXG4gICAgaGlzdG9yeSxcbiAgICBub3RpZmljYXRpb25zLFxuICAgIG5hbWUsXG4gICAgbmFtZVZhbGlkLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVuYWJsZWQsXG4gICAgbWF0Y2hFeHByZXNzaW9uLFxuICAgIGV2ZW50U3BlY2lmaWVyU3RyaW5nLFxuICAgIGFyY2hpdmFsUGVyaW9kLFxuICAgIGFyY2hpdmFsUGVyaW9kVW5pdHMsXG4gICAgaW5pdGlhbERlbGF5LFxuICAgIGluaXRpYWxEZWxheVVuaXRzLFxuICAgIHByZXNlcnZlZEFyY2hpdmVzLFxuICAgIG1heEFnZSxcbiAgICBtYXhBZ2VVbml0cyxcbiAgICBtYXhTaXplLFxuICAgIG1heFNpemVVbml0cyxcbiAgXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBtYXRjaGVkVGFyZ2V0c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKHRhcmdldHMpID0+XG4gICAgICAgICAgICBpaWYoXG4gICAgICAgICAgICAgICgpID0+IHRhcmdldHMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgICAgICAgdGFyZ2V0cy5tYXAoKHQpID0+XG4gICAgICAgICAgICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgICAgICAgICAgICAuZG9HZXQ8RXZlbnRUZW1wbGF0ZVtdPihcbiAgICAgICAgICAgICAgICAgICAgICBgdGFyZ2V0cy8ke2VuY29kZVVSSUNvbXBvbmVudCh0LmNvbm5lY3RVcmwpfS90ZW1wbGF0ZXNgLFxuICAgICAgICAgICAgICAgICAgICAgICd2MScsXG4gICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKF8pID0+IG9mPEV2ZW50VGVtcGxhdGVbXT4oW10pKSAvLyBGYWlsIHNpbGVudGx5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGFsbFRlbXBsYXRlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWxsRmlsdGVyZWQgPSBhbGxUZW1wbGF0ZXMuZmlsdGVyKCh0cykgPT4gdHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxGaWx0ZXJlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhbGxGaWx0ZXJlZC5yZWR1Y2UoKGFjYywgY3VycikgPT4gXy5pbnRlcnNlY3Rpb25XaXRoKGFjYywgY3VyciwgXy5pc0VxdWFsKSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBvZihbXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodGVtcGxhdGVzKSA9PiB7XG4gICAgICAgICAgc2V0VGVtcGxhdGVzKHRlbXBsYXRlcyk7XG4gICAgICAgICAgc2V0VGVtcGxhdGUoKG9sZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRlbXBsYXRlcy5maW5kKCh0KSA9PiB0Lm5hbWUgPT09IG9sZC5uYW1lICYmIHQudHlwZSA9PT0gdC50eXBlKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVkID8geyBuYW1lOiBtYXRjaGVkLm5hbWUsIHR5cGU6IG1hdGNoZWQudHlwZSB9IDoge307XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIG1hdGNoZWRUYXJnZXRzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oY29udGV4dC50YXJnZXRzLnRhcmdldHMoKS5zdWJzY3JpYmUoc2V0VGFyZ2V0cykpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldHMsIHNldFRhcmdldHNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNldCB2YWxpZGF0aW9uc1xuICAgIGxldCB2YWxpZGF0aW9uOiBWYWxpZGF0ZWRPcHRpb25zID0gVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0O1xuICAgIGxldCBtYXRjaGVzOiBUYXJnZXRbXSA9IFtdO1xuICAgIGlmIChtYXRjaEV4cHJlc3Npb24gIT09ICcnICYmIHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWF0Y2hlcyA9IHRhcmdldHMuZmlsdGVyKCh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0gZXZhbHVhdGVUYXJnZXRXaXRoRXhwcih0LCBtYXRjaEV4cHJlc3Npb24pO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGV4cHJlc3Npb24gbWF0Y2hpbmcgZmFpbGVkLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsaWRhdGlvbiA9IG1hdGNoZXMubGVuZ3RoID8gVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzIDogVmFsaWRhdGVkT3B0aW9ucy53YXJuaW5nO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHZhbGlkYXRpb24gPSBWYWxpZGF0ZWRPcHRpb25zLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRNYXRjaEV4cHJlc3Npb25WYWxpZCh2YWxpZGF0aW9uKTtcbiAgICBtYXRjaGVkVGFyZ2V0cy5uZXh0KG1hdGNoZXMpO1xuICB9LCBbbWF0Y2hFeHByZXNzaW9uLCB0YXJnZXRzLCBtYXRjaGVkVGFyZ2V0cywgc2V0TWF0Y2hFeHByZXNzaW9uVmFsaWRdKTtcblxuICBjb25zdCBjcmVhdGVCdXR0b25Mb2FkaW5nUHJvcHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBzcGlubmVyQXJpYVZhbHVlVGV4dDogJ0NyZWF0aW5nJyxcbiAgICAgICAgc3Bpbm5lckFyaWFMYWJlbDogJ2NyZWF0aW5nLWF1dG9tYXRlZC1ydWxlJyxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nLFxuICAgICAgfSBhcyBMb2FkaW5nUHJvcHNUeXBlKSxcbiAgICBbbG9hZGluZ11cbiAgKTtcblxuICBjb25zdCBzZWxlY3RlZFNwZWNpZmllciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gdGVtcGxhdGU7XG4gICAgaWYgKG5hbWUgJiYgdHlwZSkge1xuICAgICAgcmV0dXJuIGAke25hbWV9LCR7dHlwZX1gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0sIFt0ZW1wbGF0ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm0gey4uLnByb3BzfT5cbiAgICAgIDxUZXh0IGNvbXBvbmVudD17VGV4dFZhcmlhbnRzLnNtYWxsfT5cbiAgICAgICAgQXV0b21hdGVkIFJ1bGVzIGFyZSBjb25maWd1cmF0aW9ucyB0aGF0IGluc3RydWN0IENyeW9zdGF0IHRvIGNyZWF0ZSBKREsgRmxpZ2h0IFJlY29yZGluZ3Mgb24gbWF0Y2hpbmcgdGFyZ2V0IEpWTVxuICAgICAgICBhcHBsaWNhdGlvbnMuIEVhY2ggQXV0b21hdGVkIFJ1bGUgc3BlY2lmaWVzIHBhcmFtZXRlcnMgZm9yIHdoaWNoIEV2ZW50IFRlbXBsYXRlIHRvIHVzZSwgaG93IG11Y2ggZGF0YSBzaG91bGQgYmVcbiAgICAgICAga2VwdCBpbiB0aGUgYXBwbGljYXRpb24gcmVjb3JkaW5nIGJ1ZmZlciwgYW5kIGhvdyBmcmVxdWVudGx5IENyeW9zdGF0IHNob3VsZCBjb3B5IHRoZSBhcHBsaWNhdGlvbiByZWNvcmRpbmdcbiAgICAgICAgYnVmZmVyIGludG8gQ3J5b3N0YXQmYXBvcztzIG93biBhcmNoaXZlZCBzdG9yYWdlLlxuICAgICAgPC9UZXh0PlxuICAgICAgPEZvcm1Hcm91cFxuICAgICAgICBsYWJlbD1cIk5hbWVcIlxuICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgIGZpZWxkSWQ9XCJydWxlLW5hbWVcIlxuICAgICAgICBoZWxwZXJUZXh0PVwiRW50ZXIgYSBydWxlIG5hbWUuXCJcbiAgICAgICAgaGVscGVyVGV4dEludmFsaWQ9XCJBIHJ1bGUgbmFtZSBjYW4gY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlcy5cIlxuICAgICAgICB2YWxpZGF0ZWQ9e25hbWVWYWxpZH1cbiAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwicnVsZS1uYW1lXCJcbiAgICAgID5cbiAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBpZD1cInJ1bGUtbmFtZVwiXG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cInJ1bGUtbmFtZS1oZWxwZXJcIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVOYW1lQ2hhbmdlfVxuICAgICAgICAgIHZhbGlkYXRlZD17bmFtZVZhbGlkfVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8Rm9ybUdyb3VwXG4gICAgICAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIlxuICAgICAgICBmaWVsZElkPVwicnVsZS1kZXNjcmlwdGlvblwiXG4gICAgICAgIGhlbHBlclRleHQ9XCJFbnRlciBhIHJ1bGUgZGVzY3JpcHRpb24uIFRoaXMgaXMgb25seSB1c2VkIGZvciBkaXNwbGF5IHB1cnBvc2VzIHRvIGFpZCBpbiBpZGVudGlmeWluZyBydWxlcyBhbmQgdGhlaXIgaW50ZW50aW9ucy5cIlxuICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJydWxlLWRlc2NyaXB0aW9uXCJcbiAgICAgID5cbiAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgdmFsdWU9e2Rlc2NyaXB0aW9ufVxuICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGlkPVwicnVsZS1kZXNjcmlwdGlvblwiXG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cInJ1bGUtZGVzY3JpcHRpb24taGVscGVyXCJcbiAgICAgICAgICByZXNpemVPcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICBhdXRvUmVzaXplXG4gICAgICAgICAgb25DaGFuZ2U9e3NldERlc2NyaXB0aW9ufVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8Rm9ybUdyb3VwXG4gICAgICAgIGxhYmVsPVwiTWF0Y2ggRXhwcmVzc2lvblwiXG4gICAgICAgIGxhYmVsSWNvbj17XG4gICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgaGVhZGVyQ29udGVudD1cIk1hdGNoIEV4cHJlc3Npb24gSGludFwiXG4gICAgICAgICAgICBib2R5Q29udGVudD17XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgVHJ5IGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICAgICAgICAgICAgICA8TWF0Y2hFeHByZXNzaW9uSGludCB0YXJnZXQ9e3RhcmdldHNbMF19IC8+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzQXV0b1dpZHRoXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9yZSBpbmZvIGZvciBtYXRjaCBleHByZXNzaW9uIGZpZWxkXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicGYtYy1mb3JtX19ncm91cC1sYWJlbC1oZWxwXCJcbiAgICAgICAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwicnVsZS1tYXRjaGV4cHItaGVscFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxIZWxwSWNvbiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICB9XG4gICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgZmllbGRJZD1cInJ1bGUtbWF0Y2hleHByXCJcbiAgICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgICAgbWF0Y2hFeHByZXNzaW9uVmFsaWQgPT09IFZhbGlkYXRlZE9wdGlvbnMud2FybmluZ1xuICAgICAgICAgICAgPyBgV2FybmluZzogTWF0Y2ggZXhwcmVzc2lvbiBtYXRjaGVzIG5vIHRhcmdldHMuYFxuICAgICAgICAgICAgOiBgXG4gIEVudGVyIGEgbWF0Y2ggZXhwcmVzc2lvbi4gVGhpcyBpcyBhIEphdmEtbGlrZSBjb2RlIHNuaXBwZXQgdGhhdCBpcyBldmFsdWF0ZWQgYWdhaW5zdCBlYWNoIHRhcmdldFxuICBhcHBsaWNhdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcnVsZSBzaG91bGQgYmUgYXBwbGllZC5gXG4gICAgICAgIH1cbiAgICAgICAgaGVscGVyVGV4dEludmFsaWQ9XCJUaGUgZXhwcmVzc2lvbiBtYXRjaGluZyBmYWlsZWQuXCJcbiAgICAgICAgdmFsaWRhdGVkPXttYXRjaEV4cHJlc3Npb25WYWxpZH1cbiAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwicnVsZS1tYXRjaGV4cHJcIlxuICAgICAgPlxuICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICB2YWx1ZT17bWF0Y2hFeHByZXNzaW9ufVxuICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBpZD1cInJ1bGUtbWF0Y2hleHByXCJcbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwicnVsZS1tYXRjaGV4cHItaGVscGVyXCJcbiAgICAgICAgICByZXNpemVPcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICBhdXRvUmVzaXplXG4gICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0TWF0Y2hFeHByZXNzaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIG1hdGNoRXhwclNlcnZpY2Uuc2V0U2VhcmNoRXhwcmVzc2lvbih2YWx1ZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICB2YWxpZGF0ZWQ9e21hdGNoRXhwcmVzc2lvblZhbGlkfVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8Rm9ybUdyb3VwXG4gICAgICAgIGxhYmVsPVwiRW5hYmxlZFwiXG4gICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgZmllbGRJZD1cInJ1bGUtZW5hYmxlZFwiXG4gICAgICAgIGhlbHBlclRleHQ9e2BSdWxlcyB0YWtlIGVmZmVjdCB3aGVuIGNyZWF0ZWQgaWYgZW5hYmxlZCBhbmQgd2lsbCBiZSBtYXRjaGVkIGFnYWluc3QgYWxsXG5kaXNjb3ZlcmVkIHRhcmdldCBhcHBsaWNhdGlvbnMgaW1tZWRpYXRlbHkuIFdoZW4gbmV3IHRhcmdldCBhcHBsaWNhdGlvbnMgYXBwZWFyIHRoZXkgYXJlXG5jaGVja2VkIGFnYWluc3QgYWxsIGVuYWJsZWQgcnVsZXMuIERpc2FibGVkIHJ1bGVzIGhhdmUgbm8gZWZmZWN0IGJ1dCBhcmUgYXZhaWxhYmxlIHRvIGJlXG5lbmFibGVkIGluIHRoZSBmdXR1cmUuYH1cbiAgICAgID5cbiAgICAgICAgPFN3aXRjaFxuICAgICAgICAgIGlkPVwicnVsZS1lbmFibGVkXCJcbiAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJBcHBseSB0aGlzIHJ1bGUgdG8gbWF0Y2hpbmcgdGFyZ2V0c1wiXG4gICAgICAgICAgaXNDaGVja2VkPXtlbmFibGVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXtzZXRFbmFibGVkfVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8Rm9ybUdyb3VwXG4gICAgICAgIGxhYmVsPVwiVGVtcGxhdGVcIlxuICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgIGZpZWxkSWQ9XCJyZWNvcmRpbmctdGVtcGxhdGVcIlxuICAgICAgICB2YWxpZGF0ZWQ9eyF0ZW1wbGF0ZS5uYW1lID8gVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0IDogVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzfVxuICAgICAgICBoZWxwZXJUZXh0PVwiVGhlIEV2ZW50IFRlbXBsYXRlIHRvIGJlIGFwcGxpZWQgYnkgdGhpcyBSdWxlIGFnYWluc3QgbWF0Y2hpbmcgdGFyZ2V0IGFwcGxpY2F0aW9ucy5cIlxuICAgICAgICBoZWxwZXJUZXh0SW52YWxpZD1cIkEgVGVtcGxhdGUgbXVzdCBiZSBzZWxlY3RlZFwiXG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInJ1bGUtZXZ0LXRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPFNlbGVjdFRlbXBsYXRlU2VsZWN0b3JGb3JtXG4gICAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkU3BlY2lmaWVyfVxuICAgICAgICAgIGRpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgIHZhbGlkYXRlZD17IXRlbXBsYXRlLm5hbWUgPyBWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQgOiBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3N9XG4gICAgICAgICAgdGVtcGxhdGVzPXt0ZW1wbGF0ZXN9XG4gICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVRlbXBsYXRlQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8Rm9ybUdyb3VwXG4gICAgICAgIGxhYmVsPVwiTWF4aW11bSBTaXplXCJcbiAgICAgICAgZmllbGRJZD1cIm1heFNpemVcIlxuICAgICAgICBoZWxwZXJUZXh0PVwiVGhlIG1heGltdW0gc2l6ZSBvZiByZWNvcmRpbmcgZGF0YSByZXRhaW5lZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uJ3MgcmVjb3JkaW5nIGJ1ZmZlci5cIlxuICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJydWxlLW1heC1zaXplXCJcbiAgICAgID5cbiAgICAgICAgPFNwbGl0IGhhc0d1dHRlcj17dHJ1ZX0+XG4gICAgICAgICAgPFNwbGl0SXRlbSBpc0ZpbGxlZD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgdmFsdWU9e21heFNpemV9XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGlkPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJtYXggc2l6ZSB2YWx1ZVwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVNYXhTaXplQ2hhbmdlfVxuICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgIDxGb3JtU2VsZWN0XG4gICAgICAgICAgICAgIHZhbHVlPXttYXhTaXplVW5pdHN9XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVNYXhTaXplVW5pdENoYW5nZX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1heCBzaXplIHVuaXRzIGlucHV0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMVwiIHZhbHVlPVwiMVwiIGxhYmVsPVwiQlwiIC8+XG4gICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjJcIiB2YWx1ZT17MTAyNH0gbGFiZWw9XCJLaUJcIiAvPlxuICAgICAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbiBrZXk9XCIzXCIgdmFsdWU9ezEwMjQgKiAxMDI0fSBsYWJlbD1cIk1pQlwiIC8+XG4gICAgICAgICAgICA8L0Zvcm1TZWxlY3Q+XG4gICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgIDwvU3BsaXQ+XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgbGFiZWw9XCJNYXhpbXVtIEFnZVwiXG4gICAgICAgIGZpZWxkSWQ9XCJtYXhBZ2VcIlxuICAgICAgICBoZWxwZXJUZXh0PVwiVGhlIG1heGltdW0gYWdlIG9mIHJlY29yZGluZyBkYXRhIHJldGFpbmVkIGluIHRoZSB0YXJnZXQgYXBwbGljYXRpb24ncyByZWNvcmRpbmcgYnVmZmVyLlwiXG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInJ1bGUtbWF4LWFnZVwiXG4gICAgICA+XG4gICAgICAgIDxTcGxpdCBoYXNHdXR0ZXI9e3RydWV9PlxuICAgICAgICAgIDxTcGxpdEl0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHZhbHVlPXttYXhBZ2V9XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGlkPVwibWF4QWdlXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1heCBhZ2UgZHVyYXRpb25cIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlTWF4QWdlQ2hhbmdlfVxuICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgIDxGb3JtU2VsZWN0XG4gICAgICAgICAgICAgIHZhbHVlPXttYXhBZ2VVbml0c31cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU1heEFnZVVuaXRDaGFuZ2V9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNYXggQWdlIHVuaXRzIElucHV0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMVwiIHZhbHVlPVwiMVwiIGxhYmVsPVwiU2Vjb25kc1wiIC8+XG4gICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjJcIiB2YWx1ZT17NjB9IGxhYmVsPVwiTWludXRlc1wiIC8+XG4gICAgICAgICAgICAgIDxGb3JtU2VsZWN0T3B0aW9uIGtleT1cIjNcIiB2YWx1ZT17NjAgKiA2MH0gbGFiZWw9XCJIb3Vyc1wiIC8+XG4gICAgICAgICAgICA8L0Zvcm1TZWxlY3Q+XG4gICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgIDwvU3BsaXQ+XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgbGFiZWw9XCJBcmNoaXZhbCBQZXJpb2RcIlxuICAgICAgICBmaWVsZElkPVwiYXJjaGl2YWxQZXJpb2RcIlxuICAgICAgICBoZWxwZXJUZXh0PVwiVGltZSBiZXR3ZWVuIGNvcGllcyBvZiBhY3RpdmUgcmVjb3JkaW5nIGRhdGEgYmVpbmcgcHVsbGVkIGludG8gQ3J5b3N0YXQgYXJjaGl2ZSBzdG9yYWdlLlwiXG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInJ1bGUtYXJjaGl2YWwtcGVyaW9kXCJcbiAgICAgID5cbiAgICAgICAgPFNwbGl0IGhhc0d1dHRlcj17dHJ1ZX0+XG4gICAgICAgICAgPFNwbGl0SXRlbSBpc0ZpbGxlZD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgdmFsdWU9e2FyY2hpdmFsUGVyaW9kfVxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nfVxuICAgICAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBpZD1cImFyY2hpdmFsUGVyaW9kXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImFyY2hpdmFsIHBlcmlvZFwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBcmNoaXZhbFBlcmlvZENoYW5nZX1cbiAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU3BsaXRJdGVtPlxuICAgICAgICAgIDxTcGxpdEl0ZW0+XG4gICAgICAgICAgICA8Rm9ybVNlbGVjdFxuICAgICAgICAgICAgICB2YWx1ZT17YXJjaGl2YWxQZXJpb2RVbml0c31cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFyY2hpdmFsUGVyaW9kVW5pdHNDaGFuZ2V9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJhcmNoaXZhbCBwZXJpb2QgdW5pdHMgaW5wdXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbiBrZXk9XCIxXCIgdmFsdWU9XCIxXCIgbGFiZWw9XCJTZWNvbmRzXCIgLz5cbiAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMlwiIHZhbHVlPXs2MH0gbGFiZWw9XCJNaW51dGVzXCIgLz5cbiAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiM1wiIHZhbHVlPXs2MCAqIDYwfSBsYWJlbD1cIkhvdXJzXCIgLz5cbiAgICAgICAgICAgIDwvRm9ybVNlbGVjdD5cbiAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgPC9TcGxpdD5cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgPEZvcm1Hcm91cFxuICAgICAgICBsYWJlbD1cIkluaXRpYWwgRGVsYXlcIlxuICAgICAgICBmaWVsZElkPVwiaW5pdGlhbERlbGF5XCJcbiAgICAgICAgaGVscGVyVGV4dD1cIkluaXRpYWwgZGVsYXkgYmVmb3JlIGFyY2hpdmluZyBzdGFydHMuIFRoZSBmaXJzdCBhcmNoaXZlZCBjb3B5IHdpbGwgYmUgbWFkZSB0aGlzIGxvbmcgYWZ0ZXIgdGhlIHJlY29yZGluZyBpcyBzdGFydGVkLiBUaGUgc2Vjb25kIGFyY2hpdmVkIGNvcHkgd2lsbCBvY2N1ciBvbmUgQXJjaGl2YWwgUGVyaW9kIGxhdGVyLlwiXG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInJ1bGUtaW5pdGlhbC1kZWxheVwiXG4gICAgICA+XG4gICAgICAgIDxTcGxpdCBoYXNHdXR0ZXI9e3RydWV9PlxuICAgICAgICAgIDxTcGxpdEl0ZW0gaXNGaWxsZWQ+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIHZhbHVlPXtpbml0aWFsRGVsYXl9XG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGlkPVwiaW5pdGlhbERlbGF5XCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImluaXRpYWwgZGVsYXlcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5pdGlhbERlbGF5Q2hhbmdlfVxuICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICAgIDxGb3JtU2VsZWN0XG4gICAgICAgICAgICAgIHZhbHVlPXtpbml0aWFsRGVsYXlVbml0c31cbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUluaXRpYWxEZWxheVVuaXRzQ2hhbmdlZH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImluaXRpYWwgZGVsYXkgdW5pdHMgaW5wdXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9ybVNlbGVjdE9wdGlvbiBrZXk9XCIxXCIgdmFsdWU9XCIxXCIgbGFiZWw9XCJTZWNvbmRzXCIgLz5cbiAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiMlwiIHZhbHVlPXs2MH0gbGFiZWw9XCJNaW51dGVzXCIgLz5cbiAgICAgICAgICAgICAgPEZvcm1TZWxlY3RPcHRpb24ga2V5PVwiM1wiIHZhbHVlPXs2MCAqIDYwfSBsYWJlbD1cIkhvdXJzXCIgLz5cbiAgICAgICAgICAgIDwvRm9ybVNlbGVjdD5cbiAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgPC9TcGxpdD5cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgPEZvcm1Hcm91cFxuICAgICAgICBsYWJlbD1cIlByZXNlcnZlZCBBcmNoaXZlc1wiXG4gICAgICAgIGZpZWxkSWQ9XCJwcmVzZXJ2ZWRBcmNoaXZlc1wiXG4gICAgICAgIGhlbHBlclRleHQ9XCJUaGUgbnVtYmVyIG9mIGFyY2hpdmVkIHJlY29yZGluZyBjb3BpZXMgdG8gcHJlc2VydmUgaW4gYXJjaGl2ZXMgZm9yIGVhY2ggdGFyZ2V0IGFwcGxpY2F0aW9uIGFmZmVjdGVkIGJ5IHRoaXMgcnVsZS5cIlxuICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJydWxlLXByZXNlcnZlZC1hcmNoaXZlc1wiXG4gICAgICA+XG4gICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICB2YWx1ZT17cHJlc2VydmVkQXJjaGl2ZXN9XG4gICAgICAgICAgaXNEaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICBpc1JlcXVpcmVkXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgaWQ9XCJwcmVzZXJ2ZWRBcmNoaXZlc1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInByZXNlcnZlZCBhcmNoaXZlc1wiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVByZXNlcnZlZEFyY2hpdmVzQ2hhbmdlfVxuICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8QWN0aW9uR3JvdXA+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgIGlzRGlzYWJsZWQ9e1xuICAgICAgICAgICAgbG9hZGluZyB8fCBuYW1lVmFsaWQgIT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyB8fCAhdGVtcGxhdGUubmFtZSB8fCAhdGVtcGxhdGUudHlwZSB8fCAhbWF0Y2hFeHByZXNzaW9uXG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInJ1bGUtY3JlYXRlLWJ0blwiXG4gICAgICAgICAgey4uLmNyZWF0ZUJ1dHRvbkxvYWRpbmdQcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgIHtsb2FkaW5nID8gJ0NyZWF0aW5nJyA6ICdDcmVhdGUnfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17aGlzdG9yeS5nb0JhY2t9IGlzQXJpYURpc2FibGVkPXtsb2FkaW5nfT5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0FjdGlvbkdyb3VwPlxuICAgIDwvRm9ybT5cbiAgKTtcbn07XG5cbmNvbnN0IENvbXA6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCBtYXRjaEV4cHJlUmVmID0gUmVhY3QudXNlUmVmKG5ldyBTZWFyY2hFeHByU2VydmljZSgpKTtcbiAgY29uc3QgYnJlYWRjcnVtYnM6IEJyZWFkY3J1bWJUcmFpbFtdID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQXV0b21hdGVkIFJ1bGVzJyxcbiAgICAgICAgcGF0aDogJy9ydWxlcycsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBncmlkU3R5bGVzOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgLy8gdmlld3BvcnRIZWlnaHQgLSBtYXN0ZXJoZWFkSGVpZ2h0IC0gcGFnZVNlY3Rpb25QYWRkaW5nIC0gYnJlYWRjcnVtYkhlaWdodFxuICAgICAgaGVpZ2h0OiAnY2FsYygxMDB2aCAtIDQuMzc1cmVtIC0gNDhweCAtIDEuNXJlbSknLFxuICAgIH0pLFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnJlYWRjcnVtYlBhZ2UgcGFnZVRpdGxlPVwiQ3JlYXRlXCIgYnJlYWRjcnVtYnM9e2JyZWFkY3J1bWJzfT5cbiAgICAgIDxTZWFyY2hFeHByU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21hdGNoRXhwcmVSZWYuY3VycmVudH0gZGF0YS1mdWxsLWhlaWdodD5cbiAgICAgICAgPEdyaWQgaGFzR3V0dGVyIHN0eWxlPXtncmlkU3R5bGVzfT5cbiAgICAgICAgICA8R3JpZEl0ZW0geGw9ezV9IG9yZGVyPXt7IHhsOiAnMCcsIGRlZmF1bHQ6ICcxJyB9fT5cbiAgICAgICAgICAgIDxDYXJkIGlzRnVsbEhlaWdodD5cbiAgICAgICAgICAgICAgPENhcmRCb2R5IGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8Q3JlYXRlUnVsZUZvcm0gLz5cbiAgICAgICAgICAgICAgPC9DYXJkQm9keT5cbiAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICA8L0dyaWRJdGVtPlxuICAgICAgICAgIDxHcmlkSXRlbSB4bD17N30gb3JkZXI9e3sgeGw6ICcxJywgZGVmYXVsdDogJzAnIH19PlxuICAgICAgICAgICAgPENhcmQgaXNGdWxsSGVpZ2h0PlxuICAgICAgICAgICAgICA8Q2FyZEJvZHkgY2xhc3NOYW1lPVwib3ZlcmZsb3ctYXV0b1wiIGRhdGEtcXVpY2tzdGFydC1pZD1cIm1hdGNoLWV4cHItY2FyZFwiPlxuICAgICAgICAgICAgICAgIDxNYXRjaEV4cHJlc3Npb25WaXN1YWxpemVyIC8+XG4gICAgICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICAgPC9HcmlkSXRlbT5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgPC9TZWFyY2hFeHByU2VydmljZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9CcmVhZGNydW1iUGFnZT5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBDcmVhdGVSdWxlID0gd2l0aFJvdXRlcihDb21wKTtcblxuZXhwb3J0IGRlZmF1bHQgQ3JlYXRlUnVsZTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBNb2RhbCwgTW9kYWxWYXJpYW50LCBCdXR0b24sIENoZWNrYm94LCBTdGFjaywgU3BsaXQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRGVsZXRlV2FybmluZ1Byb3BzIH0gZnJvbSAnLi4vTW9kYWwvRGVsZXRlV2FybmluZ01vZGFsJztcbmltcG9ydCB7IGdldEZyb21XYXJuaW5nTWFwIH0gZnJvbSAnLi4vTW9kYWwvRGVsZXRlV2FybmluZ1V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlRGVsZXRlV2FybmluZ1Byb3BzIGV4dGVuZHMgRGVsZXRlV2FybmluZ1Byb3BzIHtcbiAgcnVsZU5hbWU/OiBzdHJpbmc7XG4gIGNsZWFuOiBib29sZWFuO1xuICBzZXRDbGVhbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+O1xufVxuXG5leHBvcnQgY29uc3QgUnVsZURlbGV0ZVdhcm5pbmdNb2RhbCA9ICh7XG4gIHZpc2libGUsXG4gIHJ1bGVOYW1lLFxuICB3YXJuaW5nVHlwZSxcbiAgb25BY2NlcHQsXG4gIG9uQ2xvc2UsXG4gIGNsZWFuLFxuICBzZXRDbGVhbixcbn06IFJ1bGVEZWxldGVXYXJuaW5nUHJvcHMpOiBKU1guRWxlbWVudCA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2RvTm90QXNrLCBzZXREb05vdEFza10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgd2FybmluZ0NvbnRlbnRzID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRGcm9tV2FybmluZ01hcCh3YXJuaW5nVHlwZSksIFt3YXJuaW5nVHlwZV0pO1xuXG4gIGNvbnN0IG9uQWNjZXB0Q2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25BY2NlcHQoKTtcbiAgICBvbkNsb3NlKCk7XG4gICAgaWYgKGRvTm90QXNrKSB7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldERlbGV0aW9uRGlhbG9nc0VuYWJsZWRGb3Iod2FybmluZ1R5cGUsIGZhbHNlKTtcbiAgICB9XG4gIH0sIFtvbkFjY2VwdCwgb25DbG9zZSwgZG9Ob3RBc2ssIGNvbnRleHQuc2V0dGluZ3MsIHdhcm5pbmdUeXBlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgdGl0bGU9e3dhcm5pbmdDb250ZW50cz8udGl0bGV9XG4gICAgICBkZXNjcmlwdGlvbj17d2FybmluZ0NvbnRlbnRzPy5kZXNjcmlwdGlvbn1cbiAgICAgIGFyaWEtbGFiZWw9e3dhcm5pbmdDb250ZW50cz8uYXJpYUxhYmVsfVxuICAgICAgdGl0bGVJY29uVmFyaWFudD1cIndhcm5pbmdcIlxuICAgICAgdmFyaWFudD17TW9kYWxWYXJpYW50LnNtYWxsfVxuICAgICAgaXNPcGVuPXt2aXNpYmxlfVxuICAgICAgc2hvd0Nsb3NlXG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgYWN0aW9ucz17W1xuICAgICAgICA8U3RhY2sgaGFzR3V0dGVyIGtleT1cIm1vZGFsLWZvb3Rlci1zdGFja1wiPlxuICAgICAgICAgIDxTcGxpdCBrZXk9XCJtb2RhbC1mb290ZXItc3BsaXRcIj5cbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImRhbmdlclwiIG9uQ2xpY2s9e29uQWNjZXB0Q2xvc2V9PlxuICAgICAgICAgICAgICB7d2FybmluZ1R5cGUubWF0Y2goL2Rpc2FibGUvaSkgPyAnRGlzYWJsZScgOiAnRGVsZXRlJ31cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwibGlua1wiIG9uQ2xpY2s9e29uQ2xvc2V9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvU3BsaXQ+XG4gICAgICAgIDwvU3RhY2s+LFxuICAgICAgXX1cbiAgICA+XG4gICAgICA8U3RhY2sgaGFzR3V0dGVyIGtleT1cIm1vZGFsLWNoZWNrYm94ZXMtc3RhY2tcIj5cbiAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgaWQ9XCJjbGVhbi1ydWxlLWVuYWJsZWRcIlxuICAgICAgICAgIGxhYmVsPVwiQ2xlYW5cIlxuICAgICAgICAgIGRlc2NyaXB0aW9uPXtgQ2xlYW4gd2lsbCBzdG9wIGFueSBBY3RpdmUgUmVjb3JkaW5ncyB0aGF0ICR7cnVsZU5hbWV9IGNyZWF0ZWQuYH1cbiAgICAgICAgICBpc0NoZWNrZWQ9e2NsZWFufVxuICAgICAgICAgIG9uQ2hhbmdlPXtzZXRDbGVhbn1cbiAgICAgICAgLz5cbiAgICAgICAgPENoZWNrYm94IGlkPVwiZG8tbm90LWFzay1lbmFibGVkXCIgbGFiZWw9XCJEb24ndCBhc2sgbWUgYWdhaW5cIiBpc0NoZWNrZWQ9e2RvTm90QXNrfSBvbkNoYW5nZT17c2V0RG9Ob3RBc2t9IC8+XG4gICAgICA8L1N0YWNrPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBGVXBsb2FkLCBNdWx0aUZpbGVVcGxvYWQsIFVwbG9hZENhbGxiYWNrcyB9IGZyb20gJ0BhcHAvU2hhcmVkL0ZpbGVVcGxvYWRzJztcbmltcG9ydCB7IExvYWRpbmdQcm9wc1R5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9ncmVzc0luZGljYXRvcic7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXAsIEJ1dHRvbiwgRm9ybSwgRm9ybUdyb3VwLCBNb2RhbCwgTW9kYWxWYXJpYW50LCBQb3BvdmVyIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBIZWxwSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcmtKb2luLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBkZWZhdWx0SWZFbXB0eSwgZmlyc3QsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzUnVsZSwgUnVsZSB9IGZyb20gJy4vUnVsZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVVcGxvYWRNb2RhbFByb3BzIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZSA9IChmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxSdWxlPiA9PiB7XG4gIHJldHVybiBmcm9tKFxuICAgIGZpbGUudGV4dCgpLnRoZW4oKGNvbnRlbnQpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICBpZiAoaXNSdWxlKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0b21hdGVkIHJ1bGUgY29udGVudCBpcyBpbnZhbGlkLicpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgUnVsZVVwbG9hZE1vZGFsOiBSZWFjdC5GQzxSdWxlVXBsb2FkTW9kYWxQcm9wcz4gPSAoeyBvbkNsb3NlLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBzdWJtaXRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpOyAvLyBVc2UgcmVmIHRvIHJlZmVyIHRvIHN1Ym1pdCB0cmlnZ2VyIGRpdlxuICBjb25zdCBhYm9ydFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7IC8vIFVzZSByZWYgdG8gcmVmZXIgdG8gYWJvcnQgdHJpZ2dlciBkaXZcblxuICBjb25zdCBbbnVtT2ZGaWxlcywgc2V0TnVtT2ZGaWxlc10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2FsbE9rcywgc2V0QWxsT2tzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3VwbG9hZGluZywgc2V0VXBsb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCByZXNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXROdW1PZkZpbGVzKDApO1xuICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gIH0sIFtzZXROdW1PZkZpbGVzLCBzZXRVcGxvYWRpbmddKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXBsb2FkaW5nKSB7XG4gICAgICBhYm9ydFJlZi5jdXJyZW50ICYmIGFib3J0UmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXQoKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFt1cGxvYWRpbmcsIHJlc2V0LCBvbkNsb3NlXSk7XG5cbiAgY29uc3Qgb25GaWxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVVcGxvYWRzOiBGVXBsb2FkW10sIHsgZ2V0UHJvZ3Jlc3NVcGRhdGVDYWxsYmFjaywgb25TaW5nbGVTdWNjZXNzLCBvblNpbmdsZUZhaWx1cmUgfTogVXBsb2FkQ2FsbGJhY2tzKSA9PiB7XG4gICAgICBzZXRVcGxvYWRpbmcodHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHRhc2tzOiBPYnNlcnZhYmxlPGJvb2xlYW4+W10gPSBbXTtcblxuICAgICAgZmlsZVVwbG9hZHMuZm9yRWFjaCgoZmlsZVVwbG9hZCkgPT4ge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgIHBhcnNlUnVsZShmaWxlVXBsb2FkLmZpbGUpLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgY29uY2F0TWFwKChydWxlKSA9PlxuICAgICAgICAgICAgICBjb250ZXh0LmFwaS51cGxvYWRSdWxlKHJ1bGUsIGdldFByb2dyZXNzVXBkYXRlQ2FsbGJhY2soZmlsZVVwbG9hZC5maWxlLm5hbWUpLCBmaWxlVXBsb2FkLmFib3J0U2lnbmFsKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRhcCh7XG4gICAgICAgICAgICAgIG5leHQ6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgb25TaW5nbGVTdWNjZXNzKGZpbGVVcGxvYWQuZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBvblNpbmdsZUZhaWx1cmUoZmlsZVVwbG9hZC5maWxlLm5hbWUsIGVycik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKF8pID0+IG9mKGZhbHNlKSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBmb3JrSm9pbih0YXNrcylcbiAgICAgICAgICAucGlwZShkZWZhdWx0SWZFbXB0eShbdHJ1ZV0pKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKG9rcykgPT4ge1xuICAgICAgICAgICAgc2V0VXBsb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHNldEFsbE9rcyhva3MucmVkdWNlKChwcmV2LCBjdXJyLCBfKSA9PiBwcmV2ICYmIGN1cnIsIHRydWUpKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtzZXRVcGxvYWRpbmcsIGNvbnRleHQuYXBpLCBhZGRTdWJzY3JpcHRpb24sIHNldEFsbE9rc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3VibWl0UmVmLmN1cnJlbnQgJiYgc3VibWl0UmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uRmlsZXNDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmlsZVVwbG9hZHM6IEZVcGxvYWRbXSkgPT4ge1xuICAgICAgc2V0QWxsT2tzKCFmaWxlVXBsb2Fkcy5zb21lKChmKSA9PiAhZi5wcm9ncmVzcyB8fCBmLnByb2dyZXNzLnByb2dyZXNzVmFyaWFudCAhPT0gJ3N1Y2Nlc3MnKSk7XG4gICAgICBzZXROdW1PZkZpbGVzKGZpbGVVcGxvYWRzLmxlbmd0aCk7XG4gICAgfSxcbiAgICBbc2V0TnVtT2ZGaWxlcywgc2V0QWxsT2tzXVxuICApO1xuXG4gIGNvbnN0IHN1Ym1pdEJ1dHRvbkxvYWRpbmdQcm9wcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIHNwaW5uZXJBcmlhVmFsdWVUZXh0OiAnU3VibWl0dGluZycsXG4gICAgICAgIHNwaW5uZXJBcmlhTGFiZWw6ICdzdWJtaXR0aW5nLWF1dG9tYXRlZC1ydWxlJyxcbiAgICAgICAgaXNMb2FkaW5nOiB1cGxvYWRpbmcsXG4gICAgICB9IGFzIExvYWRpbmdQcm9wc1R5cGUpLFxuICAgIFt1cGxvYWRpbmddXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgaXNPcGVuPXtwcm9wcy52aXNpYmxlfVxuICAgICAgdmFyaWFudD17TW9kYWxWYXJpYW50LmxhcmdlfVxuICAgICAgc2hvd0Nsb3NlPXt0cnVlfVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICB0aXRsZT1cIlVwbG9hZCBBdXRvbWF0ZWQgUnVsZXNcIlxuICAgICAgZGVzY3JpcHRpb249XCJTZWxlY3QgYW4gQXV0b21hdGVkIFJ1bGVzIGRlZmluaXRpb24gZmlsZSB0byB1cGxvYWQuIEZpbGUgbXVzdCBiZSBpbiB2YWxpZCBKU09OIGZvcm1hdC5cIlxuICAgICAgaGVscD17XG4gICAgICAgIDxQb3BvdmVyXG4gICAgICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICAgICAgaGVhZGVyQ29udGVudD17PGRpdj5XaGF0JnF1b3Q7cyB0aGlzPzwvZGl2Pn1cbiAgICAgICAgICBib2R5Q29udGVudD17XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICBBdXRvbWF0ZWQgUnVsZXMgYXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgaW5zdHJ1Y3QgQ3J5b3N0YXQgdG8gY3JlYXRlIEpESyBGbGlnaHQgUmVjb3JkaW5ncyBvbiBtYXRjaGluZ1xuICAgICAgICAgICAgICB0YXJnZXQgSlZNIGFwcGxpY2F0aW9ucy4gRWFjaCBBdXRvbWF0ZWQgUnVsZSBzcGVjaWZpZXMgcGFyYW1ldGVycyBmb3Igd2hpY2ggRXZlbnQgVGVtcGxhdGUgdG8gdXNlLCBob3dcbiAgICAgICAgICAgICAgbXVjaCBkYXRhIHNob3VsZCBiZSBrZXB0IGluIHRoZSBhcHBsaWNhdGlvbiByZWNvcmRpbmcgYnVmZmVyLCBhbmQgaG93IGZyZXF1ZW50bHkgQ3J5b3N0YXQgc2hvdWxkIGNvcHkgdGhlXG4gICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHJlY29yZGluZyBidWZmZXIgaW50byBDcnlvc3RhdCZxdW90O3Mgb3duIGFyY2hpdmVkIHN0b3JhZ2UuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwbGFpblwiIGFyaWEtbGFiZWw9XCJIZWxwXCI+XG4gICAgICAgICAgICA8SGVscEljb24gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgfVxuICAgID5cbiAgICAgIDxGb3JtPlxuICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPVwiSlNPTiBGaWxlXCIgaXNSZXF1aXJlZCBmaWVsZElkPVwiZmlsZVwiPlxuICAgICAgICAgIDxNdWx0aUZpbGVVcGxvYWRcbiAgICAgICAgICAgIHN1Ym1pdFJlZj17c3VibWl0UmVmfVxuICAgICAgICAgICAgYWJvcnRSZWY9e2Fib3J0UmVmfVxuICAgICAgICAgICAgdXBsb2FkaW5nPXt1cGxvYWRpbmd9XG4gICAgICAgICAgICBkcm9wWm9uZUFjY2VwdHM9e1snYXBwbGljYXRpb24vanNvbiddfVxuICAgICAgICAgICAgZGlzcGxheUFjY2VwdHM9e1snSlNPTiddfVxuICAgICAgICAgICAgb25GaWxlU3VibWl0PXtvbkZpbGVTdWJtaXR9XG4gICAgICAgICAgICBvbkZpbGVzQ2hhbmdlPXtvbkZpbGVzQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8QWN0aW9uR3JvdXA+XG4gICAgICAgICAge2FsbE9rcyAmJiBudW1PZkZpbGVzID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwicHJpbWFyeVwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT5cbiAgICAgICAgICAgICAgQ2xvc2VcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXshbnVtT2ZGaWxlcyB8fCB1cGxvYWRpbmd9XG4gICAgICAgICAgICAgICAgey4uLnN1Ym1pdEJ1dHRvbkxvYWRpbmdQcm9wc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFN1Ym1pdFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwibGlua1wiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT5cbiAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0FjdGlvbkdyb3VwPlxuICAgICAgPC9Gb3JtPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBCcmVhZGNydW1iUGFnZSB9IGZyb20gJ0BhcHAvQnJlYWRjcnVtYlBhZ2UvQnJlYWRjcnVtYlBhZ2UnO1xuaW1wb3J0IHsgTG9hZGluZ1ZpZXcgfSBmcm9tICdAYXBwL0xvYWRpbmdWaWV3L0xvYWRpbmdWaWV3JztcbmltcG9ydCB7IERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlIH0gZnJvbSAnQGFwcC9Nb2RhbC9EZWxldGVXYXJuaW5nVXRpbHMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnkgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Ob3RpZmljYXRpb25DaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uLCBzb3J0UmVzb3VyY2VzIH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRCb2R5LFxuICBDYXJkVGl0bGUsXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVJY29uLFxuICBTd2l0Y2gsXG4gIFRpdGxlLFxuICBUb29sYmFyLFxuICBUb29sYmFyQ29udGVudCxcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uLCBVcGxvYWRJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uc0NvbHVtbixcbiAgSUFjdGlvbixcbiAgSW5uZXJTY3JvbGxDb250YWluZXIsXG4gIElTb3J0QnksXG4gIFNvcnRCeURpcmVjdGlvbixcbiAgVGFibGVDb21wb3NhYmxlLFxuICBUYWJsZVZhcmlhbnQsXG4gIFRib2R5LFxuICBUZCxcbiAgVGgsXG4gIFRoZWFkLFxuICBUaFByb3BzLFxuICBUcixcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluaywgdXNlSGlzdG9yeSwgdXNlUm91dGVNYXRjaCB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSdWxlRGVsZXRlV2FybmluZ01vZGFsIH0gZnJvbSAnLi9SdWxlRGVsZXRlV2FybmluZ01vZGFsJztcbmltcG9ydCB7IFJ1bGVVcGxvYWRNb2RhbCB9IGZyb20gJy4vUnVsZXNVcGxvYWRNb2RhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgbWF0Y2hFeHByZXNzaW9uOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGV2ZW50U3BlY2lmaWVyOiBzdHJpbmc7XG4gIGFyY2hpdmFsUGVyaW9kU2Vjb25kczogbnVtYmVyO1xuICBpbml0aWFsRGVsYXlTZWNvbmRzOiBudW1iZXI7XG4gIHByZXNlcnZlZEFyY2hpdmVzOiBudW1iZXI7XG4gIG1heEFnZVNlY29uZHM6IG51bWJlcjtcbiAgbWF4U2l6ZUJ5dGVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBydWxlT2JqS2V5cyA9IFtcbiAgJ25hbWUnLFxuICAnZGVzY3JpcHRpb24nLFxuICAnbWF0Y2hFeHByZXNzaW9uJyxcbiAgJ2VuYWJsZWQnLFxuICAnZXZlbnRTcGVjaWZpZXInLFxuICAnYXJjaGl2YWxQZXJpb2RTZWNvbmRzJyxcbiAgJ2luaXRpYWxEZWxheVNlY29uZHMnLFxuICAncHJlc2VydmVkQXJjaGl2ZXMnLFxuICAnbWF4QWdlU2Vjb25kcycsXG4gICdtYXhTaXplQnl0ZXMnLFxuXTtcblxuZXhwb3J0IGNvbnN0IGlzUnVsZSA9IChvYmo6IG9iamVjdCk6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGNvbnN0IGtleSBvZiBydWxlT2JqS2V5cykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBJZ25vcmUgdW5rbm93biBmaWVsZHNcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXG4gIHtcbiAgICB0aXRsZTogJ0VuYWJsZWQnLFxuICAgIGtleVBhdGhzOiBbJ2VuYWJsZWQnXSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTmFtZScsXG4gICAga2V5UGF0aHM6IFsnbmFtZSddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdEZXNjcmlwdGlvbicsXG4gICAga2V5UGF0aHM6IFsnZGVzY3JpcHRpb24nXSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnTWF0Y2ggRXhwcmVzc2lvbicsXG4gICAga2V5UGF0aHM6IFsnbWF0Y2hFeHByZXNzaW9uJ10sXG4gICAgc29ydGFibGU6IHRydWUsXG4gICAgdG9vbHRpcDpcbiAgICAgICdBIGNvZGUtc25pcHBldCBleHByZXNzaW9uIHdoaWNoIG11c3QgZXZhbHVhdGUgdG8gYSBib29sZWFuIHdoZW4gYXBwbGllZCB0byBhIGdpdmVuIHRhcmdldC4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUgdGhlbiB0aGUgcnVsZSBhcHBsaWVzIHRvIHRoYXQgdGFyZ2V0LicsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0V2ZW50IFNwZWNpZmllcicsXG4gICAga2V5UGF0aHM6IFsnZXZlbnRTcGVjaWZpZXInXSxcbiAgICB0b29sdGlwOiAnVGhlIG5hbWUgYW5kIGxvY2F0aW9uIG9mIHRoZSBFdmVudCBUZW1wbGF0ZSBhcHBsaWVkIGJ5IHRoaXMgcnVsZS4nLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdBcmNoaXZhbCBQZXJpb2QnLFxuICAgIGtleVBhdGhzOiBbJ2FyY2hpdmFsUGVyaW9kU2Vjb25kcyddLFxuICAgIHRvb2x0aXA6XG4gICAgICAnUGVyaW9kIGluIHNlY29uZHMuIENyeW9zdGF0IHdpbGwgY29ubmVjdCB0byBtYXRjaGluZyB0YXJnZXRzIGF0IHRoaXMgaW50ZXJ2YWwgYW5kIGNvcHkgdGhlIHJlbGV2YW50IHJlY29yZGluZyBkYXRhIGludG8gaXRzIGFyY2hpdmVzLiBWYWx1ZXMgbGVzcyB0aGFuIDEgcHJldmVudCBkYXRhIGZyb20gYmVpbmcgcmVwZWF0ZWRseSBjb3BpZWQgaW50byBhcmNoaXZlcyAtIHJlY29yZGluZ3Mgd2lsbCBiZSBzdGFydGVkIGFuZCByZW1haW4gb25seSBpbiB0YXJnZXQgSlZNIG1lbW9yeS4nLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdJbml0aWFsIERlbGF5JyxcbiAgICBrZXlQYXRoczogWydpbml0aWFsRGVsYXlTZWNvbmRzJ10sXG4gICAgdG9vbHRpcDpcbiAgICAgICdJbml0aWFsIGRlbGF5IGluIHNlY29uZHMuIENyeW9zdGF0IHdpbGwgd2FpdCB0aGlzIGFtb3VudCBvZiB0aW1lIGJlZm9yZSBmaXJzdCBjb3B5aW5nIHJlY29yZGluZyBkYXRhIGludG8gaXRzIGFyY2hpdmVzLiBWYWx1ZXMgbGVzcyB0aGFuIDAgZGVmYXVsdCB0byBlcXVhbCB0byB0aGUgQXJjaGl2YWwgUGVyaW9kLiBZb3UgY2FuIHNldCBhIG5vbi16ZXJvIEluaXRpYWwgRGVsYXkgd2l0aCBhIHplcm8gQXJjaGl2YWwgUGVyaW9kLCB3aGljaCB3aWxsIHN0YXJ0IGEgcmVjb3JkaW5nIGFuZCBjb3B5IGl0IGludG8gYXJjaGl2ZXMgZXhhY3RseSBvbmNlIGFmdGVyIGEgc2V0IGRlbGF5LicsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1ByZXNlcnZlZCBBcmNoaXZlcycsXG4gICAga2V5UGF0aHM6IFsncHJlc2VydmVkQXJjaGl2ZXMnXSxcbiAgICB0b29sdGlwOlxuICAgICAgJ1RoZSBudW1iZXIgb2YgcmVjb3JkaW5nIGNvcGllcyB0byBiZSBtYWludGFpbmVkIGluIHRoZSBDcnlvc3RhdCBhcmNoaXZlcy4gQ3J5b3N0YXQgd2lsbCBjb250aW51ZSByZXRyaWV2aW5nIGZ1cnRoZXIgYXJjaGl2ZWQgY29waWVzIGFuZCB0cmltbWluZyB0aGUgb2xkZXN0IGNvcGllcyBmcm9tIHRoZSBhcmNoaXZlIHRvIG1haW50YWluIHRoaXMgbGltaXQuIFZhbHVlcyBsZXNzIHRoYW4gMSBwcmV2ZW50IGRhdGEgZnJvbSBiZWluZyBjb3BpZWQgaW50byBhcmNoaXZlcyAtIHJlY29yZGluZ3Mgd2lsbCBiZSBzdGFydGVkIGFuZCByZW1haW4gb25seSBpbiB0YXJnZXQgSlZNIG1lbW9yeS4nLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNYXhpbXVtIEFnZScsXG4gICAga2V5UGF0aHM6IFsnbWF4QWdlU2Vjb25kcyddLFxuICAgIHRvb2x0aXA6XG4gICAgICAnVGhlIG1heGltdW0gYWdlIGluIHNlY29uZHMgZm9yIGRhdGEga2VwdCBpbiB0aGUgSkZSIHJlY29yZGluZ3Mgc3RhcnRlZCBieSB0aGlzIHJ1bGUuIFZhbHVlcyBsZXNzIHRoYW4gMSBpbmRpY2F0ZSBubyBsaW1pdC4nLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNYXhpbXVtIFNpemUnLFxuICAgIGtleVBhdGhzOiBbJ21heFNpemVCeXRlcyddLFxuICAgIHRvb2x0aXA6ICdUaGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIGZvciBKRlIgcmVjb3JkaW5ncyBzdGFydGVkIGJ5IHRoaXMgcnVsZS4gVmFsdWVzIGxlc3MgdGhhbiAxIGluZGljYXRlIG5vIGxpbWl0LicsXG4gIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVUb0RlbGV0ZU9yRGlzYWJsZSB7XG4gIHJ1bGU6IFJ1bGU7XG4gIHR5cGU6ICdERUxFVEUnIHwgJ0RJU0FCTEUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzUHJvcHMge31cblxuZXhwb3J0IGNvbnN0IFJ1bGVzOiBSZWFjdC5GQzxSdWxlc1Byb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3Qgcm91dGVySGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuXG4gIGNvbnN0IHsgdXJsIH0gPSB1c2VSb3V0ZU1hdGNoKCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSBSZWFjdC51c2VTdGF0ZSh7fSBhcyBJU29ydEJ5KTtcbiAgY29uc3QgW3J1bGVzLCBzZXRSdWxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSBhcyBSdWxlW10pO1xuICBjb25zdCBbd2FybmluZ01vZGFsT3Blbiwgc2V0V2FybmluZ01vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1VwbG9hZE1vZGFsT3Blbiwgc2V0SXNVcGxvYWRNb2RhbE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcnVsZVRvV2Fybiwgc2V0UnVsZVRvV2Fybl0gPSBSZWFjdC51c2VTdGF0ZTxSdWxlVG9EZWxldGVPckRpc2FibGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFtjbGVhblJ1bGVFbmFibGVkLCBzZXRDbGVhblJ1bGVFbmFibGVkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuXG4gIGNvbnN0IGdldFNvcnRQYXJhbXMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoY29sdW1uSW5kZXg6IG51bWJlcik6IFRoUHJvcHNbJ3NvcnQnXSA9PiAoe1xuICAgICAgc29ydEJ5OiBzb3J0QnksXG4gICAgICBvblNvcnQ6IChfZXZlbnQsIGluZGV4LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgc2V0U29ydEJ5KHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgIH0pLFxuICAgIFtzb3J0QnksIHNldFNvcnRCeV1cbiAgKTtcblxuICBjb25zdCByZWZyZXNoUnVsZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQuYXBpLmdldFJ1bGVzKCkuc3Vic2NyaWJlKChydWxlcykgPT4ge1xuICAgICAgICBzZXRSdWxlcyhydWxlcyk7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZXRJc0xvYWRpbmcsIGFkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIHNldFJ1bGVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWZyZXNoUnVsZXMoKTtcbiAgfSwgW3JlZnJlc2hSdWxlc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsXG4gICAgICAgIC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5SdWxlQ3JlYXRlZClcbiAgICAgICAgLnN1YnNjcmliZSgodikgPT4gc2V0UnVsZXMoKG9sZCkgPT4gb2xkLmNvbmNhdCh2Lm1lc3NhZ2UpKSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHNldFJ1bGVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWxcbiAgICAgICAgLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LlJ1bGVEZWxldGVkKVxuICAgICAgICAuc3Vic2NyaWJlKCh2KSA9PiBzZXRSdWxlcygob2xkKSA9PiBvbGQuZmlsdGVyKChvKSA9PiBvLm5hbWUgIT0gdi5tZXNzYWdlLm5hbWUpKSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwsIHNldFJ1bGVzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWwubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuUnVsZVVwZGF0ZWQpLnN1YnNjcmliZSgobXNnKSA9PiB7XG4gICAgICAgIHNldFJ1bGVzKChvbGQpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaEluZGV4ID0gb2xkLmZpbmRJbmRleCgocikgPT4gci5uYW1lID09PSBtc2cubWVzc2FnZS5uYW1lKTtcbiAgICAgICAgICBpZiAobWF0Y2hJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdBcnJheSA9IFsuLi5vbGRdO1xuICAgICAgICAgICAgbmV3QXJyYXkuc3BsaWNlKG1hdGNoSW5kZXgsIDEsIHsgLi4ub2xkW21hdGNoSW5kZXhdLCBlbmFibGVkOiBtc2cubWVzc2FnZS5lbmFibGVkIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0FycmF5O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2xkO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLCBzZXRSdWxlc10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gcmVmcmVzaFJ1bGVzKCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIHJlZnJlc2hSdWxlc10pO1xuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZVJ1bGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcm91dGVySGlzdG9yeS5wdXNoKGAke3VybH0vY3JlYXRlYCk7XG4gIH0sIFtyb3V0ZXJIaXN0b3J5LCB1cmxdKTtcblxuICBjb25zdCBoYW5kbGVVcGxvYWRSdWxlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzVXBsb2FkTW9kYWxPcGVuKHRydWUpO1xuICB9LCBbc2V0SXNVcGxvYWRNb2RhbE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVEaXNhYmxlUnVsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChydWxlOiBSdWxlLCBjbGVhblJ1bGVFbmFibGVkOiBib29sZWFuKSA9PiB7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oY29udGV4dC5hcGkudXBkYXRlUnVsZSh7IC4uLnJ1bGUsIGVuYWJsZWQ6IGZhbHNlIH0sIGNsZWFuUnVsZUVuYWJsZWQpLnN1YnNjcmliZSgpKTtcbiAgICB9LFxuICAgIFtjb250ZXh0LmFwaSwgYWRkU3Vic2NyaXB0aW9uXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChydWxlOiBSdWxlLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBhZGRTdWJzY3JpcHRpb24oY29udGV4dC5hcGkudXBkYXRlUnVsZSh7IC4uLnJ1bGUsIGVuYWJsZWQgfSkuc3Vic2NyaWJlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRleHQuc2V0dGluZ3MuZGVsZXRpb25EaWFsb2dzRW5hYmxlZEZvcihEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EaXNhYmxlQXV0b21hdGVkUnVsZXMpKSB7XG4gICAgICAgICAgc2V0UnVsZVRvV2Fybih7IHJ1bGU6IHJ1bGUsIHR5cGU6ICdESVNBQkxFJyB9KTtcbiAgICAgICAgICBzZXRXYXJuaW5nTW9kYWxPcGVuKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhbmRsZURpc2FibGVSdWxlKHJ1bGUsIGNsZWFuUnVsZUVuYWJsZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBjb250ZXh0LmFwaSxcbiAgICAgIGNvbnRleHQuc2V0dGluZ3MsXG4gICAgICBjbGVhblJ1bGVFbmFibGVkLFxuICAgICAgYWRkU3Vic2NyaXB0aW9uLFxuICAgICAgaGFuZGxlRGlzYWJsZVJ1bGUsXG4gICAgICBzZXRSdWxlVG9XYXJuLFxuICAgICAgc2V0V2FybmluZ01vZGFsT3BlbixcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHJ1bGU6IFJ1bGUsIGNsZWFuID0gdHJ1ZSkgPT4ge1xuICAgICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgICBjb250ZXh0LmFwaVxuICAgICAgICAgIC5kZWxldGVSdWxlKHJ1bGUubmFtZSwgY2xlYW4pXG4gICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHVuZGVmaW5lZCAvKiBkbyBub3RoaW5nIC0gbm90aWZpY2F0aW9uIHdpbGwgaGFuZGxlIHVwZGF0aW5nIHN0YXRlICovKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUJ1dHRvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChydWxlOiBSdWxlKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC5zZXR0aW5ncy5kZWxldGlvbkRpYWxvZ3NFbmFibGVkRm9yKERlbGV0ZU9yRGlzYWJsZVdhcm5pbmdUeXBlLkRlbGV0ZUF1dG9tYXRlZFJ1bGVzKSkge1xuICAgICAgICBzZXRSdWxlVG9XYXJuKHsgcnVsZTogcnVsZSwgdHlwZTogJ0RFTEVURScgfSk7XG4gICAgICAgIHNldFdhcm5pbmdNb2RhbE9wZW4odHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVEZWxldGUocnVsZSwgY2xlYW5SdWxlRW5hYmxlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbY29udGV4dC5zZXR0aW5ncywgc2V0V2FybmluZ01vZGFsT3BlbiwgaGFuZGxlRGVsZXRlLCBzZXRSdWxlVG9XYXJuLCBjbGVhblJ1bGVFbmFibGVkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVdhcm5pbmdNb2RhbEFjY2VwdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocnVsZVRvV2Fybikge1xuICAgICAgaWYgKHJ1bGVUb1dhcm4/LnR5cGUgPT09ICdERUxFVEUnKSB7XG4gICAgICAgIGhhbmRsZURlbGV0ZShydWxlVG9XYXJuLnJ1bGUsIGNsZWFuUnVsZUVuYWJsZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlRGlzYWJsZVJ1bGUocnVsZVRvV2Fybi5ydWxlLCBjbGVhblJ1bGVFbmFibGVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcigncnVsZVRvV2FybiBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gIH0sIFtoYW5kbGVEZWxldGUsIGhhbmRsZURpc2FibGVSdWxlLCBydWxlVG9XYXJuLCBjbGVhblJ1bGVFbmFibGVkXSk7XG5cbiAgY29uc3QgaGFuZGxlV2FybmluZ01vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0V2FybmluZ01vZGFsT3BlbihmYWxzZSk7XG4gICAgc2V0UnVsZVRvV2Fybih1bmRlZmluZWQpO1xuICB9LCBbc2V0V2FybmluZ01vZGFsT3Blbiwgc2V0UnVsZVRvV2Fybl0pO1xuXG4gIGNvbnN0IGFjdGlvblJlc29sdmVyID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHJ1bGU6IFJ1bGUpOiBJQWN0aW9uW10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnRG93bmxvYWQnLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnRleHQuYXBpLmRvd25sb2FkUnVsZShydWxlLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgICAgb25DbGljazogKCkgPT4gaGFuZGxlRGVsZXRlQnV0dG9uKHJ1bGUpLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9LFxuICAgIFtjb250ZXh0LmFwaSwgaGFuZGxlRGVsZXRlQnV0dG9uXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZE1vZGFsQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNVcGxvYWRNb2RhbE9wZW4oZmFsc2UpO1xuICB9LCBbc2V0SXNVcGxvYWRNb2RhbE9wZW5dKTtcblxuICBjb25zdCBydWxlUm93cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRlZCA9IHNvcnRSZXNvdXJjZXMoXG4gICAgICB7XG4gICAgICAgIGluZGV4OiBzb3J0QnkuaW5kZXggPz8gMSxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3J0QnkuZGlyZWN0aW9uID8/IFNvcnRCeURpcmVjdGlvbi5hc2MsXG4gICAgICB9LFxuICAgICAgcnVsZXMsXG4gICAgICB0YWJsZUNvbHVtbnNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNvcnRlZC5tYXAoKHI6IFJ1bGUsIGluZGV4KSA9PiAoXG4gICAgICA8VHIga2V5PXtgYXV0b21hdGljLXJ1bGUtJHtpbmRleH1gfT5cbiAgICAgICAgPFRkIGtleT17YGF1dG9tYXRpYy1ydWxlLWVuYWJsZWQtJHtpbmRleH1gfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1swXS50aXRsZX0+XG4gICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7ci5uYW1lfSBpcyBlbmFibGVkYH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17J3N3aXRjaC10b2dnbGUtJyArIFN0cmluZyhyLmVuYWJsZWQpfVxuICAgICAgICAgICAgaXNDaGVja2VkPXtyLmVuYWJsZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KHN0YXRlKSA9PiBoYW5kbGVUb2dnbGUociwgc3RhdGUpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhdXRvbWF0aWMtcnVsZS1uYW1lLSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMV0udGl0bGV9PlxuICAgICAgICAgIHtyLm5hbWV9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhdXRvbWF0aWMtcnVsZS1kZXNjcmlwdGlvbi0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzJdLnRpdGxlfT5cbiAgICAgICAgICB7ci5kZXNjcmlwdGlvbn1cbiAgICAgICAgPC9UZD5cbiAgICAgICAgPFRkIGtleT17YGF1dG9tYXRpYy1ydWxlLW1hdGNoRXhwcmVzc2lvbi0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzNdLnRpdGxlfT5cbiAgICAgICAgICB7ci5tYXRjaEV4cHJlc3Npb259XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhdXRvbWF0aWMtcnVsZS1ldmVudFNwZWNpZmllci0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzRdLnRpdGxlfT5cbiAgICAgICAgICB7ci5ldmVudFNwZWNpZmllcn1cbiAgICAgICAgPC9UZD5cbiAgICAgICAgPFRkIGtleT17YGF1dG9tYXRpYy1ydWxlLWFyY2hpdmFsUGVyaW9kU2Vjb25kcy0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzVdLnRpdGxlfT5cbiAgICAgICAgICB7ci5hcmNoaXZhbFBlcmlvZFNlY29uZHN9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhdXRvbWF0aWMtcnVsZS1pbml0aWFsRGVsYXlTZWNvbmRzLSR7aW5kZXh9YH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbNl0udGl0bGV9PlxuICAgICAgICAgIHtyLmluaXRpYWxEZWxheVNlY29uZHN9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhdXRvbWF0aWMtcnVsZS1wcmVzZXJ2ZWRBcmNoaXZlcy0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzddLnRpdGxlfT5cbiAgICAgICAgICB7ci5wcmVzZXJ2ZWRBcmNoaXZlc31cbiAgICAgICAgPC9UZD5cbiAgICAgICAgPFRkIGtleT17YGF1dG9tYXRpYy1ydWxlLW1heEFnZVNlY29uZHMtJHtpbmRleH1gfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1s4XS50aXRsZX0+XG4gICAgICAgICAge3IubWF4QWdlU2Vjb25kc31cbiAgICAgICAgPC9UZD5cbiAgICAgICAgPFRkIGtleT17YGF1dG9tYXRpYy1ydWxlLW1heFNpemVCeXRlcy0ke2luZGV4fWB9IGRhdGFMYWJlbD17dGFibGVDb2x1bW5zWzldLnRpdGxlfT5cbiAgICAgICAgICB7ci5tYXhTaXplQnl0ZXN9XG4gICAgICAgIDwvVGQ+XG4gICAgICAgIDxUZCBrZXk9e2BhdXRvbWF0aWMtcnVsZS1hY3Rpb24tJHtpbmRleH1gfSBpc0FjdGlvbkNlbGwgc3R5bGU9e3sgcGFkZGluZ1JpZ2h0OiAnMCcgfX0+XG4gICAgICAgICAgPEFjdGlvbnNDb2x1bW5cbiAgICAgICAgICAgIGl0ZW1zPXthY3Rpb25SZXNvbHZlcihyKX1cbiAgICAgICAgICAgIG1lbnVBcHBlbmRUbz17KCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dG9tYXRlZC1ydWxlLXRvb2xiYXInKSB8fCBkb2N1bWVudC5ib2R5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGQ+XG4gICAgICA8L1RyPlxuICAgICkpO1xuICB9LCBbcnVsZXMsIHNvcnRCeSwgaGFuZGxlVG9nZ2xlLCBhY3Rpb25SZXNvbHZlcl0pO1xuXG4gIGNvbnN0IHZpZXdDb250ZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIDxMb2FkaW5nVmlldyAvPjtcbiAgICB9IGVsc2UgaWYgKCFydWxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEVtcHR5U3RhdGU+XG4gICAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9XCJoNFwiIHNpemU9XCJsZ1wiPlxuICAgICAgICAgICAgICBObyBBdXRvbWF0ZWQgUnVsZXNcbiAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgPC9FbXB0eVN0YXRlPlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxJbm5lclNjcm9sbENvbnRhaW5lcj5cbiAgICAgICAgICA8VGFibGVDb21wb3NhYmxlIGFyaWEtbGFiZWw9XCJBdXRvbWF0ZWQgUnVsZXMgVGFibGVcIiB2YXJpYW50PXtUYWJsZVZhcmlhbnQuY29tcGFjdH0+XG4gICAgICAgICAgICA8VGhlYWQ+XG4gICAgICAgICAgICAgIDxUcj5cbiAgICAgICAgICAgICAgICB7dGFibGVDb2x1bW5zLm1hcCgoeyB0aXRsZSwgdG9vbHRpcCwgc29ydGFibGUgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxUaFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BhdXRvbWF0aWMtcnVsZS1oZWFkZXItJHt0aXRsZX1gfVxuICAgICAgICAgICAgICAgICAgICBzb3J0PXtzb3J0YWJsZSA/IGdldFNvcnRQYXJhbXMoaW5kZXgpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICBpbmZvPXtcbiAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICAgIDwvVGg+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgICA8L1RoZWFkPlxuICAgICAgICAgICAgPFRib2R5PntydWxlUm93c308L1Rib2R5PlxuICAgICAgICAgIDwvVGFibGVDb21wb3NhYmxlPlxuICAgICAgICA8L0lubmVyU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgKTtcbiAgICB9XG4gIH0sIFtnZXRTb3J0UGFyYW1zLCBpc0xvYWRpbmcsIHJ1bGVzLCBydWxlUm93c10pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCcmVhZGNydW1iUGFnZSBwYWdlVGl0bGU9XCJBdXRvbWF0ZWQgUnVsZXNcIj5cbiAgICAgICAgPENhcmQgZGF0YS1xdWlja3N0YXJ0LWlkPVwiYWJvdXQtcnVsZXNcIj5cbiAgICAgICAgICA8Q2FyZFRpdGxlPkFib3V0IEF1dG9tYXRlZCBSdWxlczwvQ2FyZFRpdGxlPlxuICAgICAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgICAgIEF1dG9tYXRlZCBSdWxlcyBkZWZpbmUgYSBkeW5hbWljIHNldCBvZiBUYXJnZXQgSlZNcyB0byBjb25uZWN0IHRvIGFuZCBzdGFydHsnICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9yZWNvcmRpbmdzXCI+QWN0aXZlIFJlY29yZGluZ3M8L0xpbms+IHVzaW5nIGEgc3BlY2lmaWMgPExpbmsgdG89XCIvZXZlbnRzXCI+RXZlbnQgVGVtcGxhdGU8L0xpbms+eycgJ31cbiAgICAgICAgICAgIHdoZW4gdGhlIEF1dG9tYXRlZCBSdWxlIGlzIGNyZWF0ZWQgYW5kIHdoZW4gYW55IG5ldyBtYXRjaGluZyBUYXJnZXQgSlZNcyBhcHBlYXIuIElmIHlvdXIgVGFyZ2V0IEpWTVxuICAgICAgICAgICAgY29ubmVjdGlvbnMgcmVxdWlyZSBKTVggQ3JlZGVudGlhbHMsIHlvdSBjYW4gY29uZmlndXJlIHRoZXNlIGluIDxMaW5rIHRvPVwiL3NlY3VyaXR5XCI+U2VjdXJpdHk8L0xpbms+LlxuICAgICAgICAgICAgQXV0b21hdGVkIFJ1bGVzIGNhbiBiZSBjb25maWd1cmVkIHRvIHBlcmlvZGljYWxseSBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgQWN0aXZlIFJlY29yZGluZyB0b3snICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9hcmNoaXZlc1wiPkFyY2hpdmVzPC9MaW5rPiB0byBlbnN1cmUgeW91IGFsd2F5cyBoYXZlIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBKVk1zLlxuICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPENhcmQ+XG4gICAgICAgICAgPENhcmRCb2R5PlxuICAgICAgICAgICAgPFRvb2xiYXIgaWQ9XCJhdXRvbWF0ZWQtcnVsZS10b29sYmFyXCI+XG4gICAgICAgICAgICAgIDxUb29sYmFyQ29udGVudD5cbiAgICAgICAgICAgICAgICA8VG9vbGJhckdyb3VwIHZhcmlhbnQ9XCJpY29uLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PVwiY3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ3JlYXRlUnVsZX1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjcmVhdGUtcnVsZS1idG5cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPnsnICd9XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PVwidXBsb2FkXCIgdmFyaWFudD1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJVcGxvYWRcIiBvbkNsaWNrPXtoYW5kbGVVcGxvYWRSdWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VXBsb2FkSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgICAgICAgICAge3J1bGVUb1dhcm4gPyAoXG4gICAgICAgICAgICAgICAgICA8UnVsZURlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nVHlwZT17XG4gICAgICAgICAgICAgICAgICAgICAgcnVsZVRvV2Fybi50eXBlID09PSAnREVMRVRFJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVBdXRvbWF0ZWRSdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EaXNhYmxlQXV0b21hdGVkUnVsZXNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZT17cnVsZVRvV2Fybi5ydWxlLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU9e3dhcm5pbmdNb2RhbE9wZW59XG4gICAgICAgICAgICAgICAgICAgIG9uQWNjZXB0PXtoYW5kbGVXYXJuaW5nTW9kYWxBY2NlcHR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZVdhcm5pbmdNb2RhbENsb3NlfVxuICAgICAgICAgICAgICAgICAgICBjbGVhbj17Y2xlYW5SdWxlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgc2V0Q2xlYW49e3NldENsZWFuUnVsZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvVG9vbGJhckNvbnRlbnQ+XG4gICAgICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICAgICAgICB7dmlld0NvbnRlbnR9XG4gICAgICAgICAgPC9DYXJkQm9keT5cbiAgICAgICAgPC9DYXJkPlxuICAgICAgPC9CcmVhZGNydW1iUGFnZT5cbiAgICAgIDxSdWxlVXBsb2FkTW9kYWwgdmlzaWJsZT17aXNVcGxvYWRNb2RhbE9wZW59IG9uQ2xvc2U9e2hhbmRsZVVwbG9hZE1vZGFsQ2xvc2V9PjwvUnVsZVVwbG9hZE1vZGFsPlxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUnVsZXM7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IExvYWRpbmdWaWV3IH0gZnJvbSAnQGFwcC9Mb2FkaW5nVmlldy9Mb2FkaW5nVmlldyc7XG5pbXBvcnQgeyBEZWxldGVXYXJuaW5nTW9kYWwgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdNb2RhbCc7XG5pbXBvcnQgeyBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSB9IGZyb20gJ0BhcHAvTW9kYWwvRGVsZXRlV2FybmluZ1V0aWxzJztcbmltcG9ydCB7IFN0b3JlZENyZWRlbnRpYWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9BcGkuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IFRhcmdldERpc2NvdmVyeUV2ZW50IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvVGFyZ2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IHVzZVNvcnQgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVNvcnQnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiwgZXZhbHVhdGVUYXJnZXRXaXRoRXhwciwgc29ydFJlc291cmNlcyB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQmFkZ2UsXG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIERyb3Bkb3duLFxuICBEcm9wZG93bkl0ZW0sXG4gIERyb3Bkb3duVG9nZ2xlLFxuICBEcm9wZG93blRvZ2dsZUNoZWNrYm94LFxuICBFbXB0eVN0YXRlLFxuICBFbXB0eVN0YXRlSWNvbixcbiAgVGV4dCxcbiAgVGl0bGUsXG4gIFRvb2xiYXIsXG4gIFRvb2xiYXJDb250ZW50LFxuICBUb29sYmFySXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0IHsgRXhwYW5kYWJsZVJvd0NvbnRlbnQsIFRhYmxlQ29tcG9zYWJsZSwgVGJvZHksIFRkLCBUaCwgVGhlYWQsIFRyIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtdGFibGUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTZWN1cml0eUNhcmQgfSBmcm9tICcuLi9TZWN1cml0eVBhbmVsJztcbmltcG9ydCB7IENyZWF0ZUNyZWRlbnRpYWxNb2RhbCB9IGZyb20gJy4vQ3JlYXRlQ3JlZGVudGlhbE1vZGFsJztcbmltcG9ydCB7IE1hdGNoZWRUYXJnZXRzVGFibGUgfSBmcm9tICcuL01hdGNoZWRUYXJnZXRzVGFibGUnO1xuXG5jb25zdCBlbnVtIEFjdGlvbnMge1xuICBIQU5ETEVfUkVGUkVTSCxcbiAgSEFORExFX1RBUkdFVF9OT1RJRklDQVRJT04sXG4gIEhBTkRMRV9DUkVERU5USUFMU19TVE9SRURfTk9USUZJQ0FUSU9OLFxuICBIQU5ETEVfQ1JFREVOVElBTFNfREVMRVRFRF9OT1RJRklDQVRJT04sXG4gIEhBTkRMRV9ST1dfQ0hFQ0ssXG4gIEhBTkRMRV9IRUFERVJfQ0hFQ0ssXG4gIEhBTkRMRV9OT19NQVRDSF9ST1dfQ0hFQ0ssXG4gIEhBTkRMRV9BVExFQVNUX09ORV9NQVRDSF9ST1dfQ0hFQ0ssXG4gIEhBTkRMRV9UT0dHTEVfRVhQQU5ERUQsXG59XG5cbmludGVyZmFjZSBTdGF0ZSB7XG4gIGNyZWRlbnRpYWxzOiBTdG9yZWRDcmVkZW50aWFsW107XG4gIGV4cGFuZGVkQ3JlZGVudGlhbHM6IFN0b3JlZENyZWRlbnRpYWxbXTtcbiAgY2hlY2tlZENyZWRlbnRpYWxzOiBTdG9yZWRDcmVkZW50aWFsW107XG4gIGlzSGVhZGVyQ2hlY2tlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBBY3Rpb25zLkhBTkRMRV9SRUZSRVNIOiB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogU3RvcmVkQ3JlZGVudGlhbFtdID0gYWN0aW9uLnBheWxvYWQuY3JlZGVudGlhbHM7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBBY3Rpb25zLkhBTkRMRV9UQVJHRVRfTk9USUZJQ0FUSU9OOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHN0YXRlLmNyZWRlbnRpYWxzLm1hcCgoY3JlZGVudGlhbCkgPT4ge1xuICAgICAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGV2YWx1YXRlVGFyZ2V0V2l0aEV4cHIoYWN0aW9uLnBheWxvYWQudGFyZ2V0LCBjcmVkZW50aWFsLm1hdGNoRXhwcmVzc2lvbik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgIG1hdGNoZWQgPSByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGFjdGlvbi5wYXlsb2FkLmtpbmQgPT09ICdGT1VORCcgPyAxIDogLTE7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jcmVkZW50aWFsLFxuICAgICAgICAgICAgICBudW1NYXRjaGluZ1RhcmdldHM6IGNyZWRlbnRpYWwubnVtTWF0Y2hpbmdUYXJnZXRzICsgZGVsdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY3JlZGVudGlhbDtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEFjdGlvbnMuSEFORExFX0NSRURFTlRJQUxTX1NUT1JFRF9OT1RJRklDQVRJT046IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjcmVkZW50aWFsczogc3RhdGUuY3JlZGVudGlhbHMuY29uY2F0KGFjdGlvbi5wYXlsb2FkLmNyZWRlbnRpYWwpLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBBY3Rpb25zLkhBTkRMRV9DUkVERU5USUFMU19ERUxFVEVEX05PVElGSUNBVElPTjoge1xuICAgICAgY29uc3QgZGVsZXRlZENyZWRlbnRpYWw6IFN0b3JlZENyZWRlbnRpYWwgPSBhY3Rpb24ucGF5bG9hZC5jcmVkZW50aWFsO1xuICAgICAgbGV0IGRlbGV0ZWRJZHg7XG4gICAgICBmb3IgKGRlbGV0ZWRJZHggPSAwOyBkZWxldGVkSWR4IDwgc3RhdGUuY3JlZGVudGlhbHMubGVuZ3RoOyBkZWxldGVkSWR4KyspIHtcbiAgICAgICAgaWYgKF8uaXNFcXVhbChkZWxldGVkQ3JlZGVudGlhbCwgc3RhdGUuY3JlZGVudGlhbHNbZGVsZXRlZElkeF0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWRDaGVja2VkQ3JlZGVudGlhbHMgPSBzdGF0ZS5jaGVja2VkQ3JlZGVudGlhbHMuZmlsdGVyKChvKSA9PiAhXy5pc0VxdWFsKG8sIGRlbGV0ZWRDcmVkZW50aWFsKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjcmVkZW50aWFsczogc3RhdGUuY3JlZGVudGlhbHMuZmlsdGVyKChvKSA9PiAhXy5pc0VxdWFsKG8sIGRlbGV0ZWRDcmVkZW50aWFsKSksXG4gICAgICAgIGV4cGFuZGVkQ3JlZGVudGlhbHM6IHN0YXRlLmV4cGFuZGVkQ3JlZGVudGlhbHMuZmlsdGVyKChvKSA9PiAhXy5pc0VxdWFsKG8sIGRlbGV0ZWRDcmVkZW50aWFsKSksXG4gICAgICAgIGNoZWNrZWRDcmVkZW50aWFsczogdXBkYXRlZENoZWNrZWRDcmVkZW50aWFscyxcbiAgICAgICAgaXNIZWFkZXJDaGVja2VkOiB1cGRhdGVkQ2hlY2tlZENyZWRlbnRpYWxzLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogc3RhdGUuaXNIZWFkZXJDaGVja2VkLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBBY3Rpb25zLkhBTkRMRV9ST1dfQ0hFQ0s6IHtcbiAgICAgIGlmIChhY3Rpb24ucGF5bG9hZC5jaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRDcmVkZW50aWFscyA9IHN0YXRlLmNoZWNrZWRDcmVkZW50aWFscy5jb25jYXQoYWN0aW9uLnBheWxvYWQuY3JlZGVudGlhbCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgY2hlY2tlZENyZWRlbnRpYWxzLFxuICAgICAgICAgIGlzSGVhZGVyQ2hlY2tlZDogY2hlY2tlZENyZWRlbnRpYWxzLmxlbmd0aCA9PT0gc3RhdGUuY3JlZGVudGlhbHMubGVuZ3RoLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBjaGVja2VkQ3JlZGVudGlhbHM6IHN0YXRlLmNoZWNrZWRDcmVkZW50aWFscy5maWx0ZXIoKG8pID0+ICFfLmlzRXF1YWwobywgYWN0aW9uLnBheWxvYWQuY3JlZGVudGlhbCkpLFxuICAgICAgICAgIGlzSGVhZGVyQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgQWN0aW9ucy5IQU5ETEVfSEVBREVSX0NIRUNLOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY2hlY2tlZENyZWRlbnRpYWxzOiBhY3Rpb24ucGF5bG9hZC5jaGVja2VkID8gWy4uLnN0YXRlLmNyZWRlbnRpYWxzXSA6IFtdLFxuICAgICAgICBpc0hlYWRlckNoZWNrZWQ6IGFjdGlvbi5wYXlsb2FkLmNoZWNrZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEFjdGlvbnMuSEFORExFX0FUTEVBU1RfT05FX01BVENIX1JPV19DSEVDSzpcbiAgICBjYXNlIEFjdGlvbnMuSEFORExFX05PX01BVENIX1JPV19DSEVDSzoge1xuICAgICAgY29uc3Qgbm9NYXRjaCA9IGFjdGlvbi5wYXlsb2FkLm5vTWF0Y2g7XG4gICAgICBjb25zdCBjaGVja2VkQ3JlZGVudGlhbHMgPSBzdGF0ZS5jcmVkZW50aWFscy5maWx0ZXIoKHsgbnVtTWF0Y2hpbmdUYXJnZXRzIH0pID0+XG4gICAgICAgIG5vTWF0Y2ggPyBudW1NYXRjaGluZ1RhcmdldHMgPT09IDAgOiBudW1NYXRjaGluZ1RhcmdldHMgPiAwXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGNoZWNrZWRDcmVkZW50aWFscyxcbiAgICAgICAgaXNIZWFkZXJDaGVja2VkOiBjaGVja2VkQ3JlZGVudGlhbHMubGVuZ3RoID09PSBzdGF0ZS5jcmVkZW50aWFscy5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEFjdGlvbnMuSEFORExFX1RPR0dMRV9FWFBBTkRFRDoge1xuICAgICAgY29uc3QgY3JlZGVudGlhbDogU3RvcmVkQ3JlZGVudGlhbCA9IGFjdGlvbi5wYXlsb2FkLmNyZWRlbnRpYWw7XG4gICAgICBjb25zdCBpZHggPSBzdGF0ZS5leHBhbmRlZENyZWRlbnRpYWxzLmluZGV4T2YoY3JlZGVudGlhbCk7XG4gICAgICBjb25zdCB1cGRhdGVkID1cbiAgICAgICAgaWR4ID49IDBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgLi4uc3RhdGUuZXhwYW5kZWRDcmVkZW50aWFscy5zbGljZSgwLCBpZHgpLFxuICAgICAgICAgICAgICAuLi5zdGF0ZS5leHBhbmRlZENyZWRlbnRpYWxzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmV4cGFuZGVkQ3JlZGVudGlhbHMubGVuZ3RoKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFsuLi5zdGF0ZS5leHBhbmRlZENyZWRlbnRpYWxzLCBjcmVkZW50aWFsXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGV4cGFuZGVkQ3JlZGVudGlhbHM6IHVwZGF0ZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXG4gIHtcbiAgICB0aXRsZTogJ01hdGNoIEV4cHJlc3Npb24nLFxuICAgIGtleVBhdGhzOiBbJ21hdGNoRXhwcmVzc2lvbiddLFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdNYXRjaGVzJyxcbiAgICBrZXlQYXRoczogWydudW1NYXRjaGluZ1RhcmdldHMnXSxcbiAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgfSxcbl07XG5cbmNvbnN0IHRhYmxlVGl0bGUgPSAnU3RvcmVkIENyZWRlbnRpYWxzJztcblxuZXhwb3J0IGNvbnN0IFN0b3JlQ3JlZGVudGlhbHMgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSBSZWFjdC51c2VSZWR1Y2VyKHJlZHVjZXIsIHtcbiAgICBjcmVkZW50aWFsczogW10gYXMgU3RvcmVkQ3JlZGVudGlhbFtdLFxuICAgIGV4cGFuZGVkQ3JlZGVudGlhbHM6IFtdIGFzIFN0b3JlZENyZWRlbnRpYWxbXSxcbiAgICBjaGVja2VkQ3JlZGVudGlhbHM6IFtdIGFzIFN0b3JlZENyZWRlbnRpYWxbXSxcbiAgICBpc0hlYWRlckNoZWNrZWQ6IGZhbHNlLFxuICB9IGFzIFN0YXRlKTtcbiAgY29uc3QgW3NvcnRCeSwgZ2V0U29ydFBhcmFtc10gPSB1c2VTb3J0KCk7XG4gIGNvbnN0IFtzaG93QXV0aE1vZGFsLCBzZXRTaG93QXV0aE1vZGFsXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3dhcm5pbmdNb2RhbE9wZW4sIHNldFdhcm5pbmdNb2RhbE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG5cbiAgY29uc3QgcmVmcmVzaFN0b3JlZENyZWRlbnRpYWxzQW5kQ291bnRzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaS5nZXRDcmVkZW50aWFscygpLnN1YnNjcmliZSgoY3JlZGVudGlhbHM6IFN0b3JlZENyZWRlbnRpYWxbXSkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvbnMuSEFORExFX1JFRlJFU0gsIHBheWxvYWQ6IHsgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzIH0gfSk7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCBzZXRJc0xvYWRpbmddKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZnJlc2hTdG9yZWRDcmVkZW50aWFsc0FuZENvdW50cygpO1xuICB9LCBbcmVmcmVzaFN0b3JlZENyZWRlbnRpYWxzQW5kQ291bnRzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRleHQuc2V0dGluZ3MuYXV0b1JlZnJlc2hFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoXG4gICAgICAoKSA9PiByZWZyZXNoU3RvcmVkQ3JlZGVudGlhbHNBbmRDb3VudHMoKSxcbiAgICAgIGNvbnRleHQuc2V0dGluZ3MuYXV0b1JlZnJlc2hQZXJpb2QoKSAqIGNvbnRleHQuc2V0dGluZ3MuYXV0b1JlZnJlc2hVbml0cygpXG4gICAgKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaWQpO1xuICB9LCBbY29udGV4dC50YXJnZXQsIGNvbnRleHQuc2V0dGluZ3MsIHJlZnJlc2hTdG9yZWRDcmVkZW50aWFsc0FuZENvdW50c10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsLm1lc3NhZ2VzKE5vdGlmaWNhdGlvbkNhdGVnb3J5LkNyZWRlbnRpYWxzU3RvcmVkKS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25zLkhBTkRMRV9DUkVERU5USUFMU19TVE9SRURfTk9USUZJQ0FUSU9OLCBwYXlsb2FkOiB7IGNyZWRlbnRpYWw6IHYubWVzc2FnZSB9IH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWxdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbFxuICAgICAgICAubWVzc2FnZXMoTm90aWZpY2F0aW9uQ2F0ZWdvcnkuQ3JlZGVudGlhbHNEZWxldGVkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjb25jYXRNYXAoKHYpID0+XG4gICAgICAgICAgICBvZihkaXNwYXRjaCh7IHR5cGU6IEFjdGlvbnMuSEFORExFX0NSRURFTlRJQUxTX0RFTEVURURfTk9USUZJQ0FUSU9OLCBwYXlsb2FkOiB7IGNyZWRlbnRpYWw6IHYubWVzc2FnZSB9IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHVuZGVmaW5lZCAvKiBkbyBub3RoaW5nIC0gZGlzcGF0Y2ggd2lsbCBoYXZlIGFscmVhZHkgaGFuZGxlZCB1cGRhdGluZyBzdGF0ZSAqLylcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LCBjb250ZXh0Lm5vdGlmaWNhdGlvbkNoYW5uZWxdKTtcblxuICBjb25zdCBoYW5kbGVUYXJnZXROb3RpZmljYXRpb24gPSAoZXZ0OiBUYXJnZXREaXNjb3ZlcnlFdmVudCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9ucy5IQU5ETEVfVEFSR0VUX05PVElGSUNBVElPTiwgcGF5bG9hZDogeyB0YXJnZXQ6IGV2dC5zZXJ2aWNlUmVmLCBraW5kOiBldnQua2luZCB9IH0pO1xuICB9O1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsXG4gICAgICAgIC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRKdm1EaXNjb3ZlcnkpXG4gICAgICAgIC5waXBlKGNvbmNhdE1hcCgodikgPT4gb2YoaGFuZGxlVGFyZ2V0Tm90aWZpY2F0aW9uKHYubWVzc2FnZS5ldmVudCkpKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB1bmRlZmluZWQgLyogZG8gbm90aGluZyAtIGRpc3BhdGNoIHdpbGwgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdXBkYXRpbmcgc3RhdGUgKi8pXG4gICAgKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dCwgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsXSk7XG5cbiAgY29uc3QgaGFuZGxlSGVhZGVyQ2hlY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9ucy5IQU5ETEVfSEVBREVSX0NIRUNLLCBwYXlsb2FkOiB7IGNoZWNrZWQ6IGNoZWNrZWQgfSB9KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNyZWRlbnRpYWxzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRhc2tzOiBPYnNlcnZhYmxlPGJvb2xlYW4+W10gPSBbXTtcbiAgICBzdGF0ZS5jcmVkZW50aWFscy5mb3JFYWNoKChjcmVkZW50aWFsKSA9PiB7XG4gICAgICBpZiAoc3RhdGUuY2hlY2tlZENyZWRlbnRpYWxzLmluY2x1ZGVzKGNyZWRlbnRpYWwpKSB7XG4gICAgICAgIHRhc2tzLnB1c2goY29udGV4dC5hcGkuZGVsZXRlQ3JlZGVudGlhbHMoY3JlZGVudGlhbC5pZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGFkZFN1YnNjcmlwdGlvbihmb3JrSm9pbih0YXNrcykuc3Vic2NyaWJlKCkpO1xuICB9LCBbc3RhdGUuY3JlZGVudGlhbHMsIHN0YXRlLmNoZWNrZWRDcmVkZW50aWFscywgY29udGV4dC5hcGksIGFkZFN1YnNjcmlwdGlvbl0pO1xuXG4gIGNvbnN0IGhhbmRsZUF1dGhNb2RhbE9wZW4gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2hvd0F1dGhNb2RhbCh0cnVlKTtcbiAgfSwgW3NldFNob3dBdXRoTW9kYWxdKTtcblxuICBjb25zdCBoYW5kbGVBdXRoTW9kYWxDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93QXV0aE1vZGFsKGZhbHNlKTtcbiAgfSwgW3NldFNob3dBdXRoTW9kYWxdKTtcblxuICBjb25zdCBoYW5kbGVEZWxldGVCdXR0b24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGNvbnRleHQuc2V0dGluZ3MuZGVsZXRpb25EaWFsb2dzRW5hYmxlZEZvcihEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVDcmVkZW50aWFscykpIHtcbiAgICAgIHNldFdhcm5pbmdNb2RhbE9wZW4odHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZURlbGV0ZUNyZWRlbnRpYWxzKCk7XG4gICAgfVxuICB9LCBbY29udGV4dC5zZXR0aW5ncywgc2V0V2FybmluZ01vZGFsT3BlbiwgaGFuZGxlRGVsZXRlQ3JlZGVudGlhbHNdKTtcblxuICBjb25zdCBoYW5kbGVXYXJuaW5nTW9kYWxDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRXYXJuaW5nTW9kYWxPcGVuKGZhbHNlKTtcbiAgfSwgW3NldFdhcm5pbmdNb2RhbE9wZW5dKTtcblxuICBjb25zdCBUYXJnZXRDcmVkZW50aWFsc1Rvb2xiYXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgYXJyID0gW1xuICAgICAgICA8QnV0dG9uIGtleT1cImFkZFwiIHZhcmlhbnQ9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZC1jcmVkZW50aWFsXCIgb25DbGljaz17aGFuZGxlQXV0aE1vZGFsT3Blbn0+XG4gICAgICAgICAgQWRkXG4gICAgICAgIDwvQnV0dG9uPixcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGtleT1cImRlbGV0ZVwiXG4gICAgICAgICAgdmFyaWFudD1cImRhbmdlclwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cImRlbGV0ZS1zZWxlY3RlZC1jcmVkZW50aWFsXCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWxldGVCdXR0b259XG4gICAgICAgICAgaXNEaXNhYmxlZD17IXN0YXRlLmNoZWNrZWRDcmVkZW50aWFscy5sZW5ndGh9XG4gICAgICAgID5cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9CdXR0b24+LFxuICAgICAgXTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2Fyci5tYXAoKGJ0biwgaWR4KSA9PiAoXG4gICAgICAgICAgICA8VG9vbGJhckl0ZW0ga2V5PXtpZHh9PntidG59PC9Ub29sYmFySXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGRlbGV0ZUNyZWRlbnRpYWxNb2RhbCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERlbGV0ZVdhcm5pbmdNb2RhbFxuICAgICAgICAgIHdhcm5pbmdUeXBlPXtEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZS5EZWxldGVDcmVkZW50aWFsc31cbiAgICAgICAgICB2aXNpYmxlPXt3YXJuaW5nTW9kYWxPcGVufVxuICAgICAgICAgIG9uQWNjZXB0PXtoYW5kbGVEZWxldGVDcmVkZW50aWFsc31cbiAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVXYXJuaW5nTW9kYWxDbG9zZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxUb29sYmFyIGlkPVwidGFyZ2V0LWNyZWRlbnRpYWxzLXRvb2xiYXJcIj5cbiAgICAgICAgPFRvb2xiYXJDb250ZW50PntidXR0b25zfTwvVG9vbGJhckNvbnRlbnQ+XG4gICAgICAgIHtkZWxldGVDcmVkZW50aWFsTW9kYWx9XG4gICAgICA8L1Rvb2xiYXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBtYXRjaEV4cHJlc3Npb25Sb3dzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHNvcnRSZXNvdXJjZXMoc29ydEJ5LCBzdGF0ZS5jcmVkZW50aWFscywgdGFibGVDb2x1bW5zKS5tYXAoKGNyZWRlbnRpYWwsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZDogYm9vbGVhbiA9IHN0YXRlLmV4cGFuZGVkQ3JlZGVudGlhbHMuaW5jbHVkZXMoY3JlZGVudGlhbCk7XG4gICAgICBjb25zdCBpc0NoZWNrZWQ6IGJvb2xlYW4gPSBzdGF0ZS5jaGVja2VkQ3JlZGVudGlhbHMuaW5jbHVkZXMoY3JlZGVudGlhbCk7XG5cbiAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZUV4cGFuZGVkID0gKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvbnMuSEFORExFX1RPR0dMRV9FWFBBTkRFRCwgcGF5bG9hZDogeyBjcmVkZW50aWFsOiBjcmVkZW50aWFsIH0gfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBoYW5kbGVSb3dDaGVjayA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9ucy5IQU5ETEVfUk9XX0NIRUNLLCBwYXlsb2FkOiB7IGNoZWNrZWQ6IGNoZWNrZWQsIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWwgfSB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUciBrZXk9e2Ake2lkeH1fcGFyZW50YH0+XG4gICAgICAgICAgPFRkXG4gICAgICAgICAgICBrZXk9e2BjcmVkZW50aWFscy10YWJsZS1yb3ctJHtpZHh9XzBgfVxuICAgICAgICAgICAgaWQ9e2BjcmVkZW50aWFscy1leC10b2dnbGUtJHtpZHh9YH1cbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e2BjcmVkZW50aWFscy1leC1leHBhbmQtJHtpZHh9YH1cbiAgICAgICAgICAgIGV4cGFuZD17e1xuICAgICAgICAgICAgICByb3dJbmRleDogaWR4LFxuICAgICAgICAgICAgICBpc0V4cGFuZGVkOiBpc0V4cGFuZGVkLFxuICAgICAgICAgICAgICBvblRvZ2dsZTogaGFuZGxlVG9nZ2xlRXhwYW5kZWQsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFRkIGtleT17YGNyZWRlbnRpYWxzLXRhYmxlLXJvdy0ke2lkeH1fMWB9PlxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIG5hbWU9e2BjcmVkZW50aWFscy10YWJsZS1yb3ctJHtpZHh9LWNoZWNrYH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVJvd0NoZWNrfVxuICAgICAgICAgICAgICBpc0NoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgaWQ9e2BjcmVkZW50aWFscy10YWJsZS1yb3ctJHtpZHh9LWNoZWNrYH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YGNyZWRlbnRpYWxzLXRhYmxlLXJvdy0ke2lkeH0tY2hlY2tgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1RkPlxuICAgICAgICAgIDxUZCBrZXk9e2BjcmVkZW50aWFscy10YWJsZS1yb3ctJHtpZHh9XzJgfSBkYXRhTGFiZWw9e3RhYmxlQ29sdW1uc1swXS50aXRsZX0+XG4gICAgICAgICAgICB7Y3JlZGVudGlhbC5tYXRjaEV4cHJlc3Npb259XG4gICAgICAgICAgPC9UZD5cbiAgICAgICAgICA8VGQga2V5PXtgY3JlZGVudGlhbHMtdGFibGUtcm93LSR7aWR4fV8zYH0gZGF0YUxhYmVsPXt0YWJsZUNvbHVtbnNbMV0udGl0bGV9PlxuICAgICAgICAgICAgPEJhZGdlIGtleT17YCR7aWR4fV9jb3VudGB9PntjcmVkZW50aWFsLm51bU1hdGNoaW5nVGFyZ2V0c308L0JhZGdlPlxuICAgICAgICAgIDwvVGQ+XG4gICAgICAgIDwvVHI+XG4gICAgICApO1xuICAgIH0pO1xuICB9LCBbc3RhdGUuY3JlZGVudGlhbHMsIHN0YXRlLmV4cGFuZGVkQ3JlZGVudGlhbHMsIHN0YXRlLmNoZWNrZWRDcmVkZW50aWFscywgc29ydEJ5XSk7XG5cbiAgY29uc3QgdGFyZ2V0Um93cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzdGF0ZS5jcmVkZW50aWFscy5tYXAoKGNyZWRlbnRpYWwsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZDogYm9vbGVhbiA9IHN0YXRlLmV4cGFuZGVkQ3JlZGVudGlhbHMuaW5jbHVkZXMoY3JlZGVudGlhbCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUciBrZXk9e2Ake2lkeH1fY2hpbGRgfSBpc0V4cGFuZGVkPXtpc0V4cGFuZGVkfT5cbiAgICAgICAgICA8VGQga2V5PXtgY3JlZGVudGlhbHMtZXgtZXhwYW5kLSR7aWR4fWB9IGRhdGFMYWJlbD17J0NvbnRlbnQgRGV0YWlscyd9IGNvbFNwYW49e3RhYmxlQ29sdW1ucy5sZW5ndGggKyAyfT5cbiAgICAgICAgICAgIHtpc0V4cGFuZGVkID8gKFxuICAgICAgICAgICAgICA8RXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPE1hdGNoZWRUYXJnZXRzVGFibGUgaWQ9e2NyZWRlbnRpYWwuaWR9IG1hdGNoRXhwcmVzc2lvbj17Y3JlZGVudGlhbC5tYXRjaEV4cHJlc3Npb259IC8+XG4gICAgICAgICAgICAgIDwvRXhwYW5kYWJsZVJvd0NvbnRlbnQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1RkPlxuICAgICAgICA8L1RyPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfSwgW3N0YXRlLmNyZWRlbnRpYWxzLCBzdGF0ZS5leHBhbmRlZENyZWRlbnRpYWxzXSk7XG5cbiAgY29uc3Qgcm93UGFpcnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByb3dQYWlyczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hFeHByZXNzaW9uUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93UGFpcnMucHVzaChtYXRjaEV4cHJlc3Npb25Sb3dzW2ldKTtcbiAgICAgIHJvd1BhaXJzLnB1c2godGFyZ2V0Um93c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByb3dQYWlycztcbiAgfSwgW21hdGNoRXhwcmVzc2lvblJvd3MsIHRhcmdldFJvd3NdKTtcblxuICBjb25zdCBoYW5kbGVOb01hdGNoU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9ucy5IQU5ETEVfTk9fTUFUQ0hfUk9XX0NIRUNLLCBwYXlsb2FkOiB7IG5vTWF0Y2g6IHRydWUgfSB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG5cbiAgY29uc3QgaGFuZGxlQXRMZWF0T25lU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9ucy5IQU5ETEVfQVRMRUFTVF9PTkVfTUFUQ0hfUk9XX0NIRUNLLCBwYXlsb2FkOiB7IG5vTWF0Y2g6IGZhbHNlIH0gfSk7XG4gIH0sIFtdKTtcblxuICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQ7XG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPD5cbiAgICAgICAgPExvYWRpbmdWaWV3IC8+XG4gICAgICA8Lz5cbiAgICApO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNyZWRlbnRpYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRlbnQgPSAoXG4gICAgICA8PlxuICAgICAgICA8RW1wdHlTdGF0ZT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZUljb24gaWNvbj17U2VhcmNoSWNvbn0gLz5cbiAgICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPVwiaDRcIiBzaXplPVwibGdcIj5cbiAgICAgICAgICAgIE5vIHt0YWJsZVRpdGxlfVxuICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICAgIDwvPlxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9IChcbiAgICAgIDw+XG4gICAgICAgIDxUYWJsZUNvbXBvc2FibGUgYXJpYS1sYWJlbD17dGFibGVUaXRsZX0+XG4gICAgICAgICAgPFRoZWFkPlxuICAgICAgICAgICAgPFRyPlxuICAgICAgICAgICAgICA8VGgga2V5PVwidGFibGUtaGVhZGVyLWV4cGFuZFwiIC8+XG4gICAgICAgICAgICAgIDxUaCBrZXk9XCJ0YWJsZS1oZWFkZXItY2hlY2stYWxsXCI+XG4gICAgICAgICAgICAgICAgPENoZWNrQm94QWN0aW9uc1xuICAgICAgICAgICAgICAgICAgaXNTZWxlY3RBbGw9e3N0YXRlLmlzSGVhZGVyQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0QWxsPXtoYW5kbGVIZWFkZXJDaGVja31cbiAgICAgICAgICAgICAgICAgIG9uQXRMZWFzdE9uZU1hdGNoU2VsZWN0PXtoYW5kbGVBdExlYXRPbmVTZWxlY3R9XG4gICAgICAgICAgICAgICAgICBvbk5vTWF0Y2hTZWxlY3Q9e2hhbmRsZU5vTWF0Y2hTZWxlY3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAge3RhYmxlQ29sdW1ucy5tYXAoKHsgdGl0bGUgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8VGhcbiAgICAgICAgICAgICAgICAgIGtleT17YHRhYmxlLWhlYWRlci0ke3RpdGxlfWB9XG4gICAgICAgICAgICAgICAgICB3aWR0aD17dGl0bGUgPT09ICdNYXRjaCBFeHByZXNzaW9uJyA/IDgwIDogMTB9XG4gICAgICAgICAgICAgICAgICBzb3J0PXtnZXRTb3J0UGFyYW1zKGluZGV4KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgPC9UaD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1RyPlxuICAgICAgICAgIDwvVGhlYWQ+XG4gICAgICAgICAgPFRib2R5Pntyb3dQYWlyc308L1Rib2R5PlxuICAgICAgICA8L1RhYmxlQ29tcG9zYWJsZT5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGFyZ2V0Q3JlZGVudGlhbHNUb29sYmFyIC8+XG4gICAgICB7Y29udGVudH1cbiAgICAgIDxDcmVhdGVDcmVkZW50aWFsTW9kYWxcbiAgICAgICAgdmlzaWJsZT17c2hvd0F1dGhNb2RhbH1cbiAgICAgICAgb25EaXNtaXNzPXtoYW5kbGVBdXRoTW9kYWxDbG9zZX1cbiAgICAgICAgb25Qcm9wc1NhdmU9e2hhbmRsZUF1dGhNb2RhbENsb3NlfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBDaGVja0JveEFjdGlvbnNQcm9wcyB7XG4gIG9uTm9NYXRjaFNlbGVjdD86ICgpID0+IHZvaWQ7XG4gIG9uQXRMZWFzdE9uZU1hdGNoU2VsZWN0PzogKCkgPT4gdm9pZDtcbiAgb25TZWxlY3RBbGw/OiAoc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGlzU2VsZWN0QWxsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENoZWNrQm94QWN0aW9uczogUmVhY3QuRkM8Q2hlY2tCb3hBY3Rpb25zUHJvcHM+ID0gKHtcbiAgb25Ob01hdGNoU2VsZWN0LFxuICBvbkF0TGVhc3RPbmVNYXRjaFNlbGVjdCxcbiAgb25TZWxlY3RBbGwsXG4gIGlzU2VsZWN0QWxsLFxuICAuLi5wcm9wc1xufSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHNldElzT3Blbigob2xkKSA9PiAhb2xkKSwgW3NldElzT3Blbl0pO1xuXG4gIGNvbnN0IGRyb3Bkb3duSXRlbXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgPERyb3Bkb3duSXRlbSBrZXk9XCJhY3Rpb25cIiBvbkNsaWNrPXtvbk5vTWF0Y2hTZWxlY3R9PlxuICAgICAgICBObyBNYXRjaCBPbmx5XG4gICAgICA8L0Ryb3Bkb3duSXRlbT4sXG4gICAgICA8RHJvcGRvd25JdGVtIGtleT1cImFjdGlvblwiIG9uQ2xpY2s9e29uQXRMZWFzdE9uZU1hdGNoU2VsZWN0fT57YD49IDEgTWF0Y2ggT25seWB9PC9Ecm9wZG93bkl0ZW0+LFxuICAgIF07XG4gIH0sIFtvbk5vTWF0Y2hTZWxlY3QsIG9uQXRMZWFzdE9uZU1hdGNoU2VsZWN0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25cbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIG9uU2VsZWN0PXsoKSA9PiB7XG4gICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICB9fVxuICAgICAgdG9nZ2xlPXtcbiAgICAgICAgPERyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgc3BsaXRCdXR0b25JdGVtcz17W1xuICAgICAgICAgICAgPERyb3Bkb3duVG9nZ2xlQ2hlY2tib3hcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3QtYWxsLWNyZWRlbnRpYWxzXCJcbiAgICAgICAgICAgICAga2V5PVwic2VsZWN0LWFsbC1jcmVkZW50aWFsc1wiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgYWxsXCJcbiAgICAgICAgICAgICAgaXNDaGVja2VkPXtpc1NlbGVjdEFsbH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e29uU2VsZWN0QWxsfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBvblRvZ2dsZT17aGFuZGxlVG9nZ2xlfVxuICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC10b2dnbGVcIlxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBkcm9wZG93bkl0ZW1zPXtkcm9wZG93bkl0ZW1zfVxuICAgICAgbWVudUFwcGVuZFRvPXtkb2N1bWVudC5ib2R5fVxuICAgIC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgU3RvcmVDcmVkZW50aWFsc0NhcmQ6IFNlY3VyaXR5Q2FyZCA9IHtcbiAgdGl0bGU6ICdTdG9yZSBDcmVkZW50aWFscycsXG4gIGRlc2NyaXB0aW9uOiAoXG4gICAgPFRleHQ+XG4gICAgICBDcmVkZW50aWFscyB0aGF0IENyeW9zdGF0IHVzZXMgdG8gY29ubmVjdCB0byBDcnlvc3RhdCBhZ2VudHMgb3IgdGFyZ2V0IEpWTXMgb3ZlciBKTVggYXJlIHN0b3JlZCBoZXJlLiBUaGVzZSBhcmVcbiAgICAgIHN0b3JlZCBpbiBlbmNyeXB0ZWQgc3RvcmFnZSBtYW5hZ2VkIGJ5IHRoZSBDcnlvc3RhdCBiYWNrZW5kLiBUaGVzZSBjcmVkZW50aWFscyBtYXkgYmUgdXNlZCBmb3IgbWFudWFsbHkgbWFuYWdpbmdcbiAgICAgIHJlY29yZGluZ3MgYW5kIGV2ZW50IHRlbXBsYXRlcyBvbiB0YXJnZXQgSlZNcywgYXMgd2VsbCBhcyBmb3IgQXV0b21hdGVkIFJ1bGVzIHdoaWNoIHJ1biBpbiB0aGUgYmFja2dyb3VuZCBhbmQgb3BlblxuICAgICAgdW5hdHRlbmRlZCB0YXJnZXQgY29ubmVjdGlvbnMuIEFueSBsb2NhbGx5LXN0b3JlZCBjbGllbnQgY3JlZGVudGlhbHMgaGVsZCBieSB5b3VyIGJyb3dzZXIgc2Vzc2lvbiBhcmUgbm90XG4gICAgICBkaXNwbGF5ZWQgaGVyZS4gU2VlIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IHRvIGNvbmZpZ3VyZSBsb2NhbGx5LXN0b3JlZCBjcmVkZW50aWFscy5cbiAgICA8L1RleHQ+XG4gICksXG4gIGNvbnRlbnQ6IFN0b3JlQ3JlZGVudGlhbHMsXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBGVXBsb2FkLCBNdWx0aUZpbGVVcGxvYWQsIFVwbG9hZENhbGxiYWNrcyB9IGZyb20gJ0BhcHAvU2hhcmVkL0ZpbGVVcGxvYWRzJztcbmltcG9ydCB7IExvYWRpbmdQcm9wc1R5cGUgfSBmcm9tICdAYXBwL1NoYXJlZC9Qcm9ncmVzc0luZGljYXRvcic7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXAsIEJ1dHRvbiwgRm9ybSwgRm9ybUdyb3VwLCBNb2RhbCwgTW9kYWxWYXJpYW50IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlZmF1bHRJZkVtcHR5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVVcGxvYWRNb2RhbFByb3BzIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENlcnRpZmljYXRlVXBsb2FkTW9kYWw6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PENlcnRpZmljYXRlVXBsb2FkTW9kYWxQcm9wcz4gPSAoeyB2aXNpYmxlLCBvbkNsb3NlIH0pID0+IHtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9ucyA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBzdWJtaXRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpOyAvLyBVc2UgcmVmIHRvIHJlZmVyIHRvIHN1Ym1pdCB0cmlnZ2VyIGRpdlxuICBjb25zdCBhYm9ydFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7IC8vIFVzZSByZWYgdG8gcmVmZXIgdG8gYWJvcnQgdHJpZ2dlciBkaXZcblxuICBjb25zdCBbYWxsT2tzLCBzZXRBbGxPa3NdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdXBsb2FkaW5nLCBzZXRVcGxvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbnVtT2ZGaWxlcywgc2V0TnVtT2ZGaWxlc10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcblxuICBjb25zdCByZXNldCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRVcGxvYWRpbmcoZmFsc2UpO1xuICAgIHNldE51bU9mRmlsZXMoMCk7XG4gIH0sIFtzZXRVcGxvYWRpbmcsIHNldE51bU9mRmlsZXNdKTtcblxuICBjb25zdCBvbkZpbGVzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVVcGxvYWRzOiBGVXBsb2FkW10pID0+IHtcbiAgICAgIHNldEFsbE9rcyghZmlsZVVwbG9hZHMuc29tZSgoZikgPT4gIWYucHJvZ3Jlc3MgfHwgZi5wcm9ncmVzcy5wcm9ncmVzc1ZhcmlhbnQgIT09ICdzdWNjZXNzJykpO1xuICAgICAgc2V0TnVtT2ZGaWxlcyhmaWxlVXBsb2Fkcy5sZW5ndGgpO1xuICAgIH0sXG4gICAgW3NldE51bU9mRmlsZXMsIHNldEFsbE9rc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodXBsb2FkaW5nKSB7XG4gICAgICBhYm9ydFJlZi5jdXJyZW50ICYmIGFib3J0UmVmLmN1cnJlbnQuY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXQoKTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFt1cGxvYWRpbmcsIHJlc2V0LCBvbkNsb3NlXSk7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN1Ym1pdFJlZi5jdXJyZW50ICYmIHN1Ym1pdFJlZi5jdXJyZW50LmNsaWNrKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkZpbGVTdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmlsZVVwbG9hZHM6IEZVcGxvYWRbXSwgeyBnZXRQcm9ncmVzc1VwZGF0ZUNhbGxiYWNrLCBvblNpbmdsZVN1Y2Nlc3MsIG9uU2luZ2xlRmFpbHVyZSB9OiBVcGxvYWRDYWxsYmFja3MpID0+IHtcbiAgICAgIHNldFVwbG9hZGluZyh0cnVlKTtcblxuICAgICAgY29uc3QgdGFza3M6IE9ic2VydmFibGU8Ym9vbGVhbj5bXSA9IFtdO1xuICAgICAgZmlsZVVwbG9hZHMuZm9yRWFjaCgoZmlsZVVwbG9hZCkgPT4ge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgIGNvbnRleHQuYXBpXG4gICAgICAgICAgICAudXBsb2FkU1NMQ2VydGlmaWNhdGUoXG4gICAgICAgICAgICAgIGZpbGVVcGxvYWQuZmlsZSxcbiAgICAgICAgICAgICAgZ2V0UHJvZ3Jlc3NVcGRhdGVDYWxsYmFjayhmaWxlVXBsb2FkLmZpbGUubmFtZSksXG4gICAgICAgICAgICAgIGZpbGVVcGxvYWQuYWJvcnRTaWduYWxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9uU2luZ2xlU3VjY2VzcyhmaWxlVXBsb2FkLmZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgb25TaW5nbGVGYWlsdXJlKGZpbGVVcGxvYWQuZmlsZS5uYW1lLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChfKSA9PiBvZihmYWxzZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgYWRkU3Vic2NyaXB0aW9ucyhcbiAgICAgICAgZm9ya0pvaW4odGFza3MpXG4gICAgICAgICAgLnBpcGUoZGVmYXVsdElmRW1wdHkoW3RydWVdKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChva3MpID0+IHtcbiAgICAgICAgICAgIHNldFVwbG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRBbGxPa3Mob2tzLnJlZHVjZSgocHJldiwgY3VyciwgXykgPT4gcHJldiAmJiBjdXJyLCB0cnVlKSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbc2V0VXBsb2FkaW5nLCBjb250ZXh0LmFwaSwgYWRkU3Vic2NyaXB0aW9ucywgc2V0QWxsT2tzXVxuICApO1xuXG4gIGNvbnN0IHN1Ym1pdEJ1dHRvbkxvYWRpbmdQcm9wcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIHNwaW5uZXJBcmlhVmFsdWVUZXh0OiAnU3VibWl0dGluZycsXG4gICAgICAgIHNwaW5uZXJBcmlhTGFiZWw6ICdzdWJtaXR0aW5nLXNzbC1jZXJ0aWZpY2F0ZXMnLFxuICAgICAgICBpc0xvYWRpbmc6IHVwbG9hZGluZyxcbiAgICAgIH0gYXMgTG9hZGluZ1Byb3BzVHlwZSksXG4gICAgW3VwbG9hZGluZ11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICBpc09wZW49e3Zpc2libGV9XG4gICAgICB2YXJpYW50PXtNb2RhbFZhcmlhbnQubGFyZ2V9XG4gICAgICBzaG93Q2xvc2U9e3RydWV9XG4gICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgIHRpdGxlPVwiVXBsb2FkIFNTTCBjZXJ0aWZpY2F0ZVwiXG4gICAgICBkZXNjcmlwdGlvbj1cIlNlbGVjdCBhIGNlcnRpZmljYXRlIGZpbGUgdG8gdXBsb2FkLiBDZXJ0aWZpY2F0ZXMgbXVzdCBiZSBERVItZW5jb2RlZCAoY2FuIGJlIGJpbmFyeSBvciBiYXNlNjQpIGFuZCBjYW4gaGF2ZSAuZGVyIG9yIC5jZXIgZXh0ZW5zaW9ucy5cIlxuICAgID5cbiAgICAgIDxGb3JtPlxuICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPVwiQ2VydGlmaWNhdGUgRmlsZVwiIGlzUmVxdWlyZWQgZmllbGRJZD1cImZpbGVcIj5cbiAgICAgICAgICA8TXVsdGlGaWxlVXBsb2FkXG4gICAgICAgICAgICBzdWJtaXRSZWY9e3N1Ym1pdFJlZn1cbiAgICAgICAgICAgIGFib3J0UmVmPXthYm9ydFJlZn1cbiAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nfVxuICAgICAgICAgICAgZHJvcFpvbmVBY2NlcHRzPXtbJ2FwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0JywgJ2FwcGxpY2F0aW9uL3BraXgtY2VydCddfVxuICAgICAgICAgICAgZGlzcGxheUFjY2VwdHM9e1snQ0VSJywgJ0RFUiddfVxuICAgICAgICAgICAgb25GaWxlU3VibWl0PXtvbkZpbGVTdWJtaXR9XG4gICAgICAgICAgICBvbkZpbGVzQ2hhbmdlPXtvbkZpbGVzQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8QWN0aW9uR3JvdXA+XG4gICAgICAgICAge2FsbE9rcyAmJiBudW1PZkZpbGVzID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwicHJpbWFyeVwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT5cbiAgICAgICAgICAgICAgQ2xvc2VcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXshbnVtT2ZGaWxlcyB8fCB1cGxvYWRpbmd9XG4gICAgICAgICAgICAgICAgey4uLnN1Ym1pdEJ1dHRvbkxvYWRpbmdQcm9wc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt1cGxvYWRpbmcgPyAnU3VibWl0dGluZycgOiAnU3VibWl0J31cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImxpbmtcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9BY3Rpb25Hcm91cD5cbiAgICAgIDwvRm9ybT5cbiAgICA8L01vZGFsPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENlcnRpZmljYXRlVXBsb2FkTW9kYWwgfSBmcm9tICcuL0NlcnRpZmljYXRlVXBsb2FkTW9kYWwnO1xuaW1wb3J0IHsgU2VjdXJpdHlDYXJkIH0gZnJvbSAnLi9TZWN1cml0eVBhbmVsJztcblxuY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICBjb25zdCBbc2hvd01vZGFsLCBzZXRTaG93TW9kYWxdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU1vZGFsQ2xvc2UgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01vZGFsKGZhbHNlKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImltcG9ydFwiIG9uQ2xpY2s9eygpID0+IHNldFNob3dNb2RhbCh0cnVlKX0+XG4gICAgICAgIFVwbG9hZFxuICAgICAgPC9CdXR0b24+XG4gICAgICA8Q2VydGlmaWNhdGVVcGxvYWRNb2RhbCB2aXNpYmxlPXtzaG93TW9kYWx9IG9uQ2xvc2U9e2hhbmRsZU1vZGFsQ2xvc2V9IC8+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgSW1wb3J0Q2VydGlmaWNhdGU6IFNlY3VyaXR5Q2FyZCA9IHtcbiAgdGl0bGU6ICdJbXBvcnQgU1NMIENlcnRpZmljYXRlcycsXG4gIGRlc2NyaXB0aW9uOiAnUmVzdGFydCBpcyBuZWVkZWQgdG8gYXBwbHkgY2hhbmdlcy4nLFxuICBjb250ZW50OiBDb21wb25lbnQsXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBCcmVhZGNydW1iUGFnZSB9IGZyb20gJ0BhcHAvQnJlYWRjcnVtYlBhZ2UvQnJlYWRjcnVtYlBhZ2UnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZEJvZHksIENhcmRUaXRsZSwgVGV4dCwgVGV4dFZhcmlhbnRzIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdG9yZUNyZWRlbnRpYWxzQ2FyZCB9IGZyb20gJy4vQ3JlZGVudGlhbHMvU3RvcmVDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBJbXBvcnRDZXJ0aWZpY2F0ZSB9IGZyb20gJy4vSW1wb3J0Q2VydGlmaWNhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5UGFuZWxQcm9wcyB7fVxuXG5leHBvcnQgY29uc3QgU2VjdXJpdHlQYW5lbDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8U2VjdXJpdHlQYW5lbFByb3BzPiA9IChfKSA9PiB7XG4gIGNvbnN0IHNlY3VyaXR5Q2FyZHMgPSBbSW1wb3J0Q2VydGlmaWNhdGUsIFN0b3JlQ3JlZGVudGlhbHNDYXJkXS5tYXAoKGMpID0+ICh7XG4gICAgdGl0bGU6IGMudGl0bGUsXG4gICAgZGVzY3JpcHRpb246IGMuZGVzY3JpcHRpb24sXG4gICAgZWxlbWVudDogUmVhY3QuY3JlYXRlRWxlbWVudChjLmNvbnRlbnQsIG51bGwpLFxuICB9KSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnJlYWRjcnVtYlBhZ2UgcGFnZVRpdGxlPVwiU2VjdXJpdHlcIj5cbiAgICAgIHtzZWN1cml0eUNhcmRzLm1hcCgocykgPT4gKFxuICAgICAgICA8Q2FyZCBrZXk9e3MudGl0bGV9PlxuICAgICAgICAgIDxDYXJkVGl0bGU+XG4gICAgICAgICAgICA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5oMX0+e3MudGl0bGV9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29tcG9uZW50PXtUZXh0VmFyaWFudHMuc21hbGx9PntzLmRlc2NyaXB0aW9ufTwvVGV4dD5cbiAgICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgICA8Q2FyZEJvZHk+e3MuZWxlbWVudH08L0NhcmRCb2R5PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICApKX1cbiAgICA8L0JyZWFkY3J1bWJQYWdlPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VjdXJpdHlQYW5lbDtcblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUNhcmQge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIGNvbnRlbnQ6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50O1xufVxuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Mb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgY29uc3QgdXNlTG9naW4gPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2xvZ2dlZEluLCBzZXRMb2dnZWRJbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdWIgPSBjb250ZXh0LmxvZ2luXG4gICAgICAuZ2V0U2Vzc2lvblN0YXRlKClcbiAgICAgIC5zdWJzY3JpYmUoKHNlc3Npb25TdGF0ZSkgPT4gc2V0TG9nZ2VkSW4oc2Vzc2lvblN0YXRlID09PSBTZXNzaW9uU3RhdGUuVVNFUl9TRVNTSU9OKSk7XG5cbiAgICByZXR1cm4gKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH0sIFtjb250ZXh0LmxvZ2luLCBzZXRMb2dnZWRJbl0pO1xuXG4gIHJldHVybiBsb2dnZWRJbjtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtIH0gZnJvbSAnQGFwcC9EYXNoYm9hcmQvQXV0b21hdGVkQW5hbHlzaXMvQXV0b21hdGVkQW5hbHlzaXNDb25maWdGb3JtJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNldHRpbmdUYWIsIFVzZXJTZXR0aW5nIH0gZnJvbSAnLi9TZXR0aW5nc1V0aWxzJztcblxuY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICByZXR1cm4gPEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnRm9ybSBpbmxpbmVGb3JtIC8+O1xufTtcblxuZXhwb3J0IGNvbnN0IEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnOiBVc2VyU2V0dGluZyA9IHtcbiAgdGl0bGVLZXk6ICdTRVRUSU5HUy5BVVRPTUFURURfQU5BTFlTSVNfQ09ORklHLlRJVExFJyxcbiAgZGVzY0NvbnN0cnVjdDogJ1NFVFRJTkdTLkFVVE9NQVRFRF9BTkFMWVNJU19DT05GSUcuREVTQ1JJUFRJT04nLFxuICBjb250ZW50OiBDb21wb25lbnQsXG4gIGNhdGVnb3J5OiBTZXR0aW5nVGFiLkRBU0hCT0FSRCxcbiAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgRHVyYXRpb25QaWNrZXIgfSBmcm9tICdAYXBwL0R1cmF0aW9uUGlja2VyL0R1cmF0aW9uUGlja2VyJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBTZXR0aW5nVGFiLCBVc2VyU2V0dGluZyB9IGZyb20gJy4vU2V0dGluZ3NVdGlscyc7XG5cbmNvbnN0IGRlZmF1bHRQcmVmZXJlbmNlcyA9IHtcbiAgYXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICBhdXRvUmVmcmVzaFBlcmlvZDogMzAsXG4gIGF1dG9SZWZyZXNoVW5pdHM6IDFfMDAwLFxufTtcblxuY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZGVmYXVsdFByZWZlcmVuY2VzKTtcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHNldFN0YXRlKHtcbiAgICAgIGF1dG9SZWZyZXNoRW5hYmxlZDogY29udGV4dC5zZXR0aW5ncy5hdXRvUmVmcmVzaEVuYWJsZWQoKSxcbiAgICAgIGF1dG9SZWZyZXNoUGVyaW9kOiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCksXG4gICAgICBhdXRvUmVmcmVzaFVuaXRzOiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKSxcbiAgICB9KTtcbiAgfSwgW3NldFN0YXRlLCBjb250ZXh0LnNldHRpbmdzXSk7XG5cbiAgY29uc3QgaGFuZGxlQXV0b1JlZnJlc2hFbmFibGVkQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGF1dG9SZWZyZXNoRW5hYmxlZCkgPT4ge1xuICAgICAgc2V0U3RhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgYXV0b1JlZnJlc2hFbmFibGVkIH0pKTtcbiAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0QXV0b1JlZnJlc2hFbmFibGVkKGF1dG9SZWZyZXNoRW5hYmxlZCk7XG4gICAgfSxcbiAgICBbc2V0U3RhdGUsIGNvbnRleHQuc2V0dGluZ3NdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQXV0b1JlZnJlc2hQZXJpb2RDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYXV0b1JlZnJlc2hQZXJpb2QpID0+IHtcbiAgICAgIHNldFN0YXRlKChzdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGF1dG9SZWZyZXNoUGVyaW9kIH0pKTtcbiAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0QXV0b1JlZnJlc2hQZXJpb2QoYXV0b1JlZnJlc2hQZXJpb2QpO1xuICAgIH0sXG4gICAgW3NldFN0YXRlLCBjb250ZXh0LnNldHRpbmdzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUF1dG9SZWZyZXNoVW5pdFNjYWxhckNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChhdXRvUmVmcmVzaFVuaXRzKSA9PiB7XG4gICAgICBzZXRTdGF0ZSgoc3RhdGUpID0+ICh7IC4uLnN0YXRlLCBhdXRvUmVmcmVzaFVuaXRzIH0pKTtcbiAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0QXV0b1JlZnJlc2hVbml0cyhhdXRvUmVmcmVzaFVuaXRzKTtcbiAgICB9LFxuICAgIFtzZXRTdGF0ZSwgY29udGV4dC5zZXR0aW5nc11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHVyYXRpb25QaWNrZXJcbiAgICAgICAgZW5hYmxlZD17c3RhdGUuYXV0b1JlZnJlc2hFbmFibGVkfVxuICAgICAgICBwZXJpb2Q9e3N0YXRlLmF1dG9SZWZyZXNoUGVyaW9kfVxuICAgICAgICBvblBlcmlvZENoYW5nZT17aGFuZGxlQXV0b1JlZnJlc2hQZXJpb2RDaGFuZ2V9XG4gICAgICAgIHVuaXRTY2FsYXI9e3N0YXRlLmF1dG9SZWZyZXNoVW5pdHN9XG4gICAgICAgIG9uVW5pdFNjYWxhckNoYW5nZT17aGFuZGxlQXV0b1JlZnJlc2hVbml0U2NhbGFyQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxDaGVja2JveFxuICAgICAgICBpZD1cImF1dG8tcmVmcmVzaC1lbmFibGVkXCJcbiAgICAgICAgbGFiZWw9e3QoJ1NFVFRJTkdTLkFVVE9fUkVGUkVTSC5DSEVDS0JPWF9MQUJFTCcpfVxuICAgICAgICBpc0NoZWNrZWQ9e3N0YXRlLmF1dG9SZWZyZXNoRW5hYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUF1dG9SZWZyZXNoRW5hYmxlZENoYW5nZX1cbiAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwic2V0dGluZ3MtY29ubmVjdGl2aXR5LXRhYi1hdXRvLXJlZnJlc2hcIlxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBBdXRvUmVmcmVzaDogVXNlclNldHRpbmcgPSB7XG4gIHRpdGxlS2V5OiAnU0VUVElOR1MuQVVUT19SRUZSRVNILlRJVExFJyxcbiAgZGVzY0NvbnN0cnVjdDogJ1NFVFRJTkdTLkFVVE9fUkVGUkVTSC5ERVNDUklQVElPTicsXG4gIGNvbnRlbnQ6IENvbXBvbmVudCxcbiAgY2F0ZWdvcnk6IFNldHRpbmdUYWIuQ09OTkVDVElWSVRZLFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgSGVscGVyVGV4dCwgSGVscGVyVGV4dEl0ZW0sIE51bWJlcklucHV0LCBTdGFjaywgU3RhY2tJdGVtIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgU2V0dGluZ1RhYiwgVXNlclNldHRpbmcgfSBmcm9tICcuL1NldHRpbmdzVXRpbHMnO1xuXG5jb25zdCBtaW4gPSAxO1xuXG5jb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcblxuICBjb25zdCBbbWluUmVmcmVzaCwgc2V0TWluUmVmcmVzaF0gPSBSZWFjdC51c2VTdGF0ZShjb250ZXh0LnNldHRpbmdzLmNoYXJ0Q29udHJvbGxlckNvbmZpZygpLm1pblJlZnJlc2gpO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIHNldE1pblJlZnJlc2goKHByZXYpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gaXNOYU4oZXZ0LnRhcmdldC52YWx1ZSkgPyBwcmV2IDogTnVtYmVyKGV2dC50YXJnZXQudmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUgPCBtaW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IG1pbjtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LnNldHRpbmdzLnNldENoYXJ0Q29udHJvbGxlckNvbmZpZyh7IG1pblJlZnJlc2g6IHZhbHVlIH0pO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRNaW5SZWZyZXNoLCBjb250ZXh0LnNldHRpbmdzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVZpc2libGVTdGVwID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGRlbHRhOiBudW1iZXIpID0+ICgpID0+IHtcbiAgICAgIGNvbnN0IHYgPSBtaW5SZWZyZXNoICsgZGVsdGE7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldENoYXJ0Q29udHJvbGxlckNvbmZpZyh7IG1pblJlZnJlc2g6IHYgfSk7XG4gICAgICBzZXRNaW5SZWZyZXNoKHYpO1xuICAgIH0sXG4gICAgW21pblJlZnJlc2gsIGNvbnRleHQuc2V0dGluZ3NdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgPEZvcm1Hcm91cD5cbiAgICAgICAgICA8SGVscGVyVGV4dD5cbiAgICAgICAgICAgIDxIZWxwZXJUZXh0SXRlbT57dCgnU0VUVElOR1MuQ0hBUlRTX0NPTkZJRy5SRUZSRVNIX1JBVEVfU0VUVElORycpfTwvSGVscGVyVGV4dEl0ZW0+XG4gICAgICAgICAgPC9IZWxwZXJUZXh0PlxuICAgICAgICAgIDxOdW1iZXJJbnB1dFxuICAgICAgICAgICAgaW5wdXROYW1lPVwibWluUmVmcmVzaFwiXG4gICAgICAgICAgICB2YWx1ZT17bWluUmVmcmVzaH1cbiAgICAgICAgICAgIG1pbj17bWlufVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uTWludXM9e2hhbmRsZVZpc2libGVTdGVwKC0xKX1cbiAgICAgICAgICAgIG9uUGx1cz17aGFuZGxlVmlzaWJsZVN0ZXAoMSl9XG4gICAgICAgICAgICB1bml0PXt0KCdTRUNPTkQnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIDwvU3RhY2tJdGVtPlxuICAgIDwvU3RhY2s+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQ2hhcnRDYXJkc0NvbmZpZzogVXNlclNldHRpbmcgPSB7XG4gIHRpdGxlS2V5OiAnU0VUVElOR1MuQ0hBUlRTX0NPTkZJRy5USVRMRScsXG4gIGRlc2NDb25zdHJ1Y3Q6ICdTRVRUSU5HUy5DSEFSVFNfQ09ORklHLkRFU0NSSVBUSU9OJyxcbiAgY29udGVudDogQ29tcG9uZW50LFxuICBjYXRlZ29yeTogU2V0dGluZ1RhYi5EQVNIQk9BUkQsXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBUaW1lem9uZVBpY2tlciB9IGZyb20gJ0BhcHAvRGF0ZVRpbWVQaWNrZXIvVGltZXpvbmVQaWNrZXInO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgdXNlRGF5anMgZnJvbSAnQGFwcC91dGlscy91c2VEYXlqcyc7XG5pbXBvcnQgeyBsb2NhbGVzLCBUaW1lem9uZSB9IGZyb20gJ0BpMThuL2RhdGV0aW1lJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgSGVscGVyVGV4dCwgSGVscGVyVGV4dEl0ZW0sIFNlbGVjdCwgU2VsZWN0T3B0aW9uLCBTdGFjaywgU3RhY2tJdGVtIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgU2V0dGluZ1RhYiwgVXNlclNldHRpbmcgfSBmcm9tICcuL1NldHRpbmdzVXRpbHMnO1xuXG5jb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2RhdGVMb2NhbGVPcGVuLCBzZXREYXRlTG9jYWxlT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtfLCBkYXRldGltZUZvcm1hdF0gPSB1c2VEYXlqcygpO1xuXG4gIGNvbnN0IGhhbmRsZURhdGVMb2NhbGVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgbG9jYWxlKSA9PiB7XG4gICAgICBzZXREYXRlTG9jYWxlT3BlbihmYWxzZSk7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldERhdGV0aW1lRm9ybWF0KHtcbiAgICAgICAgLi4uZGF0ZXRpbWVGb3JtYXQsXG4gICAgICAgIGRhdGVMb2NhbGU6IHtcbiAgICAgICAgICBuYW1lOiBsb2NhbGUubmFtZSxcbiAgICAgICAgICBrZXk6IGxvY2FsZS5rZXksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtjb250ZXh0LnNldHRpbmdzLCBkYXRldGltZUZvcm1hdCwgc2V0RGF0ZUxvY2FsZU9wZW5dXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGltZXpvbmVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodGltZXpvbmU6IFRpbWV6b25lKSA9PiB7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldERhdGV0aW1lRm9ybWF0KHtcbiAgICAgICAgLi4uZGF0ZXRpbWVGb3JtYXQsXG4gICAgICAgIHRpbWVab25lOiB7XG4gICAgICAgICAgc2hvcnQ6IHRpbWV6b25lLnNob3J0LFxuICAgICAgICAgIGZ1bGw6IHRpbWV6b25lLmZ1bGwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtjb250ZXh0LnNldHRpbmdzLCBkYXRldGltZUZvcm1hdF1cbiAgKTtcblxuICBjb25zdCBkYXRlTG9jYWxlT3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGxvY2FsZXMubWFwKChsb2NhbGUpID0+IChcbiAgICAgICAgPFNlbGVjdE9wdGlvblxuICAgICAgICAgIGtleT17bG9jYWxlLmtleX1cbiAgICAgICAgICBkZXNjcmlwdGlvbj17bG9jYWxlLmtleX1cbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgLi4ubG9jYWxlLFxuICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IGxvY2FsZS5uYW1lLFxuICAgICAgICAgICAgY29tcGFyZVRvOiAodmFsKSA9PiBsb2NhbGUubmFtZSA9PT0gdmFsLm5hbWUsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtsb2NhbGUubmFtZX1cbiAgICAgICAgPC9TZWxlY3RPcHRpb24+XG4gICAgICApKSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZURhdGVMb2NhbGVGaWx0ZXIgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZUxvY2FsZU9wdGlvbnM7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaEV4cCA9IG5ldyBSZWdFeHAodmFsdWUsICdpJyk7XG4gICAgICByZXR1cm4gZGF0ZUxvY2FsZU9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAob3B0KSA9PiBtYXRjaEV4cC50ZXN0KG9wdC5wcm9wcy52YWx1ZS5uYW1lKSB8fCBtYXRjaEV4cC50ZXN0KG9wdC5wcm9wcy5kZXNjcmlwdGlvbilcbiAgICAgICk7XG4gICAgfSxcbiAgICBbZGF0ZUxvY2FsZU9wdGlvbnNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgPFN0YWNrSXRlbSBrZXk9eydkYXRlLWxvY2FsZS1zZWxlY3QnfT5cbiAgICAgICAgPEZvcm1Hcm91cD5cbiAgICAgICAgICA8SGVscGVyVGV4dD5cbiAgICAgICAgICAgIDxIZWxwZXJUZXh0SXRlbT57dCgnU0VUVElOR1MuREFURVRJTUVfQ09OVFJPTC5MT0NBTEVfU0VMRUNUX0RFU0NSSVBUSU9OJyl9PC9IZWxwZXJUZXh0SXRlbT5cbiAgICAgICAgICA8L0hlbHBlclRleHQ+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnU0VUVElOR1MuREFURVRJTUVfQ09OVFJPTC5BUklBX0xBQkVMUy5MT0NBTEVfU0VMRUNUJykgfHwgJyd9XG4gICAgICAgICAgICBpc09wZW49e2RhdGVMb2NhbGVPcGVufVxuICAgICAgICAgICAgb25Ub2dnbGU9e3NldERhdGVMb2NhbGVPcGVufVxuICAgICAgICAgICAgaXNGbGlwRW5hYmxlZFxuICAgICAgICAgICAgbWVudUFwcGVuZFRvPVwicGFyZW50XCJcbiAgICAgICAgICAgIHNlbGVjdGlvbnM9e3tcbiAgICAgICAgICAgICAgLi4uZGF0ZXRpbWVGb3JtYXQuZGF0ZUxvY2FsZSxcbiAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IGRhdGV0aW1lRm9ybWF0LmRhdGVMb2NhbGUubmFtZSxcbiAgICAgICAgICAgICAgY29tcGFyZVRvOiAodmFsKSA9PiBkYXRldGltZUZvcm1hdC5kYXRlTG9jYWxlLm5hbWUgPT09IHZhbC5uYW1lLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGhhc0lubGluZUZpbHRlclxuICAgICAgICAgICAgbWF4SGVpZ2h0PXsnMTZlbSd9XG4gICAgICAgICAgICBvbkZpbHRlcj17aGFuZGxlRGF0ZUxvY2FsZUZpbHRlcn1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVEYXRlTG9jYWxlU2VsZWN0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtkYXRlTG9jYWxlT3B0aW9uc31cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIDxTdGFja0l0ZW0ga2V5PXsndGltZXpvbmUtc2VsZWN0J30+XG4gICAgICAgIDxGb3JtR3JvdXA+XG4gICAgICAgICAgPEhlbHBlclRleHQ+XG4gICAgICAgICAgICA8SGVscGVyVGV4dEl0ZW0+e3QoJ1NFVFRJTkdTLkRBVEVUSU1FX0NPTlRST0wuVElNRVpPTkVfU0VMRUNUX0RFU0NSSVBUSU9OJyl9PC9IZWxwZXJUZXh0SXRlbT5cbiAgICAgICAgICA8L0hlbHBlclRleHQ+XG4gICAgICAgICAgPFRpbWV6b25lUGlja2VyXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZXRpbWVGb3JtYXQudGltZVpvbmV9XG4gICAgICAgICAgICBtZW51QXBwZW5kVG89XCJwYXJlbnRcIlxuICAgICAgICAgICAgaXNGbGlwRW5hYmxlZFxuICAgICAgICAgICAgb25UaW1lem9uZUNoYW5nZT17aGFuZGxlVGltZXpvbmVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IERhdGV0aW1lQ29udHJvbDogVXNlclNldHRpbmcgPSB7XG4gIHRpdGxlS2V5OiAnU0VUVElOR1MuREFURVRJTUVfQ09OVFJPTC5USVRMRScsXG4gIGRlc2NDb25zdHJ1Y3Q6ICdTRVRUSU5HUy5EQVRFVElNRV9DT05UUk9MLkRFU0NSSVBUSU9OJyxcbiAgY29udGVudDogQ29tcG9uZW50LFxuICBjYXRlZ29yeTogU2V0dGluZ1RhYi5HRU5FUkFMLFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBEZWxldGVPckRpc2FibGVXYXJuaW5nVHlwZSwgZ2V0RnJvbVdhcm5pbmdNYXAgfSBmcm9tICdAYXBwL01vZGFsL0RlbGV0ZVdhcm5pbmdVdGlscyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7XG4gIEV4cGFuZGFibGVTZWN0aW9uLFxuICBGb3JtR3JvdXAsXG4gIEhlbHBlclRleHQsXG4gIEhlbHBlclRleHRJdGVtLFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxuICBTd2l0Y2gsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFNldHRpbmdUYWIsIFVzZXJTZXR0aW5nIH0gZnJvbSAnLi9TZXR0aW5nc1V0aWxzJztcblxuY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICBjb25zdCBbdF0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTZXJ2aWNlQ29udGV4dCk7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoY29udGV4dC5zZXR0aW5ncy5kZWxldGlvbkRpYWxvZ3NFbmFibGVkKCkpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVDaGVja2JveENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkLCBlbGVtZW50KSA9PiB7XG4gICAgICBzdGF0ZS5zZXQoRGVsZXRlT3JEaXNhYmxlV2FybmluZ1R5cGVbZWxlbWVudC50YXJnZXQuaWRdLCBjaGVja2VkKTtcbiAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0RGVsZXRpb25EaWFsb2dzRW5hYmxlZChzdGF0ZSk7XG4gICAgICBzZXRTdGF0ZShuZXcgTWFwKHN0YXRlKSk7XG4gICAgfSxcbiAgICBbc3RhdGUsIHNldFN0YXRlLCBjb250ZXh0LnNldHRpbmdzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNoZWNrQWxsID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGNoZWNrZWQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gbmV3IE1hcCgpO1xuICAgICAgQXJyYXkuZnJvbShzdGF0ZS5lbnRyaWVzKCkpLmZvckVhY2goKHYpID0+IG5ld1N0YXRlLnNldCh2WzBdLCBjaGVja2VkKSk7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldERlbGV0aW9uRGlhbG9nc0VuYWJsZWQobmV3U3RhdGUpO1xuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIH0sXG4gICAgW2NvbnRleHQuc2V0dGluZ3MsIHNldFN0YXRlLCBzdGF0ZV1cbiAgKTtcblxuICBjb25zdCBhbGxDaGVja2VkID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUuZW50cmllcygpKVxuICAgICAgLm1hcCgoZSkgPT4gZVsxXSlcbiAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYik7XG4gIH0sIFtzdGF0ZV0pO1xuXG4gIGNvbnN0IHN3aXRjaGVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiAoXG4gICAgICA8U3RhY2tJdGVtIGtleT17a2V5fT5cbiAgICAgICAgPFN3aXRjaFxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgbGFiZWw9e2dldEZyb21XYXJuaW5nTWFwKGtleSk/LmxhYmVsIHx8IGtleS50b1N0cmluZygpfVxuICAgICAgICAgIGlzQ2hlY2tlZD17dmFsdWV9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoZWNrYm94Q2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgKSk7XG4gIH0sIFtoYW5kbGVDaGVja2JveENoYW5nZSwgc3RhdGVdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3RhY2sgaGFzR3V0dGVyPlxuICAgICAgICA8U3RhY2tJdGVtIGtleT1cImFsbC1kZWxldGlvbi13YXJuaW5nc1wiPlxuICAgICAgICAgIDxGb3JtR3JvdXA+XG4gICAgICAgICAgICA8SGVscGVyVGV4dD5cbiAgICAgICAgICAgICAgPEhlbHBlclRleHRJdGVtPnt0KCdTRVRUSU5HUy5ERUxFVElPTl9ESUFMT0dfQ09OVFJPTC5TV0lUQ0hfREVTQ1JJUFRJT04nKX08L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgICAgPC9IZWxwZXJUZXh0PlxuICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICBpZD1cImFsbC1kZWxldGlvbi13YXJuaW5nc1wiXG4gICAgICAgICAgICAgIGxhYmVsPXt0KCdTRVRUSU5HUy5ERUxFVElPTl9ESUFMT0dfQ09OVFJPTC5TV0lUQ0hfTEFCRUwnKX1cbiAgICAgICAgICAgICAgaXNDaGVja2VkPXthbGxDaGVja2VkfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hlY2tBbGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgICAgPFN0YWNrSXRlbSBrZXk9eydleHBhbmRhYmxlLWRlbGV0ZS13YXJuaW5nLXN3aXRjaC1saXN0J30+XG4gICAgICAgICAgPEV4cGFuZGFibGVTZWN0aW9uXG4gICAgICAgICAgICB0b2dnbGVUZXh0PXsoZXhwYW5kZWQgPyB0KCdTSE9XX0xFU1MnLCB7IG5zOiAnY29tbW9uJyB9KSA6IHQoJ1NIT1dfTU9SRScsIHsgbnM6ICdjb21tb24nIH0pKSB8fCAnJ31cbiAgICAgICAgICAgIG9uVG9nZ2xlPXtzZXRFeHBhbmRlZH1cbiAgICAgICAgICAgIGlzRXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzd2l0Y2hlc31cbiAgICAgICAgICA8L0V4cGFuZGFibGVTZWN0aW9uPlxuICAgICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIDwvU3RhY2s+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgRGVsZXRpb25EaWFsb2dDb250cm9sOiBVc2VyU2V0dGluZyA9IHtcbiAgdGl0bGVLZXk6ICdTRVRUSU5HUy5ERUxFVElPTl9ESUFMT0dfQ09OVFJPTC5USVRMRScsXG4gIGRlc2NDb25zdHJ1Y3Q6ICdTRVRUSU5HUy5ERUxFVElPTl9ESUFMT0dfQ09OVFJPTC5ERVNDUklQVElPTicsXG4gIGNvbnRlbnQ6IENvbXBvbmVudCxcbiAgY2F0ZWdvcnk6IFNldHRpbmdUYWIuTk9USUZJQ0FUSU9OX01FU1NBR0UsXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IFNlbGVjdCwgU2VsZWN0T3B0aW9uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgU2V0dGluZ1RhYiwgVXNlclNldHRpbmcgfSBmcm9tICcuL1NldHRpbmdzVXRpbHMnO1xuXG5jb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IFt0XSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OKTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQuc2V0dGluZ3MuZmVhdHVyZUxldmVsKCkuc3Vic2NyaWJlKChsZXZlbCkgPT4gc2V0U3RhdGUobGV2ZWwpKSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuc2V0dGluZ3MsIHNldFN0YXRlXSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oKHYpID0+ICF2KTtcbiAgfSwgW3NldE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgdikgPT4ge1xuICAgICAgc2V0U3RhdGUodi52YWx1ZSk7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldEZlYXR1cmVMZXZlbCh2LnZhbHVlKTtcbiAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgIH0sXG4gICAgW3NldFN0YXRlLCBzZXRPcGVuLCBjb250ZXh0LnNldHRpbmdzXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTZWxlY3RcbiAgICAgICAgaXNPcGVuPXtvcGVufVxuICAgICAgICBvblRvZ2dsZT17aGFuZGxlVG9nZ2xlfVxuICAgICAgICBzZWxlY3Rpb25zPXt7XG4gICAgICAgICAgLi4ueyB2YWx1ZTogc3RhdGUgfSxcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gdChGZWF0dXJlTGV2ZWxbc3RhdGVdKSxcbiAgICAgICAgICBjb21wYXJlVG86ICh2YWwpID0+IHZhbC52YWx1ZSA9PT0gc3RhdGUsXG4gICAgICAgIH19XG4gICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3R9XG4gICAgICAgIGlzRmxpcEVuYWJsZWQ9e3RydWV9XG4gICAgICAgIG1lbnVBcHBlbmRUbz1cInBhcmVudFwiXG4gICAgICA+XG4gICAgICAgIHtPYmplY3QudmFsdWVzKEZlYXR1cmVMZXZlbClcbiAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgLm1hcCgodik6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfSA9PiAoeyBrZXk6IFN0cmluZyh2KSwgdmFsdWU6IEZlYXR1cmVMZXZlbFt2XSB9KSlcbiAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByb2Nlc3MuZW52LkNSWU9TVEFUX0FVVEhPUklUWSkge1xuICAgICAgICAgICAgICByZXR1cm4gdi52YWx1ZSAhPT0gRmVhdHVyZUxldmVsLkRFVkVMT1BNRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChsZXZlbCkgPT4gKFxuICAgICAgICAgICAgPFNlbGVjdE9wdGlvblxuICAgICAgICAgICAgICBrZXk9e2xldmVsLmtleX1cbiAgICAgICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgICAgICAuLi57IHZhbHVlOiBsZXZlbC52YWx1ZSB9LFxuICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiB0KGxldmVsLmtleSksXG4gICAgICAgICAgICAgICAgY29tcGFyZVRvOiAodmFsKSA9PiB2YWwudmFsdWUgPT09IGxldmVsLnZhbHVlLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGV2ZWwua2V5fVxuICAgICAgICAgICAgPC9TZWxlY3RPcHRpb24+XG4gICAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdD5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlTGV2ZWxzOiBVc2VyU2V0dGluZyA9IHtcbiAgdGl0bGVLZXk6ICdTRVRUSU5HUy5GRUFUVVJFX0xFVkVMLlRJVExFJyxcbiAgZGVzY0NvbnN0cnVjdDogJ1NFVFRJTkdTLkZFQVRVUkVfTEVWRUwuREVTQ1JJUFRJT04nLFxuICBjb250ZW50OiBDb21wb25lbnQsXG4gIGNhdGVnb3J5OiBTZXR0aW5nVGFiLkFEVkFOQ0VELFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnksIG1lc3NhZ2VLZXlzIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTm90aWZpY2F0aW9uQ2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2VydmljZXMnO1xuaW1wb3J0IHsgdXNlU3Vic2NyaXB0aW9ucyB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlU3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQge1xuICBFeHBhbmRhYmxlU2VjdGlvbixcbiAgU3dpdGNoLFxuICBTdGFjayxcbiAgU3RhY2tJdGVtLFxuICBOdW1iZXJJbnB1dCxcbiAgRm9ybUdyb3VwLFxuICBIZWxwZXJUZXh0LFxuICBIZWxwZXJUZXh0SXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgU2V0dGluZ1RhYiwgVXNlclNldHRpbmcgfSBmcm9tICcuL1NldHRpbmdzVXRpbHMnO1xuXG5jb25zdCBtaW4gPSAwO1xuY29uc3QgbWF4ID0gMTA7XG5cbmNvbnN0IENvbXBvbmVudCA9ICgpID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoY29udGV4dC5zZXR0aW5ncy5ub3RpZmljYXRpb25zRW5hYmxlZCgpKTtcbiAgY29uc3QgW3Zpc2libGVOb3RpZmljYXRpb25zQ291bnQsIHNldFZpc2libGVOb3RpZmljYXRpb25zQ291bnRdID0gUmVhY3QudXNlU3RhdGUoNSk7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKGNvbnRleHQuc2V0dGluZ3MudmlzaWJsZU5vdGlmaWNhdGlvbnNDb3VudCgpLnN1YnNjcmliZShzZXRWaXNpYmxlTm90aWZpY2F0aW9uc0NvdW50KSk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuc2V0dGluZ3MsIHNldFZpc2libGVOb3RpZmljYXRpb25zQ291bnRdKTtcblxuICBjb25zdCBoYW5kbGVDaGVja2JveENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkLCBlbGVtZW50KSA9PiB7XG4gICAgICBzdGF0ZS5zZXQoTm90aWZpY2F0aW9uQ2F0ZWdvcnlbZWxlbWVudC50YXJnZXQuaWRdLCBjaGVja2VkKTtcbiAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQoc3RhdGUpO1xuICAgICAgc2V0U3RhdGUobmV3IE1hcChzdGF0ZSkpO1xuICAgIH0sXG4gICAgW3N0YXRlLCBzZXRTdGF0ZSwgY29udGV4dC5zZXR0aW5nc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDaGVja0FsbCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjaGVja2VkKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgIEFycmF5LmZyb20oc3RhdGUuZW50cmllcygpKS5mb3JFYWNoKCh2KSA9PiBuZXdTdGF0ZS5zZXQodlswXSwgY2hlY2tlZCkpO1xuICAgICAgY29udGV4dC5zZXR0aW5ncy5zZXROb3RpZmljYXRpb25zRW5hYmxlZChuZXdTdGF0ZSk7XG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfSxcbiAgICBbY29udGV4dC5zZXR0aW5ncywgc2V0U3RhdGUsIHN0YXRlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChldnQpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGlzTmFOKGV2dC50YXJnZXQudmFsdWUpID8gdmlzaWJsZU5vdGlmaWNhdGlvbnNDb3VudCA6IE51bWJlcihldnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICB2YWx1ZSA9IG1pbjtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgdmFsdWUgPSBtYXg7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldFZpc2libGVOb3RpZmljYXRpb25Db3VudCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbdmlzaWJsZU5vdGlmaWNhdGlvbnNDb3VudCwgY29udGV4dC5zZXR0aW5nc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVWaXNpYmxlU3RlcCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChkZWx0YTogbnVtYmVyKSA9PiAoKSA9PiB7XG4gICAgICBjb25zdCB2ID0gdmlzaWJsZU5vdGlmaWNhdGlvbnNDb3VudCArIGRlbHRhO1xuICAgICAgY29udGV4dC5zZXR0aW5ncy5zZXRWaXNpYmxlTm90aWZpY2F0aW9uQ291bnQodik7XG4gICAgfSxcbiAgICBbdmlzaWJsZU5vdGlmaWNhdGlvbnNDb3VudCwgY29udGV4dC5zZXR0aW5nc11cbiAgKTtcblxuICBjb25zdCBhbGxDaGVja2VkID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUuZW50cmllcygpKVxuICAgICAgLm1hcCgoZSkgPT4gZVsxXSlcbiAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYik7XG4gIH0sIFtzdGF0ZV0pO1xuXG4gIGNvbnN0IGxhYmVscyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8Tm90aWZpY2F0aW9uQ2F0ZWdvcnksIHN0cmluZz4oKTtcbiAgICBtZXNzYWdlS2V5cy5mb3JFYWNoKCh2LCBrKSA9PiB7XG4gICAgICByZXN1bHQuc2V0KGssIHY/LnRpdGxlIHx8IGspO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtdKTtcblxuICBjb25zdCBzd2l0Y2hlcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHN0YXRlLmVudHJpZXMoKSwgKFtrZXksIHZhbHVlXSkgPT4gKFxuICAgICAgPFN0YWNrSXRlbSBrZXk9e2tleX0+XG4gICAgICAgIDxTd2l0Y2ggaWQ9e2tleX0gbGFiZWw9e2xhYmVscy5nZXQoa2V5KX0gaXNDaGVja2VkPXt2YWx1ZX0gb25DaGFuZ2U9e2hhbmRsZUNoZWNrYm94Q2hhbmdlfSAvPlxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgKSk7XG4gIH0sIFtoYW5kbGVDaGVja2JveENoYW5nZSwgc3RhdGUsIGxhYmVsc10pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdGFjayBoYXNHdXR0ZXI+XG4gICAgICAgIDxTdGFja0l0ZW0ga2V5PVwiYWxsLW5vdGlmaWNhdGlvbnNcIj5cbiAgICAgICAgICA8Rm9ybUdyb3VwPlxuICAgICAgICAgICAgPEhlbHBlclRleHQ+XG4gICAgICAgICAgICAgIDxIZWxwZXJUZXh0SXRlbT57dCgnU0VUVElOR1MuTk9USUZJQ0FUSU9OX0NPTlRST0wuSU5QVVRfREVTQ1JJUFRJT04nKX08L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgICAgPC9IZWxwZXJUZXh0PlxuICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICBpZD1cImFsbC1ub3RpZmljYXRpb25zXCJcbiAgICAgICAgICAgICAgbGFiZWw9e3QoJ1NFVFRJTkdTLk5PVElGSUNBVElPTl9DT05UUk9MLlNXSVRDSF9MQUJFTCcpfVxuICAgICAgICAgICAgICBpc0NoZWNrZWQ9e2FsbENoZWNrZWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGVja0FsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICA8U3RhY2tJdGVtIGtleT1cIm5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWNvdW50XCI+XG4gICAgICAgICAgPEZvcm1Hcm91cD5cbiAgICAgICAgICAgIDxIZWxwZXJUZXh0PlxuICAgICAgICAgICAgICA8SGVscGVyVGV4dEl0ZW0+e3QoJ1NFVFRJTkdTLk5PVElGSUNBVElPTl9DT05UUk9MLklOUFVUJyl9PC9IZWxwZXJUZXh0SXRlbT5cbiAgICAgICAgICAgIDwvSGVscGVyVGV4dD5cbiAgICAgICAgICAgIDxOdW1iZXJJbnB1dFxuICAgICAgICAgICAgICBpbnB1dE5hbWU9XCJhbGVydCBjb3VudFwiXG4gICAgICAgICAgICAgIHZhbHVlPXt2aXNpYmxlTm90aWZpY2F0aW9uc0NvdW50fVxuICAgICAgICAgICAgICBtaW49e21pbn1cbiAgICAgICAgICAgICAgbWF4PXttYXh9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uTWludXM9e2hhbmRsZVZpc2libGVTdGVwKC0xKX1cbiAgICAgICAgICAgICAgb25QbHVzPXtoYW5kbGVWaXNpYmxlU3RlcCgxKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICAgIDwvU3RhY2tJdGVtPlxuICAgICAgICA8U3RhY2tJdGVtIGtleT17J2V4cGFuZGFibGUtbm90aS1zd2l0Y2gtbGlzdCd9PlxuICAgICAgICAgIDxFeHBhbmRhYmxlU2VjdGlvblxuICAgICAgICAgICAgdG9nZ2xlVGV4dD17KGV4cGFuZGVkID8gdCgnU0hPV19MRVNTJywgeyBuczogJ2NvbW1vbicgfSkgOiB0KCdTSE9XX01PUkUnLCB7IG5zOiAnY29tbW9uJyB9KSkgfHwgJyd9XG4gICAgICAgICAgICBvblRvZ2dsZT17c2V0RXhwYW5kZWR9XG4gICAgICAgICAgICBpc0V4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c3dpdGNoZXN9XG4gICAgICAgICAgPC9FeHBhbmRhYmxlU2VjdGlvbj5cbiAgICAgICAgPC9TdGFja0l0ZW0+XG4gICAgICA8L1N0YWNrPlxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IE5vdGlmaWNhdGlvbkNvbnRyb2w6IFVzZXJTZXR0aW5nID0ge1xuICB0aXRsZUtleTogJ1NFVFRJTkdTLk5PVElGSUNBVElPTl9DT05UUk9MLlRJVExFJyxcbiAgZGVzY0NvbnN0cnVjdDogJ1NFVFRJTkdTLk5PVElGSUNBVElPTl9DT05UUk9MLkRFU0NSSVBUSU9OJyxcbiAgY29udGVudDogQ29tcG9uZW50LFxuICBjYXRlZ29yeTogU2V0dGluZ1RhYi5OT1RJRklDQVRJT05fTUVTU0FHRSxcbiAgb3JkZXJJbkdyb3VwOiAxLFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgU2VsZWN0LCBTZWxlY3RPcHRpb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBTZXR0aW5nVGFiLCBUaGVtZVNldHRpbmcsIFVzZXJTZXR0aW5nIH0gZnJvbSAnLi9TZXR0aW5nc1V0aWxzJztcblxuY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbX3RoZW1lLCBzZXR0aW5nXSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3QgaGFuZGxlVGhlbWVUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRPcGVuKCh2KSA9PiAhdiksIFtzZXRPcGVuXSk7XG5cbiAgY29uc3QgaGFuZGxlVGhlbWVTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXywgdikgPT4ge1xuICAgICAgY29udGV4dC5zZXR0aW5ncy5zZXRUaGVtZVNldHRpbmcodiBhcyBUaGVtZVNldHRpbmcpO1xuICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfSxcbiAgICBbY29udGV4dC5zZXR0aW5ncywgc2V0T3Blbl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RcbiAgICAgIGlzT3Blbj17b3Blbn1cbiAgICAgIGFyaWEtbGFiZWw9e3QoJ1NFVFRJTkdTLlRIRU1FLlNFTEVDVC5MQUJFTCcpfVxuICAgICAgb25Ub2dnbGU9e2hhbmRsZVRoZW1lVG9nZ2xlfVxuICAgICAgb25TZWxlY3Q9e2hhbmRsZVRoZW1lU2VsZWN0fVxuICAgICAgc2VsZWN0aW9ucz17c2V0dGluZ31cbiAgICAgIGlzRmxpcEVuYWJsZWRcbiAgICAgIG1lbnVBcHBlbmRUbz1cInBhcmVudFwiXG4gICAgPlxuICAgICAgPFNlbGVjdE9wdGlvbiBrZXk9XCJhdXRvXCIgdmFsdWU9XCJhdXRvXCI+XG4gICAgICAgIHt0KCdTRVRUSU5HUy5USEVNRS5BVVRPJyl9XG4gICAgICA8L1NlbGVjdE9wdGlvbj5cbiAgICAgIDxTZWxlY3RPcHRpb24ga2V5PVwibGlnaHRcIiB2YWx1ZT1cImxpZ2h0XCI+XG4gICAgICAgIHt0KCdTRVRUSU5HUy5USEVNRS5MSUdIVCcpfVxuICAgICAgPC9TZWxlY3RPcHRpb24+XG4gICAgICA8U2VsZWN0T3B0aW9uIGtleT1cImRhcmtcIiB2YWx1ZT1cImRhcmtcIj5cbiAgICAgICAge3QoJ1NFVFRJTkdTLlRIRU1FLkRBUksnKX1cbiAgICAgIDwvU2VsZWN0T3B0aW9uPlxuICAgIDwvU2VsZWN0PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFRoZW1lOiBVc2VyU2V0dGluZyA9IHtcbiAgdGl0bGVLZXk6ICdTRVRUSU5HUy5USEVNRS5USVRMRScsXG4gIGRlc2NDb25zdHJ1Y3Q6ICdTRVRUSU5HUy5USEVNRS5ERVNDUklQVElPTicsXG4gIGNvbnRlbnQ6IENvbXBvbmVudCxcbiAgY2F0ZWdvcnk6IFNldHRpbmdUYWIuR0VORVJBTCxcbiAgb3JkZXJJbkdyb3VwOiAyLFxufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IE51bWJlcklucHV0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZXR0aW5nVGFiLCBVc2VyU2V0dGluZyB9IGZyb20gJy4vU2V0dGluZ3NVdGlscyc7XG5cbmNvbnN0IGRlZmF1bHRQcmVmZXJlbmNlcyA9IHtcbiAgd2ViU29ja2V0RGVib3VuY2VNczogMTAwLFxufTtcblxuY29uc3QgZGVib3VuY2VNaW4gPSAxO1xuY29uc3QgZGVib3VuY2VNYXggPSAxMDAwO1xuXG5jb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJlZmVyZW5jZXMpO1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U3RhdGUoe1xuICAgICAgd2ViU29ja2V0RGVib3VuY2VNczogY29udGV4dC5zZXR0aW5ncy53ZWJTb2NrZXREZWJvdW5jZU1zKCksXG4gICAgfSk7XG4gIH0sIFtzZXRTdGF0ZSwgY29udGV4dC5zZXR0aW5nc10pO1xuXG4gIGNvbnN0IGhhbmRsZVdlYlNvY2tldERlYm91bmNlTWludXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICAgIGxldCBkZWJvdW5jZSA9IChzdGF0ZS53ZWJTb2NrZXREZWJvdW5jZU1zIHx8IDEpIC0gMTtcbiAgICAgIGlmIChkZWJvdW5jZSA8IGRlYm91bmNlTWluKSB7XG4gICAgICAgIGRlYm91bmNlID0gZGVib3VuY2VNaW47XG4gICAgICB9XG4gICAgICBuZXdTdGF0ZS53ZWJTb2NrZXREZWJvdW5jZU1zID0gZGVib3VuY2U7XG4gICAgICBjb250ZXh0LnNldHRpbmdzLnNldFdlYlNvY2tldERlYm91bmNlTXMobmV3U3RhdGUud2ViU29ja2V0RGVib3VuY2VNcyk7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfSk7XG4gIH0sIFtzZXRTdGF0ZSwgY29udGV4dC5zZXR0aW5nc10pO1xuXG4gIGNvbnN0IGhhbmRsZVdlYlNvY2tldERlYm91bmNlUGx1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTdGF0ZSgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgICAgbGV0IGRlYm91bmNlID0gKHN0YXRlLndlYlNvY2tldERlYm91bmNlTXMgfHwgMSkgKyAxO1xuICAgICAgaWYgKGRlYm91bmNlID4gZGVib3VuY2VNYXgpIHtcbiAgICAgICAgZGVib3VuY2UgPSBkZWJvdW5jZU1heDtcbiAgICAgIH1cbiAgICAgIG5ld1N0YXRlLndlYlNvY2tldERlYm91bmNlTXMgPSBkZWJvdW5jZTtcbiAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0V2ViU29ja2V0RGVib3VuY2VNcyhuZXdTdGF0ZS53ZWJTb2NrZXREZWJvdW5jZU1zKTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9KTtcbiAgfSwgW3NldFN0YXRlLCBjb250ZXh0LnNldHRpbmdzXSk7XG5cbiAgY29uc3QgaGFuZGxlV2ViU29ja2V0RGVib3VuY2VDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIHNldFN0YXRlKChzdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgbmV4dCA9IGlzTmFOKGV2ZW50LnRhcmdldC52YWx1ZSkgPyBzdGF0ZS53ZWJTb2NrZXREZWJvdW5jZU1zIDogTnVtYmVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGlmIChzdGF0ZS53ZWJTb2NrZXREZWJvdW5jZU1zIDwgZGVib3VuY2VNaW4pIHtcbiAgICAgICAgICBuZXh0ID0gZGVib3VuY2VNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUud2ViU29ja2V0RGVib3VuY2VNcyA+IGRlYm91bmNlTWF4KSB7XG4gICAgICAgICAgbmV4dCA9IGRlYm91bmNlTWF4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuc2V0dGluZ3Muc2V0V2ViU29ja2V0RGVib3VuY2VNcyhuZXh0KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHdlYlNvY2tldERlYm91bmNlTXM6IG5leHQgfTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3NldFN0YXRlLCBjb250ZXh0LnNldHRpbmdzXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxOdW1iZXJJbnB1dFxuICAgICAgICB2YWx1ZT17c3RhdGUud2ViU29ja2V0RGVib3VuY2VNc31cbiAgICAgICAgbWluPXtkZWJvdW5jZU1pbn1cbiAgICAgICAgbWF4PXtkZWJvdW5jZU1heH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVdlYlNvY2tldERlYm91bmNlQ2hhbmdlfVxuICAgICAgICBvbk1pbnVzPXtoYW5kbGVXZWJTb2NrZXREZWJvdW5jZU1pbnVzfVxuICAgICAgICBvblBsdXM9e2hhbmRsZVdlYlNvY2tldERlYm91bmNlUGx1c31cbiAgICAgICAgdW5pdD1cIm1zXCJcbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgV2ViU29ja2V0RGVib3VuY2U6IFVzZXJTZXR0aW5nID0ge1xuICB0aXRsZUtleTogJ1NFVFRJTkdTLldFQlNPQ0tFVF9DT05ORUNUSU9OX0RFQk9VTkNFLlRJVExFJyxcbiAgZGVzY0NvbnN0cnVjdDogJ1NFVFRJTkdTLldFQlNPQ0tFVF9DT05ORUNUSU9OX0RFQk9VTkNFLkRFU0NSSVBUSU9OJyxcbiAgY29udGVudDogQ29tcG9uZW50LFxuICBjYXRlZ29yeTogU2V0dGluZ1RhYi5DT05ORUNUSVZJVFksXG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEJyZWFkY3J1bWJQYWdlIH0gZnJvbSAnQGFwcC9CcmVhZGNydW1iUGFnZS9CcmVhZGNydW1iUGFnZSc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZyB9IGZyb20gJ0BhcHAvU2hhcmVkL0ZlYXR1cmVGbGFnL0ZlYXR1cmVGbGFnJztcbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdXNlTG9naW4gfSBmcm9tICdAYXBwL3V0aWxzL3VzZUxvZ2luJztcbmltcG9ydCB7IGNsZWFuRGF0YUlkLCBnZXRBY3RpdmVUYWIsIGhhc2hDb2RlLCBzd2l0Y2hUYWIgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIENhcmQsXG4gIEZvcm0sXG4gIEZvcm1Hcm91cCxcbiAgSGVscGVyVGV4dCxcbiAgSGVscGVyVGV4dEl0ZW0sXG4gIExhYmVsLFxuICBTaWRlYmFyLFxuICBTaWRlYmFyQ29udGVudCxcbiAgU2lkZWJhclBhbmVsLFxuICBUYWIsXG4gIFRhYlByb3BzLFxuICBUYWJzLFxuICBUYWJUaXRsZVRleHQsXG4gIFRpdGxlLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRyYW5zLCB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnIH0gZnJvbSAnLi9BdXRvbWF0ZWRBbmFseXNpc0NvbmZpZyc7XG5pbXBvcnQgeyBBdXRvUmVmcmVzaCB9IGZyb20gJy4vQXV0b1JlZnJlc2gnO1xuaW1wb3J0IHsgQ2hhcnRDYXJkc0NvbmZpZyB9IGZyb20gJy4vQ2hhcnRDYXJkc0NvbmZpZyc7XG5pbXBvcnQgeyBDcmVkZW50aWFsc1N0b3JhZ2UgfSBmcm9tICcuL0NyZWRlbnRpYWxzU3RvcmFnZSc7XG5pbXBvcnQgeyBEYXRldGltZUNvbnRyb2wgfSBmcm9tICcuL0RhdGV0aW1lQ29udHJvbCc7XG5pbXBvcnQgeyBEZWxldGlvbkRpYWxvZ0NvbnRyb2wgfSBmcm9tICcuL0RlbGV0aW9uRGlhbG9nQ29udHJvbCc7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWxzIH0gZnJvbSAnLi9GZWF0dXJlTGV2ZWxzJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi9MYW5ndWFnZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Db250cm9sIH0gZnJvbSAnLi9Ob3RpZmljYXRpb25Db250cm9sJztcbmltcG9ydCB7IHBhcmFtQXNUYWIsIFNldHRpbmdUYWIsIHRhYkFzUGFyYW0sIF9UcmFuc2Zvcm1lZFVzZXJTZXR0aW5nIH0gZnJvbSAnLi9TZXR0aW5nc1V0aWxzJztcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi9UaGVtZSc7XG5pbXBvcnQgeyBXZWJTb2NrZXREZWJvdW5jZSB9IGZyb20gJy4vV2ViU29ja2V0RGVib3VuY2UnO1xuXG5leHBvcnQgY29uc3QgYWxsU2V0dGluZ3MgPSBbXG4gIE5vdGlmaWNhdGlvbkNvbnRyb2wsXG4gIEF1dG9tYXRlZEFuYWx5c2lzQ29uZmlnLFxuICBDaGFydENhcmRzQ29uZmlnLFxuICBDcmVkZW50aWFsc1N0b3JhZ2UsXG4gIERlbGV0aW9uRGlhbG9nQ29udHJvbCxcbiAgV2ViU29ja2V0RGVib3VuY2UsXG4gIEF1dG9SZWZyZXNoLFxuICBGZWF0dXJlTGV2ZWxzLFxuICBMYW5ndWFnZSxcbiAgRGF0ZXRpbWVDb250cm9sLFxuICBUaGVtZSxcbl07XG5cbmludGVyZmFjZSBTZXR0aW5nR3JvdXAge1xuICBncm91cExhYmVsOiBTZXR0aW5nVGFiO1xuICBncm91cEtleTogc3RyaW5nO1xuICBmZWF0dXJlTGV2ZWw6IEZlYXR1cmVMZXZlbDtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBzZXR0aW5nczogX1RyYW5zZm9ybWVkVXNlclNldHRpbmdbXTtcbn1cblxuY29uc3QgX2dldEdyb3VwRmVhdHVyZUxldmVsID0gKHNldHRpbmdzOiBfVHJhbnNmb3JtZWRVc2VyU2V0dGluZ1tdKTogRmVhdHVyZUxldmVsID0+IHtcbiAgaWYgKCFzZXR0aW5ncy5sZW5ndGgpIHtcbiAgICByZXR1cm4gRmVhdHVyZUxldmVsLkRFVkVMT1BNRU5UO1xuICB9XG4gIHJldHVybiBzZXR0aW5ncy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGIuZmVhdHVyZUxldmVsIC0gYS5mZWF0dXJlTGV2ZWwpWzBdLmZlYXR1cmVMZXZlbDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dGluZ3NQcm9wcyB7fVxuXG5leHBvcnQgY29uc3QgU2V0dGluZ3M6IFJlYWN0LkZDPFNldHRpbmdzUHJvcHM+ID0gKF8pID0+IHtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgbG9nZ2VkSW4gPSB1c2VMb2dpbigpO1xuXG4gIGNvbnN0IHNldHRpbmdzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYWxsU2V0dGluZ3NcbiAgICAgICAgLmZpbHRlcigocykgPT4gIXMuYXV0aGVudGljYXRlZCB8fCBsb2dnZWRJbilcbiAgICAgICAgLm1hcChcbiAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgIHRpdGxlOiB0KGMudGl0bGVLZXkpIHx8ICcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICB0eXBlb2YgYy5kZXNjQ29uc3RydWN0ID09PSAnc3RyaW5nJyA/IChcbiAgICAgICAgICAgICAgICAgIHQoYy5kZXNjQ29uc3RydWN0KVxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAvLyBVc2UgY2hpbGRyZW4gcHJvcCB0byBhdm9pZCBpMThuIHBhcnNlcyBib2R5IGFzIGtleVxuICAgICAgICAgICAgICAgICAgLyogZXNsaW50IHJlYWN0L25vLWNoaWxkcmVuLXByb3A6IDAgKi9cbiAgICAgICAgICAgICAgICAgIDxUcmFucyBpMThuS2V5PXtjLmRlc2NDb25zdHJ1Y3Qua2V5fSBjaGlsZHJlbj17Yy5kZXNjQ29uc3RydWN0LnBhcnRzfSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYy5jb250ZW50LCBudWxsKSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGMuY2F0ZWdvcnksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjLmRpc2FibGVkLFxuICAgICAgICAgICAgICBvcmRlckluR3JvdXA6IGMub3JkZXJJbkdyb3VwIHx8IC0xLFxuICAgICAgICAgICAgICBmZWF0dXJlTGV2ZWw6IGMuZmVhdHVyZUxldmVsIHx8IEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OLFxuICAgICAgICAgICAgfSBhcyBfVHJhbnNmb3JtZWRVc2VyU2V0dGluZylcbiAgICAgICAgKSxcbiAgICBbdCwgbG9nZ2VkSW5dXG4gICk7XG5cbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgeyBzZWFyY2gsIHBhdGhuYW1lIH0gPSB1c2VMb2NhdGlvbigpO1xuXG4gIGNvbnN0IGFjdGl2ZVRhYiA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBwYXJhbUFzVGFiKFxuICAgICAgZ2V0QWN0aXZlVGFiKFxuICAgICAgICBzZWFyY2gsXG4gICAgICAgICd0YWInLFxuICAgICAgICBPYmplY3QudmFsdWVzKFNldHRpbmdUYWIpLm1hcCgodikgPT4gdGFiQXNQYXJhbSh2KSksXG4gICAgICAgIHRhYkFzUGFyYW0oU2V0dGluZ1RhYi5HRU5FUkFMKVxuICAgICAgKVxuICAgICk7XG4gIH0sIFtzZWFyY2hdKTtcblxuICBjb25zdCBvblRhYlNlbGVjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChfOiBSZWFjdC5Nb3VzZUV2ZW50LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT5cbiAgICAgIHN3aXRjaFRhYihoaXN0b3J5LCBwYXRobmFtZSwgc2VhcmNoLCB7IHRhYktleTogJ3RhYicsIHRhYlZhbHVlOiBgJHt0YWJBc1BhcmFtKGtleSBhcyBTZXR0aW5nVGFiKX1gIH0pLFxuICAgIFtoaXN0b3J5LCBwYXRobmFtZSwgc2VhcmNoXVxuICApO1xuXG4gIGNvbnN0IHNldHRpbmdHcm91cHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhTZXR0aW5nVGFiKS5tYXAoKGNhdCkgPT4ge1xuICAgICAgY29uc3QgcGFuZWxzID0gc2V0dGluZ3MuZmlsdGVyKChzKSA9PiBzLmNhdGVnb3J5ID09PSBjYXQpLnNvcnQoKGEsIGIpID0+IGIub3JkZXJJbkdyb3VwIC0gYS5vcmRlckluR3JvdXApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3JvdXBMYWJlbDogdChjYXQpLFxuICAgICAgICBncm91cEtleTogY2F0LFxuICAgICAgICBzZXR0aW5nczogcGFuZWxzLFxuICAgICAgICBmZWF0dXJlTGV2ZWw6IF9nZXRHcm91cEZlYXR1cmVMZXZlbChwYW5lbHMpLFxuICAgICAgfTtcbiAgICB9KSBhcyBTZXR0aW5nR3JvdXBbXTtcbiAgfSwgW3NldHRpbmdzLCB0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJyZWFkY3J1bWJQYWdlIHBhZ2VUaXRsZT1cIlNldHRpbmdzXCI+XG4gICAgICAgIDxDYXJkIGlzRnVsbEhlaWdodD5cbiAgICAgICAgICA8U2lkZWJhciB0YWJJbmRleD17MH0+XG4gICAgICAgICAgICA8U2lkZWJhclBhbmVsPlxuICAgICAgICAgICAgICA8VGFic1xuICAgICAgICAgICAgICAgIGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICBpc0V4cGFuZGVkXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCBzZXR0aW5nIGNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVLZXk9e2FjdGl2ZVRhYn1cbiAgICAgICAgICAgICAgICBvblNlbGVjdD17b25UYWJTZWxlY3R9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7c2V0dGluZ0dyb3Vwcy5tYXAoKGdycCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFdyYXBwZWRUYWJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtncnAuZ3JvdXBMYWJlbH0tdGFiYH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnRLZXk9e2dycC5ncm91cEtleX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9ezxUYWJUaXRsZVRleHQ+e2dycC5ncm91cExhYmVsfTwvVGFiVGl0bGVUZXh0Pn1cbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUxldmVsQ29uZmlnPXt7XG4gICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGdycC5mZWF0dXJlTGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RhYnM+XG4gICAgICAgICAgICA8L1NpZGViYXJQYW5lbD5cbiAgICAgICAgICAgIDxTaWRlYmFyQ29udGVudD5cbiAgICAgICAgICAgICAge3NldHRpbmdHcm91cHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChncnApID0+IGdycC5ncm91cEtleSA9PT0gYWN0aXZlVGFiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGdycCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEZvcm0ga2V5PXtgJHtncnAuZ3JvdXBLZXl9LXNldHRpbmdgfSBjbGFzc05hbWU9XCJzZXR0aW5nc19fY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7Z3JwLnNldHRpbmdzLm1hcCgocywgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8RmVhdHVyZUZsYWcgbGV2ZWw9e3MuZmVhdHVyZUxldmVsfSBrZXk9e2Ake2dycC5ncm91cExhYmVsfS0ke3MudGl0bGV9LSR7aW5kZXh9LWZsYWdgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZSBoZWFkaW5nTGV2ZWw9eydoMid9IHNpemU9eydsZyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3MudGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cy5mZWF0dXJlTGV2ZWwgIT09IEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcxY2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogJ2NhcGl0YWxpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e3MuZmVhdHVyZUxldmVsID09PSBGZWF0dXJlTGV2ZWwuQkVUQSA/ICdncmVlbicgOiAncmVkJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtGZWF0dXJlTGV2ZWxbcy5mZWF0dXJlTGV2ZWxdLnRvTG93ZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhlbHBlclRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGVscGVyVGV4dEl0ZW0+e3MuZGVzY3JpcHRpb259PC9IZWxwZXJUZXh0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hlbHBlclRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIZWxwZXJUZXh0QmVmb3JlRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtncnAuZ3JvdXBMYWJlbH0tJHtzLnRpdGxlfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtzLmVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZlYXR1cmVGbGFnPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU2lkZWJhckNvbnRlbnQ+XG4gICAgICAgICAgPC9TaWRlYmFyPlxuICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDw+XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTmVlZCB0aGlzIGZyYWdtZW50IHRvIGNvcnJlY3QgYm90dG9tIG1hcmdpbi5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICAgPC9CcmVhZGNydW1iUGFnZT5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBTZXR0aW5nVGFiUHJvcHMgZXh0ZW5kcyBUYWJQcm9wcyB7XG4gIGZlYXR1cmVMZXZlbENvbmZpZzoge1xuICAgIGxldmVsOiBGZWF0dXJlTGV2ZWw7XG4gICAgc3RyaWN0PzogYm9vbGVhbjtcbiAgfTtcbn1cblxuLy8gV29ya2Fyb3VuZCB0byB0aGUgVGFicyBjb21wb25lbnQgcmVxdWlyaW5nIGNoaWxkcmVuIHRvIGJlIFJlYWN0LkZDPFRhYlByb3BzPlxuY29uc3QgV3JhcHBlZFRhYjogUmVhY3QuRkM8U2V0dGluZ1RhYlByb3BzPiA9ICh7IGZlYXR1cmVMZXZlbENvbmZpZywgZXZlbnRLZXksIHRpdGxlLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICByZXR1cm4gKFxuICAgIDxGZWF0dXJlRmxhZyBsZXZlbD17ZmVhdHVyZUxldmVsQ29uZmlnLmxldmVsfSBzdHJpY3Q9e2ZlYXR1cmVMZXZlbENvbmZpZy5zdHJpY3R9PlxuICAgICAgPFRhYlxuICAgICAgICBldmVudEtleT17ZXZlbnRLZXl9XG4gICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgaWQ9e2Ake2hhc2hDb2RlKGAke2V2ZW50S2V5fWApfWB9XG4gICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD17Y2xlYW5EYXRhSWQoYHNldHRpbmdzLSR7dChldmVudEtleS50b1N0cmluZygpKX0tdGFiYCl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFiPlxuICAgIDwvRmVhdHVyZUZsYWc+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZXR0aW5ncztcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgYnVpbGQgZnJvbSAnQGFwcC9idWlsZC5qc29uJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHtcbiAgQnVsbHNleWUsXG4gIEVtcHR5U3RhdGUsXG4gIEVtcHR5U3RhdGVCb2R5LFxuICBFbXB0eVN0YXRlSWNvbixcbiAgRW1wdHlTdGF0ZVZhcmlhbnQsXG4gIFRleHQsXG4gIFRleHRWYXJpYW50cyxcbiAgVGl0bGUsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgRXhjbGFtYXRpb25DaXJjbGVJY29uIH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtaWNvbnMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVHJhbnMsIHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vU2VydmljZXMvU2VydmljZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQm91bmRhcnlQcm9wcyB7XG4gIHJlbmRlckZhbGxiYWNrOiAoZXJyb3I6IEVycm9yKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQm91bmRhcnlTdGF0ZSB7XG4gIGVycm9yPzogRXJyb3I7XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEVycm9yQm91bmRhcnlQcm9wcywgRXJyb3JCb3VuZGFyeVN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFcnJvckJvdW5kYXJ5UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgZXJyb3I6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogRXJyb3IpOiBFcnJvckJvdW5kYXJ5U3RhdGUge1xuICAgIC8vIFVwZGF0ZSBzdGF0ZSBzbyB0aGUgbmV4dCByZW5kZXIgd2lsbCBzaG93IHRoZSBmYWxsYmFjayBVSS5cbiAgICByZXR1cm4geyBlcnJvciB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3I6IEVycm9yLCBpbmZvOiBSZWFjdC5FcnJvckluZm8pIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IsIGluZm8uY29tcG9uZW50U3RhY2spO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnJlbmRlckZhbGxiYWNrKHRoaXMuc3RhdGUuZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRGYWxsQmFja1Byb3BzIHtcbiAgZXJyb3I/OiBFcnJvcjtcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRGYWxsQmFjazogUmVhY3QuRkM8RGVmYXVsdEZhbGxCYWNrUHJvcHM+ID0gKHsgZXJyb3IsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBhZGRTdWJjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3Qgc2VydmljZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgW2NyeW9zdGF0VmVyc2lvbiwgc2V0Q3J5b3N0YXRWZXJzaW9uXSA9IFJlYWN0LnVzZVN0YXRlKHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3ViY3JpcHRpb24oc2VydmljZUNvbnRleHQuYXBpLmNyeW9zdGF0VmVyc2lvbigpLnN1YnNjcmliZShzZXRDcnlvc3RhdFZlcnNpb24pKTtcbiAgfSwgW3NlcnZpY2VDb250ZXh0LCBzZXRDcnlvc3RhdFZlcnNpb24sIGFkZFN1YmNyaXB0aW9uXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnVsbHNleWUgey4uLnByb3BzfT5cbiAgICAgIDxFbXB0eVN0YXRlIHZhcmlhbnQ9e0VtcHR5U3RhdGVWYXJpYW50LmxhcmdlfT5cbiAgICAgICAgPEVtcHR5U3RhdGVJY29uIGljb249e0V4Y2xhbWF0aW9uQ2lyY2xlSWNvbn0gY29sb3I9XCJyZWRcIiAvPlxuICAgICAgICA8VGl0bGUgaGVhZGluZ0xldmVsPXsnaDEnfT57dCgnU09NRVRISU5HX1dFTlRfV1JPTkcnLCB7IG5zOiAnY29tbW9uJyB9KX08L1RpdGxlPlxuICAgICAgICA8RW1wdHlTdGF0ZUJvZHk+XG4gICAgICAgICAgPHA+e3QoJ0VSUk9SX0JPVU5EQVJZLkVSUk9SX01FU1NBR0UnLCB7IG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yLicgfSl9PC9wPlxuICAgICAgICAgIDxUcmFuc1xuICAgICAgICAgICAgdD17dH1cbiAgICAgICAgICAgIHZhbHVlcz17e1xuICAgICAgICAgICAgICBrbm93bklzc3VlOiB0KCdBYm91dERlc2NyaXB0aW9uLktOT1dOX0lTU1VFUycpLFxuICAgICAgICAgICAgICBmaWxlUmVwb3J0OiB0KCdBYm91dERlc2NyaXB0aW9uLkZJTEVfQV9SRVBPUlQnKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgICAgICAgIGlzc3VlOiA8VGV4dCBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5hfSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPXtidWlsZC5rbm93bklzc3Vlc1VybH0gLz4sXG4gICAgICAgICAgICAgIHJlcG9ydDogKFxuICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e1RleHRWYXJpYW50cy5hfVxuICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2J1aWxkLmZpbGVJc3N1ZVVybC5yZXBsYWNlKCdfX1JFUExBQ0VfVkVSU0lPTl9fJywgY3J5b3N0YXRWZXJzaW9uIHx8ICd1bmtub3duJyl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgRVJST1JfQk9VTkRBUlkuUkVTT0xWRV9NRVNTQUdFXG4gICAgICAgICAgPC9UcmFucz5cbiAgICAgICAgPC9FbXB0eVN0YXRlQm9keT5cbiAgICAgIDwvRW1wdHlTdGF0ZT5cbiAgICA8L0J1bGxzZXllPlxuICApO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgb3Blbmpka1N2ZyBmcm9tICdAYXBwL2Fzc2V0cy9vcGVuamRrLnN2Zyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iUGFnZSB9IGZyb20gJ0BhcHAvQnJlYWRjcnVtYlBhZ2UvQnJlYWRjcnVtYlBhZ2UnO1xuaW1wb3J0IHsgTG9jYXRpb25zIH0gZnJvbSAnQGFwcC9TZXR0aW5ncy9DcmVkZW50aWFsc1N0b3JhZ2UnO1xuaW1wb3J0IHsgTGluZWFyRG90U3Bpbm5lciB9IGZyb20gJ0BhcHAvU2hhcmVkL0xpbmVhckRvdFNwaW5uZXInO1xuaW1wb3J0IHsgTG9hZGluZ1Byb3BzVHlwZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1Byb2dyZXNzSW5kaWNhdG9yJztcbmltcG9ydCB7IGlzSHR0cE9rIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvQXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9UYXJnZXQuc2VydmljZSc7XG5pbXBvcnQgJ0BhcHAvVG9wb2xvZ3kvc3R5bGVzL2Jhc2UuY3NzJztcbmltcG9ydCB7IGdldEZyb21Mb2NhbFN0b3JhZ2UgfSBmcm9tICdAYXBwL3V0aWxzL0xvY2FsU3RvcmFnZSc7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHBvcnRhbFJvb3QgfSBmcm9tICdAYXBwL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7XG4gIEFjY29yZGlvbixcbiAgQWNjb3JkaW9uQ29udGVudCxcbiAgQWNjb3JkaW9uSXRlbSxcbiAgQWNjb3JkaW9uVG9nZ2xlLFxuICBBY3Rpb25Hcm91cCxcbiAgQWxlcnQsXG4gIEJ1bGxzZXllLFxuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRCb2R5LFxuICBDYXJkVGl0bGUsXG4gIENsaXBib2FyZENvcHksXG4gIEZsZXgsXG4gIEZsZXhJdGVtLFxuICBGb3JtLFxuICBGb3JtQWxlcnQsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEdyaWQsXG4gIEdyaWRJdGVtLFxuICBncmlkU3BhbnMsXG4gIEhlbHBlclRleHQsXG4gIEhlbHBlclRleHRJdGVtLFxuICBUZXh0SW5wdXQsXG4gIFRvb2x0aXAsXG4gIFZhbGlkYXRlZE9wdGlvbnMsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IHsgQ2hlY2tDaXJjbGVJY29uLCBFeGNsYW1hdGlvbkNpcmNsZUljb24sIFBlbmRpbmdJY29uLCBTeW5jQWx0SWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LXN0eWxlcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFRhcmdldENvbm5lY3RVUkwgPSAoY29ubmVjdFVybD86IHN0cmluZykgPT4gY29ubmVjdFVybCAmJiAhY29ubmVjdFVybC5tYXRjaCgvXFxzKy8pO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRhcmdldFByb3BzIHtcbiAgcHJlZmlsbGVkPzoge1xuICAgIGNvbm5lY3RVcmw6IHN0cmluZztcbiAgICBhbGlhcz86IHN0cmluZztcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENyZWF0ZVRhcmdldDogUmVhY3QuRkM8Q3JlYXRlVGFyZ2V0UHJvcHM+ID0gKHsgcHJlZmlsbGVkLCAuLi5fcHJvcHMgfSkgPT4ge1xuICBjb25zdCBhZGRTdWJzY3JpcHRpb24gPSB1c2VTdWJzY3JpcHRpb25zKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgW3RdID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCBbZXhhbXBsZSwgc2V0RXhhbXBsZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFt7IGNvbm5lY3RVcmwsIGFsaWFzLCB2YWxpZENvbm5lY3RVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCB9LCBzZXRGb3JtRGF0YV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgY29ubmVjdFVybDogJycsXG4gICAgYWxpYXM6ICcnLFxuICAgIHZhbGlkQ29ubmVjdFVybDogVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0LFxuICAgIHVzZXJuYW1lOiAnJyxcbiAgICBwYXNzd29yZDogJycsXG4gIH0pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt0ZXN0aW5nLCBzZXRUZXN0aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3ZhbGlkYXRpb24sIHNldFZhbGlkYXRpb25dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIG9wdGlvbjogVmFsaWRhdGVkT3B0aW9ucy5kZWZhdWx0LFxuICAgIGVycm9yTWVzc2FnZTogJycsXG4gIH0pO1xuICBjb25zdCBbZXhwYW5kZWRTZWN0aW9ucywgc2V0RXhwYW5kZWRTZWN0aW9uc10gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmdbXT4oW10pOyAvLyBBcnJheSBvZiBpZHNcblxuICBjb25zdCB0YXJnZXQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7IGNvbm5lY3RVcmwsIGFsaWFzIH0pLCBbY29ubmVjdFVybCwgYWxpYXNdKTtcblxuICBjb25zdCBjcmVkZW50aWFscyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgdXNlcm5hbWUsIHBhc3N3b3JkIH0pLCBbdXNlcm5hbWUsIHBhc3N3b3JkXSk7XG5cbiAgY29uc3QgY3JlYXRlQnV0dG9uTG9hZGluZ1Byb3BzID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgKHtcbiAgICAgICAgc3Bpbm5lckFyaWFWYWx1ZVRleHQ6ICdDcmVhdGluZycsXG4gICAgICAgIHNwaW5uZXJBcmlhTGFiZWw6ICdjcmVhdGluZy1jdXN0b20tdGFyZ2V0JyxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nLFxuICAgICAgfSBhcyBMb2FkaW5nUHJvcHNUeXBlKSxcbiAgICBbbG9hZGluZ11cbiAgKTtcblxuICBjb25zdCB0b2dnbGVDcmVkZW50aWFsRm9ybSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh0b2dnbGVJZDogc3RyaW5nKSA9PlxuICAgICAgc2V0RXhwYW5kZWRTZWN0aW9ucygob2xkKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBvbGQuZmluZCgoaWQpID0+IGlkID09PSB0b2dnbGVJZCk7XG4gICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG9sZC5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gbWF0Y2hlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5vbGQsIHRvZ2dsZUlkXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgW3NldEV4cGFuZGVkU2VjdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgcmVzZXRUZXN0U3RhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoKSA9PiBzZXRWYWxpZGF0aW9uKHsgb3B0aW9uOiBWYWxpZGF0ZWRPcHRpb25zLmRlZmF1bHQsIGVycm9yTWVzc2FnZTogJycgfSksXG4gICAgW3NldFZhbGlkYXRpb25dXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ29ubmVjdFVybENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChjb25uZWN0VXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldEZvcm1EYXRhKChvbGQpID0+ICh7XG4gICAgICAgIC4uLm9sZCxcbiAgICAgICAgY29ubmVjdFVybCxcbiAgICAgICAgdmFsaWRDb25uZWN0VXJsOlxuICAgICAgICAgIGNvbm5lY3RVcmwgPT09ICcnXG4gICAgICAgICAgICA/IFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdFxuICAgICAgICAgICAgOiBpc1ZhbGlkVGFyZ2V0Q29ubmVjdFVSTChjb25uZWN0VXJsKVxuICAgICAgICAgICAgPyBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3NcbiAgICAgICAgICAgIDogVmFsaWRhdGVkT3B0aW9ucy5lcnJvcixcbiAgICAgIH0pKTtcbiAgICAgIHJlc2V0VGVzdFN0YXRlKCk7XG4gICAgfSxcbiAgICBbc2V0Rm9ybURhdGEsIHJlc2V0VGVzdFN0YXRlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUFsaWFzQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGFsaWFzOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldEZvcm1EYXRhKChvbGQpID0+ICh7IC4uLm9sZCwgYWxpYXMgfSkpO1xuICAgICAgcmVzZXRUZXN0U3RhdGUoKTtcbiAgICB9LFxuICAgIFtzZXRGb3JtRGF0YSwgcmVzZXRUZXN0U3RhdGVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVXNlcm5hbWVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodXNlcm5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0Rm9ybURhdGEoKG9sZCkgPT4gKHsgLi4ub2xkLCB1c2VybmFtZSB9KSk7XG4gICAgICByZXNldFRlc3RTdGF0ZSgpO1xuICAgIH0sXG4gICAgW3NldEZvcm1EYXRhLCByZXNldFRlc3RTdGF0ZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVQYXNzd29yZENoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChwYXNzd29yZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRGb3JtRGF0YSgob2xkKSA9PiAoeyAuLi5vbGQsIHBhc3N3b3JkIH0pKTtcbiAgICAgIHJlc2V0VGVzdFN0YXRlKCk7XG4gICAgfSxcbiAgICBbc2V0Rm9ybURhdGEsIHJlc2V0VGVzdFN0YXRlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIC8vIEdldCBzdG9yYWdlIGxvY2F0aW9uXG4gICAgY29uc3QgbG9jYXRpb25LZXkgPSBnZXRGcm9tTG9jYWxTdG9yYWdlKCdDUkVERU5USUFMX0xPQ0FUSU9OJywgTG9jYXRpb25zLkJBQ0tFTkQua2V5KTtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaVxuICAgICAgICAuY3JlYXRlVGFyZ2V0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbm5lY3RVcmw6IGNvbm5lY3RVcmwsXG4gICAgICAgICAgICBhbGlhczogYWxpYXMudHJpbSgpIHx8IGNvbm5lY3RVcmwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgICBsb2NhdGlvbktleSA9PT0gTG9jYXRpb25zLkJBQ0tFTkQua2V5XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeyBzdGF0dXMsIGJvZHkgfSkgPT4ge1xuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGlzSHR0cE9rKHN0YXR1cykgPyBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MgOiBWYWxpZGF0ZWRPcHRpb25zLmVycm9yO1xuICAgICAgICAgIGlmIChvcHRpb24gPT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgaGlzdG9yeS5wdXNoKCcvdG9wb2xvZ3knKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGJvZHlbJ2RhdGEnXVsncmVhc29uJ10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfSwgW3NldExvYWRpbmcsIHNldFZhbGlkYXRpb24sIGFkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIGNvbm5lY3RVcmwsIGFsaWFzLCBoaXN0b3J5LCBjcmVkZW50aWFsc10pO1xuXG4gIGNvbnN0IHRlc3RUYXJnZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFpc1ZhbGlkVGFyZ2V0Q29ubmVjdFVSTChjb25uZWN0VXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBjb250ZXh0LmFwaVxuICAgICAgICAuY3JlYXRlVGFyZ2V0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbm5lY3RVcmw6IGNvbm5lY3RVcmwsXG4gICAgICAgICAgICBhbGlhczogYWxpYXMudHJpbSgpIHx8IGNvbm5lY3RVcmwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeyBzdGF0dXMsIGJvZHkgfSkgPT4ge1xuICAgICAgICAgIHNldFRlc3RpbmcoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGlzSHR0cE9rKHN0YXR1cykgPyBWYWxpZGF0ZWRPcHRpb25zLnN1Y2Nlc3MgOiBWYWxpZGF0ZWRPcHRpb25zLmVycm9yO1xuICAgICAgICAgIHNldFZhbGlkYXRpb24oe1xuICAgICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IG9wdGlvbiAhPT0gVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzID8gYm9keVsnZGF0YSddWydyZWFzb24nXSA6ICcnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgc2V0VGVzdGluZyh0cnVlKTtcbiAgICByZXNldFRlc3RTdGF0ZSgpO1xuICB9LCBbY29ubmVjdFVybCwgYWxpYXMsIGNyZWRlbnRpYWxzLCBhZGRTdWJzY3JpcHRpb24sIGNvbnRleHQuYXBpLCByZXNldFRlc3RTdGF0ZSwgc2V0VGVzdGluZ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IGhpc3RvcnkuZ29CYWNrKCksIFtoaXN0b3J5XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJlZmlsbGVkKSB7XG4gICAgICBjb25zdCB7IGNvbm5lY3RVcmwsIGFsaWFzLCB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHByZWZpbGxlZDtcbiAgICAgIHNldEZvcm1EYXRhKHtcbiAgICAgICAgY29ubmVjdFVybDogY29ubmVjdFVybCxcbiAgICAgICAgYWxpYXM6IGFsaWFzIHx8ICcnLFxuICAgICAgICB2YWxpZENvbm5lY3RVcmw6IGlzVmFsaWRUYXJnZXRDb25uZWN0VVJMKGNvbm5lY3RVcmwpID8gVmFsaWRhdGVkT3B0aW9ucy5zdWNjZXNzIDogVmFsaWRhdGVkT3B0aW9ucy5lcnJvcixcbiAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lIHx8ICcnLFxuICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQgfHwgJycsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtwcmVmaWxsZWRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQudGFyZ2V0cy50YXJnZXRzKCkuc3Vic2NyaWJlKCh0cykgPT4ge1xuICAgICAgICBjb25zdCBkaXNjb3ZlcmVkVGFyZ2V0cyA9IHRzLmZpbHRlcigodCkgPT4gdC5hbm5vdGF0aW9ucz8uY3J5b3N0YXRbJ1JFQUxNJ10gIT09ICdDdXN0b20gVGFyZ2V0cycpO1xuICAgICAgICBpZiAoZGlzY292ZXJlZFRhcmdldHMubGVuZ3RoKSB7XG4gICAgICAgICAgc2V0RXhhbXBsZShkaXNjb3ZlcmVkVGFyZ2V0c1swXS5jb25uZWN0VXJsKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBjb250ZXh0LnRhcmdldHMsIHNldEV4YW1wbGVdKTtcblxuICBjb25zdCByZXNwb25zaXZlU3BhbnMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIHtcbiAgICAgICAgeGwyOiA3IGFzIGdyaWRTcGFucyxcbiAgICAgICAgeGw6IDcgYXMgZ3JpZFNwYW5zLFxuICAgICAgICBsZzogNyBhcyBncmlkU3BhbnMsXG4gICAgICAgIG1kOiAxMiBhcyBncmlkU3BhbnMsXG4gICAgICAgIHNtOiAxMiBhcyBncmlkU3BhbnMsXG4gICAgICB9IGFzIFJlY29yZDwneGwyJyB8ICd4bCcgfCAnbGcnIHwgJ21kJyB8ICdzbScsIGdyaWRTcGFucz4sXG4gICAgICB7XG4gICAgICAgIHhsMjogNSBhcyBncmlkU3BhbnMsXG4gICAgICAgIHhsOiA1IGFzIGdyaWRTcGFucyxcbiAgICAgICAgbGc6IDUgYXMgZ3JpZFNwYW5zLFxuICAgICAgICBtZDogMTIgYXMgZ3JpZFNwYW5zLFxuICAgICAgICBzbTogMTIgYXMgZ3JpZFNwYW5zLFxuICAgICAgfSBhcyBSZWNvcmQ8J3hsMicgfCAneGwnIHwgJ2xnJyB8ICdtZCcgfCAnc20nLCBncmlkU3BhbnM+LFxuICAgIF0sXG4gICAgW11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCcmVhZGNydW1iUGFnZSBwYWdlVGl0bGU9eydDcmVhdGUgQ3VzdG9tIFRhcmdldCd9IGJyZWFkY3J1bWJzPXtbeyB0aXRsZTogJ1RvcG9sb2d5JywgcGF0aDogJy90b3BvbG9neScgfV19PlxuICAgICAgPENhcmQgaXNGdWxsSGVpZ2h0PlxuICAgICAgICA8Q2FyZFRpdGxlPkNyZWF0ZSBDdXN0b20gVGFyZ2V0PC9DYXJkVGl0bGU+XG4gICAgICAgIDxDYXJkQm9keT5cbiAgICAgICAgICA8Rm9ybSBjbGFzc05hbWU9XCJjb25zb2xlLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxHcmlkIGhhc0d1dHRlcj5cbiAgICAgICAgICAgICAgPEdyaWRJdGVtIHsuLi5yZXNwb25zaXZlU3BhbnNbMF19IG9yZGVyPXt7IGRlZmF1bHQ6ICcwJywgbGc6ICcwJywgeGw6ICcwJyB9fT5cbiAgICAgICAgICAgICAgICA8Rm9ybUFsZXJ0PlxuICAgICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJpbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICdOb3RlOiBJZiB0aGUgdGFyZ2V0IHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLCB1c2UgSk1YIENyZWRlbnRpYWwgT3B0aW9ucyB0byBwcm92aWRlIGNyZWRlbnRpYWxzLidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgICAgICAgICBpc0lubGluZVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm1BbGVydD5cbiAgICAgICAgICAgICAgICA8Rm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkNvbm5lY3Rpb24gVVJMXCJcbiAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIGZpZWxkSWQ9XCJjb25uZWN0LXVybFwiXG4gICAgICAgICAgICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICAgICAgICAgICAgPEZvcm1IZWxwZXJUZXh0IGlzSGlkZGVuPXtmYWxzZX0gY29tcG9uZW50PVwiZGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgSk1YIFNlcnZpY2UgVVJMLnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAge2V4YW1wbGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDbGlwYm9hcmRDb3B5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJUaXA9XCJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tUaXA9XCJDb3BpZWQhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiaW5saW5lLWNvbXBhY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4YW1wbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2xpcGJvYXJkQ29weT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvRm9ybUhlbHBlclRleHQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBoZWxwZXJUZXh0SW52YWxpZD17J0pNWCBTZXJ2aWNlIFVSTCBtdXN0IG5vdCBjb250YWluIGVtcHR5IHNwYWNlcy4nfVxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkPXt2YWxpZENvbm5lY3RVcmx9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXsnQ29ubmVjdGlvbiBVUkwnfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y29ubmVjdFVybH1cbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY29ubmVjdC11cmxcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17ZXhhbXBsZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNvbm5lY3RVcmxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmcgfHwgdGVzdGluZ31cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkPXt2YWxpZENvbm5lY3RVcmx9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImN0LWNvbm5lY3R1cmwtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgICAgICAgICA8Rm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkFsaWFzXCJcbiAgICAgICAgICAgICAgICAgIGZpZWxkSWQ9XCJhbGlhc1wiXG4gICAgICAgICAgICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICAgICAgICAgICAgPEZvcm1IZWxwZXJUZXh0IGlzSGlkZGVuPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbiBOaWNrbmFtZSAoc2FtZSBhcyBDb25uZWN0aW9uIFVSTCBpZiBub3Qgc3BlY2lmaWVkKS5cbiAgICAgICAgICAgICAgICAgICAgPC9Gb3JtSGVscGVyVGV4dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXthbGlhc31cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFsaWFzQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nIHx8IHRlc3Rpbmd9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImN0LWFsaWFzLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICAgICAgICAgICAgPEZvcm1Hcm91cD5cbiAgICAgICAgICAgICAgICAgIDxBY2NvcmRpb24gYXNEZWZpbml0aW9uTGlzdD17ZmFsc2V9IGRhdGEtcXVpY2tzdGFydC1pZD1cImN0LWNyZWRlbnRpYWwtZXhwYW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxBY2NvcmRpb25JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDxBY2NvcmRpb25Ub2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImV4cGFuZGFibGUtZm9ybV9fYWNjb3JkaW9uLXRvZ2dsZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17J2pteC1jcmVkZW50aWFsLW9wdGlvbid9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtleHBhbmRlZFNlY3Rpb25zLmluY2x1ZGVzKCdqbXgtY3JlZGVudGlhbC1vcHRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZUNyZWRlbnRpYWxGb3JtKCdqbXgtY3JlZGVudGlhbC1vcHRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9eydidXR0b24nfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImV4cGFuZGFibGUtZm9ybV9fdGl0bGVcIj5KTVggQ3JlZGVudGlhbCBPcHRpb25zPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQWNjb3JkaW9uVG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZXhwYW5kYWJsZS1mb3JtX19oZWxwLWJsb2NrIFwiIGlkPXsnam14LWNyZWRlbnRpYWwtb3B0aW9uLWRlc2NyaXB0aW9uJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIGNyZWRlbnRpYWxzIHRoYXQgQ3J5b3N0YXQgdXNlcyB0byBjb25uZWN0IHRvIHRhcmdldCBKVk1zIG92ZXIgSk1YLlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxBY2NvcmRpb25Db250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0hpZGRlbj17IWV4cGFuZGVkU2VjdGlvbnMuaW5jbHVkZXMoJ2pteC1jcmVkZW50aWFsLW9wdGlvbicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9eydleHBhbmRlZC1qbXgtY3JlZGVudGlhbC1vcHRpb24nfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9eydVc2VybmFtZSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImV4cGFuZGFibGUtZm9ybV9fZm9ybS1ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlclRleHQ9ezxGb3JtSGVscGVyVGV4dCBpc0hpZGRlbj17ZmFsc2V9PlVzZXJuYW1lIGZvciBKTVggY29ubmVjdGlvbi48L0Zvcm1IZWxwZXJUZXh0Pn1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9eydVc2VybmFtZSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3VzZXJuYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVVzZXJuYW1lQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2xvYWRpbmcgfHwgdGVzdGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjdC11c2VybmFtZS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9eydQYXNzd29yZCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImV4cGFuZGFibGUtZm9ybV9fZm9ybS1ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlclRleHQ9ezxGb3JtSGVscGVyVGV4dCBpc0hpZGRlbj17ZmFsc2V9PlBhc3N3b3JkIGZvciBKTVggY29ubmVjdGlvbi48L0Zvcm1IZWxwZXJUZXh0Pn1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwYXNzd29yZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtsb2FkaW5nIHx8IHRlc3Rpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVBhc3N3b3JkQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cImN0LXBhc3N3b3JkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQWNjb3JkaW9uQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9BY2NvcmRpb25JdGVtPlxuICAgICAgICAgICAgICAgICAgPC9BY2NvcmRpb24+XG4gICAgICAgICAgICAgICAgPC9Gb3JtR3JvdXA+XG4gICAgICAgICAgICAgIDwvR3JpZEl0ZW0+XG4gICAgICAgICAgICAgIDxHcmlkSXRlbSB7Li4ucmVzcG9uc2l2ZVNwYW5zWzFdfSBvcmRlcj17eyBkZWZhdWx0OiAnMScsIGxnOiAnMScsIHhsOiAnMScsIG1kOiAnMScgfX0+XG4gICAgICAgICAgICAgICAgPFNhbXBsZU5vZGVEb251dCB0YXJnZXQ9e3RhcmdldH0gdmFsaWRhdGlvbj17dmFsaWRhdGlvbn0gdGVzdGluZz17dGVzdGluZ30gb25DbGljaz17dGVzdFRhcmdldH0gLz5cbiAgICAgICAgICAgICAgPC9HcmlkSXRlbT5cbiAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgIDxBY3Rpb25Hcm91cD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXshY29ubmVjdFVybCB8fCB2YWxpZENvbm5lY3RVcmwgIT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2VzcyB8fCBsb2FkaW5nIHx8IHRlc3Rpbmd9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgIHsuLi5jcmVhdGVCdXR0b25Mb2FkaW5nUHJvcHN9XG4gICAgICAgICAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwiY3QtY3JlYXRlLWJ0blwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bG9hZGluZyA/IHQoJ0NSRUFUSU5HJywgeyBuczogJ2NvbW1vbicgfSkgOiB0KCdDUkVBVEUnLCB7IG5zOiAnY29tbW9uJyB9KX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9e2hhbmRsZUNhbmNlbH0+XG4gICAgICAgICAgICAgICAge3QoJ0NBTkNFTCcsIHsgbnM6ICdjb21tb24nIH0pfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvQWN0aW9uR3JvdXA+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICA8L0NhcmRCb2R5PlxuICAgICAgPC9DYXJkPlxuICAgICAgPD48Lz5cbiAgICA8L0JyZWFkY3J1bWJQYWdlPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTYW1wbGVOb2RlRG9udXRQcm9wcyB7XG4gIHRhcmdldDogVGFyZ2V0O1xuICB0ZXN0aW5nPzogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbjoge1xuICAgIG9wdGlvbjogVmFsaWRhdGVkT3B0aW9ucztcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgfTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFNhbXBsZU5vZGVEb251dDogUmVhY3QuRkM8U2FtcGxlTm9kZURvbnV0UHJvcHM+ID0gKHtcbiAgdGFyZ2V0LFxuICBjbGFzc05hbWUsXG4gIHRlc3RpbmcsXG4gIHZhbGlkYXRpb24sXG4gIG9uQ2xpY2ssXG59KSA9PiB7XG4gIGNvbnN0IF90cmFuc2Zvcm1lZFRhcmdldCA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKHsgY29ubmVjdFVybDogdGFyZ2V0LmNvbm5lY3RVcmwsIGFsaWFzOiB0YXJnZXQuYWxpYXMudHJpbSgpIHx8IHRhcmdldC5jb25uZWN0VXJsIH0pLFxuICAgIFt0YXJnZXRdXG4gICk7XG5cbiAgY29uc3QgX2FjdGlvbkVuYWJsZWQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGlzVmFsaWRUYXJnZXRDb25uZWN0VVJMKHRhcmdldC5jb25uZWN0VXJsKSwgW3RhcmdldF0pO1xuXG4gIGNvbnN0IHN0YXR1c0ljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodGVzdGluZykge1xuICAgICAgcmV0dXJuIHsgaWNvbjogPFN5bmNBbHRJY29uIC8+LCBtZXNzYWdlOiAnVGVzdGluZyBjdXN0b20gdGFyZ2V0IGRlZmluaXRpb24uJyB9O1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbi5vcHRpb24gPT09IFZhbGlkYXRlZE9wdGlvbnMuc3VjY2Vzc1xuICAgICAgPyB7XG4gICAgICAgICAgaWNvbjogPENoZWNrQ2lyY2xlSWNvbiBjb2xvcj1cInZhcigtLXBmLWdsb2JhbC0tc3VjY2Vzcy1jb2xvci0tMTAwKVwiIC8+LFxuICAgICAgICAgIG1lc3NhZ2U6ICdUYXJnZXQgZGVmaW5pdGlvbiBpcyB2YWxpZC4nLFxuICAgICAgICB9XG4gICAgICA6IHZhbGlkYXRpb24ub3B0aW9uID09PSBWYWxpZGF0ZWRPcHRpb25zLmVycm9yXG4gICAgICA/IHtcbiAgICAgICAgICBpY29uOiA8RXhjbGFtYXRpb25DaXJjbGVJY29uIGNvbG9yPVwidmFyKC0tcGYtZ2xvYmFsLS1kYW5nZXItY29sb3ItLTEwMClcIiAvPixcbiAgICAgICAgICBtZXNzYWdlOiB2YWxpZGF0aW9uLmVycm9yTWVzc2FnZSxcbiAgICAgICAgfVxuICAgICAgOiB7IGljb246IDxQZW5kaW5nSWNvbiAvPiwgbWVzc2FnZTogJycgfTtcbiAgfSwgW3ZhbGlkYXRpb24sIHRlc3RpbmddKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7dmFsaWRhdGlvbi5vcHRpb24gPT09IFZhbGlkYXRlZE9wdGlvbnMuZXJyb3IgJiYgKFxuICAgICAgICA8Rm9ybUFsZXJ0PlxuICAgICAgICAgIDxBbGVydCBhcmlhLWxpdmU9XCJwb2xpdGVcIiBpc0lubGluZSB0aXRsZT17dmFsaWRhdGlvbi5lcnJvck1lc3NhZ2V9IHZhcmlhbnQ9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgIHsnQ2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gVVJMIGlzIHZhbGlkLiBTcGVjaWZ5IHRoZSBjb3JyZWN0IGNyZWRlbnRpYWxzIGluIGNhc2Ugb2YgYXV0aGVudGljYXRpb24gZmFpbHVyZS4nfVxuICAgICAgICAgIDwvQWxlcnQ+XG4gICAgICAgIDwvRm9ybUFsZXJ0PlxuICAgICAgKX1cbiAgICAgIDxGbGV4IGNsYXNzTmFtZT17Y3NzKGNsYXNzTmFtZSl9IGRpcmVjdGlvbj17eyBkZWZhdWx0OiAnY29sdW1uJyB9fT5cbiAgICAgICAgPEZsZXhcbiAgICAgICAgICBhbGlnblNlbGY9e3sgZGVmYXVsdDogJ2FsaWduU2VsZkNlbnRlcicgfX1cbiAgICAgICAgICBkaXJlY3Rpb249e3sgZGVmYXVsdDogJ2NvbHVtbicgfX1cbiAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJjdC1zYW1wbGUtdGVzdG5vZGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPEZsZXhJdGVtIGFsaWduU2VsZj17eyBkZWZhdWx0OiAnYWxpZ25TZWxmQ2VudGVyJyB9fT5cbiAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgIGFwcGVuZFRvPXtwb3J0YWxSb290fVxuICAgICAgICAgICAgICBjb250ZW50PXtcbiAgICAgICAgICAgICAgICBfYWN0aW9uRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgPyBgQ2xpY2sgdG8gdGVzdCR7dmFsaWRhdGlvbi5vcHRpb24gIT09IFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdCA/ICcgYWdhaW4nIDogJyd9LmBcbiAgICAgICAgICAgICAgICAgIDogJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgQ29ubmVjdGlvbiBVUkwuJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzcygnc2FtcGxlLW5vZGUtZG9udXRfX25vZGUtd3JhcHBlcicsIGAke19hY3Rpb25FbmFibGVkID8gJ2FjdGl2ZScgOiAnJ31gKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtfYWN0aW9uRW5hYmxlZCA/IG9uQ2xpY2sgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgZGF0YS1xdWlja3N0YXJ0LWlkPVwiY3Qtc2FtcGxlLXRlc3Rub2RlLWljb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3MoXG4gICAgICAgICAgICAgICAgICAgICdzYW1wbGUtbm9kZS1kb251dF9fbm9kZS1pY29uJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi5vcHRpb24gIT09IFZhbGlkYXRlZE9wdGlvbnMuZGVmYXVsdCA/IHZhbGlkYXRpb24ub3B0aW9uIDogJydcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEJ1bGxzZXllPnt0ZXN0aW5nID8gPExpbmVhckRvdFNwaW5uZXIgLz4gOiA8aW1nIHNyYz17b3Blbmpka1N2Z30gYWx0PVwiQ3J5b3N0YXQgTG9nb1wiIC8+fTwvQnVsbHNleWU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydzYW1wbGUtbm9kZS1kb251dF9fc3RhdHVzLWluZGljYXRvcid9PntzdGF0dXNJY29uLmljb259PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgPEZsZXhJdGVtIGFsaWduU2VsZj17eyBkZWZhdWx0OiAnYWxpZ25TZWxmQ2VudGVyJyB9fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MoJ3NhbXBsZS1ub2RlLWRvbnV0X19ub2RlLWxhYmVsJyl9PlxuICAgICAgICAgICAgICA8VG9vbHRpcCBjb250ZW50PXsnQ3VzdG9tIFRhcmdldCd9IGFwcGVuZFRvPXtwb3J0YWxSb290fT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzYW1wbGUtbm9kZS1kb251dF9fbm9kZS1sYWJlbC1iYWRnZVwiPnsnQ1QnfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICB7X3RyYW5zZm9ybWVkVGFyZ2V0LmFsaWFzIHx8ICc8TmFtZT4nfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgPC9GbGV4PlxuICAgICAgICA8RmxleEl0ZW0gYWxpZ25TZWxmPXt7IGRlZmF1bHQ6ICdhbGlnblNlbGZDZW50ZXInIH19PlxuICAgICAgICAgIDxIZWxwZXJUZXh0PlxuICAgICAgICAgICAgPEhlbHBlclRleHRJdGVtPkNsaWNrIG9uIHRoZSBzYW1wbGUgbm9kZSBhYm92ZSB0byB0ZXN0IGN1c3RvbSB0YXJnZXQgZGVmaW5pdGlvbi48L0hlbHBlclRleHRJdGVtPlxuICAgICAgICAgIDwvSGVscGVyVGV4dD5cbiAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgIDwvRmxleD5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENyZWF0ZVRhcmdldDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgVG9wb2xvZ3lGaWx0ZXJzIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvRmlsdGVycy9Ub3BvbG9neUZpbHRlclNsaWNlJztcbmltcG9ydCB7IEJhZGdlLCBGbGV4LCBGbGV4SXRlbSwgTGFiZWwsIExhYmVsR3JvdXAsIFRyZWVWaWV3RGF0YUl0ZW0gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEFjdGlvbkRyb3Bkb3duIH0gZnJvbSAnLi4vQWN0aW9ucy9Ob2RlQWN0aW9ucyc7XG5pbXBvcnQgRW50aXR5RGV0YWlscyBmcm9tICcuLi9TaGFyZWQvRW50aXR5L0VudGl0eURldGFpbHMnO1xuaW1wb3J0IHtcbiAgYWN0aW9uRmFjdG9yeSxcbiAgQ09MTEFQU0VfRVhFTVBUUyxcbiAgZ2V0QWxsTGVhdmVzLFxuICBnZXRVbmlxdWVHcm91cElkLFxuICBnZXRVbmlxdWVUYXJnZXRJZCxcbiAgaXNHcm91cE5vZGVGaWx0ZXJlZCxcbiAgaXNUYXJnZXRNYXRjaGVkLFxuICBpc1RhcmdldE5vZGVGaWx0ZXJlZCxcbiAgVHJhbnNmb3JtQ29uZmlnLFxufSBmcm9tICcuLi9TaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnROb2RlLCBpc1RhcmdldE5vZGUsIE5vZGVUeXBlLCBUYXJnZXROb2RlIH0gZnJvbSAnLi4vdHlwaW5ncyc7XG5cbmNvbnN0IF90cmFuc2Zvcm1EYXRhR3JvdXBlZEJ5VG9wTGV2ZWwgPSAoXG4gIHVuaXZlcnNlOiBFbnZpcm9ubWVudE5vZGUsXG4gIGZpbHRlcnM/OiBUb3BvbG9neUZpbHRlcnMsXG4gIHNlYXJjaEV4cHJlc3Npb24gPSAnJ1xuKTogVHJlZVZpZXdEYXRhSXRlbVtdID0+IHtcbiAgcmV0dXJuIHVuaXZlcnNlLmNoaWxkcmVuXG4gICAgLmZpbHRlcigocmVhbG06IEVudmlyb25tZW50Tm9kZSkgPT4gaXNHcm91cE5vZGVGaWx0ZXJlZChyZWFsbSwgZmlsdGVycz8uZ3JvdXBGaWx0ZXJzLmZpbHRlcnMpKVxuICAgIC5tYXAoKHJlYWxtOiBFbnZpcm9ubWVudE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgIGlkOiBnZXRVbmlxdWVHcm91cElkKHJlYWxtKSxcbiAgICAgICAgbmFtZTogKFxuICAgICAgICAgIDxMYWJlbEdyb3VwIGNhdGVnb3J5TmFtZT1cIkxhYmVsc1wiPlxuICAgICAgICAgICAge09iamVjdC5rZXlzKHJlYWxtLmxhYmVscylcbiAgICAgICAgICAgICAgLm1hcCgoaykgPT4gYCR7a309JHtyZWFsbS5sYWJlbHNba119YClcbiAgICAgICAgICAgICAgLm1hcCgobCkgPT4gKFxuICAgICAgICAgICAgICAgIDxMYWJlbCBrZXk9e2x9IGlzQ29tcGFjdCBjb2xvcj1cImJsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHtsfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvTGFiZWxHcm91cD5cbiAgICAgICAgKSxcbiAgICAgICAgY2hpbGRyZW46IGdldEFsbExlYXZlcyhyZWFsbSlcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGNoaWxkOiBUYXJnZXROb2RlKSA9PlxuICAgICAgICAgICAgICBpc1RhcmdldE5vZGVGaWx0ZXJlZChjaGlsZCwgZmlsdGVycz8udGFyZ2V0RmlsdGVycy5maWx0ZXJzKSAmJlxuICAgICAgICAgICAgICAoc2VhcmNoRXhwcmVzc2lvbiA9PT0gJycgfHwgaXNUYXJnZXRNYXRjaGVkKGNoaWxkLCBzZWFyY2hFeHByZXNzaW9uKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgoY2hpbGQ6IFRhcmdldE5vZGUpID0+ICh7XG4gICAgICAgICAgICBpZDogYCR7Y2hpbGQubmFtZX0td3JhcHBlcmAsXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBjaGlsZC5uYW1lLFxuICAgICAgICAgICAgICAgIG5hbWU6IChcbiAgICAgICAgICAgICAgICAgIDxFbnRpdHlEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRvcG9sb2d5X19saXN0LXZpZXdfX2VudGl0eS1kZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5PXt7IGdldERhdGE6ICgpID0+IGNoaWxkIH19XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk1vZGlmaWVyPXt7IGRlZmF1bHQ6ICczQ29sJyB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRpdGxlOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2NoaWxkLnRhcmdldC5hbGlhc31cbiAgICAgICAgICAgICAgICA8QmFkZ2Ugc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT57Y2hpbGQubm9kZVR5cGV9PC9CYWRnZT5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pKSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHRpdGxlOiAoXG4gICAgICAgICAgPEZsZXg+XG4gICAgICAgICAgICA8RmxleEl0ZW0gZmxleD17eyBkZWZhdWx0OiAnZmxleF8xJyB9fT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidG9wb2xvZ3ktbGlzdHZpZXdfX3JlYWxtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3JlYWxtLm5vZGVUeXBlfToge3JlYWxtLm5hbWV9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPEJhZGdlPntiYXNlLmNoaWxkcmVuLmxlbmd0aH08L0JhZGdlPlxuICAgICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgICAgIDxGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPEFjdGlvbkRyb3Bkb3duXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZW50aXR5LW92ZXJ2aWV3X19hY3Rpb24tbWVudVwiXG4gICAgICAgICAgICAgICAgYWN0aW9ucz17YWN0aW9uRmFjdG9yeSh7IGdldERhdGE6ICgpID0+IHJlYWxtIH0sICdkcm9wZG93bkl0ZW0nKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRmxleEl0ZW0+XG4gICAgICAgICAgPC9GbGV4PlxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKF90cmFuc2Zvcm1SZWFsbSkgPT4gX3RyYW5zZm9ybVJlYWxtLmNoaWxkcmVuICYmIF90cmFuc2Zvcm1SZWFsbS5jaGlsZHJlbi5sZW5ndGgpO1xufTtcblxuY29uc3QgX2J1aWxkRnVsbERhdGEgPSAoXG4gIG5vZGU6IEVudmlyb25tZW50Tm9kZSB8IFRhcmdldE5vZGUsXG4gIGV4cGFuZE1vZGUgPSB0cnVlLFxuICBmaWx0ZXJzPzogVG9wb2xvZ3lGaWx0ZXJzLFxuICBzZWFyY2hFeHByZXNzaW9uID0gJydcbik6IFRyZWVWaWV3RGF0YUl0ZW1bXSA9PiB7XG4gIGlmIChpc1RhcmdldE5vZGUobm9kZSkpIHtcbiAgICBpZiAoXG4gICAgICAhaXNUYXJnZXROb2RlRmlsdGVyZWQobm9kZSwgZmlsdGVycz8udGFyZ2V0RmlsdGVycy5maWx0ZXJzKSB8fFxuICAgICAgKHNlYXJjaEV4cHJlc3Npb24gIT09ICcnICYmICFpc1RhcmdldE1hdGNoZWQobm9kZSwgc2VhcmNoRXhwcmVzc2lvbikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IGAke25vZGUubmFtZX0td3JhcHBlcmAsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIC8vIEJyZWFrIHRhcmdldCBkZXRhaWxzIHRvIGFub3RoZXIgbGV2ZWwgdG8gYWxsb3cgZXhwYW5kL2NvbGxhcHNlXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IGdldFVuaXF1ZVRhcmdldElkKG5vZGUpLFxuICAgICAgICAgICAgbmFtZTogKFxuICAgICAgICAgICAgICA8RW50aXR5RGV0YWlsc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRvcG9sb2d5X19saXN0LXZpZXdfX2VudGl0eS1kZXRhaWxzXCJcbiAgICAgICAgICAgICAgICBlbnRpdHk9e3sgZ2V0RGF0YTogKCkgPT4gbm9kZSB9fVxuICAgICAgICAgICAgICAgIGNvbHVtbk1vZGlmaWVyPXt7IGRlZmF1bHQ6ICczQ29sJyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0aXRsZTogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7bm9kZS50YXJnZXQuYWxpYXN9XG4gICAgICAgICAgICA8QmFkZ2Ugc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT57bm9kZS5ub2RlVHlwZX08L0JhZGdlPlxuICAgICAgICAgIDwvPlxuICAgICAgICApLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgY29uc3QgSU5JVDogVHJlZVZpZXdEYXRhSXRlbVtdID0gW107XG4gIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoXG4gICAgKHByZXYsIGN1cnIpID0+IHByZXYuY29uY2F0KF9idWlsZEZ1bGxEYXRhKGN1cnIsIGV4cGFuZE1vZGUsIGZpbHRlcnMsIHNlYXJjaEV4cHJlc3Npb24pKSxcbiAgICBJTklUXG4gICk7XG5cbiAgLy8gRG8gc2hvdyBlbXB0eSBvciBmaWx0ZXJlZC1vdXQgZ3JvdXBzXG4gIGlmIChcbiAgICAhY2hpbGRyZW4ubGVuZ3RoIHx8XG4gICAgKG5vZGUubm9kZVR5cGUgIT09IE5vZGVUeXBlLlVOSVZFUlNFICYmICFpc0dyb3VwTm9kZUZpbHRlcmVkKG5vZGUsIGZpbHRlcnM/Lmdyb3VwRmlsdGVycy5maWx0ZXJzKSlcbiAgKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gQ29sbGFwc2Ugc2luZ2xlLWNoaWxkIGludGVybmFsIG5vZGVzIChyZWFsbXMgYW5kIG5hbWVzcGFjZXMgYXJlIGV4ZW1wdClcbiAgaWYgKCFDT0xMQVBTRV9FWEVNUFRTLmluY2x1ZGVzKG5vZGUubm9kZVR5cGUpICYmICFleHBhbmRNb2RlICYmIGNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBbLi4uY2hpbGRyZW5dO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBpZDogZ2V0VW5pcXVlR3JvdXBJZChub2RlKSxcbiAgICAgIHRpdGxlOiAoXG4gICAgICAgIDxGbGV4PlxuICAgICAgICAgIDxGbGV4SXRlbSBmbGV4PXt7IGRlZmF1bHQ6ICdmbGV4XzEnIH19PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidG9wb2xvZ3ktbGlzdHZpZXdfX3JlYWxtLXRpdGxlXCI+XG4gICAgICAgICAgICAgIHtub2RlLm5vZGVUeXBlfToge25vZGUubmFtZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxCYWRnZT57Y2hpbGRyZW4ubGVuZ3RofTwvQmFkZ2U+XG4gICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgICA8RmxleEl0ZW0+XG4gICAgICAgICAgICA8QWN0aW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZW50aXR5LW92ZXJ2aWV3X19hY3Rpb24tbWVudVwiXG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FjdGlvbkZhY3RvcnkoeyBnZXREYXRhOiAoKSA9PiBub2RlIH0sICdkcm9wZG93bkl0ZW0nKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9GbGV4SXRlbT5cbiAgICAgICAgPC9GbGV4PlxuICAgICAgKSxcbiAgICAgIG5hbWU6IChcbiAgICAgICAgPExhYmVsR3JvdXAgY2F0ZWdvcnlOYW1lPVwiTGFiZWxzXCI+XG4gICAgICAgICAge09iamVjdC5rZXlzKG5vZGUubGFiZWxzKVxuICAgICAgICAgICAgLm1hcCgoaykgPT4gYCR7a309JHtub2RlLmxhYmVsc1trXX1gKVxuICAgICAgICAgICAgLm1hcCgobCkgPT4gKFxuICAgICAgICAgICAgICA8TGFiZWwga2V5PXtsfSBpc0NvbXBhY3QgY29sb3I9XCJibHVlXCI+XG4gICAgICAgICAgICAgICAge2x9XG4gICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9MYWJlbEdyb3VwPlxuICAgICAgKSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICB9LFxuICBdO1xufTtcblxuY29uc3QgX3RyYW5zZm9ybURhdGFGdWxsID0gKFxuICByb290OiBFbnZpcm9ubWVudE5vZGUsXG4gIGV4cGFuZE1vZGUgPSB0cnVlLFxuICBmaWx0ZXJzPzogVG9wb2xvZ3lGaWx0ZXJzLFxuICBzZWFyY2hFeHByZXNzaW9uID0gJydcbik6IFRyZWVWaWV3RGF0YUl0ZW1bXSA9PiB7XG4gIGNvbnN0IF90cmFuc2Zvcm1lZFJvb3QgPSBfYnVpbGRGdWxsRGF0YShyb290LCBleHBhbmRNb2RlLCBmaWx0ZXJzLCBzZWFyY2hFeHByZXNzaW9uKVswXTtcbiAgcmV0dXJuIF90cmFuc2Zvcm1lZFJvb3QgJiYgX3RyYW5zZm9ybWVkUm9vdC5jaGlsZHJlbiA/IF90cmFuc2Zvcm1lZFJvb3QuY2hpbGRyZW4gOiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1EYXRhID0gKFxuICB1bml2ZXJzZTogRW52aXJvbm1lbnROb2RlLFxuICB7IHNob3dPbmx5VG9wR3JvdXAgPSBmYWxzZSwgZXhwYW5kTW9kZSA9IHRydWUgfTogVHJhbnNmb3JtQ29uZmlnID0ge30sXG4gIGZpbHRlcnM/OiBUb3BvbG9neUZpbHRlcnMsXG4gIHNlYXJjaEV4cHJlc3Npb24gPSAnJ1xuKTogVHJlZVZpZXdEYXRhSXRlbVtdID0+IHtcbiAgcmV0dXJuIHNob3dPbmx5VG9wR3JvdXBcbiAgICA/IF90cmFuc2Zvcm1EYXRhR3JvdXBlZEJ5VG9wTGV2ZWwodW5pdmVyc2UsIGZpbHRlcnMsIHNlYXJjaEV4cHJlc3Npb24pXG4gICAgOiBfdHJhbnNmb3JtRGF0YUZ1bGwodW5pdmVyc2UsIGV4cGFuZE1vZGUsIGZpbHRlcnMsIHNlYXJjaEV4cHJlc3Npb24pO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgUm9vdFN0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBEaXZpZGVyLCBTdGFjaywgU3RhY2tJdGVtLCBUcmVlVmlldywgVHJlZVZpZXdEYXRhSXRlbSB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBUb3BvbG9neUVtcHR5U3RhdGUgfSBmcm9tICcuLi9TaGFyZWQvVG9wb2xvZ3lFbXB0eVN0YXRlJztcbmltcG9ydCB7IERpc2NvdmVyeVRyZWVDb250ZXh0LCBUcmFuc2Zvcm1Db25maWcsIHVzZVNlYXJjaEV4cHJlc3Npb24gfSBmcm9tICcuLi9TaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgVG9wb2xvZ3lUb29sYmFyLCBUb3BvbG9neVRvb2xiYXJWYXJpYW50IH0gZnJvbSAnLi4vVG9vbGJhci9Ub3BvbG9neVRvb2xiYXInO1xuaW1wb3J0IHsgdHJhbnNmb3JtRGF0YSB9IGZyb20gJy4vVXRpbHNGYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neUxpc3RWaWV3UHJvcHMge1xuICB0cmFuc2Zvcm1Db25maWc/OiBUcmFuc2Zvcm1Db25maWc7XG59XG5cbmV4cG9ydCBjb25zdCBUb3BvbG9neUxpc3RWaWV3OiBSZWFjdC5GQzxUb3BvbG9neUxpc3RWaWV3UHJvcHM+ID0gKHsgdHJhbnNmb3JtQ29uZmlnLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGRpc2NvdmVyeVRyZWUgPSBSZWFjdC51c2VDb250ZXh0KERpc2NvdmVyeVRyZWVDb250ZXh0KTtcblxuICBjb25zdCBmaWx0ZXJzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBSb290U3RhdGUpID0+IHN0YXRlLnRvcG9sb2d5RmlsdGVycyk7XG5cbiAgY29uc3QgW2V4cHJlc3Npb25dID0gdXNlU2VhcmNoRXhwcmVzc2lvbigxMDApO1xuXG4gIGNvbnN0IF90cmVlVmlld0RhdGE6IFRyZWVWaWV3RGF0YUl0ZW1bXSA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gdHJhbnNmb3JtRGF0YShkaXNjb3ZlcnlUcmVlLCB0cmFuc2Zvcm1Db25maWcsIGZpbHRlcnMsIGV4cHJlc3Npb24pLFxuICAgIFtkaXNjb3ZlcnlUcmVlLCB0cmFuc2Zvcm1Db25maWcsIGZpbHRlcnMsIGV4cHJlc3Npb25dXG4gICk7XG5cbiAgY29uc3QgaXNFbXB0eUxpc3QgPSBSZWFjdC51c2VNZW1vKCgpID0+ICFfdHJlZVZpZXdEYXRhLmxlbmd0aCwgW190cmVlVmlld0RhdGFdKTtcblxuICByZXR1cm4gKFxuICAgIDxTdGFjayB7Li4ucHJvcHN9PlxuICAgICAgPFN0YWNrSXRlbT5cbiAgICAgICAgPFRvcG9sb2d5VG9vbGJhciB2YXJpYW50PXtUb3BvbG9neVRvb2xiYXJWYXJpYW50Lkxpc3R9IC8+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIDxTdGFja0l0ZW0+XG4gICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICA8L1N0YWNrSXRlbT5cbiAgICAgIDxTdGFja0l0ZW0gaXNGaWxsZWQ+XG4gICAgICAgIHtpc0VtcHR5TGlzdCA/IChcbiAgICAgICAgICA8VG9wb2xvZ3lFbXB0eVN0YXRlIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFRyZWVWaWV3XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0b3BvbG9neV9fdHJlZXZpZXctY29udGFpbmVyXCJcbiAgICAgICAgICAgIGRhdGE9e190cmVlVmlld0RhdGF9XG4gICAgICAgICAgICB2YXJpYW50PVwiY29tcGFjdFwiXG4gICAgICAgICAgICBoYXNHdWlkZXNcbiAgICAgICAgICAgIGFsbEV4cGFuZGVkPXtleHByZXNzaW9uICE9PSAnJ31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9TdGFja0l0ZW0+XG4gICAgPC9TdGFjaz5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQnJlYWRjcnVtYlBhZ2UgfSBmcm9tICdAYXBwL0JyZWFkY3J1bWJQYWdlL0JyZWFkY3J1bWJQYWdlJztcbmltcG9ydCB7IEVycm9yVmlldyB9IGZyb20gJ0BhcHAvRXJyb3JWaWV3L0Vycm9yVmlldyc7XG5pbXBvcnQgeyBMaW5lYXJEb3RTcGlubmVyIH0gZnJvbSAnQGFwcC9TaGFyZWQvTGluZWFyRG90U3Bpbm5lcic7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L0NvbmZpZ3VyYXRpb25zL1RvcG9sb2d5Q29uZmlnU2xpY2UnO1xuaW1wb3J0IHsgUm9vdFN0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvUmVkdXgvUmVkdXhTdG9yZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DYXRlZ29yeSB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvbkNoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgQnVsbHNleWUsIENhcmQsIENhcmRCb2R5IH0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IFRvcG9sb2d5R3JhcGhWaWV3IH0gZnJvbSAnLi9HcmFwaFZpZXcvVG9wb2xvZ3lHcmFwaFZpZXcnO1xuaW1wb3J0IHsgVG9wb2xvZ3lMaXN0VmlldyB9IGZyb20gJy4vTGlzdFZpZXcvVG9wb2xvZ3lMaXN0Vmlldyc7XG5pbXBvcnQgeyBEaXNjb3ZlcnlUcmVlQ29udGV4dCwgU2VhcmNoRXhwclNlcnZpY2UsIFNlYXJjaEV4cHJTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vU2hhcmVkL3V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfRU1QVFlfVU5JVkVSU0UgfSBmcm9tICcuL3R5cGluZ3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5UHJvcHMge31cblxuZXhwb3J0IGNvbnN0IFRvcG9sb2d5OiBSZWFjdC5GQzxUb3BvbG9neVByb3BzPiA9ICh7IC4uLl9wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IHVzZVN1YnNjcmlwdGlvbnMoKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU2VydmljZUNvbnRleHQpO1xuICBjb25zdCBtYXRjaEV4cHJlUmVmID0gUmVhY3QudXNlUmVmKG5ldyBTZWFyY2hFeHByU2VydmljZSgpKTtcbiAgY29uc3QgZmlyc3RGZXRjaFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGZpcnN0RmV0Y2hlZCA9IGZpcnN0RmV0Y2hSZWYuY3VycmVudDtcblxuICBjb25zdCBkaXNwbGF5T3B0aW9ucyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiBzdGF0ZS50b3BvbG9neUNvbmZpZ3MuZGlzcGxheU9wdGlvbnMpO1xuICBjb25zdCB7IGdyb3VwaW5ncyB9ID0gZGlzcGxheU9wdGlvbnM7XG4gIGNvbnN0IHRyYW5zZm9ybUNvbmZpZyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKHsgc2hvd09ubHlUb3BHcm91cDogZ3JvdXBpbmdzLnJlYWxtT25seSwgZXhwYW5kTW9kZTogIWdyb3VwaW5ncy5jb2xsYXBzZVNpbmdsZXMgfSksXG4gICAgW2dyb3VwaW5nc11cbiAgKTtcblxuICBjb25zdCBbZGlzY292ZXJ5VHJlZSwgc2V0RGlzY292ZXJ5VHJlZV0gPSBSZWFjdC51c2VTdGF0ZShERUZBVUxUX0VNUFRZX1VOSVZFUlNFKTtcblxuICBjb25zdCBpc0dyYXBoVmlldyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogUm9vdFN0YXRlKSA9PiB7XG4gICAgY29uc3QgX2N1cnJlbnRNb2RlOiBWaWV3TW9kZSA9IHN0YXRlLnRvcG9sb2d5Q29uZmlncy52aWV3TW9kZTtcbiAgICByZXR1cm4gX2N1cnJlbnRNb2RlID09PSAnZ3JhcGgnO1xuICB9KTtcblxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlPEVycm9yPigpO1xuXG4gIGNvbnN0IF9yZWZyZXNoRGlzY292ZXJ5VHJlZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChvblN1Y2Nlc3M/OiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICAgIGNvbnRleHQuYXBpLmdldERpc2NvdmVyeVRyZWUoKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICh0cmVlKSA9PiB7XG4gICAgICAgICAgICBvblN1Y2Nlc3MgJiYgb25TdWNjZXNzKCk7XG4gICAgICAgICAgICBzZXRFcnJvcih1bmRlZmluZWQpO1xuICAgICAgICAgICAgc2V0RGlzY292ZXJ5VHJlZSh0cmVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FkZFN1YnNjcmlwdGlvbiwgY29udGV4dC5hcGksIHNldERpc2NvdmVyeVRyZWUsIHNldEVycm9yXVxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWRkU3Vic2NyaXB0aW9uKFxuICAgICAgLy8gQ3JlZGVudGlhbHMgd2lsbCB0cmlnZ2VyIG1vZGlmZWQgdGFyZ2V0IGV2ZW50IGlmIGFueVxuICAgICAgY29udGV4dC5ub3RpZmljYXRpb25DaGFubmVsXG4gICAgICAgIC5tZXNzYWdlcyhOb3RpZmljYXRpb25DYXRlZ29yeS5UYXJnZXRKdm1EaXNjb3ZlcnkpXG4gICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IF9yZWZyZXNoRGlzY292ZXJ5VHJlZSgpKVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQubm90aWZpY2F0aW9uQ2hhbm5lbCwgX3JlZnJlc2hEaXNjb3ZlcnlUcmVlXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBfcmVmcmVzaERpc2NvdmVyeVRyZWUoKCkgPT4gKGZpcnN0RmV0Y2hSZWYuY3VycmVudCA9IHRydWUpKTtcbiAgfSwgW19yZWZyZXNoRGlzY292ZXJ5VHJlZSwgZmlyc3RGZXRjaFJlZl0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gd2luZG93LnNldEludGVydmFsKFxuICAgICAgKCkgPT4gX3JlZnJlc2hEaXNjb3ZlcnlUcmVlKCksXG4gICAgICBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoUGVyaW9kKCkgKiBjb250ZXh0LnNldHRpbmdzLmF1dG9SZWZyZXNoVW5pdHMoKVxuICAgICk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGlkKTtcbiAgfSwgW2NvbnRleHQuc2V0dGluZ3MsIF9yZWZyZXNoRGlzY292ZXJ5VHJlZV0pO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxCdWxsc2V5ZT5cbiAgICAgICAgICA8RXJyb3JWaWV3XG4gICAgICAgICAgICB0aXRsZT17J1VuYWJsZSBsb2FkIHRvcG9sb2d5IHZpZXcnfVxuICAgICAgICAgICAgbWVzc2FnZT17ZXJyb3IubWVzc2FnZX1cbiAgICAgICAgICAgIHJldHJ5PXsoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gaW5pdGlhbCBzdGF0ZVxuICAgICAgICAgICAgICBmaXJzdEZldGNoUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgc2V0RXJyb3IodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgX3JlZnJlc2hEaXNjb3ZlcnlUcmVlKCgpID0+IChmaXJzdEZldGNoUmVmLmN1cnJlbnQgPSB0cnVlKSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQnVsbHNleWU+XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghZmlyc3RGZXRjaGVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QnVsbHNleWU+XG4gICAgICAgICAgPExpbmVhckRvdFNwaW5uZXIgLz5cbiAgICAgICAgPC9CdWxsc2V5ZT5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWFyY2hFeHByU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21hdGNoRXhwcmVSZWYuY3VycmVudH0+XG4gICAgICAgIHtpc0dyYXBoVmlldyA/IChcbiAgICAgICAgICA8VG9wb2xvZ3lHcmFwaFZpZXcgdHJhbnNmb3JtQ29uZmlnPXt0cmFuc2Zvcm1Db25maWd9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFRvcG9sb2d5TGlzdFZpZXcgdHJhbnNmb3JtQ29uZmlnPXt0cmFuc2Zvcm1Db25maWd9IC8+XG4gICAgICAgICl9XG4gICAgICA8L1NlYXJjaEV4cHJTZXJ2aWNlQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9LCBbXG4gICAgaXNHcmFwaFZpZXcsXG4gICAgdHJhbnNmb3JtQ29uZmlnLFxuICAgIGZpcnN0RmV0Y2hlZCxcbiAgICBlcnJvcixcbiAgICBmaXJzdEZldGNoUmVmLFxuICAgIG1hdGNoRXhwcmVSZWYsXG4gICAgc2V0RXJyb3IsXG4gICAgX3JlZnJlc2hEaXNjb3ZlcnlUcmVlLFxuICBdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8QnJlYWRjcnVtYlBhZ2UgcGFnZVRpdGxlPXsnVG9wb2xvZ3knfSB7Li4uX3Byb3BzfT5cbiAgICAgICAgPENhcmQgaXNGdWxsSGVpZ2h0IGlkPVwidG9wb2xvZ3ktY2FyZFwiPlxuICAgICAgICAgIDxDYXJkQm9keSBzdHlsZT17eyBwYWRkaW5nOiAwIH19PlxuICAgICAgICAgICAgPERpc2NvdmVyeVRyZWVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtkaXNjb3ZlcnlUcmVlfT57Y29udGVudH08L0Rpc2NvdmVyeVRyZWVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgIDwvQ2FyZEJvZHk+XG4gICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPD48Lz5cbiAgICAgIDwvQnJlYWRjcnVtYlBhZ2U+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFRvcG9sb2d5KTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vLyBhIGN1c3RvbSBob29rIGZvciBzZXR0aW5nIHRoZSBwYWdlIHRpdGxlXG5leHBvcnQgZnVuY3Rpb24gdXNlRG9jdW1lbnRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxUaXRsZSA9IGRvY3VtZW50LnRpdGxlO1xuICAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQudGl0bGUgPSBvcmlnaW5hbFRpdGxlO1xuICAgIH07XG4gIH0sIFt0aXRsZV0pO1xufVxuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJvdXRlLCBSb3V0ZUNvbXBvbmVudFByb3BzLCBTd2l0Y2ggfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IExhc3RMb2NhdGlvblByb3ZpZGVyLCB1c2VMYXN0TG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItbGFzdC1sb2NhdGlvbic7XG5pbXBvcnQgQWJvdXQgZnJvbSAnLi9BYm91dC9BYm91dCc7XG5pbXBvcnQgQXJjaGl2ZXMgZnJvbSAnLi9BcmNoaXZlcy9BcmNoaXZlcyc7XG5pbXBvcnQgQ3JlYXRlUmVjb3JkaW5nIGZyb20gJy4vQ3JlYXRlUmVjb3JkaW5nL0NyZWF0ZVJlY29yZGluZyc7XG5pbXBvcnQgRGFzaGJvYXJkIGZyb20gJy4vRGFzaGJvYXJkL0Rhc2hib2FyZCc7XG5pbXBvcnQgRGFzaGJvYXJkU29sbyBmcm9tICcuL0Rhc2hib2FyZC9EYXNoYm9hcmRTb2xvJztcbmltcG9ydCBFdmVudHMgZnJvbSAnLi9FdmVudHMvRXZlbnRzJztcbmltcG9ydCBMb2dpbiBmcm9tICcuL0xvZ2luL0xvZ2luJztcbmltcG9ydCBOb3RGb3VuZCBmcm9tICcuL05vdEZvdW5kL05vdEZvdW5kJztcbmltcG9ydCBRdWlja1N0YXJ0cyBmcm9tICcuL1F1aWNrU3RhcnRzL1F1aWNrU3RhcnRzQ2F0YWxvZ1BhZ2UnO1xuaW1wb3J0IFJlY29yZGluZ3MgZnJvbSAnLi9SZWNvcmRpbmdzL1JlY29yZGluZ3MnO1xuaW1wb3J0IENyZWF0ZVJ1bGUgZnJvbSAnLi9SdWxlcy9DcmVhdGVSdWxlJztcbmltcG9ydCBSdWxlcyBmcm9tICcuL1J1bGVzL1J1bGVzJztcbmltcG9ydCBTZWN1cml0eVBhbmVsIGZyb20gJy4vU2VjdXJpdHlQYW5lbC9TZWN1cml0eVBhbmVsJztcbmltcG9ydCBTZXR0aW5ncyBmcm9tICcuL1NldHRpbmdzL1NldHRpbmdzJztcbmltcG9ydCB7IERlZmF1bHRGYWxsQmFjaywgRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vU2hhcmVkL0Vycm9yQm91bmRhcnknO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnLi9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgQ3JlYXRlVGFyZ2V0IGZyb20gJy4vVG9wb2xvZ3kvQWN0aW9ucy9DcmVhdGVUYXJnZXQnO1xuaW1wb3J0IFRvcG9sb2d5IGZyb20gJy4vVG9wb2xvZ3kvVG9wb2xvZ3knO1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRUaXRsZSB9IGZyb20gJy4vdXRpbHMvdXNlRG9jdW1lbnRUaXRsZSc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlTGV2ZWwgfSBmcm9tICcuL3V0aWxzL3VzZUZlYXR1cmVMZXZlbCc7XG5pbXBvcnQgeyB1c2VMb2dpbiB9IGZyb20gJy4vdXRpbHMvdXNlTG9naW4nO1xuaW1wb3J0IHsgYWNjZXNzaWJsZVJvdXRlQ2hhbmdlSGFuZGxlciB9IGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuXG5sZXQgcm91dGVGb2N1c1RpbWVyOiBudW1iZXI7XG5jb25zdCBPVkVSVklFVyA9ICdPdmVydmlldyc7XG5jb25zdCBDT05TT0xFID0gJ0NvbnNvbGUnO1xuY29uc3QgbmF2R3JvdXBzID0gW09WRVJWSUVXLCBDT05TT0xFXTtcblxuZXhwb3J0IGludGVyZmFjZSBJQXBwUm91dGUge1xuICBhbm9ueW1vdXM/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICBjb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8Um91dGVDb21wb25lbnRQcm9wczxhbnk+PiB8IFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PjtcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gIGV4YWN0PzogYm9vbGVhbjtcbiAgcGF0aDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZzsgLy8gbm9uLWVtcHR5IGRlc2NyaXB0aW9uIGlzIHVzZWQgdG8gZmlsdGVyIHJvdXRlcyBmb3IgdGhlIE5vdEZvdW5kIHBhZ2VcbiAgaXNBc3luYz86IGJvb2xlYW47XG4gIG5hdkdyb3VwPzogc3RyaW5nO1xuICBmZWF0dXJlTGV2ZWw/OiBGZWF0dXJlTGV2ZWw7XG4gIGNoaWxkcmVuPzogSUFwcFJvdXRlW107XG59XG5cbmNvbnN0IHJvdXRlczogSUFwcFJvdXRlW10gPSBbXG4gIHtcbiAgICBjb21wb25lbnQ6IEFib3V0LFxuICAgIGV4YWN0OiB0cnVlLFxuICAgIGxhYmVsOiAnQWJvdXQnLFxuICAgIHBhdGg6ICcvYWJvdXQnLFxuICAgIHRpdGxlOiAnQWJvdXQnLFxuICAgIGRlc2NyaXB0aW9uOiAnR2V0IGluZm9ybWF0aW9uLCBoZWxwLCBvciBzdXBwb3J0IGZvciBDcnlvc3RhdC4nLFxuICAgIG5hdkdyb3VwOiBPVkVSVklFVyxcbiAgICBhbm9ueW1vdXM6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBjb21wb25lbnQ6IERhc2hib2FyZCxcbiAgICBleGFjdDogdHJ1ZSxcbiAgICBsYWJlbDogJ0Rhc2hib2FyZCcsXG4gICAgcGF0aDogJy8nLFxuICAgIHRpdGxlOiAnRGFzaGJvYXJkJyxcbiAgICBuYXZHcm91cDogT1ZFUlZJRVcsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBEYXNoYm9hcmRTb2xvLFxuICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgcGF0aDogJy9kLXNvbG8nLFxuICAgICAgICB0aXRsZTogJ0Rhc2hib2FyZCcsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBjb21wb25lbnQ6IFF1aWNrU3RhcnRzLFxuICAgIGV4YWN0OiB0cnVlLFxuICAgIGxhYmVsOiAnUXVpY2sgU3RhcnRzJyxcbiAgICBwYXRoOiAnL3F1aWNrc3RhcnRzJyxcbiAgICB0aXRsZTogJ1F1aWNrIFN0YXJ0cycsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgc3RhcnRlZCB3aXRoIENyeW9zdGF0LicsXG4gIH0sXG4gIHtcbiAgICBjb21wb25lbnQ6IFRvcG9sb2d5LFxuICAgIGV4YWN0OiB0cnVlLFxuICAgIGxhYmVsOiAnVG9wb2xvZ3knLFxuICAgIHBhdGg6ICcvdG9wb2xvZ3knLFxuICAgIHRpdGxlOiAnVG9wb2xvZ3knLFxuICAgIG5hdkdyb3VwOiBPVkVSVklFVyxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IENyZWF0ZVRhcmdldCxcbiAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgIHBhdGg6ICcvdG9wb2xvZ3kvY3JlYXRlLWN1c3RvbS10YXJnZXQnLFxuICAgICAgICB0aXRsZTogJ0NyZWF0ZSBDdXN0b20gVGFyZ2V0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNvbXBvbmVudDogUnVsZXMsXG4gICAgZXhhY3Q6IHRydWUsXG4gICAgbGFiZWw6ICdBdXRvbWF0ZWQgUnVsZXMnLFxuICAgIHBhdGg6ICcvcnVsZXMnLFxuICAgIHRpdGxlOiAnQXV0b21hdGVkIFJ1bGVzJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdDcmVhdGUgcmVjb3JkaW5ncyBvbiBtdWx0aXBsZSB0YXJnZXQgSlZNcyBhdCBvbmNlIHVzaW5nIEF1dG9tYXRlZCBSdWxlcyBjb25zaXN0aW5nIG9mIGEgbmFtZSwgbWF0Y2ggZXhwcmVzc2lvbiwgdGVtcGxhdGUsIGFyY2hpdmFsIHBlcmlvZCwgYW5kIG1vcmUuJyxcbiAgICBuYXZHcm91cDogQ09OU09MRSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IENyZWF0ZVJ1bGUsXG4gICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICBwYXRoOiAnL3J1bGVzL2NyZWF0ZScsXG4gICAgICAgIHRpdGxlOiAnQ3JlYXRlIEF1dG9tYXRlZCBSdWxlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNvbXBvbmVudDogUmVjb3JkaW5ncyxcbiAgICBleGFjdDogdHJ1ZSxcbiAgICBsYWJlbDogJ1JlY29yZGluZ3MnLFxuICAgIHBhdGg6ICcvcmVjb3JkaW5ncycsXG4gICAgdGl0bGU6ICdSZWNvcmRpbmdzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSwgdmlldyBhbmQgYXJjaGl2ZSBKRlIgcmVjb3JkaW5ncyBvbiBzaW5nbGUgdGFyZ2V0IEpWTXMuJyxcbiAgICBuYXZHcm91cDogQ09OU09MRSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IENyZWF0ZVJlY29yZGluZyxcbiAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgIHBhdGg6ICcvcmVjb3JkaW5ncy9jcmVhdGUnLFxuICAgICAgICB0aXRsZTogJ0NyZWF0ZSBSZWNvcmRpbmcnLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY29tcG9uZW50OiBBcmNoaXZlcyxcbiAgICBleGFjdDogdHJ1ZSxcbiAgICBsYWJlbDogJ0FyY2hpdmVzJyxcbiAgICBwYXRoOiAnL2FyY2hpdmVzJyxcbiAgICB0aXRsZTogJ0FyY2hpdmVzJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdWaWV3IGFyY2hpdmVkIHJlY29yZGluZ3MgYWNyb3NzIGFsbCB0YXJnZXQgSlZNcywgYXMgd2VsbCBhcyB1cGxvYWQgcmVjb3JkaW5ncyBkaXJlY3RseSB0byB0aGUgYXJjaGl2ZS4nLFxuICAgIG5hdkdyb3VwOiBDT05TT0xFLFxuICB9LFxuICB7XG4gICAgY29tcG9uZW50OiBFdmVudHMsXG4gICAgZXhhY3Q6IHRydWUsXG4gICAgbGFiZWw6ICdFdmVudHMnLFxuICAgIHBhdGg6ICcvZXZlbnRzJyxcbiAgICB0aXRsZTogJ0V2ZW50cycsXG4gICAgZGVzY3JpcHRpb246ICdWaWV3IGF2YWlsYWJsZSBKRlIgZXZlbnQgdGVtcGxhdGVzIGFuZCB0eXBlcyBmb3IgdGFyZ2V0IEpWTXMsIGFzIHdlbGwgYXMgdXBsb2FkIGN1c3RvbSB0ZW1wbGF0ZXMuJyxcbiAgICBuYXZHcm91cDogQ09OU09MRSxcbiAgfSxcbiAge1xuICAgIGNvbXBvbmVudDogU2VjdXJpdHlQYW5lbCxcbiAgICBleGFjdDogdHJ1ZSxcbiAgICBsYWJlbDogJ1NlY3VyaXR5JyxcbiAgICBwYXRoOiAnL3NlY3VyaXR5JyxcbiAgICB0aXRsZTogJ1NlY3VyaXR5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1VwbG9hZCBTU0wgY2VydGlmaWNhdGVzIGZvciBDcnlvc3RhdCB0byB0cnVzdCB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCB0YXJnZXQgYXBwbGljYXRpb25zLicsXG4gICAgbmF2R3JvdXA6IENPTlNPTEUsXG4gIH0sXG4gIHtcbiAgICBhbm9ueW1vdXM6IHRydWUsXG4gICAgY29tcG9uZW50OiBTZXR0aW5ncyxcbiAgICBleGFjdDogdHJ1ZSxcbiAgICBwYXRoOiAnL3NldHRpbmdzJyxcbiAgICB0aXRsZTogJ1NldHRpbmdzJyxcbiAgICBkZXNjcmlwdGlvbjogJ1ZpZXcgb3IgbW9kaWZ5IENyeW9zdGF0IHdlYi1jbGllbnQgYXBwbGljYXRpb24gc2V0dGluZ3MuJyxcbiAgfSxcbiAge1xuICAgIGFub255bW91czogdHJ1ZSxcbiAgICBjb21wb25lbnQ6IExvZ2luLFxuICAgIC8vIHRoaXMgaXMgb25seSBkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZCBpbiBhbmQgaXMgdGhlIGxhc3Qgcm91dGUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IHBhdGgsIHNvIGl0IHdpbGwgYWx3YXlzIG1hdGNoXG4gICAgZXhhY3Q6IGZhbHNlLFxuICAgIHBhdGg6ICcvJyxcbiAgICB0aXRsZTogJ0NyeW9zdGF0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvZyBpbiB0byBDcnlvc3RhdCcsXG4gIH0sXG5dO1xuXG5jb25zdCBmbGF0dGVuID0gKHJvdXRlczogSUFwcFJvdXRlW10pOiBJQXBwUm91dGVbXSA9PiB7XG4gIGNvbnN0IHJldDogSUFwcFJvdXRlW10gPSBbXTtcbiAgZm9yIChjb25zdCByIG9mIHJvdXRlcykge1xuICAgIHJldC5wdXNoKHIpO1xuICAgIGlmIChyLmNoaWxkcmVuKSB7XG4gICAgICByZXQucHVzaCguLi5mbGF0dGVuKHIuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGEgY3VzdG9tIGhvb2sgZm9yIHNlbmRpbmcgZm9jdXMgdG8gdGhlIHByaW1hcnkgY29udGVudCBjb250YWluZXJcbi8vIGFmdGVyIGEgdmlldyBoYXMgbG9hZGVkIHNvIHRoYXQgc3Vic2VxdWVudCBwcmVzcyBvZiB0YWIga2V5XG4vLyBzZW5kcyBmb2N1cyBkaXJlY3RseSB0byByZWxldmFudCBjb250ZW50XG5jb25zdCB1c2VBMTF5Um91dGVDaGFuZ2UgPSAoaXNBc3luYzogYm9vbGVhbikgPT4ge1xuICBjb25zdCBsYXN0TmF2aWdhdGlvbiA9IHVzZUxhc3RMb2NhdGlvbigpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBc3luYyAmJiBsYXN0TmF2aWdhdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcm91dGVGb2N1c1RpbWVyID0gYWNjZXNzaWJsZVJvdXRlQ2hhbmdlSGFuZGxlcigpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChyb3V0ZUZvY3VzVGltZXIpO1xuICAgIH07XG4gIH0sIFtpc0FzeW5jLCBsYXN0TmF2aWdhdGlvbl0pO1xufTtcblxuY29uc3QgUm91dGVXaXRoVGl0bGVVcGRhdGVzID0gKHsgY29tcG9uZW50OiBDb21wb25lbnQsIGlzQXN5bmMgPSBmYWxzZSwgcGF0aCwgdGl0bGUsIC4uLnJlc3QgfTogSUFwcFJvdXRlKSA9PiB7XG4gIHVzZUExMXlSb3V0ZUNoYW5nZShpc0FzeW5jKTtcbiAgdXNlRG9jdW1lbnRUaXRsZSh0aXRsZSk7XG5cbiAgY29uc3QgcmVuZGVyRmFsbGJhY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgcmV0dXJuIDxEZWZhdWx0RmFsbEJhY2sgZXJyb3I9e2Vycm9yfSAvPjtcbiAgfSwgW10pO1xuXG4gIGZ1bmN0aW9uIHJvdXRlV2l0aFRpdGxlKHJvdXRlUHJvcHM6IFJvdXRlQ29tcG9uZW50UHJvcHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEVycm9yQm91bmRhcnkgcmVuZGVyRmFsbGJhY2s9e3JlbmRlckZhbGxiYWNrfT5cbiAgICAgICAgPENvbXBvbmVudCB7Li4ucmVzdH0gey4uLnJvdXRlUHJvcHN9IC8+XG4gICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiA8Um91dGUgcmVuZGVyPXtyb3V0ZVdpdGhUaXRsZX0gcGF0aD17cGF0aH0gLz47XG59O1xuXG5jb25zdCBQYWdlTm90Rm91bmQgPSAoeyB0aXRsZSB9OiB7IHRpdGxlOiBzdHJpbmcgfSkgPT4ge1xuICB1c2VEb2N1bWVudFRpdGxlKHRpdGxlKTtcbiAgcmV0dXJuIDxSb3V0ZSBjb21wb25lbnQ9e05vdEZvdW5kfSAvPjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEFwcFJvdXRlc1Byb3BzIHt9XG5cbmNvbnN0IEFwcFJvdXRlczogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8QXBwUm91dGVzUHJvcHM+ID0gKF8pID0+IHtcbiAgY29uc3QgbG9nZ2VkSW4gPSB1c2VMb2dpbigpO1xuICBjb25zdCBhY3RpdmVMZXZlbCA9IHVzZUZlYXR1cmVMZXZlbCgpO1xuXG4gIHJldHVybiAoXG4gICAgPExhc3RMb2NhdGlvblByb3ZpZGVyPlxuICAgICAgPFN3aXRjaD5cbiAgICAgICAge2ZsYXR0ZW4ocm91dGVzKVxuICAgICAgICAgIC5maWx0ZXIoKHIpID0+IChsb2dnZWRJbiA/IHIuY29tcG9uZW50ICE9PSBMb2dpbiA6IHIuYW5vbnltb3VzKSlcbiAgICAgICAgICAuZmlsdGVyKChyKSA9PiByLmZlYXR1cmVMZXZlbCA9PT0gdW5kZWZpbmVkIHx8IHIuZmVhdHVyZUxldmVsID49IGFjdGl2ZUxldmVsKVxuICAgICAgICAgIC5tYXAoKHsgcGF0aCwgZXhhY3QsIGNvbXBvbmVudCwgdGl0bGUsIGlzQXN5bmMgfSwgaWR4KSA9PiAoXG4gICAgICAgICAgICA8Um91dGVXaXRoVGl0bGVVcGRhdGVzXG4gICAgICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgIGV4YWN0PXtleGFjdH1cbiAgICAgICAgICAgICAgY29tcG9uZW50PXtjb21wb25lbnR9XG4gICAgICAgICAgICAgIGtleT17aWR4fVxuICAgICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICAgIGlzQXN5bmM9e2lzQXN5bmN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8UGFnZU5vdEZvdW5kIHRpdGxlPVwiNDA0IFBhZ2UgTm90IEZvdW5kXCIgLz5cbiAgICAgIDwvU3dpdGNoPlxuICAgIDwvTGFzdExvY2F0aW9uUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBBcHBSb3V0ZXMsIHJvdXRlcywgbmF2R3JvdXBzLCBmbGF0dGVuIH07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7XG4gIEFjdGlvbkxpc3QsXG4gIEFjdGlvbkxpc3RHcm91cCxcbiAgQWN0aW9uTGlzdEl0ZW0sXG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2FyZEJvZHksXG4gIENhcmRGb290ZXIsXG4gIENhcmRUaXRsZSxcbiAgU3BsaXQsXG4gIFNwbGl0SXRlbSxcbiAgVGV4dCxcbiAgVGV4dENvbnRlbnQsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRvb2x0aXBSZW5kZXJQcm9wcyB9IGZyb20gJ3JlYWN0LWpveXJpZGUnO1xuXG5jb25zdCBKb3lyaWRlVG9vbHRpcDogUmVhY3QuRkM8VG9vbHRpcFJlbmRlclByb3BzPiA9ICh7XG4gIGJhY2tQcm9wcyxcbiAgcHJpbWFyeVByb3BzLFxuICBza2lwUHJvcHMsXG4gIHRvb2x0aXBQcm9wcyxcbiAgaW5kZXgsXG4gIGlzTGFzdFN0ZXAsXG4gIHN0ZXAsXG4gIHNpemUsXG59KSA9PiB7XG4gIGNvbnN0IHsgdGl0bGUsIGNvbnRlbnQgfSA9IHN0ZXA7XG5cbiAgY29uc3QgaXNGaXJzdFN0ZXAgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gaW5kZXggPT0gMDtcbiAgfSwgW2luZGV4XSk7XG5cbiAgY29uc3QgZm9vdGVyID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTcGxpdCBoYXNHdXR0ZXIgc3R5bGU9e3sgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICB7IWlzRmlyc3RTdGVwICYmICFpc0xhc3RTdGVwICYmIChcbiAgICAgICAgICA8U3BsaXRJdGVtIGlzRmlsbGVkPlxuICAgICAgICAgICAgPFRleHRDb250ZW50PlxuICAgICAgICAgICAgICA8VGV4dCBjb21wb25lbnQ9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGBTdGVwICR7aW5kZXggLSAxfS8ke3NpemUgLSAzfWAgLy8gSW5kZXggc3RhcnRzIGF0IDAsIHRvdXIgc3RhcnRzIGF0IDIsIHRoZXJlIGFyZSAzIHN0ZXBzIHRoYXQgZG9uJ3QgbmVlZCBhIGZvb3RlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0Q29udGVudD5cbiAgICAgICAgICA8L1NwbGl0SXRlbT5cbiAgICAgICAgKX1cbiAgICAgICAgPFNwbGl0SXRlbT5cbiAgICAgICAgICA8QWN0aW9uTGlzdD5cbiAgICAgICAgICAgIDxBY3Rpb25MaXN0R3JvdXA+XG4gICAgICAgICAgICAgIDxBY3Rpb25MaXN0SXRlbT5cbiAgICAgICAgICAgICAgICB7aXNGaXJzdFN0ZXAgPyAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHsuLi5za2lwUHJvcHN9IHZhcmlhbnQ9XCJzZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgU2tpcCB0b3VyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB7Li4uYmFja1Byb3BzfSB2YXJpYW50PVwic2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIEJhY2tcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvQWN0aW9uTGlzdEl0ZW0+XG4gICAgICAgICAgICAgIDxBY3Rpb25MaXN0SXRlbT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHsuLi5wcmltYXJ5UHJvcHN9PlxuICAgICAgICAgICAgICAgICAgICB7aXNMYXN0U3RlcCA/ICdPa2F5LCBnb3QgaXQhJyA6IGlzRmlyc3RTdGVwID8gJ0dldCBTdGFydGVkJyA6ICdOZXh0J31cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9BY3Rpb25MaXN0SXRlbT5cbiAgICAgICAgICAgIDwvQWN0aW9uTGlzdEdyb3VwPlxuICAgICAgICAgIDwvQWN0aW9uTGlzdD5cbiAgICAgICAgPC9TcGxpdEl0ZW0+XG4gICAgICA8L1NwbGl0PlxuICAgICk7XG4gIH0sIFtpc0ZpcnN0U3RlcCwgaXNMYXN0U3RlcCwgYmFja1Byb3BzLCBwcmltYXJ5UHJvcHMsIHNraXBQcm9wcywgaW5kZXgsIHNpemVdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImpveXJpZGUtdG9vbHRpcFwiXG4gICAgICB7Li4udG9vbHRpcFByb3BzfVxuICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IGlzRmlyc3RTdGVwIHx8IGlzTGFzdFN0ZXAgPyAnNTB2aCcgOiAnMzR2aCcgfX1cbiAgICA+XG4gICAgICA8Q2FyZD5cbiAgICAgICAgPENhcmRUaXRsZSBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInIH19Pnt0aXRsZX08L0NhcmRUaXRsZT5cbiAgICAgICAgPENhcmRCb2R5IHN0eWxlPXt7IGZvbnRTaXplOiAnMWVtJyB9fT57Y29udGVudH08L0NhcmRCb2R5PlxuICAgICAgICB7aW5kZXggIT09IDEgJiYgPENhcmRGb290ZXI+e2Zvb3Rlcn08L0NhcmRGb290ZXI+fVxuICAgICAgPC9DYXJkPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSm95cmlkZVRvb2x0aXA7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCBjcnlvc3RhdExvZ28gZnJvbSAnQGFwcC9hc3NldHMvY3J5b3N0YXRfbG9nb192ZXJ0X3JnYl9kZWZhdWx0LnN2Zyc7XG5pbXBvcnQgY3J5b3N0YXRMb2dvRGFyayBmcm9tICdAYXBwL2Fzc2V0cy9jcnlvc3RhdF9sb2dvX3ZlcnRfcmdiX3JldmVyc2Uuc3ZnJztcbmltcG9ydCBidWlsZCBmcm9tICdAYXBwL2J1aWxkLmpzb24nO1xuaW1wb3J0IHsgdXNlSm95cmlkZSB9IGZyb20gJ0BhcHAvSm95cmlkZS9Kb3lyaWRlUHJvdmlkZXInO1xuaW1wb3J0IEpveXJpZGVUb29sdGlwIGZyb20gJ0BhcHAvSm95cmlkZS9Kb3lyaWRlVG9vbHRpcCc7XG5pbXBvcnQgeyBUaGVtZVNldHRpbmcgfSBmcm9tICdAYXBwL1NldHRpbmdzL1NldHRpbmdzVXRpbHMnO1xuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVRoZW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RKb3lyaWRlLCB7IENhbGxCYWNrUHJvcHMsIEFDVElPTlMsIEVWRU5UUywgU1RBVFVTIH0gZnJvbSAncmVhY3Qtam95cmlkZSc7XG5pbnRlcmZhY2UgQ3J5b3N0YXRKb3lyaWRlUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5jb25zdCBDcnlvc3RhdEpveXJpZGU6IFJlYWN0LkZDPENyeW9zdGF0Sm95cmlkZVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgc2V0U3RhdGUsXG4gICAgc3RhdGU6IHsgcnVuLCBzdGVwSW5kZXgsIHN0ZXBzIH0sXG4gICAgaXNOYXZCYXJPcGVuLFxuICB9ID0gdXNlSm95cmlkZSgpO1xuXG4gIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U3RhdGUoe1xuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+Q3J5b3N0YXQ8L3N0cm9uZz4gaXMgYSBjbG91ZC1iYXNlZCBwcm9maWxpbmcgYXBwbGljYXRpb24gZm9yIG1hbmFnaW5nIEpGUiByZWNvcmRpbmdzIGluXG4gICAgICAgICAgICAgICAgY29udGFpbmVyaXplZCBKYXZhIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgVGhlcmUgYXJlIG1hbnkgb3RoZXIgZmVhdHVyZXMgdGhhdCA8c3Ryb25nPkNyeW9zdGF0PC9zdHJvbmc+IHByb3ZpZGVzLCBzdWNoIGFzIHRoZSBhYmlsaXR5IHRvIGRvd25sb2FkXG4gICAgICAgICAgICAgICAgcmVjb3JkaW5ncywgZ2VuZXJhdGUgcmVwb3J0cywgYW5kIG1vcmUuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICksXG4gICAgICAgICAgcGxhY2VtZW50OiAnY2VudGVyJyxcbiAgICAgICAgICB0aXRsZTogKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dGhlbWUgPT09IFRoZW1lU2V0dGluZy5MSUdIVCA/IGNyeW9zdGF0TG9nbyA6IGNyeW9zdGF0TG9nb0Rhcmt9XG4gICAgICAgICAgICAgICAgYWx0PVwiQ3J5b3N0YXQgTG9nb1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0JvdHRvbTogJzFlbScgfX1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezMwMH1cbiAgICAgICAgICAgICAgICB3aWR0aD17MzAwfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aDE+XG4gICAgICAgICAgICAgICAgV2VsY29tZSB0byA8c3Ryb25nPkNyeW9zdGF0IHtidWlsZC52ZXJzaW9ufTwvc3Ryb25nPiFcbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICksXG4gICAgICAgICAgdGFyZ2V0OiAnYm9keScsXG4gICAgICAgICAgZGlzYWJsZUJlYWNvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRlbnQ6IDxwPk9wZW4gdGhlIG5hdmlnYXRpb24gYmFyITwvcD4sXG4gICAgICAgICAgdGFyZ2V0OiAnKltkYXRhLXRvdXItaWQ9XCJuYXYtdG9nZ2xlLWJ0blwiXScsXG4gICAgICAgICAgZGlzYWJsZUJlYWNvbjogdHJ1ZSxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIHNwb3RsaWdodENsaWNrczogdHJ1ZSxcbiAgICAgICAgICBwbGFjZW1lbnRCZWFjb246ICdyaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0Rhc2hib2FyZCBWaWV3JyxcbiAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICBUaGUgPHN0cm9uZz5EYXNoYm9hcmQ8L3N0cm9uZz4gcHJvdmlkZXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIENyeW9zdGF0IGFuZCB0aGUgdGFyZ2V0IEpWTSB3aXRoIHRoZVxuICAgICAgICAgICAgICAgIHVzZSBvZiA8c3Ryb25nPkRhc2hib2FyZCBDYXJkczwvc3Ryb25nPi5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgPHA+VGhlcmUgYXJlIHZhcmlvdXMgZGFzaGJvYXJkIGNhcmRzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZGlzcGxheSBkaWZmZXJlbnQgbWV0cmljcyBhbmQgY2hhcnRzLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICksXG4gICAgICAgICAgdGFyZ2V0OiAnKltkYXRhLXRvdXItaWQ9XCJkYXNoYm9hcmRcIl0nLFxuICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnVG9wb2xvZ3kgVmlldycsXG4gICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgVGhlIDxzdHJvbmc+VG9wb2xvZ3k8L3N0cm9uZz4gdmlldyBwcm92aWRlcyBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiBDcnlvc3RhdCBhbmQgdGhlIGRlcGxveW1lbnRcbiAgICAgICAgICAgICAgICBtb2RlbC4gU3RhcnQsIHN0b3AsIGFuZCBkZWxldGUgcmVjb3JkaW5ncyBvbiBtdWx0aXBsZSB0YXJnZXRzIGF0IGEgdGltZSBmcm9tIHRoaXMgdmlldy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YXJnZXQ6ICcqW2RhdGEtdG91ci1pZD1cInRvcG9sb2d5XCJdJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0F1dG9tYXRlZCBSdWxlcycsXG4gICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIENyZWF0ZSwgZGVsZXRlLCBlbmFibGUsIGFuZCB2aWV3IENyeW9zdGF0IDxzdHJvbmc+QXV0b21hdGVkIFJ1bGVzPC9zdHJvbmc+IGluIHRoaXMgdmlldy4gQXV0b21hdGVkIFJ1bGVzXG4gICAgICAgICAgICAgIGFsbG93IHlvdSBzdGFydCByZWNvcmRpbmdzIG9uIHRhcmdldCBKVk1zIGJhc2VkIG9uIGEgc2V0IG9mIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YXJnZXQ6ICcqW2RhdGEtdG91ci1pZD1cImF1dG9tYXRlZHJ1bGVzXCJdJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0pGUiBSZWNvcmRpbmdzJyxcbiAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgVGhlIDxzdHJvbmc+UmVjb3JkaW5nczwvc3Ryb25nPiB2aWV3IHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgYWN0aXZlIHJlY29yZGluZ3MgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nXG4gICAgICAgICAgICAgIHJlY29yZGVkIG9uIHRoZSB0YXJnZXQgSlZNLiBTdGFydCwgc3RvcCwgZG93bmxvYWQsIGRlbGV0ZSByZWNvcmRpbmdzIGZyb20gdGhpcyB2aWV3LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICksXG4gICAgICAgICAgdGFyZ2V0OiAnKltkYXRhLXRvdXItaWQ9XCJyZWNvcmRpbmdzXCJdJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0FyY2hpdmVzIFZpZXcnLFxuICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICBUaGUgPHN0cm9uZz5BcmNoaXZlczwvc3Ryb25nPiB2aWV3IHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgc2F2ZWQgcmVjb3JkaW5ncyB0aGF0IGhhdmUgYmVlbiBzYXZlZCB0b1xuICAgICAgICAgICAgICBDcnlvc3RhdC4gRG93bmxvYWQsIGRlbGV0ZSwgYW5kIGdlbmVyYXRlIHJlcG9ydHMgZnJvbSB0aGlzIHZpZXcuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YXJnZXQ6ICcqW2RhdGEtdG91ci1pZD1cImFyY2hpdmVzXCJdJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0V2ZW50cycsXG4gICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIFRoZSA8c3Ryb25nPkV2ZW50czwvc3Ryb25nPiBwYWdlIGxpc3RzIHRoZSA8c3Ryb25nPkV2ZW50IFRlbXBsYXRlczwvc3Ryb25nPiB0aGF0IGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZ1xuICAgICAgICAgICAgICBGbGlnaHQgUmVjb3JkaW5ncy4gSXQgYWxzbyBkZXRhaWxzIHRoZSBKRlIgPHN0cm9uZz5FdmVudCBUeXBlczwvc3Ryb25nPiB0aGF0IGNhbiBiZSByZWNvcmRlZCB3aXRoaW4gZWFjaFxuICAgICAgICAgICAgICB0YXJnZXQgSlZNLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICksXG4gICAgICAgICAgdGFyZ2V0OiAnKltkYXRhLXRvdXItaWQ9XCJldmVudHNcIl0nLFxuICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiAnU2VjdXJpdHknLFxuICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICBUaGUgPHN0cm9uZz5TZWN1cml0eTwvc3Ryb25nPiB0YWIgYWxsb3dzIHlvdSB0byBhZGQgPHN0cm9uZz5DcmVkZW50aWFsczwvc3Ryb25nPiBhbmR7JyAnfVxuICAgICAgICAgICAgICA8c3Ryb25nPlNTTCBDZXJ0aWZpY2F0ZXM8L3N0cm9uZz4gZm9yIENyeW9zdGF0IHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gcmVtb3RlIHRhcmdldHMuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YXJnZXQ6ICcqW2RhdGEtdG91ci1pZD1cInNlY3VyaXR5XCJdJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ1NldHRpbmdzJyxcbiAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgU2V0IHlvdXIgPHN0cm9uZz5Dcnlvc3RhdCBwcmVmZXJlbmNlczwvc3Ryb25nPiwgc3VjaCBhcyB0aGUgdGhlbWUsIGxvY2FsZSwgbm90aWZpY2F0aW9uIHNldHRpbmdzLCBhbmRcbiAgICAgICAgICAgICAgbW9yZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApLFxuICAgICAgICAgIHRhcmdldDogJypbZGF0YS10b3VyLWlkPVwic2V0dGluZ3MtbGlua1wiXScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0hlbHAnLFxuICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICBSZXN0YXJ0IHRoaXMgdG91ciBvciBhY2Nlc3Mgb3VyIG5ldyA8c3Ryb25nPnF1aWNrIHN0YXJ0czwvc3Ryb25nPiB3aGVyZSB5b3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmdcbiAgICAgICAgICAgICAgQ3J5b3N0YXQgaW4geW91ciBlbnZpcm9ubWVudC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApLFxuICAgICAgICAgIHRhcmdldDogJypbZGF0YS10b3VyLWlkPVwiYXBwbGljYXRpb24tbGF1bmNoZXJcIl0nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdZb3XigJlyZSByZWFkeSB0byBnbyEnLFxuICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICBTdGF5IHVwLXRvLWRhdGUgd2l0aCBldmVyeXRoaW5nIENyeW9zdGF0IG9uIG91cnsnICd9XG4gICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9e2Ake2J1aWxkLmJsb2dQYWdlVXJsfWB9IHJlbD1cIm5vcmVmZXJyZXJcIj5cbiAgICAgICAgICAgICAgICBibG9nXG4gICAgICAgICAgICAgIDwvYT57JyAnfVxuICAgICAgICAgICAgICBvciBjb250aW51ZSB0byBsZWFybiBtb3JlIGluIG91cnsnICd9XG4gICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9e2Ake2J1aWxkLmRvY3VtZW50YXRpb25Vcmx9YH0gcmVsPVwibm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gZ3VpZGVzXG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICksXG4gICAgICAgICAgcGxhY2VtZW50OiAnY2VudGVyJyxcbiAgICAgICAgICB0YXJnZXQ6ICdib2R5JyxcbiAgICAgICAgICBkaXNhYmxlQmVhY29uOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSwgW3NldFN0YXRlLCB0aGVtZV0pO1xuXG4gIC8vIGluZGV4IDAgLT4gR2V0IFN0YXJ0ZWRcbiAgLy8gaW5kZXggMSAtPiBOYXZpZ2F0aW9uXG4gIC8vIGluZGV4IDIgLT4gRGFzaGJvYXJkXG4gIC8vIGV0Yy4uLlxuICBjb25zdCBjYWxsYmFjayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChkYXRhOiBDYWxsQmFja1Byb3BzKSA9PiB7XG4gICAgICBjb25zdCB7IGFjdGlvbiwgaW5kZXgsIHN0YXR1cywgdHlwZSB9ID0gZGF0YTtcbiAgICAgIGlmICgoW1NUQVRVUy5GSU5JU0hFRCwgU1RBVFVTLlNLSVBQRURdIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgICAgIHNldFN0YXRlKHsgcnVuOiBmYWxzZSwgc3RlcEluZGV4OiAwIH0pO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjbG9zZScgJiYgdHlwZSA9PT0gJ3N0ZXA6YmVmb3JlJykge1xuICAgICAgICBzZXRTdGF0ZSh7IHJ1bjogZmFsc2UsIHN0ZXBJbmRleDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKFtFVkVOVFMuU1RFUF9BRlRFUiwgRVZFTlRTLlRBUkdFVF9OT1RfRk9VTkRdIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICBpZiAoYWN0aW9uID09PSBBQ1RJT05TLlBSRVYpIHtcbiAgICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHNldFN0YXRlKHsgc3RlcEluZGV4OiAwIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNldFN0YXRlKHsgc3RlcEluZGV4OiBpbmRleCAtIDEgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgaWYgKGlzTmF2QmFyT3Blbikge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHsgc3RlcEluZGV4OiAyIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHsgc3RlcEluZGV4OiAxIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgc2V0U3RhdGUoeyBzdGVwSW5kZXg6IGluZGV4ICsgMSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRTdGF0ZSwgaXNOYXZCYXJPcGVuXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxSZWFjdEpveXJpZGVcbiAgICAgICAgdG9vbHRpcENvbXBvbmVudD17Sm95cmlkZVRvb2x0aXB9XG4gICAgICAgIGNhbGxiYWNrPXtjYWxsYmFja31cbiAgICAgICAgY29udGludW91c1xuICAgICAgICBydW49e3J1bn1cbiAgICAgICAgc3RlcEluZGV4PXtzdGVwSW5kZXh9XG4gICAgICAgIHN0ZXBzPXtzdGVwc31cbiAgICAgICAgZGlzYWJsZU92ZXJsYXlDbG9zZVxuICAgICAgICBkaXNhYmxlQ2xvc2VPbkVzY1xuICAgICAgICBzcG90bGlnaHRQYWRkaW5nPXswfVxuICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBhcnJvd0NvbG9yOlxuICAgICAgICAgICAgICB0aGVtZSA9PT0gVGhlbWVTZXR0aW5nLkRBUktcbiAgICAgICAgICAgICAgICA/ICd2YXIoLS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tZGFyay0xMDApJ1xuICAgICAgICAgICAgICAgIDogJ3ZhcigtLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS1saWdodC0xMDApJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENyeW9zdGF0Sm95cmlkZTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IGNyeW9zdGF0TG9nb0ljb24gZnJvbSAnQGFwcC9hc3NldHMvY3J5b3N0YXRfaWNvbl9yZ2JfZGVmYXVsdC5zdmcnO1xuaW1wb3J0IGNyeW9zdGF0TG9nb0ljb25EYXJrIGZyb20gJ0BhcHAvYXNzZXRzL2NyeW9zdGF0X2ljb25fcmdiX3JldmVyc2Uuc3ZnJztcbmltcG9ydCBidWlsZCBmcm9tICdAYXBwL2J1aWxkLmpzb24nO1xuaW1wb3J0IHsgd2l0aFRoZW1lZEljb24gfSBmcm9tICdAYXBwL3V0aWxzL3dpdGhUaGVtZWRJY29uJztcblxuZXhwb3J0IGNvbnN0IGNvbmNsdXNpb24gPSAocXVpY2tzdGFydE5hbWU6IHN0cmluZywgZmVhdHVyZTogc3RyaW5nLCBjbG9zaW5nTWVzc2FnZT86IHN0cmluZykgPT4gYFxuPGRpdj5cbiAgICA8cD5Zb3UgY29tcGxldGVkIHRoZSA8c3Ryb25nPiR7cXVpY2tzdGFydE5hbWV9PC9zdHJvbmc+IHF1aWNrIHN0YXJ0ITwvcD5cbiAgICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOiAyMnJlbVwiPlxuICAgICAgICA8aW1nIHN0eWxlPVwibWFyZ2luLXRvcDogMmVtOyBtYXJnaW4tYm90dG9tOiAyZW1cIiBzcmM9XCIke2NyeW9zdGF0TG9nb0ljb259XCIgYWx0PVwiQ3J5b3N0YXQgTG9nb1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiAvPlxuICAgICAgICA8cCBjbGFzcz1cImNyeW9zdGF0LXRleHRcIj5jcnlvc3RhdDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgJHtcbiAgICAgIGNsb3NpbmdNZXNzYWdlXG4gICAgICAgID8gYDxwPiR7Y2xvc2luZ01lc3NhZ2V9PC9wPmBcbiAgICAgICAgOiBgPHA+SWYgeW91IHdvdWxkIGxpa2UgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgPHN0cm9uZz4ke2ZlYXR1cmV9PC9zdHJvbmc+IGZlYXR1cmUsIGNoZWNrIG91dCB0aGUgPGEgaHJlZj1cIiR7YnVpbGQuZG9jdW1lbnRhdGlvblVybH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5bQVBQXSBkb2N1bWVudGF0aW9uPC9hPiBmb3IgZGV0YWlsZWQgZ3VpZGVzIGFuZCBpbmZvcm1hdGlvbi48L3A+YFxuICAgIH1cbjwvZGl2PmA7XG5cbmV4cG9ydCBjb25zdCBDcnlvc3RhdEljb24gPSB3aXRoVGhlbWVkSWNvbihjcnlvc3RhdExvZ29JY29uLCBjcnlvc3RhdExvZ29JY29uRGFyaywgJ0NyeW9zdGF0IEljb24nKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBRdWlja1N0YXJ0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcXVpY2tzdGFydHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENyeW9zdGF0SWNvbiwgY29uY2x1c2lvbiB9IGZyb20gJy4uL3F1aWNrc3RhcnQtdXRpbHMnO1xuXG5jb25zdCBkaXNwbGF5TmFtZSA9ICdHZXQgc3RhcnRlZCB3aXRoIEF1dG9tYXRlZCBSdWxlcyc7XG5cbmNvbnN0IEF1dG9tYXRlZFJ1bGVzUXVpY2tTdGFydDogUXVpY2tTdGFydCA9IHtcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiAnYXV0b21hdGVkLXJ1bGVzLXF1aWNrc3RhcnQnLFxuICAgIGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsLlBST0RVQ1RJT04sXG4gICAgb3JkZXI6IDMsXG4gIH0sXG4gIHNwZWM6IHtcbiAgICB2ZXJzaW9uOiAyLjMsXG4gICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgIGR1cmF0aW9uTWludXRlczogNSxcbiAgICBpY29uOiA8Q3J5b3N0YXRJY29uIC8+LFxuICAgIGRlc2NyaXB0aW9uOiBgTGVhcm4gYWJvdXQgYXV0b21hdGVkIHJ1bGVzIGluICoqW0FQUF0qKiBhbmQgaG93IHRvIGNyZWF0ZSBvbmUuYCxcbiAgICBwcmVyZXF1aXNpdGVzOiBbJ1N0YXJ0IGEgUmVjb3JkaW5nJ10sXG4gICAgaW50cm9kdWN0aW9uOiBgXG4jIyBBdXRvbWF0ZWQgUnVsZXNcbkF1dG9tYXRlZCBSdWxlcyBhcmUgY29uZmlndXJhdGlvbnMgdGhhdCBpbnN0cnVjdCBbQVBQXSB0byBjcmVhdGUgSkRLIEZsaWdodCBSZWNvcmRpbmdzIG9uIG1hdGNoaW5nIHRhcmdldCBKVk0gYXBwbGljYXRpb25zLiBFYWNoIHJ1bGUgc3BlY2lmaWVzIHBhcmFtZXRlcnMgZm9yIHdoaWNoIEV2ZW50IFRlbXBsYXRlIHRvIHVzZSwgaG93IG11Y2ggZGF0YSBzaG91bGQgYmUga2VwdCBpbiB0aGUgYXBwbGljYXRpb24gcmVjb3JkaW5nIGJ1ZmZlciwgYW5kIGhvdyBmcmVxdWVudGx5IFtBUFBdIHNob3VsZCBjb3B5IHRoZSBhcHBsaWNhdGlvbiByZWNvcmRpbmcgYnVmZmVyIGludG8gW0FQUF0ncyBvd24gYXJjaGl2ZWQgc3RvcmFnZS5cblxuIyMjIFdoYXQgeW91J2xsIGxlYXJuXG5cbi0gSG93IHRvIGNyZWF0ZSBhbiBhdXRvbWF0ZWQgcnVsZSBpbiBbQVBQXVxuLSBIb3cgdG8gdXNlIG1hdGNoIGV4cHJlc3Npb25zIHRvIG1hdGNoIG9uZSBvciBtb3JlIHRhcmdldCBKVk1zXG5cbiMjIyBXaGF0IHlvdSdsbCBuZWVkXG5cbi0gQSBydW5uaW5nIGluc3RhbmNlIG9mIFtBUFBdIHdoaWNoIGhhcyBkaXNjb3ZlcmVkIGF0IGxlYXN0IG9uZSB0YXJnZXQgSlZNXG4tIEpNWCBhdXRoIGNyZWRlbnRpYWxzIGZvciB0aGUgdGFyZ2V0IEpWTSAoaWYgcmVxdWlyZWQpXG5cbiAgICBgLFxuICAgIHRhc2tzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQ3JlYXRlIGEgbmV3IEF1dG9tYXRlZCBSdWxlJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcbjEuIEluIHRoZSBbQVBQXSBjb25zb2xlIG5hdmlnYXRpb24gYmFyLCBjbGljayBbQXV0b21hdGVkIFJ1bGVzXXt7aGlnaGxpZ2h0IG5hdi1hdXRvbWF0ZWRydWxlcy10YWJ9fS5cbjIuIENsaWNrIFtDcmVhdGVde3toaWdobGlnaHQgY3JlYXRlLXJ1bGUtYnRufX0uXG4gICAgICAgIGAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IHNlZSB0aGUgQXV0b21hdGVkIFJ1bGVzIGNyZWF0aW9uIGZvcm0uJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIHRoZSBbbWVudSBidXR0b25de3toaWdobGlnaHQgbmF2LXRvZ2dsZS1idG59fSBvbiB0aGUgbWFzdGhlYWQuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnRmlsbCBvdXQgdGhlIEF1dG9tYXRlZCBSdWxlIGZvcm0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuVG8gY3JlYXRlIGEgbmV3IHJ1bGUsIHVzZSB0aGUgQXV0b21hdGVkIFJ1bGUgY3JlYXRpb24gZm9ybSB0byBmaWxsIGluIHRoZSByZXF1aXJlZCBmaWVsZHMuXG5cblRoZSBbTWF0Y2ggRXhwcmVzc2lvbl17e2hpZ2hsaWdodCBydWxlLW1hdGNoZXhwcn19IGZpZWxkIGlzIGEgSmF2YS1saWtlIGNvZGUgc25pcHBldCB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBlYWNoIHRhcmdldCBKVk0uIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgcnVsZXMgdGhhdCBydW4gb24gc3BlY2lmaWMgdGFyZ2V0IEpWTXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIHJ1bGUgdGhhdCBydW5zIG9uIGFsbCB0YXJnZXQgSlZNcyB3aXRoIHRoZSBtYXRjaCBleHByZXNzaW9uOiBcXGB0cnVlXFxge3tjb3B5fX0uIFlvdSBjYW4gYWxzbyBtYXRjaCB0YXJnZXRzIG1vcmUgc3BlY2lmaWNhbGx5IHdpdGggYSBtYXRjaCBleHByZXNzaW9uIGxpa2UgXFxgdGFyZ2V0LmFubm90YXRpb25zLmNyeW9zdGF0WydQT1JUJ10gPT0gOTA5MVxcYHt7Y29weX19LCB3aGljaCB3aWxsIG1hdGNoIHRhcmdldHMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIFtBUFBdIG9uIHBvcnQgOTA5MS5cblxuXG5UbyBjcmVhdGUgYSBuZXcgcnVsZSwgeW91IG11c3QgZmlsbCBvdXQgdGhlIGZvbGxvd2luZyByZXF1aXJlZCBmaWVsZHM6XG4xLiBFbnRlciBhIG5hbWUgZm9yIHRoZSBydWxlIGluIHRoZSBbTmFtZV17e2hpZ2hsaWdodCBydWxlLW5hbWV9fSBmaWVsZC5cbjIuIEVudGVyIGFuIGV4cHJlc3Npb24gaW4gdGhlIFtNYXRjaCBFeHByZXNzaW9uXXt7aGlnaGxpZ2h0IHJ1bGUtbWF0Y2hleHByfX0gZmllbGQuIFRvIHNlZSBhbiBleGFtcGxlIG1hdGNoIGV4cHJlc3Npb24sIGNsaWNrIHRoZSBbbWF0Y2ggaGludF17e2hpZ2hsaWdodCBydWxlLW1hdGNoZXhwci1oZWxwfX0uXG5bVXNlIHRoZSBbTWF0Y2ggRXhwcmVzc2lvbiBWaXN1YWxpemVyXXt7aGlnaGxpZ2h0IG1hdGNoLWV4cHItY2FyZH19IHRvIHRlc3QgeW91ciBtYXRjaCBleHByZXNzaW9uIGFnYWluc3QgdGhlIHRhcmdldCBKVk1zIGN1cnJlbnRseSBkaXNjb3ZlcmVkIGJ5IFtBUFBdLiBBbnkgbWF0Y2hlZCB0YXJnZXRzIHdpbGwgYXBwZWFyIHVuZmFkZWQgaW4gdGhlIEdyYXBoIHZpZXcgYW5kIHdpbGwgYmUgbGlzdGVkIGluIHRoZSBMaXN0IHZpZXcuXXt7YWRtb25pdGlvbiB0aXB9fVxuXG4zLiBTZWxlY3QgYW4gW0V2ZW50IFRlbXBsYXRlXXt7aGlnaGxpZ2h0IHJ1bGUtZXZ0LXRlbXBsYXRlfX0uXG5cbltUaGVyZSBtYXkgYmUgbm8gYXZhaWxhYmxlIHRlbXBsYXRlcyBpZiB0aGVyZSBhcmUgbm8gdGFyZ2V0cyBjdXJyZW50bHkgbWF0Y2hlZCwgb3IgaWYgdGhlcmUgaXMgYSBmYWlsdXJlIHRvIGNvbm5lY3QgdG8gYWxsIG1hdGNoZWQgdGFyZ2V0cy5de3thZG1vbml0aW9uIHdhcm5pbmd9fVxuXG40LiBDbGljayBbQ3JlYXRlXXt7aGlnaGxpZ2h0IHJ1bGUtY3JlYXRlLWJ0bn19LlxuXG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBzZWUgdGhlIG5ldyBydWxlIGluIHRoZSBBdXRvbWF0ZWQgUnVsZXMgdGFibGUuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDogYElmIHlvdSBkbyBub3Qgc2VlIHRoZSBuZXcgcnVsZSwgZm9sbG93IHRoZSBwcmV2aW91cyBzdGVwcyBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IGNyZWF0ZSB0aGUgcnVsZSwgY2hlY2sgdGhhdCB5b3UgaGF2ZSBlbnRlcmVkIHZhbGlkIHZhbHVlcyBmb3IgZWFjaCByZXF1aXJlZCBmaWVsZC5gLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdWaWV3IHRoZSBnZW5lcmF0ZWQgcmVjb3JkaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcblRoZSBydWxlIHRoYXQgd2FzIGNyZWF0ZWQgd2lsbCBoYXZlIHN0YXJ0ZWQgYSBuZXcgcmVjb3JkaW5nIG9uIGFueSBtYXRjaGVkIHRhcmdldCBKVk1zLlxuMS4gSW4gdGhlIFtBUFBdIGNvbnNvbGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIFtSZWNvcmRpbmdzXXt7aGlnaGxpZ2h0IG5hdi1yZWNvcmRpbmdzLXRhYn19LlxuMi4gQ2xpY2sgdGhlIFtUYXJnZXQgU2VsZWN0b3Jde3toaWdobGlnaHQgdGFyZ2V0LXNlbGVjdH19IGRyb3Bkb3duIG1lbnUgYW5kIHNlbGVjdCBhIHRhcmdldCBKVk0gdGhhdCB3YXMgbWF0Y2hlZCBmcm9tIHRoZSBjcmVhdGVkIGF1dG9tYXRlZCBydWxlLCBpZiBub3QgYWxyZWFkeSBzZWxlY3RlZC5cblxuVGhlcmUgc2hvdWxkIG5vdyBiZSBhIG5ldyByZWNvcmRpbmcgaW4gdGhlIGxpc3Qgb2YgYWN0aXZlIHJlY29yZGluZ3Mgb24gdGhlIHNlbGVjdGVkIHRhcmdldCBKVk0uXG5cblRoZSByZWNvcmRpbmcgc2hvdWxkIGJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgcnVsZS1uYW1lIGZvcm1hdCwgc3VjaCBhcyBcXGBhdXRvXzxydWxlLW5hbWU+XFxgLlxuXG5bSWYgeW91IHNldCBhbnkgb3RoZXIgYXR0cmlidXRlcyBvbiB0aGUgcnVsZSwgeW91IHNob3VsZCBzZWUgdGhvc2UgYXR0cmlidXRlcyByZWZsZWN0ZWQgaW4gdGhlIHJlY29yZGluZy5de3thZG1vbml0aW9uIG5vdGV9fVxuYCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOlxuICAgICAgICAgICAgJyMjIyMgVmVyaWZ5IHRoYXQgeW91IHNlZSB0aGUgbmV3IHJlY29yZGluZyB3aXRoIHRoZSBjb3JyZWN0IEF1dG9tYXRlZCBSdWxlIHJlY29yZGluZyBuYW1pbmcgc2NoZW1lIGluIHRoZSBsaXN0IG9mIHJlY29yZGluZ3MuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgbmV3IHJlY29yZGluZywgZ28gYmFjayB0byB0aGUgUnVsZSBDcmVhdGlvbiBmb3JtLCBhbmQgdHJ5IHZlcmlmeWluZyB0aGF0IHlvdXIgcnVsZSBtYXRjaCBleHByZXNzaW9uIGNvcnJlY3RseSBtYXRjaGVzIHRoZSBpbnRlbmRlZCB0YXJnZXQgSlZNcyBpbiB0aGlzIHRhc2suJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb25jbHVzaW9uOiBjb25jbHVzaW9uKGRpc3BsYXlOYW1lLCAnQXV0b21hdGVkIFJ1bGVzJyksXG4gICAgdHlwZToge1xuICAgICAgdGV4dDogJ0FkdmFuY2VkJyxcbiAgICAgIGNvbG9yOiAncmVkJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQXV0b21hdGVkUnVsZXNRdWlja1N0YXJ0O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgYnVpbGQgZnJvbSAnQGFwcC9idWlsZC5qc29uJztcbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVpY2tTdGFydCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDcnlvc3RhdEljb24sIGNvbmNsdXNpb24gfSBmcm9tICcuLi9xdWlja3N0YXJ0LXV0aWxzJztcblxuY29uc3QgZGlzcGxheU5hbWUgPSAnR2V0IHN0YXJ0ZWQgd2l0aCB0aGUgRGFzaGJvYXJkJztcblxuLy8gVE9ETzogU3BsaXQgcXVpY2sgc3RhcnQgaW50byBtdWx0aXBsZSBxdWljayBzdGFydHMgdW5kZXIgRGFzaGJvYXJkIGNhdGVnb3J5XG4vLyBlLmcuIGRhc2hib2FyZCBjYXJkcywgbGF5b3V0cy90ZW1wbGF0ZXMsIGF1dG9tYXRlZCBhbmFseXNpcywgZXRjLlxuY29uc3QgRGFzaGJvYXJkUXVpY2tTdGFydDogUXVpY2tTdGFydCA9IHtcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiAnZGFzaGJvYXJkLXF1aWNrc3RhcnQnLFxuICAgIGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsLlBST0RVQ1RJT04sXG4gICAgb3JkZXI6IDIsXG4gIH0sXG4gIHNwZWM6IHtcbiAgICB2ZXJzaW9uOiAyLjMsXG4gICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgIGR1cmF0aW9uTWludXRlczogMTAsXG4gICAgaWNvbjogPENyeW9zdGF0SWNvbiAvPixcbiAgICBkZXNjcmlwdGlvbjogYExlYXJuIGFib3V0IHdoYXQgeW91IGNhbiBkbyB3aXRoIHRoZSAqKltBUFBdKiogRGFzaGJvYXJkLmAsXG4gICAgcHJlcmVxdWlzaXRlczogWycnXSxcbiAgICBpbnRyb2R1Y3Rpb246IGBcbiMjIERhc2hib2FyZFxuVGhlICoqW0FQUF0gRGFzaGJvYXJkKiogaXMgdGhlIG1haW4gcGFnZSBvZiB0aGUgW0FQUF0gY29uc29sZS4gVGhlIFtBUFBdIGRhc2hib2FyZCBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGNvbm5lY3RlZCB0YXJnZXQgSlZNcyBhbmQgdGhlIGluc3RhbmNlIGl0c2VsZiB0aHJvdWdoIHRoZSB1c2Ugb2YgKipEYXNoYm9hcmQgQ2FyZHMqKi5cblxuRGFzaGJvYXJkIENhcmRzIGFyZSBkaXNwbGF5ZWQgaW4gKipEYXNoYm9hcmQgTGF5b3V0cyoqLCB3aGljaCBjYW4gYmUgY3VzdG9taXplZCBieSBhZGRpbmcsIHJlbW92aW5nLCBvciByZWFycmFuZ2luZyBjYXJkcy4gVGhlIGxheW91dCBjYW4gYWxzbyBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgYXQgYSBsYXRlciB0aW1lLiBcblxuIyMjIFdoYXQgeW91J2xsIGxlYXJuXG4tIEhvdyB0byBjcmVhdGUgYSBzaW1wbGUgRGFzaGJvYXJkIExheW91dFxuLSBIb3cgdG8gYWRkIGFuZCByZW1vdmUgYSBEYXNoYm9hcmQgQ2FyZCB0by9mcm9tIGEgRGFzaGJvYXJkIExheW91dFxuLSBIb3cgdG8gbW92ZSBhbmQgcmVzaXplIERhc2hib2FyZCBDYXJkc1xuLSBIb3cgdG8gcmVuYW1lLCB1cGxvYWQsIGRvd25sb2FkLCBhbmQgZGVsZXRlIERhc2hib2FyZCBMYXlvdXRzXG5cbiAgICBgLFxuICAgIHRhc2tzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnR28gdG8gdGhlIERhc2hib2FyZCBwYWdlJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcbjEuIEluIHRoZSBbQVBQXSBjb25zb2xlIG5hdmlnYXRpb24gYmFyLCBjbGljayBbRGFzaGJvYXJkXXt7aGlnaGxpZ2h0IG5hdi1kYXNoYm9hcmQtdGFifX0uXG4yLiBGcm9tIHRoZSBbVGFyZ2V0IFNlbGVjdG9yXXt7aGlnaGxpZ2h0IHRhcmdldC1zZWxlY3R9fSwgc2VsZWN0IGEgdGFyZ2V0IEpWTS5cbmAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IHNlZSB0aGUgRGFzaGJvYXJkIHBhZ2UuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIHRoZSBbbWVudSBidXR0b25de3toaWdobGlnaHQgbmF2LXRvZ2dsZS1idG59fSBvbiB0aGUgbWFzdGhlYWQuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQ3JlYXRlIGEgbmV3IERhc2hib2FyZCBMYXlvdXQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuKipEYXNoYm9hcmQgTGF5b3V0cyoqIGFyZSB1c2VkIHRvIG9yZ2FuaXplIHRoZSBEYXNoYm9hcmQgQ2FyZHMgdGhhdCBhcmUgZGlzcGxheWVkIGluIHRoZSBEYXNoYm9hcmQuXG5cbjEuIENsaWNrIHRoZSBbTGF5b3V0IFNlbGVjdG9yXXt7aGlnaGxpZ2h0IGRhc2hib2FyZC1sYXlvdXQtc2VsZWN0b3J9fSBvbiB0aGUgdG9vbGJhci5cblxuICAgIFRoaXMgd2lsbCBvcGVuIGEgZHJvcGRvd24gbWVudS4gQ2xpY2sgKipOZXcgTGF5b3V0KiouXG5cblRoZSBuZXcgbGF5b3V0IGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYW5kIHNob3VsZCBiZSBuYW1lZCBcXGBDdXN0b20xXFxgLCBhc3N1bWluZyB5b3UgaGF2ZSBub3QgY3JlYXRlZCBhbnkgb3RoZXIgbGF5b3V0cy5cblxuW1lvdSBjYW4gYWxzbyByZW5hbWUgdGhlIGxheW91dCB3aXRoIHRoZSBwZW5jaWwgaWNvbiBuZXh0IHRvIHRoZSBuYW1lLl17e2FkbW9uaXRpb24gdGlwfX1cbmAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgdGhlIG5ldyBsYXlvdXQgaXMgY3JlYXRlZCBhbmQgc2VsZWN0ZWQuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdUcnkgdGhlIHN0ZXBzIGFnYWluLiBNYWtlIHN1cmUgdGhhdCB0aGUgdGhlIG5ldyBsYXlvdXQgaXMgbmFtZWQgYEN1c3RvbWAgd2l0aCBhIG51bWVyaWMgc3VmZml4LicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0FkZCBEYXNoYm9hcmQgQ2FyZHMgdG8gdGhlIGxheW91dCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5UaGUgZm9sbG93aW5nIERhc2hib2FyZCBDYXJkcyBhcmUgYXZhaWxhYmxlOlxuXG4tICoqVGFyZ2V0IEpWTSBEZXRhaWxzKipcbi0gKipBdXRvbWF0ZWQgQW5hbHlzaXMqKlxuLSAqKkpGUiBNZXRyaWNzIENoYXJ0IChCRVRBKSoqXG4tICoqTUJlYW4gTWV0cmljcyBDaGFydCoqXG5cbkVhY2ggY2FyZCBkaXNwbGF5cyBhIGRpZmZlcmVudCBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YXJnZXQgSlZNLCBzdWNoIGFzIHRoZSBoZWFwIHVzYWdlLCB0aHJlYWQgc3RhdGlzdGljcywgSlZNIHZlbmRvciwgYW5kIG1vcmUuXG5cbltMZWFybiBtb3JlIGFib3V0IGVhY2ggRGFzaGJvYXJkIENhcmQgaW4gdGhlIFtDcnlvc3RhdCBkb2N1bWVudGF0aW9uXSgke2J1aWxkLmRhc2hib2FyZEd1aWRlVXJsfSkuXXt7YWRtb25pdGlvbiB0aXB9fVxuXG5UbyBjcmVhdGUgYSBjYXJkLCBnbyB0aHJvdWdoIGEgY3JlYXRpb24gd2l6YXJkIHRoYXQgZ3VpZGVzIHRoZSBwcm9jZXNzIG9mIHNlbGVjdGluZyBhbmQgY29uZmlndXJpbmcgdGhlIGRlc2lyZWQgY2FyZC5cblxuMS4gQ2xpY2sgdGhlIFtDYXRhbG9nIEljb25de3toaWdobGlnaHQgZGFzaGJvYXJkLWFkZC1idG59fS5cbiAgICBcbiAgICBUaGlzIHdpbGwgb3BlbiBhIG1vZGFsLiBGcm9tIHRoZSBjYXJkIGNhdGFsb2csIHNlbGVjdCB0aGUgKipUYXJnZXQgSlZNIERldGFpbHMqKiBjYXJkLiBGdWxsIGRldGFpbHMgYW5kIGFueSBhdmFpbGFibGUgcHJldmlldyB3aWxsIGJlIHNob3duIG9uIHRoZSBkcmF3ZXIgcGFuZWwuXG5cbjIuIENsaWNrICoqRmluaXNoKiouXG4zLiBSZXBlYXQgc3RlcHMgMS0yIHRvIGFkZCB0aGUgKipNQmVhbnMgTWV0cmljcyBDaGFydCoqIGNhcmQgdG8gdGhlIGN1cnJlbnQgbGF5b3V0LlxuNC4gVGhpcyB0aW1lLCBjbGljayAqKk5leHQqKiB0byBnbyB0byB0aGUgbmV4dCBjb25maWd1cmF0aW9uIHN0ZXAgb2YgdGhlIGNyZWF0aW9uIHdpemFyZC5cbltUaGUgZGVmYXVsdCBtZXRyaWMgc2VsZWN0ZWQgZm9yIHRoZSBjYXJkIGlzIHRoZSBcXGBQcm9jZXNzIENQVSBMb2FkXFxgIG1ldHJpYy4gWW91IGNhbiBjaGFuZ2UgdGhpcyBieSBjbGlja2luZyB0aGUgKipQZXJmb3JtYW5jZSBNZXRyaWMqKiBkcm9wZG93biBtZW51IHdpdGhpbiB0aGUgKipNQmVhbnMgQ2hhcnQgQ2FyZCoqIGNvbmZpZ3VyYXRpb24gc3RlcCBhbmQgc2VsZWN0aW5nIGEgZGlmZmVyZW50IG1ldHJpYy4gVHJ5IG90aGVyIG1ldHJpY3MgYW5kIHNldHRpbmdzIV17e2FkbW9uaXRpb24gdGlwfX1cbjUuIENsaWNrICoqRmluaXNoKiogb25jZSBtb3JlLlxuYCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB5b3Ugc2VlIHRoZSB0d28gbmV3IGNhcmRzIGluIHRoZSBEYXNoYm9hcmQuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDogYElmIHlvdSBkbyBub3Qgc2VlIHRoZSBjYXJkcywgZm9sbG93IHRoZSBwcmV2aW91cyBzdGVwcyBhZ2Fpbi5gLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdSZWFycmFuZ2UgYW5kIHJlc2l6ZSBEYXNoYm9hcmQgQ2FyZHMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuMS4gQ2xpY2sgYW5kIGRyYWcgdGhlICoqVGFyZ2V0IEpWTSBEZXRhaWxzKiogW2NhcmQncyBoZWFkZXJde3toaWdobGlnaHQgY2FyZC1kcmFnZ2FibGUtZ3JpcH19IG9uIHRvcCBvciB0byB0aGUgcmlnaHQgb2YgdGhlICoqTUJlYW5zIE1ldHJpY3MgQ2hhcnQqKiBjYXJkIHRvIHN3YXAgdGhlaXIgcG9zaXRpb25zLlxuMi4gQ2xpY2sgYW5kIGRyYWcgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlICoqTUJlYW5zIE1ldHJpY3MgQ2hhcnQqKiBjYXJkIHRvIHJlc2l6ZSBpdC5cbltZb3UgY2FuIGFsc28gZHJhZyBhbmQgZHJvcCBiZXR3ZWVuIGNhcmRzIGJldHdlZW4gb3RoZXIgY2FyZHMgdG8gcmVhcnJhbmdlIHRoZW0uXXt7YWRtb25pdGlvbiB0aXB9fVxuYCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB5b3UgYXJlIGFibGUgdG8gcmVhcnJhbmdlIGFuZCByZXNpemUgdGhlIGNhcmRzLicsXG4gICAgICAgICAgZmFpbGVkVGFza0hlbHA6XG4gICAgICAgICAgICAnTWFrZSBzdXJlIHlvdSBhcmUgY2xpY2tpbmcgYW5kIGRyYWdnaW5nIHRoZSBjYXJkIGhlYWRlciB0byBtb3ZlIHRoZSBjYXJkLCBub3QgdGhlIGJvZHkuIFRvIHJlc2l6ZSBjYXJkcywgaG92ZXIgb3ZlciB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY2FyZCB1bnRpbCB0aGUgY3Vyc29yIGNoYW5nZXMgdG8gYSBkb3VibGUtc2lkZWQgYXJyb3cgYOKGlGAsIHRoZW4gY2xpY2sgYW5kIGRyYWcgdG8gcmVzaXplLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ01vZGlmeSBhIERhc2hib2FyZCBMYXlvdXQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuWW91IGNhbiByZW5hbWUsIGRlbGV0ZSBhbmQgcXVpY2tseSBzd2l0Y2ggYmV0d2VlbiAqKkRhc2hib2FyZCBMYXlvdXRzKiogZm9yIGRpZmZlcmVudCBzZXRzIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXQgSlZNcy4gQ3VzdG9taXplIHRoZXNlIGxheW91dHMgdG8gc3VpdCB5b3VyIG5lZWRzIVxuMS4gUmVuYW1lIHRoZSBjdXJyZW50IERhc2hib2FyZCBMYXlvdXQgYnkgY2xpY2tpbmcgdGhlIFtQZW5jaWwgaWNvbl17e2hpZ2hsaWdodCBkYXNoYm9hcmQtcmVuYW1lLWJ0bn19IG9uIHRoZSAqKkxheW91dCBTZWxlY3RvcioqIHRvb2xiYXIuIFlvdSBjYW5ub3QgcmVuYW1lIHRoZSBcXGBEZWZhdWx0XFxgIGxheW91dC5cbjIuIFRvIHN3aXRjaCBiZXR3ZWVuIERhc2hib2FyZCBMYXlvdXRzLCBjbGljayB0aGUgW0xheW91dCBTZWxlY3Rvcl17e2hpZ2hsaWdodCBkYXNoYm9hcmQtbGF5b3V0LXNlbGVjdG9yfX0gZHJvcGRvd24gb24gdGhlICoqTGF5b3V0IFNlbGVjdG9yKiogdG9vbGJhciBhbmQgc2VsZWN0IHRoZSBcXGBEZWZhdWx0XFxgIGxheW91dC5cbjMuIFlvdSBhcmUgYWJsZSB0byBkZWxldGUgRGFzaGJvYXJkIExheW91dHMgYnkgY2xpY2tpbmcgdGhlIFtUcmFzaCBpY29uXXt7aGlnaGxpZ2h0IGRhc2hib2FyZC1kZWxldGUtYnRufX0gb24gdGhlICoqTGF5b3V0IFNlbGVjdG9yKiogdG9vbGJhci4gWW91IGNhbm5vdCBkZWxldGUgdGhlIFxcYERlZmF1bHRcXGAgbGF5b3V0LlxuXG5bWW91IGNhbiBhbHNvIGZhdm9yaXRlIERhc2hib2FyZCBMYXlvdXRzIGJ5IGNsaWNraW5nIG9uIHRoZSBbTGF5b3V0IFNlbGVjdG9yXXt7aGlnaGxpZ2h0IGRhc2hib2FyZC1sYXlvdXQtc2VsZWN0b3J9fSBkcm9wZG93biBhbmQgY2xpY2tpbmcgdGhlIFN0YXIgSWNvbiBcXGDimIVcXGAgbmV4dCB0byB0aGUgbGF5b3V0IHlvdSB3YW50IHRvIGZhdm9yaXRlLiBSZW5hbWluZyBhbmQgZGVsZXRpb24gY2FuIGFsc28gYmUgZG9uZSBpbiBhIHNpbWlsYXIgZmFzaGlvbi5de3thZG1vbml0aW9uIHRpcH19XG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBhcmUgYWJsZSB0byByZW5hbWUsIGFuZCBzd2l0Y2ggYmV0d2VlbiBEYXNoYm9hcmQgTGF5b3V0cy4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOlxuICAgICAgICAgICAgJ01ha2Ugc3VyZSB5b3UgYXJlIGNsaWNraW5nIHRoZSBjb3JyZWN0IGFjdGlvbnMgYW5kIGJ1dHRvbnMuIE5vdGUgdGhhdCB5b3UgY2Fubm90IHJlbmFtZSBvciBkZWxldGUgdGhlIGBEZWZhdWx0YCBsYXlvdXQuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnVXNlIExheW91dCBUZW1wbGF0ZXMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuKipMYXlvdXQgVGVtcGxhdGVzKiogYXJlIHByZS1jb25maWd1cmVkIERhc2hib2FyZCBMYXlvdXRzIHRoYXQgYXJlIHVzZWQgdG8gcXVpY2tseSBjcmVhdGUgbmV3IERhc2hib2FyZCBMYXlvdXRzLiBZb3UgY2FuIGFsc28gZG93bmxvYWQgYW5kIHVwbG9hZCB5b3VyIG93biBEYXNoYm9hcmQgTGF5b3V0cyBhcyB0ZW1wbGF0ZXMuIFtBUFBdIHByb3ZpZGVzIGEgZmV3IHRlbXBsYXRlcyB0aGF0IHlvdSBjYW4gdXNlIHRvIGdldCBzdGFydGVkLlxuMS4gVG8gY3JlYXRlIGEgbmV3IERhc2hib2FyZCBMYXlvdXQgZnJvbSBhIHRlbXBsYXRlLCBjbGljayB0aGUgW0xheW91dCBTZWxlY3Rvcl17e2hpZ2hsaWdodCBkYXNoYm9hcmQtbGF5b3V0LXNlbGVjdG9yfX0gZHJvcGRvd24gb24gdGhlICoqTGF5b3V0IFNlbGVjdG9yKiogdG9vbGJhciBhbmQgY2xpY2sgdGhlIGNhcmV0IGljb24gbmV4dCB0byB0aGUgKipOZXcgTGF5b3V0KiogYnV0dG9uLlxuICAgXG4gICBUaGlzIHdpbGwgb3BlbiBhIGRyb3Bkb3duIG1lbnUuIFxuMi4gU2VsZWN0ICoqQ2hvb3NlIFRlbXBsYXRlKiouXG4gICBBIG1vZGFsIHdpbGwgb3BlbiB3aXRoIGEgbGlzdCBvZiBhdmFpbGFibGUgdGVtcGxhdGVzLiBUaGVyZSB3aWxsIGJlIHR3byB0ZW1wbGF0ZSBjYXRlZ29yaWVzOiAqKlN1Z2dlc3RlZCoqIGFuZCAqKkNyeW9zdGF0KiouXG4zLiBGcm9tIHRoZSAqKkNyeW9zdGF0KiogY2F0ZWdvcnksIHNlbGVjdCB0aGUgKipBdXRvbWF0ZWQgQW5hbHlzaXMqKiB0ZW1wbGF0ZS5cbjQuIEVudGVyIGEgbmFtZSBmb3IgdGhlIG5ldyBsYXlvdXQgaW4gdGhlICoqTmFtZSoqIGZpZWxkLlxuNS4gQ2xpY2sgKipDcmVhdGUqKiB0byBmaW5pc2guXG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBhcmUgYWJsZSB0byBjcmVhdGUgYSBkYXNoYm9hcmQgbGF5b3V0IGZyb20gdGVtcGxhdGUuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdJZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIGNyZWF0aW5nIGEgZGFzaGJvYXJkIGxheW91dCBmcm9tIGEgdGVtcGxhdGUsIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHNlbGVjdGVkIGEgdGVtcGxhdGUgZnJvbSB0aGUgVGVtcGxhdGUgUGlja2VyIGFuZCBlbnRlcmVkIGEgbmFtZSBmb3IgdGhlIG5ldyBsYXlvdXQuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb25jbHVzaW9uOiBjb25jbHVzaW9uKFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAnRGFzaGJvYXJkJyxcbiAgICAgIGBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IDxzdHJvbmc+RGFzaGJvYXJkPC9zdHJvbmc+IGFuZCA8c3Ryb25nPkRhc2hib2FyZCBDYXJkczwvc3Ryb25nPiBpbiBbQVBQXSAke2J1aWxkLnZlcnNpb259LCByZWFkIG91ciBndWlkZXMgb24gdGhlIDxhIGhyZWY9XCIke2J1aWxkLmRhc2hib2FyZEd1aWRlVXJsfVwiIHRhcmdldD1cIl9ibGFua1wiPkNyeW9zdGF0IGRvY3VtZW50YXRpb248L2E+LmBcbiAgICApLFxuICAgIHR5cGU6IHtcbiAgICAgIHRleHQ6ICdJbnRyb2R1Y3Rpb24nLFxuICAgICAgY29sb3I6ICdibHVlJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRGFzaGJvYXJkUXVpY2tTdGFydDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IGNyeW9zdGF0TG9nbyBmcm9tICdAYXBwL2Fzc2V0cy9jcnlvc3RhdF9pY29uX3JnYl9kZWZhdWx0LnN2Zyc7XG5pbXBvcnQgYnVpbGQgZnJvbSAnQGFwcC9idWlsZC5qc29uJztcbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVpY2tTdGFydCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzJztcbmltcG9ydCB7IFBmaWNvblRlbXBsYXRlSWNvbiB9IGZyb20gJ0BwYXR0ZXJuZmx5L3JlYWN0LWljb25zJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25jbHVzaW9uIH0gZnJvbSAnLi4vcXVpY2tzdGFydC11dGlscyc7XG5cbi8vIFF1aWNrIHN0YXJ0IG5hbWUgKGN1cnJlbnRseSBjYW5ub3QgdXNlIFtBUFBdLCB0aGVyZSBpcyBhIGJ1ZyB3aXRoIGhvdyB0aGUgdGl0bGUgZ2V0cyByZW5kZXJlZCBpbiB0aGUgcXVpY2sgc3RhcnQgcGFuZWwpXG5jb25zdCBkaXNwbGF5TmFtZSA9ICdHZXR0aW5nIHN0YXJ0ZWQgd2l0aCBxdWljayBzdGFydHMgaW4gQ3J5b3N0YXQnO1xuXG4vLyBBZGRpdGlvbmFsIGluZm86IGh0dHBzOi8vZG9jcy5vcGVuc2hpZnQuY29tL2NvbnRhaW5lci1wbGF0Zm9ybS80Ljkvd2ViX2NvbnNvbGUvY3JlYXRpbmctcXVpY2stc3RhcnQtdHV0b3JpYWxzLmh0bWxcbmNvbnN0IEdlbmVyaWNRdWlja1N0YXJ0OiBRdWlja1N0YXJ0ID0ge1xuICBtZXRhZGF0YToge1xuICAgIG5hbWU6ICdnZW5lcmljLXF1aWNrc3RhcnQnLFxuICAgIGZlYXR1cmVMZXZlbDogRmVhdHVyZUxldmVsLkRFVkVMT1BNRU5ULFxuICAgIG9yZGVyOiAwLFxuICAgIC8vIHlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgbWV0YWRhdGEgaGVyZVxuICB9LFxuICBzcGVjOiB7XG4gICAgdmVyc2lvbjogMi4zLCAvLyB2ZXJzaW9uaW5nIGZvciBlYWNoIHJlbGVhc2Ugb2YgdGhlIHF1aWNrIHN0YXJ0XG4gICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgIGR1cmF0aW9uTWludXRlczogMTAsXG4gICAgdHlwZToge1xuICAgICAgdGV4dDogJ1BsYWNlaG9sZGVyJyxcbiAgICAgIC8vICdibHVlJyB8ICdjeWFuJyB8ICdncmVlbicgfCAnb3JhbmdlJyB8ICdwdXJwbGUnIHwgJ3JlZCcgfCAnZ3JleSdcbiAgICAgIGNvbG9yOiAnZ3JleScsXG4gICAgfSxcbiAgICAvKi0gVGhlIGljb24gZGVmaW5lZCBhcyBhIGJhc2U2NCB2YWx1ZS4gRXhhbXBsZSBmbG93OlxuICAgICMgMS4gRmluZCBhbiAuc3ZnIHlvdSB3YW50IHRvIHVzZSwgbGlrZSBmcm9tIGhlcmU6IGh0dHBzOi8vd3d3LnBhdHRlcm5mbHkub3JnL3Y0L2d1aWRlbGluZXMvaWNvbnMvI2FsbC1pY29uc1xuICAgICMgMi4gVXBsb2FkIHRoZSBmaWxlIGhlcmUgYW5kIGVuY29kZSBpdCAob3V0cHV0IGZvcm1hdCAtIHBsYWluIHRleHQpOiBodHRwczovL2Jhc2U2NC5ndXJ1L2NvbnZlcnRlci9lbmNvZGUvaW1hZ2VcbiAgICAjIDMuIGNvbXBvc2UgLSBgaWNvbjogZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCw8YmFzZTY0IHN0cmluZyBmcm9tIHN0ZXAgMj5gXG4gICAgIyAtIElmIGVtcHR5IHN0cmluZyAoaWNvbjogJycpLCB3aWxsIHVzZSBhIGRlZmF1bHQgcm9ja2V0IGljb25cbiAgICAjIC0gSWYgc2V0IHRvIG51bGwgKGljb246IH4pIHdpbGwgbm90IHNob3cgYW4gaWNvblxuICAgICovXG4gICAgaWNvbjogPFBmaWNvblRlbXBsYXRlSWNvbiAvPixcbiAgICBwcmVyZXF1aXNpdGVzOiBbXG4gICAgICAnWW91IGNhbiBvcHRpb25hbGx5IGxpc3QgcHJlcmVxdWlzaXRlcycsXG4gICAgICAnQW5vdGhlciBwcmVyZXF1aXNpdGUnLFxuICAgICAgJ1RoZXNlIHByZXJlcXVpc2l0ZXMgYXJlIGFsc28gZGlzcGxheWVkIG9uIHRoZSBpbnRyb2R1Y3Rpb24gc3RlcCcsXG4gICAgXSxcbiAgICBkZXNjcmlwdGlvbjogYFRoaXMgZGVzY3JpcHRpb24gYXBwZWFycyBvbiB0aGUgY2FyZCBpbiB0aGUgcXVpY2sgc3RhcnRzIGNhdGFsb2cuYCxcbiAgICAvLyBOT1RFOiBtYXJrZG93biBwYXIgd2lsbCBhY2tub3dsZWRnZSBpbmRlbnRzIGFuZCBuZXcgbGluZXNcbiAgICBpbnRyb2R1Y3Rpb246IGBcbioqVGhpcyBpbnRyb2R1Y3Rpb24gaXMgc2hvd24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVpY2sgc3RhcnQqKlxuLSBJdCBpbnRyb2R1Y2VzIHRoZSBxdWljayBzdGFydCBhbmQgbGlzdHMgdGhlIHRhc2tzIHdpdGhpbiBpdC5cbi0gWW91IGNhbiB2aWV3IHRoZSBbc291cmNlIGZvciB0aGlzIHF1aWNrIHN0YXJ0XShodHRwczovL2dpdGh1Yi5jb20vcGF0dGVybmZseS9wYXR0ZXJuZmx5LXF1aWNrc3RhcnRzL2Jsb2IvbWFpbi9wYWNrYWdlcy9kZXYvc3JjL3F1aWNrc3RhcnRzLWRhdGEveWFtbC90ZW1wbGF0ZS55YW1sKSBmb3IgYWRkaXRpb25hbCBoZWxwIGFuZCBpbmZvcm1hdGlvbi5gLFxuICAgIHRhc2tzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnR2V0IHN0YXJ0ZWQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuIyMgVGV4dFxuICAxLiBUaGUgbWFpbiBib2R5IG9mIHRoZSB0YXNrLiBZb3UgY2FuIHVzZSBtYXJrZG93biBzeW50YXggaGVyZSB0byBjcmVhdGUgbGlzdCBpdGVtcyBhbmQgbW9yZS5cblxuICBUaGlzIGlzIGEgcGFyYWdyYXBoLiAgXG4gIFRoaXMgaXMgYW5vdGhlciBwYXJhZ3JhcGguIEFkZCBhbiBlbXB0eSBsaW5lIGJldHdlZW4gcGFyYWdyYXBocyBmb3IgbGluZSBicmVha3Mgb3IgdHdvIHNwYWNlcyBhdCB0aGUgZW5kLlxuICAxLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBtYXJrZG93biBzeW50YXggeW91IGNhbiB2aXNpdCBbdGhpcyByZXNvdXJjZV0oaHR0cHM6Ly93d3cubWFya2Rvd25ndWlkZS5vcmcvYmFzaWMtc3ludGF4LykuXG4gIDEuIEEgPHNtYWxsPmxpbWl0ZWQgc2V0PC9zbWFsbD4gb2YgPHN0cm9uZz5IVE1MIHRhZ3M8L3N0cm9uZz4gW2FyZSBhbHNvIHN1cHBvcnRlZF0oaHR0cHM6Ly9kb2NzLm9wZW5zaGlmdC5jb20vY29udGFpbmVyLXBsYXRmb3JtLzQuOS93ZWJfY29uc29sZS9jcmVhdGluZy1xdWljay1zdGFydC10dXRvcmlhbHMuaHRtbCNzdXBwb3J0ZWQtdGFncy1mb3ItcXVpY2stc3RhcnRzX2NyZWF0aW5nLXF1aWNrLXN0YXJ0LXR1dG9yaWFscylcbiAgXG4jIyBJbWFnZXNcbiAgSFRNTCBpbWcgdGFnOiA8aW1nIGFsdD1cIltBUFBdIGxvZ29cIiBzcmM9XCIke2NyeW9zdGF0TG9nb31cIiB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiAvPlxuXG4gID4gTWFya2Rvd24gd291bGQgd29yayBhcyB3ZWxsIGJ1dCBjYW5ub3QgYWRkIGhlaWdodC93aWR0aCBzdHlsZVxuXG4gIEVsbGlwc2lzIGljb24gKHZpc2libGUgaWYgZm9udC1hd2Vzb21lIGlzIGluc3RhbGxlZCk6IDxpIGNsYXNzPVwiZmFzIGZhLWVsbGlwc2lzLXZcIj48L2k+XG5cbiAgUEYgaWNvbjogPGkgY2xhc3M9XCJwZi1pY29uIHBmLWljb24tYWRkLWNpcmNsZS1vXCI+PC9pPlxuXG4jIyBIaWdobGlnaHRpbmdcbiAgVG8gZW5hYmxlIGhpZ2hsaWdodGluZywgdGhlIG1hcmtkb3duIHN5bnRheCBzaG91bGQgY29udGFpbjpcbiAgLSBCcmFja2V0ZWQgbGluayB0ZXh0XG4gIC0gVGhlIGhpZ2hsaWdodCBrZXl3b3JkLCBmb2xsb3dlZCBieSB0aGUgSUQgb2YgdGhlIGVsZW1lbnQgdGhhdCB5b3Ugd2FudCB0byBhbmltYXRlXG4gIC0gVGhlIGVsZW1lbnQgdG8gYmUgaGlnaGxpZ2h0ZWQsIG5lZWRzIGEgXFxgZGF0YS1xdWlja3N0YXJ0LWlkXFxgIGF0dHJpYnV0ZVxuXG4qKkV4YW1wbGUqKlxuICA8cHJlPltSZWNvcmRpbmdzIG5hdiBpdGVtXXt7aGlnaGxpZ2h0IG5hdi1yZWNvcmRpbmdzLXRhYn19PC9wcmU+XG5cbiAgd2lsbCBoaWdobGlnaHQgYW4gZWxlbWVudCB3aXRoIHRoZSBcXGBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJxdWlja3N0YXJ0c1wiXFxgIGF0dHJpYnV0ZVxuICBcbiMjIyBDb2RlIHNuaXBwZXRzXG5UaGUgc3ludGF4IGZvciBhbiBpbmxpbmUgY29kZSBzbmlwcGV0IGNvbnRhaW5zOlxuLSBUZXh0IGJldHdlZW4gYmFjayBxdW90ZXMsIGZvbGxvd2VkIGJ5IFxcYHt7Y29weX19XFxgXG4jIyMjIEV4YW1wbGUgMVxuVGhlIGZvbGxvd2luZyB0ZXh0IGRlbW9uc3RhdGVzIGFuIGlubGluZS1jb3B5IGVsZW1lbnQgXFxgaHR0cHM6Ly9naXRodWIuY29tL3NjbG9yZy9ydWJ5LWV4LmdpdFxcYHt7Y29weX19XG4jIyMjIEV4YW1wbGUgMlxuQW5kIGFub3RoZXIgb25lIFxcYGh0dHBzOi8vcGF0dGVybmZseS5vcmdcXGB7e2NvcHl9fSBoZXJlIVxuVGhlIHN5bnRheCBmb3IgbXVsdGktbGluZSBjb2RlIHNuaXBwZXRzOlxuLSBUZXh0IGJldHdlZW4gdHJpcGxlIGJhY2sgcXVvdGVzLCBmb2xsb3dlZCBieSBcXGB7e2NvcHl9fVxcYFxuIyMjIyBFeGFtcGxlIDFcbiAgXFxgXFxgXFxgXG5vYyBuZXctYXBwIHJ1Ynl+aHR0cHM6Ly9naXRodWIuY29tL3NjbG9yZy9ydWJ5LWV4LmdpdFxuZWNobyBcIkV4cG9zZSByb3V0ZSB1c2luZyBvYyBleHBvc2Ugc3ZjL3J1YnktZXhcIlxub2MgZXhwb3NlIHN2Yy9ydWJ5LWV4XG4gIFxcYFxcYFxcYHt7Y29weX19XG4jIyMjIEV4YW1wbGUgMlxuXFxgXFxgXFxgXG5IZWxsb1xud29ybGRcblxcYFxcYFxcYHt7Y29weX19ICBcbiAgLSBDbGlja2luZyB0aGUgX05leHRfIGJ1dHRvbiB3aWxsIGRpc3BsYXkgdGhlICoqQ2hlY2sgeW91ciB3b3JrKiogbW9kdWxlLlxuIyMjIEFkbW9uaXRpb24gYmxvY2tzXG4gIFRoZSBzeW50YXggZm9yIHJlbmRlcmluZyBcIkFkbW9uaXRpb24gQmxvY2tzXCIgdG8gUGF0dGVybmZseSBSZWFjdCBBbGVydHM6XG4gIC0gQnJhY2tldGVkIGFsZXJ0IHRleHQgY29udGVudHNcbiAgLSBUaGUgYWRtb25pdGlvbiBrZXl3b3JkLCBmb2xsb3dlZCBieSB0aGUgYWxlcnQgdmFyaWFudCB5b3Ugd2FudFxuICAtIFZhcmlhbnRzIGFyZTogbm90ZSwgdGlwLCBpbXBvcnRhbnQsIGNhdXRpb24sIGFuZCB3YXJuaW5nXG5cbioqRXhhbXBsZXMqKlxuICBbVGhpcyBpcyB0aGUgbm90ZSBjb250ZW50cyB3aXRoICoqc29tZSBib2xkKiogdGV4dF17e2FkbW9uaXRpb24gbm90ZX19XG4gIFtUaGlzIGlzIHRoZSB0aXAgY29udGVudHNde3thZG1vbml0aW9uIHRpcH19XG4gIFtUaGlzIGlzIHRoZSBpbXBvcnRhbnQgY29udGVudHNde3thZG1vbml0aW9uIGltcG9ydGFudH19XG4gIFtUaGlzIGlzIHRoZSBjYXV0aW9uIGNvbnRlbnRzXXt7YWRtb25pdGlvbiBjYXV0aW9ufX1cbiAgW1RoaXMgaXMgdGhlIHdhcm5pbmcgY29udGVudHNde3thZG1vbml0aW9uIHdhcm5pbmd9fVxuICAgICAgICBgLFxuICAgICAgICAvLyBvcHRpb25hbCAtIHRoZSB0YXNrJ3MgQ2hlY2sgeW91ciB3b3JrIG1vZHVsZVxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6IGBEaWQgeW91IGNvbXBsZXRlIHRoZSB0YXNrIHN1Y2Nlc3NmdWxseT9gLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOiBgVGhpcyB0YXNrIGlzbid0IHZlcmlmaWVkIHlldC4gVHJ5IHRoZSB0YXNrIGFnYWluLmAsXG4gICAgICAgICAgLy8gb3B0aW9uYWwgLSB0aGUgdGFzaydzIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgbWVzc2FnZXNcbiAgICAgICAgfSxcbiAgICAgICAgc3VtbWFyeToge1xuICAgICAgICAgIHN1Y2Nlc3M6ICdTaG93cyBhIHN1Y2Nlc3MgbWVzc2FnZSBpbiB0aGUgdGFzayBoZWFkZXInLFxuICAgICAgICAgIGZhaWxlZDogJ1Nob3dzIGEgZmFpbGVkIG1lc3NhZ2UgaW4gdGhlIHRhc2sgaGVhZGVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb25jbHVzaW9uOiBjb25jbHVzaW9uKFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAnW0FQUF0nLFxuICAgICAgYFRvIGxlYXJuIG1vcmUgYWJvdXQgW0FQUF0ncyBleHRlbnNpdmUgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcywgcGxlYXNlIHZpc2l0IG91ciB3ZWJzaXRlIGF0IDxhIGhyZWY9XCIke2J1aWxkLmRvY3VtZW50YXRpb25Vcmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtidWlsZC5kb2N1bWVudGF0aW9uVXJsfTwvYT4uYFxuICAgICksXG4gICAgbmV4dFF1aWNrU3RhcnQ6IFsnc3RhcnQtYS1yZWNvcmRpbmctcXVpY2tzdGFydCddLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgR2VuZXJpY1F1aWNrU3RhcnQ7XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVpY2tTdGFydCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzJztcbmltcG9ydCB7IENvZ0ljb24gfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29uY2x1c2lvbiB9IGZyb20gJy4uL3F1aWNrc3RhcnQtdXRpbHMnO1xuXG5jb25zdCBkaXNwbGF5TmFtZSA9ICdVc2luZyBTZXR0aW5ncyc7XG5cbmNvbnN0IFNldHRpbmdzUXVpY2tTdGFydDogUXVpY2tTdGFydCA9IHtcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiAnc2V0dGluZ3MtcXVpY2tzdGFydCcsXG4gICAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTixcbiAgICBvcmRlcjogMTAwLFxuICB9LFxuICBzcGVjOiB7XG4gICAgdmVyc2lvbjogMi4zLFxuICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICBkdXJhdGlvbk1pbnV0ZXM6IDUsXG4gICAgaWNvbjogPENvZ0ljb24gLz4sXG4gICAgZGVzY3JpcHRpb246IGBMZWFybiBhYm91dCB0aGUgc2V0dGluZ3MgcGFnZSBpbiAqKltBUFBdKiogYW5kIGhvdyB0byB1c2UgaXQuYCxcbiAgICBwcmVyZXF1aXNpdGVzOiBbJyddLFxuICAgIGludHJvZHVjdGlvbjogYFxuIyMgVXNpbmcgU2V0dGluZ3NcbiAgICAgIFxuW0FQUF0gcHJvdmlkZXMgYSBzZXR0aW5ncyBwYWdlIHRoYXQgbGV0cyB5b3UgY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgYXBwbGljYXRpb24uIFRoaXMgcXVpY2sgc3RhcnQgd2lsbCBzaG93IHlvdSBob3cgdG8gdXNlIHRoZSBzZXR0aW5ncyBwYWdlLlxuXG4jIyMgV2hhdCB5b3UnbGwgbGVhcm5cbiAgLSBIb3cgdG8gbmF2aWdhdGUgdG8gdGhlIHNldHRpbmdzIHBhZ2VcbiAgLSBIb3cgdG8gY29uZmlndXJlIHNldHRpbmdzIGluIFtBUFBdXG4gICAgYCxcbiAgICB0YXNrczogW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ05hdmlnYXRlIHRvIHRoZSBTZXR0aW5ncyBwYWdlJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcbjEuIE9uIHRoZSBtYXN0aGVhZCwgY2xpY2sgdGhlIFtTZXR0aW5nc117e2hpZ2hsaWdodCBzZXR0aW5ncy1saW5rfX0gY29nLmAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0dvIHRvIHRoZSAqKkdlbmVyYWwqKiB0YWInLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuVGhlICoqR2VuZXJhbCoqIHNldHRpbmdzIHRhYiBpcyB3aGVyZSB5b3UgY2FuIGFkanVzdCB2YXJpb3VzIGdlbmVyYWwgc2V0dGluZ3MgdG8gdGFpbG9yIHlvdXIgZXhwZXJpZW5jZSB3aXRoIHRoZSBhcHBsaWNhdGlvbi4gWW91IGNhbiBzZWxlY3QgYSBwcmVmZXJyZWQgdGhlbWUsIHRoZSBkYXRlIGxvY2FsZSwgYW5kIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuXG4xLiBDbGljayBbR2VuZXJhbF17e2hpZ2hsaWdodCBzZXR0aW5ncy1nZW5lcmFsLXRhYn19LlxuMi4gQ29uZmlndXJlIHRoZSB0aGVtZS5cbjMuIENvbmZpZ3VyZSB0aGUgZGF0ZSBsb2NhbGUgYW5kIGN1cnJlbnQgdGltZXpvbmUuXG5bW0FQUF0gY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgRW5nbGlzaC4gV2UgYXJlIHBsYW5uaW5nIG9uIGFkZGluZyBzdXBwb3J0IGZvciBvdGhlciBsYW5ndWFnZXMgaW4gdGhlIGZ1dHVyZS5de3thZG1vbml0aW9uIG5vdGV9fWAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0dvIHRvIHRoZSAqKkNvbm5lY3Rpdml0eSoqIHRhYicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5UaGUgKipDb25uZWN0aXZpdHkqKiB0YWIgZW5hYmxlcyB5b3UgdG8gY29uZmlndXJlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBicm93c2VyIGFuZCB0aGUgW0FQUF0gYmFja2VuZC5cblxuMS4gQ2xpY2sgW0Nvbm5lY3Rpdml0eV17e2hpZ2hsaWdodCBzZXR0aW5ncy1jb25uZWN0aXZpdHktdGFifX0uXG4yLiBDb25maWd1cmUgdGhlICoqV2ViU29ja2V0IENvbm5lY3Rpb24gRGVib3VuY2UqKiB0aW1lLlxuMy4gQ29uZmlndXJlIHRoZSAqKkF1dG8tUmVmcmVzaCoqIHBlcmlvZCBmb3IgY29udGVudC12aWV3cy5cbltUbyB1c2UgdGhlICoqQXV0by1SZWZyZXNoKiogZmVhdHVyZSwgbWFrZSBzdXJlIHRvIGVuYWJsZSB0aGUgW0F1dG8tUmVmcmVzaF17e2hpZ2hsaWdodCBzZXR0aW5ncy1jb25uZWN0aXZpdHktdGFiLWF1dG8tcmVmcmVzaH19IGNoZWNrYm94Ll17e2FkbW9uaXRpb24gdGlwfX1cbmAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0dvIHRvIHRoZSAqKk5vdGlmaWNhdGlvbnMgJiBNZXNzYWdlcyoqIHRhYicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5UaGUgKipOb3RpZmljYXRpb25zICYgTWVzc2FnZXMqKiB0YWIgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlIG5vdGlmaWNhdGlvbnMgYW5kIGRlbGV0aW9uIHdhcm5pbmdzLlxuXG4xLiBDbGljayBbTm90aWZpY2F0aW9ucyAmIE1lc3NhZ2VzXXt7aGlnaGxpZ2h0IHNldHRpbmdzLW5vdGlmaWNhdGlvbnMmbWVzc2FnZXMtdGFifX0uXG4yLiBZb3UgY2FuIGVuYWJsZSBvciBkaXNhYmxlIG5vdGlmaWNhdGlvbnMgZnJvbSB2YXJpb3VzIGNhdGVnb3JpZXMuIENsaWNrIFxcYFNob3cgbW9yZVxcYCBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBub3RpZmljYXRpb25zLlxuICBUbyBjb250cm9sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub3RpZmljYXRpb25zLCBjb25maWd1cmUgdGhlIGlucHV0IGNvbnRyb2wuXG4zLiBZb3UgYXJlIGFsc28gYWJsZSB0byBlbmFibGUgb3IgZGlzYWJsZSBkZWxldGlvbiBkaWFsb2cgd2FybmluZ3MgZm9yIHZhcmlvdXMgZGVzdHJ1Y3RpdmUgYWN0aW9ucy4gQ2xpY2sgXFxgU2hvdyBtb3JlXFxgIGZvciB0aGUgZnVsbCBsaXN0IG9mIGRlbGV0aW9uIHdhcm5pbmdzLlxuYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnR28gdG8gdGhlICoqRGFzaGJvYXJkKiogdGFiJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcblRoZSAqKkRhc2hib2FyZCoqIHRhYiBhbGxvd3MgeW91IHRvIGNvbmZpZ3VyZSBzZXR0aW5ncyBmb3IgdGhlIHZhcmlvdXMgRGFzaGJvYXJkIENhcmRzIHRoYXQgeW91IGNhbiBhZGQgdG8gdGhlIERhc2hib2FyZC5cblxuVGhlICoqQXV0b21hdGVkIEFuYWx5c2lzKiogZGFzaGJvYXJkIGNhcmQgYWxsb3dzIHlvdSB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IGFuIGFuYWx5c2lzIG9uIHRoZSByZWNvcmRpbmcgd2l0aCBhIGNsaWNrIG9mIGEgYnV0dG9uLiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgcmVjb3JkaW5nIHRoYXQgaXMgc3RhcnRlZCBieSB0aGlzIGNhcmQuXG5cbjEuIEZyb20gdGhlIGxpc3Qgb2Ygc2V0dGluZ3MgdGFicywgY2xpY2sgW0Rhc2hib2FyZF17e2hpZ2hsaWdodCBzZXR0aW5ncy1kYXNoYm9hcmQtdGFifX0uXG4yLiBDb25maWd1cmUgdGhlICoqQXV0b21hdGVkIEFuYWx5c2lzIFJlY29yZGluZyBDb25maWd1cmF0aW9uKiogc2V0dGluZ3MuXG4zLiBDb25maWd1cmUgdGhlICoqRGFzaGJvYXJkIE1ldHJpY3MgQ29uZmlndXJhdGlvbioqIHNldHRpbmdzLlxuXG5bV2hlbiB1c2luZyB0aGUgKipBdXRvbWF0ZWQgQW5hbHlzaXMgQ2FyZCoqLCBtYWtlIHN1cmUgdGhlICoqRXZlbnQgVGVtcGxhdGUqKiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBKVk0uXXt7YWRtb25pdGlvbiB3YXJuaW5nfX1cbltTZXR0aW5nIGJvdGggYW4gaW5maW5pdGUgbWF4aW11bSBzaXplIGFuZCBhZ2UgbWF5IHJlc3VsdCBpbiBhbiAqKk91dCBPZiBNZW1vcnkqKiBlcnJvciBkdXJpbmcgcmVwb3J0IGdlbmVyYXRpb24uXXt7YWRtb25pdGlvbiBjYXV0aW9ufX1cbmAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0dvIHRvIHRoZSAqKkFkdmFuY2VkKiogdGFiJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcbltBUFBdIGhhcyBhIGZldyBhZHZhbmNlZCBzZXR0aW5ncyB0aGF0IGNhbiBiZSBjb25maWd1cmVkLlxuXG4xLiBDbGljayBbQWR2YW5jZWRde3toaWdobGlnaHQgc2V0dGluZ3MtYWR2YW5jZWQtdGFifX0uXG4yLiBDb25maWd1cmUgdGhlICoqQ3JlZGVudGlhbHMgU3RvcmFnZSoqIHNldHRpbmdzLlxuICBcbiAgQ3JlZGVudGlhbHMgYXJlIG5lY2Vzc2FyeSB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgdGFyZ2V0IEpWTXMgdGhhdCBbQVBQXSBjb21tdW5pY2F0ZXMgd2l0aCwgaWYgSk1YIGF1dGggaXMgZW5hYmxlZCBvciBpZiBhIFtBUFBdIGFnZW50IGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbiBpcyByZXF1aXJlZC4gSWYgeW91IHByZWZlciBub3QgdG8gc3RvcmUgdGhlc2UgY3JlZGVudGlhbHMgaW4gdGhlIFtBUFBdIGJhY2tlbmQsIHlvdSBjYW4gb3B0IHRvIHN0b3JlIHRoZW0gaW4gbG9jYWwgc2Vzc2lvbiBzdG9yYWdlIGluc3RlYWQuXG4zLiBDb25maWd1cmUgdGhlICoqRmVhdHVyZSBMZXZlbCoqIHNldHRpbmdzLlxuICBcbiAgVGhlICoqRmVhdHVyZSBMZXZlbCoqIHNldHRpbmcgZW5hYmxlcyB5b3UgdG8gZW5hYmxlIG9yIGRpc2FibGUgYmV0YSBmZWF0dXJlcy5cblxuYCxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb25jbHVzaW9uOiBjb25jbHVzaW9uKGRpc3BsYXlOYW1lLCAnU2V0dGluZ3MnKSxcbiAgICB0eXBlOiB7XG4gICAgICB0ZXh0OiAnSW50cm9kdWN0aW9uJyxcbiAgICAgIGNvbG9yOiAnYmx1ZScsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzUXVpY2tTdGFydDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IGJ1aWxkIGZyb20gJ0BhcHAvYnVpbGQuanNvbic7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFF1aWNrU3RhcnQgfSBmcm9tICdAcGF0dGVybmZseS9xdWlja3N0YXJ0cyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ3J5b3N0YXRJY29uLCBjb25jbHVzaW9uIH0gZnJvbSAnLi4vcXVpY2tzdGFydC11dGlscyc7XG5cbmNvbnN0IGRpc3BsYXlOYW1lID0gJ1N0YXJ0IGEgUmVjb3JkaW5nJztcblxuY29uc3QgUmVjb3JkaW5nUXVpY2tTdGFydDogUXVpY2tTdGFydCA9IHtcbiAgbWV0YWRhdGE6IHtcbiAgICBuYW1lOiAnc3RhcnQtYS1yZWNvcmRpbmctcXVpY2tzdGFydCcsXG4gICAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTixcbiAgICBvcmRlcjogMSxcbiAgfSxcbiAgc3BlYzoge1xuICAgIHZlcnNpb246IDIuMyxcbiAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAgZHVyYXRpb25NaW51dGVzOiAxMCxcbiAgICBpY29uOiA8Q3J5b3N0YXRJY29uIC8+LFxuICAgIGRlc2NyaXB0aW9uOiBgTGVhcm4gaG93IHRvIHN0YXJ0IGEgcmVjb3JkaW5nIHdpdGggSmF2YSBGbGlnaHQgUmVjb3JkZXIgKEpGUikgd2l0aCAqKltBUFBdKiouYCxcbiAgICBwcmVyZXF1aXNpdGVzOiBbJyddLFxuICAgIGludHJvZHVjdGlvbjogYFxuIyMgU3RhcnQgYSBSZWNvcmRpbmdcbioqSmF2YSBGbGlnaHQgUmVjb3JkZXIgKEpGUikqKiBpcyBhIHByb2ZpbGluZyB0b29sIHRoYXQgaXMgYnVpbHQgaW50byB0aGUgSlZNLiBJdCBhbGxvd3MgeW91IHRvIHJlY29yZCBldmVudHMgdGhhdCBoYXBwZW4gaW4gdGhlIEpWTSBhbmQgdGhlbiBhbmFseXplIHRoZSByZWNvcmRpbmcgdG8gZmluZCBwZXJmb3JtYW5jZSBpc3N1ZXMuIFtBUFBdIGxldmVyYWdlcyBKRlIgdG8gcHJvdmlkZSBhIHNpbXBsZSB3YXkgdG8gc3RhcnQsIHN0b3AsIGFuZCBkb3dubG9hZCByZWNvcmRpbmdzIGZyb20gYSBjb250YWluZXJpemVkIHRhcmdldCBKVk0uXG5cbiMjIyBXaGF0IHlvdSdsbCBsZWFyblxuXG4tIEhvdyB0byBzdGFydC9zdG9wIGEgSkZSIHJlY29yZGluZyBvbiBhIHRhcmdldCBKVk1cbi0gSG93IHRvIGRvd25sb2FkIGEgcmVjb3JkaW5nIGZyb20gW0FQUF0gdG8geW91ciBsb2NhbCBtYWNoaW5lXG4tIEhvdyB0byB2aWV3IGFuIGF1dG9tYXRlZCBhbmFseXNpcyByZXBvcnQgb2YgYSByZWNvcmRpbmcgd2l0aCBbQVBQXSdzIGNhcGFiaWxpdGllc1xuXG4jIyMgV2hhdCB5b3UnbGwgbmVlZFxuXG4tIEEgcnVubmluZyBpbnN0YW5jZSBvZiBbQVBQXSB3aGljaCBoYXMgZGlzY292ZXJlZCBhdCBsZWFzdCBvbmUgdGFyZ2V0IEpWTVxuLSBKTVggYXV0aCBjcmVkZW50aWFscyBmb3IgdGhlIHRhcmdldCBKVk0gKGlmIHJlcXVpcmVkKVxuXG5gLFxuICAgIHRhc2tzOiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnR28gdG8gdGhlIFJlY29yZGluZ3MgcGFnZScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnMS4gSW4gdGhlIFtBUFBdIGNvbnNvbGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIFtSZWNvcmRpbmdzXXt7aGlnaGxpZ2h0IG5hdi1yZWNvcmRpbmdzLXRhYn19LicsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IHNlZSB0aGUgUmVjb3JkaW5ncyBwYWdlLicsXG4gICAgICAgICAgZmFpbGVkVGFza0hlbHA6XG4gICAgICAgICAgICAnSWYgeW91IGRvIG5vdCBzZWUgdGhlIG5hdmlnYXRpb24gYmFyLCBjbGljayB0aGUgW21lbnUgYnV0dG9uXXt7aGlnaGxpZ2h0IG5hdi10b2dnbGUtYnRufX0gb24gdGhlIG1hc3RoZWFkLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1NlbGVjdCBhIHRhcmdldCBKVk0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCAgICBcblNlbGVjdCBhIHRhcmdldCBKVk0gZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFyZ2V0cyB0aGF0IFtBUFBdIGhhcyBkaXNjb3ZlcmVkLlxuXG4xLiBDbGljayB0aGUgW1RhcmdldCBTZWxlY3Rde3toaWdobGlnaHQgdGFyZ2V0LXNlbGVjdH19IGRyb3Bkb3duIG1lbnUuXG4yLiBTZWxlY3QgYSB0YXJnZXQgZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFyZ2V0cy5cblxuXG5bSWYgSk1YIEF1dGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB0byBlbnRlciB0aGVtLl17e2FkbW9uaXRpb24gbm90ZX19YCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB5b3UgY2FuIHNlZSB0aGUgUmVjb3JkaW5ncyB0YWJsZS4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOiAnSWYgeW91IGRvIG5vdCBzZWUgdGhlIHRhYmxlLCB0cnkgdGhlIGFib3ZlIHN0ZXBzIGFnYWluLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1N0YXJ0IGEgcmVjb3JkaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcblRoZXJlIGFyZSB0d28gdGFicyB3aXRoaW4gdGhlIFJlY29yZGluZ3MgcGFnZTpcblxuW0FjdGl2ZSBSZWNvcmRpbmdzXXt7aGlnaGxpZ2h0IGFjdGl2ZS1yZWNvcmRpbmdzLXRhYn19IGFuZCBbQXJjaGl2ZWQgUmVjb3JkaW5nc117e2hpZ2hsaWdodCBhcmNoaXZlZC1yZWNvcmRpbmdzLXRhYn19LlxuXG4qKkFjdGl2ZSByZWNvcmRpbmdzKiogYXJlIHJlY29yZGluZ3MgdGhhdCBvbmx5IGV4aXN0IG9ubHkgd2l0aGluIHRoZSB0YXJnZXQgSlZNLiAqKkFyY2hpdmVkIHJlY29yZGluZ3MqKiBhcmUgcmVjb3JkaW5ncyB0aGF0IGhhdmUgYmVlbiBzYXZlZCBmcm9tIHRoZSB0YXJnZXQgSlZNIGFuZCBjb3BpZWQgdG8gW0FQUF0ncyBzdG9yYWdlIHZvbHVtZS5cblxuVG8gc3RhcnQgYW4gYWN0aXZlIHJlY29yZGluZzpcblxuMS4gQ2xpY2sgW0NyZWF0ZV17e2hpZ2hsaWdodCByZWNvcmRpbmdzLWNyZWF0ZS1idG59fSB0byBvcGVuIHRoZSAqKkN1c3RvbSBGbGlnaHQgUmVjb3JkaW5nIEZvcm0qKi4gXG5bSWYgeW91IGhhdmUgYSBzbWFsbGVyIHZpZXdwb3J0LCB0aGUgXFxgQ3JlYXRlXFxgIGJ1dHRvbiBtYXkgbm90IGJlIGltbWVkaWF0ZWx5IHZpc2libGUuIEluIHRoaXMgY2FzZSwgeW91IGNhbiBjbGljayBvbiB0aGUga2ViYWIgYnV0dG9uICh0aHJlZSB2ZXJ0aWNhbCBkb3RzKSB0byByZXZlYWwgYWRkaXRpb25hbCBvcHRpb25zLCBpbmNsdWRpbmcgXFxgQ3JlYXRlXFxgLlwiXXt7YWRtb25pdGlvbiBub3RlfX1cbjIuIEVudGVyIGEgbmFtZSBmb3IgdGhlIHJlY29yZGluZyBpbiB0aGUgW05hbWVde3toaWdobGlnaHQgY3JmLW5hbWV9fSBmaWVsZC5cbjMuIFNlbGVjdCB0aGUgW0R1cmF0aW9uXXt7aGlnaGxpZ2h0IGNyZi1kdXJhdGlvbn19IGZvciB0aGUgcmVjb3JkaW5nLiBZb3UgY2FuIHNlbGVjdCBcXGBDT05USU5VT1VTXFxgIHRvIHJlY29yZCB1bnRpbCB0aGUgcmVjb3JkaW5nIGlzIHN0b3BwZWQuXG40LiBTZWxlY3QgYW4gW0V2ZW50IFRlbXBsYXRlXXt7aGlnaGxpZ2h0IHRlbXBsYXRlLXNlbGVjdG9yfX0gdG8gdXNlIGZvciB0aGUgcmVjb3JkaW5nLlxuNS4gQ2xpY2sgW0NyZWF0ZV17e2hpZ2hsaWdodCBjcmYtY3JlYXRlLWJ0bn19LlxuXG5BZnRlciB0aGUgY3JlYXRpb24gb2YgYSByZWNvcmRpbmcsIHRoZSByZWNvcmRpbmcgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlICoqQWN0aXZlIFJlY29yZGluZ3MqKiB0YWIuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBzZWUgdGhlIHJlY29yZGluZydzIG5hbWUsIHN0YXJ0IHRpbWUsIGR1cmF0aW9uLCBzdGF0ZSwgYW5kIGFueSBhdHRhY2hlZCBsYWJlbHMuXG5cbltZb3UgbWF5IGFsc28gYXR0YWNoIG1ldGFkYXRhIGxhYmVscyB0byB0aGUgcmVjb3JkaW5ncyB1bmRlciB0aGUgW01ldGFkYXRhXXt7aGlnaGxpZ2h0IGNyZi1tZXRhZGF0YS1vcHR9fSBvcHRpb25zIG9yIGNvbmZpZ3VyZSB5b3VyIGN1c3RvbSByZWNvcmRpbmcgZnVydGhlciB1bmRlciB0aGUgW0FkdmFuY2VkXXt7aGlnaGxpZ2h0IGNyZi1hZHZhbmNlZC1vcHR9fSBvcHRpb25zLl17e2FkbW9uaXRpb24gdGlwfX1gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBzZWUgdGhlIHJlY29yZGluZyB3aXRoaW4gdGhlIHRhYmxlLicsXG4gICAgICAgICAgZmFpbGVkVGFza0hlbHA6ICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgcmVjb3JkaW5nLCB0cnkgdGhlIGFib3ZlIHN0ZXBzIGFnYWluLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1N0b3AgYSByZWNvcmRpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuU3RvcHBpbmcgYSByZWNvcmRpbmcgd2lsbCBjdXQgb2ZmIHRoZSByZWNvcmRpbmcgYXQgdGhlIHRpbWUgdGhhdCB0aGUgcmVjb3JkaW5nIGlzIHN0b3BwZWQuXG5cbjEuIFNlbGVjdCB0aGUgW2NoZWNrYm94XXt7aGlnaGxpZ2h0IGFjdGl2ZS1yZWNvcmRpbmdzLWNoZWNrYm94fX0g4piQIG5leHQgdG8gdGhlIHJlY29yZGluZy5cbjIuIENsaWNrIFtTdG9wXXt7aGlnaGxpZ2h0IHJlY29yZGluZ3Mtc3RvcC1idG59fSB0byBzdG9wIHRoZSByZWNvcmRpbmcuYCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB0aGUgU1RBVEUgZmllbGQgb2YgdGhlIHJlY29yZGluZyBoYXMgY2hhbmdlZCB0byBTVE9QUEVELicsXG4gICAgICAgICAgZmFpbGVkVGFza0hlbHA6ICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgcmVjb3JkaW5nLCB0cnkgdGhlICoqU3RhcnQgYSByZWNvcmRpbmcqKiB0YXNrIGFnYWluLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0Rvd25sb2FkIGEgcmVjb3JkaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcbkRvd25sb2FkaW5nIGEgcmVjb3JkaW5nIHdpbGwgc2F2ZSB0aGUgcmVjb3JkaW5nIHRvIHlvdXIgbG9jYWwgbWFjaGluZSBhcyBhIEpGUiBmaWxlLiBZb3UgY2FuIHRoZW4gdXNlICoqSkRLIE1pc3Npb24gQ29udHJvbCAoSk1DKSoqIHRvIGFuYWx5emUgdGhlIHJlY29yZGluZy5cbjEuIE9wZW4gdGhlIFtrZWJhYiBtZW51XXt7aGlnaGxpZ2h0IHJlY29yZGluZy1rZWJhYn19IG5leHQgdG8gdGhlIHJlY29yZGluZyB0aGF0IHlvdSB3YW50IHRvIGRvd25sb2FkLlxuMi4gQ2xpY2sgXFxgRG93bmxvYWQgUmVjb3JkaW5nXFxgIHRvIHByb21wdCB5b3VyIGJyb3dzZXIgdG8gb3BlbiBhIGRpYWxvZyB0byBzYXZlIHRoZSByZWNvcmRpbmcgdG8geW91ciBsb2NhbCBtYWNoaW5lLlxuMy4gQ2hvb3NlIHdoYXQgdG8gZG8gd2l0aCB0aGUgZmlsZS5cbiAgICAgIGAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgcmVjb3JkaW5nIHRvIHlvdXIgbG9jYWwgbWFjaGluZS4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOiAnSWYgeW91IGRvIG5vdCBzZWUgdGhlIHJlY29yZGluZywgdHJ5IHRoZSAqKlN0YXJ0IGEgcmVjb3JkaW5nKiogdGFzayBhZ2Fpbi4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdWaWV3IGFuIGFuYWx5c2lzIHJlcG9ydCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5bQVBQXSBpcyBhYmxlIHRvIGdlbmVyYXRlIGFuICoqQXV0b21hdGVkIEFuYWx5c2lzIFJlcG9ydCoqIHVzaW5nIGEgSkZSIHJlY29yZGluZy4gVGhlICoqSmF2YSBNaXNzaW9uIENvbnRyb2wqKiBydWxlcyBlbmdpbmUgYW5hbHl6ZXMgeW91ciByZWNvcmRpbmcsIGxvb2tzIGZvciBjb21tb24gcHJvYmxlbXMsIGFuZCBhc3NpZ25zIGEgc2V2ZXJpdHkgc2NvcmUgZnJvbSAwIChubyBwcm9ibGVtKSB0byAxMDAgKHBvdGVudGlhbGx5IHNldmVyZSBwcm9ibGVtKSB0byBlYWNoIHByb2JsZW0uXG4xLiBDbGljayB0aGUgW2tlYmFiIG1lbnVde3toaWdobGlnaHQgcmVjb3JkaW5nLWtlYmFifX0gbmV4dCB0byB0aGUgcmVjb3JkaW5nIHRoYXQgeW91IHdhbnQgdG8gdmlldyBhbiBhbmFseXNpcyByZXBvcnQgZm9yLlxuMi4gQ2xpY2sgXFxgVmlldyBSZXBvcnQgLi4uXFxgIHRvIHZpZXcgYW4gYW5hbHlzaXMgcmVwb3J0IG9mIHRoZSByZWNvcmRpbmcgaW4gYSBuZXcgdGFiLlxuMy4gKk9wdGlvbmFsOiogUmlnaHQgY2xpY2sgb24gdGhlIHBhZ2UgYW5kIHNlbGVjdCBcXGBTYXZlIFBhZ2UgQXMuLi5cXGAgdG8gZG93bmxvYWQgdGhlIHJlcG9ydCBIVE1MIGZpbGUgdG8geW91ciBsb2NhbCBtYWNoaW5lLlxuYCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB5b3UgY2FuIHNlZSBhbiBhbmFseXNpcyByZXBvcnQgb2YgdGhlIHJlY29yZGluZy4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOlxuICAgICAgICAgICAgJ1RoZSBrZWJhYiBg4oGdYCBzaG91bGQgYmUgbmV4dCB0byB0aGUgcmVjb3JkaW5nIHJvdyBpbiB0aGUgYWN0aXZlIHJlY29yZGluZ3MgdGFibGUuIENsaWNraW5nIHRoZSBrZWJhYiBpY29uIHNob3VsZCBzaG93IGEgbWVudSB3aXRoIHRoZSBgVmlldyBSZXBvcnQgLi4uYCBvcHRpb24uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQXJjaGl2ZSBhIHJlY29yZGluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5BcmNoaXZpbmcgYSByZWNvcmRpbmcgd2lsbCBzYXZlIHRoZSByZWNvcmRpbmcgdG8gW0FQUF0ncyBhcmNoaXZhbCBzdG9yYWdlLCBhbmQgd2lsbCBwZXJzaXN0IGV2ZW4gYWZ0ZXIgZWl0aGVyIHRoZSB0YXJnZXQgSlZNLCBvciBbQVBQXSwgaGFzIHN0b3BwZWQuIFRoZXNlIHJlY29yZGluZ3Mgd2lsbCBhcHBlYXIgaW4gdGhlIHRhcmdldCBKVk0ncyAqKkFyY2hpdmVkIFJlY29yZGluZ3MqKiB0YWIsIGFzIHdlbGwgYXMgaW4gdGhlIFtBcmNoaXZlc117e2hpZ2hsaWdodCBuYXYtYXJjaGl2ZXMtdGFifX0gdmlldyBvbiB0aGUgW0FQUF0gY29uc29sZSBuYXZpZ2F0aW9uIGJhci5cblxuMS4gQ2xpY2sgW0FyY2hpdmVde3toaWdobGlnaHQgcmVjb3JkaW5ncy1hcmNoaXZlLWJ0bn19IHRvIGFyY2hpdmUgdGhlIHJlY29yZGluZy5cbjIuIFRvIHZpZXcgdGhlIGFyY2hpdmVkIHJlY29yZGluZyBpbiBbQVBQXSdzIHN0b3JhZ2UsIGdvIHRvIHRoZSBbQXJjaGl2ZWQgUmVjb3JkaW5nc117e2hpZ2hsaWdodCBhcmNoaXZlZC1yZWNvcmRpbmdzLXRhYn19IHRhYi5cblxuW1lvdSBjYW4gZG93bmxvYWQgYXJjaGl2ZWQgcmVjb3JkaW5ncyBhbmQgdmlldyBhbiBhbmFseXNpcyByZXBvcnQgb2YgdGhlIGFyY2hpdmVkIHJlY29yZGluZyBmcm9tIHRoZSBbQXJjaGl2ZWQgUmVjb3JkaW5nc117e2hpZ2hsaWdodCBhcmNoaXZlZC1yZWNvcmRpbmdzLXRhYn19IHRhYiwgc2ltaWxhciB0byBhY3RpdmUgcmVjb3JkaW5ncy5de3thZG1vbml0aW9uIHRpcH19YCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB0aGUgcmVjb3JkaW5nIGhhcyBiZWVuIGFyY2hpdmVkIGluIHRoZSAqKkFyY2hpdmVkIFJlY29yZGluZ3MqKiB0YWIuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdUaGUgcmVjb3JkaW5nIG5hbWUgc2hvdWxkIGhhdmUgYmVlbiBzYXZlZCBpbiB0aGUgZm9ybWF0IGA8anZtLWFsaWFzPl88cmVjb3JkaW5nLW5hbWU+Xzx0aW1lc3RhbXA+LmpmcmAuIElmIHlvdSBzdGlsbCBjYW5ub3QgZmluZCB0aGUgcmVjb3JkaW5nLCBwbGVhc2UgdHJ5IHRoZSBhYm92ZSBzdGVwcyBhZ2Fpbi4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbmNsdXNpb246IGNvbmNsdXNpb24oXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICdTdGFydCBhIHJlY29yZGluZycsXG4gICAgICBgVG8gbGVhcm4gbW9yZSBhYm91dCBbQVBQXSdzIGV4dGVuc2l2ZSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzLCBwbGVhc2UgdmlzaXQgb3VyIHdlYnNpdGUgYXQgPGEgaHJlZj1cIiR7YnVpbGQuZG9jdW1lbnRhdGlvblVybH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke2J1aWxkLmRvY3VtZW50YXRpb25Vcmx9PC9hPi5gXG4gICAgKSxcbiAgICB0eXBlOiB7XG4gICAgICB0ZXh0OiAnSW50cm9kdWN0aW9uJyxcbiAgICAgIGNvbG9yOiAnYmx1ZScsXG4gICAgfSxcbiAgICBuZXh0UXVpY2tTdGFydDogWydhdXRvbWF0ZWQtcnVsZXMtcXVpY2tzdGFydCddLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVjb3JkaW5nUXVpY2tTdGFydDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBjb25jbHVzaW9uLCBDcnlvc3RhdEljb24gfSBmcm9tICdAYXBwL1F1aWNrU3RhcnRzL3F1aWNrc3RhcnQtdXRpbHMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBRdWlja1N0YXJ0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcXVpY2tzdGFydHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBDdXN0b21UYXJnZXRRdWlja3N0YXJ0OiBRdWlja1N0YXJ0ID0ge1xuICBtZXRhZGF0YToge1xuICAgIG5hbWU6ICd0b3BvbG9neS9jcmVhdGUtY3VzdG9tLXRhcmdldC1xdWlja3N0YXJ0JyxcbiAgICBmZWF0dXJlTGV2ZWw6IEZlYXR1cmVMZXZlbC5QUk9EVUNUSU9OLFxuICB9LFxuICBzcGVjOiB7XG4gICAgdmVyc2lvbjogMi4zLFxuICAgIGRpc3BsYXlOYW1lOiAnQ3JlYXRlIGEgQ3VzdG9tIFRhcmdldCcsXG4gICAgZHVyYXRpb25NaW51dGVzOiAxMCxcbiAgICBpY29uOiA8Q3J5b3N0YXRJY29uIC8+LFxuICAgIGRlc2NyaXB0aW9uOiBgRG9uJ3Qgc2VlIHlvdXIgYXBwbGljYXRpb25zPyBVc2UgQ3VzdG9tIFRhcmdldHMgdG8gdGVsbCBDcnlvc3RhdCBhYm91dCB0aGVtIWAsXG4gICAgaW50cm9kdWN0aW9uOiBgXG4jIyBDdXN0b20gVGFyZ2V0c1xuQnkgZGVmYXVsdCwgdGFyZ2V0IEpWTXMgYXJlIGF1dG9tYXRpY2FsbHkgZGlzY292ZXJlZCBvdmVyIHJlbW90ZSBKYXZhIE1hbmFnZW1lbnQgRXh0ZW5zaW9ucyAoSk1YKSBieSAqKkNyeW9zdGF0KiosIHVzaW5nIHZhcmlvdXMgbWVjaGFuaXNtcyAoZS5nLiAqKkt1YmVybmV0ZXMgQVBJKiosICoqSkRQKiopLlxuSG93ZXZlciwgaW4gc29tZSBjYXNlcyAoZS5nLiBmb3IgKipLdWJlcm5ldGVzIEFQSSoqLCBKTVggcG9ydCBpcyBub3QgPGNvZGU+OTA5MTwvY29kZT4gYW5kIHBvcnQgbmFtZSBpcyBub3QgPGNvZGU+amZyLWpteDwvY29kZT4pLCBDcnlvc3RhdCBtaWdodCBub3Qgc2VlIHlvdXIgYXBwbGljYXRpb25zLiBGb3J0dW5hdGVseSwgeW91IGNhbiB0ZWxsIENyeW9zdGF0IGFib3V0IHRoZW0gYnkgc3BlY2lmeWluZyAqKkN1c3RvbSBUYXJnZXRzKiouXG5cbiMjIyBXaGF0IHlvdSdsbCBsZWFyblxuLSBIb3cgdG8gdGVzdCBhbmQgY3JlYXRlIGEgQ3VzdG9tIFRhcmdldCBkZWZpbml0aW9uXG5cbiMjIyBXaGF0IHlvdSdsbCBuZWVkXG5cbi0gQSBKYXZhIGFwcGxpY2F0aW9uIHRoYXQgQ3J5b3N0YXQgY2Fubm90IGF1dG9tYXRpY2FsbHkgZGlzY292ZXJcbi0gVGhlIGNvbm5lY3Rpb24gVVJMIGFuZCBKTVggY3JlZGVudGlhbHMsIGlmIHJlcXVpcmVkLCBmb3IgdGhhdCBhcHBsaWNhdGlvblxuYCxcbiAgICB0YXNrczogW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0dvIHRvIHRoZSBUb3BvbG9neSBwYWdlJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGAxLiBJbiB0aGUgW0FQUF0gY29uc29sZSBuYXZpZ2F0aW9uIGJhciwgY2xpY2sgW1RvcG9sb2d5XXt7aGlnaGxpZ2h0IG5hdi10b3BvbG9neS10YWJ9fS5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBzZWUgdGhlIFRvcG9sb2d5IHBhZ2UuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIHRoZSBbbWVudSBidXR0b25de3toaWdobGlnaHQgbmF2LXRvZ2dsZS1idG59fSBvbiB0aGUgbWFzdGhlYWQuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnT3BlbiBDdXN0b20gVGFyZ2V0IENyZWF0aW9uIEZvcm0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuXG4xLiBGcm9tIHRoZSB0b29sYmFyLCBjbGljayBvbiB0aGUgW2NhdGFsb2cgaWNvbl17e2hpZ2hsaWdodCB0b3BvbG9neS1jYXRhbG9nLWJ0bn19LlxuXG4gICAgICBUaGlzIHdpbGwgb3BlbiBhIG1vZGFsIGNvbnRhaW5pbmcgdGhlICoqVG9wb2xvZ3kgRW50aXR5IENhdGFsb2cqKi5cblxuW0FsdGVybmF0aXZlbHksIHByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+U3BhY2U8L2tiZD4gb3IgcmlnaHQgY2xpY2sgdGhlIHRvcG9sb2d5IHZpZXcuIFRoaXMgd2lsbCBvcGVuIGEgbWluaSBjYXRhbG9nIGZvciBxdWljayBhY2Nlc3MuXXt7YWRtb25pdGlvbiB0aXB9fVxuXG4yLiBGaW5kIGFuZCBzZWxlY3QgdGhlICoqQ3VzdG9tIFRhcmdldCoqIG9wdGlvbi4gVG8gYWlkIHlvdXIgc2VhcmNoLCB1c2UgdGhlIHNlYXJjaCBiYXIuXG4zLiBDbGljayBvbiB0aGUgKipDcmVhdGUqKiBidXR0b24gdG8gb3BlbiB0aGUgKipDdXN0b20gVGFyZ2V0IENyZWF0aW9uIEZvcm0qKi5cbmAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IGNhbiBvcGVuIHRoZSBjYXRhbG9nIGFuZCBzZWxlY3QgQ3VzdG9tIFRhcmdldC4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOiAnSWYgeW91IGRvIG5vdCBzZWUgdGhlIEN1c3RvbSBUYXJnZXQgb3B0aW9uLCB1c2UgdGhlIHNlYXJjaCBiYXIgdG8gZmluZCBpdC4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdGaWxsIG91dCB0aGUgQ3VzdG9tIFRhcmdldCBmb3JtJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcbjEuIEVudGVyIHRoZSBKTVggKipDb25uZWN0aW9uIFVSTCoqIGZvciB0aGUgdGFyZ2V0IGludG8gdGhlIFtDb25uZWN0aW9uIFVSTF17e2hpZ2hsaWdodCBjdC1jb25uZWN0dXJsLWlucHV0fX0gZmllbGQuXG4yLiBPcHRpb25hbGx5IGFzc2lnbiBhbiAqKkFsaWFzKiogdG8gdGhlIHRhcmdldCBieSB1c2luZyB0aGUgW0FsaWFzXXt7aGlnaGxpZ2h0IGN0LWFsaWFzLWlucHV0fX0gZmllbGQuXG4zLiBJZiB0aGUgdGFyZ2V0IGhhcyAqKkpNWCBhdXRoZW50aWNhdGlvbioqIGVuYWJsZWQsIGNsaWNrIHRoZSBbSk1YIENyZWRlbnRpYWwgT3B0aW9uXXt7aGlnaGxpZ2h0IGN0LWNyZWRlbnRpYWwtZXhwYW5kfX0gdG8gZXhwYW5kIHRoZSBmb3JtLlxuNC4gVXNlIHRoZSBbVXNlcm5hbWVde3toaWdobGlnaHQgY3QtdXNlcm5hbWUtaW5wdXR9fSBhbmQgW1Bhc3N3b3JkXXt7aGlnaGxpZ2h0IGN0LXBhc3N3b3JkLWlucHV0fX0gZmllbGRzIHRvIGVudGVyIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuXG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBoYXZlIGZpbGxlZCBvdXQgdGhlIGZvcm0uJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdDbGljayB0aGUgW0pNWCBDcmVkZW50aWFsIE9wdGlvbl17e2hpZ2hsaWdodCBjdC1jcmVkZW50aWFsLWV4cGFuZH19IHRvIGV4cGFuZCB0aGUgZm9ybSB0byByZXZlYWwgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnVGVzdCB0aGUgY3VzdG9tIHRhcmdldCBkZWZpbml0aW9uLicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5BZnRlciBmb3JtIGlzIGZpbGxlZCwgdGhlIFtzYW1wbGUgbm9kZV17e2hpZ2hsaWdodCBjdC1zYW1wbGUtdGVzdG5vZGV9fSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRob3NlIGluZm9ybWF0aW9uLlxuXG5UbyB0ZXN0IHRoZSAqKkN1c3RvbSBUYXJnZXQqKiBkZWZpbml0aW9uOlxuXG4xLiBDbGljayBvbiB0aGUgW3NhbXBsZSBub2RlIGljb25de3toaWdobGlnaHQgY3Qtc2FtcGxlLXRlc3Rub2RlLWljb259fSB0byB0ZXN0IHlvdXIgY3VzdG9tIHRhcmdldCBkZWZpbml0aW9uLiAqKkNyeW9zdGF0Kiogd2lsbCBhdHRlbXB0IGEgY29ubmVjdGlvbiB0byB0aGUgdGFyZ2V0IGRlZmluZWQgYnkgdGhlIGZvcm0gZGF0YS5cbjIuIElmIHRoZSBhdHRlbXB0IHN1Y2NlZWRzLCBhICoqQ2hlY2ttYXJrKiogaWNvbiBpcyBzaG93bi4gT3RoZXJ3aXNlLCBhbiAqKkV4Y2xhaW1hdGlvbioqIGljb24gYWxvbmcgd2l0aCBhbiBhbGVydCBiYW5uZXIgdGhhdCBkZXNjcmliZXMgdGhlIGVycm9yLlxuMy4gUmUtZW50ZXIgdGhlIGZvcm0gYW5kIHJlcGVhdCBzdGVwIDEtMiB1bnRpbCB5b3UgaGF2ZSBhIHZhbGlkIGRlZmluaXRpb24uXG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBjYW4gdGVzdCB0aGUgY3VzdG9tIHRhcmdldCBkZWZpbml0aW9uLicsXG4gICAgICAgICAgZmFpbGVkVGFza0hlbHA6ICdZb3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgKipDb25uZWN0aW9uIFVSTCoqIHRvIGVuYWJsZSB0ZXN0aW5nLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ0NyZWF0ZSB0aGUgQ3VzdG9tIFRhcmdldC4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuVG8gY3JlYXRlIHRoZSAqKkN1c3RvbSBUYXJnZXQqKiBkZWZpbml0aW9uOlxuXG4xLiBDbGljayBbQ3JlYXRlXXt7aGlnaGxpZ2h0IGN0LWNyZWF0ZS1idG59fS5cbjIuIElmIHRoZSBzdWJtaXNzaW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSB2aWV3IHdpbGwgYXV0b21hdGljYWxseSBiZSBkaXJlY3RlZCB0byB0aGUgKipUb3BvbG9neSoqIHBhZ2UuIE90aGVyd2lzZSwgcmV2aXNlIHlvdXIgZm9ybSBpbnB1dHMuXG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBjYW4gY3JlYXRlIHRoZSBjdXN0b20gdGFyZ2V0IGFuZCByZWRpcmVjdGVkIHRvIFRvcG9sb2d5IFZpZXcuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDogJ1JldmlzZSB5b3VyICoqQ3VzdG9tIFRhcmdldCoqIGRlZmluaXRpb24gdG8gZW5zdXJlIGl0IGlzIHZhbGlkLicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1ZpZXcgdGhlIEN1c3RvbSBUYXJnZXQuJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBcblRoZSAqKkN1c3RvbSBUYXJnZXQqKiB3aWxsIGFwcGVhciB1bmRlciAqKkN1c3RvbSBUYXJnZXRzIFJlYWxtKiouXG5bSW4gR3JhcGggVmlldywgdXNlIHRoZSB0b29sYmFyIHRvIGZpbHRlciBvdXQgdGhlICoqQ3VzdG9tIFRhcmdldHMgUmVhbG0qKiBhbmQgdGhlIGNvbnRyb2wgYmFyIHRvIGZpdCBncmFwaCBpbnRvIHNjcmVlbiwgaWYgbmVlZGVkLl17e2FkbW9uaXRpb24gdGlwfX1cbmAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IGNhbiBjYW4gc2VlIHRoZSBDdXN0b20gVGFyZ2V0LicsXG4gICAgICAgICAgZmFpbGVkVGFza0hlbHA6ICdJbiBhIGNsdXN0ZXJlZCBncmFwaCwgdXNlIHRoZSBmaWx0ZXIgYW5kIGNvbnRyb2wgYmFyIHRvIGFkanVzdCB0aGUgdmlldy4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbmNsdXNpb246IGNvbmNsdXNpb24oJ0NyZWF0ZSBhIEN1c3RvbSBUYXJnZXQnLCAnQ3VzdG9tIFRhcmdldHMnKSxcbiAgICB0eXBlOiB7XG4gICAgICB0ZXh0OiAnRmVhdHVyZWQnLFxuICAgICAgY29sb3I6ICdibHVlJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tVGFyZ2V0UXVpY2tzdGFydDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBjb25jbHVzaW9uLCBDcnlvc3RhdEljb24gfSBmcm9tICdAYXBwL1F1aWNrU3RhcnRzL3F1aWNrc3RhcnQtdXRpbHMnO1xuaW1wb3J0IHsgRmVhdHVyZUxldmVsIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvU2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBRdWlja1N0YXJ0IH0gZnJvbSAnQHBhdHRlcm5mbHkvcXVpY2tzdGFydHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBHcm91cFN0YXJ0UmVjb3JkaW5nUXVpY2tTdGFydDogUXVpY2tTdGFydCA9IHtcbiAgYXBpVmVyc2lvbjogJ3YyLjMuMCcsXG4gIG1ldGFkYXRhOiB7XG4gICAgbmFtZTogJ3RvcG9sb2d5L3N0YXJ0LWdyb3VwLXJlY29yZGluZycsXG4gICAgZmVhdHVyZUxldmVsOiBGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTixcbiAgfSxcbiAgc3BlYzoge1xuICAgIHZlcnNpb246IDIuMyxcbiAgICBkaXNwbGF5TmFtZTogJ1N0YXJ0IHJlY29yZGluZyBvbiBtdWx0aXBsZSB0YXJnZXQgSlZNcycsXG4gICAgZHVyYXRpb25NaW51dGVzOiA1LFxuICAgIGljb246IDxDcnlvc3RhdEljb24gLz4sXG4gICAgZGVzY3JpcHRpb246ICdMZWFybiBob3cgdG8gc3RhcnQgcmVjb3JkaW5ncyBvbiBtdWx0aXBsZSB0YXJnZXRzIGF0IG9uY2UuJyxcbiAgICBpbnRyb2R1Y3Rpb246IGBcbiMjIFRvcG9sb2d5IFZpZXdcblRoZSAqKkNyeW9zdGF0IFRvcG9sb2d5KiogcHJvdmlkZXMgYSB2aXN1YWwgcHJlc2VudGF0aW9uIG9mIGFsbCB0YXJnZXRzIGRpc2NvdmVyZWQgYnkgKipDcnlvc3RhdCoqLCB1c2luZyB2YXJpb3VzIG1lY2hhbmlzbXMgKGUuZy4gKipLdWJlcm5ldGVzIEFQSSoqLCAqKkpEUCoqKSB0aGF0IGFyZSByZXByZXNlbnRlZCBieSAqKlJlYWxtcyoqLlxuXG5XaXRoICoqVG9wb2xvZ3kqKiB2aWV3LCB5b3UgY2FuIHBlcmZvcm0gYWN0aW9ucyAoaS5lLiBzdGFydCByZWNvcmRpbmcpIG9uIGFuIGluZGl2aWR1YWwgdGFyZ2V0IG9yIGEgZ3JvdXAgb2YgdGFyZ2V0cywgdXNpbmcgZWl0aGVyICoqR3JhcGggVmlldyoqIG9yICoqTGlzdCBWaWV3KiouXG5cbiMjIyBXaGF0IHlvdSdsbCBsZWFyblxuLSBIb3cgdG8gc3RhcnQgcmVjb3JkaW5nIG9uIGEgZ3JvdXAgb2YgdGFyZ2V0c1xuXG4jIyMgV2hhdCB5b3UnbGwgbmVlZFxuXG4tIEEgcnVubmluZyBpbnN0YW5jZSBvZiBDcnlvc3RhdCB3aGljaCBoYXMgZGlzY292ZXJlZCBhdCBsZWFzdCBvbmUgdGFyZ2V0IEpWTVxuLSBKTVggYXV0aCBjcmVkZW50aWFscyBmb3IgdGhlIHRhcmdldCBKVk0gKGlmIHJlcXVpcmVkKVxuYCxcbiAgICB0YXNrczogW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ0dvIHRvIHRoZSBUb3BvbG9neSBwYWdlJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGAxLiBJbiB0aGUgW0FQUF0gY29uc29sZSBuYXZpZ2F0aW9uIGJhciwgY2xpY2sgW1RvcG9sb2d5XXt7aGlnaGxpZ2h0IG5hdi10b3BvbG9neS10YWJ9fS5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBzZWUgdGhlIFRvcG9sb2d5IHBhZ2UuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDpcbiAgICAgICAgICAgICdJZiB5b3UgZG8gbm90IHNlZSB0aGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIHRoZSBbbWVudSBidXR0b25de3toaWdobGlnaHQgbmF2LXRvZ2dsZS1idG59fSBvbiB0aGUgbWFzdGhlYWQuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnT3BlbiBhY3Rpb24gbWVudSBmb3IgYSBncm91cCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5UbyBvcGVuIHRoZSBhY3Rpb24gbWVudSBmb3IgYSB0YXJnZXQgZ3JvdXA6XG5cbi0gKkdyYXBoIFZpZXcqOiBSaWdodC1jbGljayBhIHRhcmdldCBncm91cCB0byBkaXNwbGF5IHRoZSAqKkFjdGlvbioqIG1lbnUuXG5cbi0gKkxpc3QgVmlldyo6IENsaWNrIHRoZSAqKkFjdGlvbioqIGRyb3Bkb3duIG1lbnUgbmV4dCB0byB0aGUgZ3JvdXAgbmFtZS5cbmAsXG4gICAgICAgIHJldmlldzoge1xuICAgICAgICAgIGluc3RydWN0aW9uczogJyMjIyMgVmVyaWZ5IHRoYXQgeW91IHNlZSBhY3Rpb24gbWVudS4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOiBgXG5JbiAqR3JhcGggVmlldyosIHRoZSBsaW5lIHN1cnJvbmRpbmcgdGhlIHRhcmdldHMgcmVwcmVzZW50cyB0aGUgZ3JvdXAuXG5cbkluICpMaXN0IFZpZXcqLCB0byByZXZlYWwgbmVzdGVkIGdyb3VwcywgY2xpY2sgb24gbGlzdCByb3dzLmAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1N0YXJ0IHJlY29yZGluZyBmb3IgYSBncm91cCBvZiB0YXJnZXRzLicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgXG5UbyBzdGFydCBhIHJlY29yZGluZyBmb3IgdGFyZ2V0cyB1bmRlciB0aGUgc2VsZWN0ZWQgZ3JvdXAsIHNlbGVjdCB0aGUgXFxgU3RhcnQgcmVjb3JkaW5nXFxgIG9wdGlvbi5cblxuT24gZWFjaCBkZXNjZW5kYW50IHRhcmdldCwgKipDcnlvc3RhdCoqIHdpbGwgY3JlYXRlIGFuIGFjdGl2ZSByZWNvcmRpbmcgbmFtZWQgXFxgY3J5b3N0YXRfdG9wb2xvZ3lfYWN0aW9uXFxgIHdpdGggdGhlIGxhYmVsXG5cXGBjcnlvc3RhdC5pby50b3BvbG9neS1ncm91cD08Z3JvdXBfbmFtZT5cXGAgd2hpY2ggcmVwcmVzZW50cyB0aGUgZ3JvdXAgdGhlIGFjdGlvbiBpcyBpbnZva2VkIG9uLlxuXG5bSW4gc29tZSBjYXNlcyAoZS5nLiBtaXNzaW5nIEpNWCBDcmVkZW50aWFscyksICoqQ3J5b3N0YXQqKiB3aWxsIGZhaWwgdG8gc3RhcnQgcmVjb3JkaW5nIG9uIHNvbWUgdGFyZ2V0cy5de3thZG1vbml0aW9uIHdhcm5pbmd9fVxuYCxcbiAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnIyMjIyBWZXJpZnkgdGhhdCB5b3UgY2FuIHN0YXJ0IHJlY29yZGluZyBvbiBhIGdyb3VwIG9mIHRhcmdldHMuJyxcbiAgICAgICAgICBmYWlsZWRUYXNrSGVscDogYElmIHlvdSBkbyBub3Qgc2VlIHRoZSAqKkFjdGlvbioqIG1lbnUsIGZvbGxvdyB0aGUgcHJldmlvdXMgc3RlcHMgYWdhaW4uYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnQ2hlY2sgdGhlIHN0YXJ0ZWQgcmVjb3JkaW5ncy4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFxuVG8gY2hlY2sgdGhlIHN0YXJ0ZWQgcmVjb3JkaW5ncyBpbiB0aGUgcHJldmlvdXMgc3RlcDpcblxuMS4gSW4gdGhlIFtBUFBdIGNvbnNvbGUgbmF2aWdhdGlvbiBiYXIsIGNsaWNrIFtSZWNvcmRpbmdzXXt7aGlnaGxpZ2h0IG5hdi1yZWNvcmRpbmdzLXRhYn19IHRvIGdvIHRvICoqUmVjb3JkaW5nKiogcGFnZS5cbjIuIENsaWNrIHRoZSBbVGFyZ2V0IFNlbGVjdF17e2hpZ2hsaWdodCB0YXJnZXQtc2VsZWN0fX0gZHJvcGRvd24gbWVudS5cbjMuIFNlbGVjdCBhIHRhcmdldCB0aGF0IGJlbG9uZyB0byB0aGUgc2VsZWN0ZWQgZ3JvdXAuXG40LiBUaGUgcmVjb3JkaW5nIHdpbGwgYmUgZGlzcGxheWVkIHdpdGggbmFtZSBcXGBjcnlvc3RhdF90b3BvbG9neV9hY3Rpb25cXGAgYW5kIGEgbGFiZWwgXFxgY3J5b3N0YXQuaW8udG9wb2xvZ3ktZ3JvdXA9PGdyb3VwX25hbWU+XFxgXG5cbltJbiB0aGUgKipUb3BvbG9neSBHcmFwaCBWaWV3KiosIHRhcmdldHMgKGkuZS4gbm9kZXMpIHRoYXQgaGF2ZSBhbnkgXFxgUlVOTklOR1xcYCBhY3RpdmUgcmVjb3JkaW5ncyB3aWxsIGhhdmUgYSBkZWNvcmF0b3Igb24gdGhlaXIgdG9wLXJpZ2h0IGNvcm5lciB0byBpbmRpY2F0ZSBzby5de3thZG1vbml0aW9uIHRpcH19XG5gLFxuICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6ICcjIyMjIFZlcmlmeSB0aGF0IHlvdSBjYW4gc3RhcnQgcmVjb3JkaW5nIG9uIGEgZ3JvdXAgb2YgdGFyZ2V0cy4nLFxuICAgICAgICAgIGZhaWxlZFRhc2tIZWxwOiBgSWYgeW91IGRvIG5vdCBzZWUgdGhlIHJlY29yZGluZywgZm9sbG93IHRoZSBwcmV2aW91cyBzdGVwcyBhZ2Fpbi5gLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNvbmNsdXNpb246IGNvbmNsdXNpb24oJ1N0YXJ0IHJlY29yZGluZyBvbiBtdWx0aXBsZSB0YXJnZXQgSlZNcycsICdUb3BvbG9neScpLFxuICAgIHR5cGU6IHtcbiAgICAgIHRleHQ6ICdGZWF0dXJlZCcsXG4gICAgICBjb2xvcjogJ2JsdWUnLFxuICAgIH0sXG4gICAgbmV4dFF1aWNrU3RhcnQ6IFsnY3VzdG9tLXRhcmdldC1xdWlja3N0YXJ0J10sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBHcm91cFN0YXJ0UmVjb3JkaW5nUXVpY2tTdGFydDtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuaW1wb3J0IHsgUXVpY2tTdGFydCB9IGZyb20gJ0BwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzJztcbmltcG9ydCBBdXRvbWF0ZWRSdWxlc1F1aWNrU3RhcnQgZnJvbSAnLi9xdWlja3N0YXJ0cy9hdXRvbWF0ZWQtcnVsZXMtcXVpY2tzdGFydCc7XG5pbXBvcnQgRGFzaGJvYXJkUXVpY2tTdGFydCBmcm9tICcuL3F1aWNrc3RhcnRzL2Rhc2hib2FyZC1xdWlja3N0YXJ0JztcbmltcG9ydCBHZW5lcmljUXVpY2tTdGFydCBmcm9tICcuL3F1aWNrc3RhcnRzL2dlbmVyaWMtcXVpY2tzdGFydCc7XG5pbXBvcnQgU2V0dGluZ3NRdWlja1N0YXJ0IGZyb20gJy4vcXVpY2tzdGFydHMvc2V0dGluZ3MtcXVpY2tzdGFydCc7XG5pbXBvcnQgUmVjb3JkaW5nUXVpY2tTdGFydCBmcm9tICcuL3F1aWNrc3RhcnRzL3N0YXJ0LWEtcmVjb3JkaW5nJztcbmltcG9ydCBDdXN0b21UYXJnZXRRdWlja3N0YXJ0IGZyb20gJy4vcXVpY2tzdGFydHMvdG9wb2xvZ3kvY3VzdG9tLXRhcmdldC1xdWlja3N0YXJ0JztcbmltcG9ydCBHcm91cFN0YXJ0UmVjb3JkaW5nUXVpY2tTdGFydCBmcm9tICcuL3F1aWNrc3RhcnRzL3RvcG9sb2d5L2dyb3VwLXN0YXJ0LXJlY29yZGluZ3MnO1xuXG4vLyBBZGQgeW91ciBxdWljayBzdGFydCBoZXJlIGUuZy4gW0dlbmVyaWNRdWlja1N0YXJ0LCAuLi5dXG5leHBvcnQgY29uc3QgYWxsUXVpY2tTdGFydHM6IFF1aWNrU3RhcnRbXSA9IFtcbiAgQXV0b21hdGVkUnVsZXNRdWlja1N0YXJ0LFxuICBEYXNoYm9hcmRRdWlja1N0YXJ0LFxuICBHZW5lcmljUXVpY2tTdGFydCxcbiAgUmVjb3JkaW5nUXVpY2tTdGFydCxcbiAgU2V0dGluZ3NRdWlja1N0YXJ0LFxuICBHcm91cFN0YXJ0UmVjb3JkaW5nUXVpY2tTdGFydCxcbiAgQ3VzdG9tVGFyZ2V0UXVpY2tzdGFydCxcbl07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCBidWlsZCBmcm9tICdAYXBwL2J1aWxkLmpzb24nO1xuaW1wb3J0IHsgTG9hZGluZ1ZpZXcgfSBmcm9tICdAYXBwL0xvYWRpbmdWaWV3L0xvYWRpbmdWaWV3JztcbmltcG9ydCB7IGFsbFF1aWNrU3RhcnRzIH0gZnJvbSAnQGFwcC9RdWlja1N0YXJ0cy9hbGwtcXVpY2tzdGFydHMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnQGFwcC9TaGFyZWQvU2VydmljZXMvTG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUZlYXR1cmVMZXZlbCB9IGZyb20gJ0BhcHAvdXRpbHMvdXNlRmVhdHVyZUxldmVsJztcbmltcG9ydCB7IHVzZVN1YnNjcmlwdGlvbnMgfSBmcm9tICdAYXBwL3V0aWxzL3VzZVN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHtcbiAgUXVpY2tTdGFydENvbnRleHQsXG4gIFF1aWNrU3RhcnREcmF3ZXIsXG4gIHVzZUxvY2FsU3RvcmFnZSxcbiAgdXNlVmFsdWVzRm9yUXVpY2tTdGFydENvbnRleHQsXG59IGZyb20gJ0BwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5cbmNvbnN0IExJTktfTEFCRUwgPSBcIltcXFxcZFxcXFx3XFxcXHMtKCkkISYnXStcIjsgLy8gaGFzIGV4dHJhICYnIGluIG1hdGNoZXJcbmNvbnN0IEhJR0hMSUdIVF9BQ1RJT05TID0gWydoaWdobGlnaHQnXTsgLy8gdXNlIG5hdGl2ZSBxdWlja3N0YXJ0cyBoaWdobGlnaHQgbWFya2Rvd24gZXh0ZW5zaW9uXG5jb25zdCBTRUxFQ1RPUl9JRCA9IGBbXFxcXHctJl0rYDsgLy8gaGFzIGV4dHJhICYnXG5cbi8vIFtsaW5rTGFiZWxde3thY3Rpb24gaWR9fVxuY29uc3QgSElHSExJR0hUX1JFR0VYUCA9IG5ldyBSZWdFeHAoYFxcXFxbKCR7TElOS19MQUJFTH0pXFxcXF17eygke0hJR0hMSUdIVF9BQ1RJT05TLmpvaW4oJ3wnKX0pICgke1NFTEVDVE9SX0lEfSl9fWAsICdnJyk7XG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbFF1aWNrU3RhcnREcmF3ZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBHbG9iYWxRdWlja1N0YXJ0RHJhd2VyOiBSZWFjdC5GQzxHbG9iYWxRdWlja1N0YXJ0RHJhd2VyUHJvcHM+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCBbYWN0aXZlUXVpY2tTdGFydElELCBzZXRBY3RpdmVRdWlja1N0YXJ0SURdID0gdXNlTG9jYWxTdG9yYWdlKCdxdWlja3N0YXJ0SWQnLCAnJyk7XG4gIGNvbnN0IFthbGxRdWlja1N0YXJ0U3RhdGVzLCBzZXRBbGxRdWlja1N0YXJ0U3RhdGVzXSA9IHVzZUxvY2FsU3RvcmFnZSgncXVpY2tzdGFydHMnLCB7fSk7XG5cbiAgY29uc3QgYWN0aXZlTGV2ZWwgPSB1c2VGZWF0dXJlTGV2ZWwoKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIGNvbnRleHQubG9naW4uZ2V0U2Vzc2lvblN0YXRlKCkuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgIGlmIChzID09IFNlc3Npb25TdGF0ZS5OT19VU0VSX1NFU1NJT04pIHtcbiAgICAgICAgICBzZXRBY3RpdmVRdWlja1N0YXJ0SUQoJycpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFthZGRTdWJzY3JpcHRpb24sIGNvbnRleHQubG9naW4sIHNldEFjdGl2ZVF1aWNrU3RhcnRJRF0pO1xuXG4gIGNvbnN0IGZpbHRlcmVkUXVpY2tTdGFydHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWxsUXVpY2tTdGFydHMuZmlsdGVyKChxcykgPT4gcXMubWV0YWRhdGEuZmVhdHVyZUxldmVsID49IGFjdGl2ZUxldmVsKTtcbiAgfSwgW2FjdGl2ZUxldmVsXSk7XG5cbiAgLy8gdXNlVmFsdWVzLi4uIGhvb2sgc2VlbXMgdG8gdXNlIGZpcnN0IHJlbmRlciB2YWx1ZSBvZiBhbGxRdWlja1N0YXJ0cywgc28gd2UgbmVlZCB0byByZS1yZW5kZXIgb24gYWN0aXZlTGV2ZWwgY2hhbmdlXG4gIGNvbnN0IHZhbHVlc0ZvclF1aWNrU3RhcnRDb250ZXh0ID0ge1xuICAgIC4uLnVzZVZhbHVlc0ZvclF1aWNrU3RhcnRDb250ZXh0KHtcbiAgICAgIGFjdGl2ZVF1aWNrU3RhcnRJRCxcbiAgICAgIHNldEFjdGl2ZVF1aWNrU3RhcnRJRCxcbiAgICAgIGFsbFF1aWNrU3RhcnRTdGF0ZXMsXG4gICAgICBzZXRBbGxRdWlja1N0YXJ0U3RhdGVzLFxuICAgICAgbGFuZ3VhZ2U6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICBtYXJrZG93bjoge1xuICAgICAgICBleHRlbnNpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gdGhpcyBvbmx5IHRha2VzIGludG8gZWZmZWN0IGlmIHRoZSByZWdleCBtYXRjaGVzIHRoZSBISUdITElHSFRfUkVHRVhQIGkuZS4gY29udGFpbnMgdGhlIGV4dHJhIG1hdGNoaW5nIHRva2VucyB0aGUgcGF0dGVybmZseS9xdWlja3N0YXJ0cyBoaWdobGlnaHQgZXh0ZW5zaW9uIHJlZ2V4IGRvZXMgbm90XG4gICAgICAgICAgICB0eXBlOiAnbGFuZycsXG4gICAgICAgICAgICByZWdleDogSElHSExJR0hUX1JFR0VYUCxcbiAgICAgICAgICAgIHJlcGxhY2U6ICh0ZXh0OiBzdHJpbmcsIGxpbmtMYWJlbDogc3RyaW5nLCBsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgICAgIGlmICghbGlua0xhYmVsIHx8ICFsaW5rVHlwZSB8fCAhbGlua0lkKSByZXR1cm4gdGV4dDtcbiAgICAgICAgICAgICAgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPVwicGYtYy1idXR0b24gcGYtbS1pbmxpbmUgcGYtbS1saW5rXCIgZGF0YS1oaWdobGlnaHQ9XCIke2xpbmtJZH1cIj4ke2xpbmtMYWJlbH08L2J1dHRvbj5gO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgW0FQUF0gd2l0aCBwcm9kdWN0TmFtZSBsaWtlIENyeW9zdGF0XG4gICAgICAgICAgICB0eXBlOiAnb3V0cHV0JyxcbiAgICAgICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKGBcXFxcW0FQUFxcXFxdYCwgJ2cnKSxcbiAgICAgICAgICAgIHJlcGxhY2U6IChfdGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2J1aWxkLnByb2R1Y3ROYW1lfWA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGFsbFF1aWNrU3RhcnRzOiBmaWx0ZXJlZFF1aWNrU3RhcnRzLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LlN1c3BlbnNlIGZhbGxiYWNrPXs8TG9hZGluZ1ZpZXcgLz59PlxuICAgICAgPFF1aWNrU3RhcnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZXNGb3JRdWlja1N0YXJ0Q29udGV4dH0+XG4gICAgICAgIDxRdWlja1N0YXJ0RHJhd2VyPntjaGlsZHJlbn08L1F1aWNrU3RhcnREcmF3ZXI+XG4gICAgICA8L1F1aWNrU3RhcnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUmVhY3QuU3VzcGVuc2U+XG4gICk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBwb3J0YWxSb290IH0gZnJvbSAnQGFwcC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBCdXR0b24sIE1vZGFsLCBNb2RhbFZhcmlhbnQsIFRleHQgfSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuZXhwb3J0IGludGVyZmFjZSBTc2xFcnJvck1vZGFsUHJvcHMge1xuICB2aXNpYmxlOiBib29sZWFuO1xuICBvbkRpc21pc3M6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBTc2xFcnJvck1vZGFsOiBSZWFjdC5GQzxTc2xFcnJvck1vZGFsUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHJvdXRlckhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgcm91dGVySGlzdG9yeS5wdXNoKCcvc2VjdXJpdHknKTtcbiAgICBwcm9wcy5vbkRpc21pc3MoKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgYXBwZW5kVG89e3BvcnRhbFJvb3R9XG4gICAgICBpc09wZW49e3Byb3BzLnZpc2libGV9XG4gICAgICB2YXJpYW50PXtNb2RhbFZhcmlhbnQubWVkaXVtfVxuICAgICAgc2hvd0Nsb3NlPXt0cnVlfVxuICAgICAgb25DbG9zZT17cHJvcHMub25EaXNtaXNzfVxuICAgICAgdGl0bGU9XCJTU0wgRXJyb3JcIlxuICAgICAgZGVzY3JpcHRpb249XCJUaGUgY29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgU1NMIENlcnRpZmljYXRlIGZvciB0aGUgdGFyZ2V0IGlzIG5vdCB0cnVzdGVkLlwiXG4gICAgPlxuICAgICAgPFRleHQ+XG4gICAgICAgIFRvIGFkZCB0aGUgU1NMIGNlcnRpZmljYXRlIGZvciB0aGlzIHRhcmdldCwgZ28gdG8gJm5ic3A7XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgU2VjdXJpdHlcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L1RleHQ+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn07XG4iLCIvKlxuICogQ29weXJpZ2h0IFRoZSBDcnlvc3RhdCBBdXRob3JzXG4gKlxuICogVGhlIFVuaXZlcnNhbCBQZXJtaXNzaXZlIExpY2Vuc2UgKFVQTCksIFZlcnNpb24gMS4wXG4gKlxuICogU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnlcbiAqIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQvb3IgZGF0YVxuICogKGNvbGxlY3RpdmVseSB0aGUgXCJTb2Z0d2FyZVwiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxsIGNvcHlyaWdodFxuICogcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5XG4gKiBsaWNlbnNhYmxlIGJ5IGVhY2ggbGljZW5zb3IgaGVyZXVuZGVyIGNvdmVyaW5nIGVpdGhlciAoaSkgdGhlIHVubW9kaWZpZWRcbiAqIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRvIG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExhcmdlclxuICogV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcbiAqXG4gKiAoYSkgdGhlIFNvZnR3YXJlLCBhbmRcbiAqIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWZcbiAqIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2FyZSAoZWFjaCBhIFwiTGFyZ2VyIFdvcmtcIiB0byB3aGljaCB0aGUgU29mdHdhcmVcbiAqIGlzIGNvbnRyaWJ1dGVkIGJ5IHN1Y2ggbGljZW5zb3JzKSxcbiAqXG4gKiB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIG1ha2UsXG4gKiB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZVxuICogU29mdHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vuc2UgdGhlIGZvcmVnb2luZyByaWdodHMgb25cbiAqIGVpdGhlciB0aGVzZSBvciBvdGhlciB0ZXJtcy5cbiAqXG4gKiBUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBlaXRoZXIgdGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIG5vdGljZSBvciBhdFxuICogYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yXG4gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7IEFib3V0Q3J5b3N0YXRNb2RhbCB9IGZyb20gJ0BhcHAvQWJvdXQvQWJvdXRDcnlvc3RhdE1vZGFsJztcbmltcG9ydCBjcnlvc3RhdExvZ28gZnJvbSAnQGFwcC9hc3NldHMvY3J5b3N0YXRfbG9nb19ob3JpX3JnYl9yZXZlcnNlLnN2Zyc7XG5pbXBvcnQgYnVpbGQgZnJvbSAnQGFwcC9idWlsZC5qc29uJztcbmltcG9ydCB7IHVzZUpveXJpZGUgfSBmcm9tICdAYXBwL0pveXJpZGUvSm95cmlkZVByb3ZpZGVyJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNlbnRlciB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DZW50ZXInO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25zQ29udGV4dCB9IGZyb20gJ0BhcHAvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IElBcHBSb3V0ZSwgbmF2R3JvdXBzLCByb3V0ZXMgfSBmcm9tICdAYXBwL3JvdXRlcyc7XG5pbXBvcnQgeyBzZWxlY3RUYWIsIFNldHRpbmdUYWIsIHRhYkFzUGFyYW0sIFRoZW1lU2V0dGluZyB9IGZyb20gJ0BhcHAvU2V0dGluZ3MvU2V0dGluZ3NVdGlscyc7XG5pbXBvcnQgeyBEeW5hbWljRmVhdHVyZUZsYWcsIEZlYXR1cmVGbGFnIH0gZnJvbSAnQGFwcC9TaGFyZWQvRmVhdHVyZUZsYWcvRmVhdHVyZUZsYWcnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2F0ZWdvcnkgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9Ob3RpZmljYXRpb25DaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlcyc7XG5pbXBvcnQgeyBGZWF0dXJlTGV2ZWwgfSBmcm9tICdAYXBwL1NoYXJlZC9TZXJ2aWNlcy9TZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHNhdmVUb0xvY2FsU3RvcmFnZSB9IGZyb20gJ0BhcHAvdXRpbHMvTG9jYWxTdG9yYWdlJztcbmltcG9ydCB7IHVzZUxvZ2luIH0gZnJvbSAnQGFwcC91dGlscy91c2VMb2dpbic7XG5pbXBvcnQgeyB1c2VTdWJzY3JpcHRpb25zIH0gZnJvbSAnQGFwcC91dGlscy91c2VTdWJzY3JpcHRpb25zJztcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSAnQGFwcC91dGlscy91c2VUaGVtZSc7XG5pbXBvcnQgeyBjbGVhbkRhdGFJZCwgaXNBc3NldE5ldywgb3BlblRhYkZvclVybCwgcG9ydGFsUm9vdCB9IGZyb20gJ0BhcHAvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQWxlcnQsXG4gIEFsZXJ0QWN0aW9uQ2xvc2VCdXR0b24sXG4gIEFsZXJ0R3JvdXAsXG4gIEFsZXJ0VmFyaWFudCxcbiAgQXBwbGljYXRpb25MYXVuY2hlcixcbiAgQXBwbGljYXRpb25MYXVuY2hlckl0ZW0sXG4gIEJyYW5kLFxuICBCdXR0b24sXG4gIERyb3Bkb3duLFxuICBEcm9wZG93bkdyb3VwLFxuICBEcm9wZG93bkl0ZW0sXG4gIERyb3Bkb3duVG9nZ2xlLFxuICBJY29uLFxuICBMYWJlbCxcbiAgTWFzdGhlYWQsXG4gIE1hc3RoZWFkQnJhbmQsXG4gIE1hc3RoZWFkQ29udGVudCxcbiAgTWFzdGhlYWRNYWluLFxuICBNYXN0aGVhZFRvZ2dsZSxcbiAgTmF2LFxuICBOYXZHcm91cCxcbiAgTmF2SXRlbSxcbiAgTm90aWZpY2F0aW9uQmFkZ2UsXG4gIFBhZ2UsXG4gIFBhZ2VTaWRlYmFyLFxuICBQYWdlVG9nZ2xlQnV0dG9uLFxuICBTa2lwVG9Db250ZW50LFxuICBUb29sYmFyLFxuICBUb29sYmFyQ29udGVudCxcbiAgVG9vbGJhckdyb3VwLFxuICBUb29sYmFySXRlbSxcbn0gZnJvbSAnQHBhdHRlcm5mbHkvcmVhY3QtY29yZSc7XG5pbXBvcnQge1xuICBCYXJzSWNvbixcbiAgQmVsbEljb24sXG4gIENhcmV0RG93bkljb24sXG4gIENvZ0ljb24sXG4gIEV4dGVybmFsTGlua0FsdEljb24sXG4gIFBsdXNDaXJjbGVJY29uLFxuICBRdWVzdGlvbkNpcmNsZUljb24sXG4gIFVzZXJJY29uLFxufSBmcm9tICdAcGF0dGVybmZseS9yZWFjdC1pY29ucyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IExpbmssIG1hdGNoUGF0aCwgTmF2TGluaywgdXNlSGlzdG9yeSwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBDcnlvc3RhdEpveXJpZGUgZnJvbSAnLi4vSm95cmlkZS9Dcnlvc3RhdEpveXJpZGUnO1xuaW1wb3J0IHsgR2xvYmFsUXVpY2tTdGFydERyYXdlciB9IGZyb20gJy4uL1F1aWNrU3RhcnRzL1F1aWNrU3RhcnREcmF3ZXInO1xuaW1wb3J0IHsgQXV0aE1vZGFsIH0gZnJvbSAnLi9BdXRoTW9kYWwnO1xuaW1wb3J0IHsgU3NsRXJyb3JNb2RhbCB9IGZyb20gJy4vU3NsRXJyb3JNb2RhbCc7XG5pbnRlcmZhY2UgQXBwTGF5b3V0UHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5jb25zdCBBcHBMYXlvdXQ6IFJlYWN0LkZDPEFwcExheW91dFByb3BzPiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3Qgc2VydmljZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFNlcnZpY2VDb250ZXh0KTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uc0NvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KE5vdGlmaWNhdGlvbnNDb250ZXh0KTtcbiAgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gdXNlU3Vic2NyaXB0aW9ucygpO1xuICBjb25zdCByb3V0ZXJIaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IHtcbiAgICBzZXRTdGF0ZTogc2V0Sm95U3RhdGUsXG4gICAgc3RhdGU6IGpveVN0YXRlLFxuICAgIGlzTmF2QmFyT3Blbjogam95TmF2T3BlbixcbiAgICBzZXRJc05hdkJhck9wZW46IHNldEpveU5hdk9wZW4sXG4gIH0gPSB1c2VKb3lyaWRlKCk7XG5cbiAgY29uc3QgW2lzTmF2T3Blbiwgc2V0SXNOYXZPcGVuXSA9IFtqb3lOYXZPcGVuLCBzZXRKb3lOYXZPcGVuXTtcbiAgY29uc3QgW2lzTW9iaWxlVmlldywgc2V0SXNNb2JpbGVWaWV3XSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbc2hvd0F1dGhNb2RhbCwgc2V0U2hvd0F1dGhNb2RhbF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93U3NsRXJyb3JNb2RhbCwgc2V0U2hvd1NzbEVycm9yTW9kYWxdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYWJvdXRNb2RhbE9wZW4sIHNldEFib3V0TW9kYWxPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzTm90aWZpY2F0aW9uRHJhd2VyRXhwYW5kZWQsIHNldE5vdGlmaWNhdGlvbkRyYXdlckV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qgc2hvd1VzZXJJY29uID0gdXNlTG9naW4oKTtcbiAgY29uc3QgW3Nob3dVc2VySW5mb0Ryb3Bkb3duLCBzZXRTaG93VXNlckluZm9Ecm9wZG93bl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93SGVscERyb3Bkb3duLCBzZXRTaG93SGVscERyb3Bkb3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3VzZXJuYW1lLCBzZXRVc2VybmFtZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtub3RpZmljYXRpb25zLCBzZXROb3RpZmljYXRpb25zXSA9IFJlYWN0LnVzZVN0YXRlKFtdIGFzIE5vdGlmaWNhdGlvbltdKTtcbiAgY29uc3QgW3Zpc2libGVOb3RpZmljYXRpb25zQ291bnQsIHNldFZpc2libGVOb3RpZmljYXRpb25zQ291bnRdID0gUmVhY3QudXNlU3RhdGUoNSk7XG4gIGNvbnN0IFt1bnJlYWROb3RpZmljYXRpb25zQ291bnQsIHNldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudF0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2Vycm9yTm90aWZpY2F0aW9uc0NvdW50LCBzZXRFcnJvck5vdGlmaWNhdGlvbnNDb3VudF0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2FjdGl2ZUxldmVsLCBzZXRBY3RpdmVMZXZlbF0gPSBSZWFjdC51c2VTdGF0ZShGZWF0dXJlTGV2ZWwuUFJPRFVDVElPTik7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgW3RoZW1lXSA9IHVzZVRoZW1lKCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhlbWUgPT09IFRoZW1lU2V0dGluZy5EQVJLKSB7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncGYtdGhlbWUtZGFyaycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncGYtdGhlbWUtZGFyaycpO1xuICAgIH1cbiAgfSwgW3RoZW1lXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBzZXJ2aWNlQ29udGV4dC50YXJnZXQuYXV0aEZhaWx1cmUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRTaG93QXV0aE1vZGFsKHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VydmljZUNvbnRleHQudGFyZ2V0LCBzZXRTaG93QXV0aE1vZGFsLCBhZGRTdWJzY3JpcHRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihub3RpZmljYXRpb25zQ29udGV4dC5ub3RpZmljYXRpb25zKCkuc3Vic2NyaWJlKChuKSA9PiBzZXROb3RpZmljYXRpb25zKFsuLi5uXSkpKTtcbiAgfSwgW25vdGlmaWNhdGlvbnNDb250ZXh0LCBhZGRTdWJzY3JpcHRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihub3RpZmljYXRpb25zQ29udGV4dC5kcmF3ZXJTdGF0ZSgpLnN1YnNjcmliZShzZXROb3RpZmljYXRpb25EcmF3ZXJFeHBhbmRlZCkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBub3RpZmljYXRpb25zQ29udGV4dCwgc2V0Tm90aWZpY2F0aW9uRHJhd2VyRXhwYW5kZWRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy52aXNpYmxlTm90aWZpY2F0aW9uc0NvdW50KCkuc3Vic2NyaWJlKHNldFZpc2libGVOb3RpZmljYXRpb25zQ291bnQpKTtcbiAgfSwgW2FkZFN1YnNjcmlwdGlvbiwgc2VydmljZUNvbnRleHQuc2V0dGluZ3MsIHNldFZpc2libGVOb3RpZmljYXRpb25zQ291bnRdKTtcblxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5mZWF0dXJlTGV2ZWwoKS5zdWJzY3JpYmUoKGZlYXR1cmVMZXZlbCkgPT4gc2V0QWN0aXZlTGV2ZWwoZmVhdHVyZUxldmVsKSkpO1xuICB9LCBbYWRkU3Vic2NyaXB0aW9uLCBzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncywgc2V0QWN0aXZlTGV2ZWxdKTtcblxuICBjb25zdCBub3RpZmljYXRpb25zVG9EaXNwbGF5ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbnNcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFuLnJlYWQgJiYgIW4uaGlkZGVuKVxuICAgICAgLmZpbHRlcigobikgPT4gc2VydmljZUNvbnRleHQuc2V0dGluZ3Mubm90aWZpY2F0aW9uc0VuYWJsZWRGb3IoTm90aWZpY2F0aW9uQ2F0ZWdvcnlbbi5jYXRlZ29yeSB8fCAnJ10pKVxuICAgICAgLnNvcnQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKCFwcmV2LnRpbWVzdGFtcCkgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoIWN1cnIudGltZXN0YW1wKSByZXR1cm4gMTtcbiAgICAgICAgcmV0dXJuIHByZXYudGltZXN0YW1wIC0gY3Vyci50aW1lc3RhbXA7XG4gICAgICB9KTtcbiAgfSwgW25vdGlmaWNhdGlvbnMsIHNlcnZpY2VDb250ZXh0LnNldHRpbmdzXSk7XG5cbiAgY29uc3Qgb3ZlcmZsb3dNZXNzYWdlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTm90aWZpY2F0aW9uRHJhd2VyRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3Qgb3ZlcmZsb3cgPSBub3RpZmljYXRpb25zVG9EaXNwbGF5Lmxlbmd0aCAtIHZpc2libGVOb3RpZmljYXRpb25zQ291bnQ7XG4gICAgaWYgKG92ZXJmbG93ID4gMCkge1xuICAgICAgcmV0dXJuIGBWaWV3ICR7b3ZlcmZsb3d9IG1vcmVgO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0sIFtpc05vdGlmaWNhdGlvbkRyYXdlckV4cGFuZGVkLCBub3RpZmljYXRpb25zVG9EaXNwbGF5LCB2aXNpYmxlTm90aWZpY2F0aW9uc0NvdW50XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24obm90aWZpY2F0aW9uc0NvbnRleHQudW5yZWFkTm90aWZpY2F0aW9ucygpLnN1YnNjcmliZSgocykgPT4gc2V0VW5yZWFkTm90aWZpY2F0aW9uc0NvdW50KHMubGVuZ3RoKSkpO1xuICB9LCBbbm90aWZpY2F0aW9uc0NvbnRleHQsIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCwgc2V0VW5yZWFkTm90aWZpY2F0aW9uc0NvdW50LCBhZGRTdWJzY3JpcHRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFkZFN1YnNjcmlwdGlvbihcbiAgICAgIG5vdGlmaWNhdGlvbnNDb250ZXh0XG4gICAgICAgIC51bnJlYWROb3RpZmljYXRpb25zKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSkgPT5cbiAgICAgICAgICAgIF8uZmlsdGVyKG5vdGlmaWNhdGlvbnMsIChuKSA9PiBuLnZhcmlhbnQgPT09IEFsZXJ0VmFyaWFudC5kYW5nZXIgfHwgbi52YXJpYW50ID09PSBBbGVydFZhcmlhbnQud2FybmluZylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocykgPT4gc2V0RXJyb3JOb3RpZmljYXRpb25zQ291bnQocy5sZW5ndGgpKVxuICAgICk7XG4gIH0sIFtcbiAgICBub3RpZmljYXRpb25zQ29udGV4dCxcbiAgICBub3RpZmljYXRpb25zQ29udGV4dC51bnJlYWROb3RpZmljYXRpb25zLFxuICAgIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCxcbiAgICBzZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnQsXG4gICAgYWRkU3Vic2NyaXB0aW9uLFxuICBdKTtcblxuICBjb25zdCBkaXNtaXNzQXV0aE1vZGFsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNob3dBdXRoTW9kYWwoZmFsc2UpO1xuICB9LCBbc2V0U2hvd0F1dGhNb2RhbF0pO1xuXG4gIGNvbnN0IGF1dGhNb2RhbE9uU2F2ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXJ2aWNlQ29udGV4dC50YXJnZXQuc2V0QXV0aFJldHJ5KCk7XG4gICAgZGlzbWlzc0F1dGhNb2RhbCgpO1xuICB9LCBbc2VydmljZUNvbnRleHQudGFyZ2V0LCBkaXNtaXNzQXV0aE1vZGFsXSk7XG5cbiAgY29uc3QgaGFuZGxlTWFya05vdGlmaWNhdGlvblJlYWQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoa2V5KSA9PiAoKSA9PiBub3RpZmljYXRpb25zQ29udGV4dC5zZXRSZWFkKGtleSwgdHJ1ZSksXG4gICAgW25vdGlmaWNhdGlvbnNDb250ZXh0XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRpbWVvdXQgPSBSZWFjdC51c2VDYWxsYmFjaygoa2V5KSA9PiAoKSA9PiBub3RpZmljYXRpb25zQ29udGV4dC5zZXRIaWRkZW4oa2V5KSwgW25vdGlmaWNhdGlvbnNDb250ZXh0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oXG4gICAgICBzZXJ2aWNlQ29udGV4dC50YXJnZXQuc3NsRmFpbHVyZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHNldFNob3dTc2xFcnJvck1vZGFsKHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VydmljZUNvbnRleHQudGFyZ2V0LCBzZXJ2aWNlQ29udGV4dC50YXJnZXQuc3NsRmFpbHVyZSwgc2V0U2hvd1NzbEVycm9yTW9kYWwsIGFkZFN1YnNjcmlwdGlvbl0pO1xuXG4gIGNvbnN0IGRpc21pc3NTc2xFcnJvck1vZGFsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0U2hvd1NzbEVycm9yTW9kYWwoZmFsc2UpLCBbc2V0U2hvd1NzbEVycm9yTW9kYWxdKTtcblxuICBjb25zdCBvbk5hdlRvZ2dsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc05hdk9wZW4oKGlzTmF2T3BlbikgPT4ge1xuICAgICAgaWYgKGpveVN0YXRlLnJ1biA9PT0gdHJ1ZSAmJiBqb3lTdGF0ZS5zdGVwSW5kZXggPT09IDEgJiYgIWlzTmF2T3Blbikge1xuICAgICAgICBzZXRKb3lTdGF0ZSh7IHN0ZXBJbmRleDogMiB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaXNOYXZPcGVuO1xuICAgIH0pO1xuICB9LCBbc2V0SXNOYXZPcGVuLCBqb3lTdGF0ZSwgc2V0Sm95U3RhdGVdKTtcblxuICAvLyBwcmV2ZW50IHBhZ2UgcmVzaXplIHRvIGNsb3NlIG5hdiBkdXJpbmcgdG91clxuICBjb25zdCBvblBhZ2VSZXNpemUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAocHJvcHM6IHsgbW9iaWxlVmlldzogYm9vbGVhbjsgd2luZG93U2l6ZTogbnVtYmVyIH0pID0+IHtcbiAgICAgIGlmIChqb3lTdGF0ZS5ydW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHNldElzTW9iaWxlVmlldyhwcm9wcy5tb2JpbGVWaWV3KTtcbiAgICAgICAgc2V0SXNOYXZPcGVuKCFwcm9wcy5tb2JpbGVWaWV3KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtqb3lTdGF0ZSwgc2V0SXNNb2JpbGVWaWV3LCBzZXRJc05hdk9wZW5dXG4gICk7XG5cbiAgY29uc3QgbW9iaWxlT25TZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoXykgPT4ge1xuICAgICAgaWYgKGlzTW9iaWxlVmlldykge1xuICAgICAgICBzZXRJc05hdk9wZW4oZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzTW9iaWxlVmlldywgc2V0SXNOYXZPcGVuXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNldHRpbmdzQnV0dG9uQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcm91dGVySGlzdG9yeS5wdXNoKCcvc2V0dGluZ3MnKTtcbiAgfSwgW3JvdXRlckhpc3RvcnldKTtcblxuICBjb25zdCBoYW5kbGVOb3RpZmljYXRpb25DZW50ZXJUb2dnbGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbm90aWZpY2F0aW9uc0NvbnRleHQuc2V0RHJhd2VyU3RhdGUoIWlzTm90aWZpY2F0aW9uRHJhd2VyRXhwYW5kZWQpO1xuICB9LCBbaXNOb3RpZmljYXRpb25EcmF3ZXJFeHBhbmRlZCwgbm90aWZpY2F0aW9uc0NvbnRleHRdKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZU5vdGlmaWNhdGlvbkNlbnRlciA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBub3RpZmljYXRpb25zQ29udGV4dC5zZXREcmF3ZXJTdGF0ZShmYWxzZSk7XG4gIH0sIFtub3RpZmljYXRpb25zQ29udGV4dF0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ob3RpZmljYXRpb25DZW50ZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbm90aWZpY2F0aW9uc0NvbnRleHQuc2V0RHJhd2VyU3RhdGUodHJ1ZSk7XG4gIH0sIFtub3RpZmljYXRpb25zQ29udGV4dF0pO1xuXG4gIGNvbnN0IGhhbmRsZUxvZ291dCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oc2VydmljZUNvbnRleHQubG9naW4uc2V0TG9nZ2VkT3V0KCkuc3Vic2NyaWJlKCkpO1xuICB9LCBbc2VydmljZUNvbnRleHQubG9naW4sIGFkZFN1YnNjcmlwdGlvbl0pO1xuXG4gIGNvbnN0IGhhbmRsZUxhbmd1YWdlUHJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocm91dGVySGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSA9PT0gJy9zZXR0aW5ncycpIHtcbiAgICAgIHNlbGVjdFRhYihTZXR0aW5nVGFiLkdFTkVSQUwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0YWI6IHRhYkFzUGFyYW0oU2V0dGluZ1RhYi5HRU5FUkFMKSB9KTtcbiAgICAgIHJvdXRlckhpc3RvcnkucHVzaChgL3NldHRpbmdzPyR7cXVlcnl9YCk7XG4gICAgfVxuICB9LCBbcm91dGVySGlzdG9yeV0pO1xuXG4gIGNvbnN0IGhhbmRsZVVzZXJJbmZvVG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0U2hvd1VzZXJJbmZvRHJvcGRvd24oKHYpID0+ICF2KSwgW3NldFNob3dVc2VySW5mb0Ryb3Bkb3duXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRTdWJzY3JpcHRpb24oc2VydmljZUNvbnRleHQubG9naW4uZ2V0VXNlcm5hbWUoKS5zdWJzY3JpYmUoc2V0VXNlcm5hbWUpKTtcbiAgfSwgW3NlcnZpY2VDb250ZXh0LCBzZXJ2aWNlQ29udGV4dC5sb2dpbiwgYWRkU3Vic2NyaXB0aW9uLCBzZXRVc2VybmFtZV0pO1xuXG4gIGNvbnN0IHVzZXJJbmZvSXRlbXMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIDxGZWF0dXJlRmxhZyBsZXZlbD17RmVhdHVyZUxldmVsLkJFVEF9IGtleT17J2xhbmd1YWdlLXByZWZlcmVuY2VzLWZlYXR1cmUtZmxhZyd9PlxuICAgICAgICA8RHJvcGRvd25Hcm91cCBrZXk9eydsYW5ndWFnZS1wcmVmZXJlbmNlcyd9PlxuICAgICAgICAgIDxEcm9wZG93bkl0ZW0gb25DbGljaz17aGFuZGxlTGFuZ3VhZ2VQcmVmfT5MYW5ndWFnZSBwcmVmZXJlbmNlPC9Ecm9wZG93bkl0ZW0+XG4gICAgICAgIDwvRHJvcGRvd25Hcm91cD5cbiAgICAgIDwvRmVhdHVyZUZsYWc+LFxuICAgICAgPERyb3Bkb3duR3JvdXAga2V5PXsnbG9nLW91dCd9PlxuICAgICAgICA8RHJvcGRvd25JdGVtIG9uQ2xpY2s9e2hhbmRsZUxvZ291dH0+TG9nIG91dDwvRHJvcGRvd25JdGVtPlxuICAgICAgPC9Ecm9wZG93bkdyb3VwPixcbiAgICBdLFxuICAgIFtoYW5kbGVMb2dvdXQsIGhhbmRsZUxhbmd1YWdlUHJlZl1cbiAgKTtcblxuICBjb25zdCBVc2VySW5mb1RvZ2dsZSA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPERyb3Bkb3duVG9nZ2xlIG9uVG9nZ2xlPXtoYW5kbGVVc2VySW5mb1RvZ2dsZX0gdG9nZ2xlSW5kaWNhdG9yPXtDYXJldERvd25JY29ufT5cbiAgICAgICAge3VzZXJuYW1lIHx8IDxVc2VySWNvbiBjb2xvcj1cIndoaXRlXCIgc2l6ZT1cInNtXCIgLz59XG4gICAgICA8L0Ryb3Bkb3duVG9nZ2xlPlxuICAgICksXG4gICAgW3VzZXJuYW1lLCBoYW5kbGVVc2VySW5mb1RvZ2dsZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVIZWxwVG9nZ2xlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0U2hvd0hlbHBEcm9wZG93bigodikgPT4gIXYpLCBbc2V0U2hvd0hlbHBEcm9wZG93bl0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW5BYm91dE1vZGFsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEFib3V0TW9kYWxPcGVuKHRydWUpO1xuICB9LCBbc2V0QWJvdXRNb2RhbE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZUFib3V0TW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0QWJvdXRNb2RhbE9wZW4oZmFsc2UpO1xuICB9LCBbc2V0QWJvdXRNb2RhbE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVPcGVuRG9jdW1lbnRhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvcGVuVGFiRm9yVXJsKGJ1aWxkLmhvbWVQYWdlVXJsKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW5EaXNjdXNzaW9uID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9wZW5UYWJGb3JVcmwoYnVpbGQuZGlzY3Vzc2lvblVybCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuR3VpZGVkVG91ciA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRKb3lTdGF0ZSh7IHJ1bjogdHJ1ZSB9KTtcbiAgfSwgW3NldEpveVN0YXRlXSk7XG5cbiAgY29uc3QgaGVscEl0ZW1zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIDxBcHBsaWNhdGlvbkxhdW5jaGVySXRlbVxuICAgICAgICBrZXk9eydRdWlja3N0YXJ0cyd9XG4gICAgICAgIGNvbXBvbmVudD17PE5hdkxpbmsgdG89XCIvcXVpY2tzdGFydHNcIj57dCgnQXBwTGF5b3V0LkFQUF9MQVVOQ0hFUi5RVUlDS1NUQVJUUycpfTwvTmF2TGluaz59XG4gICAgICAvPixcbiAgICAgIDxBcHBsaWNhdGlvbkxhdW5jaGVySXRlbSBrZXk9eydEb2N1bWVudGF0aW9uJ30gb25DbGljaz17aGFuZGxlT3BlbkRvY3VtZW50YXRpb259PlxuICAgICAgICA8c3Bhbj57dCgnQXBwTGF5b3V0LkFQUF9MQVVOQ0hFUi5ET0NVTUVOVEFUSU9OJyl9PC9zcGFuPlxuICAgICAgICA8SWNvbiBpc0lubGluZSBzaXplPVwibGdcIiBpY29uU2l6ZT1cInNtXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJ2F1dG8nLCBwYWRkaW5nTGVmdDogJzFjaCcgfX0+XG4gICAgICAgICAgPEV4dGVybmFsTGlua0FsdEljb24gY29sb3I9XCJncmV5XCIgLz5cbiAgICAgICAgPC9JY29uPlxuICAgICAgPC9BcHBsaWNhdGlvbkxhdW5jaGVySXRlbT4sXG4gICAgICA8QXBwbGljYXRpb25MYXVuY2hlckl0ZW0ga2V5PXsnR3VpZGVkIHRvdXInfSBvbkNsaWNrPXtoYW5kbGVPcGVuR3VpZGVkVG91cn0+XG4gICAgICAgIHt0KCdBcHBMYXlvdXQuQVBQX0xBVU5DSEVSLkdVSURFRF9UT1VSJyl9XG4gICAgICA8L0FwcGxpY2F0aW9uTGF1bmNoZXJJdGVtPixcbiAgICAgIDxBcHBsaWNhdGlvbkxhdW5jaGVySXRlbSBrZXk9eydIZWxwJ30gb25DbGljaz17aGFuZGxlT3BlbkRpc2N1c3Npb259PlxuICAgICAgICB7dCgnQXBwTGF5b3V0LkFQUF9MQVVOQ0hFUi5IRUxQJyl9XG4gICAgICAgIDxJY29uIGlzSW5saW5lIHNpemU9XCJsZ1wiIGljb25TaXplPVwic21cIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnYXV0bycsIHBhZGRpbmdMZWZ0OiAnMWNoJyB9fT5cbiAgICAgICAgICA8RXh0ZXJuYWxMaW5rQWx0SWNvbiBjb2xvcj1cImdyZXlcIiAvPlxuICAgICAgICA8L0ljb24+XG4gICAgICA8L0FwcGxpY2F0aW9uTGF1bmNoZXJJdGVtPixcbiAgICAgIDxBcHBsaWNhdGlvbkxhdW5jaGVySXRlbSBrZXk9eydBYm91dCd9IG9uQ2xpY2s9e2hhbmRsZU9wZW5BYm91dE1vZGFsfT5cbiAgICAgICAge3QoJ0FwcExheW91dC5BUFBfTEFVTkNIRVIuQUJPVVQnKX1cbiAgICAgIDwvQXBwbGljYXRpb25MYXVuY2hlckl0ZW0+LFxuICAgIF07XG4gIH0sIFt0LCBoYW5kbGVPcGVuRG9jdW1lbnRhdGlvbiwgaGFuZGxlT3Blbkd1aWRlZFRvdXIsIGhhbmRsZU9wZW5EaXNjdXNzaW9uLCBoYW5kbGVPcGVuQWJvdXRNb2RhbF0pO1xuXG4gIGNvbnN0IGxldmVsQmFkZ2UgPSBSZWFjdC51c2VDYWxsYmFjaygobGV2ZWw6IEZlYXR1cmVMZXZlbCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8TGFiZWxcbiAgICAgICAgaXNDb21wYWN0XG4gICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcyY2gnLCB0ZXh0VHJhbnNmb3JtOiAnY2FwaXRhbGl6ZScsIHBhZGRpbmdUb3A6ICcwLjEyNWNoJywgcGFkZGluZ0JvdHRvbTogJzAuMTI1Y2gnIH19XG4gICAgICAgIGNvbG9yPXtsZXZlbCA9PT0gRmVhdHVyZUxldmVsLkJFVEEgPyAnZ3JlZW4nIDogJ3JlZCd9XG4gICAgICA+XG4gICAgICAgIHtGZWF0dXJlTGV2ZWxbbGV2ZWxdLnRvTG93ZXJDYXNlKCl9XG4gICAgICA8L0xhYmVsPlxuICAgICk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBIZWFkZXJUb29sYmFyID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8VG9vbGJhciBpc0Z1bGxIZWlnaHQgaXNTdGF0aWM+XG4gICAgICAgICAgPFRvb2xiYXJDb250ZW50PlxuICAgICAgICAgICAgPFRvb2xiYXJHcm91cCB2YXJpYW50PVwiaWNvbi1idXR0b24tZ3JvdXBcIiBhbGlnbm1lbnQ9e3sgZGVmYXVsdDogJ2FsaWduUmlnaHQnIH19PlxuICAgICAgICAgICAgICA8RmVhdHVyZUZsYWcgc3RyaWN0IGxldmVsPXtGZWF0dXJlTGV2ZWwuREVWRUxPUE1FTlR9PlxuICAgICAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbm90aWZpY2F0aW9uc0NvbnRleHQuaW5mbyhgdGVzdCAkeytEYXRlLm5vdygpfWApfVxuICAgICAgICAgICAgICAgICAgICBpY29uPXs8UGx1c0NpcmNsZUljb24gc2l6ZT1cInNtXCIgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgIDwvRmVhdHVyZUZsYWc+XG4gICAgICAgICAgICAgIDxUb29sYmFyR3JvdXAgdmFyaWFudD1cImljb24tYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkJhZGdlXG4gICAgICAgICAgICAgICAgICAgIGNvdW50PXt1bnJlYWROb3RpZmljYXRpb25zQ291bnR9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9e1xuICAgICAgICAgICAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uc0NvdW50ID4gMCA/ICdhdHRlbnRpb24nIDogdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50ID09PSAwID8gJ3JlYWQnIDogJ3VucmVhZCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVOb3RpZmljYXRpb25DZW50ZXJUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOb3RpZmljYXRpb25zXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEJlbGxJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8L05vdGlmaWNhdGlvbkJhZGdlPlxuICAgICAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgICAgPFRvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZXR0aW5nc0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgICAgICAgICAgICAgICBpY29uPXs8Q29nSWNvbiBzaXplPVwic21cIiAvPn1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10b3VyLWlkPVwic2V0dGluZ3MtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtcXVpY2tzdGFydC1pZD1cInNldHRpbmdzLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgICAgIDxUb29sYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxhdW5jaGVyXG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVIZWxwVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICBvblRvZ2dsZT17aGFuZGxlSGVscFRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgaXNPcGVuPXtzaG93SGVscERyb3Bkb3dufVxuICAgICAgICAgICAgICAgICAgICBpdGVtcz17aGVscEl0ZW1zfVxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlSWNvbj17PFF1ZXN0aW9uQ2lyY2xlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgICAgZGF0YS10b3VyLWlkPVwiYXBwbGljYXRpb24tbGF1bmNoZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJhcHBsaWNhdGlvbi1sYXVuY2hlclwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvVG9vbGJhckl0ZW0+XG4gICAgICAgICAgICAgIDwvVG9vbGJhckdyb3VwPlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW0gdmlzaWJpbGl0eT17eyBkZWZhdWx0OiBzaG93VXNlckljb24gPyAndmlzaWJsZScgOiAnaGlkZGVuJyB9fT5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgIGlzUGxhaW5cbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsoKSA9PiBzZXRTaG93VXNlckluZm9Ecm9wZG93bihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICBpc09wZW49e3Nob3dVc2VySW5mb0Ryb3Bkb3dufVxuICAgICAgICAgICAgICAgICAgdG9nZ2xlPXtVc2VySW5mb1RvZ2dsZX1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgZHJvcGRvd25JdGVtcz17dXNlckluZm9JdGVtc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1Rvb2xiYXJJdGVtPlxuICAgICAgICAgICAgPC9Ub29sYmFyR3JvdXA+XG4gICAgICAgICAgPC9Ub29sYmFyQ29udGVudD5cbiAgICAgICAgPC9Ub29sYmFyPlxuICAgICAgPC8+XG4gICAgKSxcbiAgICBbXG4gICAgICBub3RpZmljYXRpb25zQ29udGV4dCxcbiAgICAgIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCxcbiAgICAgIGVycm9yTm90aWZpY2F0aW9uc0NvdW50LFxuICAgICAgaGFuZGxlTm90aWZpY2F0aW9uQ2VudGVyVG9nZ2xlLFxuICAgICAgaGFuZGxlU2V0dGluZ3NCdXR0b25DbGljayxcbiAgICAgIGhhbmRsZUhlbHBUb2dnbGUsXG4gICAgICBzZXRTaG93VXNlckluZm9Ecm9wZG93bixcbiAgICAgIHNob3dVc2VySWNvbixcbiAgICAgIHNob3dVc2VySW5mb0Ryb3Bkb3duLFxuICAgICAgc2hvd0hlbHBEcm9wZG93bixcbiAgICAgIFVzZXJJbmZvVG9nZ2xlLFxuICAgICAgdXNlckluZm9JdGVtcyxcbiAgICAgIGhlbHBJdGVtcyxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgSGVhZGVyID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8TWFzdGhlYWQ+XG4gICAgICAgICAgPE1hc3RoZWFkVG9nZ2xlPlxuICAgICAgICAgICAgPFBhZ2VUb2dnbGVCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICBpc05hdk9wZW49e2lzTmF2T3Blbn1cbiAgICAgICAgICAgICAgb25OYXZUb2dnbGU9e29uTmF2VG9nZ2xlfVxuICAgICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9XCJuYXYtdG9nZ2xlLWJ0blwiXG4gICAgICAgICAgICAgIGRhdGEtdG91ci1pZD1cIm5hdi10b2dnbGUtYnRuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEJhcnNJY29uIC8+XG4gICAgICAgICAgICA8L1BhZ2VUb2dnbGVCdXR0b24+XG4gICAgICAgICAgPC9NYXN0aGVhZFRvZ2dsZT5cbiAgICAgICAgICA8TWFzdGhlYWRNYWluPlxuICAgICAgICAgICAgPE1hc3RoZWFkQnJhbmQgY29tcG9uZW50PXsnZGl2J30+XG4gICAgICAgICAgICAgIDxMaW5rIHRvPVwiL1wiPlxuICAgICAgICAgICAgICAgIDxCcmFuZCBhbHQ9XCJDcnlvc3RhdFwiIHNyYz17Y3J5b3N0YXRMb2dvfSBjbGFzc05hbWU9XCJjcnlvc3RhdC1sb2dvXCIgLz5cbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgPC9NYXN0aGVhZEJyYW5kPlxuXG4gICAgICAgICAgICA8RHluYW1pY0ZlYXR1cmVGbGFnIGxldmVscz17W0ZlYXR1cmVMZXZlbC5ERVZFTE9QTUVOVCwgRmVhdHVyZUxldmVsLkJFVEFdfSBjb21wb25lbnQ9e2xldmVsQmFkZ2V9IC8+XG4gICAgICAgICAgPC9NYXN0aGVhZE1haW4+XG4gICAgICAgICAgPE1hc3RoZWFkQ29udGVudD57SGVhZGVyVG9vbGJhcn08L01hc3RoZWFkQ29udGVudD5cbiAgICAgICAgPC9NYXN0aGVhZD5cbiAgICAgICAgPEFib3V0Q3J5b3N0YXRNb2RhbCBpc09wZW49e2Fib3V0TW9kYWxPcGVufSBvbkNsb3NlPXtoYW5kbGVDbG9zZUFib3V0TW9kYWx9IC8+XG4gICAgICA8Lz5cbiAgICApLFxuICAgIFtpc05hdk9wZW4sIGFib3V0TW9kYWxPcGVuLCBIZWFkZXJUb29sYmFyLCBoYW5kbGVDbG9zZUFib3V0TW9kYWwsIG9uTmF2VG9nZ2xlLCBsZXZlbEJhZGdlXVxuICApO1xuXG4gIGNvbnN0IGlzQWN0aXZlUm91dGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAocm91dGU6IElBcHBSb3V0ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaFBhdGgobG9jYXRpb24ucGF0aG5hbWUsIHJvdXRlLnBhdGgpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmlzRXhhY3QpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgICAgIGxldCBjaGlsZE1hdGNoID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgIGNoaWxkTWF0Y2ggPSBjaGlsZE1hdGNoIHx8IGlzQWN0aXZlUm91dGUocik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkTWF0Y2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBbbG9jYXRpb25dXG4gICk7XG5cbiAgY29uc3QgTmF2aWdhdGlvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPE5hdiBpZD1cIm5hdi1wcmltYXJ5LXNpbXBsZVwiIHRoZW1lPVwiZGFya1wiIHZhcmlhbnQ9XCJkZWZhdWx0XCIgb25TZWxlY3Q9e21vYmlsZU9uU2VsZWN0fSBhcmlhLWxhYmVsPVwiR2xvYmFsIG5hdlwiPlxuICAgICAgICB7bmF2R3JvdXBzLm1hcCgodGl0bGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE5hdkdyb3VwIHRpdGxlPXt0aXRsZX0ga2V5PXt0aXRsZX0+XG4gICAgICAgICAgICAgIHtyb3V0ZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChyb3V0ZSkgPT4gcm91dGUubmF2R3JvdXAgPT09IHRpdGxlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+IHIuZmVhdHVyZUxldmVsID09PSB1bmRlZmluZWQgfHwgci5mZWF0dXJlTGV2ZWwgPj0gYWN0aXZlTGV2ZWwpXG4gICAgICAgICAgICAgICAgLm1hcCgocm91dGUsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgcm91dGUubGFiZWwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxOYXZJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake3JvdXRlLmxhYmVsfS0ke2lkeH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3JvdXRlLmxhYmVsfS0ke2lkeH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e2lzQWN0aXZlUm91dGUocm91dGUpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxOYXZMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvPXtyb3V0ZS5wYXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzc05hbWU9XCJwZi1tLWN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXF1aWNrc3RhcnQtaWQ9e2BuYXYtJHtjbGVhbkRhdGFJZChyb3V0ZS5sYWJlbCl9LXRhYmB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG91ci1pZD17YCR7Y2xlYW5EYXRhSWQocm91dGUubGFiZWwpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3V0ZS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3JvdXRlLmZlYXR1cmVMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGxldmVsQmFkZ2Uocm91dGUuZmVhdHVyZUxldmVsKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTmF2TGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8L05hdkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L05hdkdyb3VwPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9OYXY+XG4gICAgKSxcbiAgICBbbW9iaWxlT25TZWxlY3QsIGlzQWN0aXZlUm91dGUsIGxldmVsQmFkZ2UsIGFjdGl2ZUxldmVsXVxuICApO1xuXG4gIGNvbnN0IFNpZGViYXIgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IDxQYWdlU2lkZWJhciB0aGVtZT1cImRhcmtcIiBuYXY9e05hdmlnYXRpb259IGlzTmF2T3Blbj17aXNOYXZPcGVufSAvPixcbiAgICBbTmF2aWdhdGlvbiwgaXNOYXZPcGVuXVxuICApO1xuXG4gIGNvbnN0IFBhZ2VTa2lwVG9Db250ZW50ID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiA8U2tpcFRvQ29udGVudCBocmVmPVwiI3ByaW1hcnktYXBwLWNvbnRhaW5lclwiPlNraXAgdG8gQ29udGVudDwvU2tpcFRvQ29udGVudD4sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBOb3RpZmljYXRpb25EcmF3ZXIgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IDxOb3RpZmljYXRpb25DZW50ZXIgb25DbG9zZT17aGFuZGxlQ2xvc2VOb3RpZmljYXRpb25DZW50ZXJ9IC8+LFxuICAgIFtoYW5kbGVDbG9zZU5vdGlmaWNhdGlvbkNlbnRlcl1cbiAgKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG93VXNlckljb24gJiYgaXNBc3NldE5ldyhidWlsZC52ZXJzaW9uKSkge1xuICAgICAgaGFuZGxlT3Blbkd1aWRlZFRvdXIoKTtcbiAgICAgIHNhdmVUb0xvY2FsU3RvcmFnZSgnQVNTRVRfVkVSU0lPTicsIGJ1aWxkLnZlcnNpb24pO1xuICAgIH1cbiAgfSwgW2hhbmRsZU9wZW5HdWlkZWRUb3VyLCBzaG93VXNlckljb25dKTtcblxuICByZXR1cm4gKFxuICAgIDxHbG9iYWxRdWlja1N0YXJ0RHJhd2VyPlxuICAgICAgPENyeW9zdGF0Sm95cmlkZT5cbiAgICAgICAgPEFsZXJ0R3JvdXBcbiAgICAgICAgICBhcHBlbmRUbz17cG9ydGFsUm9vdH1cbiAgICAgICAgICBpc1RvYXN0XG4gICAgICAgICAgaXNMaXZlUmVnaW9uXG4gICAgICAgICAgb3ZlcmZsb3dNZXNzYWdlPXtvdmVyZmxvd01lc3NhZ2V9XG4gICAgICAgICAgb25PdmVyZmxvd0NsaWNrPXtoYW5kbGVPcGVuTm90aWZpY2F0aW9uQ2VudGVyfVxuICAgICAgICA+XG4gICAgICAgICAge25vdGlmaWNhdGlvbnNUb0Rpc3BsYXkuc2xpY2UoMCwgdmlzaWJsZU5vdGlmaWNhdGlvbnNDb3VudCkubWFwKCh7IGtleSwgdGl0bGUsIG1lc3NhZ2UsIHZhcmlhbnQgfSkgPT4gKFxuICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgIGlzTGl2ZVJlZ2lvblxuICAgICAgICAgICAgICB2YXJpYW50PXt2YXJpYW50fVxuICAgICAgICAgICAgICBrZXk9e3RpdGxlfVxuICAgICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICAgIGFjdGlvbkNsb3NlPXs8QWxlcnRBY3Rpb25DbG9zZUJ1dHRvbiBvbkNsb3NlPXtoYW5kbGVNYXJrTm90aWZpY2F0aW9uUmVhZChrZXkpfSAvPn1cbiAgICAgICAgICAgICAgdGltZW91dD17dHJ1ZX1cbiAgICAgICAgICAgICAgb25UaW1lb3V0PXtoYW5kbGVUaW1lb3V0KGtleSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZXNzYWdlPy50b1N0cmluZygpfVxuICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9BbGVydEdyb3VwPlxuICAgICAgICA8UGFnZVxuICAgICAgICAgIG1haW5Db250YWluZXJJZD1cInByaW1hcnktYXBwLWNvbnRhaW5lclwiXG4gICAgICAgICAgaGVhZGVyPXtIZWFkZXJ9XG4gICAgICAgICAgc2lkZWJhcj17U2lkZWJhcn1cbiAgICAgICAgICBub3RpZmljYXRpb25EcmF3ZXI9e05vdGlmaWNhdGlvbkRyYXdlcn1cbiAgICAgICAgICBpc05vdGlmaWNhdGlvbkRyYXdlckV4cGFuZGVkPXtpc05vdGlmaWNhdGlvbkRyYXdlckV4cGFuZGVkfVxuICAgICAgICAgIG9uUGFnZVJlc2l6ZT17b25QYWdlUmVzaXplfVxuICAgICAgICAgIHNraXBUb0NvbnRlbnQ9e1BhZ2VTa2lwVG9Db250ZW50fVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1BhZ2U+XG4gICAgICAgIDxBdXRoTW9kYWxcbiAgICAgICAgICB2aXNpYmxlPXtzaG93QXV0aE1vZGFsfVxuICAgICAgICAgIG9uRGlzbWlzcz17ZGlzbWlzc0F1dGhNb2RhbH1cbiAgICAgICAgICBvblNhdmU9e2F1dGhNb2RhbE9uU2F2ZX1cbiAgICAgICAgICB0YXJnZXRPYnM9e3NlcnZpY2VDb250ZXh0LnRhcmdldC50YXJnZXQoKX1cbiAgICAgICAgLz5cbiAgICAgICAgPFNzbEVycm9yTW9kYWwgdmlzaWJsZT17c2hvd1NzbEVycm9yTW9kYWx9IG9uRGlzbWlzcz17ZGlzbWlzc1NzbEVycm9yTW9kYWx9IC8+XG4gICAgICA8L0NyeW9zdGF0Sm95cmlkZT5cbiAgICA8L0dsb2JhbFF1aWNrU3RhcnREcmF3ZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBBcHBMYXlvdXQgfTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgVGhlIENyeW9zdGF0IEF1dGhvcnNcbiAqXG4gKiBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcbiAqXG4gKiBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb24gc2V0IGZvcnRoIGJlbG93LCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGFueVxuICogcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhXG4gKiAoY29sbGVjdGl2ZWx5IHRoZSBcIlNvZnR3YXJlXCIpLCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgYW55IGFuZCBhbGwgY29weXJpZ2h0XG4gKiByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFuZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHlcbiAqIGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZFxuICogU29mdHdhcmUgYXMgY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQgYnkgc3VjaCBsaWNlbnNvciwgb3IgKGlpKSB0aGUgTGFyZ2VyXG4gKiBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90aFxuICpcbiAqIChhKSB0aGUgU29mdHdhcmUsIGFuZFxuICogKGIpIGFueSBwaWVjZSBvZiBzb2Z0d2FyZSBhbmQvb3IgaGFyZHdhcmUgbGlzdGVkIGluIHRoZSBscmdyd3Jrcy50eHQgZmlsZSBpZlxuICogb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZVxuICogaXMgY29udHJpYnV0ZWQgYnkgc3VjaCBsaWNlbnNvcnMpLFxuICpcbiAqIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGVcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgbWFrZSxcbiAqIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgZXhwb3J0LCBoYXZlIG1hZGUsIGFuZCBoYXZlIHNvbGQgdGhlXG4gKiBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvblxuICogZWl0aGVyIHRoZXNlIG9yIG90aGVyIHRlcm1zLlxuICpcbiAqIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGVpdGhlciB0aGlzIGNvbXBsZXRlIHBlcm1pc3Npb24gbm90aWNlIG9yIGF0XG4gKiBhIG1pbmltdW0gYSByZWZlcmVuY2UgdG8gdGhlIFVQTCBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3JcbiAqIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgJ0BwYXR0ZXJuZmx5L3JlYWN0LWNvcmUvZGlzdC9zdHlsZXMvYmFzZS5jc3MnO1xuaW1wb3J0ICdAcGF0dGVybmZseS9wYXR0ZXJuZmx5L3BhdHRlcm5mbHktY2hhcnRzLmNzcyc7XG5pbXBvcnQgJ0BwYXR0ZXJuZmx5L3F1aWNrc3RhcnRzL2Rpc3QvcXVpY2tzdGFydHMuY3NzJztcbmltcG9ydCAnQGFwcC9hcHAuY3NzJztcbmltcG9ydCAnQGFwcC9Ub3BvbG9neS9zdHlsZXMvYmFzZS5jc3MnO1xuaW1wb3J0ICdAaTE4bi9jb25maWcnO1xuaW1wb3J0IHsgQXBwTGF5b3V0IH0gZnJvbSAnQGFwcC9BcHBMYXlvdXQvQXBwTGF5b3V0JztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNDb250ZXh0LCBOb3RpZmljYXRpb25zSW5zdGFuY2UgfSBmcm9tICdAYXBwL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICdAYXBwL3JvdXRlcyc7XG5pbXBvcnQgeyBzdG9yZSB9IGZyb20gJ0BhcHAvU2hhcmVkL1JlZHV4L1JlZHV4U3RvcmUnO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQsIGRlZmF1bHRTZXJ2aWNlcyB9IGZyb20gJ0BhcHAvU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgQnJvd3NlclJvdXRlciBhcyBSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEpveXJpZGVQcm92aWRlciB9IGZyb20gJy4vSm95cmlkZS9Kb3lyaWRlUHJvdmlkZXInO1xuXG5jb25zdCBBcHA6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50ID0gKCkgPT4gKFxuICA8U2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlZmF1bHRTZXJ2aWNlc30+XG4gICAgPE5vdGlmaWNhdGlvbnNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtOb3RpZmljYXRpb25zSW5zdGFuY2V9PlxuICAgICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgICAgIDxSb3V0ZXI+XG4gICAgICAgICAgPEpveXJpZGVQcm92aWRlcj5cbiAgICAgICAgICAgIDxBcHBMYXlvdXQ+XG4gICAgICAgICAgICAgIDxBcHBSb3V0ZXMgLz5cbiAgICAgICAgICAgIDwvQXBwTGF5b3V0PlxuICAgICAgICAgIDwvSm95cmlkZVByb3ZpZGVyPlxuICAgICAgICA8L1JvdXRlcj5cbiAgICAgIDwvUHJvdmlkZXI+XG4gICAgPC9Ob3RpZmljYXRpb25zQ29udGV4dC5Qcm92aWRlcj5cbiAgPC9TZXJ2aWNlQ29udGV4dC5Qcm92aWRlcj5cbik7XG5cbmV4cG9ydCB7IEFwcCB9O1xuIiwiLypcbiAqIENvcHlyaWdodCBUaGUgQ3J5b3N0YXQgQXV0aG9yc1xuICpcbiAqIFRoZSBVbml2ZXJzYWwgUGVybWlzc2l2ZSBMaWNlbnNlIChVUEwpLCBWZXJzaW9uIDEuMFxuICpcbiAqIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55XG4gKiBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kL29yIGRhdGFcbiAqIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHRcbiAqIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgYW5kIGFsbCBwYXRlbnQgcmlnaHRzIG93bmVkIG9yIGZyZWVseVxuICogbGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIgKGkpIHRoZSB1bm1vZGlmaWVkXG4gKiBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXJcbiAqIFdvcmtzIChhcyBkZWZpbmVkIGJlbG93KSwgdG8gZGVhbCBpbiBib3RoXG4gKlxuICogKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG4gKiAoYikgYW55IHBpZWNlIG9mIHNvZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtzLnR4dCBmaWxlIGlmXG4gKiBvbmUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUgKGVhY2ggYSBcIkxhcmdlciBXb3JrXCIgdG8gd2hpY2ggdGhlIFNvZnR3YXJlXG4gKiBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG4gKlxuICogd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIGNvcHksIGNyZWF0ZVxuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLFxuICogdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGVcbiAqIFNvZnR3YXJlIGFuZCB0aGUgTGFyZ2VyIFdvcmsocyksIGFuZCB0byBzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmcgcmlnaHRzIG9uXG4gKiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG4gKlxuICogVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb246XG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXRcbiAqIGEgbWluaW11bSBhIHJlZmVyZW5jZSB0byB0aGUgVVBMIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvclxuICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5pbXBvcnQgeyBBcHAgfSBmcm9tICdAYXBwL2luZGV4JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIHJ1bGVzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnY29sb3ItY29udHJhc3QnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXMsIG5vLXVuZGVmXG4gIGNvbnN0IGF4ZSA9IHJlcXVpcmUoJ3JlYWN0LWF4ZScpO1xuICBheGUoUmVhY3QsIFJlYWN0RE9NLCAxMDAwLCBjb25maWcpO1xufVxuXG5SZWFjdERPTS5yZW5kZXIoPEFwcCAvPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKSBhcyBIVE1MRWxlbWVudCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45656\n')}},Q=>{Q.O(0,[4920,4523,7913,9271,7977,393,4072,4267,6094,7531,4767,7471,3449,4561,2759,7217,7015,1326,8612,979,8940,9794,5256,4586,4361,4507,1337,4107,8152,8625,5678,6760,6050,863,4502,9775,5105,4787,8187,1654,9850,9230,8457,8774,9308,7525,9901,6485,7124,6418,311,930,5873,4634,5561,7763,5880,8095,8453,9025,9346,9220,9505,8922,69,730,7869,3842,9996,4254,5675,3019,1183,8129,7394,9920,8426,9572,3453,6930,2188,9636,5040,7779,29,593,623,3617,5761,1216,2834,5640,703,4513,2606,9615,290,6481,8261,6412,1592,3642,4162,9810,1516,8370,5525,4568,4753,6698,1979],(()=>{return F=45656,Q(Q.s=F);var F}));Q.O()}]);
\ No newline at end of file
diff --git a/assets/demo/site/app.ed4d56b063ab502d.bundle.css b/assets/demo/site/app.ed4d56b063ab502d.bundle.css
new file mode 100644
index 00000000..d7a6544a
--- /dev/null
+++ b/assets/demo/site/app.ed4d56b063ab502d.bundle.css
@@ -0,0 +1 @@
+#root,body,html{height:100%}:root{--cryostat-indigo:#1b4965;--cryostat-picton-blue:#5fa8d3;--cryostat-baby-blue:#95c9e9;--cryostat-white:#fff}.cryostat-text{color:var(--cryostat-indigo);font-family:Montserrat,sans-serif;font-size:4.5em;font-weight:900;margin-top:-.5em!important;text-align:center}:is(.pf-theme-dark) .cryostat-text{color:var(--cryostat-white)}.pf-c-page__sidebar.pf-m-collapsed{overflow:hidden!important}.pf-c-card-not-found{margin-left:1rem;text-align:left;width:20rem}.pf-c-card-not-found__footer{padding-top:2rem}.pf-c-empty-state-not-found{padding-left:10rem;padding-right:10rem}.cryostat-logo{height:2em!important}.recordings-table-drawer-content{min-height:23rem}.time-picker{width:10rem}.pf-c-chip-group{max-width:100ch}.pf-c-chip{--pf-c-chip__text--MaxWidth:100ch}.recording-table-outer-container{height:67.3vh}.recording-table--inner-container{height:100%}#dashboard-layout-dropdown-toggle{width:20em}#dashboard-layout-menu-content{overflow-y:auto}.layout-template-picker{padding:0 1em 1em 1em}.layout-template-picker .catalog-tile-pf{border-top:1.5px solid var(--pf-global--palette--black-300);color:var(--pf-global--Color--100);height:100%}.layout-template-picker .catalog-tile-pf.featured{border-top:2px solid var(--pf-global--active-color--100);transform:translateY(-.4em);transform-origin:bottom;transition:transform .5s}.layout-template-card__featured{z-index:1}#dashboard-layout-menu-content .pf-c-menu__item-action{padding-left:.65em;padding-right:.65em}.automated-analysis-grid-item{padding:.25em}#automated-analysis-card{height:100%}.automated-analysis-datalist-outerscroll.pf-c-scroll-outer-wrapper{--pf-c-scroll-outer-wrapper--MinHeight:unset}.automated-analysis-datalist-innerscroll.pf-c-scroll-inner-wrapper{max-height:26.75rem}.automated-analysis-datalist-innerscroll .pf-m-grey{color:var(--pf-global--Color--100)}.automated-analysis-datalist-innerscroll .pf-m-green{color:var(--pf-global--success-color--100)}.automated-analysis-datalist-innerscroll .pf-m-orange{color:var(--pf-global--warning-color--100)}.automated-analysis-datalist-innerscroll .pf-m-red{color:var(--pf-global--danger-color--100)}.automated-analysis-score-filter-stack-item{padding-left:1.3em;padding-right:1.3em}.automated-analysis-score-filter-slider .pf-c-slider__main{--pf-c-slider__step--m-active__slider-tick--BackgroundColor:var(--pf-global--BorderColor--200);--pf-c-slider__rail-track--before--fill--BackgroundColor:var(--pf-global--BorderColor--100);margin-left:1em}.automated-analysis-score-filter-slider-ok .pf-c-slider__main{--pf-c-slider__rail-track--before--base--BackgroundColor:var(--pf-global--success-color--100);--pf-c-slider__step-tick--BackgroundColor:var(--pf-global--success-color--200)}.automated-analysis-score-filter-slider-warning .pf-c-slider__main{--pf-c-slider__rail-track--before--base--BackgroundColor:var(--pf-global--warning-color--100);--pf-c-slider__step-tick--BackgroundColor:var(--pf-global--warning-color--200)}.automated-analysis-score-filter-slider-critical .pf-c-slider__main{--pf-c-slider__rail-track--before--base--BackgroundColor:var(--pf-global--danger-color--100);--pf-c-slider__step-tick--BackgroundColor:var(--pf-global--danger-color--300)}.automated-analysis-score-filter-slider .pf-c-slider__value .pf-c-form-control{width:4.5em}.clickable-automated-analysis-label-popover-header{margin-left:16.6%;text-align:center}.clickable-automated-analysis-label-popover-body{text-align:center}.clickable-automated-analysis-label-popover-body-score{font-weight:700;margin-bottom:.5rem}.clickable-automated-analysis-label-popover-body-score.pf-m-danger{color:var(--pf-c-popover--m-danger__title-text--Color)}.clickable-automated-analysis-label-popover-body-score.pf-m-warning{color:var(--pf-c-popover--m-warning__title-text--Color)}.clickable-automated-analysis-label-popover-body-score.pf-m-success{color:var(--pf-c-popover--m-success__title-text--Color)}.clickable-automated-analysis-label-popover-body-score.pf-m-default{color:var(--pf-global--Color--100)}.clickable-automated-analysis-label-popover-body-score.pf-m-info{color:var(--pf-c-popover--m-info__title-text--Color)}.clickable-automated-analysis-label-name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pf-c-label.clickable-label-hovered{--pf-c-label__content--before--BorderWidth:2.5px;cursor:pointer}:where(.pf-theme-dark) .recording-filter__toolbar-filter .pf-c-label{--pf-c-label--BackgroundColor:var(--pf-global--BackgroundColor--400)}.pf-c-label-group.pf-m-vertical.pf-c-label-group{background-color:var(--pf-global--BackgroundColor--light-300);border-color:var(--pf-global--BorderColor--light-100);border-radius:.5em;border-style:solid;border-width:.1em;height:100%;width:100%}.automated-analysis-score-filter-slider .pf-c-slider__step-label{font-size:.85em}.automated-analysis-score-filter-slider :where(.pf-c-slider__step:nth-child(2),.pf-c-slider__step:nth-child(4),.pf-c-slider__step:nth-child(6)) .pf-c-slider__step-tick{visibility:hidden}.automated-analysis-score-filter-slider :where(.pf-c-slider__step:nth-child(2),.pf-c-slider__step:nth-child(4),.pf-c-slider__step:nth-child(6)) .pf-c-slider__step-label{top:0}.automated-analysis-score-filter-slider-ok .pf-c-slider__step:nth-child(2) .pf-c-slider__step-label{color:var(--pf-global--success-color--200);font-weight:700}:where(.pf-theme-dark) .automated-analysis-score-filter-slider-ok .pf-c-slider__step:nth-child(2) .pf-c-slider__step-label{color:var(--pf-global--success-color--100)}.automated-analysis-score-filter-slider-warning .pf-c-slider__step:nth-child(4) .pf-c-slider__step-label{color:var(--pf-global--warning-color--200);font-weight:700}:where(.pf-theme-dark) .automated-analysis-score-filter-slider-warning .pf-c-slider__step:nth-child(4) .pf-c-slider__step-label{color:var(--pf-global--warning-color--100)}.automated-analysis-score-filter-slider-critical .pf-c-slider__step:nth-child(6) .pf-c-slider__step-label{color:var(--pf-global--danger-color--300);font-weight:700}:where(.pf-theme-dark) .automated-analysis-score-filter-slider-critical .pf-c-slider__step:nth-child(6) .pf-c-slider__step-label{color:var(--pf-global--danger-color--100)}.automated-analysis-grid-item .pf-c-label-group__list,.automated-analysis-grid-item .pf-c-label-group__list-item,.automated-analysis-grid-item .pf-c-label-group__main{width:100%}.automated-analysis-grid-item .pf-c-label.pf-m-compact{max-width:100%}:is(.pf-theme-dark) .automated-analysis-grid-item .pf-c-label{--pf-c-label--BackgroundColor:var(--pf-global--BackgroundColor--dark-100)}.automated-analysis-grid-item .pf-c-label-group__label{font-weight:700;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stale-report-text{color:var(--pf-global--warning-color--200);padding-right:2em}.automated-analysis-config-save-helper p{margin-top:.5em}:where(.pf-theme-dark) #automated-analysis-config-drawer-create-recording-button{--pf-c-button--after--BorderColor:var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-global--BorderColor--300)}.draggable-ref-wrapper__left{transform:translate(-50px)}.draggable-ref-wrapper__left,.draggable-ref-wrapper__right{opacity:.5;transition:transform .5s cubic-bezier(.2,1,.1,1) 0s,opacity .5s cubic-bezier(.2,1,.1,1) .1s}.draggable-ref-wrapper__right{transform:translate(50px)}.draggable-ref-wrapper__overlap{box-shadow:0 .5rem 1rem 0 rgba(3,3,3,.25);opacity:.5;transform:translateY(-15px)}.draggable-ref-wrapper__overlap,.draggable-ref-wrapper__reset{transition:transform .5s cubic-bezier(.2,1,.1,1) 0s,opacity .5s cubic-bezier(.2,1,.1,1) .1s}.draggable-ref-wrapper__reset{opacity:1;transform:""}.draggable-ref-hover,.draggable-ref-wrapper:active{box-shadow:0 .5rem 1rem 0 rgba(3,3,3,.25)}.dashboard-card-resizable-wrapper{display:flex}.dashboard-card{overflow:auto;position:relative;width:100%}.pf-c-card.pf-m-rounded.dashboard-card{border-bottom-right-radius:0;border-top-right-radius:0}.resizable-ref{border-bottom-right-radius:var(--pf-global--BorderRadius--sm);border-right:4px solid var(--pf-global--palette--black-500);border-top-right-radius:var(--pf-global--BorderRadius--sm);cursor:col-resize;position:relative}.draggable-ref__grip{cursor:move;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.draggable-ref__grip:active{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.xsm-icon{height:.8em;width:.8em}.datetime-picker__meridiem-tile{border:solid;border-color:var(--pf-global--BorderColor--100);border-width:0 .1rem .1rem .1rem;font-size:1.5em;font-weight:600;padding:var(--pf-global--spacer--xs) var(--pf-global--spacer--sm)}.datetime-picker__meridiem-tile:first-child{border-radius:.5rem .5rem 0 0;border-top-width:.1rem}.datetime-picker__meridiem-tile:last-child{border-radius:0 0 .5rem .5rem}.datetime-picker__meridiem-tile.selected{background-color:var(--pf-global--palette--blue-100);color:var(--pf-global--palette--blue-500)}:where(.pf-theme-dark) .datetime-picker__meridiem-tile.selected{background-color:var(--pf-global--palette--blue-500);color:var(--pf-global--palette--blue-100)}.datetime-picker__meridiem-tile.unselected{color:var(--pf-global--palette--black-500)}.datetime-picker__meridiem-tile:hover{cursor:pointer}.datetime-picker__meridiem-title-stack{margin-top:2.5em}input.datetime-picker__number-input::-webkit-inner-spin-button,input.datetime-picker__number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number].datetime-picker__number-input{-moz-appearance:textfield;background-color:var(--pf-global--palette--black-100);font-weight:600;height:3.6em;text-align:center;width:3.6rem}:where(.pf-theme-dark) input[type=number].datetime-picker__number-input{background-color:var(--pf-global--palette--black-500)}:where(.pf-theme-dark) .datetime-picker__time-spin-box{background-color:var(--pf-global--palette--blue-500)!important}.datetime-picker__time-spin-box{height:2.2rem;width:3.6rem}.datetime-picker__time-spin-box.up{border-radius:.5rem .5rem 0 0}.datetime-picker__time-spin-box.down{border-radius:0 0 .5rem .5rem}.datetime-picker__colon-divider{font-size:2.25em;margin-top:.8em}.datetime-picker__time-text-top-label{color:var(--pf-global--palette--black-600);margin:0 0 .5em 0!important;text-align:center}:where(.pf-theme-dark) .datetime-picker__time-text-top-label{color:var(--pf-global--palette--black-300)}.datetime-picker__datetime-selected-display{max-width:14em!important}.datetime-picker__calendar .pf-c-calendar-month__header-year{min-width:6em!important}.recording-filter__toolbar-filter{z-index:199}.settings__content{padding:2ch}.expandable-form__accordion-toggle-block{padding-left:0!important}.expandable-form__accordion-toggle-block.pf-c-accordion__toggle.pf-m-expanded{--pf-c-accordion__toggle--before--BackgroundColor:transparent}.expandable-form__title{font-weight:600!important}.expandable-form__help-block{color:var(--pf-global--palette--black-700);font-size:var(--pf-global--FontSize--sm);margin-bottom:8px;margin-top:0;white-space:pre-line}:where(.pf-theme-dark) .expandable-form__help-block{color:var(--pf-global--Color--200)}.console-form-group .pf-c-form__group{margin:2vh 0 2vh 0}.console-form-group .pf-c-form__group:first-child{margin:0 0 2vh 0}.console-form-group .pf-c-form__group:last-child{margin:2vh 0 0 0}.expandable-form__form-group.pf-c-form__group .pf-c-form__label-text{color:var(--pf-global--Color--100)}:where(.pf-theme-dark) .expandable-form__form-group.pf-c-form__group .pf-c-form__label-text{color:var(--pf-global--palette--white)}.target-context-selector__wrapper{max-width:fit-content;padding:.3em .3em .3em 1em}.target-context-selector__search-input{padding:.3em 1em .3em 1em}.linear-dot-spinner{animation:linear-dot-spinner-animate 1s steps(4) infinite;aspect-ratio:4;background:radial-gradient(circle closest-side,var(--pf-global--palette--blue-200) 90%,#0000) 0/33.33333% 100% space;clip-path:inset(0 100% 0 0);width:2em}@keyframes linear-dot-spinner-animate{to{clip-path:inset(0 -34% 0 0)}}.target-context-selector__linear-dot-spinner{width:2em}.add-credential-modal{height:85%;width:80%!important}.add-credential-modal .pf-c-tab-content{height:90%}.overflow-auto{overflow:auto}svg.topology__node-decorator-icon.warning{fill:var(--pf-global--warning-color--100)}svg.topology__node-decorator-icon.success{fill:var(--pf-global--success-color--100)}svg.topology__node-decorator-icon.progress{fill:var(--pf-global--info-color--100)}#card-catalog-wizard .pf-c-wizard__main-body{height:100%}.pf-c-drawer__panel.pf-m-resizable.layout-template-picker-drawer__panel{transition-duration:0s;transition-property:none}:is(.pf-theme-dark) #dashboard-layout-preview-grid{background-color:var(--pf-global--palette--black-700)}#dashboard-layout-preview-grid{background-color:var(--pf-global--palette--black-200);margin-top:.5em;padding:1em;pointer-events:none;width:100%}#dashboard-layout-preview-grid .pf-c-card__title{--pf-c-card__title--FontSize:0.7em}#dashboard-layout-preview-grid .pf-c-title{font-size:.7em;font-weight:700}.preview-card{height:100%;overflow:auto;width:100%}.non-interactive-overlay{height:100%;position:absolute;width:100%;z-index:99999}.dashboard-card-preview{border:solid;border-color:var(--pf-global--BorderColor--light-100);border-radius:3px;border-width:1px;height:100%;overflow:hidden;padding:.5em;position:relative;transform:scale(.9)}.dashboard-card-preview .pf-c-card{box-shadow:none}.card-catalog__wizard-modal{height:90%}.card-catalog__detail-panel-body{margin-top:-2.5em}.pfext-spotlight__element-highlight-animate{animation:pfext-spotlight-fade-in .4s ease-in-out 0s,pfext-spotlight-fade-out 1.2s ease-in-out 1s;animation-fill-mode:forwards}.pfext-spotlight__element-highlight-animate:after{animation:pfext-spotlight-expand 1.2s ease-out .6s;animation-fill-mode:forwards}.disabled-pointer{pointer-events:none!important}.grafana-iframe-wrapper{height:100%;overflow-y:hidden;position:relative;width:100%}.grafana-iframe-wrapper iframe{height:calc(100% + 2em);position:absolute;top:-2em;width:100%}.configuration-error-list code{background-color:var(--pf-global--palette--black-300);border-radius:4px;padding:.2em}:is(.pf-theme-dark) .configuration-error-list code{background-color:var(--pf-global--palette--black-600)}.topology__view-switcher{font-size:1.8em!important}.sample-node-donut__node-wrapper{aspect-ratio:1;background-color:var(--pf-global--palette--white);border:1px solid var(--pf-global--palette--black-300);border-radius:50%;margin:1em;position:relative;width:12em}:where(.pf-theme-dark) .sample-node-donut__node-wrapper{background-color:var(--pf-global--BackgroundColor--dark-300)}.sample-node-donut__node-wrapper .sample-node-donut__node-icon{aspect-ratio:1;border:.8em solid var(--pf-global--palette--blue-400);border-radius:50%;left:50%;margin:-45% 0 0 -45%;padding:1em;position:absolute;top:50%;width:90%}.sample-node-donut__node-wrapper.active:hover{box-shadow:0 .25rem .5rem 0 rgba(3,3,3,.25),0 0 .25rem 0 rgba(3,3,3,.06);cursor:pointer}.sample-node-donut__node-wrapper .sample-node-donut__node-icon.success{border:.8em solid var(--pf-global--success-color--100)}.sample-node-donut__node-wrapper .sample-node-donut__node-icon.error{border:.8em solid var(--pf-global--danger-color--100)}.sample-node-donut__node-wrapper .sample-node-donut__status-indicator{aspect-ratio:1;background-color:var(--pf-global--palette--white);border:1px solid var(--pf-global--palette--black-300);border-radius:50%;height:fit-content;left:10%;position:absolute;top:75%;width:25%}:where(.pf-theme-dark) .sample-node-donut__node-wrapper .sample-node-donut__status-indicator{background-color:var(--pf-global--BackgroundColor--dark-300)}.sample-node-donut__node-wrapper .sample-node-donut__status-indicator svg{font-size:1.8em;left:18.35%;position:absolute;top:18.35%}.sample-node-donut__node-label{background-color:var(--pf-global--palette--white);border-radius:4px;box-shadow:0 .25rem .5rem 0 rgba(3,3,3,.16),0 0 .25rem 0 rgba(3,3,3,.06);font-weight:700;padding:8px;width:fit-content;word-break:break-all}:where(.pf-theme-dark) .sample-node-donut__node-label{background-color:var(--pf-global--BackgroundColor--dark-300)}.sample-node-donut__node-label-badge{background-color:var(--pf-global--palette--blue-500);border-radius:500px;color:var(--pf-global--palette--white);margin-right:8px;padding:2px 12px 2px 12px;position:relative;text-align:center}.empty-text{color:var(--pf-global--palette--black-400)}.entity-overview{display:flex;flex-direction:column;height:100%}.entity-overview .pf-c-tab-content{flex:1 1 0;overflow:auto}.dashboard-card-preview .entity-overview .pf-c-tab-content{overflow:hidden}.entity-overview__wrapper{padding:1.5em;padding-right:.5em}.entity-overview .pf-c-tabs__item-text{font-size:1.1em}.entity-overview .pf-c-tabs__item.pf-m-current .pf-c-tabs__item-text{color:var(--pf-global--palette--blue-400)}.entity-overview__displayed-labels-wrapper{border:1px solid var(--pf-global--palette--black-200);padding:4px;width:fit-content}.entity-overview__displayed-annotations{margin-bottom:.5em}.entity-overview__entity-title-wrapper{color:var(--pf-global--palette--blue-500);font-size:1.2em;font-weight:700}:where(.pf-theme-dark) .entity-overview__entity-title-wrapper{color:var(--pf-global--palette--blue-300)}.entity-overview__entity-title-badge{background-color:var(--pf-global--palette--blue-500);border-radius:500px;color:var(--pf-global--palette--white);margin-right:8px;padding:2px 12px 2px 12px;text-align:center}.entity-overview__entity-close-button{margin-bottom:.6em}.entity-overview__entity-close-button svg{transform:translate(1em)}.entity-overview__alert-banner{margin-top:1em!important}.entity-overview__header{margin:0 0 1em 1em}.entity-overview__action-menu{background-color:var(--pf-global--palette--white)}.topology-listview__realm-title{color:var(--pf-global--palette--blue-500);font-size:1.2em;margin-right:.5em}:where(.pf-theme-dark) .topology-listview__realm-title{color:var(--pf-global--palette--blue-300)}.topology__help-icon{color:var(--pf-global--palette--blue-400)}.topology__help-icon-button{margin-left:-1em}.topology__shortcut-command{border:1px solid var(--pf-global--palette--black-300);border-radius:4px;color:var(--pf-global--palette--black-600);padding:2px 4px}.topology__shortcut-command-icon{margin-right:.5em}.topology__shortcut-command-plus{margin:0 .5em}.topology__node-badge text{fill:var(--pf-global--palette--white);font-weight:700}#topology__visualization-container.topology__main-container{padding:1em}.topology__main-container .topology__target-node{cursor:pointer}.topology__main-container .topology__target-node.search-inactive{opacity:.4}.topology__main-container .pf-topology__group{cursor:pointer}.topology__main-container .topology__realm-group path{fill:#d2d2d2;fill-opacity:.5}.topology__display-option-menu{width:max-content}.topology__display-option-menu-item{margin-bottom:var(--pf-c-select__menu-group-title--PaddingBottom);margin-left:var(--pf-c-select__menu-group-title--PaddingLeft);margin-right:var(--pf-c-select__menu-group-title--PaddingRight);margin-top:var(--pf-c-select__menu-group-title--PaddingTop)}.topology__toolbar-container{padding:.4em 0 .2em 0!important}.topology__toolbar-chip-content{padding:0 .5em .4em 1em}.topology__filter-chip-group{margin-right:.5em}.topology__quicksearch__tab-icon{background-color:var(--pf-global--palette--white);border-radius:8px;box-sizing:border-box;height:2.5em;padding:4px;width:2.5em}:where(.pf-theme-dark) .topology__quicksearch__tab-icon{background-color:var(--pf-global--BackgroundColor--dark-400)}.topology__quicksearch__tab-text{font-weight:700}.topology__quicksearch__tab{margin:0!important}:where(.pf-theme-dark) .topology__quicksearch__tabs{background-color:var(--pf-global--BackgroundColor--dark-300)}:where(.pf-theme-dark) .topology__quicksearch__tabs .pf-c-label{background-color:var(--pf-global--BackgroundColor--dark-200)}.topology__quicksearch__tab.pf-m-current{background-color:var(--pf-global--BackgroundColor--200)}:where(.pf-theme-dark) .topology__quicksearch__tab.pf-m-current{background-color:var(--pf-global--BackgroundColor--100)}:where(.pf-theme-dark) .topology__quicksearch__tab-content{background-color:var(--pf-global--BackgroundColor--dark-300)}.topology__quicksearch__tab-content-title{font-size:1.5em;font-weight:700;margin-bottom:-1em}.topology__quicksearch__tab-content-description-short{color:#737373;font-size:1em}.topology__quick-search__context-menu{display:none;position:absolute;z-index:9999}.topology__quick-search-modal .quick-search-icon{font-size:.8em!important}.quick-search-icon{font-size:1.1em!important}.topology__list-view__entity-details{background-color:var(--pf-global--palette--white);height:25em!important;padding:1em}:where(.pf-theme-dark) .topology__list-view__entity-details{background-color:var(--pf-global--BackgroundColor--dark-100)}.topology__treeview-container{padding:1em}.topology__treeview-container .pf-c-tree-view__node-content{width:100%}
\ No newline at end of file
diff --git a/assets/demo/site/favicon.ico b/assets/demo/site/favicon.ico
new file mode 100644
index 00000000..3c243156
Binary files /dev/null and b/assets/demo/site/favicon.ico differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-Bold.woff b/assets/demo/site/fonts/RedHatDisplay-Bold.woff
new file mode 100644
index 00000000..c7fa1f3e
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-Bold.woff differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-Bold.woff2 b/assets/demo/site/fonts/RedHatDisplay-Bold.woff2
new file mode 100644
index 00000000..99e9430d
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-Bold.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-Medium.woff b/assets/demo/site/fonts/RedHatDisplay-Medium.woff
new file mode 100644
index 00000000..7a88f9df
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-Medium.woff differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-Medium.woff2 b/assets/demo/site/fonts/RedHatDisplay-Medium.woff2
new file mode 100644
index 00000000..ad059b9f
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-Medium.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-Regular.woff b/assets/demo/site/fonts/RedHatDisplay-Regular.woff
new file mode 100644
index 00000000..c9a84dcb
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-Regular.woff differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-Regular.woff2 b/assets/demo/site/fonts/RedHatDisplay-Regular.woff2
new file mode 100644
index 00000000..6dd719d8
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-Regular.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-updated-Bold.woff2 b/assets/demo/site/fonts/RedHatDisplay-updated-Bold.woff2
new file mode 100644
index 00000000..6c6f9070
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-updated-Bold.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-updated-Medium.woff2 b/assets/demo/site/fonts/RedHatDisplay-updated-Medium.woff2
new file mode 100644
index 00000000..dbd8935c
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-updated-Medium.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplay-updated-Regular.woff2 b/assets/demo/site/fonts/RedHatDisplay-updated-Regular.woff2
new file mode 100644
index 00000000..c5697a6c
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplay-updated-Regular.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplayVF-updated-ItalicModified.woff2 b/assets/demo/site/fonts/RedHatDisplayVF-updated-ItalicModified.woff2
new file mode 100644
index 00000000..61004b34
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplayVF-updated-ItalicModified.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatDisplayVFModified-updated.woff2 b/assets/demo/site/fonts/RedHatDisplayVFModified-updated.woff2
new file mode 100644
index 00000000..17ad213d
Binary files /dev/null and b/assets/demo/site/fonts/RedHatDisplayVFModified-updated.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatMono-updated-Regular.woff2 b/assets/demo/site/fonts/RedHatMono-updated-Regular.woff2
new file mode 100644
index 00000000..5d974e58
Binary files /dev/null and b/assets/demo/site/fonts/RedHatMono-updated-Regular.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatMonoVF-updated-Italic.woff2 b/assets/demo/site/fonts/RedHatMonoVF-updated-Italic.woff2
new file mode 100644
index 00000000..754bceda
Binary files /dev/null and b/assets/demo/site/fonts/RedHatMonoVF-updated-Italic.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatMonoVF-updated.woff2 b/assets/demo/site/fonts/RedHatMonoVF-updated.woff2
new file mode 100644
index 00000000..137f2fdf
Binary files /dev/null and b/assets/demo/site/fonts/RedHatMonoVF-updated.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatText-Medium.woff b/assets/demo/site/fonts/RedHatText-Medium.woff
new file mode 100644
index 00000000..76dd6133
Binary files /dev/null and b/assets/demo/site/fonts/RedHatText-Medium.woff differ
diff --git a/assets/demo/site/fonts/RedHatText-Medium.woff2 b/assets/demo/site/fonts/RedHatText-Medium.woff2
new file mode 100644
index 00000000..c030e8f8
Binary files /dev/null and b/assets/demo/site/fonts/RedHatText-Medium.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatText-Regular.woff b/assets/demo/site/fonts/RedHatText-Regular.woff
new file mode 100644
index 00000000..b0e94af5
Binary files /dev/null and b/assets/demo/site/fonts/RedHatText-Regular.woff differ
diff --git a/assets/demo/site/fonts/RedHatText-Regular.woff2 b/assets/demo/site/fonts/RedHatText-Regular.woff2
new file mode 100644
index 00000000..b8adb0d4
Binary files /dev/null and b/assets/demo/site/fonts/RedHatText-Regular.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatText-updated-Medium.woff2 b/assets/demo/site/fonts/RedHatText-updated-Medium.woff2
new file mode 100644
index 00000000..519fe4ef
Binary files /dev/null and b/assets/demo/site/fonts/RedHatText-updated-Medium.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatText-updated-Regular.woff2 b/assets/demo/site/fonts/RedHatText-updated-Regular.woff2
new file mode 100644
index 00000000..7428f92c
Binary files /dev/null and b/assets/demo/site/fonts/RedHatText-updated-Regular.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatTextVF-updated-ItalicModified.woff2 b/assets/demo/site/fonts/RedHatTextVF-updated-ItalicModified.woff2
new file mode 100644
index 00000000..e0dc2b18
Binary files /dev/null and b/assets/demo/site/fonts/RedHatTextVF-updated-ItalicModified.woff2 differ
diff --git a/assets/demo/site/fonts/RedHatTextVFModified-updated.woff2 b/assets/demo/site/fonts/RedHatTextVFModified-updated.woff2
new file mode 100644
index 00000000..93d4cf82
Binary files /dev/null and b/assets/demo/site/fonts/RedHatTextVFModified-updated.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-bold-italic.woff b/assets/demo/site/fonts/overpass-bold-italic.woff
new file mode 100644
index 00000000..4c182e34
Binary files /dev/null and b/assets/demo/site/fonts/overpass-bold-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-bold-italic.woff2 b/assets/demo/site/fonts/overpass-bold-italic.woff2
new file mode 100644
index 00000000..9d413a41
Binary files /dev/null and b/assets/demo/site/fonts/overpass-bold-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-bold.woff b/assets/demo/site/fonts/overpass-bold.woff
new file mode 100644
index 00000000..e71c04c2
Binary files /dev/null and b/assets/demo/site/fonts/overpass-bold.woff differ
diff --git a/assets/demo/site/fonts/overpass-bold.woff2 b/assets/demo/site/fonts/overpass-bold.woff2
new file mode 100644
index 00000000..ebc48ba2
Binary files /dev/null and b/assets/demo/site/fonts/overpass-bold.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-extrabold-italic.woff b/assets/demo/site/fonts/overpass-extrabold-italic.woff
new file mode 100644
index 00000000..099aa4f4
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extrabold-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-extrabold-italic.woff2 b/assets/demo/site/fonts/overpass-extrabold-italic.woff2
new file mode 100644
index 00000000..d0a11848
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extrabold-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-extrabold.woff b/assets/demo/site/fonts/overpass-extrabold.woff
new file mode 100644
index 00000000..b964cc62
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extrabold.woff differ
diff --git a/assets/demo/site/fonts/overpass-extrabold.woff2 b/assets/demo/site/fonts/overpass-extrabold.woff2
new file mode 100644
index 00000000..72e7ced5
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extrabold.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-extralight-italic.woff b/assets/demo/site/fonts/overpass-extralight-italic.woff
new file mode 100644
index 00000000..d44ec1aa
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extralight-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-extralight-italic.woff2 b/assets/demo/site/fonts/overpass-extralight-italic.woff2
new file mode 100644
index 00000000..142ae0ae
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extralight-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-extralight.woff b/assets/demo/site/fonts/overpass-extralight.woff
new file mode 100644
index 00000000..f3003878
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extralight.woff differ
diff --git a/assets/demo/site/fonts/overpass-extralight.woff2 b/assets/demo/site/fonts/overpass-extralight.woff2
new file mode 100644
index 00000000..ee551946
Binary files /dev/null and b/assets/demo/site/fonts/overpass-extralight.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-heavy-italic.woff b/assets/demo/site/fonts/overpass-heavy-italic.woff
new file mode 100644
index 00000000..679e7c3a
Binary files /dev/null and b/assets/demo/site/fonts/overpass-heavy-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-heavy-italic.woff2 b/assets/demo/site/fonts/overpass-heavy-italic.woff2
new file mode 100644
index 00000000..ed1dfd82
Binary files /dev/null and b/assets/demo/site/fonts/overpass-heavy-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-heavy.woff b/assets/demo/site/fonts/overpass-heavy.woff
new file mode 100644
index 00000000..14db22cf
Binary files /dev/null and b/assets/demo/site/fonts/overpass-heavy.woff differ
diff --git a/assets/demo/site/fonts/overpass-heavy.woff2 b/assets/demo/site/fonts/overpass-heavy.woff2
new file mode 100644
index 00000000..dbb499f3
Binary files /dev/null and b/assets/demo/site/fonts/overpass-heavy.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-italic.woff b/assets/demo/site/fonts/overpass-italic.woff
new file mode 100644
index 00000000..95bda4c8
Binary files /dev/null and b/assets/demo/site/fonts/overpass-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-italic.woff2 b/assets/demo/site/fonts/overpass-italic.woff2
new file mode 100644
index 00000000..d76da758
Binary files /dev/null and b/assets/demo/site/fonts/overpass-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-light-italic.woff b/assets/demo/site/fonts/overpass-light-italic.woff
new file mode 100644
index 00000000..d2b01bc6
Binary files /dev/null and b/assets/demo/site/fonts/overpass-light-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-light-italic.woff2 b/assets/demo/site/fonts/overpass-light-italic.woff2
new file mode 100644
index 00000000..5703d8ff
Binary files /dev/null and b/assets/demo/site/fonts/overpass-light-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-light.woff b/assets/demo/site/fonts/overpass-light.woff
new file mode 100644
index 00000000..1f2e380d
Binary files /dev/null and b/assets/demo/site/fonts/overpass-light.woff differ
diff --git a/assets/demo/site/fonts/overpass-light.woff2 b/assets/demo/site/fonts/overpass-light.woff2
new file mode 100644
index 00000000..5c73220e
Binary files /dev/null and b/assets/demo/site/fonts/overpass-light.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-mono-bold.woff b/assets/demo/site/fonts/overpass-mono-bold.woff
new file mode 100644
index 00000000..9101baad
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-bold.woff differ
diff --git a/assets/demo/site/fonts/overpass-mono-bold.woff2 b/assets/demo/site/fonts/overpass-mono-bold.woff2
new file mode 100644
index 00000000..f1f90e08
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-bold.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-mono-light.woff b/assets/demo/site/fonts/overpass-mono-light.woff
new file mode 100644
index 00000000..88ab3a00
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-light.woff differ
diff --git a/assets/demo/site/fonts/overpass-mono-light.woff2 b/assets/demo/site/fonts/overpass-mono-light.woff2
new file mode 100644
index 00000000..fadfa011
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-light.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-mono-regular.woff b/assets/demo/site/fonts/overpass-mono-regular.woff
new file mode 100644
index 00000000..313d044d
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-regular.woff differ
diff --git a/assets/demo/site/fonts/overpass-mono-regular.woff2 b/assets/demo/site/fonts/overpass-mono-regular.woff2
new file mode 100644
index 00000000..6e1bed63
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-regular.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-mono-semibold.woff b/assets/demo/site/fonts/overpass-mono-semibold.woff
new file mode 100644
index 00000000..11639d31
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-semibold.woff differ
diff --git a/assets/demo/site/fonts/overpass-mono-semibold.woff2 b/assets/demo/site/fonts/overpass-mono-semibold.woff2
new file mode 100644
index 00000000..b1431d3d
Binary files /dev/null and b/assets/demo/site/fonts/overpass-mono-semibold.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-regular.woff b/assets/demo/site/fonts/overpass-regular.woff
new file mode 100644
index 00000000..0c5c51a4
Binary files /dev/null and b/assets/demo/site/fonts/overpass-regular.woff differ
diff --git a/assets/demo/site/fonts/overpass-regular.woff2 b/assets/demo/site/fonts/overpass-regular.woff2
new file mode 100644
index 00000000..d1310df6
Binary files /dev/null and b/assets/demo/site/fonts/overpass-regular.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-semibold-italic.woff b/assets/demo/site/fonts/overpass-semibold-italic.woff
new file mode 100644
index 00000000..e0216323
Binary files /dev/null and b/assets/demo/site/fonts/overpass-semibold-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-semibold-italic.woff2 b/assets/demo/site/fonts/overpass-semibold-italic.woff2
new file mode 100644
index 00000000..f96da3b5
Binary files /dev/null and b/assets/demo/site/fonts/overpass-semibold-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-semibold.woff b/assets/demo/site/fonts/overpass-semibold.woff
new file mode 100644
index 00000000..8c931c49
Binary files /dev/null and b/assets/demo/site/fonts/overpass-semibold.woff differ
diff --git a/assets/demo/site/fonts/overpass-semibold.woff2 b/assets/demo/site/fonts/overpass-semibold.woff2
new file mode 100644
index 00000000..3b242ed0
Binary files /dev/null and b/assets/demo/site/fonts/overpass-semibold.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-thin-italic.woff b/assets/demo/site/fonts/overpass-thin-italic.woff
new file mode 100644
index 00000000..f61d7492
Binary files /dev/null and b/assets/demo/site/fonts/overpass-thin-italic.woff differ
diff --git a/assets/demo/site/fonts/overpass-thin-italic.woff2 b/assets/demo/site/fonts/overpass-thin-italic.woff2
new file mode 100644
index 00000000..23af05a9
Binary files /dev/null and b/assets/demo/site/fonts/overpass-thin-italic.woff2 differ
diff --git a/assets/demo/site/fonts/overpass-thin.woff b/assets/demo/site/fonts/overpass-thin.woff
new file mode 100644
index 00000000..4ddc55ad
Binary files /dev/null and b/assets/demo/site/fonts/overpass-thin.woff differ
diff --git a/assets/demo/site/fonts/overpass-thin.woff2 b/assets/demo/site/fonts/overpass-thin.woff2
new file mode 100644
index 00000000..82b5c85c
Binary files /dev/null and b/assets/demo/site/fonts/overpass-thin.woff2 differ
diff --git a/assets/demo/site/fonts/pficon.woff b/assets/demo/site/fonts/pficon.woff
new file mode 100644
index 00000000..0347c0c5
Binary files /dev/null and b/assets/demo/site/fonts/pficon.woff differ
diff --git a/assets/demo/site/fonts/pficon.woff2 b/assets/demo/site/fonts/pficon.woff2
new file mode 100644
index 00000000..6352f9fa
Binary files /dev/null and b/assets/demo/site/fonts/pficon.woff2 differ
diff --git a/assets/demo/site/images/about_background.png b/assets/demo/site/images/about_background.png
new file mode 100644
index 00000000..f6121f25
Binary files /dev/null and b/assets/demo/site/images/about_background.png differ
diff --git a/assets/demo/site/images/cryostat_logo_hori_rgb_default.svg b/assets/demo/site/images/cryostat_logo_hori_rgb_default.svg
new file mode 100644
index 00000000..76c9b2d0
--- /dev/null
+++ b/assets/demo/site/images/cryostat_logo_hori_rgb_default.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/demo/site/images/cryostat_logo_hori_rgb_reverse.svg b/assets/demo/site/images/cryostat_logo_hori_rgb_reverse.svg
new file mode 100644
index 00000000..90b38d97
--- /dev/null
+++ b/assets/demo/site/images/cryostat_logo_hori_rgb_reverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/demo/site/images/cryostat_logo_vert_rgb_default.svg b/assets/demo/site/images/cryostat_logo_vert_rgb_default.svg
new file mode 100644
index 00000000..c9588621
--- /dev/null
+++ b/assets/demo/site/images/cryostat_logo_vert_rgb_default.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/demo/site/images/cryostat_logo_vert_rgb_reverse.svg b/assets/demo/site/images/cryostat_logo_vert_rgb_reverse.svg
new file mode 100644
index 00000000..5062b5e3
--- /dev/null
+++ b/assets/demo/site/images/cryostat_logo_vert_rgb_reverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/demo/site/images/pfbg_2000.jpg b/assets/demo/site/images/pfbg_2000.jpg
new file mode 100644
index 00000000..0b2ceb36
Binary files /dev/null and b/assets/demo/site/images/pfbg_2000.jpg differ
diff --git a/assets/demo/site/images/pfbg_576.jpg b/assets/demo/site/images/pfbg_576.jpg
new file mode 100644
index 00000000..a0a7fc3c
Binary files /dev/null and b/assets/demo/site/images/pfbg_576.jpg differ
diff --git a/assets/demo/site/images/pfbg_576@2x.jpg b/assets/demo/site/images/pfbg_576@2x.jpg
new file mode 100644
index 00000000..af831724
Binary files /dev/null and b/assets/demo/site/images/pfbg_576@2x.jpg differ
diff --git a/assets/demo/site/images/pfbg_768.jpg b/assets/demo/site/images/pfbg_768.jpg
new file mode 100644
index 00000000..9a24ec7a
Binary files /dev/null and b/assets/demo/site/images/pfbg_768.jpg differ
diff --git a/assets/demo/site/images/pfbg_768@2x.jpg b/assets/demo/site/images/pfbg_768@2x.jpg
new file mode 100644
index 00000000..a4ca09cb
Binary files /dev/null and b/assets/demo/site/images/pfbg_768@2x.jpg differ
diff --git a/assets/demo/site/images/pfbg_992@2x.jpg b/assets/demo/site/images/pfbg_992@2x.jpg
new file mode 100644
index 00000000..76786e59
Binary files /dev/null and b/assets/demo/site/images/pfbg_992@2x.jpg differ
diff --git a/assets/demo/site/index.html b/assets/demo/site/index.html
new file mode 100644
index 00000000..92344577
--- /dev/null
+++ b/assets/demo/site/index.html
@@ -0,0 +1,480 @@
+
+
+
+
+ Cryostat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/demo/site/npm.attr-accept.b956d913d93869ac.bundle.js b/assets/demo/site/npm.attr-accept.b956d913d93869ac.bundle.js
new file mode 100644
index 00000000..1893ce26
--- /dev/null
+++ b/assets/demo/site/npm.attr-accept.b956d913d93869ac.bundle.js
@@ -0,0 +1 @@
+(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[6698],{70254:module=>{eval('module.exports=function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};return n.m=t,n.c=r,n.d=function(t,r,e){n.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(r,"a",r),r},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=13)}([function(t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n){var r=t.exports={version:"2.5.0"};"number"==typeof __e&&(__e=r)},function(t,n,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n,r){var e=r(32)("wks"),o=r(9),i=r(0).Symbol,u="function"==typeof i;(t.exports=function(t){return e[t]||(e[t]=u&&i[t]||(u?i:o)("Symbol."+t))}).store=e},function(t,n,r){var e=r(0),o=r(2),i=r(8),u=r(22),c=r(10),f=function(t,n,r){var a,s,p,l,v=t&f.F,y=t&f.G,h=t&f.S,d=t&f.P,x=t&f.B,g=y?e:h?e[n]||(e[n]={}):(e[n]||{}).prototype,m=y?o:o[n]||(o[n]={}),b=m.prototype||(m.prototype={});y&&(r=n);for(a in r)s=!v&&g&&void 0!==g[a],p=(s?g:r)[a],l=x&&s?c(p,e):d&&"function"==typeof p?c(Function.call,p):p,g&&u(g,a,p,t&f.U),m[a]!=p&&i(m,a,l),d&&b[a]!=p&&(b[a]=p)};e.core=o,f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,f.U=64,f.R=128,t.exports=f},function(t,n,r){var e=r(16),o=r(21);t.exports=r(3)?function(t,n,r){return e.f(t,n,o(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n){var r=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+e).toString(36))}},function(t,n,r){var e=r(24);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can\'t call method on "+t);return t}},function(t,n,r){var e=r(28),o=Math.min;t.exports=function(t){return t>0?o(e(t),9007199254740991):0}},function(t,n,r){"use strict";n.__esModule=!0,n.default=function(t,n){if(t&&n){var r=Array.isArray(n)?n:n.split(","),e=t.name||"",o=t.type||"",i=o.replace(/\\/.*$/,"");return r.some(function(t){var n=t.trim();return"."===n.charAt(0)?e.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\\/.*$/,""):o===n})}return!0},r(14),r(34)},function(t,n,r){r(15),t.exports=r(2).Array.some},function(t,n,r){"use strict";var e=r(7),o=r(25)(3);e(e.P+e.F*!r(33)([].some,!0),"Array",{some:function(t){return o(this,t,arguments[1])}})},function(t,n,r){var e=r(17),o=r(18),i=r(20),u=Object.defineProperty;n.f=r(3)?Object.defineProperty:function(t,n,r){if(e(t),n=i(n,!0),e(r),o)try{return u(t,n,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[n]=r.value),t}},function(t,n,r){var e=r(1);t.exports=function(t){if(!e(t))throw TypeError(t+" is not an object!");return t}},function(t,n,r){t.exports=!r(3)&&!r(4)(function(){return 7!=Object.defineProperty(r(19)("div"),"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(1),o=r(0).document,i=e(o)&&e(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n,r){var e=r(1);t.exports=function(t,n){if(!e(t))return t;var r,o;if(n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;if("function"==typeof(r=t.valueOf)&&!e(o=r.call(t)))return o;if(!n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;throw TypeError("Can\'t convert object to primitive value")}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,r){var e=r(0),o=r(8),i=r(23),u=r(9)("src"),c=Function.toString,f=(""+c).split("toString");r(2).inspectSource=function(t){return c.call(t)},(t.exports=function(t,n,r,c){var a="function"==typeof r;a&&(i(r,"name")||o(r,"name",n)),t[n]!==r&&(a&&(i(r,u)||o(r,u,t[n]?""+t[n]:f.join(String(n)))),t===e?t[n]=r:c?t[n]?t[n]=r:o(t,n,r):(delete t[n],o(t,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[u]||c.call(this)})},function(t,n){var r={}.hasOwnProperty;t.exports=function(t,n){return r.call(t,n)}},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n,r){var e=r(10),o=r(26),i=r(27),u=r(12),c=r(29);t.exports=function(t,n){var r=1==t,f=2==t,a=3==t,s=4==t,p=6==t,l=5==t||p,v=n||c;return function(n,c,y){for(var h,d,x=i(n),g=o(x),m=e(c,y,3),b=u(g.length),_=0,w=r?v(n,b):f?v(n,0):void 0;b>_;_++)if((l||_ in g)&&(h=g[_],d=m(h,_,x),t))if(r)w[_]=d;else if(d)switch(t){case 3:return!0;case 5:return h;case 6:return _;case 2:w.push(h)}else if(s)return!1;return p?-1:a||s?s:w}}},function(t,n,r){var e=r(5);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},function(t,n,r){var e=r(11);t.exports=function(t){return Object(e(t))}},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n,r){var e=r(30);t.exports=function(t,n){return new(e(t))(n)}},function(t,n,r){var e=r(1),o=r(31),i=r(6)("species");t.exports=function(t){var n;return o(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!o(n.prototype)||(n=void 0),e(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(t,n,r){var e=r(5);t.exports=Array.isArray||function(t){return"Array"==e(t)}},function(t,n,r){var e=r(0),o=e["__core-js_shared__"]||(e["__core-js_shared__"]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,n,r){"use strict";var e=r(4);t.exports=function(t,n){return!!t&&e(function(){n?t.call(null,function(){},1):t.call(null)})}},function(t,n,r){r(35),t.exports=r(2).String.endsWith},function(t,n,r){"use strict";var e=r(7),o=r(12),i=r(36),u="".endsWith;e(e.P+e.F*r(38)("endsWith"),"String",{endsWith:function(t){var n=i(this,t,"endsWith"),r=arguments.length>1?arguments[1]:void 0,e=o(n.length),c=void 0===r?e:Math.min(o(r),e),f=String(t);return u?u.call(n,f,c):n.slice(c-f.length,c)===f}})},function(t,n,r){var e=r(37),o=r(11);t.exports=function(t,n,r){if(e(n))throw TypeError("String#"+r+" doesn\'t accept regex!");return String(o(t))}},function(t,n,r){var e=r(1),o=r(5),i=r(6)("match");t.exports=function(t){var n;return e(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},function(t,n,r){var e=r(6)("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(r){try{return n[e]=!1,!"/./"[t](n)}catch(t){}}return!0}}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAyNTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCLGNBQWMsNEJBQTRCLFlBQVkscUJBQXFCLDJEQUEyRCxTQUFTLHVDQUF1QyxxQ0FBcUMsb0NBQW9DLEVBQUUsaUJBQWlCLGlDQUFpQyxpQkFBaUIsWUFBWSxVQUFVLHNCQUFzQixtQkFBbUIsaURBQWlELGtCQUFrQixnQkFBZ0IsOElBQThJLDhCQUE4QixlQUFlLHNCQUFzQix3REFBd0QsZUFBZSxpQkFBaUIsaUJBQWlCLDhCQUE4QixpQkFBaUIsMkJBQTJCLGtDQUFrQyxNQUFNLGVBQWUsVUFBVSxJQUFJLEVBQUUsZUFBZSxzQkFBc0IsSUFBSSxZQUFZLFNBQVMsV0FBVyxlQUFlLFFBQVEsVUFBVSxzQkFBc0IsOEJBQThCLGlCQUFpQiwrREFBK0QsdUJBQXVCLGtEQUFrRCxVQUFVLGlCQUFpQiwyREFBMkQsMEVBQTBFLFdBQVcsZ0NBQWdDLGdDQUFnQyxFQUFFLFNBQVMsb0tBQW9LLDBFQUEwRSxpQkFBaUIsb0JBQW9CLCtCQUErQix1QkFBdUIsaUJBQWlCLGlCQUFpQixlQUFlLHdCQUF3QixzQkFBc0IsbUVBQW1FLGlCQUFpQixZQUFZLDBCQUEwQiw0QkFBNEIsVUFBVSwwQkFBMEIsb0JBQW9CLDRCQUE0QixzQkFBc0IsOEJBQThCLHdCQUF3QixrQkFBa0IsOEJBQThCLGVBQWUsc0JBQXNCLHlEQUF5RCxVQUFVLGlCQUFpQix1QkFBdUIsc0JBQXNCLHVDQUF1QyxpQkFBaUIsYUFBYSx3Q0FBd0MsU0FBUyx3RkFBd0YsMEJBQTBCLGVBQWUsbUhBQW1ILEVBQUUsU0FBUyxhQUFhLGlCQUFpQixnQ0FBZ0MsaUJBQWlCLGFBQWEsc0JBQXNCLHNDQUFzQyxpQkFBaUIsK0JBQStCLEVBQUUsaUJBQWlCLG9EQUFvRCwrQ0FBK0MsNkJBQTZCLGdCQUFnQixVQUFVLG9FQUFvRSxxQ0FBcUMsaUJBQWlCLFdBQVcsc0JBQXNCLGlEQUFpRCxVQUFVLGlCQUFpQixrQ0FBa0Msa0RBQWtELGVBQWUsVUFBVSxJQUFJLEVBQUUsaUJBQWlCLHNEQUFzRCxzQkFBc0IsZ0NBQWdDLGlCQUFpQixXQUFXLHdCQUF3QixrQkFBa0IsUUFBUSxpRUFBaUUsNkRBQTZELGtFQUFrRSw0REFBNEQsZUFBZSx3QkFBd0IsT0FBTyxnRUFBZ0UsaUJBQWlCLHVGQUF1RiwrQkFBK0IsaUJBQWlCLDhCQUE4QiwyQkFBMkIsMEpBQTBKLDJDQUEyQyxxREFBcUQsRUFBRSxlQUFlLFFBQVEsZ0JBQWdCLHdCQUF3QixvQkFBb0IsZUFBZSxzQkFBc0IsaUVBQWlFLFVBQVUsaUJBQWlCLDRDQUE0Qyx3QkFBd0Isd0RBQXdELHVCQUF1QixrRkFBa0YsSUFBSSxzREFBc0Qsb0JBQW9CLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGlCQUFpQixtQkFBbUIsdUJBQXVCLGlCQUFpQixXQUFXLGlFQUFpRSw0Q0FBNEMsaUJBQWlCLFlBQVksc0JBQXNCLHFCQUFxQixlQUFlLDZCQUE2QixzQkFBc0IsbUNBQW1DLGlCQUFpQixZQUFZLHdCQUF3QixxQkFBcUIsaUJBQWlCLHFDQUFxQyxzQkFBc0IsTUFBTSxrSkFBa0osaUJBQWlCLFdBQVcscUNBQXFDLHFCQUFxQixpQkFBaUIsaUVBQWlFLEVBQUUsc0JBQXNCLHFCQUFxQixHQUFHLGlCQUFpQixhQUFhLFdBQVcsd0JBQXdCLHdCQUF3QiwwQkFBMEIsaUJBQWlCLEdBQUcsaUJBQWlCLHFDQUFxQyxpQkFBaUIsYUFBYSx5Q0FBeUMsc0NBQXNDLHFCQUFxQiw4SEFBOEgsa0RBQWtELEVBQUUsaUJBQWlCLG9CQUFvQiwwQkFBMEIsOERBQThELHFCQUFxQixpQkFBaUIsa0NBQWtDLHNCQUFzQixNQUFNLHFEQUFxRCxpQkFBaUIsb0JBQW9CLHNCQUFzQixVQUFVLElBQUksWUFBWSxTQUFTLElBQUksNEJBQTRCLFdBQVcsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzP2Q0YTYiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtpZihyW2VdKXJldHVybiByW2VdLmV4cG9ydHM7dmFyIG89cltlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsbiksby5sPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5kPWZ1bmN0aW9uKHQscixlKXtuLm8odCxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmV9KX0sbi5uPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQocixcImFcIixyKSxyfSxuLm89ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil9LG4ucD1cIlwiLG4obi5zPTEzKX0oW2Z1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNS4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzIpKFwid2tzXCIpLG89cig5KSxpPXIoMCkuU3ltYm9sLHU9XCJmdW5jdGlvblwiPT10eXBlb2YgaTsodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT11JiZpW3RdfHwodT9pOm8pKFwiU3ltYm9sLlwiK3QpKX0pLnN0b3JlPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cigyKSxpPXIoOCksdT1yKDIyKSxjPXIoMTApLGY9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLHMscCxsLHY9dCZmLkYseT10JmYuRyxoPXQmZi5TLGQ9dCZmLlAseD10JmYuQixnPXk/ZTpoP2Vbbl18fChlW25dPXt9KTooZVtuXXx8e30pLnByb3RvdHlwZSxtPXk/bzpvW25dfHwob1tuXT17fSksYj1tLnByb3RvdHlwZXx8KG0ucHJvdG90eXBlPXt9KTt5JiYocj1uKTtmb3IoYSBpbiByKXM9IXYmJmcmJnZvaWQgMCE9PWdbYV0scD0ocz9nOnIpW2FdLGw9eCYmcz9jKHAsZSk6ZCYmXCJmdW5jdGlvblwiPT10eXBlb2YgcD9jKEZ1bmN0aW9uLmNhbGwscCk6cCxnJiZ1KGcsYSxwLHQmZi5VKSxtW2FdIT1wJiZpKG0sYSxsKSxkJiZiW2FdIT1wJiYoYlthXT1wKX07ZS5jb3JlPW8sZi5GPTEsZi5HPTIsZi5TPTQsZi5QPTgsZi5CPTE2LGYuVz0zMixmLlU9NjQsZi5SPTEyOCx0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTYpLG89cigyMSk7dC5leHBvcnRzPXIoMyk/ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmYodCxuLG8oMSxyKSl9OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtuXT1yLHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrZSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKG4scil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gdC5jYWxsKG4scixlKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLGUsbyl7cmV0dXJuIHQuY2FsbChuLHIsZSxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKGUodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAsbi5kZWZhdWx0PWZ1bmN0aW9uKHQsbil7aWYodCYmbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT9uOm4uc3BsaXQoXCIsXCIpLGU9dC5uYW1lfHxcIlwiLG89dC50eXBlfHxcIlwiLGk9by5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpO3JldHVybiByLnNvbWUoZnVuY3Rpb24odCl7dmFyIG49dC50cmltKCk7cmV0dXJuXCIuXCI9PT1uLmNoYXJBdCgwKT9lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgobi50b0xvd2VyQ2FzZSgpKTpuLmVuZHNXaXRoKFwiLypcIik/aT09PW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTpvPT09bn0pfXJldHVybiEwfSxyKDE0KSxyKDM0KX0sZnVuY3Rpb24odCxuLHIpe3IoMTUpLHQuZXhwb3J0cz1yKDIpLkFycmF5LnNvbWV9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigyNSkoMyk7ZShlLlArZS5GKiFyKDMzKShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE3KSxvPXIoMTgpLGk9cigyMCksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPXIoMyk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLG49aShuLCEwKSxlKHIpLG8pdHJ5e3JldHVybiB1KHQsbixyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtuXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFlKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcigzKSYmIXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMTkpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigwKS5kb2N1bWVudCxpPWUobykmJmUoby5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIWUodCkpcmV0dXJuIHQ7dmFyIHIsbztpZihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoIW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cig4KSxpPXIoMjMpLHU9cig5KShcInNyY1wiKSxjPUZ1bmN0aW9uLnRvU3RyaW5nLGY9KFwiXCIrYykuc3BsaXQoXCJ0b1N0cmluZ1wiKTtyKDIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scixjKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO2EmJihpKHIsXCJuYW1lXCIpfHxvKHIsXCJuYW1lXCIsbikpLHRbbl0hPT1yJiYoYSYmKGkocix1KXx8byhyLHUsdFtuXT9cIlwiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpKSx0PT09ZT90W25dPXI6Yz90W25dP3Rbbl09cjpvKHQsbixyKTooZGVsZXRlIHRbbl0sbyh0LG4scikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW3VdfHxjLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEwKSxvPXIoMjYpLGk9cigyNyksdT1yKDEyKSxjPXIoMjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPTE9PXQsZj0yPT10LGE9Mz09dCxzPTQ9PXQscD02PT10LGw9NT09dHx8cCx2PW58fGM7cmV0dXJuIGZ1bmN0aW9uKG4sYyx5KXtmb3IodmFyIGgsZCx4PWkobiksZz1vKHgpLG09ZShjLHksMyksYj11KGcubGVuZ3RoKSxfPTAsdz1yP3YobixiKTpmP3YobiwwKTp2b2lkIDA7Yj5fO18rKylpZigobHx8XyBpbiBnKSYmKGg9Z1tfXSxkPW0oaCxfLHgpLHQpKWlmKHIpd1tfXT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gaDtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOncucHVzaChoKX1lbHNlIGlmKHMpcmV0dXJuITE7cmV0dXJuIHA/LTE6YXx8cz9zOnd9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPU9iamVjdChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVyblwiU3RyaW5nXCI9PWUodCk/dC5zcGxpdChcIlwiKTpPYmplY3QodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZSh0KSl9fSxmdW5jdGlvbih0LG4pe3ZhciByPU1hdGguY2VpbCxlPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/ZTpyKSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3KGUodCkpKG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDMxKSxpPXIoNikoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbyh0KSYmKG49dC5jb25zdHJ1Y3RvcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHxuIT09QXJyYXkmJiFvKG4ucHJvdG90eXBlKXx8KG49dm9pZCAwKSxlKG4pJiZudWxsPT09KG49bltpXSkmJihuPXZvaWQgMCkpLHZvaWQgMD09PW4/QXJyYXk6bn19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PWUodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPWVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl18fChlW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bdF18fChvW3RdPXt9KX19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiEhdCYmZShmdW5jdGlvbigpe24/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxuLHIpe3IoMzUpLHQuZXhwb3J0cz1yKDIpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDEyKSxpPXIoMzYpLHU9XCJcIi5lbmRzV2l0aDtlKGUuUCtlLkYqcigzOCkoXCJlbmRzV2l0aFwiKSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgbj1pKHRoaXMsdCxcImVuZHNXaXRoXCIpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZT1vKG4ubGVuZ3RoKSxjPXZvaWQgMD09PXI/ZTpNYXRoLm1pbihvKHIpLGUpLGY9U3RyaW5nKHQpO3JldHVybiB1P3UuY2FsbChuLGYsYyk6bi5zbGljZShjLWYubGVuZ3RoLGMpPT09Zn19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzcpLG89cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKG4pKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIityK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKG8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDUpLGk9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZSh0KSYmKHZvaWQgMCE9PShuPXRbaV0pPyEhbjpcIlJlZ0V4cFwiPT1vKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPS8uLzt0cnl7XCIvLi9cIlt0XShuKX1jYXRjaChyKXt0cnl7cmV0dXJuIG5bZV09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2godCl7fX1yZXR1cm4hMH19XSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///70254\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.babel.45d27b830c0c5dda.bundle.js b/assets/demo/site/npm.babel.45d27b830c0c5dda.bundle.js
new file mode 100644
index 00000000..d5913512
--- /dev/null
+++ b/assets/demo/site/npm.babel.45d27b830c0c5dda.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[8612],{83878:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _arrayWithHoles)\n/* harmony export */ });\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM4NzguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzPzBhMzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///83878\n')},97326:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _assertThisInitialized)\n/* harmony export */ });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n return self;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMjYuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz9jMTMwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///97326\n')},15671:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _classCallCheck)\n/* harmony export */ });\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU2NzEuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcz8wMmM4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///15671\n')},43144:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _createClass)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83997);\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, "prototype", {\n writable: false\n });\n return Constructor;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMxNDQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUErQztBQUMvQztBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msc0VBQWE7QUFDL0M7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcz8wMzY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///43144\n')},4942:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _defineProperty)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83997);\n\nfunction _defineProperty(obj, key, value) {\n key = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk0Mi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQStDO0FBQ2hDO0FBQ2YsUUFBUSxzRUFBYTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzP2QyMzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4942\n')},87462:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _extends)\n/* harmony export */ });\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc0NjIuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzP2FiMGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///87462\n')},61120:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _getPrototypeOf)\n/* harmony export */ });\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjExMjAuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzPzZmZTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61120\n')},60136:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _inherits)\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(89611);\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, "prototype", {\n writable: false\n });\n if (superClass) (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjAxMzYuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix1RUFBYztBQUNoQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcz8yNzZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///60136\n')},94578:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _inheritsLoose)\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(89611);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ1NzguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQSxFQUFFLHVFQUFjO0FBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanM/ODAwYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///94578\n')},25267:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _nonIterableRest)\n/* harmony export */ });\nfunction _nonIterableRest() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUyNjcuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcz81Yzk2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25267\n')},1413:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _objectSpread2)\n/* harmony export */ });\n/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4942);\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxMy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDZTtBQUNmLGtCQUFrQixzQkFBc0I7QUFDeEM7QUFDQTtBQUNBLE1BQU0sdUVBQWM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzPzEyMGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1413\n')},45987:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _objectWithoutProperties)\n/* harmony export */ });\n/* harmony import */ var _objectWithoutPropertiesLoose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63366);\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = (0,_objectWithoutPropertiesLoose_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU5ODcuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUE2RTtBQUM5RDtBQUNmO0FBQ0EsZUFBZSxxRkFBNEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzPzhmNzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuICB2YXIga2V5LCBpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45987\n')},63366:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _objectWithoutPropertiesLoose)\n/* harmony export */ });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMzNjYuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsdUJBQXVCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzPzBhOGQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63366\n')},82963:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _possibleConstructorReturn)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(71002);\n/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97326);\n\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(call) === "object" || typeof call === "function")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError("Derived constructors may only return object or undefined");\n }\n return (0,_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(self);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI5NjMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0M7QUFDNkI7QUFDaEQ7QUFDZixlQUFlLCtEQUFPO0FBQ3RCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxTQUFTLDhFQUFxQjtBQUM5QiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzP2Q2YTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///82963\n')},89611:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _setPrototypeOf)\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk2MTEuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanM/YTQ3NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89611\n')},97685:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ _slicedToArray)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nvar arrayWithHoles = __webpack_require__(83878);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js + 1 modules\nvar unsupportedIterableToArray = __webpack_require__(81563);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nvar nonIterableRest = __webpack_require__(25267);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction _slicedToArray(arr, i) {\n return (0,arrayWithHoles/* default */.Z)(arr) || _iterableToArrayLimit(arr, i) || (0,unsupportedIterableToArray/* default */.Z)(arr, i) || (0,nonIterableRest/* default */.Z)();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc2ODUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsWUFBWSw2RUFBNkU7QUFDakcsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7OztBQzFCaUQ7QUFDWTtBQUNZO0FBQ3RCO0FBQ3BDO0FBQ2YsU0FBUyxpQ0FBYyxTQUFTLHFCQUFvQixZQUFZLDZDQUEwQixZQUFZLGtDQUFlO0FBQ3JIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzPzllNGUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanM/OTIyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97685\n')},35643:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ _toArray)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nvar arrayWithHoles = __webpack_require__(83878);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js + 1 modules\nvar unsupportedIterableToArray = __webpack_require__(81563);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nvar nonIterableRest = __webpack_require__(25267);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toArray.js\n\n\n\n\nfunction _toArray(arr) {\n return (0,arrayWithHoles/* default */.Z)(arr) || _iterableToArray(arr) || (0,unsupportedIterableToArray/* default */.Z)(arr) || (0,nonIterableRest/* default */.Z)();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU2NDMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBLEM7Ozs7OztBQ0ZpRDtBQUNFO0FBQ3NCO0FBQ3RCO0FBQ3BDO0FBQ2YsU0FBUyxpQ0FBYyxTQUFTLGdCQUFlLFNBQVMsNkNBQTBCLFNBQVMsa0NBQWU7QUFDMUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzPzM3MDQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQXJyYXkuanM/YzI0MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///35643\n')},83997:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ _toPropertyKey)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js\nvar esm_typeof = __webpack_require__(71002);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js\n\nfunction _toPrimitive(input, hint) {\n if ((0,esm_typeof/* default */.Z)(input) !== "object" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || "default");\n if ((0,esm_typeof/* default */.Z)(res) !== "object") return res;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return (hint === "string" ? String : Number)(input);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\n\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, "string");\n return (0,esm_typeof/* default */.Z)(key) === "symbol" ? key : String(key);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM5OTcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWtDO0FBQ25CO0FBQ2YsTUFBTSw2QkFBTztBQUNiO0FBQ0E7QUFDQTtBQUNBLFFBQVEsNkJBQU87QUFDZjtBQUNBO0FBQ0E7QUFDQSxDOztBQ1ZrQztBQUNTO0FBQzVCO0FBQ2YsWUFBWSxZQUFXO0FBQ3ZCLFNBQVMsNkJBQU87QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanM/YzBiZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcz9jMmU4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///83997\n')},71002:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ _typeof)\n/* harmony export */ });\nfunction _typeof(obj) {\n "@babel/helpers - typeof";\n\n return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n }, _typeof(obj);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzEwMDIuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcz8wZmUwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///71002\n')},81563:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ _unsupportedIterableToArray)\n});\n\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODE1NjMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFlO0FBQ2Y7QUFDQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBLEM7O0FDSnFEO0FBQ3RDO0FBQ2Y7QUFDQSxvQ0FBb0MsaUJBQWdCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLHNGQUFzRixpQkFBZ0I7QUFDdEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcz80NWRiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz8yOGNjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///81563\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-array.640b4fb5e418d6b2.bundle.js b/assets/demo/site/npm.d3-array.640b4fb5e418d6b2.bundle.js
new file mode 100644
index 00000000..ad2c90ff
--- /dev/null
+++ b/assets/demo/site/npm.d3-array.640b4fb5e418d6b2.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4561],{33016:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "j2": () => (/* reexport */ ascending),\n "b4": () => (/* reexport */ bisect),\n "Nw": () => (/* reexport */ bisectLeft),\n "ml": () => (/* reexport */ bisectRight),\n "YF": () => (/* reexport */ bisector),\n "kC": () => (/* reexport */ cross),\n "$1": () => (/* reexport */ descending),\n "P3": () => (/* reexport */ deviation),\n "We": () => (/* reexport */ extent),\n "KX": () => (/* reexport */ histogram),\n "Fp": () => (/* reexport */ max),\n "J6": () => (/* reexport */ mean),\n "C2": () => (/* reexport */ median),\n "TS": () => (/* reexport */ merge),\n "VV": () => (/* reexport */ min),\n "X": () => (/* reexport */ pairs),\n "FO": () => (/* reexport */ permute),\n "VR": () => (/* reexport */ quantile),\n "w6": () => (/* reexport */ range),\n "Rp": () => (/* reexport */ scan),\n "TV": () => (/* reexport */ shuffle),\n "Sm": () => (/* reexport */ sum),\n "o6": () => (/* reexport */ freedmanDiaconis),\n "FA": () => (/* reexport */ scott),\n "_X": () => (/* reexport */ sturges),\n "G9": () => (/* reexport */ tickIncrement),\n "ly": () => (/* reexport */ tickStep),\n "sd": () => (/* reexport */ ticks),\n "p4": () => (/* reexport */ transpose),\n "CA": () => (/* reexport */ variance),\n "$R": () => (/* reexport */ zip)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/ascending.js\n/* harmony default export */ function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/bisector.js\n\n\n/* harmony default export */ function bisector(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/bisect.js\n\n\n\nvar ascendingBisect = bisector(ascending);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n/* harmony default export */ const bisect = (bisectRight);\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/pairs.js\n/* harmony default export */ function pairs(array, f) {\n if (f == null) f = pair;\n var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = f(p, p = array[++i]);\n return pairs;\n}\n\nfunction pair(a, b) {\n return [a, b];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/cross.js\n\n\n/* harmony default export */ function cross(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/descending.js\n/* harmony default export */ function descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/number.js\n/* harmony default export */ function number(x) {\n return x === null ? NaN : +x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/variance.js\n\n\n/* harmony default export */ function variance(values, valueof) {\n var n = values.length,\n m = 0,\n i = -1,\n mean = 0,\n value,\n delta,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n if (m > 1) return sum / (m - 1);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/deviation.js\n\n\n/* harmony default export */ function deviation(array, f) {\n var v = variance(array, f);\n return v ? Math.sqrt(v) : v;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/extent.js\n/* harmony default export */ function extent(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/array.js\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/identity.js\n/* harmony default export */ function identity(x) {\n return x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/range.js\n/* harmony default export */ function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/ticks.js\nvar e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\n/* harmony default export */ function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/threshold/sturges.js\n/* harmony default export */ function sturges(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/histogram.js\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function histogram() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = tickStep(x0, x1, tz);\n tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n }\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] > x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/quantile.js\n\n\n/* harmony default export */ function quantile(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/threshold/freedmanDiaconis.js\n\n\n\n\n\n/* harmony default export */ function freedmanDiaconis(values, min, max) {\n values = map.call(values, number).sort(ascending);\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/threshold/scott.js\n\n\n/* harmony default export */ function scott(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/max.js\n/* harmony default export */ function max(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/mean.js\n\n\n/* harmony default export */ function mean(values, valueof) {\n var n = values.length,\n m = n,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) sum += value;\n else --m;\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n else --m;\n }\n }\n\n if (m) return sum / m;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/median.js\n\n\n\n\n/* harmony default export */ function median(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n numbers = [];\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n numbers.push(value);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n numbers.push(value);\n }\n }\n }\n\n return quantile(numbers.sort(ascending), 0.5);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/merge.js\n/* harmony default export */ function merge(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/min.js\n/* harmony default export */ function min(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n return min;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/permute.js\n/* harmony default export */ function permute(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/scan.js\n\n\n/* harmony default export */ function scan(values, compare) {\n if (!(n = values.length)) return;\n var n,\n i = 0,\n j = 0,\n xi,\n xj = values[j];\n\n if (compare == null) compare = ascending;\n\n while (++i < n) {\n if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n xj = xi, j = i;\n }\n }\n\n if (compare(xj, xj) === 0) return j;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/shuffle.js\n/* harmony default export */ function shuffle(array, i0, i1) {\n var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n\n return array;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/sum.js\n/* harmony default export */ function sum(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n }\n }\n\n else {\n while (++i < n) {\n if (value = +valueof(values[i], i, values)) sum += value;\n }\n }\n\n return sum;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/transpose.js\n\n\n/* harmony default export */ function transpose(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, transpose_length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction transpose_length(d) {\n return d.length;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/zip.js\n\n\n/* harmony default export */ function zip() {\n return transpose(arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxnQkFBTTtBQUNmO0FBQ0E7OztBQ2RvQzs7QUFFcEMsNkJBQWUsZUFBVztBQUMxQixTQUFTLFNBQVM7QUFDbEI7OztBQ0pvRTtBQUNuQjtBQUNGO0FBQ047QUFDVTtBQUNGO0FBQ047QUFDTTtBQUNpQztBQUN0QjtBQUNJO0FBQzNCO0FBQ0U7QUFDSTtBQUNGO0FBQ0o7QUFDSTtBQUNJO0FBQ0U7QUFDTjtBQUNGO0FBQ007QUFDUjtBQUM2QjtBQUNqQjtBQUNGO0FBQ1YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcz9lOTA0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanM/ZGFkNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcz8xMDA0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGFpcnMuanM/NTQzMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Nyb3NzLmpzPzY2NTMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXNjZW5kaW5nLmpzP2FkNWQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanM/NDEwYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ZhcmlhbmNlLmpzP2Q5OTYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXZpYXRpb24uanM/YjQ5NSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2V4dGVudC5qcz82OTJjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXJyYXkuanM/Y2I3YyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2NvbnN0YW50LmpzPzljMzciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pZGVudGl0eS5qcz8yOWY0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanM/YTk4OCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzP2Y5MDkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcz8zMjJlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaGlzdG9ncmFtLmpzPzEyODEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcz8yYmUwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGhyZXNob2xkL2ZyZWVkbWFuRGlhY29uaXMuanM/NTQzMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zY290dC5qcz9jN2MwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWF4LmpzPzg5ZjYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZWFuLmpzPzAxZDUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tZWRpYW4uanM/M2VjMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lcmdlLmpzPzNiMzYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanM/NzhmMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3Blcm11dGUuanM/ODQwOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NjYW4uanM/Y2QxMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NodWZmbGUuanM/NWM4YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcz9kODJjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdHJhbnNwb3NlLmpzPzBiOGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy96aXAuanM/MjNmMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2luZGV4LmpzPzljODIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3JcIjtcblxudmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBmKSB7XG4gIGlmIChmID09IG51bGwpIGYgPSBwYWlyO1xuICB2YXIgaSA9IDAsIG4gPSBhcnJheS5sZW5ndGggLSAxLCBwID0gYXJyYXlbMF0sIHBhaXJzID0gbmV3IEFycmF5KG4gPCAwID8gMCA6IG4pO1xuICB3aGlsZSAoaSA8IG4pIHBhaXJzW2ldID0gZihwLCBwID0gYXJyYXlbKytpXSk7XG4gIHJldHVybiBwYWlycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhaXIoYSwgYikge1xuICByZXR1cm4gW2EsIGJdO1xufVxuIiwiaW1wb3J0IHtwYWlyfSBmcm9tIFwiLi9wYWlyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMwLCB2YWx1ZXMxLCByZWR1Y2UpIHtcbiAgdmFyIG4wID0gdmFsdWVzMC5sZW5ndGgsXG4gICAgICBuMSA9IHZhbHVlczEubGVuZ3RoLFxuICAgICAgdmFsdWVzID0gbmV3IEFycmF5KG4wICogbjEpLFxuICAgICAgaTAsXG4gICAgICBpMSxcbiAgICAgIGksXG4gICAgICB2YWx1ZTA7XG5cbiAgaWYgKHJlZHVjZSA9PSBudWxsKSByZWR1Y2UgPSBwYWlyO1xuXG4gIGZvciAoaTAgPSBpID0gMDsgaTAgPCBuMDsgKytpMCkge1xuICAgIGZvciAodmFsdWUwID0gdmFsdWVzMFtpMF0sIGkxID0gMDsgaTEgPCBuMTsgKytpMSwgKytpKSB7XG4gICAgICB2YWx1ZXNbaV0gPSByZWR1Y2UodmFsdWUwLCB2YWx1ZXMxW2kxXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9PT0gbnVsbCA/IE5hTiA6ICt4O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG0gPSAwLFxuICAgICAgaSA9IC0xLFxuICAgICAgbWVhbiA9IDAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbHRhLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtID4gMSkgcmV0dXJuIHN1bSAvIChtIC0gMSk7XG59XG4iLCJpbXBvcnQgdmFyaWFuY2UgZnJvbSBcIi4vdmFyaWFuY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYXJyYXksIGYpIHtcbiAgdmFyIHYgPSB2YXJpYW5jZShhcnJheSwgZik7XG4gIHJldHVybiB2ID8gTWF0aC5zcXJ0KHYpIDogdjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1pbixcbiAgICAgIG1heDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChtYXggPCB2YWx1ZSkgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbbWluLCBtYXhdO1xufVxuIiwidmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG5leHBvcnQgdmFyIG1hcCA9IGFycmF5Lm1hcDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHZhbHVlcy5sZW5ndGgpIC8gTWF0aC5MTjIpICsgMTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgYmlzZWN0IGZyb20gXCIuL2Jpc2VjdFwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgZXh0ZW50IGZyb20gXCIuL2V4dGVudFwiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5XCI7XG5pbXBvcnQgcmFuZ2UgZnJvbSBcIi4vcmFuZ2VcIjtcbmltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCIuL3RpY2tzXCI7XG5pbXBvcnQgc3R1cmdlcyBmcm9tIFwiLi90aHJlc2hvbGQvc3R1cmdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gaWRlbnRpdHksXG4gICAgICBkb21haW4gPSBleHRlbnQsXG4gICAgICB0aHJlc2hvbGQgPSBzdHVyZ2VzO1xuXG4gIGZ1bmN0aW9uIGhpc3RvZ3JhbShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgeCxcbiAgICAgICAgdmFsdWVzID0gbmV3IEFycmF5KG4pO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFsdWVzW2ldID0gdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgfVxuXG4gICAgdmFyIHh6ID0gZG9tYWluKHZhbHVlcyksXG4gICAgICAgIHgwID0geHpbMF0sXG4gICAgICAgIHgxID0geHpbMV0sXG4gICAgICAgIHR6ID0gdGhyZXNob2xkKHZhbHVlcywgeDAsIHgxKTtcblxuICAgIC8vIENvbnZlcnQgbnVtYmVyIG9mIHRocmVzaG9sZHMgaW50byB1bmlmb3JtIHRocmVzaG9sZHMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR6KSkge1xuICAgICAgdHogPSB0aWNrU3RlcCh4MCwgeDEsIHR6KTtcbiAgICAgIHR6ID0gcmFuZ2UoTWF0aC5jZWlsKHgwIC8gdHopICogdHosIHgxLCB0eik7IC8vIGV4Y2x1c2l2ZVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgdGhyZXNob2xkcyBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgdmFyIG0gPSB0ei5sZW5ndGg7XG4gICAgd2hpbGUgKHR6WzBdIDw9IHgwKSB0ei5zaGlmdCgpLCAtLW07XG4gICAgd2hpbGUgKHR6W20gLSAxXSA+IHgxKSB0ei5wb3AoKSwgLS1tO1xuXG4gICAgdmFyIGJpbnMgPSBuZXcgQXJyYXkobSArIDEpLFxuICAgICAgICBiaW47XG5cbiAgICAvLyBJbml0aWFsaXplIGJpbnMuXG4gICAgZm9yIChpID0gMDsgaSA8PSBtOyArK2kpIHtcbiAgICAgIGJpbiA9IGJpbnNbaV0gPSBbXTtcbiAgICAgIGJpbi54MCA9IGkgPiAwID8gdHpbaSAtIDFdIDogeDA7XG4gICAgICBiaW4ueDEgPSBpIDwgbSA/IHR6W2ldIDogeDE7XG4gICAgfVxuXG4gICAgLy8gQXNzaWduIGRhdGEgdG8gYmlucyBieSB2YWx1ZSwgaWdub3JpbmcgYW55IG91dHNpZGUgdGhlIGRvbWFpbi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB4ID0gdmFsdWVzW2ldO1xuICAgICAgaWYgKHgwIDw9IHggJiYgeCA8PSB4MSkge1xuICAgICAgICBiaW5zW2Jpc2VjdCh0eiwgeCwgMCwgbSldLnB1c2goZGF0YVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbnM7XG4gIH1cblxuICBoaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdmFsdWU7XG4gIH07XG5cbiAgaGlzdG9ncmFtLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtfWzBdLCBfWzFdXSksIGhpc3RvZ3JhbSkgOiBkb21haW47XG4gIH07XG5cbiAgaGlzdG9ncmFtLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgaGlzdG9ncmFtKSA6IHRocmVzaG9sZDtcbiAgfTtcblxuICByZXR1cm4gaGlzdG9ncmFtO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCBwLCB2YWx1ZW9mKSB7XG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHZhbHVlb2YgPSBudW1iZXI7XG4gIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSkgcmV0dXJuO1xuICBpZiAoKHAgPSArcCkgPD0gMCB8fCBuIDwgMikgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1swXSwgMCwgdmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1tuIC0gMV0sIG4gLSAxLCB2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9ICt2YWx1ZW9mKHZhbHVlc1tpMF0sIGkwLCB2YWx1ZXMpLFxuICAgICAgdmFsdWUxID0gK3ZhbHVlb2YodmFsdWVzW2kwICsgMV0sIGkwICsgMSwgdmFsdWVzKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcIi4uL2FycmF5XCI7XG5pbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuLi9xdWFudGlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gIHZhbHVlcyA9IG1hcC5jYWxsKHZhbHVlcywgbnVtYmVyKS5zb3J0KGFzY2VuZGluZyk7XG4gIHJldHVybiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoMiAqIChxdWFudGlsZSh2YWx1ZXMsIDAuNzUpIC0gcXVhbnRpbGUodmFsdWVzLCAwLjI1KSkgKiBNYXRoLnBvdyh2YWx1ZXMubGVuZ3RoLCAtMSAvIDMpKSk7XG59XG4iLCJpbXBvcnQgZGV2aWF0aW9uIGZyb20gXCIuLi9kZXZpYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCBtaW4sIG1heCkge1xuICByZXR1cm4gTWF0aC5jZWlsKChtYXggLSBtaW4pIC8gKDMuNSAqIGRldmlhdGlvbih2YWx1ZXMpICogTWF0aC5wb3codmFsdWVzLmxlbmd0aCwgLTEgLyAzKSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gbixcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtKSByZXR1cm4gc3VtIC8gbTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG51bWJlcnMgPSBbXTtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIG51bWJlcnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBuID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgIG0sXG4gICAgICBpID0gLTEsXG4gICAgICBqID0gMCxcbiAgICAgIG1lcmdlZCxcbiAgICAgIGFycmF5O1xuXG4gIHdoaWxlICgrK2kgPCBuKSBqICs9IGFycmF5c1tpXS5sZW5ndGg7XG4gIG1lcmdlZCA9IG5ldyBBcnJheShqKTtcblxuICB3aGlsZSAoLS1uID49IDApIHtcbiAgICBhcnJheSA9IGFycmF5c1tuXTtcbiAgICBtID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlICgtLW0gPj0gMCkge1xuICAgICAgbWVyZ2VkWy0tal0gPSBhcnJheVttXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7XG4gIHZhciBpID0gaW5kZXhlcy5sZW5ndGgsIHBlcm11dGVzID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSBwZXJtdXRlc1tpXSA9IGFycmF5W2luZGV4ZXNbaV1dO1xuICByZXR1cm4gcGVybXV0ZXM7XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIGNvbXBhcmUpIHtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpKSByZXR1cm47XG4gIHZhciBuLFxuICAgICAgaSA9IDAsXG4gICAgICBqID0gMCxcbiAgICAgIHhpLFxuICAgICAgeGogPSB2YWx1ZXNbal07XG5cbiAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGlmIChjb21wYXJlKHhpID0gdmFsdWVzW2ldLCB4aikgPCAwIHx8IGNvbXBhcmUoeGosIHhqKSAhPT0gMCkge1xuICAgICAgeGogPSB4aSwgaiA9IGk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBhcmUoeGosIHhqKSA9PT0gMCkgcmV0dXJuIGo7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgaTAsIGkxKSB7XG4gIHZhciBtID0gKGkxID09IG51bGwgPyBhcnJheS5sZW5ndGggOiBpMSkgLSAoaTAgPSBpMCA9PSBudWxsID8gMCA6ICtpMCksXG4gICAgICB0LFxuICAgICAgaTtcblxuICB3aGlsZSAobSkge1xuICAgIGkgPSBNYXRoLnJhbmRvbSgpICogbS0tIHwgMDtcbiAgICB0ID0gYXJyYXlbbSArIGkwXTtcbiAgICBhcnJheVttICsgaTBdID0gYXJyYXlbaSArIGkwXTtcbiAgICBhcnJheVtpICsgaTBdID0gdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVzW2ldKSBzdW0gKz0gdmFsdWU7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuXG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgc3VtICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW07XG59XG4iLCJpbXBvcnQgbWluIGZyb20gXCIuL21pblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRyaXgpIHtcbiAgaWYgKCEobiA9IG1hdHJpeC5sZW5ndGgpKSByZXR1cm4gW107XG4gIGZvciAodmFyIGkgPSAtMSwgbSA9IG1pbihtYXRyaXgsIGxlbmd0aCksIHRyYW5zcG9zZSA9IG5ldyBBcnJheShtKTsgKytpIDwgbTspIHtcbiAgICBmb3IgKHZhciBqID0gLTEsIG4sIHJvdyA9IHRyYW5zcG9zZVtpXSA9IG5ldyBBcnJheShuKTsgKytqIDwgbjspIHtcbiAgICAgIHJvd1tqXSA9IG1hdHJpeFtqXVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoKGQpIHtcbiAgcmV0dXJuIGQubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHRyYW5zcG9zZSBmcm9tIFwiLi90cmFuc3Bvc2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0cmFuc3Bvc2UoYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBiaXNlY3QsIGJpc2VjdFJpZ2h0LCBiaXNlY3RMZWZ0fSBmcm9tIFwiLi9iaXNlY3RcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhc2NlbmRpbmd9IGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdG9yfSBmcm9tIFwiLi9iaXNlY3RvclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyb3NzfSBmcm9tIFwiLi9jcm9zc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRlc2NlbmRpbmd9IGZyb20gXCIuL2Rlc2NlbmRpbmdcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZXZpYXRpb259IGZyb20gXCIuL2RldmlhdGlvblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGV4dGVudH0gZnJvbSBcIi4vZXh0ZW50XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGlzdG9ncmFtfSBmcm9tIFwiLi9oaXN0b2dyYW1cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzfSBmcm9tIFwiLi90aHJlc2hvbGQvZnJlZWRtYW5EaWFjb25pc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFNjb3R0fSBmcm9tIFwiLi90aHJlc2hvbGQvc2NvdHRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aHJlc2hvbGRTdHVyZ2VzfSBmcm9tIFwiLi90aHJlc2hvbGQvc3R1cmdlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1heH0gZnJvbSBcIi4vbWF4XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVhbn0gZnJvbSBcIi4vbWVhblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1lZGlhbn0gZnJvbSBcIi4vbWVkaWFuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVyZ2V9IGZyb20gXCIuL21lcmdlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWlufSBmcm9tIFwiLi9taW5cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWlyc30gZnJvbSBcIi4vcGFpcnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwZXJtdXRlfSBmcm9tIFwiLi9wZXJtdXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVhbnRpbGV9IGZyb20gXCIuL3F1YW50aWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZ2V9IGZyb20gXCIuL3JhbmdlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2Nhbn0gZnJvbSBcIi4vc2NhblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNodWZmbGV9IGZyb20gXCIuL3NodWZmbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdW19IGZyb20gXCIuL3N1bVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRpY2tzLCB0aWNrSW5jcmVtZW50LCB0aWNrU3RlcH0gZnJvbSBcIi4vdGlja3NcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmFuc3Bvc2V9IGZyb20gXCIuL3RyYW5zcG9zZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHZhcmlhbmNlfSBmcm9tIFwiLi92YXJpYW5jZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHppcH0gZnJvbSBcIi4vemlwXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33016\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-axis.95c4daaf7ed3d228.bundle.js b/assets/demo/site/npm.d3-axis.95c4daaf7ed3d228.bundle.js
new file mode 100644
index 00000000..34898c2c
--- /dev/null
+++ b/assets/demo/site/npm.d3-axis.95c4daaf7ed3d228.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[7525],{85735:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "LL": () => (/* reexport */ axisBottom),\n "y4": () => (/* reexport */ axisLeft),\n "Kh": () => (/* reexport */ axisRight),\n "F5": () => (/* reexport */ axisTop)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-axis/src/array.js\nvar slice = Array.prototype.slice;\n\n;// CONCATENATED MODULE: ./node_modules/d3-axis/src/identity.js\n/* harmony default export */ function identity(x) {\n return x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-axis/src/axis.js\n\n\n\nvar axis_top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return "translate(" + (x + 0.5) + ",0)";\n}\n\nfunction translateY(y) {\n return "translate(0," + (y + 0.5) + ")";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === axis_top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? "x" : "y",\n transform = orient === axis_top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(".domain").data([null]),\n tick = selection.selectAll(".tick").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append("g").attr("class", "tick"),\n line = tick.select("line"),\n text = tick.select("text");\n\n path = path.merge(path.enter().insert("path", ".tick")\n .attr("class", "domain")\n .attr("stroke", "currentColor"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append("line")\n .attr("stroke", "currentColor")\n .attr(x + "2", k * tickSizeInner));\n\n text = text.merge(tickEnter.append("text")\n .attr("fill", "currentColor")\n .attr(x, k * spacing)\n .attr("dy", orient === axis_top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr("opacity", epsilon)\n .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });\n\n tickEnter\n .attr("opacity", epsilon)\n .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr("d", orient === left || orient == right\n ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1)\n : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1));\n\n tick\n .attr("opacity", 1)\n .attr("transform", function(d) { return transform(position(d)); });\n\n line\n .attr(x + "2", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr("fill", "none")\n .attr("font-size", 10)\n .attr("font-family", "sans-serif")\n .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nfunction axisTop(scale) {\n return axis(axis_top, scale);\n}\n\nfunction axisRight(scale) {\n return axis(right, scale);\n}\n\nfunction axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nfunction axisLeft(scale) {\n return axis(left, scale);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-axis/src/index.js\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU3MzUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFPOzs7QUNBUCw2QkFBZSxrQkFBUztBQUN4QjtBQUNBOzs7QUNGOEI7QUFDSTs7QUFFbEMsSUFBSSxRQUFHO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFFBQUc7QUFDeEI7QUFDQSw2QkFBNkIsUUFBRzs7QUFFaEM7QUFDQTtBQUNBLHlHQUF5RyxRQUFRO0FBQ2pIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixRQUFHOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkMsbUZBQW1GOztBQUU5SDtBQUNBO0FBQ0EsMkNBQTJDLGdDQUFnQyw4REFBOEQ7QUFDekk7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QyxnQ0FBZ0M7O0FBRXpFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIseUJBQXlCO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixVQUFVO0FBQ3JDOztBQUVBO0FBQ0EsZ0VBQWdFLFVBQVU7QUFDMUU7O0FBRUE7QUFDQSwrREFBK0QsVUFBVTtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUCxjQUFjLFFBQUc7QUFDakI7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7OztBQ3hLZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXJyYXkuanM/YTZlNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanM/YWQzMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcz80MDkwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pbmRleC5qcz9hMmE0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eVwiO1xuXG52YXIgdG9wID0gMSxcbiAgICByaWdodCA9IDIsXG4gICAgYm90dG9tID0gMyxcbiAgICBsZWZ0ID0gNCxcbiAgICBlcHNpbG9uID0gMWUtNjtcblxuZnVuY3Rpb24gdHJhbnNsYXRlWCh4KSB7XG4gIHJldHVybiBcInRyYW5zbGF0ZShcIiArICh4ICsgMC41KSArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArICh5ICsgMC41KSArIFwiKVwiO1xufVxuXG5mdW5jdGlvbiBudW1iZXIoc2NhbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gK3NjYWxlKGQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjZW50ZXIoc2NhbGUpIHtcbiAgdmFyIG9mZnNldCA9IE1hdGgubWF4KDAsIHNjYWxlLmJhbmR3aWR0aCgpIC0gMSkgLyAyOyAvLyBBZGp1c3QgZm9yIDAuNXB4IG9mZnNldC5cbiAgaWYgKHNjYWxlLnJvdW5kKCkpIG9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gK3NjYWxlKGQpICsgb2Zmc2V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnRlcmluZygpIHtcbiAgcmV0dXJuICF0aGlzLl9fYXhpcztcbn1cblxuZnVuY3Rpb24gYXhpcyhvcmllbnQsIHNjYWxlKSB7XG4gIHZhciB0aWNrQXJndW1lbnRzID0gW10sXG4gICAgICB0aWNrVmFsdWVzID0gbnVsbCxcbiAgICAgIHRpY2tGb3JtYXQgPSBudWxsLFxuICAgICAgdGlja1NpemVJbm5lciA9IDYsXG4gICAgICB0aWNrU2l6ZU91dGVyID0gNixcbiAgICAgIHRpY2tQYWRkaW5nID0gMyxcbiAgICAgIGsgPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGxlZnQgPyAtMSA6IDEsXG4gICAgICB4ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyBcInhcIiA6IFwieVwiLFxuICAgICAgdHJhbnNmb3JtID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBib3R0b20gPyB0cmFuc2xhdGVYIDogdHJhbnNsYXRlWTtcblxuICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWVzID0gdGlja1ZhbHVlcyA9PSBudWxsID8gKHNjYWxlLnRpY2tzID8gc2NhbGUudGlja3MuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogc2NhbGUuZG9tYWluKCkpIDogdGlja1ZhbHVlcyxcbiAgICAgICAgZm9ybWF0ID0gdGlja0Zvcm1hdCA9PSBudWxsID8gKHNjYWxlLnRpY2tGb3JtYXQgPyBzY2FsZS50aWNrRm9ybWF0LmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IGlkZW50aXR5KSA6IHRpY2tGb3JtYXQsXG4gICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLFxuICAgICAgICByYW5nZSA9IHNjYWxlLnJhbmdlKCksXG4gICAgICAgIHJhbmdlMCA9ICtyYW5nZVswXSArIDAuNSxcbiAgICAgICAgcmFuZ2UxID0gK3JhbmdlW3JhbmdlLmxlbmd0aCAtIDFdICsgMC41LFxuICAgICAgICBwb3NpdGlvbiA9IChzY2FsZS5iYW5kd2lkdGggPyBjZW50ZXIgOiBudW1iZXIpKHNjYWxlLmNvcHkoKSksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkKSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0ocCAmJiBpc0Zpbml0ZShwID0gcChkKSkgPyBwIDogcG9zaXRpb24oZCkpOyB9KTtcbiAgICB9XG5cbiAgICB0aWNrRXhpdC5yZW1vdmUoKTtcblxuICAgIHBhdGhcbiAgICAgICAgLmF0dHIoXCJkXCIsIG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkgwLjVWXCIgKyByYW5nZTEgKyBcIkhcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNMC41LFwiICsgcmFuZ2UwICsgXCJWXCIgKyByYW5nZTEpXG4gICAgICAgICAgICA6ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyByYW5nZTAgKyBcIixcIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCJWMC41SFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsMC41SFwiICsgcmFuZ2UxKSk7XG5cbiAgICB0aWNrXG4gICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCAxKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiB0cmFuc2Zvcm0ocG9zaXRpb24oZCkpOyB9KTtcblxuICAgIGxpbmVcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcik7XG5cbiAgICB0ZXh0XG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAudGV4dChmb3JtYXQpO1xuXG4gICAgc2VsZWN0aW9uLmZpbHRlcihlbnRlcmluZylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCAxMClcbiAgICAgICAgLmF0dHIoXCJmb250LWZhbWlseVwiLCBcInNhbnMtc2VyaWZcIilcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBvcmllbnQgPT09IHJpZ2h0ID8gXCJzdGFydFwiIDogb3JpZW50ID09PSBsZWZ0ID8gXCJlbmRcIiA6IFwibWlkZGxlXCIpO1xuXG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgeyB0aGlzLl9fYXhpcyA9IHBvc2l0aW9uOyB9KTtcbiAgfVxuXG4gIGF4aXMuc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGUgPSBfLCBheGlzKSA6IHNjYWxlO1xuICB9O1xuXG4gIGF4aXMudGlja3MgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGlja0FyZ3VtZW50cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSwgYXhpcztcbiAgfTtcblxuICBheGlzLnRpY2tBcmd1bWVudHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0FyZ3VtZW50cyA9IF8gPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChfKSwgYXhpcykgOiB0aWNrQXJndW1lbnRzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tWYWx1ZXMgPSBfID09IG51bGwgPyBudWxsIDogc2xpY2UuY2FsbChfKSwgYXhpcykgOiB0aWNrVmFsdWVzICYmIHRpY2tWYWx1ZXMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0Zvcm1hdCA9IF8sIGF4aXMpIDogdGlja0Zvcm1hdDtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSB0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZU91dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZU91dGVyO1xuICB9O1xuXG4gIGF4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1BhZGRpbmcgPSArXywgYXhpcykgOiB0aWNrUGFkZGluZztcbiAgfTtcblxuICByZXR1cm4gYXhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNUb3Aoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXModG9wLCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzUmlnaHQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMocmlnaHQsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNCb3R0b20oc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMoYm90dG9tLCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzTGVmdChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhsZWZ0LCBzY2FsZSk7XG59XG4iLCJleHBvcnQge1xuICBheGlzVG9wLFxuICBheGlzUmlnaHQsXG4gIGF4aXNCb3R0b20sXG4gIGF4aXNMZWZ0XG59IGZyb20gXCIuL2F4aXNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///85735\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-brush.693cfdef19a47bd2.bundle.js b/assets/demo/site/npm.d3-brush.693cfdef19a47bd2.bundle.js
new file mode 100644
index 00000000..1fd64070
--- /dev/null
+++ b/assets/demo/site/npm.d3-brush.693cfdef19a47bd2.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[8457],{13873:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Dm": () => (/* reexport */ brush),\n "mN": () => (/* reexport */ brushSelection),\n "Yu": () => (/* reexport */ brushX),\n "L": () => (/* reexport */ brushY)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar dispatch = __webpack_require__(92626);\n// EXTERNAL MODULE: ./node_modules/d3-drag/src/nodrag.js\nvar nodrag = __webpack_require__(10072);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/value.js\nvar value = __webpack_require__(81265);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/touch.js\nvar touch = __webpack_require__(24793);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/on.js\nvar on = __webpack_require__(25109);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/select.js\nvar src_select = __webpack_require__(94017);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/mouse.js\nvar mouse = __webpack_require__(43095);\n// EXTERNAL MODULE: ./node_modules/d3-transition/src/index.js + 27 modules\nvar src = __webpack_require__(86254);\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/event.js\n/* harmony default export */ function src_event(target, type, selection) {\n this.target = target;\n this.type = type;\n this.selection = selection;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/noevent.js\n\n\nfunction nopropagation() {\n on/* event.stopImmediatePropagation */.B.stopImmediatePropagation();\n}\n\n/* harmony default export */ function noevent() {\n on/* event.preventDefault */.B.preventDefault();\n on/* event.stopImmediatePropagation */.B.stopImmediatePropagation();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/brush.js\n\n\n\n\n\n\n\n\n\nvar MODE_DRAG = {name: "drag"},\n MODE_SPACE = {name: "space"},\n MODE_HANDLE = {name: "handle"},\n MODE_CENTER = {name: "center"};\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n return function(target) {\n return (0,touch/* default */.Z)(target, on/* event.touches */.B.touches, identifier);\n };\n}\n\nvar X = {\n name: "x",\n handles: ["w", "e"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: "y",\n handles: ["n", "s"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: "xy",\n handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: "crosshair",\n selection: "move",\n n: "ns-resize",\n e: "ew-resize",\n s: "ns-resize",\n w: "ew-resize",\n nw: "nwse-resize",\n ne: "nesw-resize",\n se: "nwse-resize",\n sw: "nesw-resize"\n};\n\nvar flipX = {\n e: "w",\n w: "e",\n nw: "ne",\n ne: "nw",\n se: "sw",\n sw: "se"\n};\n\nvar flipY = {\n n: "s",\n s: "n",\n nw: "sw",\n ne: "se",\n se: "ne",\n sw: "nw"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !on/* event.ctrlKey */.B.ctrlKey && !on/* event.button */.B.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute("viewBox")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || ("ontouchstart" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nfunction brushX() {\n return brush_brush(X);\n}\n\nfunction brushY() {\n return brush_brush(Y);\n}\n\n/* harmony default export */ function brush() {\n return brush_brush(XY);\n}\n\nfunction brush_brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = (0,dispatch/* default */.Z)("start", "brush", "end"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property("__brush", initialize)\n .selectAll(".overlay")\n .data([type("overlay")]);\n\n overlay.enter().append("rect")\n .attr("class", "overlay")\n .attr("pointer-events", "all")\n .attr("cursor", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n (0,src_select/* default */.Z)(this)\n .attr("x", extent[0][0])\n .attr("y", extent[0][1])\n .attr("width", extent[1][0] - extent[0][0])\n .attr("height", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(".selection")\n .data([type("selection")])\n .enter().append("rect")\n .attr("class", "selection")\n .attr("cursor", cursors.selection)\n .attr("fill", "#777")\n .attr("fill-opacity", 0.3)\n .attr("stroke", "#fff")\n .attr("shape-rendering", "crispEdges");\n\n var handle = group.selectAll(".handle")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append("rect")\n .attr("class", function(d) { return "handle handle--" + d.type; })\n .attr("cursor", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr("fill", "none")\n .attr("pointer-events", "all")\n .on("mousedown.brush", started)\n .filter(touchable)\n .on("touchstart.brush", started)\n .on("touchmove.brush", touchmoved)\n .on("touchend.brush touchcancel.brush", touchended)\n .style("touch-action", "none")\n .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n brush.move = function(group, selection) {\n if (group.selection) {\n group\n .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })\n .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })\n .tween("brush", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),\n i = (0,value/* default */.Z)(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n (0,src/* interrupt */.e1)(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start().brush().end();\n });\n }\n };\n\n brush.clear = function(group) {\n brush.move(group, null);\n };\n\n function redraw() {\n var group = (0,src_select/* default */.Z)(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(".selection")\n .style("display", null)\n .attr("x", selection[0][0])\n .attr("y", selection[0][1])\n .attr("width", selection[1][0] - selection[0][0])\n .attr("height", selection[1][1] - selection[0][1]);\n\n group.selectAll(".handle")\n .style("display", null)\n .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(".selection,.handle")\n .style("display", "none")\n .attr("x", null)\n .attr("y", null)\n .attr("width", null)\n .attr("height", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function() {\n if (this.starting) this.starting = false, this.emit("start");\n else this.emit("brush");\n return this;\n },\n brush: function() {\n this.emit("brush");\n return this;\n },\n end: function() {\n if (--this.active === 0) delete this.state.emitter, this.emit("end");\n return this;\n },\n emit: function(type) {\n (0,on/* customEvent */._H)(new src_event(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function started() {\n if (touchending && !on/* event.touches */.B.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = on/* event.target.__data__.type */.B.target.__data__.type,\n mode = (keys && on/* event.metaKey */.B.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && on/* event.altKey */.B.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && on/* event.shiftKey */.B.shiftKey,\n lockX,\n lockY,\n pointer = on/* event.touches */.B.touches ? toucher(on/* event.changedTouches.0.identifier */.B.changedTouches[0].identifier) : mouse/* default */.Z,\n point0 = pointer(that),\n point = point0,\n emit = emitter(that, arguments, true).beforestart();\n\n if (type === "overlay") {\n if (selection) moving = true;\n state.selection = selection = [\n [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n ];\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = (0,src_select/* default */.Z)(that)\n .attr("pointer-events", "none");\n\n var overlay = group.selectAll(".overlay")\n .attr("cursor", cursors[type]);\n\n if (on/* event.touches */.B.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = (0,src_select/* default */.Z)(on/* event.view */.B.view)\n .on("mousemove.brush", moved, true)\n .on("mouseup.brush", ended, true);\n if (keys) view\n .on("keydown.brush", keydowned, true)\n .on("keyup.brush", keyupped, true)\n\n ;(0,nodrag/* default */.Z)(on/* event.view */.B.view);\n }\n\n nopropagation();\n (0,src/* interrupt */.e1)(that);\n redraw.call(that);\n emit.start();\n\n function moved() {\n var point1 = pointer(that);\n if (shifting && !lockX && !lockY) {\n if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n else lockX = true;\n }\n point = point1;\n moving = true;\n noevent();\n move();\n }\n\n function move() {\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush();\n }\n }\n\n function ended() {\n nopropagation();\n if (on/* event.touches */.B.touches) {\n if (on/* event.touches.length */.B.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n (0,nodrag/* yesdrag */.D)(on/* event.view */.B.view, moving);\n view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);\n }\n group.attr("pointer-events", "all");\n overlay.attr("cursor", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end();\n }\n\n function keydowned() {\n switch (on/* event.keyCode */.B.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move();\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr("cursor", cursors.selection);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n\n function keyupped() {\n switch (on/* event.keyCode */.B.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move();\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move();\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (on/* event.altKey */.B.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr("cursor", cursors[type]);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n }\n\n function touchmoved() {\n emitter(this, arguments).moved();\n }\n\n function touchended() {\n emitter(this, arguments).ended();\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === "function" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/index.js\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSxjQUFjO0FBQ2Qsc0NBQXNDO0FBQ3RDLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE9BQU87QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0UsUUFBUTtBQUM5RTs7QUFFQTtBQUNBLHNFQUFzRSxRQUFRO0FBQzlFOztBQUVBO0FBQ0EseUVBQXlFLFFBQVE7QUFDakY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUN6a0JvQiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvY29uc3RhbnQuanM/N2EwOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2V2ZW50LmpzPzBhNTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ub2V2ZW50LmpzPzk5NzgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcz84NDg1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvaW5kZXguanM/YzE5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRhcmdldCwgdHlwZSwgc2VsZWN0aW9uKSB7XG4gIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7Y3VzdG9tRXZlbnQsIGV2ZW50LCB0b3VjaCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50LmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG5mdW5jdGlvbiBudW1iZXIxKGUpIHtcbiAgcmV0dXJuIFsrZVswXSwgK2VbMV1dO1xufVxuXG5mdW5jdGlvbiBudW1iZXIyKGUpIHtcbiAgcmV0dXJuIFtudW1iZXIxKGVbMF0pLCBudW1iZXIxKGVbMV0pXTtcbn1cblxuZnVuY3Rpb24gdG91Y2hlcihpZGVudGlmaWVyKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICByZXR1cm4gdG91Y2godGFyZ2V0LCBldmVudC50b3VjaGVzLCBpZGVudGlmaWVyKTtcbiAgfTtcbn1cblxudmFyIFggPSB7XG4gIG5hbWU6IFwieFwiLFxuICBoYW5kbGVzOiBbXCJ3XCIsIFwiZVwiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4LCBlKSB7IHJldHVybiB4ID09IG51bGwgPyBudWxsIDogW1sreFswXSwgZVswXVsxXV0sIFsreFsxXSwgZVsxXVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMF0sIHh5WzFdWzBdXTsgfVxufTtcblxudmFyIFkgPSB7XG4gIG5hbWU6IFwieVwiLFxuICBoYW5kbGVzOiBbXCJuXCIsIFwic1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih5LCBlKSB7IHJldHVybiB5ID09IG51bGwgPyBudWxsIDogW1tlWzBdWzBdLCAreVswXV0sIFtlWzFdWzBdLCAreVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJ3XCIsIFwiZVwiLCBcInNcIiwgXCJud1wiLCBcIm5lXCIsIFwic3dcIiwgXCJzZVwiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgPT0gbnVsbCA/IG51bGwgOiBudW1iZXIyKHh5KTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH1cbn07XG5cbnZhciBjdXJzb3JzID0ge1xuICBvdmVybGF5OiBcImNyb3NzaGFpclwiLFxuICBzZWxlY3Rpb246IFwibW92ZVwiLFxuICBuOiBcIm5zLXJlc2l6ZVwiLFxuICBlOiBcImV3LXJlc2l6ZVwiLFxuICBzOiBcIm5zLXJlc2l6ZVwiLFxuICB3OiBcImV3LXJlc2l6ZVwiLFxuICBudzogXCJud3NlLXJlc2l6ZVwiLFxuICBuZTogXCJuZXN3LXJlc2l6ZVwiLFxuICBzZTogXCJud3NlLXJlc2l6ZVwiLFxuICBzdzogXCJuZXN3LXJlc2l6ZVwiXG59O1xuXG52YXIgZmxpcFggPSB7XG4gIGU6IFwid1wiLFxuICB3OiBcImVcIixcbiAgbnc6IFwibmVcIixcbiAgbmU6IFwibndcIixcbiAgc2U6IFwic3dcIixcbiAgc3c6IFwic2VcIlxufTtcblxudmFyIGZsaXBZID0ge1xuICBuOiBcInNcIixcbiAgczogXCJuXCIsXG4gIG53OiBcInN3XCIsXG4gIG5lOiBcInNlXCIsXG4gIHNlOiBcIm5lXCIsXG4gIHN3OiBcIm53XCJcbn07XG5cbnZhciBzaWduc1ggPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiBudWxsLFxuICBlOiArMSxcbiAgczogbnVsbCxcbiAgdzogLTEsXG4gIG53OiAtMSxcbiAgbmU6ICsxLFxuICBzZTogKzEsXG4gIHN3OiAtMVxufTtcblxudmFyIHNpZ25zWSA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IC0xLFxuICBlOiBudWxsLFxuICBzOiArMSxcbiAgdzogbnVsbCxcbiAgbnc6IC0xLFxuICBuZTogLTEsXG4gIHNlOiArMSxcbiAgc3c6ICsxXG59O1xuXG5mdW5jdGlvbiB0eXBlKHQpIHtcbiAgcmV0dXJuIHt0eXBlOiB0fTtcbn1cblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKCkge1xuICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEV4dGVudCgpIHtcbiAgdmFyIHN2ZyA9IHRoaXMub3duZXJTVkdFbGVtZW50IHx8IHRoaXM7XG4gIGlmIChzdmcuaGFzQXR0cmlidXRlKFwidmlld0JveFwiKSkge1xuICAgIHN2ZyA9IHN2Zy52aWV3Qm94LmJhc2VWYWw7XG4gICAgcmV0dXJuIFtbc3ZnLngsIHN2Zy55XSwgW3N2Zy54ICsgc3ZnLndpZHRoLCBzdmcueSArIHN2Zy5oZWlnaHRdXTtcbiAgfVxuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIHRvdWNoYWJsZSA9IGRlZmF1bHRUb3VjaGFibGUsXG4gICAgICBrZXlzID0gdHJ1ZSxcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJicnVzaFwiLCBcImVuZFwiKSxcbiAgICAgIGhhbmRsZVNpemUgPSA2LFxuICAgICAgdG91Y2hlbmRpbmc7XG5cbiAgZnVuY3Rpb24gYnJ1c2goZ3JvdXApIHtcbiAgICB2YXIgb3ZlcmxheSA9IGdyb3VwXG4gICAgICAgIC5wcm9wZXJ0eShcIl9fYnJ1c2hcIiwgaW5pdGlhbGl6ZSlcbiAgICAgIC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJvdmVybGF5XCIpXSk7XG5cbiAgICBvdmVybGF5LmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwib3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMub3ZlcmxheSlcbiAgICAgIC5tZXJnZShvdmVybGF5KVxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgZXh0ZW50ID0gbG9jYWwodGhpcykuZXh0ZW50O1xuICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZXh0ZW50WzBdWzBdKVxuICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXh0ZW50WzBdWzFdKVxuICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGV4dGVudFsxXVswXSAtIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdKTtcbiAgICAgICAgfSk7XG5cbiAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAuZGF0YShbdHlwZShcInNlbGVjdGlvblwiKV0pXG4gICAgICAuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJzZWxlY3Rpb25cIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiM3NzdcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwgMC4zKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcIiNmZmZcIilcbiAgICAgICAgLmF0dHIoXCJzaGFwZS1yZW5kZXJpbmdcIiwgXCJjcmlzcEVkZ2VzXCIpO1xuXG4gICAgdmFyIGhhbmRsZSA9IGdyb3VwLnNlbGVjdEFsbChcIi5oYW5kbGVcIilcbiAgICAgIC5kYXRhKGRpbS5oYW5kbGVzLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGU7IH0pO1xuXG4gICAgaGFuZGxlLmV4aXQoKS5yZW1vdmUoKTtcblxuICAgIGhhbmRsZS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBmdW5jdGlvbihkKSB7IHJldHVybiBcImhhbmRsZSBoYW5kbGUtLVwiICsgZC50eXBlOyB9KVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBjdXJzb3JzW2QudHlwZV07IH0pO1xuXG4gICAgZ3JvdXBcbiAgICAgICAgLmVhY2gocmVkcmF3KVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoXCIsIHN0YXJ0ZWQpXG4gICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgdG91Y2htb3ZlZClcbiAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxuICAgICAgICAuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIiwgXCJyZ2JhKDAsMCwwLDApXCIpO1xuICB9XG5cbiAgYnJ1c2gubW92ZSA9IGZ1bmN0aW9uKGdyb3VwLCBzZWxlY3Rpb24pIHtcbiAgICBpZiAoZ3JvdXAuc2VsZWN0aW9uKSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5vbihcInN0YXJ0LmJydXNoXCIsIGZ1bmN0aW9uKCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpOyB9KVxuICAgICAgICAgIC5vbihcImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5lbmQoKTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KCkuYnJ1c2goKS5lbmQoKTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCkge1xuICAgIGJydXNoLm1vdmUoZ3JvdXAsIG51bGwpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICB2YXIgZ3JvdXAgPSBzZWxlY3QodGhpcyksXG4gICAgICAgIHNlbGVjdGlvbiA9IGxvY2FsKHRoaXMpLnNlbGVjdGlvbjtcblxuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb25cIilcbiAgICAgICAgICAuc3R5bGUoXCJkaXNwbGF5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcInlcIiwgc2VsZWN0aW9uWzBdWzFdKVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSk7XG5cbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5oYW5kbGVcIilcbiAgICAgICAgICAuc3R5bGUoXCJkaXNwbGF5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoIC0gMV0gPT09IFwiZVwiID8gc2VsZWN0aW9uWzFdWzBdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMF0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlWzBdID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVsxXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzFdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGUgPT09IFwiblwiIHx8IGQudHlwZSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0gKyBoYW5kbGVTaXplIDogaGFuZGxlU2l6ZTsgfSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGUgPT09IFwiZVwiIHx8IGQudHlwZSA9PT0gXCJ3XCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0gKyBoYW5kbGVTaXplIDogaGFuZGxlU2l6ZTsgfSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uLC5oYW5kbGVcIilcbiAgICAgICAgICAuc3R5bGUoXCJkaXNwbGF5XCIsIFwibm9uZVwiKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgdmFyIGVtaXQgPSB0aGF0Ll9fYnJ1c2guZW1pdHRlcjtcbiAgICByZXR1cm4gZW1pdCAmJiAoIWNsZWFuIHx8ICFlbWl0LmNsZWFuKSA/IGVtaXQgOiBuZXcgRW1pdHRlcih0aGF0LCBhcmdzLCBjbGVhbik7XG4gIH1cblxuICBmdW5jdGlvbiBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICAgIHRoaXMuY2xlYW4gPSBjbGVhbjtcbiAgfVxuXG4gIEVtaXR0ZXIucHJvdG90eXBlID0ge1xuICAgIGJlZm9yZXN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgrK3RoaXMuYWN0aXZlID09PSAxKSB0aGlzLnN0YXRlLmVtaXR0ZXIgPSB0aGlzLCB0aGlzLnN0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuc3RhcnRpbmcpIHRoaXMuc3RhcnRpbmcgPSBmYWxzZSwgdGhpcy5lbWl0KFwic3RhcnRcIik7XG4gICAgICBlbHNlIHRoaXMuZW1pdChcImJydXNoXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmVtaXQoXCJicnVzaFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSBkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLCB0aGlzLmVtaXQoXCJlbmRcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgIGN1c3RvbUV2ZW50KG5ldyBCcnVzaEV2ZW50KGJydXNoLCB0eXBlLCBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksIGxpc3RlbmVycy5hcHBseSwgbGlzdGVuZXJzLCBbdHlwZSwgdGhpcy50aGF0LCB0aGlzLmFyZ3NdKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gc3RhcnRlZCgpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50ZXIgPSBldmVudC50b3VjaGVzID8gdG91Y2hlcihldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKSA6IG1vdXNlLFxuICAgICAgICBwb2ludDAgPSBwb2ludGVyKHRoYXQpLFxuICAgICAgICBwb2ludCA9IHBvaW50MCxcbiAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJndW1lbnRzLCB0cnVlKS5iZWZvcmVzdGFydCgpO1xuXG4gICAgaWYgKHR5cGUgPT09IFwib3ZlcmxheVwiKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uKSBtb3ZpbmcgPSB0cnVlO1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZW1pdC5tb3ZlZCA9IG1vdmVkO1xuICAgICAgZW1pdC5lbmRlZCA9IGVuZGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcbiAgICAgIGlmIChrZXlzKSB2aWV3XG4gICAgICAgICAgLm9uKFwia2V5ZG93bi5icnVzaFwiLCBrZXlkb3duZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwia2V5dXAuYnJ1c2hcIiwga2V5dXBwZWQsIHRydWUpXG5cbiAgICAgIGRyYWdEaXNhYmxlKGV2ZW50LnZpZXcpO1xuICAgIH1cblxuICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICBpbnRlcnJ1cHQodGhhdCk7XG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydCgpO1xuXG4gICAgZnVuY3Rpb24gbW92ZWQoKSB7XG4gICAgICB2YXIgcG9pbnQxID0gcG9pbnRlcih0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5ZG93bmVkKCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDMyOiB7IC8vIFNQQUNFOyB0YWtlcyBwcmlvcml0eSBvdmVyIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSB8fCBtb2RlID09PSBNT0RFX0NFTlRFUikge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMSAtIGR4OyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzEgLSBkeDtcbiAgICAgICAgICAgIGlmIChzaWduWSA8IDApIHMwID0gczEgLSBkeTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xIC0gZHk7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9TUEFDRTtcbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgaWYgKHNoaWZ0aW5nKSB7XG4gICAgICAgICAgICBsb2NrWCA9IGxvY2tZID0gc2hpZnRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAxODogeyAvLyBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgIGlmIChzaWduWSA8IDApIHMwID0gczE7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xuICAgICAgfVxuICAgICAgbm9ldmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNobW92ZWQoKSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKCk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKCkge1xuICAgIGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5lbmRlZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgYnJ1c2gsXG4gIGJydXNoWCxcbiAgYnJ1c2hZLFxuICBicnVzaFNlbGVjdGlvblxufSBmcm9tIFwiLi9icnVzaC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13873\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-chord.baaabb07b6fba89a.bundle.js b/assets/demo/site/npm.d3-chord.baaabb07b6fba89a.bundle.js
new file mode 100644
index 00000000..2b0184e9
--- /dev/null
+++ b/assets/demo/site/npm.d3-chord.baaabb07b6fba89a.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[9850],{87771:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "f": () => (/* reexport */ chord),\n "N": () => (/* reexport */ ribbon)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-array/src/index.js + 31 modules\nvar src = __webpack_require__(33016);\n;// CONCATENATED MODULE: ./node_modules/d3-chord/src/math.js\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar tau = pi * 2;\nvar max = Math.max;\n\n;// CONCATENATED MODULE: ./node_modules/d3-chord/src/chord.js\n\n\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\n/* harmony default export */ function chord() {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = [],\n groupIndex = (0,src/* range */.w6)(n),\n subgroupIndex = [],\n chords = [],\n groups = chords.groups = new Array(n),\n subgroups = new Array(n * n),\n k,\n x,\n x0,\n dx,\n i,\n j;\n\n // Compute the sum.\n k = 0, i = -1; while (++i < n) {\n x = 0, j = -1; while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push((0,src/* range */.w6)(n));\n k += x;\n }\n\n // Sort groups…\n if (sortGroups) groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n\n // Sort subgroups…\n if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n\n // Convert the sum to scaling factor for [0, 2pi].\n // TODO Allow start and end angle to be specified?\n // TODO Allow padding to be specified as percentage?\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the start and end angle for each group and subgroup.\n // Note: Opera has a bug reordering object literal properties!\n x = 0, i = -1; while (++i < n) {\n x0 = x, j = -1; while (++j < n) {\n var di = groupIndex[i],\n dj = subgroupIndex[di][j],\n v = matrix[di][dj],\n a0 = x,\n a1 = x += v * k;\n subgroups[dj * n + di] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += dx;\n }\n\n // Generate chords for each (non-empty) subgroup-subgroup link.\n i = -1; while (++i < n) {\n j = i - 1; while (++j < n) {\n var source = subgroups[j * n + i],\n target = subgroups[i * n + j];\n if (source.value || target.value) {\n chords.push(source.value < target.value\n ? {source: target, target: source}\n : {source: source, target: target});\n }\n }\n }\n\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-chord/src/array.js\nvar slice = Array.prototype.slice;\n\n;// CONCATENATED MODULE: ./node_modules/d3-chord/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-path/src/path.js\nvar path = __webpack_require__(11108);\n;// CONCATENATED MODULE: ./node_modules/d3-chord/src/ribbon.js\n\n\n\n\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\n/* harmony default export */ function ribbon() {\n var source = defaultSource,\n target = defaultTarget,\n radius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n argv = slice.call(arguments),\n s = source.apply(this, argv),\n t = target.apply(this, argv),\n sr = +radius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n sx0 = sr * cos(sa0),\n sy0 = sr * sin(sa0),\n tr = +radius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = (0,path/* default */.Z)();\n\n context.moveTo(sx0, sy0);\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n context.quadraticCurveTo(0, 0, sx0, sy0);\n context.closePath();\n\n if (buffer) return context = null, buffer + "" || null;\n }\n\n ribbon.radius = function(_) {\n return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), ribbon) : radius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-chord/src/index.js\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc3NzEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTHdCO0FBQ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsaUJBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHFCQUFLO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CO0FBQ25CLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIscUJBQUs7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsUUFBUSxHQUFHLElBQUksR0FBRztBQUNsQix3QkFBd0IsR0FBRzs7QUFFM0I7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixpQkFBaUIsK0JBQStCO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLEdBQUc7QUFDN0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FDeEhPOzs7QUNBUCw2QkFBZSxrQkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNKOEI7QUFDSTtBQUNNO0FBQ1g7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsa0JBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQsMkNBQTJDLE1BQU07QUFDakQsbUJBQW1CLEdBQUc7QUFDdEIsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQSw2Q0FBNkMsTUFBTTtBQUNuRCwyQ0FBMkMsTUFBTTs7QUFFakQscUNBQXFDLHVCQUFJOztBQUV6QztBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLDBDQUEwQyxHQUFHLFlBQVksR0FBRztBQUM1RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0VBQXNFLFFBQVE7QUFDOUU7O0FBRUE7QUFDQSwwRUFBMEUsUUFBUTtBQUNsRjs7QUFFQTtBQUNBLHdFQUF3RSxRQUFRO0FBQ2hGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQ3RGeUM7QUFDRSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvbWF0aC5qcz8wYzY5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvY2hvcmQuanM/YjhkMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2FycmF5LmpzP2FjYjgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9jb25zdGFudC5qcz80YzRhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvcmliYm9uLmpzPzU0ZDciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9pbmRleC5qcz9lYTI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbiIsImltcG9ydCB7cmFuZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHttYXgsIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG5mdW5jdGlvbiBjb21wYXJlVmFsdWUoY29tcGFyZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlKFxuICAgICAgYS5zb3VyY2UudmFsdWUgKyBhLnRhcmdldC52YWx1ZSxcbiAgICAgIGIuc291cmNlLnZhbHVlICsgYi50YXJnZXQudmFsdWVcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHBhZEFuZ2xlID0gMCxcbiAgICAgIHNvcnRHcm91cHMgPSBudWxsLFxuICAgICAgc29ydFN1Ymdyb3VwcyA9IG51bGwsXG4gICAgICBzb3J0Q2hvcmRzID0gbnVsbDtcblxuICBmdW5jdGlvbiBjaG9yZChtYXRyaXgpIHtcbiAgICB2YXIgbiA9IG1hdHJpeC5sZW5ndGgsXG4gICAgICAgIGdyb3VwU3VtcyA9IFtdLFxuICAgICAgICBncm91cEluZGV4ID0gcmFuZ2UobiksXG4gICAgICAgIHN1Ymdyb3VwSW5kZXggPSBbXSxcbiAgICAgICAgY2hvcmRzID0gW10sXG4gICAgICAgIGdyb3VwcyA9IGNob3Jkcy5ncm91cHMgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShuICogbiksXG4gICAgICAgIGssXG4gICAgICAgIHgsXG4gICAgICAgIHgwLFxuICAgICAgICBkeCxcbiAgICAgICAgaSxcbiAgICAgICAgajtcblxuICAgIC8vIENvbXB1dGUgdGhlIHN1bS5cbiAgICBrID0gMCwgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikge1xuICAgICAgeCA9IDAsIGogPSAtMTsgd2hpbGUgKCsraiA8IG4pIHtcbiAgICAgICAgeCArPSBtYXRyaXhbaV1bal07XG4gICAgICB9XG4gICAgICBncm91cFN1bXMucHVzaCh4KTtcbiAgICAgIHN1Ymdyb3VwSW5kZXgucHVzaChyYW5nZShuKSk7XG4gICAgICBrICs9IHg7XG4gICAgfVxuXG4gICAgLy8gU29ydCBncm91cHPigKZcbiAgICBpZiAoc29ydEdyb3VwcykgZ3JvdXBJbmRleC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBzb3J0R3JvdXBzKGdyb3VwU3Vtc1thXSwgZ3JvdXBTdW1zW2JdKTtcbiAgICB9KTtcblxuICAgIC8vIFNvcnQgc3ViZ3JvdXBz4oCmXG4gICAgaWYgKHNvcnRTdWJncm91cHMpIHN1Ymdyb3VwSW5kZXguZm9yRWFjaChmdW5jdGlvbihkLCBpKSB7XG4gICAgICBkLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICByZXR1cm4gc29ydFN1Ymdyb3VwcyhtYXRyaXhbaV1bYV0sIG1hdHJpeFtpXVtiXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdGhlIHN1bSB0byBzY2FsaW5nIGZhY3RvciBmb3IgWzAsIDJwaV0uXG4gICAgLy8gVE9ETyBBbGxvdyBzdGFydCBhbmQgZW5kIGFuZ2xlIHRvIGJlIHNwZWNpZmllZD9cbiAgICAvLyBUT0RPIEFsbG93IHBhZGRpbmcgdG8gYmUgc3BlY2lmaWVkIGFzIHBlcmNlbnRhZ2U/XG4gICAgayA9IG1heCgwLCB0YXUgLSBwYWRBbmdsZSAqIG4pIC8gaztcbiAgICBkeCA9IGsgPyBwYWRBbmdsZSA6IHRhdSAvIG47XG5cbiAgICAvLyBDb21wdXRlIHRoZSBzdGFydCBhbmQgZW5kIGFuZ2xlIGZvciBlYWNoIGdyb3VwIGFuZCBzdWJncm91cC5cbiAgICAvLyBOb3RlOiBPcGVyYSBoYXMgYSBidWcgcmVvcmRlcmluZyBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIVxuICAgIHggPSAwLCBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB4MCA9IHgsIGogPSAtMTsgd2hpbGUgKCsraiA8IG4pIHtcbiAgICAgICAgdmFyIGRpID0gZ3JvdXBJbmRleFtpXSxcbiAgICAgICAgICAgIGRqID0gc3ViZ3JvdXBJbmRleFtkaV1bal0sXG4gICAgICAgICAgICB2ID0gbWF0cml4W2RpXVtkal0sXG4gICAgICAgICAgICBhMCA9IHgsXG4gICAgICAgICAgICBhMSA9IHggKz0gdiAqIGs7XG4gICAgICAgIHN1Ymdyb3Vwc1tkaiAqIG4gKyBkaV0gPSB7XG4gICAgICAgICAgaW5kZXg6IGRpLFxuICAgICAgICAgIHN1YmluZGV4OiBkaixcbiAgICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgICBlbmRBbmdsZTogYTEsXG4gICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGdyb3Vwc1tkaV0gPSB7XG4gICAgICAgIGluZGV4OiBkaSxcbiAgICAgICAgc3RhcnRBbmdsZTogeDAsXG4gICAgICAgIGVuZEFuZ2xlOiB4LFxuICAgICAgICB2YWx1ZTogZ3JvdXBTdW1zW2RpXVxuICAgICAgfTtcbiAgICAgIHggKz0gZHg7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2hvcmRzIGZvciBlYWNoIChub24tZW1wdHkpIHN1Ymdyb3VwLXN1Ymdyb3VwIGxpbmsuXG4gICAgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaiA9IGkgLSAxOyB3aGlsZSAoKytqIDwgbikge1xuICAgICAgICB2YXIgc291cmNlID0gc3ViZ3JvdXBzW2ogKiBuICsgaV0sXG4gICAgICAgICAgICB0YXJnZXQgPSBzdWJncm91cHNbaSAqIG4gKyBqXTtcbiAgICAgICAgaWYgKHNvdXJjZS52YWx1ZSB8fCB0YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICBjaG9yZHMucHVzaChzb3VyY2UudmFsdWUgPCB0YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgPyB7c291cmNlOiB0YXJnZXQsIHRhcmdldDogc291cmNlfVxuICAgICAgICAgICAgICA6IHtzb3VyY2U6IHNvdXJjZSwgdGFyZ2V0OiB0YXJnZXR9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3J0Q2hvcmRzID8gY2hvcmRzLnNvcnQoc29ydENob3JkcykgOiBjaG9yZHM7XG4gIH1cblxuICBjaG9yZC5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IG1heCgwLCBfKSwgY2hvcmQpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgY2hvcmQuc29ydEdyb3VwcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0R3JvdXBzID0gXywgY2hvcmQpIDogc29ydEdyb3VwcztcbiAgfTtcblxuICBjaG9yZC5zb3J0U3ViZ3JvdXBzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnRTdWJncm91cHMgPSBfLCBjaG9yZCkgOiBzb3J0U3ViZ3JvdXBzO1xuICB9O1xuXG4gIGNob3JkLnNvcnRDaG9yZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gc29ydENob3JkcyA9IG51bGwgOiAoc29ydENob3JkcyA9IGNvbXBhcmVWYWx1ZShfKSkuXyA9IF8sIGNob3JkKSA6IHNvcnRDaG9yZHMgJiYgc29ydENob3Jkcy5fO1xuICB9O1xuXG4gIHJldHVybiBjaG9yZDtcbn1cbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCB7Y29zLCBoYWxmUGksIHNpbn0gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IHtwYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuXG5mdW5jdGlvbiBkZWZhdWx0U291cmNlKGQpIHtcbiAgcmV0dXJuIGQuc291cmNlO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VGFyZ2V0KGQpIHtcbiAgcmV0dXJuIGQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQucmFkaXVzO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0U3RhcnRBbmdsZShkKSB7XG4gIHJldHVybiBkLnN0YXJ0QW5nbGU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFbmRBbmdsZShkKSB7XG4gIHJldHVybiBkLmVuZEFuZ2xlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHNvdXJjZSA9IGRlZmF1bHRTb3VyY2UsXG4gICAgICB0YXJnZXQgPSBkZWZhdWx0VGFyZ2V0LFxuICAgICAgcmFkaXVzID0gZGVmYXVsdFJhZGl1cyxcbiAgICAgIHN0YXJ0QW5nbGUgPSBkZWZhdWx0U3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlID0gZGVmYXVsdEVuZEFuZ2xlLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gcmliYm9uKCkge1xuICAgIHZhciBidWZmZXIsXG4gICAgICAgIGFyZ3YgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksXG4gICAgICAgIHMgPSBzb3VyY2UuYXBwbHkodGhpcywgYXJndiksXG4gICAgICAgIHQgPSB0YXJnZXQuYXBwbHkodGhpcywgYXJndiksXG4gICAgICAgIHNyID0gK3JhZGl1cy5hcHBseSh0aGlzLCAoYXJndlswXSA9IHMsIGFyZ3YpKSxcbiAgICAgICAgc2EwID0gc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd2KSAtIGhhbGZQaSxcbiAgICAgICAgc2ExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndikgLSBoYWxmUGksXG4gICAgICAgIHN4MCA9IHNyICogY29zKHNhMCksXG4gICAgICAgIHN5MCA9IHNyICogc2luKHNhMCksXG4gICAgICAgIHRyID0gK3JhZGl1cy5hcHBseSh0aGlzLCAoYXJndlswXSA9IHQsIGFyZ3YpKSxcbiAgICAgICAgdGEwID0gc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd2KSAtIGhhbGZQaSxcbiAgICAgICAgdGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndikgLSBoYWxmUGk7XG5cbiAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSBidWZmZXIgPSBwYXRoKCk7XG5cbiAgICBjb250ZXh0Lm1vdmVUbyhzeDAsIHN5MCk7XG4gICAgY29udGV4dC5hcmMoMCwgMCwgc3IsIHNhMCwgc2ExKTtcbiAgICBpZiAoc2EwICE9PSB0YTAgfHwgc2ExICE9PSB0YTEpIHsgLy8gVE9ETyBzciAhPT0gdHI/XG4gICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oMCwgMCwgdHIgKiBjb3ModGEwKSwgdHIgKiBzaW4odGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCB0ciwgdGEwLCB0YTEpO1xuICAgIH1cbiAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oMCwgMCwgc3gwLCBzeTApO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIHJpYmJvbi5yYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHJpYmJvbikgOiByYWRpdXM7XG4gIH07XG5cbiAgcmliYm9uLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCByaWJib24pIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICByaWJib24uZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcmliYm9uKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIHJpYmJvbi5zb3VyY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc291cmNlID0gXywgcmliYm9uKSA6IHNvdXJjZTtcbiAgfTtcblxuICByaWJib24udGFyZ2V0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRhcmdldCA9IF8sIHJpYmJvbikgOiB0YXJnZXQ7XG4gIH07XG5cbiAgcmliYm9uLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIHJpYmJvbikgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiByaWJib247XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgY2hvcmR9IGZyb20gXCIuL2Nob3JkXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmliYm9ufSBmcm9tIFwiLi9yaWJib25cIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///87771\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-collection.d020a70e3c3d3928.bundle.js b/assets/demo/site/npm.d3-collection.d020a70e3c3d3928.bundle.js
new file mode 100644
index 00000000..9b9bc46c
--- /dev/null
+++ b/assets/demo/site/npm.d3-collection.d020a70e3c3d3928.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[9775],{73814:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "qh": () => (/* reexport */ entries),\n "XP": () => (/* reexport */ keys),\n "UI": () => (/* reexport */ src_map),\n "b1": () => (/* reexport */ nest),\n "t8": () => (/* reexport */ src_set),\n "VO": () => (/* reexport */ values)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/map.js\nvar prefix = "$";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\n/* harmony default export */ const src_map = (map);\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/nest.js\n\n\n/* harmony default export */ function nest() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = src_map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return src_map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/set.js\n\n\nfunction Set() {}\n\nvar proto = src_map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += "";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\n/* harmony default export */ const src_set = (set);\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/keys.js\n/* harmony default export */ function keys(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/values.js\n/* harmony default export */ function values(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/entries.js\n/* harmony default export */ function entries(map) {\n var entries = [];\n for (var key in map) entries.push({key: key, value: map[key]});\n return entries;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-collection/src/index.js\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM4MTQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQU87O0FBRVA7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHlFQUF5RSw4Q0FBOEM7QUFDdkg7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxnRUFBZ0Usc0JBQXNCOztBQUV0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQWUsR0FBRyxFQUFDOzs7QUMxRUs7O0FBRXhCLDZCQUFlLGdCQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE9BQUc7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsWUFBWSxrQ0FBa0MsSUFBSTtBQUNqRyx5REFBeUQsK0JBQStCO0FBQ3hGOztBQUVBO0FBQ0EsOEJBQThCLGtEQUFrRDtBQUNoRiwyQkFBMkIsNENBQTRDO0FBQ3ZFLCtCQUErQix3REFBd0Q7QUFDdkYsdUJBQXVCLGNBQWMsY0FBYztBQUNuRCxnQ0FBZ0MsbUNBQW1DLGNBQWM7QUFDakYsa0NBQWtDLG9CQUFvQixjQUFjO0FBQ3BFLDBCQUEwQixZQUFZO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsT0FBRztBQUNaOztBQUVBO0FBQ0E7QUFDQTs7O0FDeEU2Qzs7QUFFN0M7O0FBRUEsWUFBWSxpQkFBYTs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQsaUJBQWlCOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBZSxHQUFHLEVBQUM7OztBQ3RDbkIsNkJBQWUsY0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7O0FDSkEsNkJBQWUsZ0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBLDZCQUFlLGlCQUFTO0FBQ3hCO0FBQ0EscUNBQXFDLDBCQUEwQjtBQUMvRDtBQUNBOzs7QUNKdUM7QUFDRjtBQUNBO0FBQ0U7QUFDSTtBQUNFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL21hcC5qcz9lN2JlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9uZXN0LmpzP2MwNGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL3NldC5qcz8yMzliIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9rZXlzLmpzP2Q3YzQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL3ZhbHVlcy5qcz9lNTFlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9lbnRyaWVzLmpzPzZkNWIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2luZGV4LmpzPzAyOWIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBtYXAgZnJvbSBcIi4vbWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IFtdLFxuICAgICAgc29ydEtleXMgPSBbXSxcbiAgICAgIHNvcnRWYWx1ZXMsXG4gICAgICByb2xsdXAsXG4gICAgICBuZXN0O1xuXG4gIGZ1bmN0aW9uIGFwcGx5KGFycmF5LCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpIHtcbiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGFycmF5LnNvcnQoc29ydFZhbHVlcyk7XG4gICAgICByZXR1cm4gcm9sbHVwICE9IG51bGwgPyByb2xsdXAoYXJyYXkpIDogYXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcC5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xuICByZXR1cm4gbWFwKCk7XG59XG5cbmZ1bmN0aW9uIHNldE1hcChtYXAsIGtleSwgdmFsdWUpIHtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbn1cbiIsImltcG9ydCB7ZGVmYXVsdCBhcyBtYXAsIHByZWZpeH0gZnJvbSBcIi4vbWFwXCI7XG5cbmZ1bmN0aW9uIFNldCgpIHt9XG5cbnZhciBwcm90byA9IG1hcC5wcm90b3R5cGU7XG5cblNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2V0LFxuICBoYXM6IHByb3RvLmhhcyxcbiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhbHVlICs9IFwiXCI7XG4gICAgdGhpc1twcmVmaXggKyB2YWx1ZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBwcm90by5yZW1vdmUsXG4gIGNsZWFyOiBwcm90by5jbGVhcixcbiAgdmFsdWVzOiBwcm90by5rZXlzLFxuICBzaXplOiBwcm90by5zaXplLFxuICBlbXB0eTogcHJvdG8uZW1wdHksXG4gIGVhY2g6IHByb3RvLmVhY2hcbn07XG5cbmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHtcbiAgdmFyIHNldCA9IG5ldyBTZXQ7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNldCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUpIHsgc2V0LmFkZCh2YWx1ZSk7IH0pO1xuXG4gIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS5cbiAgZWxzZSBpZiAob2JqZWN0KSB7XG4gICAgdmFyIGkgPSAtMSwgbiA9IG9iamVjdC5sZW5ndGg7XG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBzZXQuYWRkKGYob2JqZWN0W2ldLCBpLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXApIHtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSB2YWx1ZXMucHVzaChtYXBba2V5XSk7XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXApIHtcbiAgdmFyIGVudHJpZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG1hcCkgZW50cmllcy5wdXNoKHtrZXk6IGtleSwgdmFsdWU6IG1hcFtrZXldfSk7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIG5lc3R9IGZyb20gXCIuL25lc3RcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZXR9IGZyb20gXCIuL3NldFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1hcH0gZnJvbSBcIi4vbWFwXCI7XG5leHBvcnQge2RlZmF1bHQgYXMga2V5c30gZnJvbSBcIi4va2V5c1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHZhbHVlc30gZnJvbSBcIi4vdmFsdWVzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZW50cmllc30gZnJvbSBcIi4vZW50cmllc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73814\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-color.59ac4df1c2757db7.bundle.js b/assets/demo/site/npm.d3-color.59ac4df1c2757db7.bundle.js
new file mode 100644
index 00000000..f6619ec7
--- /dev/null
+++ b/assets/demo/site/npm.d3-color.59ac4df1c2757db7.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[1654],{16372:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "B8": () => (/* binding */ rgb),\n/* harmony export */ "Il": () => (/* binding */ Color),\n/* harmony export */ "J5": () => (/* binding */ brighter),\n/* harmony export */ "SU": () => (/* binding */ rgbConvert),\n/* harmony export */ "Ss": () => (/* binding */ Rgb),\n/* harmony export */ "Ym": () => (/* binding */ hsl),\n/* harmony export */ "ZP": () => (/* binding */ color),\n/* harmony export */ "xV": () => (/* binding */ darker)\n/* harmony export */ });\n/* unused harmony export hslConvert */\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(44087);\n\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = "\\\\s*([+-]?\\\\d+)\\\\s*",\n reN = "\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*",\n reP = "\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp("^rgb\\\\(" + [reI, reI, reI] + "\\\\)$"),\n reRgbPercent = new RegExp("^rgb\\\\(" + [reP, reP, reP] + "\\\\)$"),\n reRgbaInteger = new RegExp("^rgba\\\\(" + [reI, reI, reI, reN] + "\\\\)$"),\n reRgbaPercent = new RegExp("^rgba\\\\(" + [reP, reP, reP, reN] + "\\\\)$"),\n reHslPercent = new RegExp("^hsl\\\\(" + [reN, reP, reP] + "\\\\)$"),\n reHslaPercent = new RegExp("^hsla\\\\(" + [reN, reP, reP, reN] + "\\\\)$");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + "").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Rgb, rgb, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__/* .extend */ .l)(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return "#" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? "rgb(" : "rgba(")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? ")" : ", " + a + ")");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? "0" : "") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Hsl, hsl, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__/* .extend */ .l)(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? "hsl(" : "hsla(")\n + (this.h || 0) + ", "\n + (this.s || 0) * 100 + "%, "\n + (this.l || 0) * 100 + "%"\n + (a === 1 ? ")" : ", " + a + ")");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYzNzIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQTJDOztBQUVwQzs7QUFFQTtBQUNBOztBQUVQO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixJQUFJO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0RBQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrREFBTSxXQUFXLDJEQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0RBQU0sV0FBVywyREFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcz80OGMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlSSwgcmVJLCByZUksIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcbiAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICsgKHRoaXMucyB8fCAwKSAqIDEwMCArIFwiJSwgXCJcbiAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16372\n')},18218:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ cubehelix)\n/* harmony export */ });\n/* unused harmony export Cubehelix */\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44087);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16372);\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11144);\n\n\n\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_0__/* .Rgb */ .Ss)) o = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__/* .rgbConvert */ .SU)(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * _math_js__WEBPACK_IMPORTED_MODULE_1__/* .rad2deg */ .B - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(Cubehelix, cubehelix, (0,_define_js__WEBPACK_IMPORTED_MODULE_2__/* .extend */ .l)(_color_js__WEBPACK_IMPORTED_MODULE_0__/* .Color */ .Il, {\n brighter: function(k) {\n k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_0__/* .brighter */ .J5 : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_0__/* .brighter */ .J5, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_0__/* .darker */ .xV : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_0__/* .darker */ .xV, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * _math_js__WEBPACK_IMPORTED_MODULE_1__/* .deg2rad */ .V,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new _color_js__WEBPACK_IMPORTED_MODULE_0__/* .Rgb */ .Ss(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTgyMTguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyQztBQUN5QjtBQUN6Qjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG9EQUFHLE9BQU8sK0RBQVU7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msc0RBQU87QUFDekM7QUFDQTs7QUFFZTtBQUNmO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtEQUFNLHVCQUF1QiwyREFBTSxDQUFDLHNEQUFLO0FBQ3pDO0FBQ0Esb0JBQW9CLHlEQUFRLFlBQVkseURBQVE7QUFDaEQ7QUFDQSxHQUFHO0FBQ0g7QUFDQSxvQkFBb0IsdURBQU0sWUFBWSx1REFBTTtBQUM1QztBQUNBLEdBQUc7QUFDSDtBQUNBLGlEQUFpRCxzREFBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsb0RBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzPzUzOTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2IsIGRhcmtlciwgYnJpZ2h0ZXJ9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIEEgPSAtMC4xNDg2MSxcbiAgICBCID0gKzEuNzgyNzcsXG4gICAgQyA9IC0wLjI5MjI3LFxuICAgIEQgPSAtMC45MDY0OSxcbiAgICBFID0gKzEuOTcyOTQsXG4gICAgRUQgPSBFICogRCxcbiAgICBFQiA9IEUgKiBCLFxuICAgIEJDX0RBID0gQiAqIEMgLSBEICogQTtcblxuZnVuY3Rpb24gY3ViZWhlbGl4Q29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBsID0gKEJDX0RBICogYiArIEVEICogciAtIEVCICogZykgLyAoQkNfREEgKyBFRCAtIEVCKSxcbiAgICAgIGJsID0gYiAtIGwsXG4gICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXG4gICAgICBzID0gTWF0aC5zcXJ0KGsgKiBrICsgYmwgKiBibCkgLyAoRSAqIGwgKiAoMSAtIGwpKSwgLy8gTmFOIGlmIGw9MCBvciBsPTFcbiAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiByYWQyZGVnIC0gMTIwIDogTmFOO1xuICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoQ3ViZWhlbGl4LCBjdWJlaGVsaXgsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSBpc05hTih0aGlzLmgpID8gMCA6ICh0aGlzLmggKyAxMjApICogZGVnMnJhZCxcbiAgICAgICAgbCA9ICt0aGlzLmwsXG4gICAgICAgIGEgPSBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyAqIGwgKiAoMSAtIGwpLFxuICAgICAgICBjb3NoID0gTWF0aC5jb3MoaCksXG4gICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIDI1NSAqIChsICsgYSAqIChBICogY29zaCArIEIgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEUgKiBjb3NoKSksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18218\n')},44087:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "l": () => (/* binding */ extend)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQwODcuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanM/ZGY4NSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///44087\n')},46404:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "$_": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.ZP),\n/* harmony export */ "B8": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.B8),\n/* harmony export */ "K": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__.Z),\n/* harmony export */ "MA": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.MA),\n/* harmony export */ "Nn": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.ZP),\n/* harmony export */ "Uc": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.Uc),\n/* harmony export */ "Ym": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.Ym),\n/* harmony export */ "tW": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.tW)\n/* harmony export */ });\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16372);\n/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(80241);\n/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18218);\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY0MDQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFzRDtBQUNFO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2luZGV4LmpzP2FmOTkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIGNvbG9yLCByZ2IsIGhzbH0gZnJvbSBcIi4vY29sb3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsYWIsIGhjbCwgbGNoLCBncmF5fSBmcm9tIFwiLi9sYWIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdWJlaGVsaXh9IGZyb20gXCIuL2N1YmVoZWxpeC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46404\n')},80241:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "MA": () => (/* binding */ gray),\n/* harmony export */ "Uc": () => (/* binding */ hcl),\n/* harmony export */ "ZP": () => (/* binding */ lab),\n/* harmony export */ "tW": () => (/* binding */ lch)\n/* harmony export */ });\n/* unused harmony exports Lab, Hcl */\n/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44087);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16372);\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11144);\n\n\n\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_0__/* .Rgb */ .Ss)) o = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__/* .rgbConvert */ .SU)(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(Lab, lab, (0,_define_js__WEBPACK_IMPORTED_MODULE_1__/* .extend */ .l)(_color_js__WEBPACK_IMPORTED_MODULE_0__/* .Color */ .Il, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new _color_js__WEBPACK_IMPORTED_MODULE_0__/* .Rgb */ .Ss(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * _math_js__WEBPACK_IMPORTED_MODULE_2__/* .rad2deg */ .B;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * _math_js__WEBPACK_IMPORTED_MODULE_2__/* .deg2rad */ .V;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\n(0,_define_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(Hcl, hcl, (0,_define_js__WEBPACK_IMPORTED_MODULE_1__/* .extend */ .l)(_color_js__WEBPACK_IMPORTED_MODULE_0__/* .Color */ .Il, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODAyNDEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUEyQztBQUNPO0FBQ1A7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0RBQUcsT0FBTywrREFBVTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFZTtBQUNmO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtEQUFNLFdBQVcsMkRBQU0sQ0FBQyxzREFBSztBQUM3QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9EQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHNEQUFPO0FBQ3hDO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixzREFBTztBQUN2QjtBQUNBOztBQUVBLCtEQUFNLFdBQVcsMkRBQU0sQ0FBQyxzREFBSztBQUM3QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzPzA1YjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxudmFyIEsgPSAxOCxcbiAgICBYbiA9IDAuOTY0MjIsXG4gICAgWW4gPSAxLFxuICAgIFpuID0gMC44MjUyMSxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxO1xuXG5mdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gaGNsMmxhYihvKTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgciA9IHJnYjJscmdiKG8uciksXG4gICAgICBnID0gcmdiMmxyZ2Ioby5nKSxcbiAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxuICAgICAgeSA9IHh5ejJsYWIoKDAuMjIyNTA0NSAqIHIgKyAwLjcxNjg3ODYgKiBnICsgMC4wNjA2MTY5ICogYikgLyBZbiksIHgsIHo7XG4gIGlmIChyID09PSBnICYmIGcgPT09IGIpIHggPSB6ID0geTsgZWxzZSB7XG4gICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XG4gICAgeiA9IHh5ejJsYWIoKDAuMDEzOTMyMiAqIHIgKyAwLjA5NzEwNDUgKiBnICsgMC43MTQxNzMzICogYikgLyBabik7XG4gIH1cbiAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JheShsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBuZXcgTGFiKGwsIDAsIDAsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeSA9ICh0aGlzLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTih0aGlzLmEpID8geSA6IHkgKyB0aGlzLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHogPSBabiAqIGxhYjJ4eXooeik7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBscmdiMnJnYiggMy4xMzM4NTYxICogeCAtIDEuNjE2ODY2NyAqIHkgLSAwLjQ5MDYxNDYgKiB6KSxcbiAgICAgIGxyZ2IycmdiKC0wLjk3ODc2ODQgKiB4ICsgMS45MTYxNDE1ICogeSArIDAuMDMzNDU0MCAqIHopLFxuICAgICAgbHJnYjJyZ2IoIDAuMDcxOTQ1MyAqIHggLSAwLjIyODk5MTQgKiB5ICsgMS40MDUyNDI3ICogeiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIHh5ejJsYWIodCkge1xuICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodCkge1xuICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbn1cblxuZnVuY3Rpb24gbHJnYjJyZ2IoeCkge1xuICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbn1cblxuZnVuY3Rpb24gcmdiMmxyZ2IoeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIGlmIChvLmEgPT09IDAgJiYgby5iID09PSAwKSByZXR1cm4gbmV3IEhjbChOYU4sIDAgPCBvLmwgJiYgby5sIDwgMTAwID8gMCA6IE5hTiwgby5sLCBvLm9wYWNpdHkpO1xuICB2YXIgaCA9IE1hdGguYXRhbjIoby5iLCBvLmEpICogcmFkMmRlZztcbiAgcmV0dXJuIG5ldyBIY2woaCA8IDAgPyBoICsgMzYwIDogaCwgTWF0aC5zcXJ0KG8uYSAqIG8uYSArIG8uYiAqIG8uYiksIG8ubCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxjaChsLCBjLCBoLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChsKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5jID0gK2M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZnVuY3Rpb24gaGNsMmxhYihvKSB7XG4gIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gby5oICogZGVnMnJhZDtcbiAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhjbDJsYWIodGhpcykucmdiKCk7XG4gIH1cbn0pKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80241\n')},11144:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "B": () => (/* binding */ rad2deg),\n/* harmony export */ "V": () => (/* binding */ deg2rad)\n/* harmony export */ });\nvar deg2rad = Math.PI / 180;\nvar rad2deg = 180 / Math.PI;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTExNDQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanM/MThmMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IHZhciByYWQyZGVnID0gMTgwIC8gTWF0aC5QSTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11144\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-contour.1bd42bf9430cda49.bundle.js b/assets/demo/site/npm.d3-contour.1bd42bf9430cda49.bundle.js
new file mode 100644
index 00000000..4178e709
--- /dev/null
+++ b/assets/demo/site/npm.d3-contour.1bd42bf9430cda49.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[6760],{95538:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "_": () => (/* reexport */ density),\n "V": () => (/* reexport */ contours)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-array/src/index.js + 31 modules\nvar src = __webpack_require__(33016);\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/array.js\nvar array = Array.prototype;\n\nvar slice = array.slice;\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/ascending.js\n/* harmony default export */ function ascending(a, b) {\n return a - b;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/area.js\n/* harmony default export */ function src_area(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/contains.js\n/* harmony default export */ function contains(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/noop.js\n/* harmony default export */ function noop() {}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/contours.js\n\n\n\n\n\n\n\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\n/* harmony default export */ function contours() {\n var dx = 1,\n dy = 1,\n threshold = src/* thresholdSturges */._X,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = (0,src/* extent */.We)(values), start = domain[0], stop = domain[1];\n tz = (0,src/* tickStep */.ly)(start, stop, tz);\n tz = (0,src/* range */.w6)(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (src_area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: "MultiPolygon",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/blur.js\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/density.js\n\n\n\n\n\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\n/* harmony default export */ function density() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = (0,src/* max */.Fp)(values0);\n tz = (0,src/* tickStep */.ly)(0, stop, tz);\n tz = (0,src/* range */.w6)(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === "function" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error("invalid cell size");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-contour/src/index.js\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU1MzguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUVPOzs7QUNGUCw2QkFBZSxtQkFBUztBQUN4QjtBQUNBOzs7QUNGQSw2QkFBZSxrQkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7O0FDSkEsNkJBQWUsa0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBLDZCQUFlLGtCQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEMsT0FBTztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FDMUJBLDZCQUFlLGdCQUFXOzs7QUNBeUM7QUFDckM7QUFDTTtBQUNWO0FBQ1E7QUFDQTtBQUNSOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0JBQVc7QUFDMUI7QUFDQTtBQUNBLGtCQUFrQiw0QkFBZ0I7QUFDbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFNO0FBQ3pCLFdBQVcsd0JBQVE7QUFDbkIsV0FBVyxxQkFBSztBQUNoQixNQUFNO0FBQ04sMkJBQTJCLFNBQVM7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLFFBQUk7QUFDZDtBQUNBLEtBQUs7O0FBRUw7QUFDQSxvREFBb0QsT0FBTztBQUMzRCxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWiwrREFBK0Q7QUFDL0Q7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLCtEQUErRDtBQUMvRDtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixpRUFBaUU7QUFDakU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0RkFBNEYsUUFBUSxDQUFDLFVBQVUsT0FBTyxRQUFRO0FBQzlIOztBQUVBO0FBQ0EsMkRBQTJELElBQUk7QUFDL0Q7O0FBRUE7QUFDQTs7O0FDMU1BO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekIsNEJBQTRCLFdBQVc7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekIsNEJBQTRCLFdBQVc7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxQzhDO0FBQ2hCO0FBQ007QUFDRjtBQUNBOztBQUVsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxtQkFBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFROztBQUUxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsSUFBSSxLQUFLLEVBQUUsbUNBQW1DLEdBQUcsbUNBQW1DO0FBQ3BGLElBQUksS0FBSyxFQUFFLG1DQUFtQyxHQUFHLG1DQUFtQztBQUNwRixJQUFJLEtBQUssRUFBRSxtQ0FBbUMsR0FBRyxtQ0FBbUM7QUFDcEYsSUFBSSxLQUFLLEVBQUUsbUNBQW1DLEdBQUcsbUNBQW1DO0FBQ3BGLElBQUksS0FBSyxFQUFFLG1DQUFtQyxHQUFHLG1DQUFtQztBQUNwRixJQUFJLEtBQUssRUFBRSxtQ0FBbUMsR0FBRyxtQ0FBbUM7O0FBRXBGOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQUc7QUFDcEIsV0FBVyx3QkFBUTtBQUNuQixXQUFXLHFCQUFLO0FBQ2hCO0FBQ0E7O0FBRUEsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpRUFBaUUsUUFBUTtBQUN6RTs7QUFFQTtBQUNBLGlFQUFpRSxRQUFRO0FBQ3pFOztBQUVBO0FBQ0Esc0VBQXNFLFFBQVE7QUFDOUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0RkFBNEYsUUFBUSxDQUFDLFVBQVUsT0FBTyxRQUFRO0FBQzlIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FDcEkrQztBQUNLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FycmF5LmpzPzdiZmIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FzY2VuZGluZy5qcz9kODkzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcmVhLmpzPzRjOTQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnN0YW50LmpzP2ZkOWMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnRhaW5zLmpzPzUzODEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL25vb3AuanM/ZDhiNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanM/ZDJkOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvYmx1ci5qcz9iOTU4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9kZW5zaXR5LmpzP2YxZDMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2luZGV4LmpzPzRmZTEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJpbmcpIHtcbiAgdmFyIGkgPSAwLCBuID0gcmluZy5sZW5ndGgsIGFyZWEgPSByaW5nW24gLSAxXVsxXSAqIHJpbmdbMF1bMF0gLSByaW5nW24gLSAxXVswXSAqIHJpbmdbMF1bMV07XG4gIHdoaWxlICgrK2kgPCBuKSBhcmVhICs9IHJpbmdbaSAtIDFdWzFdICogcmluZ1tpXVswXSAtIHJpbmdbaSAtIDFdWzBdICogcmluZ1tpXVsxXTtcbiAgcmV0dXJuIGFyZWE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJpbmcsIGhvbGUpIHtcbiAgdmFyIGkgPSAtMSwgbiA9IGhvbGUubGVuZ3RoLCBjO1xuICB3aGlsZSAoKytpIDwgbikgaWYgKGMgPSByaW5nQ29udGFpbnMocmluZywgaG9sZVtpXSkpIHJldHVybiBjO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gcmluZ0NvbnRhaW5zKHJpbmcsIHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnRbMF0sIHkgPSBwb2ludFsxXSwgY29udGFpbnMgPSAtMTtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSByaW5nLmxlbmd0aCwgaiA9IG4gLSAxOyBpIDwgbjsgaiA9IGkrKykge1xuICAgIHZhciBwaSA9IHJpbmdbaV0sIHhpID0gcGlbMF0sIHlpID0gcGlbMV0sIHBqID0gcmluZ1tqXSwgeGogPSBwalswXSwgeWogPSBwalsxXTtcbiAgICBpZiAoc2VnbWVudENvbnRhaW5zKHBpLCBwaiwgcG9pbnQpKSByZXR1cm4gMDtcbiAgICBpZiAoKCh5aSA+IHkpICE9PSAoeWogPiB5KSkgJiYgKCh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSkpKSBjb250YWlucyA9IC1jb250YWlucztcbiAgfVxuICByZXR1cm4gY29udGFpbnM7XG59XG5cbmZ1bmN0aW9uIHNlZ21lbnRDb250YWlucyhhLCBiLCBjKSB7XG4gIHZhciBpOyByZXR1cm4gY29sbGluZWFyKGEsIGIsIGMpICYmIHdpdGhpbihhW2kgPSArKGFbMF0gPT09IGJbMF0pXSwgY1tpXSwgYltpXSk7XG59XG5cbmZ1bmN0aW9uIGNvbGxpbmVhcihhLCBiLCBjKSB7XG4gIHJldHVybiAoYlswXSAtIGFbMF0pICogKGNbMV0gLSBhWzFdKSA9PT0gKGNbMF0gLSBhWzBdKSAqIChiWzFdIC0gYVsxXSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhpbihwLCBxLCByKSB7XG4gIHJldHVybiBwIDw9IHEgJiYgcSA8PSByIHx8IHIgPD0gcSAmJiBxIDw9IHA7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHt9XG4iLCJpbXBvcnQge2V4dGVudCwgdGhyZXNob2xkU3R1cmdlcywgdGlja1N0ZXAsIHJhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuaW1wb3J0IGFyZWEgZnJvbSBcIi4vYXJlYVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3BcIjtcblxudmFyIGNhc2VzID0gW1xuICBbXSxcbiAgW1tbMS4wLCAxLjVdLCBbMC41LCAxLjBdXV0sXG4gIFtbWzEuNSwgMS4wXSwgWzEuMCwgMS41XV1dLFxuICBbW1sxLjUsIDEuMF0sIFswLjUsIDEuMF1dXSxcbiAgW1tbMS4wLCAwLjVdLCBbMS41LCAxLjBdXV0sXG4gIFtbWzEuMCwgMS41XSwgWzAuNSwgMS4wXV0sIFtbMS4wLCAwLjVdLCBbMS41LCAxLjBdXV0sXG4gIFtbWzEuMCwgMC41XSwgWzEuMCwgMS41XV1dLFxuICBbW1sxLjAsIDAuNV0sIFswLjUsIDEuMF1dXSxcbiAgW1tbMC41LCAxLjBdLCBbMS4wLCAwLjVdXV0sXG4gIFtbWzEuMCwgMS41XSwgWzEuMCwgMC41XV1dLFxuICBbW1swLjUsIDEuMF0sIFsxLjAsIDAuNV1dLCBbWzEuNSwgMS4wXSwgWzEuMCwgMS41XV1dLFxuICBbW1sxLjUsIDEuMF0sIFsxLjAsIDAuNV1dXSxcbiAgW1tbMC41LCAxLjBdLCBbMS41LCAxLjBdXV0sXG4gIFtbWzEuMCwgMS41XSwgWzEuNSwgMS4wXV1dLFxuICBbW1swLjUsIDEuMF0sIFsxLjAsIDEuNV1dXSxcbiAgW11cbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkU3R1cmdlcyxcbiAgICAgIHNtb290aCA9IHNtb290aExpbmVhcjtcblxuICBmdW5jdGlvbiBjb250b3Vycyh2YWx1ZXMpIHtcbiAgICB2YXIgdHogPSB0aHJlc2hvbGQodmFsdWVzKTtcblxuICAgIC8vIENvbnZlcnQgbnVtYmVyIG9mIHRocmVzaG9sZHMgaW50byB1bmlmb3JtIHRocmVzaG9sZHMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR6KSkge1xuICAgICAgdmFyIGRvbWFpbiA9IGV4dGVudCh2YWx1ZXMpLCBzdGFydCA9IGRvbWFpblswXSwgc3RvcCA9IGRvbWFpblsxXTtcbiAgICAgIHR6ID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIHR6KTtcbiAgICAgIHR6ID0gcmFuZ2UoTWF0aC5mbG9vcihzdGFydCAvIHR6KSAqIHR6LCBNYXRoLmZsb29yKHN0b3AgLyB0eikgKiB0eiwgdHopO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eiA9IHR6LnNsaWNlKCkuc29ydChhc2NlbmRpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiB0ei5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBjb250b3VyKHZhbHVlcywgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQWNjdW11bGF0ZSwgc21vb3RoIGNvbnRvdXIgcmluZ3MsIGFzc2lnbiBob2xlcyB0byBleHRlcmlvciByaW5ncy5cbiAgLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21ib3N0b2NrL3NoYXBlZmlsZS9ibG9iL3YwLjYuMi9zaHAvcG9seWdvbi5qc1xuICBmdW5jdGlvbiBjb250b3VyKHZhbHVlcywgdmFsdWUpIHtcbiAgICB2YXIgcG9seWdvbnMgPSBbXSxcbiAgICAgICAgaG9sZXMgPSBbXTtcblxuICAgIGlzb3JpbmdzKHZhbHVlcywgdmFsdWUsIGZ1bmN0aW9uKHJpbmcpIHtcbiAgICAgIHNtb290aChyaW5nLCB2YWx1ZXMsIHZhbHVlKTtcbiAgICAgIGlmIChhcmVhKHJpbmcpID4gMCkgcG9seWdvbnMucHVzaChbcmluZ10pO1xuICAgICAgZWxzZSBob2xlcy5wdXNoKHJpbmcpO1xuICAgIH0pO1xuXG4gICAgaG9sZXMuZm9yRWFjaChmdW5jdGlvbihob2xlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb25zLmxlbmd0aCwgcG9seWdvbjsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoY29udGFpbnMoKHBvbHlnb24gPSBwb2x5Z29uc1tpXSlbMF0sIGhvbGUpICE9PSAtMSkge1xuICAgICAgICAgIHBvbHlnb24ucHVzaChob2xlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIk11bHRpUG9seWdvblwiLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgY29vcmRpbmF0ZXM6IHBvbHlnb25zXG4gICAgfTtcbiAgfVxuXG4gIC8vIE1hcmNoaW5nIHNxdWFyZXMgd2l0aCBpc29saW5lcyBzdGl0Y2hlZCBpbnRvIHJpbmdzLlxuICAvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vdG9wb2pzb24vdG9wb2pzb24tY2xpZW50L2Jsb2IvdjMuMC4wL3NyYy9zdGl0Y2guanNcbiAgZnVuY3Rpb24gaXNvcmluZ3ModmFsdWVzLCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgZnJhZ21lbnRCeVN0YXJ0ID0gbmV3IEFycmF5LFxuICAgICAgICBmcmFnbWVudEJ5RW5kID0gbmV3IEFycmF5LFxuICAgICAgICB4LCB5LCB0MCwgdDEsIHQyLCB0MztcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGZpcnN0IHJvdyAoeSA9IC0xLCB0MiA9IHQzID0gMCkuXG4gICAgeCA9IHkgPSAtMTtcbiAgICB0MSA9IHZhbHVlc1swXSA+PSB2YWx1ZTtcbiAgICBjYXNlc1t0MSA8PCAxXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgd2hpbGUgKCsreCA8IGR4IC0gMSkge1xuICAgICAgdDAgPSB0MSwgdDEgPSB2YWx1ZXNbeCArIDFdID49IHZhbHVlO1xuICAgICAgY2FzZXNbdDAgfCB0MSA8PCAxXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgfVxuICAgIGNhc2VzW3QxIDw8IDBdLmZvckVhY2goc3RpdGNoKTtcblxuICAgIC8vIEdlbmVyYWwgY2FzZSBmb3IgdGhlIGludGVybWVkaWF0ZSByb3dzLlxuICAgIHdoaWxlICgrK3kgPCBkeSAtIDEpIHtcbiAgICAgIHggPSAtMTtcbiAgICAgIHQxID0gdmFsdWVzW3kgKiBkeCArIGR4XSA+PSB2YWx1ZTtcbiAgICAgIHQyID0gdmFsdWVzW3kgKiBkeF0gPj0gdmFsdWU7XG4gICAgICBjYXNlc1t0MSA8PCAxIHwgdDIgPDwgMl0uZm9yRWFjaChzdGl0Y2gpO1xuICAgICAgd2hpbGUgKCsreCA8IGR4IC0gMSkge1xuICAgICAgICB0MCA9IHQxLCB0MSA9IHZhbHVlc1t5ICogZHggKyBkeCArIHggKyAxXSA+PSB2YWx1ZTtcbiAgICAgICAgdDMgPSB0MiwgdDIgPSB2YWx1ZXNbeSAqIGR4ICsgeCArIDFdID49IHZhbHVlO1xuICAgICAgICBjYXNlc1t0MCB8IHQxIDw8IDEgfCB0MiA8PCAyIHwgdDMgPDwgM10uZm9yRWFjaChzdGl0Y2gpO1xuICAgICAgfVxuICAgICAgY2FzZXNbdDEgfCB0MiA8PCAzXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciB0aGUgbGFzdCByb3cgKHkgPSBkeSAtIDEsIHQwID0gdDEgPSAwKS5cbiAgICB4ID0gLTE7XG4gICAgdDIgPSB2YWx1ZXNbeSAqIGR4XSA+PSB2YWx1ZTtcbiAgICBjYXNlc1t0MiA8PCAyXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgd2hpbGUgKCsreCA8IGR4IC0gMSkge1xuICAgICAgdDMgPSB0MiwgdDIgPSB2YWx1ZXNbeSAqIGR4ICsgeCArIDFdID49IHZhbHVlO1xuICAgICAgY2FzZXNbdDIgPDwgMiB8IHQzIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcbiAgICB9XG4gICAgY2FzZXNbdDIgPDwgM10uZm9yRWFjaChzdGl0Y2gpO1xuXG4gICAgZnVuY3Rpb24gc3RpdGNoKGxpbmUpIHtcbiAgICAgIHZhciBzdGFydCA9IFtsaW5lWzBdWzBdICsgeCwgbGluZVswXVsxXSArIHldLFxuICAgICAgICAgIGVuZCA9IFtsaW5lWzFdWzBdICsgeCwgbGluZVsxXVsxXSArIHldLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleChzdGFydCksXG4gICAgICAgICAgZW5kSW5kZXggPSBpbmRleChlbmQpLFxuICAgICAgICAgIGYsIGc7XG4gICAgICBpZiAoZiA9IGZyYWdtZW50QnlFbmRbc3RhcnRJbmRleF0pIHtcbiAgICAgICAgaWYgKGcgPSBmcmFnbWVudEJ5U3RhcnRbZW5kSW5kZXhdKSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlFbmRbZi5lbmRdO1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZy5zdGFydF07XG4gICAgICAgICAgaWYgKGYgPT09IGcpIHtcbiAgICAgICAgICAgIGYucmluZy5wdXNoKGVuZCk7XG4gICAgICAgICAgICBjYWxsYmFjayhmLnJpbmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF0gPSBmcmFnbWVudEJ5RW5kW2cuZW5kXSA9IHtzdGFydDogZi5zdGFydCwgZW5kOiBnLmVuZCwgcmluZzogZi5yaW5nLmNvbmNhdChnLnJpbmcpfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlFbmRbZi5lbmRdO1xuICAgICAgICAgIGYucmluZy5wdXNoKGVuZCk7XG4gICAgICAgICAgZnJhZ21lbnRCeUVuZFtmLmVuZCA9IGVuZEluZGV4XSA9IGY7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZiA9IGZyYWdtZW50QnlTdGFydFtlbmRJbmRleF0pIHtcbiAgICAgICAgaWYgKGcgPSBmcmFnbWVudEJ5RW5kW3N0YXJ0SW5kZXhdKSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XTtcbiAgICAgICAgICBkZWxldGUgZnJhZ21lbnRCeUVuZFtnLmVuZF07XG4gICAgICAgICAgaWYgKGYgPT09IGcpIHtcbiAgICAgICAgICAgIGYucmluZy5wdXNoKGVuZCk7XG4gICAgICAgICAgICBjYWxsYmFjayhmLnJpbmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmFnbWVudEJ5U3RhcnRbZy5zdGFydF0gPSBmcmFnbWVudEJ5RW5kW2YuZW5kXSA9IHtzdGFydDogZy5zdGFydCwgZW5kOiBmLmVuZCwgcmluZzogZy5yaW5nLmNvbmNhdChmLnJpbmcpfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0XTtcbiAgICAgICAgICBmLnJpbmcudW5zaGlmdChzdGFydCk7XG4gICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnQgPSBzdGFydEluZGV4XSA9IGY7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYWdtZW50QnlTdGFydFtzdGFydEluZGV4XSA9IGZyYWdtZW50QnlFbmRbZW5kSW5kZXhdID0ge3N0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4LCByaW5nOiBbc3RhcnQsIGVuZF19O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluZGV4KHBvaW50KSB7XG4gICAgcmV0dXJuIHBvaW50WzBdICogMiArIHBvaW50WzFdICogKGR4ICsgMSkgKiA0O1xuICB9XG5cbiAgZnVuY3Rpb24gc21vb3RoTGluZWFyKHJpbmcsIHZhbHVlcywgdmFsdWUpIHtcbiAgICByaW5nLmZvckVhY2goZnVuY3Rpb24ocG9pbnQpIHtcbiAgICAgIHZhciB4ID0gcG9pbnRbMF0sXG4gICAgICAgICAgeSA9IHBvaW50WzFdLFxuICAgICAgICAgIHh0ID0geCB8IDAsXG4gICAgICAgICAgeXQgPSB5IHwgMCxcbiAgICAgICAgICB2MCxcbiAgICAgICAgICB2MSA9IHZhbHVlc1t5dCAqIGR4ICsgeHRdO1xuICAgICAgaWYgKHggPiAwICYmIHggPCBkeCAmJiB4dCA9PT0geCkge1xuICAgICAgICB2MCA9IHZhbHVlc1t5dCAqIGR4ICsgeHQgLSAxXTtcbiAgICAgICAgcG9pbnRbMF0gPSB4ICsgKHZhbHVlIC0gdjApIC8gKHYxIC0gdjApIC0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKHkgPiAwICYmIHkgPCBkeSAmJiB5dCA9PT0geSkge1xuICAgICAgICB2MCA9IHZhbHVlc1soeXQgLSAxKSAqIGR4ICsgeHRdO1xuICAgICAgICBwb2ludFsxXSA9IHkgKyAodmFsdWUgLSB2MCkgLyAodjEgLSB2MCkgLSAwLjU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb250b3Vycy5jb250b3VyID0gY29udG91cjtcblxuICBjb250b3Vycy5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIHZhciBfMCA9IE1hdGguY2VpbChfWzBdKSwgXzEgPSBNYXRoLmNlaWwoX1sxXSk7XG4gICAgaWYgKCEoXzAgPiAwKSB8fCAhKF8xID4gMCkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2l6ZVwiKTtcbiAgICByZXR1cm4gZHggPSBfMCwgZHkgPSBfMSwgY29udG91cnM7XG4gIH07XG5cbiAgY29udG91cnMudGhyZXNob2xkcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aHJlc2hvbGQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IEFycmF5LmlzQXJyYXkoXykgPyBjb25zdGFudChzbGljZS5jYWxsKF8pKSA6IGNvbnN0YW50KF8pLCBjb250b3VycykgOiB0aHJlc2hvbGQ7XG4gIH07XG5cbiAgY29udG91cnMuc21vb3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNtb290aCA9IF8gPyBzbW9vdGhMaW5lYXIgOiBub29wLCBjb250b3VycykgOiBzbW9vdGggPT09IHNtb290aExpbmVhcjtcbiAgfTtcblxuICByZXR1cm4gY29udG91cnM7XG59XG4iLCIvLyBUT0RPIE9wdGltaXplIGVkZ2UgY2FzZXMuXG4vLyBUT0RPIE9wdGltaXplIGluZGV4IGNhbGN1bGF0aW9uLlxuLy8gVE9ETyBPcHRpbWl6ZSBhcmd1bWVudHMuXG5leHBvcnQgZnVuY3Rpb24gYmx1clgoc291cmNlLCB0YXJnZXQsIHIpIHtcbiAgdmFyIG4gPSBzb3VyY2Uud2lkdGgsXG4gICAgICBtID0gc291cmNlLmhlaWdodCxcbiAgICAgIHcgPSAociA8PCAxKSArIDE7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHNyID0gMDsgaSA8IG4gKyByOyArK2kpIHtcbiAgICAgIGlmIChpIDwgbikge1xuICAgICAgICBzciArPSBzb3VyY2UuZGF0YVtpICsgaiAqIG5dO1xuICAgICAgfVxuICAgICAgaWYgKGkgPj0gcikge1xuICAgICAgICBpZiAoaSA+PSB3KSB7XG4gICAgICAgICAgc3IgLT0gc291cmNlLmRhdGFbaSAtIHcgKyBqICogbl07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LmRhdGFbaSAtIHIgKyBqICogbl0gPSBzciAvIE1hdGgubWluKGkgKyAxLCBuIC0gMSArIHcgLSBpLCB3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETyBPcHRpbWl6ZSBlZGdlIGNhc2VzLlxuLy8gVE9ETyBPcHRpbWl6ZSBpbmRleCBjYWxjdWxhdGlvbi5cbi8vIFRPRE8gT3B0aW1pemUgYXJndW1lbnRzLlxuZXhwb3J0IGZ1bmN0aW9uIGJsdXJZKHNvdXJjZSwgdGFyZ2V0LCByKSB7XG4gIHZhciBuID0gc291cmNlLndpZHRoLFxuICAgICAgbSA9IHNvdXJjZS5oZWlnaHQsXG4gICAgICB3ID0gKHIgPDwgMSkgKyAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGZvciAodmFyIGogPSAwLCBzciA9IDA7IGogPCBtICsgcjsgKytqKSB7XG4gICAgICBpZiAoaiA8IG0pIHtcbiAgICAgICAgc3IgKz0gc291cmNlLmRhdGFbaSArIGogKiBuXTtcbiAgICAgIH1cbiAgICAgIGlmIChqID49IHIpIHtcbiAgICAgICAgaWYgKGogPj0gdykge1xuICAgICAgICAgIHNyIC09IHNvdXJjZS5kYXRhW2kgKyAoaiAtIHcpICogbl07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LmRhdGFbaSArIChqIC0gcikgKiBuXSA9IHNyIC8gTWF0aC5taW4oaiArIDEsIG0gLSAxICsgdyAtIGosIHcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHttYXgsIHJhbmdlLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtibHVyWCwgYmx1cll9IGZyb20gXCIuL2JsdXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGNvbnRvdXJzIGZyb20gXCIuL2NvbnRvdXJzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXZWlnaHQoKSB7XG4gIHJldHVybiAxO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBkZWZhdWx0WCxcbiAgICAgIHkgPSBkZWZhdWx0WSxcbiAgICAgIHdlaWdodCA9IGRlZmF1bHRXZWlnaHQsXG4gICAgICBkeCA9IDk2MCxcbiAgICAgIGR5ID0gNTAwLFxuICAgICAgciA9IDIwLCAvLyBibHVyIHJhZGl1c1xuICAgICAgayA9IDIsIC8vIGxvZzIoZ3JpZCBjZWxsIHNpemUpXG4gICAgICBvID0gciAqIDMsIC8vIGdyaWQgb2Zmc2V0LCB0byBwYWQgZm9yIGJsdXJcbiAgICAgIG4gPSAoZHggKyBvICogMikgPj4gaywgLy8gZ3JpZCB3aWR0aFxuICAgICAgbSA9IChkeSArIG8gKiAyKSA+PiBrLCAvLyBncmlkIGhlaWdodFxuICAgICAgdGhyZXNob2xkID0gY29uc3RhbnQoMjApO1xuXG4gIGZ1bmN0aW9uIGRlbnNpdHkoZGF0YSkge1xuICAgIHZhciB2YWx1ZXMwID0gbmV3IEZsb2F0MzJBcnJheShuICogbSksXG4gICAgICAgIHZhbHVlczEgPSBuZXcgRmxvYXQzMkFycmF5KG4gKiBtKTtcblxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkLCBpLCBkYXRhKSB7XG4gICAgICB2YXIgeGkgPSAoK3goZCwgaSwgZGF0YSkgKyBvKSA+PiBrLFxuICAgICAgICAgIHlpID0gKCt5KGQsIGksIGRhdGEpICsgbykgPj4gayxcbiAgICAgICAgICB3aSA9ICt3ZWlnaHQoZCwgaSwgZGF0YSk7XG4gICAgICBpZiAoeGkgPj0gMCAmJiB4aSA8IG4gJiYgeWkgPj0gMCAmJiB5aSA8IG0pIHtcbiAgICAgICAgdmFsdWVzMFt4aSArIHlpICogbl0gKz0gd2k7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIE9wdGltaXplLlxuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuXG4gICAgdmFyIHR6ID0gdGhyZXNob2xkKHZhbHVlczApO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB2YXIgc3RvcCA9IG1heCh2YWx1ZXMwKTtcbiAgICAgIHR6ID0gdGlja1N0ZXAoMCwgc3RvcCwgdHopO1xuICAgICAgdHogPSByYW5nZSgwLCBNYXRoLmZsb29yKHN0b3AgLyB0eikgKiB0eiwgdHopO1xuICAgICAgdHouc2hpZnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udG91cnMoKVxuICAgICAgICAudGhyZXNob2xkcyh0eilcbiAgICAgICAgLnNpemUoW24sIG1dKVxuICAgICAgKHZhbHVlczApXG4gICAgICAgIC5tYXAodHJhbnNmb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybShnZW9tZXRyeSkge1xuICAgIGdlb21ldHJ5LnZhbHVlICo9IE1hdGgucG93KDIsIC0yICogayk7IC8vIERlbnNpdHkgaW4gcG9pbnRzIHBlciBzcXVhcmUgcGl4ZWwuXG4gICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1Qb2x5Z29uKTtcbiAgICByZXR1cm4gZ2VvbWV0cnk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Qb2x5Z29uKGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1SaW5nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVJpbmcoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybVBvaW50KTtcbiAgfVxuXG4gIC8vIFRPRE8gT3B0aW1pemUuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXNbMF0gPSBjb29yZGluYXRlc1swXSAqIE1hdGgucG93KDIsIGspIC0gbztcbiAgICBjb29yZGluYXRlc1sxXSA9IGNvb3JkaW5hdGVzWzFdICogTWF0aC5wb3coMiwgaykgLSBvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgIG8gPSByICogMztcbiAgICBuID0gKGR4ICsgbyAqIDIpID4+IGs7XG4gICAgbSA9IChkeSArIG8gKiAyKSA+PiBrO1xuICAgIHJldHVybiBkZW5zaXR5O1xuICB9XG5cbiAgZGVuc2l0eS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB4O1xuICB9O1xuXG4gIGRlbnNpdHkueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGRlbnNpdHkpIDogeTtcbiAgfTtcblxuICBkZW5zaXR5LndlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3ZWlnaHQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB3ZWlnaHQ7XG4gIH07XG5cbiAgZGVuc2l0eS5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIHZhciBfMCA9IE1hdGguY2VpbChfWzBdKSwgXzEgPSBNYXRoLmNlaWwoX1sxXSk7XG4gICAgaWYgKCEoXzAgPj0gMCkgJiYgIShfMCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaXplXCIpO1xuICAgIHJldHVybiBkeCA9IF8wLCBkeSA9IF8xLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LmNlbGxTaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIDEgPDwgaztcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAxKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjZWxsIHNpemVcIik7XG4gICAgcmV0dXJuIGsgPSBNYXRoLmZsb29yKE1hdGgubG9nKF8pIC8gTWF0aC5MTjIpLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgZGVuc2l0eSkgOiB0aHJlc2hvbGQ7XG4gIH07XG5cbiAgZGVuc2l0eS5iYW5kd2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KHIgKiAociArIDEpKTtcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBiYW5kd2lkdGhcIik7XG4gICAgcmV0dXJuIHIgPSBNYXRoLnJvdW5kKChNYXRoLnNxcnQoNCAqIF8gKiBfICsgMSkgLSAxKSAvIDIpLCByZXNpemUoKTtcbiAgfTtcblxuICByZXR1cm4gZGVuc2l0eTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjb250b3Vyc30gZnJvbSBcIi4vY29udG91cnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjb250b3VyRGVuc2l0eX0gZnJvbSBcIi4vZGVuc2l0eVwiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95538\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-dispatch.20e9b1869f93d6cd.bundle.js b/assets/demo/site/npm.d3-dispatch.20e9b1869f93d6cd.bundle.js
new file mode 100644
index 00000000..a8456fc2
--- /dev/null
+++ b/assets/demo/site/npm.d3-dispatch.20e9b1869f93d6cd.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[7869],{92626:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + "") || (t in _) || /[\\s.]/.test(t)) throw new Error("illegal type: " + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = "", i = t.indexOf(".");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + "", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dispatch);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI2MjYuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsWUFBWTs7QUFFWjtBQUNBLDhDQUE4QyxLQUFLLE9BQU87QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtRkFBbUYsT0FBTztBQUMxRjtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZELEdBQUc7QUFDSDtBQUNBO0FBQ0Esb0RBQW9ELE9BQU87QUFDM0Q7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0QjtBQUMvRDtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanM/YjI5OSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbm9vcCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSB8fCAvW1xccy5dLy50ZXN0KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///92626\n')},88258:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "W": () => (/* reexport safe */ _dispatch_js__WEBPACK_IMPORTED_MODULE_0__.Z)\n/* harmony export */ });\n/* harmony import */ var _dispatch_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92626);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgyNTguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFrRCIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvaW5kZXguanM/ZTcyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgZGlzcGF0Y2h9IGZyb20gXCIuL2Rpc3BhdGNoLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///88258\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-drag.f747e2b164dcbb78.bundle.js b/assets/demo/site/npm.d3-drag.f747e2b164dcbb78.bundle.js
new file mode 100644
index 00000000..287272f0
--- /dev/null
+++ b/assets/demo/site/npm.d3-drag.f747e2b164dcbb78.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[8187],{96700:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "oh": () => (/* reexport */ drag),\n "Kn": () => (/* reexport */ nodrag/* default */.Z),\n "eF": () => (/* reexport */ nodrag/* yesdrag */.D)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar dispatch = __webpack_require__(92626);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/on.js\nvar on = __webpack_require__(25109);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/mouse.js\nvar mouse = __webpack_require__(43095);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/select.js\nvar src_select = __webpack_require__(94017);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/touch.js\nvar touch = __webpack_require__(24793);\n// EXTERNAL MODULE: ./node_modules/d3-drag/src/nodrag.js\nvar nodrag = __webpack_require__(10072);\n// EXTERNAL MODULE: ./node_modules/d3-drag/src/noevent.js\nvar noevent = __webpack_require__(34299);\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/event.js\nfunction DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/drag.js\n\n\n\n\n\n\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !on/* event.ctrlKey */.B.ctrlKey && !on/* event.button */.B.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: on/* event.x */.B.x, y: on/* event.y */.B.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || ("ontouchstart" in this);\n}\n\n/* harmony default export */ function drag() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = (0,dispatch/* default */.Z)("start", "drag", "end"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on("mousedown.drag", mousedowned)\n .filter(touchable)\n .on("touchstart.drag", touchstarted)\n .on("touchmove.drag", touchmoved)\n .on("touchend.drag touchcancel.drag", touchended)\n .style("touch-action", "none")\n .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart("mouse", container.apply(this, arguments), mouse/* default */.Z, this, arguments);\n if (!gesture) return;\n (0,src_select/* default */.Z)(on/* event.view */.B.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);\n (0,nodrag/* default */.Z)(on/* event.view */.B.view);\n (0,noevent/* nopropagation */.r)();\n mousemoving = false;\n mousedownx = on/* event.clientX */.B.clientX;\n mousedowny = on/* event.clientY */.B.clientY;\n gesture("start");\n }\n\n function mousemoved() {\n (0,noevent/* default */.Z)();\n if (!mousemoving) {\n var dx = on/* event.clientX */.B.clientX - mousedownx, dy = on/* event.clientY */.B.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse("drag");\n }\n\n function mouseupped() {\n (0,src_select/* default */.Z)(on/* event.view */.B.view).on("mousemove.drag mouseup.drag", null);\n (0,nodrag/* yesdrag */.D)(on/* event.view */.B.view, mousemoving);\n (0,noevent/* default */.Z)();\n gestures.mouse("end");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = on/* event.changedTouches */.B.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch/* default */.Z, this, arguments)) {\n (0,noevent/* nopropagation */.r)();\n gesture("start");\n }\n }\n }\n\n function touchmoved() {\n var touches = on/* event.changedTouches */.B.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n (0,noevent/* default */.Z)();\n gesture("drag");\n }\n }\n }\n\n function touchended() {\n var touches = on/* event.changedTouches */.B.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n (0,noevent/* nopropagation */.r)();\n gesture("end");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!(0,on/* customEvent */._H)(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((on/* event.subject */.B.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case "start": gestures[id] = gesture, n = active++; break;\n case "end": delete gestures[id], --active; // nobreak\n case "drag": p = point(container, id), n = active; break;\n }\n (0,on/* customEvent */._H)(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === "function" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === "function" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/index.js\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY3MDAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2QkFBZSxrQkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7O0FDSmU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoQnFDO0FBQ2lDO0FBQzFCO0FBQ1E7QUFDZjtBQUNGOztBQUVuQztBQUNBO0FBQ0EsVUFBVSwrQkFBYSxLQUFLLDZCQUFZO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixHQUFHLG1CQUFPLEtBQUssbUJBQU8sRUFBRTtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsZ0JBQVc7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsa0JBQWtCLDJCQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUVBQXlFLG9CQUFLO0FBQzlFO0FBQ0EsSUFBSSw2QkFBTSxDQUFDLHlCQUFVO0FBQ3JCLElBQUkseUJBQU0sQ0FBQyx5QkFBVTtBQUNyQixJQUFJLGdDQUFhO0FBQ2pCO0FBQ0EsaUJBQWlCLCtCQUFhO0FBQzlCLGlCQUFpQiwrQkFBYTtBQUM5QjtBQUNBOztBQUVBO0FBQ0EsSUFBSSwwQkFBTztBQUNYO0FBQ0EsZUFBZSwrQkFBYSxvQkFBb0IsK0JBQWE7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLDZCQUFNLENBQUMseUJBQVU7QUFDckIsSUFBSSx5QkFBTyxDQUFDLHlCQUFVO0FBQ3RCLElBQUksMEJBQU87QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsNkNBQW9CO0FBQ3RDO0FBQ0E7O0FBRUEsZ0JBQWdCLE9BQU87QUFDdkIsMERBQTBELG9CQUFLO0FBQy9ELFFBQVEsZ0NBQWE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsNkNBQW9CO0FBQ3RDOztBQUVBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0EsUUFBUSwwQkFBTztBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLDZDQUFvQjtBQUN0Qzs7QUFFQTtBQUNBLDBDQUEwQyxxQkFBcUIsUUFBUTtBQUN2RSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBLFFBQVEsZ0NBQWE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsMEJBQVcsS0FBSyxTQUFTO0FBQ2xDLFdBQVcsK0JBQWE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQsbURBQW1EO0FBQ25ELDJEQUEyRDtBQUMzRDtBQUNBLE1BQU0sMEJBQVcsS0FBSyxTQUFTO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0UsUUFBUTtBQUM5RTs7QUFFQTtBQUNBLHlFQUF5RSxRQUFRO0FBQ2pGOztBQUVBO0FBQ0EsdUVBQXVFLFFBQVE7QUFDL0U7O0FBRUE7QUFDQSx5RUFBeUUsUUFBUTtBQUNqRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FDdEswQztBQUNnQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9jb25zdGFudC5qcz8wYjAwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ldmVudC5qcz80NTVmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9kcmFnLmpzP2FlNzMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2luZGV4LmpzPzllMDYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmFnRXZlbnQodGFyZ2V0LCB0eXBlLCBzdWJqZWN0LCBpZCwgYWN0aXZlLCB4LCB5LCBkeCwgZHksIGRpc3BhdGNoKSB7XG4gIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnN1YmplY3QgPSBzdWJqZWN0O1xuICB0aGlzLmlkZW50aWZpZXIgPSBpZDtcbiAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG4gIHRoaXMuZHggPSBkeDtcbiAgdGhpcy5keSA9IGR5O1xuICB0aGlzLl8gPSBkaXNwYXRjaDtcbn1cblxuRHJhZ0V2ZW50LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSB0aGlzLl8ub24uYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgPT09IHRoaXMuXyA/IHRoaXMgOiB2YWx1ZTtcbn07XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZXZlbnQsIGN1c3RvbUV2ZW50LCBzZWxlY3QsIG1vdXNlLCB0b3VjaH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZHJhZywge3llc2RyYWd9IGZyb20gXCIuL25vZHJhZy5qc1wiO1xuaW1wb3J0IG5vZXZlbnQsIHtub3Byb3BhZ2F0aW9ufSBmcm9tIFwiLi9ub2V2ZW50LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBEcmFnRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKCkge1xuICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnRhaW5lcigpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFN1YmplY3QoZCkge1xuICByZXR1cm4gZCA9PSBudWxsID8ge3g6IGV2ZW50LngsIHk6IGV2ZW50Lnl9IDogZDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcixcbiAgICAgIHN1YmplY3QgPSBkZWZhdWx0U3ViamVjdCxcbiAgICAgIHRvdWNoYWJsZSA9IGRlZmF1bHRUb3VjaGFibGUsXG4gICAgICBnZXN0dXJlcyA9IHt9LFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImRyYWdcIiwgXCJlbmRcIiksXG4gICAgICBhY3RpdmUgPSAwLFxuICAgICAgbW91c2Vkb3dueCxcbiAgICAgIG1vdXNlZG93bnksXG4gICAgICBtb3VzZW1vdmluZyxcbiAgICAgIHRvdWNoZW5kaW5nLFxuICAgICAgY2xpY2tEaXN0YW5jZTIgPSAwO1xuXG4gIGZ1bmN0aW9uIGRyYWcoc2VsZWN0aW9uKSB7XG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5kcmFnXCIsIG1vdXNlZG93bmVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuZHJhZ1wiLCB0b3VjaHN0YXJ0ZWQpXG4gICAgICAgIC5vbihcInRvdWNobW92ZS5kcmFnXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZ1wiLCB0b3VjaGVuZGVkKVxuICAgICAgICAuc3R5bGUoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZWRvd25lZCgpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgfHwgIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgdmFyIGdlc3R1cmUgPSBiZWZvcmVzdGFydChcIm1vdXNlXCIsIGNvbnRhaW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBtb3VzZSwgdGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoIWdlc3R1cmUpIHJldHVybjtcbiAgICBzZWxlY3QoZXZlbnQudmlldykub24oXCJtb3VzZW1vdmUuZHJhZ1wiLCBtb3VzZW1vdmVkLCB0cnVlKS5vbihcIm1vdXNldXAuZHJhZ1wiLCBtb3VzZXVwcGVkLCB0cnVlKTtcbiAgICBub2RyYWcoZXZlbnQudmlldyk7XG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIG1vdXNlbW92aW5nID0gZmFsc2U7XG4gICAgbW91c2Vkb3dueCA9IGV2ZW50LmNsaWVudFg7XG4gICAgbW91c2Vkb3dueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgZ2VzdHVyZShcInN0YXJ0XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Vtb3ZlZCgpIHtcbiAgICBub2V2ZW50KCk7XG4gICAgaWYgKCFtb3VzZW1vdmluZykge1xuICAgICAgdmFyIGR4ID0gZXZlbnQuY2xpZW50WCAtIG1vdXNlZG93bngsIGR5ID0gZXZlbnQuY2xpZW50WSAtIG1vdXNlZG93bnk7XG4gICAgICBtb3VzZW1vdmluZyA9IGR4ICogZHggKyBkeSAqIGR5ID4gY2xpY2tEaXN0YW5jZTI7XG4gICAgfVxuICAgIGdlc3R1cmVzLm1vdXNlKFwiZHJhZ1wiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNldXBwZWQoKSB7XG4gICAgc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnXCIsIG51bGwpO1xuICAgIHllc2RyYWcoZXZlbnQudmlldywgbW91c2Vtb3ZpbmcpO1xuICAgIG5vZXZlbnQoKTtcbiAgICBnZXN0dXJlcy5tb3VzZShcImVuZFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZCgpIHtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgYyA9IGNvbnRhaW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGJlZm9yZXN0YXJ0KHRvdWNoZXNbaV0uaWRlbnRpZmllciwgYywgdG91Y2gsIHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgbm9wcm9wYWdhdGlvbigpO1xuICAgICAgICBnZXN0dXJlKFwic3RhcnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZCgpIHtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgbm9ldmVudCgpO1xuICAgICAgICBnZXN0dXJlKFwiZHJhZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKCkge1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcblxuICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChnZXN0dXJlID0gZ2VzdHVyZXNbdG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICAgIGdlc3R1cmUoXCJlbmRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmVmb3Jlc3RhcnQoaWQsIGNvbnRhaW5lciwgcG9pbnQsIHRoYXQsIGFyZ3MpIHtcbiAgICB2YXIgcCA9IHBvaW50KGNvbnRhaW5lciwgaWQpLCBzLCBkeCwgZHksXG4gICAgICAgIHN1Ymxpc3RlbmVycyA9IGxpc3RlbmVycy5jb3B5KCk7XG5cbiAgICBpZiAoIWN1c3RvbUV2ZW50KG5ldyBEcmFnRXZlbnQoZHJhZywgXCJiZWZvcmVzdGFydFwiLCBzLCBpZCwgYWN0aXZlLCBwWzBdLCBwWzFdLCAwLCAwLCBzdWJsaXN0ZW5lcnMpLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgoZXZlbnQuc3ViamVjdCA9IHMgPSBzdWJqZWN0LmFwcGx5KHRoYXQsIGFyZ3MpKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICBkeCA9IHMueCAtIHBbMF0gfHwgMDtcbiAgICAgIGR5ID0gcy55IC0gcFsxXSB8fCAwO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSkpIHJldHVybjtcblxuICAgIHJldHVybiBmdW5jdGlvbiBnZXN0dXJlKHR5cGUpIHtcbiAgICAgIHZhciBwMCA9IHAsIG47XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6IGdlc3R1cmVzW2lkXSA9IGdlc3R1cmUsIG4gPSBhY3RpdmUrKzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbmRcIjogZGVsZXRlIGdlc3R1cmVzW2lkXSwgLS1hY3RpdmU7IC8vIG5vYnJlYWtcbiAgICAgICAgY2FzZSBcImRyYWdcIjogcCA9IHBvaW50KGNvbnRhaW5lciwgaWQpLCBuID0gYWN0aXZlOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGN1c3RvbUV2ZW50KG5ldyBEcmFnRXZlbnQoZHJhZywgdHlwZSwgcywgaWQsIG4sIHBbMF0gKyBkeCwgcFsxXSArIGR5LCBwWzBdIC0gcDBbMF0sIHBbMV0gLSBwMFsxXSwgc3VibGlzdGVuZXJzKSwgc3VibGlzdGVuZXJzLmFwcGx5LCBzdWJsaXN0ZW5lcnMsIFt0eXBlLCB0aGF0LCBhcmdzXSk7XG4gICAgfTtcbiAgfVxuXG4gIGRyYWcuZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgZHJhZykgOiBmaWx0ZXI7XG4gIH07XG5cbiAgZHJhZy5jb250YWluZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29udGFpbmVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgZHJhZykgOiBjb250YWluZXI7XG4gIH07XG5cbiAgZHJhZy5zdWJqZWN0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN1YmplY3QgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBkcmFnKSA6IHN1YmplY3Q7XG4gIH07XG5cbiAgZHJhZy50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBkcmFnKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBkcmFnLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGRyYWcgOiB2YWx1ZTtcbiAgfTtcblxuICBkcmFnLmNsaWNrRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xpY2tEaXN0YW5jZTIgPSAoXyA9ICtfKSAqIF8sIGRyYWcpIDogTWF0aC5zcXJ0KGNsaWNrRGlzdGFuY2UyKTtcbiAgfTtcblxuICByZXR1cm4gZHJhZztcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBkcmFnfSBmcm9tIFwiLi9kcmFnLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZHJhZ0Rpc2FibGUsIHllc2RyYWcgYXMgZHJhZ0VuYWJsZX0gZnJvbSBcIi4vbm9kcmFnLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96700\n')},10072:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "D": () => (/* binding */ yesdrag),\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(94017);\n/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34299);\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(view) {\n var root = view.document.documentElement,\n selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(view).on("dragstart.drag", _noevent_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, true);\n if ("onselectstart" in root) {\n selection.on("selectstart.drag", _noevent_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = "none";\n }\n}\n\nfunction yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(view).on("dragstart.drag", null);\n if (noclick) {\n selection.on("click.drag", _noevent_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, true);\n setTimeout(function() { selection.on("click.drag", null); }, 0);\n }\n if ("onselectstart" in root) {\n selection.on("selectstart.drag", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAwNzIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW9DO0FBQ0Q7O0FBRW5DLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0Esa0JBQWtCLGlFQUFNLDRCQUE0Qiw0REFBTztBQUMzRDtBQUNBLHFDQUFxQyw0REFBTztBQUM1QyxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBLGtCQUFrQixpRUFBTTtBQUN4QjtBQUNBLCtCQUErQiw0REFBTztBQUN0Qyw0QkFBNEIsbUNBQW1DO0FBQy9EO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanM/MTkxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQgZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSBcIm5vbmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgaWYgKG5vY2xpY2spIHtcbiAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10072\n')},34299:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "r": () => (/* binding */ nopropagation)\n/* harmony export */ });\n/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25109);\n\n\nfunction nopropagation() {\n d3_selection__WEBPACK_IMPORTED_MODULE_0__/* .event.stopImmediatePropagation */ .B.stopImmediatePropagation();\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n d3_selection__WEBPACK_IMPORTED_MODULE_0__/* .event.preventDefault */ .B.preventDefault();\n d3_selection__WEBPACK_IMPORTED_MODULE_0__/* .event.stopImmediatePropagation */ .B.stopImmediatePropagation();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQyOTkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBbUM7O0FBRTVCO0FBQ1AsRUFBRSwwR0FBOEI7QUFDaEM7O0FBRUEsNkJBQWUsc0NBQVc7QUFDMUIsRUFBRSxzRkFBb0I7QUFDdEIsRUFBRSwwR0FBOEI7QUFDaEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcz9mZjFiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34299\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-dsv.4cc3e34bed3f8fdf.bundle.js b/assets/demo/site/npm.d3-dsv.4cc3e34bed3f8fdf.bundle.js
new file mode 100644
index 00000000..84c83eb8
--- /dev/null
+++ b/assets/demo/site/npm.d3-dsv.4cc3e34bed3f8fdf.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[9230],{82531:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Bj": () => (/* binding */ csvParseRows),\n/* harmony export */ "Jb": () => (/* binding */ csvFormatRows),\n/* harmony export */ "S": () => (/* binding */ csvFormatBody),\n/* harmony export */ "Sf": () => (/* binding */ csvFormat),\n/* harmony export */ "eX": () => (/* binding */ csvFormatValue),\n/* harmony export */ "fh": () => (/* binding */ csvFormatRow),\n/* harmony export */ "ue": () => (/* binding */ csvParse)\n/* harmony export */ });\n/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42132);\n\n\nvar csv = (0,_dsv_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(",");\n\nvar csvParse = csv.parse;\nvar csvParseRows = csv.parseRows;\nvar csvFormat = csv.format;\nvar csvFormatBody = csv.formatBody;\nvar csvFormatRows = csv.formatRows;\nvar csvFormatRow = csv.formatRow;\nvar csvFormatValue = csv.formatValue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI1MzEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUEyQjs7QUFFM0IsVUFBVSw0REFBRzs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2Nzdi5qcz9jMzRkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2LmpzXCI7XG5cbnZhciBjc3YgPSBkc3YoXCIsXCIpO1xuXG5leHBvcnQgdmFyIGNzdlBhcnNlID0gY3N2LnBhcnNlO1xuZXhwb3J0IHZhciBjc3ZQYXJzZVJvd3MgPSBjc3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXQgPSBjc3YuZm9ybWF0O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRCb2R5ID0gY3N2LmZvcm1hdEJvZHk7XG5leHBvcnQgdmFyIGNzdkZvcm1hdFJvd3MgPSBjc3YuZm9ybWF0Um93cztcbmV4cG9ydCB2YXIgY3N2Rm9ybWF0Um93ID0gY3N2LmZvcm1hdFJvdztcbmV4cG9ydCB2YXIgY3N2Rm9ybWF0VmFsdWUgPSBjc3YuZm9ybWF0VmFsdWU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82531\n')},42132:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function("d", "return {" + columns.map(function(name, i) {\n return JSON.stringify(name) + ": d[" + i + "] || \\"\\"";\n }).join(",") + "}");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + "", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? "-" + pad(-year, 6)\n : year > 9999 ? "+" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? "Invalid Date"\n : formatYear(date.getUTCFullYear(), 4) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)\n + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"\n : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"\n : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"\n : "");\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(delimiter) {\n var reFormat = new RegExp("[\\"" + delimiter + "\\n\\r]"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/""/g, "\\"");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\\n");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join("\\n");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join("\\n");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? ""\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += "") ? "\\"" + value.replace(/"/g, "\\"\\"") + "\\""\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIxMzIuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsWUFBWTtBQUNaLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQSxHQUFHLGdCQUFnQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxZQUFZO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFlBQVk7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9kc3YuanM/MDU4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgRU9MID0ge30sXG4gICAgRU9GID0ge30sXG4gICAgUVVPVEUgPSAzNCxcbiAgICBORVdMSU5FID0gMTAsXG4gICAgUkVUVVJOID0gMTM7XG5cbmZ1bmN0aW9uIG9iamVjdENvbnZlcnRlcihjb2x1bW5zKSB7XG4gIHJldHVybiBuZXcgRnVuY3Rpb24oXCJkXCIsIFwicmV0dXJuIHtcIiArIGNvbHVtbnMubWFwKGZ1bmN0aW9uKG5hbWUsIGkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobmFtZSkgKyBcIjogZFtcIiArIGkgKyBcIl0gfHwgXFxcIlxcXCJcIjtcbiAgfSkuam9pbihcIixcIikgKyBcIn1cIik7XG59XG5cbmZ1bmN0aW9uIGN1c3RvbUNvbnZlcnRlcihjb2x1bW5zLCBmKSB7XG4gIHZhciBvYmplY3QgPSBvYmplY3RDb252ZXJ0ZXIoY29sdW1ucyk7XG4gIHJldHVybiBmdW5jdGlvbihyb3csIGkpIHtcbiAgICByZXR1cm4gZihvYmplY3Qocm93KSwgaSwgY29sdW1ucyk7XG4gIH07XG59XG5cbi8vIENvbXB1dGUgdW5pcXVlIGNvbHVtbnMgaW4gb3JkZXIgb2YgZGlzY292ZXJ5LlxuZnVuY3Rpb24gaW5mZXJDb2x1bW5zKHJvd3MpIHtcbiAgdmFyIGNvbHVtblNldCA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBjb2x1bW5zID0gW107XG5cbiAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdykge1xuICAgIGZvciAodmFyIGNvbHVtbiBpbiByb3cpIHtcbiAgICAgIGlmICghKGNvbHVtbiBpbiBjb2x1bW5TZXQpKSB7XG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW5TZXRbY29sdW1uXSA9IGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29sdW1ucztcbn1cblxuZnVuY3Rpb24gcGFkKHZhbHVlLCB3aWR0aCkge1xuICB2YXIgcyA9IHZhbHVlICsgXCJcIiwgbGVuZ3RoID0gcy5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oMCkgKyBzIDogcztcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyIDwgMCA/IFwiLVwiICsgcGFkKC15ZWFyLCA2KVxuICAgIDogeWVhciA+IDk5OTkgPyBcIitcIiArIHBhZCh5ZWFyLCA2KVxuICAgIDogcGFkKHllYXIsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpLFxuICAgICAgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpLFxuICAgICAgc2Vjb25kcyA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgICAgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgcmV0dXJuIGlzTmFOKGRhdGUpID8gXCJJbnZhbGlkIERhdGVcIlxuICAgICAgOiBmb3JtYXRZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgNCkgKyBcIi1cIiArIHBhZChkYXRlLmdldFVUQ01vbnRoKCkgKyAxLCAyKSArIFwiLVwiICsgcGFkKGRhdGUuZ2V0VVRDRGF0ZSgpLCAyKVxuICAgICAgKyAobWlsbGlzZWNvbmRzID8gXCJUXCIgKyBwYWQoaG91cnMsIDIpICsgXCI6XCIgKyBwYWQobWludXRlcywgMikgKyBcIjpcIiArIHBhZChzZWNvbmRzLCAyKSArIFwiLlwiICsgcGFkKG1pbGxpc2Vjb25kcywgMykgKyBcIlpcIlxuICAgICAgOiBzZWNvbmRzID8gXCJUXCIgKyBwYWQoaG91cnMsIDIpICsgXCI6XCIgKyBwYWQobWludXRlcywgMikgKyBcIjpcIiArIHBhZChzZWNvbmRzLCAyKSArIFwiWlwiXG4gICAgICA6IG1pbnV0ZXMgfHwgaG91cnMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiWlwiXG4gICAgICA6IFwiXCIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWxpbWl0ZXIpIHtcbiAgdmFyIHJlRm9ybWF0ID0gbmV3IFJlZ0V4cChcIltcXFwiXCIgKyBkZWxpbWl0ZXIgKyBcIlxcblxccl1cIiksXG4gICAgICBERUxJTUlURVIgPSBkZWxpbWl0ZXIuY2hhckNvZGVBdCgwKTtcblxuICBmdW5jdGlvbiBwYXJzZSh0ZXh0LCBmKSB7XG4gICAgdmFyIGNvbnZlcnQsIGNvbHVtbnMsIHJvd3MgPSBwYXJzZVJvd3ModGV4dCwgZnVuY3Rpb24ocm93LCBpKSB7XG4gICAgICBpZiAoY29udmVydCkgcmV0dXJuIGNvbnZlcnQocm93LCBpIC0gMSk7XG4gICAgICBjb2x1bW5zID0gcm93LCBjb252ZXJ0ID0gZiA/IGN1c3RvbUNvbnZlcnRlcihyb3csIGYpIDogb2JqZWN0Q29udmVydGVyKHJvdyk7XG4gICAgfSk7XG4gICAgcm93cy5jb2x1bW5zID0gY29sdW1ucyB8fCBbXTtcbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93cyh0ZXh0LCBmKSB7XG4gICAgdmFyIHJvd3MgPSBbXSwgLy8gb3V0cHV0IHJvd3NcbiAgICAgICAgTiA9IHRleHQubGVuZ3RoLFxuICAgICAgICBJID0gMCwgLy8gY3VycmVudCBjaGFyYWN0ZXIgaW5kZXhcbiAgICAgICAgbiA9IDAsIC8vIGN1cnJlbnQgbGluZSBudW1iZXJcbiAgICAgICAgdCwgLy8gY3VycmVudCB0b2tlblxuICAgICAgICBlb2YgPSBOIDw9IDAsIC8vIGN1cnJlbnQgdG9rZW4gZm9sbG93ZWQgYnkgRU9GP1xuICAgICAgICBlb2wgPSBmYWxzZTsgLy8gY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0w/XG5cbiAgICAvLyBTdHJpcCB0aGUgdHJhaWxpbmcgbmV3bGluZS5cbiAgICBpZiAodGV4dC5jaGFyQ29kZUF0KE4gLSAxKSA9PT0gTkVXTElORSkgLS1OO1xuICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoTiAtIDEpID09PSBSRVRVUk4pIC0tTjtcblxuICAgIGZ1bmN0aW9uIHRva2VuKCkge1xuICAgICAgaWYgKGVvZikgcmV0dXJuIEVPRjtcbiAgICAgIGlmIChlb2wpIHJldHVybiBlb2wgPSBmYWxzZSwgRU9MO1xuXG4gICAgICAvLyBVbmVzY2FwZSBxdW90ZXMuXG4gICAgICB2YXIgaSwgaiA9IEksIGM7XG4gICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGopID09PSBRVU9URSkge1xuICAgICAgICB3aGlsZSAoSSsrIDwgTiAmJiB0ZXh0LmNoYXJDb2RlQXQoSSkgIT09IFFVT1RFIHx8IHRleHQuY2hhckNvZGVBdCgrK0kpID09PSBRVU9URSk7XG4gICAgICAgIGlmICgoaSA9IEkpID49IE4pIGVvZiA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKChjID0gdGV4dC5jaGFyQ29kZUF0KEkrKykpID09PSBORVdMSU5FKSBlb2wgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChjID09PSBSRVRVUk4pIHsgZW9sID0gdHJ1ZTsgaWYgKHRleHQuY2hhckNvZGVBdChJKSA9PT0gTkVXTElORSkgKytJOyB9XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKGogKyAxLCBpIC0gMSkucmVwbGFjZSgvXCJcIi9nLCBcIlxcXCJcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgbmV4dCBkZWxpbWl0ZXIgb3IgbmV3bGluZS5cbiAgICAgIHdoaWxlIChJIDwgTikge1xuICAgICAgICBpZiAoKGMgPSB0ZXh0LmNoYXJDb2RlQXQoaSA9IEkrKykpID09PSBORVdMSU5FKSBlb2wgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChjID09PSBSRVRVUk4pIHsgZW9sID0gdHJ1ZTsgaWYgKHRleHQuY2hhckNvZGVBdChJKSA9PT0gTkVXTElORSkgKytJOyB9XG4gICAgICAgIGVsc2UgaWYgKGMgIT09IERFTElNSVRFUikgY29udGludWU7XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKGosIGkpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXR1cm4gbGFzdCB0b2tlbiBiZWZvcmUgRU9GLlxuICAgICAgcmV0dXJuIGVvZiA9IHRydWUsIHRleHQuc2xpY2UoaiwgTik7XG4gICAgfVxuXG4gICAgd2hpbGUgKCh0ID0gdG9rZW4oKSkgIT09IEVPRikge1xuICAgICAgdmFyIHJvdyA9IFtdO1xuICAgICAgd2hpbGUgKHQgIT09IEVPTCAmJiB0ICE9PSBFT0YpIHJvdy5wdXNoKHQpLCB0ID0gdG9rZW4oKTtcbiAgICAgIGlmIChmICYmIChyb3cgPSBmKHJvdywgbisrKSkgPT0gbnVsbCkgY29udGludWU7XG4gICAgICByb3dzLnB1c2gocm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWZvcm1hdEJvZHkocm93cywgY29sdW1ucykge1xuICAgIHJldHVybiByb3dzLm1hcChmdW5jdGlvbihyb3cpIHtcbiAgICAgIHJldHVybiBjb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKHJvd1tjb2x1bW5dKTtcbiAgICAgIH0pLmpvaW4oZGVsaW1pdGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdChyb3dzLCBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbHVtbnMgPT0gbnVsbCkgY29sdW1ucyA9IGluZmVyQ29sdW1ucyhyb3dzKTtcbiAgICByZXR1cm4gW2NvbHVtbnMubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcildLmNvbmNhdChwcmVmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbHVtbnMgPT0gbnVsbCkgY29sdW1ucyA9IGluZmVyQ29sdW1ucyhyb3dzKTtcbiAgICByZXR1cm4gcHJlZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93cyhyb3dzKSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZvcm1hdFJvdykuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFJvdyhyb3cpIHtcbiAgICByZXR1cm4gcm93Lm1hcChmb3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCJcbiAgICAgICAgOiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBmb3JtYXREYXRlKHZhbHVlKVxuICAgICAgICA6IHJlRm9ybWF0LnRlc3QodmFsdWUgKz0gXCJcIikgPyBcIlxcXCJcIiArIHZhbHVlLnJlcGxhY2UoL1wiL2csIFwiXFxcIlxcXCJcIikgKyBcIlxcXCJcIlxuICAgICAgICA6IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgcGFyc2VSb3dzOiBwYXJzZVJvd3MsXG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgZm9ybWF0Qm9keTogZm9ybWF0Qm9keSxcbiAgICBmb3JtYXRSb3dzOiBmb3JtYXRSb3dzLFxuICAgIGZvcm1hdFJvdzogZm9ybWF0Um93LFxuICAgIGZvcm1hdFZhbHVlOiBmb3JtYXRWYWx1ZVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///42132\n')},86664:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "rA": () => (/* reexport */ autoType),\n "Sf": () => (/* reexport */ csv/* csvFormat */.Sf),\n "S": () => (/* reexport */ csv/* csvFormatBody */.S),\n "fh": () => (/* reexport */ csv/* csvFormatRow */.fh),\n "Jb": () => (/* reexport */ csv/* csvFormatRows */.Jb),\n "eX": () => (/* reexport */ csv/* csvFormatValue */.eX),\n "ue": () => (/* reexport */ csv/* csvParse */.ue),\n "Bj": () => (/* reexport */ csv/* csvParseRows */.Bj),\n "yv": () => (/* reexport */ dsv/* default */.Z),\n "vP": () => (/* reexport */ tsv/* tsvFormat */.vP),\n "uH": () => (/* reexport */ tsv/* tsvFormatBody */.uH),\n "Hf": () => (/* reexport */ tsv/* tsvFormatRow */.Hf),\n "n5": () => (/* reexport */ tsv/* tsvFormatRows */.n5),\n "sS": () => (/* reexport */ tsv/* tsvFormatValue */.sS),\n "tJ": () => (/* reexport */ tsv/* tsvParse */.tJ),\n "E0": () => (/* reexport */ tsv/* tsvParseRows */.E0)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/dsv.js\nvar dsv = __webpack_require__(42132);\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/csv.js\nvar csv = __webpack_require__(82531);\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/tsv.js\nvar tsv = __webpack_require__(17280);\n;// CONCATENATED MODULE: ./node_modules/d3-dsv/src/autoType.js\nfunction autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === "true") value = true;\n else if (value === "false") value = false;\n else if (value === "NaN") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, "/").replace(/T/, " ");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nvar fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours();\n;// CONCATENATED MODULE: ./node_modules/d3-dsv/src/index.js\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODY2NjQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRTtBQUNwSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0Y7O0FDbkI4QztBQUN5RTtBQUNBO0FBQ3JFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvYXV0b1R5cGUuanM/ZTk5YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9pbmRleC5qcz83N2Q0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dG9UeXBlKG9iamVjdCkge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV0udHJpbSgpLCBudW1iZXIsIG07XG4gICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSBudWxsO1xuICAgIGVsc2UgaWYgKHZhbHVlID09PSBcInRydWVcIikgdmFsdWUgPSB0cnVlO1xuICAgIGVsc2UgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHZhbHVlID0gZmFsc2U7XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IFwiTmFOXCIpIHZhbHVlID0gTmFOO1xuICAgIGVsc2UgaWYgKCFpc05hTihudW1iZXIgPSArdmFsdWUpKSB2YWx1ZSA9IG51bWJlcjtcbiAgICBlbHNlIGlmIChtID0gdmFsdWUubWF0Y2goL14oWy0rXVxcZHsyfSk/XFxkezR9KC1cXGR7Mn0oLVxcZHsyfSk/KT8oVFxcZHsyfTpcXGR7Mn0oOlxcZHsyfShcXC5cXGR7M30pPyk/KFp8Wy0rXVxcZHsyfTpcXGR7Mn0pPyk/JC8pKSB7XG4gICAgICBpZiAoZml4dHogJiYgISFtWzRdICYmICFtWzddKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLy0vZywgXCIvXCIpLnJlcGxhY2UoL1QvLCBcIiBcIik7XG4gICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBjb250aW51ZTtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1kc3YvaXNzdWVzLzQ1XG52YXIgZml4dHogPSBuZXcgRGF0ZShcIjIwMTktMDEtMDFUMDA6MDBcIikuZ2V0SG91cnMoKSB8fCBuZXcgRGF0ZShcIjIwMTktMDctMDFUMDA6MDBcIikuZ2V0SG91cnMoKTsiLCJleHBvcnQge2RlZmF1bHQgYXMgZHN2Rm9ybWF0fSBmcm9tIFwiLi9kc3YuanNcIjtcbmV4cG9ydCB7Y3N2UGFyc2UsIGNzdlBhcnNlUm93cywgY3N2Rm9ybWF0LCBjc3ZGb3JtYXRCb2R5LCBjc3ZGb3JtYXRSb3dzLCBjc3ZGb3JtYXRSb3csIGNzdkZvcm1hdFZhbHVlfSBmcm9tIFwiLi9jc3YuanNcIjtcbmV4cG9ydCB7dHN2UGFyc2UsIHRzdlBhcnNlUm93cywgdHN2Rm9ybWF0LCB0c3ZGb3JtYXRCb2R5LCB0c3ZGb3JtYXRSb3dzLCB0c3ZGb3JtYXRSb3csIHRzdkZvcm1hdFZhbHVlfSBmcm9tIFwiLi90c3YuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhdXRvVHlwZX0gZnJvbSBcIi4vYXV0b1R5cGUuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86664\n')},17280:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "E0": () => (/* binding */ tsvParseRows),\n/* harmony export */ "Hf": () => (/* binding */ tsvFormatRow),\n/* harmony export */ "n5": () => (/* binding */ tsvFormatRows),\n/* harmony export */ "sS": () => (/* binding */ tsvFormatValue),\n/* harmony export */ "tJ": () => (/* binding */ tsvParse),\n/* harmony export */ "uH": () => (/* binding */ tsvFormatBody),\n/* harmony export */ "vP": () => (/* binding */ tsvFormat)\n/* harmony export */ });\n/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42132);\n\n\nvar tsv = (0,_dsv_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)("\\t");\n\nvar tsvParse = tsv.parse;\nvar tsvParseRows = tsv.parseRows;\nvar tsvFormat = tsv.format;\nvar tsvFormatBody = tsv.formatBody;\nvar tsvFormatRows = tsv.formatRows;\nvar tsvFormatRow = tsv.formatRow;\nvar tsvFormatValue = tsv.formatValue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyODAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUEyQjs7QUFFM0IsVUFBVSw0REFBRzs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL3Rzdi5qcz83OTY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2LmpzXCI7XG5cbnZhciB0c3YgPSBkc3YoXCJcXHRcIik7XG5cbmV4cG9ydCB2YXIgdHN2UGFyc2UgPSB0c3YucGFyc2U7XG5leHBvcnQgdmFyIHRzdlBhcnNlUm93cyA9IHRzdi5wYXJzZVJvd3M7XG5leHBvcnQgdmFyIHRzdkZvcm1hdCA9IHRzdi5mb3JtYXQ7XG5leHBvcnQgdmFyIHRzdkZvcm1hdEJvZHkgPSB0c3YuZm9ybWF0Qm9keTtcbmV4cG9ydCB2YXIgdHN2Rm9ybWF0Um93cyA9IHRzdi5mb3JtYXRSb3dzO1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRSb3cgPSB0c3YuZm9ybWF0Um93O1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRWYWx1ZSA9IHRzdi5mb3JtYXRWYWx1ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17280\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-ease.1f23a486b6e62bf3.bundle.js b/assets/demo/site/npm.d3-ease.1f23a486b6e62bf3.bundle.js
new file mode 100644
index 00000000..6ab6c456
--- /dev/null
+++ b/assets/demo/site/npm.d3-ease.1f23a486b6e62bf3.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[8152],{68716:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "_e": () => (/* binding */ cubicOut),\n/* harmony export */ "tw": () => (/* binding */ cubicInOut),\n/* harmony export */ "yD": () => (/* binding */ cubicIn)\n/* harmony export */ });\nfunction cubicIn(t) {\n return t * t * t;\n}\n\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg3MTYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcz84NjViIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///68716\n')},7716:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "bW": () => (/* reexport */ backInOut),\n "gp": () => (/* reexport */ backIn),\n "gI": () => (/* reexport */ backInOut),\n "ZN": () => (/* reexport */ backOut),\n "sf": () => (/* reexport */ bounceOut),\n "RK": () => (/* reexport */ bounceIn),\n "hE": () => (/* reexport */ bounceInOut),\n "qj": () => (/* reexport */ bounceOut),\n "Xe": () => (/* reexport */ circleInOut),\n "kO": () => (/* reexport */ circleIn),\n "sq": () => (/* reexport */ circleInOut),\n "te": () => (/* reexport */ circleOut),\n "LU": () => (/* reexport */ cubic/* cubicInOut */.tw),\n "HU": () => (/* reexport */ cubic/* cubicIn */.yD),\n "cC": () => (/* reexport */ cubic/* cubicInOut */.tw),\n "oS": () => (/* reexport */ cubic/* cubicOut */._e),\n "Az": () => (/* reexport */ elasticOut),\n "aM": () => (/* reexport */ elasticIn),\n "H1": () => (/* reexport */ elasticInOut),\n "Px": () => (/* reexport */ elasticOut),\n "Ll": () => (/* reexport */ expInOut),\n "uY": () => (/* reexport */ expIn),\n "nm": () => (/* reexport */ expInOut),\n "mf": () => (/* reexport */ expOut),\n "Ny": () => (/* reexport */ linear),\n "m2": () => (/* reexport */ polyInOut),\n "Tf": () => (/* reexport */ polyIn),\n "z5": () => (/* reexport */ polyInOut),\n "Ct": () => (/* reexport */ polyOut),\n "uw": () => (/* reexport */ quadInOut),\n "V_": () => (/* reexport */ quadIn),\n "Tu": () => (/* reexport */ quadInOut),\n "mm": () => (/* reexport */ quadOut),\n "Tl": () => (/* reexport */ sinInOut),\n "tl": () => (/* reexport */ sinIn),\n "v": () => (/* reexport */ sinInOut),\n "p4": () => (/* reexport */ sinOut)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/linear.js\nfunction linear(t) {\n return +t;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/quad.js\nfunction quadIn(t) {\n return t * t;\n}\n\nfunction quadOut(t) {\n return t * (2 - t);\n}\n\nfunction quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-ease/src/cubic.js\nvar cubic = __webpack_require__(68716);\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/poly.js\nvar exponent = 3;\n\nvar polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nvar polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nvar polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/sin.js\nvar pi = Math.PI,\n halfPi = pi / 2;\n\nfunction sinIn(t) {\n return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nfunction sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nfunction sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/math.js\n// tpmt is two power minus ten times t scaled to [0,1]\nfunction tpmt(x) {\n return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/exp.js\n\n\nfunction expIn(t) {\n return tpmt(1 - +t);\n}\n\nfunction expOut(t) {\n return 1 - tpmt(t);\n}\n\nfunction expInOut(t) {\n return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/circle.js\nfunction circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nfunction circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nfunction circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/bounce.js\nvar b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nfunction bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nfunction bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nfunction bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/back.js\nvar overshoot = 1.70158;\n\nvar backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nvar backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nvar backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/elastic.js\n\n\nvar tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nvar elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nvar elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nvar elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * tpmt(-t) * Math.sin((s - t) / p)\n : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcxNi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU87QUFDUDtBQUNBOzs7QUNGTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7Ozs7QUNWQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVNO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7O0FDcENEO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7OztBQ2JBO0FBQ087QUFDUDtBQUNBOzs7QUNIK0I7O0FBRXhCO0FBQ1AsU0FBUyxJQUFJO0FBQ2I7O0FBRU87QUFDUCxhQUFhLElBQUk7QUFDakI7O0FBRU87QUFDUCwwQkFBMEIsSUFBSSxjQUFjLElBQUk7QUFDaEQ7OztBQ1pPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOzs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7O0FDckJBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOzs7QUNwQzhCOztBQUUvQjtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBLGVBQWUsSUFBSTtBQUNuQjs7QUFFQSxzQ0FBc0M7QUFDdEMsbUNBQW1DOztBQUVuQztBQUNBLENBQUM7O0FBRU07QUFDUDs7QUFFQTtBQUNBLG1CQUFtQixJQUFJO0FBQ3ZCOztBQUVBLHVDQUF1QztBQUN2QyxvQ0FBb0M7O0FBRXBDO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQOztBQUVBO0FBQ0E7QUFDQSxjQUFjLElBQUk7QUFDbEIsa0JBQWtCLElBQUk7QUFDdEI7O0FBRUEseUNBQXlDO0FBQ3pDLHNDQUFzQzs7QUFFdEM7QUFDQSxDQUFDOzs7QUMzQ29COztBQU9GOztBQU9DOztBQU9EOztBQU9EOztBQU9BOztBQU9HOztBQU9BOztBQU9GOztBQU9HIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2xpbmVhci5qcz81NzNjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9xdWFkLmpzPzE4YjEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3BvbHkuanM/YTI5OSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvc2luLmpzPzhmNzQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL21hdGguanM/MWZlZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvZXhwLmpzPzVjMTQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2NpcmNsZS5qcz8wMjkyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9ib3VuY2UuanM/YTc4MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvYmFjay5qcz82YzgwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9lbGFzdGljLmpzPzcwOWQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2luZGV4LmpzP2I1NzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcih0KSB7XG4gIHJldHVybiArdDtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBxdWFkSW4odCkge1xuICByZXR1cm4gdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFkT3V0KHQpIHtcbiAgcmV0dXJuIHQgKiAoMiAtIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVhZEluT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgOiAtLXQgKiAoMiAtIHQpICsgMSkgLyAyO1xufVxuIiwidmFyIGV4cG9uZW50ID0gMztcblxuZXhwb3J0IHZhciBwb2x5SW4gPSAoZnVuY3Rpb24gY3VzdG9tKGUpIHtcbiAgZSA9ICtlO1xuXG4gIGZ1bmN0aW9uIHBvbHlJbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KHQsIGUpO1xuICB9XG5cbiAgcG9seUluLmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW47XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seU91dCA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seU91dCh0KSB7XG4gICAgcmV0dXJuIDEgLSBNYXRoLnBvdygxIC0gdCwgZSk7XG4gIH1cblxuICBwb2x5T3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5T3V0O1xufSkoZXhwb25lbnQpO1xuXG5leHBvcnQgdmFyIHBvbHlJbk91dCA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyBNYXRoLnBvdyh0LCBlKSA6IDIgLSBNYXRoLnBvdygyIC0gdCwgZSkpIC8gMjtcbiAgfVxuXG4gIHBvbHlJbk91dC5leHBvbmVudCA9IGN1c3RvbTtcblxuICByZXR1cm4gcG9seUluT3V0O1xufSkoZXhwb25lbnQpO1xuIiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICBoYWxmUGkgPSBwaSAvIDI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5Jbih0KSB7XG4gIHJldHVybiAoK3QgPT09IDEpID8gMSA6IDEgLSBNYXRoLmNvcyh0ICogaGFsZlBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbk91dCh0KSB7XG4gIHJldHVybiBNYXRoLnNpbih0ICogaGFsZlBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbkluT3V0KHQpIHtcbiAgcmV0dXJuICgxIC0gTWF0aC5jb3MocGkgKiB0KSkgLyAyO1xufVxuIiwiLy8gdHBtdCBpcyB0d28gcG93ZXIgbWludXMgdGVuIHRpbWVzIHQgc2NhbGVkIHRvIFswLDFdXG5leHBvcnQgZnVuY3Rpb24gdHBtdCh4KSB7XG4gIHJldHVybiAoTWF0aC5wb3coMiwgLTEwICogeCkgLSAwLjAwMDk3NjU2MjUpICogMS4wMDA5Nzc1MTcxMDY1NDk0O1xufVxuIiwiaW1wb3J0IHt0cG10fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBJbih0KSB7XG4gIHJldHVybiB0cG10KDEgLSArdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBPdXQodCkge1xuICByZXR1cm4gMSAtIHRwbXQodCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHRwbXQoMSAtIHQpIDogMiAtIHRwbXQodCAtIDEpKSAvIDI7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY2lyY2xlSW4odCkge1xuICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gdCAqIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlT3V0KHQpIHtcbiAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS10ICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaXJjbGVJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KSA6IE1hdGguc3FydCgxIC0gKHQgLT0gMikgKiB0KSArIDEpIC8gMjtcbn1cbiIsInZhciBiMSA9IDQgLyAxMSxcbiAgICBiMiA9IDYgLyAxMSxcbiAgICBiMyA9IDggLyAxMSxcbiAgICBiNCA9IDMgLyA0LFxuICAgIGI1ID0gOSAvIDExLFxuICAgIGI2ID0gMTAgLyAxMSxcbiAgICBiNyA9IDE1IC8gMTYsXG4gICAgYjggPSAyMSAvIDIyLFxuICAgIGI5ID0gNjMgLyA2NCxcbiAgICBiMCA9IDEgLyBiMSAvIGIxO1xuXG5leHBvcnQgZnVuY3Rpb24gYm91bmNlSW4odCkge1xuICByZXR1cm4gMSAtIGJvdW5jZU91dCgxIC0gdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3VuY2VPdXQodCkge1xuICByZXR1cm4gKHQgPSArdCkgPCBiMSA/IGIwICogdCAqIHQgOiB0IDwgYjMgPyBiMCAqICh0IC09IGIyKSAqIHQgKyBiNCA6IHQgPCBiNiA/IGIwICogKHQgLT0gYjUpICogdCArIGI3IDogYjAgKiAodCAtPSBiOCkgKiB0ICsgYjk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib3VuY2VJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IDEgLSBib3VuY2VPdXQoMSAtIHQpIDogYm91bmNlT3V0KHQgLSAxKSArIDEpIC8gMjtcbn1cbiIsInZhciBvdmVyc2hvb3QgPSAxLjcwMTU4O1xuXG5leHBvcnQgdmFyIGJhY2tJbiA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luKHQpIHtcbiAgICByZXR1cm4gKHQgPSArdCkgKiB0ICogKHMgKiAodCAtIDEpICsgdCk7XG4gIH1cblxuICBiYWNrSW4ub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW47XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tPdXQodCkge1xuICAgIHJldHVybiAtLXQgKiB0ICogKCh0ICsgMSkgKiBzICsgdCkgKyAxO1xuICB9XG5cbiAgYmFja091dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tPdXQ7XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tJbk91dCA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDwgMSA/IHQgKiB0ICogKChzICsgMSkgKiB0IC0gcykgOiAodCAtPSAyKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDIpIC8gMjtcbiAgfVxuXG4gIGJhY2tJbk91dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tJbk91dDtcbn0pKG92ZXJzaG9vdCk7XG4iLCJpbXBvcnQge3RwbXR9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIHRhdSA9IDIgKiBNYXRoLlBJLFxuICAgIGFtcGxpdHVkZSA9IDEsXG4gICAgcGVyaW9kID0gMC4zO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbiA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW4odCkge1xuICAgIHJldHVybiBhICogdHBtdCgtKC0tdCkpICogTWF0aC5zaW4oKHMgLSB0KSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY0luLmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luLnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luO1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKGEsIHApIHtcbiAgdmFyIHMgPSBNYXRoLmFzaW4oMSAvIChhID0gTWF0aC5tYXgoMSwgYSkpKSAqIChwIC89IHRhdSk7XG5cbiAgZnVuY3Rpb24gZWxhc3RpY091dCh0KSB7XG4gICAgcmV0dXJuIDEgLSBhICogdHBtdCh0ID0gK3QpICogTWF0aC5zaW4oKHQgKyBzKSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY091dC5hbXBsaXR1ZGUgPSBmdW5jdGlvbihhKSB7IHJldHVybiBjdXN0b20oYSwgcCAqIHRhdSk7IH07XG4gIGVsYXN0aWNPdXQucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbk91dCA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgPSB0ICogMiAtIDEpIDwgMFxuICAgICAgICA/IGEgKiB0cG10KC10KSAqIE1hdGguc2luKChzIC0gdCkgLyBwKVxuICAgICAgICA6IDIgLSBhICogdHBtdCh0KSAqIE1hdGguc2luKChzICsgdCkgLyBwKSkgLyAyO1xuICB9XG5cbiAgZWxhc3RpY0luT3V0LmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luT3V0LnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuIiwiZXhwb3J0IHtcbiAgbGluZWFyIGFzIGVhc2VMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHF1YWRJbk91dCBhcyBlYXNlUXVhZCxcbiAgcXVhZEluIGFzIGVhc2VRdWFkSW4sXG4gIHF1YWRPdXQgYXMgZWFzZVF1YWRPdXQsXG4gIHF1YWRJbk91dCBhcyBlYXNlUXVhZEluT3V0XG59IGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IHtcbiAgY3ViaWNJbk91dCBhcyBlYXNlQ3ViaWMsXG4gIGN1YmljSW4gYXMgZWFzZUN1YmljSW4sXG4gIGN1YmljT3V0IGFzIGVhc2VDdWJpY091dCxcbiAgY3ViaWNJbk91dCBhcyBlYXNlQ3ViaWNJbk91dFxufSBmcm9tIFwiLi9jdWJpYy5qc1wiO1xuXG5leHBvcnQge1xuICBwb2x5SW5PdXQgYXMgZWFzZVBvbHksXG4gIHBvbHlJbiBhcyBlYXNlUG9seUluLFxuICBwb2x5T3V0IGFzIGVhc2VQb2x5T3V0LFxuICBwb2x5SW5PdXQgYXMgZWFzZVBvbHlJbk91dFxufSBmcm9tIFwiLi9wb2x5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHNpbkluT3V0IGFzIGVhc2VTaW4sXG4gIHNpbkluIGFzIGVhc2VTaW5JbixcbiAgc2luT3V0IGFzIGVhc2VTaW5PdXQsXG4gIHNpbkluT3V0IGFzIGVhc2VTaW5Jbk91dFxufSBmcm9tIFwiLi9zaW4uanNcIjtcblxuZXhwb3J0IHtcbiAgZXhwSW5PdXQgYXMgZWFzZUV4cCxcbiAgZXhwSW4gYXMgZWFzZUV4cEluLFxuICBleHBPdXQgYXMgZWFzZUV4cE91dCxcbiAgZXhwSW5PdXQgYXMgZWFzZUV4cEluT3V0XG59IGZyb20gXCIuL2V4cC5qc1wiO1xuXG5leHBvcnQge1xuICBjaXJjbGVJbk91dCBhcyBlYXNlQ2lyY2xlLFxuICBjaXJjbGVJbiBhcyBlYXNlQ2lyY2xlSW4sXG4gIGNpcmNsZU91dCBhcyBlYXNlQ2lyY2xlT3V0LFxuICBjaXJjbGVJbk91dCBhcyBlYXNlQ2lyY2xlSW5PdXRcbn0gZnJvbSBcIi4vY2lyY2xlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGJvdW5jZU91dCBhcyBlYXNlQm91bmNlLFxuICBib3VuY2VJbiBhcyBlYXNlQm91bmNlSW4sXG4gIGJvdW5jZU91dCBhcyBlYXNlQm91bmNlT3V0LFxuICBib3VuY2VJbk91dCBhcyBlYXNlQm91bmNlSW5PdXRcbn0gZnJvbSBcIi4vYm91bmNlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGJhY2tJbk91dCBhcyBlYXNlQmFjayxcbiAgYmFja0luIGFzIGVhc2VCYWNrSW4sXG4gIGJhY2tPdXQgYXMgZWFzZUJhY2tPdXQsXG4gIGJhY2tJbk91dCBhcyBlYXNlQmFja0luT3V0XG59IGZyb20gXCIuL2JhY2suanNcIjtcblxuZXhwb3J0IHtcbiAgZWxhc3RpY091dCBhcyBlYXNlRWxhc3RpYyxcbiAgZWxhc3RpY0luIGFzIGVhc2VFbGFzdGljSW4sXG4gIGVsYXN0aWNPdXQgYXMgZWFzZUVsYXN0aWNPdXQsXG4gIGVsYXN0aWNJbk91dCBhcyBlYXNlRWxhc3RpY0luT3V0XG59IGZyb20gXCIuL2VsYXN0aWMuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7716\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-fetch.3ab96816378500d9.bundle.js b/assets/demo/site/npm.d3-fetch.3ab96816378500d9.bundle.js
new file mode 100644
index 00000000..8516ee71
--- /dev/null
+++ b/assets/demo/site/npm.d3-fetch.3ab96816378500d9.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[863],{58339:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Ik": () => (/* reexport */ blob),\n "f3": () => (/* reexport */ buffer),\n "gy": () => (/* reexport */ dsv_csv),\n "Ds": () => (/* reexport */ dsv_dsv),\n "dy": () => (/* reexport */ html),\n "BH": () => (/* reexport */ src_image),\n "AV": () => (/* reexport */ json),\n "YP": () => (/* reexport */ svg),\n "fL": () => (/* reexport */ src_text),\n "pv": () => (/* reexport */ dsv_tsv),\n "Ls": () => (/* reexport */ xml)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/blob.js\nfunction responseBlob(response) {\n if (!response.ok) throw new Error(response.status + " " + response.statusText);\n return response.blob();\n}\n\n/* harmony default export */ function blob(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/buffer.js\nfunction responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + " " + response.statusText);\n return response.arrayBuffer();\n}\n\n/* harmony default export */ function buffer(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/dsv.js\nvar dsv = __webpack_require__(42132);\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/csv.js\nvar csv = __webpack_require__(82531);\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/tsv.js\nvar tsv = __webpack_require__(17280);\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/text.js\nfunction responseText(response) {\n if (!response.ok) throw new Error(response.status + " " + response.statusText);\n return response.text();\n}\n\n/* harmony default export */ function src_text(input, init) {\n return fetch(input, init).then(responseText);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/dsv.js\n\n\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === "function") row = init, init = undefined;\n return src_text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nfunction dsv_dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === "function") row = init, init = undefined;\n var format = (0,dsv/* default */.Z)(delimiter);\n return src_text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nvar dsv_csv = dsvParse(csv/* csvParse */.ue);\nvar dsv_tsv = dsvParse(tsv/* tsvParse */.tJ);\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/image.js\n/* harmony default export */ function src_image(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/json.js\nfunction responseJson(response) {\n if (!response.ok) throw new Error(response.status + " " + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\n/* harmony default export */ function json(input, init) {\n return fetch(input, init).then(responseJson);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/xml.js\n\n\nfunction parser(type) {\n return function(input, init) {\n return src_text(input, init).then(function(text) {\n return (new DOMParser).parseFromString(text, type);\n });\n };\n}\n\n/* harmony default export */ const xml = (parser("application/xml"));\n\nvar html = parser("text/html");\n\nvar svg = parser("image/svg+xml");\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/index.js\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgzMzkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxjQUFTO0FBQ3hCO0FBQ0E7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLGdCQUFTO0FBQ3hCO0FBQ0E7Ozs7Ozs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLGtCQUFTO0FBQ3hCO0FBQ0E7OztBQ1BxRDtBQUN4Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFJO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFZSxTQUFTLE9BQUc7QUFDM0I7QUFDQSxlQUFlLHNCQUFTO0FBQ3hCLFNBQVMsUUFBSTtBQUNiO0FBQ0EsR0FBRztBQUNIOztBQUVPLElBQUksT0FBRyxZQUFZLG9CQUFRO0FBQzNCLElBQUksT0FBRyxZQUFZLG9CQUFROzs7QUNyQmxDLDZCQUFlLG1CQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsR0FBRztBQUNIOzs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLGNBQVM7QUFDeEI7QUFDQTs7O0FDUjZCOztBQUU3QjtBQUNBO0FBQ0EsV0FBVyxRQUFJO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSwwQ0FBZSx5QkFBeUIsRUFBQzs7QUFFbEM7O0FBRUE7OztBQ2RtQztBQUNJO0FBQ0k7QUFDTjtBQUNGO0FBQ0E7QUFDUyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvYmxvYi5qcz80YjllIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvYnVmZmVyLmpzP2RhNDIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy90ZXh0LmpzPzkzMDAiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9kc3YuanM/NGQxYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2ltYWdlLmpzP2FkNTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9qc29uLmpzPzI3MmYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy94bWwuanM/ZjBhZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2luZGV4LmpzP2U0ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcmVzcG9uc2VCbG9iKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UuYmxvYigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VCbG9iKTtcbn1cbiIsImZ1bmN0aW9uIHJlc3BvbnNlQXJyYXlCdWZmZXIocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1cyArIFwiIFwiICsgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VBcnJheUJ1ZmZlcik7XG59XG4iLCJmdW5jdGlvbiByZXNwb25zZVRleHQocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1cyArIFwiIFwiICsgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBmZXRjaChpbnB1dCwgaW5pdCkudGhlbihyZXNwb25zZVRleHQpO1xufVxuIiwiaW1wb3J0IHtjc3ZQYXJzZSwgZHN2Rm9ybWF0LCB0c3ZQYXJzZX0gZnJvbSBcImQzLWRzdlwiO1xuaW1wb3J0IHRleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuXG5mdW5jdGlvbiBkc3ZQYXJzZShwYXJzZSkge1xuICByZXR1cm4gZnVuY3Rpb24oaW5wdXQsIGluaXQsIHJvdykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBpbml0ID09PSBcImZ1bmN0aW9uXCIpIHJvdyA9IGluaXQsIGluaXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRleHQoaW5wdXQsIGluaXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZShyZXNwb25zZSwgcm93KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHN2KGRlbGltaXRlciwgaW5wdXQsIGluaXQsIHJvdykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgaW5pdCA9PT0gXCJmdW5jdGlvblwiKSByb3cgPSBpbml0LCBpbml0ID0gdW5kZWZpbmVkO1xuICB2YXIgZm9ybWF0ID0gZHN2Rm9ybWF0KGRlbGltaXRlcik7XG4gIHJldHVybiB0ZXh0KGlucHV0LCBpbml0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZvcm1hdC5wYXJzZShyZXNwb25zZSwgcm93KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgY3N2ID0gZHN2UGFyc2UoY3N2UGFyc2UpO1xuZXhwb3J0IHZhciB0c3YgPSBkc3ZQYXJzZSh0c3ZQYXJzZSk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlO1xuICAgIGZvciAodmFyIGtleSBpbiBpbml0KSBpbWFnZVtrZXldID0gaW5pdFtrZXldO1xuICAgIGltYWdlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7IHJlc29sdmUoaW1hZ2UpOyB9O1xuICAgIGltYWdlLnNyYyA9IGlucHV0O1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlc3BvbnNlSnNvbihyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0IHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA1KSByZXR1cm47XG4gIHJldHVybiByZXNwb25zZS5qc29uKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBmZXRjaChpbnB1dCwgaW5pdCkudGhlbihyZXNwb25zZUpzb24pO1xufVxuIiwiaW1wb3J0IHRleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuXG5mdW5jdGlvbiBwYXJzZXIodHlwZSkge1xuICByZXR1cm4gZnVuY3Rpb24oaW5wdXQsIGluaXQpICB7XG4gICAgcmV0dXJuIHRleHQoaW5wdXQsIGluaXQpLnRoZW4oZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuIChuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodGV4dCwgdHlwZSk7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlcihcImFwcGxpY2F0aW9uL3htbFwiKTtcblxuZXhwb3J0IHZhciBodG1sID0gcGFyc2VyKFwidGV4dC9odG1sXCIpO1xuXG5leHBvcnQgdmFyIHN2ZyA9IHBhcnNlcihcImltYWdlL3N2Zyt4bWxcIik7XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgYmxvYn0gZnJvbSBcIi4vYmxvYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJ1ZmZlcn0gZnJvbSBcIi4vYnVmZmVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZHN2LCBjc3YsIHRzdn0gZnJvbSBcIi4vZHN2LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW1hZ2V9IGZyb20gXCIuL2ltYWdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMganNvbn0gZnJvbSBcIi4vanNvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRleHR9IGZyb20gXCIuL3RleHQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB4bWwsIGh0bWwsIHN2Z30gZnJvbSBcIi4veG1sLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58339\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-force.a1dcef94e6ef13f9.bundle.js b/assets/demo/site/npm.d3-force.a1dcef94e6ef13f9.bundle.js
new file mode 100644
index 00000000..41a387f2
--- /dev/null
+++ b/assets/demo/site/npm.d3-force.a1dcef94e6ef13f9.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[8625],{31963:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "wq": () => (/* reexport */ center),\n "Hh": () => (/* reexport */ collide),\n "Fs": () => (/* reexport */ src_link),\n "q5": () => (/* reexport */ manyBody),\n "DX": () => (/* reexport */ radial),\n "A4": () => (/* reexport */ simulation),\n "RU": () => (/* reexport */ src_x),\n "Mr": () => (/* reexport */ src_y)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/center.js\n/* harmony default export */ function center(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/jiggle.js\n/* harmony default export */ function jiggle() {\n return (Math.random() - 0.5) * 1e-6;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-quadtree/src/quadtree.js + 13 modules\nvar quadtree = __webpack_require__(47148);\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/collide.js\n\n\n\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\n/* harmony default export */ function collide(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== "function") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = (0,quadtree/* default */.Z)(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-collection/src/index.js + 6 modules\nvar src = __webpack_require__(73814);\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/link.js\n\n\n\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error("missing: " + nodeId);\n return node;\n}\n\n/* harmony default export */ function src_link(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = (0,src/* map */.UI)(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== "object") link.source = find(nodeById, link.source);\n if (typeof link.target !== "object") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === "function" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar dispatch = __webpack_require__(92626);\n// EXTERNAL MODULE: ./node_modules/d3-timer/src/timer.js\nvar timer = __webpack_require__(35374);\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/simulation.js\n\n\n\n\nfunction simulation_x(d) {\n return d.x;\n}\n\nfunction simulation_y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\n/* harmony default export */ function simulation(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = (0,src/* map */.UI)(),\n stepper = (0,timer/* timer */.HT)(step),\n event = (0,dispatch/* default */.Z)("tick", "end");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call("tick", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call("end", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.each(function (force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/manyBody.js\n\n\n\n\n\n/* harmony default export */ function manyBody() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = (0,quadtree/* default */.Z)(nodes, simulation_x, simulation_y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/radial.js\n\n\n/* harmony default export */ function radial(radius, x, y) {\n var nodes,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== "function") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = node.y - y || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n node.vy += dy * k;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _, initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/x.js\n\n\n/* harmony default export */ function src_x(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== "function") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/y.js\n\n\n/* harmony default export */ function src_y(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== "function") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-force/src/index.js\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBOztBQUVBO0FBQ0Esd0VBQXdFLFFBQVE7QUFDaEY7O0FBRUE7QUFDQSxpRUFBaUUsUUFBUTtBQUN6RTs7QUFFQTtBQUNBOzs7QUN4Q2tDOztBQUVsQyw2QkFBZSxlQUFTO0FBQ3hCLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsUUFBUTs7QUFFM0M7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSxRQUFRO0FBQ2hGOztBQUVBO0FBQ0EsaUVBQWlFLFFBQVE7QUFDekU7O0FBRUE7QUFDQTs7O0FDeENnRDtBQUNFO0FBQ047QUFDUTtBQUNKO0FBQ1E7QUFDbEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY2VudGVyLmpzPzk2ZjgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcz83YjBiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvamlnZ2xlLmpzPzk1NGIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb2xsaWRlLmpzP2U2MGUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9saW5rLmpzPzFhZTciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9zaW11bGF0aW9uLmpzP2M3MWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9tYW55Qm9keS5qcz82ZjE3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvcmFkaWFsLmpzPzBiNTciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy94LmpzPzkwNDUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy95LmpzPzY5NWYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9pbmRleC5qcz8xZjY3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIG5vZGVzO1xuXG4gIGlmICh4ID09IG51bGwpIHggPSAwO1xuICBpZiAoeSA9PSBudWxsKSB5ID0gMDtcblxuICBmdW5jdGlvbiBmb3JjZSgpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgc3ggPSAwLFxuICAgICAgICBzeSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIHN4ICs9IG5vZGUueCwgc3kgKz0gbm9kZS55O1xuICAgIH1cblxuICAgIGZvciAoc3ggPSBzeCAvIG4gLSB4LCBzeSA9IHN5IC8gbiAtIHksIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueCAtPSBzeCwgbm9kZS55IC09IHN5O1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9ICtfLCBmb3JjZSkgOiB4O1xuICB9O1xuXG4gIGZvcmNlLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9ICtfLCBmb3JjZSkgOiB5O1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAxZS02O1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZVwiO1xuaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5cbmZ1bmN0aW9uIHgoZCkge1xuICByZXR1cm4gZC54ICsgZC52eDtcbn1cblxuZnVuY3Rpb24geShkKSB7XG4gIHJldHVybiBkLnkgKyBkLnZ5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYWRpdXMpIHtcbiAgdmFyIG5vZGVzLFxuICAgICAgcmFkaWksXG4gICAgICBzdHJlbmd0aCA9IDEsXG4gICAgICBpdGVyYXRpb25zID0gMTtcblxuICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSByYWRpdXMgPSBjb25zdGFudChyYWRpdXMgPT0gbnVsbCA/IDEgOiArcmFkaXVzKTtcblxuICBmdW5jdGlvbiBmb3JjZSgpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgdHJlZSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgeGksXG4gICAgICAgIHlpLFxuICAgICAgICByaSxcbiAgICAgICAgcmkyO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIHRyZWUgPSBxdWFkdHJlZShub2RlcywgeCwgeSkudmlzaXRBZnRlcihwcmVwYXJlKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICByaSA9IHJhZGlpW25vZGUuaW5kZXhdLCByaTIgPSByaSAqIHJpO1xuICAgICAgICB4aSA9IG5vZGUueCArIG5vZGUudng7XG4gICAgICAgIHlpID0gbm9kZS55ICsgbm9kZS52eTtcbiAgICAgICAgdHJlZS52aXNpdChhcHBseSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHkocXVhZCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICAgIHZhciBkYXRhID0gcXVhZC5kYXRhLCByaiA9IHF1YWQuciwgciA9IHJpICsgcmo7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5pbmRleCA+IG5vZGUuaW5kZXgpIHtcbiAgICAgICAgICB2YXIgeCA9IHhpIC0gZGF0YS54IC0gZGF0YS52eCxcbiAgICAgICAgICAgICAgeSA9IHlpIC0gZGF0YS55IC0gZGF0YS52eSxcbiAgICAgICAgICAgICAgbCA9IHggKiB4ICsgeSAqIHk7XG4gICAgICAgICAgaWYgKGwgPCByICogcikge1xuICAgICAgICAgICAgaWYgKHggPT09IDApIHggPSBqaWdnbGUoKSwgbCArPSB4ICogeDtcbiAgICAgICAgICAgIGlmICh5ID09PSAwKSB5ID0gamlnZ2xlKCksIGwgKz0geSAqIHk7XG4gICAgICAgICAgICBsID0gKHIgLSAobCA9IE1hdGguc3FydChsKSkpIC8gbCAqIHN0cmVuZ3RoO1xuICAgICAgICAgICAgbm9kZS52eCArPSAoeCAqPSBsKSAqIChyID0gKHJqICo9IHJqKSAvIChyaTIgKyByaikpO1xuICAgICAgICAgICAgbm9kZS52eSArPSAoeSAqPSBsKSAqIHI7XG4gICAgICAgICAgICBkYXRhLnZ4IC09IHggKiAociA9IDEgLSByKTtcbiAgICAgICAgICAgIGRhdGEudnkgLT0geSAqIHI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4MCA+IHhpICsgciB8fCB4MSA8IHhpIC0gciB8fCB5MCA+IHlpICsgciB8fCB5MSA8IHlpIC0gcjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKHF1YWQpIHtcbiAgICBpZiAocXVhZC5kYXRhKSByZXR1cm4gcXVhZC5yID0gcmFkaWlbcXVhZC5kYXRhLmluZGV4XTtcbiAgICBmb3IgKHZhciBpID0gcXVhZC5yID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKHF1YWRbaV0gJiYgcXVhZFtpXS5yID4gcXVhZC5yKSB7XG4gICAgICAgIHF1YWQuciA9IHF1YWRbaV0ucjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcbiAgICByYWRpaSA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHJhZGlpW25vZGUuaW5kZXhdID0gK3JhZGl1cyhub2RlLCBpLCBub2Rlcyk7XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2UuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIGZvcmNlKSA6IGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSArXywgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHJhZGl1cztcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBqaWdnbGUgZnJvbSBcIi4vamlnZ2xlXCI7XG5pbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcblxuZnVuY3Rpb24gaW5kZXgoZCkge1xuICByZXR1cm4gZC5pbmRleDtcbn1cblxuZnVuY3Rpb24gZmluZChub2RlQnlJZCwgbm9kZUlkKSB7XG4gIHZhciBub2RlID0gbm9kZUJ5SWQuZ2V0KG5vZGVJZCk7XG4gIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIgKyBub2RlSWQpO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obGlua3MpIHtcbiAgdmFyIGlkID0gaW5kZXgsXG4gICAgICBzdHJlbmd0aCA9IGRlZmF1bHRTdHJlbmd0aCxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlID0gY29uc3RhbnQoMzApLFxuICAgICAgZGlzdGFuY2VzLFxuICAgICAgbm9kZXMsXG4gICAgICBjb3VudCxcbiAgICAgIGJpYXMsXG4gICAgICBpdGVyYXRpb25zID0gMTtcblxuICBpZiAobGlua3MgPT0gbnVsbCkgbGlua3MgPSBbXTtcblxuICBmdW5jdGlvbiBkZWZhdWx0U3RyZW5ndGgobGluaykge1xuICAgIHJldHVybiAxIC8gTWF0aC5taW4oY291bnRbbGluay5zb3VyY2UuaW5kZXhdLCBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBrID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgayA8IGl0ZXJhdGlvbnM7ICsraykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxpbmssIHNvdXJjZSwgdGFyZ2V0LCB4LCB5LCBsLCBiOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rc1tpXSwgc291cmNlID0gbGluay5zb3VyY2UsIHRhcmdldCA9IGxpbmsudGFyZ2V0O1xuICAgICAgICB4ID0gdGFyZ2V0LnggKyB0YXJnZXQudnggLSBzb3VyY2UueCAtIHNvdXJjZS52eCB8fCBqaWdnbGUoKTtcbiAgICAgICAgeSA9IHRhcmdldC55ICsgdGFyZ2V0LnZ5IC0gc291cmNlLnkgLSBzb3VyY2UudnkgfHwgamlnZ2xlKCk7XG4gICAgICAgIGwgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgIGwgPSAobCAtIGRpc3RhbmNlc1tpXSkgLyBsICogYWxwaGEgKiBzdHJlbmd0aHNbaV07XG4gICAgICAgIHggKj0gbCwgeSAqPSBsO1xuICAgICAgICB0YXJnZXQudnggLT0geCAqIChiID0gYmlhc1tpXSk7XG4gICAgICAgIHRhcmdldC52eSAtPSB5ICogYjtcbiAgICAgICAgc291cmNlLnZ4ICs9IHggKiAoYiA9IDEgLSBiKTtcbiAgICAgICAgc291cmNlLnZ5ICs9IHkgKiBiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuXG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG0gPSBsaW5rcy5sZW5ndGgsXG4gICAgICAgIG5vZGVCeUlkID0gbWFwKG5vZGVzLCBpZCksXG4gICAgICAgIGxpbms7XG5cbiAgICBmb3IgKGkgPSAwLCBjb3VudCA9IG5ldyBBcnJheShuKTsgaSA8IG07ICsraSkge1xuICAgICAgbGluayA9IGxpbmtzW2ldLCBsaW5rLmluZGV4ID0gaTtcbiAgICAgIGlmICh0eXBlb2YgbGluay5zb3VyY2UgIT09IFwib2JqZWN0XCIpIGxpbmsuc291cmNlID0gZmluZChub2RlQnlJZCwgbGluay5zb3VyY2UpO1xuICAgICAgaWYgKHR5cGVvZiBsaW5rLnRhcmdldCAhPT0gXCJvYmplY3RcIikgbGluay50YXJnZXQgPSBmaW5kKG5vZGVCeUlkLCBsaW5rLnRhcmdldCk7XG4gICAgICBjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gPSAoY291bnRbbGluay5zb3VyY2UuaW5kZXhdIHx8IDApICsgMTtcbiAgICAgIGNvdW50W2xpbmsudGFyZ2V0LmluZGV4XSA9IChjb3VudFtsaW5rLnRhcmdldC5pbmRleF0gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGJpYXMgPSBuZXcgQXJyYXkobSk7IGkgPCBtOyArK2kpIHtcbiAgICAgIGxpbmsgPSBsaW5rc1tpXSwgYmlhc1tpXSA9IGNvdW50W2xpbmsuc291cmNlLmluZGV4XSAvIChjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gKyBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0pO1xuICAgIH1cblxuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShtKSwgaW5pdGlhbGl6ZVN0cmVuZ3RoKCk7XG4gICAgZGlzdGFuY2VzID0gbmV3IEFycmF5KG0pLCBpbml0aWFsaXplRGlzdGFuY2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVTdHJlbmd0aCgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgc3RyZW5ndGhzW2ldID0gK3N0cmVuZ3RoKGxpbmtzW2ldLCBpLCBsaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZURpc3RhbmNlKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbGlua3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBkaXN0YW5jZXNbaV0gPSArZGlzdGFuY2UobGlua3NbaV0sIGksIGxpbmtzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2UubGlua3MgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobGlua3MgPSBfLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IGxpbmtzO1xuICB9O1xuXG4gIGZvcmNlLmlkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlkID0gXywgZm9yY2UpIDogaWQ7XG4gIH07XG5cbiAgZm9yY2UuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIGZvcmNlKSA6IGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZVN0cmVuZ3RoKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemVEaXN0YW5jZSgpLCBmb3JjZSkgOiBkaXN0YW5jZTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7bWFwfSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHt0aW1lcn0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55O1xufVxuXG52YXIgaW5pdGlhbFJhZGl1cyA9IDEwLFxuICAgIGluaXRpYWxBbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGVzKSB7XG4gIHZhciBzaW11bGF0aW9uLFxuICAgICAgYWxwaGEgPSAxLFxuICAgICAgYWxwaGFNaW4gPSAwLjAwMSxcbiAgICAgIGFscGhhRGVjYXkgPSAxIC0gTWF0aC5wb3coYWxwaGFNaW4sIDEgLyAzMDApLFxuICAgICAgYWxwaGFUYXJnZXQgPSAwLFxuICAgICAgdmVsb2NpdHlEZWNheSA9IDAuNixcbiAgICAgIGZvcmNlcyA9IG1hcCgpLFxuICAgICAgc3RlcHBlciA9IHRpbWVyKHN0ZXApLFxuICAgICAgZXZlbnQgPSBkaXNwYXRjaChcInRpY2tcIiwgXCJlbmRcIik7XG5cbiAgaWYgKG5vZGVzID09IG51bGwpIG5vZGVzID0gW107XG5cbiAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICB0aWNrKCk7XG4gICAgZXZlbnQuY2FsbChcInRpY2tcIiwgc2ltdWxhdGlvbik7XG4gICAgaWYgKGFscGhhIDwgYWxwaGFNaW4pIHtcbiAgICAgIHN0ZXBwZXIuc3RvcCgpO1xuICAgICAgZXZlbnQuY2FsbChcImVuZFwiLCBzaW11bGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGl0ZXJhdGlvbnMpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcblxuICAgIGlmIChpdGVyYXRpb25zID09PSB1bmRlZmluZWQpIGl0ZXJhdGlvbnMgPSAxO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGFscGhhICs9IChhbHBoYVRhcmdldCAtIGFscGhhKSAqIGFscGhhRGVjYXk7XG5cbiAgICAgIGZvcmNlcy5lYWNoKGZ1bmN0aW9uIChmb3JjZSkge1xuICAgICAgICBmb3JjZShhbHBoYSk7XG4gICAgICB9KTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLmZ4ID09IG51bGwpIG5vZGUueCArPSBub2RlLnZ4ICo9IHZlbG9jaXR5RGVjYXk7XG4gICAgICAgIGVsc2Ugbm9kZS54ID0gbm9kZS5meCwgbm9kZS52eCA9IDA7XG4gICAgICAgIGlmIChub2RlLmZ5ID09IG51bGwpIG5vZGUueSArPSBub2RlLnZ5ICo9IHZlbG9jaXR5RGVjYXk7XG4gICAgICAgIGVsc2Ugbm9kZS55ID0gbm9kZS5meSwgbm9kZS52eSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbXVsYXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplTm9kZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS5pbmRleCA9IGk7XG4gICAgICBpZiAobm9kZS5meCAhPSBudWxsKSBub2RlLnggPSBub2RlLmZ4O1xuICAgICAgaWYgKG5vZGUuZnkgIT0gbnVsbCkgbm9kZS55ID0gbm9kZS5meTtcbiAgICAgIGlmIChpc05hTihub2RlLngpIHx8IGlzTmFOKG5vZGUueSkpIHtcbiAgICAgICAgdmFyIHJhZGl1cyA9IGluaXRpYWxSYWRpdXMgKiBNYXRoLnNxcnQoaSksIGFuZ2xlID0gaSAqIGluaXRpYWxBbmdsZTtcbiAgICAgICAgbm9kZS54ID0gcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBub2RlLnkgPSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4obm9kZS52eCkgfHwgaXNOYU4obm9kZS52eSkpIHtcbiAgICAgICAgbm9kZS52eCA9IG5vZGUudnkgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVGb3JjZShmb3JjZSkge1xuICAgIGlmIChmb3JjZS5pbml0aWFsaXplKSBmb3JjZS5pbml0aWFsaXplKG5vZGVzKTtcbiAgICByZXR1cm4gZm9yY2U7XG4gIH1cblxuICBpbml0aWFsaXplTm9kZXMoKTtcblxuICByZXR1cm4gc2ltdWxhdGlvbiA9IHtcbiAgICB0aWNrOiB0aWNrLFxuXG4gICAgcmVzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5yZXN0YXJ0KHN0ZXApLCBzaW11bGF0aW9uO1xuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzdGVwcGVyLnN0b3AoKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgbm9kZXM6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVzID0gXywgaW5pdGlhbGl6ZU5vZGVzKCksIGZvcmNlcy5lYWNoKGluaXRpYWxpemVGb3JjZSksIHNpbXVsYXRpb24pIDogbm9kZXM7XG4gICAgfSxcblxuICAgIGFscGhhOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYSA9ICtfLCBzaW11bGF0aW9uKSA6IGFscGhhO1xuICAgIH0sXG5cbiAgICBhbHBoYU1pbjogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGFNaW4gPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYU1pbjtcbiAgICB9LFxuXG4gICAgYWxwaGFEZWNheTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGFEZWNheSA9ICtfLCBzaW11bGF0aW9uKSA6ICthbHBoYURlY2F5O1xuICAgIH0sXG5cbiAgICBhbHBoYVRhcmdldDogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGFUYXJnZXQgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYVRhcmdldDtcbiAgICB9LFxuXG4gICAgdmVsb2NpdHlEZWNheTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmVsb2NpdHlEZWNheSA9IDEgLSBfLCBzaW11bGF0aW9uKSA6IDEgLSB2ZWxvY2l0eURlY2F5O1xuICAgIH0sXG5cbiAgICBmb3JjZTogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKChfID09IG51bGwgPyBmb3JjZXMucmVtb3ZlKG5hbWUpIDogZm9yY2VzLnNldChuYW1lLCBpbml0aWFsaXplRm9yY2UoXykpKSwgc2ltdWxhdGlvbikgOiBmb3JjZXMuZ2V0KG5hbWUpO1xuICAgIH0sXG5cbiAgICBmaW5kOiBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICAgIGR4LFxuICAgICAgICAgIGR5LFxuICAgICAgICAgIGQyLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgY2xvc2VzdDtcblxuICAgICAgaWYgKHJhZGl1cyA9PSBudWxsKSByYWRpdXMgPSBJbmZpbml0eTtcbiAgICAgIGVsc2UgcmFkaXVzICo9IHJhZGl1cztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGR4ID0geCAtIG5vZGUueDtcbiAgICAgICAgZHkgPSB5IC0gbm9kZS55O1xuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgICBpZiAoZDIgPCByYWRpdXMpIGNsb3Nlc3QgPSBub2RlLCByYWRpdXMgPSBkMjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG4gICAgfSxcblxuICAgIG9uOiBmdW5jdGlvbihuYW1lLCBfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyAoZXZlbnQub24obmFtZSwgXyksIHNpbXVsYXRpb24pIDogZXZlbnQub24obmFtZSk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZVwiO1xuaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5pbXBvcnQge3gsIHl9IGZyb20gXCIuL3NpbXVsYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyxcbiAgICAgIG5vZGUsXG4gICAgICBhbHBoYSxcbiAgICAgIHN0cmVuZ3RoID0gY29uc3RhbnQoLTMwKSxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlTWluMiA9IDEsXG4gICAgICBkaXN0YW5jZU1heDIgPSBJbmZpbml0eSxcbiAgICAgIHRoZXRhMiA9IDAuODE7XG5cbiAgZnVuY3Rpb24gZm9yY2UoXykge1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCB0cmVlID0gcXVhZHRyZWUobm9kZXMsIHgsIHkpLnZpc2l0QWZ0ZXIoYWNjdW11bGF0ZSk7XG4gICAgZm9yIChhbHBoYSA9IF8sIGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHRyZWUudmlzaXQoYXBwbHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgc3RyZW5ndGhzW25vZGUuaW5kZXhdID0gK3N0cmVuZ3RoKG5vZGUsIGksIG5vZGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjY3VtdWxhdGUocXVhZCkge1xuICAgIHZhciBzdHJlbmd0aCA9IDAsIHEsIGMsIHdlaWdodCA9IDAsIHgsIHksIGk7XG5cbiAgICAvLyBGb3IgaW50ZXJuYWwgbm9kZXMsIGFjY3VtdWxhdGUgZm9yY2VzIGZyb20gY2hpbGQgcXVhZHJhbnRzLlxuICAgIGlmIChxdWFkLmxlbmd0aCkge1xuICAgICAgZm9yICh4ID0geSA9IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGlmICgocSA9IHF1YWRbaV0pICYmIChjID0gTWF0aC5hYnMocS52YWx1ZSkpKSB7XG4gICAgICAgICAgc3RyZW5ndGggKz0gcS52YWx1ZSwgd2VpZ2h0ICs9IGMsIHggKz0gYyAqIHEueCwgeSArPSBjICogcS55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWFkLnggPSB4IC8gd2VpZ2h0O1xuICAgICAgcXVhZC55ID0geSAvIHdlaWdodDtcbiAgICB9XG5cbiAgICAvLyBGb3IgbGVhZiBub2RlcywgYWNjdW11bGF0ZSBmb3JjZXMgZnJvbSBjb2luY2lkZW50IHF1YWRyYW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHEgPSBxdWFkO1xuICAgICAgcS54ID0gcS5kYXRhLng7XG4gICAgICBxLnkgPSBxLmRhdGEueTtcbiAgICAgIGRvIHN0cmVuZ3RoICs9IHN0cmVuZ3Roc1txLmRhdGEuaW5kZXhdO1xuICAgICAgd2hpbGUgKHEgPSBxLm5leHQpO1xuICAgIH1cblxuICAgIHF1YWQudmFsdWUgPSBzdHJlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5KHF1YWQsIHgxLCBfLCB4Mikge1xuICAgIGlmICghcXVhZC52YWx1ZSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgeCA9IHF1YWQueCAtIG5vZGUueCxcbiAgICAgICAgeSA9IHF1YWQueSAtIG5vZGUueSxcbiAgICAgICAgdyA9IHgyIC0geDEsXG4gICAgICAgIGwgPSB4ICogeCArIHkgKiB5O1xuXG4gICAgLy8gQXBwbHkgdGhlIEJhcm5lcy1IdXQgYXBwcm94aW1hdGlvbiBpZiBwb3NzaWJsZS5cbiAgICAvLyBMaW1pdCBmb3JjZXMgZm9yIHZlcnkgY2xvc2Ugbm9kZXM7IHJhbmRvbWl6ZSBkaXJlY3Rpb24gaWYgY29pbmNpZGVudC5cbiAgICBpZiAodyAqIHcgLyB0aGV0YTIgPCBsKSB7XG4gICAgICBpZiAobCA8IGRpc3RhbmNlTWF4Mikge1xuICAgICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZSgpLCBsICs9IHggKiB4O1xuICAgICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZSgpLCBsICs9IHkgKiB5O1xuICAgICAgICBpZiAobCA8IGRpc3RhbmNlTWluMikgbCA9IE1hdGguc3FydChkaXN0YW5jZU1pbjIgKiBsKTtcbiAgICAgICAgbm9kZS52eCArPSB4ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgICAgbm9kZS52eSArPSB5ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgcHJvY2VzcyBwb2ludHMgZGlyZWN0bHkuXG4gICAgZWxzZSBpZiAocXVhZC5sZW5ndGggfHwgbCA+PSBkaXN0YW5jZU1heDIpIHJldHVybjtcblxuICAgIC8vIExpbWl0IGZvcmNlcyBmb3IgdmVyeSBjbG9zZSBub2RlczsgcmFuZG9taXplIGRpcmVjdGlvbiBpZiBjb2luY2lkZW50LlxuICAgIGlmIChxdWFkLmRhdGEgIT09IG5vZGUgfHwgcXVhZC5uZXh0KSB7XG4gICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZSgpLCBsICs9IHggKiB4O1xuICAgICAgaWYgKHkgPT09IDApIHkgPSBqaWdnbGUoKSwgbCArPSB5ICogeTtcbiAgICAgIGlmIChsIDwgZGlzdGFuY2VNaW4yKSBsID0gTWF0aC5zcXJ0KGRpc3RhbmNlTWluMiAqIGwpO1xuICAgIH1cblxuICAgIGRvIGlmIChxdWFkLmRhdGEgIT09IG5vZGUpIHtcbiAgICAgIHcgPSBzdHJlbmd0aHNbcXVhZC5kYXRhLmluZGV4XSAqIGFscGhhIC8gbDtcbiAgICAgIG5vZGUudnggKz0geCAqIHc7XG4gICAgICBub2RlLnZ5ICs9IHkgKiB3O1xuICAgIH0gd2hpbGUgKHF1YWQgPSBxdWFkLm5leHQpO1xuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UuZGlzdGFuY2VNaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGlzdGFuY2VNaW4yID0gXyAqIF8sIGZvcmNlKSA6IE1hdGguc3FydChkaXN0YW5jZU1pbjIpO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlTWF4ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlTWF4MiA9IF8gKiBfLCBmb3JjZSkgOiBNYXRoLnNxcnQoZGlzdGFuY2VNYXgyKTtcbiAgfTtcblxuICBmb3JjZS50aGV0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGV0YTIgPSBfICogXywgZm9yY2UpIDogTWF0aC5zcXJ0KHRoZXRhMik7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhZGl1cywgeCwgeSkge1xuICB2YXIgbm9kZXMsXG4gICAgICBzdHJlbmd0aCA9IGNvbnN0YW50KDAuMSksXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICByYWRpdXNlcztcblxuICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSByYWRpdXMgPSBjb25zdGFudCgrcmFkaXVzKTtcbiAgaWYgKHggPT0gbnVsbCkgeCA9IDA7XG4gIGlmICh5ID09IG51bGwpIHkgPSAwO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV0sXG4gICAgICAgICAgZHggPSBub2RlLnggLSB4IHx8IDFlLTYsXG4gICAgICAgICAgZHkgPSBub2RlLnkgLSB5IHx8IDFlLTYsXG4gICAgICAgICAgciA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSksXG4gICAgICAgICAgayA9IChyYWRpdXNlc1tpXSAtIHIpICogc3RyZW5ndGhzW2ldICogYWxwaGEgLyByO1xuICAgICAgbm9kZS52eCArPSBkeCAqIGs7XG4gICAgICBub2RlLnZ5ICs9IGR5ICogaztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aDtcbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobik7XG4gICAgcmFkaXVzZXMgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgcmFkaXVzZXNbaV0gPSArcmFkaXVzKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgICBzdHJlbmd0aHNbaV0gPSBpc05hTihyYWRpdXNlc1tpXSkgPyAwIDogK3N0cmVuZ3RoKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF8sIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiByYWRpdXM7XG4gIH07XG5cbiAgZm9yY2UueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gK18sIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgZm9yY2UueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gK18sIGZvcmNlKSA6IHk7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgdmFyIHN0cmVuZ3RoID0gY29uc3RhbnQoMC4xKSxcbiAgICAgIG5vZGVzLFxuICAgICAgc3RyZW5ndGhzLFxuICAgICAgeHo7XG5cbiAgaWYgKHR5cGVvZiB4ICE9PSBcImZ1bmN0aW9uXCIpIHggPSBjb25zdGFudCh4ID09IG51bGwgPyAwIDogK3gpO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS52eCArPSAoeHpbaV0gLSBub2RlLngpICogc3RyZW5ndGhzW2ldICogYWxwaGE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIHh6ID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9IGlzTmFOKHh6W2ldID0gK3gobm9kZXNbaV0sIGksIG5vZGVzKSkgPyAwIDogK3N0cmVuZ3RoKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogeDtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeSkge1xuICB2YXIgc3RyZW5ndGggPSBjb25zdGFudCgwLjEpLFxuICAgICAgbm9kZXMsXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICB5ejtcblxuICBpZiAodHlwZW9mIHkgIT09IFwiZnVuY3Rpb25cIikgeSA9IGNvbnN0YW50KHkgPT0gbnVsbCA/IDAgOiAreSk7XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLnZ5ICs9ICh5eltpXSAtIG5vZGUueSkgKiBzdHJlbmd0aHNbaV0gKiBhbHBoYTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aDtcbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobik7XG4gICAgeXogPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgc3RyZW5ndGhzW2ldID0gaXNOYU4oeXpbaV0gPSAreShub2Rlc1tpXSwgaSwgbm9kZXMpKSA/IDAgOiArc3RyZW5ndGgobm9kZXNbaV0sIGksIG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiB5O1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JjZUNlbnRlcn0gZnJvbSBcIi4vY2VudGVyXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VDb2xsaWRlfSBmcm9tIFwiLi9jb2xsaWRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VMaW5rfSBmcm9tIFwiLi9saW5rXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VNYW55Qm9keX0gZnJvbSBcIi4vbWFueUJvZHlcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JjZVJhZGlhbH0gZnJvbSBcIi4vcmFkaWFsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VTaW11bGF0aW9ufSBmcm9tIFwiLi9zaW11bGF0aW9uXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VYfSBmcm9tIFwiLi94XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VZfSBmcm9tIFwiLi95XCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31963\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-format.2edd48518003f475.bundle.js b/assets/demo/site/npm.d3-format.2edd48518003f475.bundle.js
new file mode 100644
index 00000000..7499f772
--- /dev/null
+++ b/assets/demo/site/npm.d3-format.2edd48518003f475.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[5256],{47539:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "WU": () => (/* binding */ format),\n/* harmony export */ "ZP": () => (/* binding */ defaultLocale),\n/* harmony export */ "jH": () => (/* binding */ formatPrefix)\n/* harmony export */ });\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(49044);\n\n\nvar locale;\nvar format;\nvar formatPrefix;\n\ndefaultLocale({\n decimal: ".",\n thousands: ",",\n grouping: [3],\n currency: ["$", ""],\n minus: "-"\n});\n\nfunction defaultLocale(definition) {\n locale = (0,_locale_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc1MzkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXVDOztBQUV2QztBQUNPO0FBQ0E7O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFYztBQUNmLFdBQVcsK0RBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzP2Y4YWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkZWNpbWFsOiBcIi5cIixcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl0sXG4gIG1pbnVzOiBcIi1cIlxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///47539\n')},33085:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38885);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return x = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__/* .formatDecimalParts */ .V)(Math.abs(x)), x ? x[1] : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzMwODUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFzRDs7QUFFdEQsNkJBQWUsb0NBQVM7QUFDeEIsYUFBYSw4RUFBa0I7QUFDL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9leHBvbmVudC5qcz82NDI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsUGFydHMoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33085\n')},38885:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "V": () => (/* binding */ formatDecimalParts),\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString("en").replace(/,/g, "")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns ["123", 0].\nfunction formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg4ODUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsZ0dBQWdHO0FBQ2hHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcz8yNWEzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIE1hdGguYWJzKHggPSBNYXRoLnJvdW5kKHgpKSA+PSAxZTIxXG4gICAgICA/IHgudG9Mb2NhbGVTdHJpbmcoXCJlblwiKS5yZXBsYWNlKC8sL2csIFwiXCIpXG4gICAgICA6IHgudG9TdHJpbmcoMTApO1xufVxuXG4vLyBDb21wdXRlcyB0aGUgZGVjaW1hbCBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQgb2YgdGhlIHNwZWNpZmllZCBudW1iZXIgeCB3aXRoXG4vLyBzaWduaWZpY2FudCBkaWdpdHMgcCwgd2hlcmUgeCBpcyBwb3NpdGl2ZSBhbmQgcCBpcyBpbiBbMSwgMjFdIG9yIHVuZGVmaW5lZC5cbi8vIEZvciBleGFtcGxlLCBmb3JtYXREZWNpbWFsUGFydHMoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApIHtcbiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XG5cbiAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICByZXR1cm4gW1xuICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgK3guc2xpY2UoaSArIDEpXG4gIF07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38885\n')},46196:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ formatSpecifier),\n/* harmony export */ "v": () => (/* binding */ FormatSpecifier)\n/* harmony export */ });\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? " " : specifier.fill + "";\n this.align = specifier.align === undefined ? ">" : specifier.align + "";\n this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";\n this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? "" : specifier.type + "";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? "0" : "")\n + (this.width === undefined ? "" : Math.max(1, this.width | 0))\n + (this.comma ? "," : "")\n + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))\n + (this.trim ? "~" : "")\n + this.type;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYxOTYuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSx1REFBdUQ7O0FBRWhEO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanM/NDlkOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgaWYgKCEobWF0Y2ggPSByZS5leGVjKHNwZWNpZmllcikpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdDogXCIgKyBzcGVjaWZpZXIpO1xuICB2YXIgbWF0Y2g7XG4gIHJldHVybiBuZXcgRm9ybWF0U3BlY2lmaWVyKHtcbiAgICBmaWxsOiBtYXRjaFsxXSxcbiAgICBhbGlnbjogbWF0Y2hbMl0sXG4gICAgc2lnbjogbWF0Y2hbM10sXG4gICAgc3ltYm9sOiBtYXRjaFs0XSxcbiAgICB6ZXJvOiBtYXRjaFs1XSxcbiAgICB3aWR0aDogbWF0Y2hbNl0sXG4gICAgY29tbWE6IG1hdGNoWzddLFxuICAgIHByZWNpc2lvbjogbWF0Y2hbOF0gJiYgbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgdHJpbTogbWF0Y2hbOV0sXG4gICAgdHlwZTogbWF0Y2hbMTBdXG4gIH0pO1xufVxuXG5mb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG5leHBvcnQgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICB0aGlzLmZpbGwgPSBzcGVjaWZpZXIuZmlsbCA9PT0gdW5kZWZpbmVkID8gXCIgXCIgOiBzcGVjaWZpZXIuZmlsbCArIFwiXCI7XG4gIHRoaXMuYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24gPT09IHVuZGVmaW5lZCA/IFwiPlwiIDogc3BlY2lmaWVyLmFsaWduICsgXCJcIjtcbiAgdGhpcy5zaWduID0gc3BlY2lmaWVyLnNpZ24gPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogc3BlY2lmaWVyLnNpZ24gKyBcIlwiO1xuICB0aGlzLnN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIuc3ltYm9sICsgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFzcGVjaWZpZXIuemVybztcbiAgdGhpcy53aWR0aCA9IHNwZWNpZmllci53aWR0aCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci53aWR0aDtcbiAgdGhpcy5jb21tYSA9ICEhc3BlY2lmaWVyLmNvbW1hO1xuICB0aGlzLnByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIucHJlY2lzaW9uO1xuICB0aGlzLnRyaW0gPSAhIXNwZWNpZmllci50cmltO1xuICB0aGlzLnR5cGUgPSBzcGVjaWZpZXIudHlwZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci50eXBlICsgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09PSB1bmRlZmluZWQgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46196\n')},65594:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "F0": () => (/* reexport safe */ _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__.Z),\n/* harmony export */ "FF": () => (/* reexport safe */ _locale_js__WEBPACK_IMPORTED_MODULE_1__.Z),\n/* harmony export */ "S5": () => (/* reexport safe */ _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__.Z),\n/* harmony export */ "WU": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.WU),\n/* harmony export */ "YQ": () => (/* reexport safe */ _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__.Z),\n/* harmony export */ "Zq": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.ZP),\n/* harmony export */ "jH": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.jH),\n/* harmony export */ "vr": () => (/* reexport safe */ _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__.v),\n/* harmony export */ "zB": () => (/* reexport safe */ _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__.Z)\n/* harmony export */ });\n/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47539);\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49044);\n/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46196);\n/* harmony import */ var _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68195);\n/* harmony import */ var _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(53726);\n/* harmony import */ var _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(37655);\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU1OTQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0Y7QUFDcEM7QUFDNkI7QUFDbkI7QUFDRTtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaW5kZXguanM/ODU5MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0RGVmYXVsdExvY2FsZSwgZm9ybWF0LCBmb3JtYXRQcmVmaXh9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXRMb2NhbGV9IGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdFNwZWNpZmllciwgRm9ybWF0U3BlY2lmaWVyfSBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25GaXhlZH0gZnJvbSBcIi4vcHJlY2lzaW9uRml4ZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25QcmVmaXh9IGZyb20gXCIuL3ByZWNpc2lvblByZWZpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiLi9wcmVjaXNpb25Sb3VuZC5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65594\n')},49044:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ locale)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-format/src/exponent.js\nvar exponent = __webpack_require__(33085);\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatGroup.js\n/* harmony default export */ function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatNumerals.js\n/* harmony default export */ function formatNumerals(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-format/src/formatSpecifier.js\nvar formatSpecifier = __webpack_require__(46196);\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTrim.js\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n/* harmony default export */ function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case ".": i0 = i1 = i; break;\n case "0": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-format/src/formatDecimal.js\nvar formatDecimal = __webpack_require__(38885);\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatPrefixAuto.js\n\n\nvar prefixExponent;\n\n/* harmony default export */ function formatPrefixAuto(x, p) {\n var d = (0,formatDecimal/* formatDecimalParts */.V)(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join("0")\n : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)\n : "0." + new Array(1 - i).join("0") + (0,formatDecimal/* formatDecimalParts */.V)(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatRounded.js\n\n\n/* harmony default export */ function formatRounded(x, p) {\n var d = (0,formatDecimal/* formatDecimalParts */.V)(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join("0");\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTypes.js\n\n\n\n\n/* harmony default export */ const formatTypes = ({\n "%": function(x, p) { return (x * 100).toFixed(p); },\n "b": function(x) { return Math.round(x).toString(2); },\n "c": function(x) { return x + ""; },\n "d": formatDecimal/* default */.Z,\n "e": function(x, p) { return x.toExponential(p); },\n "f": function(x, p) { return x.toFixed(p); },\n "g": function(x, p) { return x.toPrecision(p); },\n "o": function(x) { return Math.round(x).toString(8); },\n "p": function(x, p) { return formatRounded(x * 100, p); },\n "r": formatRounded,\n "s": formatPrefixAuto,\n "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n "x": function(x) { return Math.round(x).toString(16); }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/identity.js\n/* harmony default export */ function identity(x) {\n return x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/locale.js\n\n\n\n\n\n\n\n\n\nvar map = Array.prototype.map,\n prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];\n\n/* harmony default export */ function locale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),\n currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",\n currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",\n decimal = locale.decimal === undefined ? "." : locale.decimal + "",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? "%" : locale.percent + "",\n minus = locale.minus === undefined ? "-" : locale.minus + "",\n nan = locale.nan === undefined ? "NaN" : locale.nan + "";\n\n function newFormat(specifier) {\n specifier = (0,formatSpecifier/* default */.Z)(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The "n" type is an alias for ",g".\n if (type === "n") comma = true, type = "g";\n\n // The "" type, and any invalid type, is an alias for ".12~g".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",\n suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === "c") {\n valueSuffix = formatType(value) + valueSuffix;\n value = "";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;\n valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not "0", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : "";\n\n // If the fill character is "0", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case "<": value = valuePrefix + value + valueSuffix + padding; break;\n case "=": value = valuePrefix + padding + value + valueSuffix; break;\n case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + "";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = (0,formatSpecifier/* default */.Z)(specifier), specifier.type = "f", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor((0,exponent/* default */.Z)(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwNDQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNkJBQWUscUJBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQ2pCQSw2QkFBZSx3QkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7QUNOQTtBQUNBLDZCQUFlLG9CQUFTO0FBQ3hCLGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0EsNkJBQTZCO0FBQzdCLHNDQUFzQyxRQUFRO0FBQzlDLHNDQUFzQyxvQkFBb0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDVnNEOztBQUUvQzs7QUFFUCw2QkFBZSwwQkFBUztBQUN4QixVQUFVLDJDQUFrQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDJDQUFrQixnQ0FBZ0M7QUFDOUY7OztBQ2ZzRDs7QUFFdEQsNkJBQWUsdUJBQVM7QUFDeEIsVUFBVSwyQ0FBa0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1YrQztBQUNNO0FBQ047O0FBRS9DLGtEQUFlO0FBQ2Ysd0JBQXdCLDhCQUE4QjtBQUN0RCxxQkFBcUIsbUNBQW1DO0FBQ3hELHFCQUFxQixnQkFBZ0I7QUFDckMsT0FBTyw0QkFBYTtBQUNwQix3QkFBd0IsNEJBQTRCO0FBQ3BELHdCQUF3QixzQkFBc0I7QUFDOUMsd0JBQXdCLDBCQUEwQjtBQUNsRCxxQkFBcUIsbUNBQW1DO0FBQ3hELHdCQUF3QixPQUFPLGFBQWEsZUFBZTtBQUMzRCxPQUFPLGFBQWE7QUFDcEIsT0FBTyxnQkFBZ0I7QUFDdkIscUJBQXFCLGtEQUFrRDtBQUN2RSxxQkFBcUI7QUFDckIsQ0FBQyxFQUFDOzs7QUNsQkYsNkJBQWUsa0JBQVM7QUFDeEI7QUFDQTs7O0FDRnFDO0FBQ007QUFDTTtBQUNFO0FBQ1Y7QUFDRTtBQUNVO0FBQ2hCOztBQUVyQztBQUNBOztBQUVBLDZCQUFlLGdCQUFTO0FBQ3hCLGdGQUFnRixRQUFRLEdBQUcsV0FBVztBQUN0RztBQUNBO0FBQ0E7QUFDQSxpREFBaUQsUUFBUSxHQUFHLGNBQWM7QUFDMUU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLGtDQUFlOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxXQUFXOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsVUFBVTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbURBQW1ELGNBQWM7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsc0lBQXNJO0FBQ3RJLHNFQUFzRTtBQUN0RTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLGtDQUFlO0FBQ2xELGdEQUFnRCwyQkFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzP2ZkNjgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0TnVtZXJhbHMuanM/ZTUxMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzP2UyZjEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0UHJlZml4QXV0by5qcz9kOGQ1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFJvdW5kZWQuanM/ODg5NSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUeXBlcy5qcz9jNmUwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzPzliYmUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvbG9jYWxlLmpzP2YxM2IiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbFBhcnRzKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG59XG4iLCJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXTtcbiAgcmV0dXJuIGV4cG9uZW50IDwgMCA/IFwiMC5cIiArIG5ldyBBcnJheSgtZXhwb25lbnQpLmpvaW4oXCIwXCIpICsgY29lZmZpY2llbnRcbiAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxuICAgICAgOiBjb2VmZmljaWVudCArIG5ldyBBcnJheShleHBvbmVudCAtIGNvZWZmaWNpZW50Lmxlbmd0aCArIDIpLmpvaW4oXCIwXCIpO1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiAoeCAqIDEwMCkudG9GaXhlZChwKTsgfSxcbiAgXCJiXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMik7IH0sXG4gIFwiY1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiB4ICsgXCJcIjsgfSxcbiAgXCJkXCI6IGZvcm1hdERlY2ltYWwsXG4gIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXG4gIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcbiAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpZ24uIC0wIGlzIG5vdCBsZXNzIHRoYW4gMCwgYnV0IDEgLyAtMCBpcyFcbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDAgfHwgMSAvIHZhbHVlIDwgMDtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gbmFuIDogZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGFmdGVyIGZvcm1hdHRpbmcsIGFuZCBubyBleHBsaWNpdCBwb3NpdGl2ZSBzaWduIGlzIHJlcXVlc3RlZCwgaGlkZSB0aGUgc2lnbi5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwICYmIHNpZ24gIT09IFwiK1wiKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogbWludXMpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///49044\n')},68195:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33085);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step) {\n return Math.max(0, -(0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Math.abs(step)));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjgxOTUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFxQzs7QUFFckMsNkJBQWUsb0NBQVM7QUFDeEIsc0JBQXNCLGlFQUFRO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanM/ODM4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgLWV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///68195\n')},53726:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33085);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor((0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) / 3))) * 3 - (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Math.abs(step)));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTM3MjYuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFxQzs7QUFFckMsNkJBQWUsb0NBQVM7QUFDeEIseURBQXlELGlFQUFRLHFCQUFxQixpRUFBUTtBQUM5RiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcz8zMmNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53726\n')},37655:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33085);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(max) - (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(step)) + 1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc2NTUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFxQzs7QUFFckMsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxxQkFBcUIsaUVBQVEsUUFBUSxpRUFBUTtBQUM3QyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblJvdW5kLmpzPzIxMWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIG1heCkge1xuICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37655\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-geo.d1fee15ddf1e7879.bundle.js b/assets/demo/site/npm.d3-geo.d1fee15ddf1e7879.bundle.js
new file mode 100644
index 00000000..8939ae8b
--- /dev/null
+++ b/assets/demo/site/npm.d3-geo.d1fee15ddf1e7879.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4267],{59039:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "FW": () => (/* reexport */ albers),\n "wk": () => (/* reexport */ albersUsa),\n "ID": () => (/* reexport */ src_area),\n "Rf": () => (/* reexport */ azimuthalEqualArea),\n "fN": () => (/* reexport */ azimuthalEqualAreaRaw),\n "aM": () => (/* reexport */ azimuthalEquidistant),\n "dz": () => (/* reexport */ azimuthalEquidistantRaw),\n "qT": () => (/* reexport */ bounds),\n "cS": () => (/* reexport */ centroid),\n "ub": () => (/* reexport */ circle),\n "o6": () => (/* reexport */ antimeridian),\n "Fh": () => (/* reexport */ clip_circle),\n "iM": () => (/* reexport */ extent),\n "LF": () => (/* reexport */ clipRectangle),\n "tJ": () => (/* reexport */ conicConformal),\n "W$": () => (/* reexport */ conicConformalRaw),\n "ET": () => (/* reexport */ conicEqualArea),\n "SQ": () => (/* reexport */ conicEqualAreaRaw),\n "ah": () => (/* reexport */ conicEquidistant),\n "nh": () => (/* reexport */ conicEquidistantRaw),\n "xk": () => (/* reexport */ contains),\n "gD": () => (/* reexport */ distance),\n "bf": () => (/* reexport */ equalEarth),\n "bw": () => (/* reexport */ equalEarthRaw),\n "ES": () => (/* reexport */ equirectangular),\n "Hw": () => (/* reexport */ equirectangularRaw),\n "Bq": () => (/* reexport */ gnomonic),\n "ot": () => (/* reexport */ gnomonicRaw),\n "S": () => (/* reexport */ graticule),\n "HV": () => (/* reexport */ graticule10),\n "NL": () => (/* reexport */ projection_identity),\n "iG": () => (/* reexport */ interpolate),\n "Jp": () => (/* reexport */ src_length),\n "mw": () => (/* reexport */ mercator),\n "z": () => (/* reexport */ mercatorRaw),\n "li": () => (/* reexport */ naturalEarth1),\n "Bh": () => (/* reexport */ naturalEarth1Raw),\n "Wv": () => (/* reexport */ orthographic),\n "jx": () => (/* reexport */ orthographicRaw),\n "l4": () => (/* reexport */ path),\n "OA": () => (/* reexport */ projection),\n "gv": () => (/* reexport */ projectionMutator),\n "w7": () => (/* reexport */ rotation),\n "kn": () => (/* reexport */ stereographic),\n "PA": () => (/* reexport */ stereographicRaw),\n "HZ": () => (/* reexport */ stream),\n "jD": () => (/* reexport */ transform),\n "Il": () => (/* reexport */ transverseMercator),\n "GN": () => (/* reexport */ transverseMercatorRaw)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/adder.js\n// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\n/* harmony default export */ function adder() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/math.js\nvar epsilon = 1e-6;\nvar epsilon2 = 1e-12;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar quarterPi = pi / 4;\nvar tau = pi * 2;\n\nvar degrees = 180 / pi;\nvar radians = pi / 180;\n\nvar abs = Math.abs;\nvar atan = Math.atan;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar floor = Math.floor;\nvar log = Math.log;\nvar pow = Math.pow;\nvar sin = Math.sin;\nvar sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nfunction haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/noop.js\nfunction noop() {}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/stream.js\nfunction streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\n/* harmony default export */ function stream(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/area.js\n\n\n\n\n\nvar areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\n/* harmony default export */ function src_area(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/cartesian.js\n\n\nfunction spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nfunction cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/bounds.js\n\n\n\n\n\n\nvar bounds_lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n bounds_lambda00, bounds_phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) bounds_lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = bounds_lambda0, range[1] = lambda1;\n },\n sphere: function() {\n bounds_lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [bounds_lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(bounds_lambda0, lambda) > angle(bounds_lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(bounds_lambda0, lambda1)) bounds_lambda0 = lambda;\n }\n } else {\n if (lambda1 >= bounds_lambda0) {\n if (lambda < bounds_lambda0) bounds_lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(bounds_lambda0, lambda) > angle(bounds_lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(bounds_lambda0, lambda1)) bounds_lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [bounds_lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = bounds_lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n bounds_lambda00 = lambda, bounds_phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(bounds_lambda00, bounds_phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) bounds_lambda0 = -(lambda1 = 180);\n range[0] = bounds_lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\n/* harmony default export */ function bounds(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(bounds_lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, bounds_lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return bounds_lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[bounds_lambda0, phi0], [lambda1, phi1]];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/centroid.js\n\n\n\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n centroid_lambda00, centroid_phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(centroid_lambda00, centroid_phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n centroid_lambda00 = lambda, centroid_phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\n/* harmony default export */ function centroid(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/compose.js\n/* harmony default export */ function compose(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/rotation.js\n\n\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\n/* harmony default export */ function rotation(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/circle.js\n\n\n\n\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\n/* harmony default export */ function circle() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: "Polygon", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === "function" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === "function" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/buffer.js\n\n\n/* harmony default export */ function buffer() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/pointEqual.js\n\n\n/* harmony default export */ function pointEqual(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/rejoin.js\n\n\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\n/* harmony default export */ function rejoin(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n rejoin_link(subject);\n rejoin_link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction rejoin_link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/polygonContains.js\n\n\n\n\nvar sum = adder();\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\n/* harmony default export */ function polygonContains(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-array/src/index.js + 31 modules\nvar src = __webpack_require__(33016);\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/index.js\n\n\n\n\n\n\n/* harmony default export */ function clip(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = buffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = (0,src/* merge */.TS)(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n rejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/antimeridian.js\n\n\n\n/* harmony default export */ const antimeridian = (clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n));\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/circle.js\n\n\n\n\n\n\n/* harmony default export */ function clip_circle(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle\'s bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/line.js\n/* harmony default export */ function line(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/rectangle.js\n\n\n\n\n\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = buffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = (0,src/* merge */.TS)(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n rejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (line(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/clip/extent.js\n\n\n/* harmony default export */ function extent() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/length.js\n\n\n\n\n\nvar lengthSum = adder(),\n length_lambda0,\n length_sinPhi0,\n length_cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n length_lambda0 = lambda, length_sinPhi0 = sin(phi), length_cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - length_lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = length_cosPhi0 * sinPhi - length_sinPhi0 * cosPhi * cosDelta,\n z = length_sinPhi0 * sinPhi + length_cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n length_lambda0 = lambda, length_sinPhi0 = sinPhi, length_cosPhi0 = cosPhi;\n}\n\n/* harmony default export */ function src_length(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/distance.js\n\n\nvar coordinates = [null, null],\n object = {type: "LineString", coordinates: coordinates};\n\n/* harmony default export */ function distance(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return src_length(object);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/contains.js\n\n\n\n\nvar containsObjectType = {\n Feature: function(object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function(object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n return false;\n }\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ao, bo, ab;\n for (var i = 0, n = coordinates.length; i < n; i++) {\n bo = distance(coordinates[i], point);\n if (bo === 0) return true;\n if (i > 0) {\n ab = distance(coordinates[i], coordinates[i - 1]);\n if (\n ab > 0 &&\n ao <= ab &&\n bo <= ab &&\n (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n )\n return true;\n }\n ao = bo;\n }\n return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n}\n\n/* harmony default export */ function contains(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/graticule.js\n\n\n\nfunction graticuleX(y0, y1, dy) {\n var y = (0,src/* range */.w6)(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = (0,src/* range */.w6)(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: "MultiLineString", coordinates: lines()};\n }\n\n function lines() {\n return (0,src/* range */.w6)(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat((0,src/* range */.w6)(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat((0,src/* range */.w6)(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat((0,src/* range */.w6)(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: "Polygon",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nfunction graticule10() {\n return graticule()();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/interpolate.js\n\n\n/* harmony default export */ function interpolate(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/identity.js\n/* harmony default export */ function identity(x) {\n return x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/area.js\n\n\n\n\nvar area_areaSum = adder(),\n area_areaRingSum = adder(),\n x00,\n y00,\n area_x0,\n area_y0;\n\nvar area_areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n area_areaStream.lineStart = area_areaRingStart;\n area_areaStream.lineEnd = area_areaRingEnd;\n },\n polygonEnd: function() {\n area_areaStream.lineStart = area_areaStream.lineEnd = area_areaStream.point = noop;\n area_areaSum.add(abs(area_areaRingSum));\n area_areaRingSum.reset();\n },\n result: function() {\n var area = area_areaSum / 2;\n area_areaSum.reset();\n return area;\n }\n};\n\nfunction area_areaRingStart() {\n area_areaStream.point = area_areaPointFirst;\n}\n\nfunction area_areaPointFirst(x, y) {\n area_areaStream.point = area_areaPoint;\n x00 = area_x0 = x, y00 = area_y0 = y;\n}\n\nfunction area_areaPoint(x, y) {\n area_areaRingSum.add(area_y0 * x - area_x0 * y);\n area_x0 = x, area_y0 = y;\n}\n\nfunction area_areaRingEnd() {\n area_areaPoint(x00, y00);\n}\n\n/* harmony default export */ const path_area = (area_areaStream);\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/bounds.js\n\n\nvar bounds_x0 = Infinity,\n bounds_y0 = bounds_x0,\n x1 = -bounds_x0,\n y1 = x1;\n\nvar bounds_boundsStream = {\n point: bounds_boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[bounds_x0, bounds_y0], [x1, y1]];\n x1 = y1 = -(bounds_y0 = bounds_x0 = Infinity);\n return bounds;\n }\n};\n\nfunction bounds_boundsPoint(x, y) {\n if (x < bounds_x0) bounds_x0 = x;\n if (x > x1) x1 = x;\n if (y < bounds_y0) bounds_y0 = y;\n if (y > y1) y1 = y;\n}\n\n/* harmony default export */ const path_bounds = (bounds_boundsStream);\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/centroid.js\n\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar centroid_X0 = 0,\n centroid_Y0 = 0,\n centroid_Z0 = 0,\n centroid_X1 = 0,\n centroid_Y1 = 0,\n centroid_Z1 = 0,\n centroid_X2 = 0,\n centroid_Y2 = 0,\n centroid_Z2 = 0,\n centroid_x00,\n centroid_y00,\n centroid_x0,\n centroid_y0;\n\nvar centroid_centroidStream = {\n point: centroid_centroidPoint,\n lineStart: centroid_centroidLineStart,\n lineEnd: centroid_centroidLineEnd,\n polygonStart: function() {\n centroid_centroidStream.lineStart = centroid_centroidRingStart;\n centroid_centroidStream.lineEnd = centroid_centroidRingEnd;\n },\n polygonEnd: function() {\n centroid_centroidStream.point = centroid_centroidPoint;\n centroid_centroidStream.lineStart = centroid_centroidLineStart;\n centroid_centroidStream.lineEnd = centroid_centroidLineEnd;\n },\n result: function() {\n var centroid = centroid_Z2 ? [centroid_X2 / centroid_Z2, centroid_Y2 / centroid_Z2]\n : centroid_Z1 ? [centroid_X1 / centroid_Z1, centroid_Y1 / centroid_Z1]\n : centroid_Z0 ? [centroid_X0 / centroid_Z0, centroid_Y0 / centroid_Z0]\n : [NaN, NaN];\n centroid_X0 = centroid_Y0 = centroid_Z0 =\n centroid_X1 = centroid_Y1 = centroid_Z1 =\n centroid_X2 = centroid_Y2 = centroid_Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroid_centroidPoint(x, y) {\n centroid_X0 += x;\n centroid_Y0 += y;\n ++centroid_Z0;\n}\n\nfunction centroid_centroidLineStart() {\n centroid_centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroid_centroidStream.point = centroidPointLine;\n centroid_centroidPoint(centroid_x0 = x, centroid_y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - centroid_x0, dy = y - centroid_y0, z = sqrt(dx * dx + dy * dy);\n centroid_X1 += z * (centroid_x0 + x) / 2;\n centroid_Y1 += z * (centroid_y0 + y) / 2;\n centroid_Z1 += z;\n centroid_centroidPoint(centroid_x0 = x, centroid_y0 = y);\n}\n\nfunction centroid_centroidLineEnd() {\n centroid_centroidStream.point = centroid_centroidPoint;\n}\n\nfunction centroid_centroidRingStart() {\n centroid_centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroid_centroidRingEnd() {\n centroidPointRing(centroid_x00, centroid_y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroid_centroidStream.point = centroidPointRing;\n centroid_centroidPoint(centroid_x00 = centroid_x0 = x, centroid_y00 = centroid_y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - centroid_x0,\n dy = y - centroid_y0,\n z = sqrt(dx * dx + dy * dy);\n\n centroid_X1 += z * (centroid_x0 + x) / 2;\n centroid_Y1 += z * (centroid_y0 + y) / 2;\n centroid_Z1 += z;\n\n z = centroid_y0 * x - centroid_x0 * y;\n centroid_X2 += z * (centroid_x0 + x);\n centroid_Y2 += z * (centroid_y0 + y);\n centroid_Z2 += z * 3;\n centroid_centroidPoint(centroid_x0 = x, centroid_y0 = y);\n}\n\n/* harmony default export */ const path_centroid = (centroid_centroidStream);\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/context.js\n\n\n\nfunction PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/measure.js\n\n\n\n\nvar measure_lengthSum = adder(),\n lengthRing,\n measure_x00,\n measure_y00,\n measure_x0,\n measure_y0;\n\nvar measure_lengthStream = {\n point: noop,\n lineStart: function() {\n measure_lengthStream.point = measure_lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) measure_lengthPoint(measure_x00, measure_y00);\n measure_lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +measure_lengthSum;\n measure_lengthSum.reset();\n return length;\n }\n};\n\nfunction measure_lengthPointFirst(x, y) {\n measure_lengthStream.point = measure_lengthPoint;\n measure_x00 = measure_x0 = x, measure_y00 = measure_y0 = y;\n}\n\nfunction measure_lengthPoint(x, y) {\n measure_x0 -= x, measure_y0 -= y;\n measure_lengthSum.add(sqrt(measure_x0 * measure_x0 + measure_y0 * measure_y0));\n measure_x0 = x, measure_y0 = y;\n}\n\n/* harmony default export */ const measure = (measure_lengthStream);\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/string.js\nfunction PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: string_circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push("Z");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push("M", x, ",", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push("L", x, ",", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = string_circle(this._radius);\n this._string.push("M", x, ",", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join("");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction string_circle(radius) {\n return "m0," + radius\n + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius\n + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius\n + "z";\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/path/index.js\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function path(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(path_area));\n return path_area.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(measure));\n return measure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(path_bounds));\n return path_bounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(path_centroid));\n return path_centroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/transform.js\n/* harmony default export */ function transform(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nfunction transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/fit.js\n\n\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n stream(object, projection.stream(path_bounds));\n fitBounds(path_bounds.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/resample.js\n\n\n\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\n/* harmony default export */ function resample(project, delta2) {\n return +delta2 ? resample_resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample_resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/index.js\n\n\n\n\n\n\n\n\n\n\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nfunction projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = antimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clip_circle(theta = _ * radians) : (theta = null, antimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/conic.js\n\n\n\nfunction conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/cylindricalEqualArea.js\n\n\nfunction cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/conicEqualArea.js\n\n\n\n\nfunction conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\n/* harmony default export */ function conicEqualArea() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/albers.js\n\n\n/* harmony default export */ function albers() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/albersUsa.js\n\n\n\n\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n/* harmony default export */ function albersUsa() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/azimuthal.js\n\n\nfunction azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nfunction azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/azimuthalEqualArea.js\n\n\n\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\n/* harmony default export */ function azimuthalEqualArea() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/azimuthalEquidistant.js\n\n\n\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\n/* harmony default export */ function azimuthalEquidistant() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/mercator.js\n\n\n\n\nfunction mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\n/* harmony default export */ function mercator() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nfunction mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/conicConformal.js\n\n\n\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\n/* harmony default export */ function conicConformal() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/equirectangular.js\n\n\nfunction equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\n/* harmony default export */ function equirectangular() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/conicEquidistant.js\n\n\n\n\nfunction conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\n/* harmony default export */ function conicEquidistant() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/equalEarth.js\n\n\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\n/* harmony default export */ function equalEarth() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/gnomonic.js\n\n\n\n\nfunction gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\n/* harmony default export */ function gnomonic() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/identity.js\n\n\n\n\n\n\n/* harmony default export */ function projection_identity() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/naturalEarth1.js\n\n\n\nfunction naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\n/* harmony default export */ function naturalEarth1() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/orthographic.js\n\n\n\n\nfunction orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\n/* harmony default export */ function orthographic() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/stereographic.js\n\n\n\n\nfunction stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\n/* harmony default export */ function stereographic() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/projection/transverseMercator.js\n\n\n\nfunction transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\n/* harmony default export */ function transverseMercator() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-geo/src/index.js\n\n\n\n\n\n\n // DEPRECATED! Use d3.geoIdentity().clipExtent(…).\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDbEY7QUFDSjtBQUNNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYWRkZXIuanM/NmJjMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzPzcwNjUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbm9vcC5qcz8wYmE4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3N0cmVhbS5qcz8xMTliIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2FyZWEuanM/MWQwYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jYXJ0ZXNpYW4uanM/N2I2MyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ib3VuZHMuanM/Y2QzZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jZW50cm9pZC5qcz9mYzEyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbnN0YW50LmpzPzE1OWIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY29tcG9zZS5qcz9iZGFiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3JvdGF0aW9uLmpzPzBhMmMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzPzA3OGMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9idWZmZXIuanM/MTNmNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wb2ludEVxdWFsLmpzP2MxN2EiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWpvaW4uanM/MjkyOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wb2x5Z29uQ29udGFpbnMuanM/YjU5ZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2luZGV4LmpzPzZmZGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9hbnRpbWVyaWRpYW4uanM/Zjk2NSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2NpcmNsZS5qcz81NzJlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvbGluZS5qcz81MjRhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvcmVjdGFuZ2xlLmpzPzQ3YzMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9leHRlbnQuanM/NTRlMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9sZW5ndGguanM/ZjJjOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9kaXN0YW5jZS5qcz8wZDQ2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbnRhaW5zLmpzPzI2MWUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZ3JhdGljdWxlLmpzPzczYjUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaW50ZXJwb2xhdGUuanM/NTViMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9pZGVudGl0eS5qcz8xNmFhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvYXJlYS5qcz82NWE1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvYm91bmRzLmpzP2ZkMjIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9jZW50cm9pZC5qcz8xZmVlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvY29udGV4dC5qcz82YjY2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvbWVhc3VyZS5qcz84NDE5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvc3RyaW5nLmpzP2E2NDAiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9pbmRleC5qcz83YTAxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3RyYW5zZm9ybS5qcz9iZmFkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZml0LmpzP2Q0ZmIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9yZXNhbXBsZS5qcz83NjEyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanM/YjE3YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2NvbmljLmpzPzA4NmMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jeWxpbmRyaWNhbEVxdWFsQXJlYS5qcz8wYzczIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNFcXVhbEFyZWEuanM/MTNkMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2FsYmVycy5qcz8zNGE2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzVXNhLmpzPzFjNTYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWwuanM/NDdkZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbEVxdWFsQXJlYS5qcz9iZmRhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1aWRpc3RhbnQuanM/ODFhYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL21lcmNhdG9yLmpzPzBiNmIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0NvbmZvcm1hbC5qcz82NjRhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZXF1aXJlY3Rhbmd1bGFyLmpzPzUwMGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jb25pY0VxdWlkaXN0YW50LmpzP2MwNGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzPzk0OGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9nbm9tb25pYy5qcz9kZTI1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaWRlbnRpdHkuanM/Mzc2MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL25hdHVyYWxFYXJ0aDEuanM/ODQyOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL29ydGhvZ3JhcGhpYy5qcz9hNThlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vc3RlcmVvZ3JhcGhpYy5qcz8wMzdlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzPzVjMGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaW5kZXguanM/MjI2MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBZGRzIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2l0aCB0d2ljZSB0aGUgbm9ybWFsIHByZWNpc2lvbi5cbi8vIFJlZmVyZW5jZTogSi4gUi4gU2hld2NodWssIEFkYXB0aXZlIFByZWNpc2lvbiBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljIGFuZFxuLy8gRmFzdCBSb2J1c3QgR2VvbWV0cmljIFByZWRpY2F0ZXMsIERpc2NyZXRlICYgQ29tcHV0YXRpb25hbCBHZW9tZXRyeSAxOCgzKVxuLy8gMzA14oCTMzYzICgxOTk3KS5cbi8vIENvZGUgYWRhcHRlZCBmcm9tIEdlb2dyYXBoaWNMaWIgYnkgQ2hhcmxlcyBGLiBGLiBLYXJuZXksXG4vLyBodHRwOi8vZ2VvZ3JhcGhpY2xpYi5zb3VyY2Vmb3JnZS5uZXQvXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IEFkZGVyO1xufVxuXG5mdW5jdGlvbiBBZGRlcigpIHtcbiAgdGhpcy5yZXNldCgpO1xufVxuXG5BZGRlci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBBZGRlcixcbiAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucyA9IC8vIHJvdW5kZWQgdmFsdWVcbiAgICB0aGlzLnQgPSAwOyAvLyBleGFjdCBlcnJvclxuICB9LFxuICBhZGQ6IGZ1bmN0aW9uKHkpIHtcbiAgICBhZGQodGVtcCwgeSwgdGhpcy50KTtcbiAgICBhZGQodGhpcywgdGVtcC5zLCB0aGlzLnMpO1xuICAgIGlmICh0aGlzLnMpIHRoaXMudCArPSB0ZW1wLnQ7XG4gICAgZWxzZSB0aGlzLnMgPSB0ZW1wLnQ7XG4gIH0sXG4gIHZhbHVlT2Y6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnM7XG4gIH1cbn07XG5cbnZhciB0ZW1wID0gbmV3IEFkZGVyO1xuXG5mdW5jdGlvbiBhZGQoYWRkZXIsIGEsIGIpIHtcbiAgdmFyIHggPSBhZGRlci5zID0gYSArIGIsXG4gICAgICBidiA9IHggLSBhLFxuICAgICAgYXYgPSB4IC0gYnY7XG4gIGFkZGVyLnQgPSAoYSAtIGF2KSArIChiIC0gYnYpO1xufVxuIiwiZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtNjtcbmV4cG9ydCB2YXIgZXBzaWxvbjIgPSAxZS0xMjtcbmV4cG9ydCB2YXIgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IHZhciBoYWxmUGkgPSBwaSAvIDI7XG5leHBvcnQgdmFyIHF1YXJ0ZXJQaSA9IHBpIC8gNDtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuXG5leHBvcnQgdmFyIGRlZ3JlZXMgPSAxODAgLyBwaTtcbmV4cG9ydCB2YXIgcmFkaWFucyA9IHBpIC8gMTgwO1xuXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzO1xuZXhwb3J0IHZhciBhdGFuID0gTWF0aC5hdGFuO1xuZXhwb3J0IHZhciBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgdmFyIGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IHZhciBjZWlsID0gTWF0aC5jZWlsO1xuZXhwb3J0IHZhciBleHAgPSBNYXRoLmV4cDtcbmV4cG9ydCB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuZXhwb3J0IHZhciBsb2cgPSBNYXRoLmxvZztcbmV4cG9ydCB2YXIgcG93ID0gTWF0aC5wb3c7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBzaWduID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPiAwID8gMSA6IHggPCAwID8gLTEgOiAwOyB9O1xuZXhwb3J0IHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuZXhwb3J0IHZhciB0YW4gPSBNYXRoLnRhbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gaGFsZlBpIDogeCA8IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhdmVyc2luKHgpIHtcbiAgcmV0dXJuICh4ID0gc2luKHggLyAyKSkgKiB4O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJmdW5jdGlvbiBzdHJlYW1HZW9tZXRyeShnZW9tZXRyeSwgc3RyZWFtKSB7XG4gIGlmIChnZW9tZXRyeSAmJiBzdHJlYW1HZW9tZXRyeVR5cGUuaGFzT3duUHJvcGVydHkoZ2VvbWV0cnkudHlwZSkpIHtcbiAgICBzdHJlYW1HZW9tZXRyeVR5cGVbZ2VvbWV0cnkudHlwZV0oZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH1cbn1cblxudmFyIHN0cmVhbU9iamVjdFR5cGUgPSB7XG4gIEZlYXR1cmU6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgc3RyZWFtR2VvbWV0cnkob2JqZWN0Lmdlb21ldHJ5LCBzdHJlYW0pO1xuICB9LFxuICBGZWF0dXJlQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBvYmplY3QuZmVhdHVyZXMsIGkgPSAtMSwgbiA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtR2VvbWV0cnkoZmVhdHVyZXNbaV0uZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH1cbn07XG5cbnZhciBzdHJlYW1HZW9tZXRyeVR5cGUgPSB7XG4gIFNwaGVyZTogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW0uc3BoZXJlKCk7XG4gIH0sXG4gIFBvaW50OiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIG9iamVjdCA9IG9iamVjdC5jb29yZGluYXRlcztcbiAgICBzdHJlYW0ucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7XG4gIH0sXG4gIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIG9iamVjdCA9IGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0ucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7XG4gIH0sXG4gIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgc3RyZWFtTGluZShvYmplY3QuY29vcmRpbmF0ZXMsIHN0cmVhbSwgMCk7XG4gIH0sXG4gIE11bHRpTGluZVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgc3RyZWFtLCAwKTtcbiAgfSxcbiAgUG9seWdvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW1Qb2x5Z29uKG9iamVjdC5jb29yZGluYXRlcywgc3RyZWFtKTtcbiAgfSxcbiAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBzdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0pO1xuICB9LFxuICBHZW9tZXRyeUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGdlb21ldHJpZXMgPSBvYmplY3QuZ2VvbWV0cmllcywgaSA9IC0xLCBuID0gZ2VvbWV0cmllcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIHN0cmVhbUdlb21ldHJ5KGdlb21ldHJpZXNbaV0sIHN0cmVhbSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHN0cmVhbUxpbmUoY29vcmRpbmF0ZXMsIHN0cmVhbSwgY2xvc2VkKSB7XG4gIHZhciBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGggLSBjbG9zZWQsIGNvb3JkaW5hdGU7XG4gIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgd2hpbGUgKCsraSA8IG4pIGNvb3JkaW5hdGUgPSBjb29yZGluYXRlc1tpXSwgc3RyZWFtLnBvaW50KGNvb3JkaW5hdGVbMF0sIGNvb3JkaW5hdGVbMV0sIGNvb3JkaW5hdGVbMl0pO1xuICBzdHJlYW0ubGluZUVuZCgpO1xufVxuXG5mdW5jdGlvbiBzdHJlYW1Qb2x5Z29uKGNvb3JkaW5hdGVzLCBzdHJlYW0pIHtcbiAgdmFyIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgc3RyZWFtLnBvbHlnb25TdGFydCgpO1xuICB3aGlsZSAoKytpIDwgbikgc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgc3RyZWFtLCAxKTtcbiAgc3RyZWFtLnBvbHlnb25FbmQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgaWYgKG9iamVjdCAmJiBzdHJlYW1PYmplY3RUeXBlLmhhc093blByb3BlcnR5KG9iamVjdC50eXBlKSkge1xuICAgIHN0cmVhbU9iamVjdFR5cGVbb2JqZWN0LnR5cGVdKG9iamVjdCwgc3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW1HZW9tZXRyeShvYmplY3QsIHN0cmVhbSk7XG4gIH1cbn1cbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi9hZGRlci5qc1wiO1xuaW1wb3J0IHthdGFuMiwgY29zLCBxdWFydGVyUGksIHJhZGlhbnMsIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wLmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuXG5leHBvcnQgdmFyIGFyZWFSaW5nU3VtID0gYWRkZXIoKTtcblxudmFyIGFyZWFTdW0gPSBhZGRlcigpLFxuICAgIGxhbWJkYTAwLFxuICAgIHBoaTAwLFxuICAgIGxhbWJkYTAsXG4gICAgY29zUGhpMCxcbiAgICBzaW5QaGkwO1xuXG5leHBvcnQgdmFyIGFyZWFTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVJpbmdTdW0ucmVzZXQoKTtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFSaW5nU3RhcnQ7XG4gICAgYXJlYVN0cmVhbS5saW5lRW5kID0gYXJlYVJpbmdFbmQ7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmVhUmluZyA9ICthcmVhUmluZ1N1bTtcbiAgICBhcmVhU3VtLmFkZChhcmVhUmluZyA8IDAgPyB0YXUgKyBhcmVhUmluZyA6IGFyZWFSaW5nKTtcbiAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMubGluZUVuZCA9IHRoaXMucG9pbnQgPSBub29wO1xuICB9LFxuICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgIGFyZWFTdW0uYWRkKHRhdSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFyZWFSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gYXJlYVJpbmdFbmQoKSB7XG4gIGFyZWFQb2ludChsYW1iZGEwMCwgcGhpMDApO1xufVxuXG5mdW5jdGlvbiBhcmVhUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50O1xuICBsYW1iZGEwMCA9IGxhbWJkYSwgcGhpMDAgPSBwaGk7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgbGFtYmRhMCA9IGxhbWJkYSwgY29zUGhpMCA9IGNvcyhwaGkgPSBwaGkgLyAyICsgcXVhcnRlclBpKSwgc2luUGhpMCA9IHNpbihwaGkpO1xufVxuXG5mdW5jdGlvbiBhcmVhUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBwaGkgPSBwaGkgLyAyICsgcXVhcnRlclBpOyAvLyBoYWxmIHRoZSBhbmd1bGFyIGRpc3RhbmNlIGZyb20gc291dGggcG9sZVxuXG4gIC8vIFNwaGVyaWNhbCBleGNlc3MgRSBmb3IgYSBzcGhlcmljYWwgdHJpYW5nbGUgd2l0aCB2ZXJ0aWNlczogc291dGggcG9sZSxcbiAgLy8gcHJldmlvdXMgcG9pbnQsIGN1cnJlbnQgcG9pbnQuICBVc2VzIGEgZm9ybXVsYSBkZXJpdmVkIGZyb20gQ2Fnbm9saeKAmXNcbiAgLy8gdGhlb3JlbS4gIFNlZSBUb2RodW50ZXIsIFNwaGVyaWNhbCBUcmlnLiAoMTg3MSksIFNlYy4gMTAzLCBFcS4gKDIpLlxuICB2YXIgZExhbWJkYSA9IGxhbWJkYSAtIGxhbWJkYTAsXG4gICAgICBzZExhbWJkYSA9IGRMYW1iZGEgPj0gMCA/IDEgOiAtMSxcbiAgICAgIGFkTGFtYmRhID0gc2RMYW1iZGEgKiBkTGFtYmRhLFxuICAgICAgY29zUGhpID0gY29zKHBoaSksXG4gICAgICBzaW5QaGkgPSBzaW4ocGhpKSxcbiAgICAgIGsgPSBzaW5QaGkwICogc2luUGhpLFxuICAgICAgdSA9IGNvc1BoaTAgKiBjb3NQaGkgKyBrICogY29zKGFkTGFtYmRhKSxcbiAgICAgIHYgPSBrICogc2RMYW1iZGEgKiBzaW4oYWRMYW1iZGEpO1xuICBhcmVhUmluZ1N1bS5hZGQoYXRhbjIodiwgdSkpO1xuXG4gIC8vIEFkdmFuY2UgdGhlIHByZXZpb3VzIHBvaW50cy5cbiAgbGFtYmRhMCA9IGxhbWJkYSwgY29zUGhpMCA9IGNvc1BoaSwgc2luUGhpMCA9IHNpblBoaTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGFyZWFTdW0ucmVzZXQoKTtcbiAgc3RyZWFtKG9iamVjdCwgYXJlYVN0cmVhbSk7XG4gIHJldHVybiBhcmVhU3VtICogMjtcbn1cbiIsImltcG9ydCB7YXNpbiwgYXRhbjIsIGNvcywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGhlcmljYWwoY2FydGVzaWFuKSB7XG4gIHJldHVybiBbYXRhbjIoY2FydGVzaWFuWzFdLCBjYXJ0ZXNpYW5bMF0pLCBhc2luKGNhcnRlc2lhblsyXSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuKHNwaGVyaWNhbCkge1xuICB2YXIgbGFtYmRhID0gc3BoZXJpY2FsWzBdLCBwaGkgPSBzcGhlcmljYWxbMV0sIGNvc1BoaSA9IGNvcyhwaGkpO1xuICByZXR1cm4gW2Nvc1BoaSAqIGNvcyhsYW1iZGEpLCBjb3NQaGkgKiBzaW4obGFtYmRhKSwgc2luKHBoaSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuRG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbkNyb3NzKGEsIGIpIHtcbiAgcmV0dXJuIFthWzFdICogYlsyXSAtIGFbMl0gKiBiWzFdLCBhWzJdICogYlswXSAtIGFbMF0gKiBiWzJdLCBhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdXTtcbn1cblxuLy8gVE9ETyByZXR1cm4gYVxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbkFkZEluUGxhY2UoYSwgYikge1xuICBhWzBdICs9IGJbMF0sIGFbMV0gKz0gYlsxXSwgYVsyXSArPSBiWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuU2NhbGUodmVjdG9yLCBrKSB7XG4gIHJldHVybiBbdmVjdG9yWzBdICogaywgdmVjdG9yWzFdICogaywgdmVjdG9yWzJdICoga107XG59XG5cbi8vIFRPRE8gcmV0dXJuIGRcbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGQpIHtcbiAgdmFyIGwgPSBzcXJ0KGRbMF0gKiBkWzBdICsgZFsxXSAqIGRbMV0gKyBkWzJdICogZFsyXSk7XG4gIGRbMF0gLz0gbCwgZFsxXSAvPSBsLCBkWzJdIC89IGw7XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4vYWRkZXIuanNcIjtcbmltcG9ydCB7YXJlYVN0cmVhbSwgYXJlYVJpbmdTdW19IGZyb20gXCIuL2FyZWEuanNcIjtcbmltcG9ydCB7Y2FydGVzaWFuLCBjYXJ0ZXNpYW5Dcm9zcywgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZSwgc3BoZXJpY2FsfSBmcm9tIFwiLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7YWJzLCBkZWdyZWVzLCBlcHNpbG9uLCByYWRpYW5zfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuXG52YXIgbGFtYmRhMCwgcGhpMCwgbGFtYmRhMSwgcGhpMSwgLy8gYm91bmRzXG4gICAgbGFtYmRhMiwgLy8gcHJldmlvdXMgbGFtYmRhLWNvb3JkaW5hdGVcbiAgICBsYW1iZGEwMCwgcGhpMDAsIC8vIGZpcnN0IHBvaW50XG4gICAgcDAsIC8vIHByZXZpb3VzIDNEIHBvaW50XG4gICAgZGVsdGFTdW0gPSBhZGRlcigpLFxuICAgIHJhbmdlcyxcbiAgICByYW5nZTtcblxudmFyIGJvdW5kc1N0cmVhbSA9IHtcbiAgcG9pbnQ6IGJvdW5kc1BvaW50LFxuICBsaW5lU3RhcnQ6IGJvdW5kc0xpbmVTdGFydCxcbiAgbGluZUVuZDogYm91bmRzTGluZUVuZCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNSaW5nUG9pbnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVTdGFydCA9IGJvdW5kc1JpbmdTdGFydDtcbiAgICBib3VuZHNTdHJlYW0ubGluZUVuZCA9IGJvdW5kc1JpbmdFbmQ7XG4gICAgZGVsdGFTdW0ucmVzZXQoKTtcbiAgICBhcmVhU3RyZWFtLnBvbHlnb25TdGFydCgpO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLnBvbHlnb25FbmQoKTtcbiAgICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNQb2ludDtcbiAgICBib3VuZHNTdHJlYW0ubGluZVN0YXJ0ID0gYm91bmRzTGluZVN0YXJ0O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lRW5kID0gYm91bmRzTGluZUVuZDtcbiAgICBpZiAoYXJlYVJpbmdTdW0gPCAwKSBsYW1iZGEwID0gLShsYW1iZGExID0gMTgwKSwgcGhpMCA9IC0ocGhpMSA9IDkwKTtcbiAgICBlbHNlIGlmIChkZWx0YVN1bSA+IGVwc2lsb24pIHBoaTEgPSA5MDtcbiAgICBlbHNlIGlmIChkZWx0YVN1bSA8IC1lcHNpbG9uKSBwaGkwID0gLTkwO1xuICAgIHJhbmdlWzBdID0gbGFtYmRhMCwgcmFuZ2VbMV0gPSBsYW1iZGExO1xuICB9LFxuICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApLCBwaGkwID0gLShwaGkxID0gOTApO1xuICB9XG59O1xuXG5mdW5jdGlvbiBib3VuZHNQb2ludChsYW1iZGEsIHBoaSkge1xuICByYW5nZXMucHVzaChyYW5nZSA9IFtsYW1iZGEwID0gbGFtYmRhLCBsYW1iZGExID0gbGFtYmRhXSk7XG4gIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbn1cblxuZnVuY3Rpb24gbGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIHZhciBwID0gY2FydGVzaWFuKFtsYW1iZGEgKiByYWRpYW5zLCBwaGkgKiByYWRpYW5zXSk7XG4gIGlmIChwMCkge1xuICAgIHZhciBub3JtYWwgPSBjYXJ0ZXNpYW5Dcm9zcyhwMCwgcCksXG4gICAgICAgIGVxdWF0b3JpYWwgPSBbbm9ybWFsWzFdLCAtbm9ybWFsWzBdLCAwXSxcbiAgICAgICAgaW5mbGVjdGlvbiA9IGNhcnRlc2lhbkNyb3NzKGVxdWF0b3JpYWwsIG5vcm1hbCk7XG4gICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShpbmZsZWN0aW9uKTtcbiAgICBpbmZsZWN0aW9uID0gc3BoZXJpY2FsKGluZmxlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGxhbWJkYSAtIGxhbWJkYTIsXG4gICAgICAgIHNpZ24gPSBkZWx0YSA+IDAgPyAxIDogLTEsXG4gICAgICAgIGxhbWJkYWkgPSBpbmZsZWN0aW9uWzBdICogZGVncmVlcyAqIHNpZ24sXG4gICAgICAgIHBoaWksXG4gICAgICAgIGFudGltZXJpZGlhbiA9IGFicyhkZWx0YSkgPiAxODA7XG4gICAgaWYgKGFudGltZXJpZGlhbiBeIChzaWduICogbGFtYmRhMiA8IGxhbWJkYWkgJiYgbGFtYmRhaSA8IHNpZ24gKiBsYW1iZGEpKSB7XG4gICAgICBwaGlpID0gaW5mbGVjdGlvblsxXSAqIGRlZ3JlZXM7XG4gICAgICBpZiAocGhpaSA+IHBoaTEpIHBoaTEgPSBwaGlpO1xuICAgIH0gZWxzZSBpZiAobGFtYmRhaSA9IChsYW1iZGFpICsgMzYwKSAlIDM2MCAtIDE4MCwgYW50aW1lcmlkaWFuIF4gKHNpZ24gKiBsYW1iZGEyIDwgbGFtYmRhaSAmJiBsYW1iZGFpIDwgc2lnbiAqIGxhbWJkYSkpIHtcbiAgICAgIHBoaWkgPSAtaW5mbGVjdGlvblsxXSAqIGRlZ3JlZXM7XG4gICAgICBpZiAocGhpaSA8IHBoaTApIHBoaTAgPSBwaGlpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgICAgIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xuICAgIH1cbiAgICBpZiAoYW50aW1lcmlkaWFuKSB7XG4gICAgICBpZiAobGFtYmRhIDwgbGFtYmRhMikge1xuICAgICAgICBpZiAoYW5nbGUobGFtYmRhMCwgbGFtYmRhKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYSwgbGFtYmRhMSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxhbWJkYTEgPj0gbGFtYmRhMCkge1xuICAgICAgICBpZiAobGFtYmRhIDwgbGFtYmRhMCkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgICAgaWYgKGxhbWJkYSA+IGxhbWJkYTEpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobGFtYmRhID4gbGFtYmRhMikge1xuICAgICAgICAgIGlmIChhbmdsZShsYW1iZGEwLCBsYW1iZGEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYSwgbGFtYmRhMSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYW5nZXMucHVzaChyYW5nZSA9IFtsYW1iZGEwID0gbGFtYmRhLCBsYW1iZGExID0gbGFtYmRhXSk7XG4gIH1cbiAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xuICBwMCA9IHAsIGxhbWJkYTIgPSBsYW1iZGE7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc0xpbmVTdGFydCgpIHtcbiAgYm91bmRzU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xufVxuXG5mdW5jdGlvbiBib3VuZHNMaW5lRW5kKCkge1xuICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUG9pbnQ7XG4gIHAwID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGlmIChwMCkge1xuICAgIHZhciBkZWx0YSA9IGxhbWJkYSAtIGxhbWJkYTI7XG4gICAgZGVsdGFTdW0uYWRkKGFicyhkZWx0YSkgPiAxODAgPyBkZWx0YSArIChkZWx0YSA+IDAgPyAzNjAgOiAtMzYwKSA6IGRlbHRhKTtcbiAgfSBlbHNlIHtcbiAgICBsYW1iZGEwMCA9IGxhbWJkYSwgcGhpMDAgPSBwaGk7XG4gIH1cbiAgYXJlYVN0cmVhbS5wb2ludChsYW1iZGEsIHBoaSk7XG4gIGxpbmVQb2ludChsYW1iZGEsIHBoaSk7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5saW5lU3RhcnQoKTtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ0VuZCgpIHtcbiAgYm91bmRzUmluZ1BvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG4gIGFyZWFTdHJlYW0ubGluZUVuZCgpO1xuICBpZiAoYWJzKGRlbHRhU3VtKSA+IGVwc2lsb24pIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApO1xuICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgcDAgPSBudWxsO1xufVxuXG4vLyBGaW5kcyB0aGUgbGVmdC1yaWdodCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBsb25naXR1ZGVzLlxuLy8gVGhpcyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgKGxhbWJkYTEgLSBsYW1iZGEwICsgMzYwwrApICUgMzYwwrAsIGV4Y2VwdCB0aGF0IHdlIHdhbnRcbi8vIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIMKxMTgwwrAgdG8gYmUgMzYwwrAuXG5mdW5jdGlvbiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSB7XG4gIHJldHVybiAobGFtYmRhMSAtPSBsYW1iZGEwKSA8IDAgPyBsYW1iZGExICsgMzYwIDogbGFtYmRhMTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VDb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuXG5mdW5jdGlvbiByYW5nZUNvbnRhaW5zKHJhbmdlLCB4KSB7XG4gIHJldHVybiByYW5nZVswXSA8PSByYW5nZVsxXSA/IHJhbmdlWzBdIDw9IHggJiYgeCA8PSByYW5nZVsxXSA6IHggPCByYW5nZVswXSB8fCByYW5nZVsxXSA8IHg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGZlYXR1cmUpIHtcbiAgdmFyIGksIG4sIGEsIGIsIG1lcmdlZCwgZGVsdGFNYXgsIGRlbHRhO1xuXG4gIHBoaTEgPSBsYW1iZGExID0gLShsYW1iZGEwID0gcGhpMCA9IEluZmluaXR5KTtcbiAgcmFuZ2VzID0gW107XG4gIHN0cmVhbShmZWF0dXJlLCBib3VuZHNTdHJlYW0pO1xuXG4gIC8vIEZpcnN0LCBzb3J0IHJhbmdlcyBieSB0aGVpciBtaW5pbXVtIGxvbmdpdHVkZXMuXG4gIGlmIChuID0gcmFuZ2VzLmxlbmd0aCkge1xuICAgIHJhbmdlcy5zb3J0KHJhbmdlQ29tcGFyZSk7XG5cbiAgICAvLyBUaGVuLCBtZXJnZSBhbnkgcmFuZ2VzIHRoYXQgb3ZlcmxhcC5cbiAgICBmb3IgKGkgPSAxLCBhID0gcmFuZ2VzWzBdLCBtZXJnZWQgPSBbYV07IGkgPCBuOyArK2kpIHtcbiAgICAgIGIgPSByYW5nZXNbaV07XG4gICAgICBpZiAocmFuZ2VDb250YWlucyhhLCBiWzBdKSB8fCByYW5nZUNvbnRhaW5zKGEsIGJbMV0pKSB7XG4gICAgICAgIGlmIChhbmdsZShhWzBdLCBiWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzFdID0gYlsxXTtcbiAgICAgICAgaWYgKGFuZ2xlKGJbMF0sIGFbMV0pID4gYW5nbGUoYVswXSwgYVsxXSkpIGFbMF0gPSBiWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkLnB1c2goYSA9IGIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIGZpbmQgdGhlIGxhcmdlc3QgZ2FwIGJldHdlZW4gdGhlIG1lcmdlZCByYW5nZXMuXG4gICAgLy8gVGhlIGZpbmFsIGJvdW5kaW5nIGJveCB3aWxsIGJlIHRoZSBpbnZlcnNlIG9mIHRoaXMgZ2FwLlxuICAgIGZvciAoZGVsdGFNYXggPSAtSW5maW5pdHksIG4gPSBtZXJnZWQubGVuZ3RoIC0gMSwgaSA9IDAsIGEgPSBtZXJnZWRbbl07IGkgPD0gbjsgYSA9IGIsICsraSkge1xuICAgICAgYiA9IG1lcmdlZFtpXTtcbiAgICAgIGlmICgoZGVsdGEgPSBhbmdsZShhWzFdLCBiWzBdKSkgPiBkZWx0YU1heCkgZGVsdGFNYXggPSBkZWx0YSwgbGFtYmRhMCA9IGJbMF0sIGxhbWJkYTEgPSBhWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJhbmdlcyA9IHJhbmdlID0gbnVsbDtcblxuICByZXR1cm4gbGFtYmRhMCA9PT0gSW5maW5pdHkgfHwgcGhpMCA9PT0gSW5maW5pdHlcbiAgICAgID8gW1tOYU4sIE5hTl0sIFtOYU4sIE5hTl1dXG4gICAgICA6IFtbbGFtYmRhMCwgcGhpMF0sIFtsYW1iZGExLCBwaGkxXV07XG59XG4iLCJpbXBvcnQge2FzaW4sIGF0YW4yLCBjb3MsIGRlZ3JlZXMsIGVwc2lsb24sIGVwc2lsb24yLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3AuanNcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtLmpzXCI7XG5cbnZhciBXMCwgVzEsXG4gICAgWDAsIFkwLCBaMCxcbiAgICBYMSwgWTEsIFoxLFxuICAgIFgyLCBZMiwgWjIsXG4gICAgbGFtYmRhMDAsIHBoaTAwLCAvLyBmaXJzdCBwb2ludFxuICAgIHgwLCB5MCwgejA7IC8vIHByZXZpb3VzIHBvaW50XG5cbnZhciBjZW50cm9pZFN0cmVhbSA9IHtcbiAgc3BoZXJlOiBub29wLFxuICBwb2ludDogY2VudHJvaWRQb2ludCxcbiAgbGluZVN0YXJ0OiBjZW50cm9pZExpbmVTdGFydCxcbiAgbGluZUVuZDogY2VudHJvaWRMaW5lRW5kLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVTdGFydCA9IGNlbnRyb2lkUmluZ1N0YXJ0O1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVFbmQgPSBjZW50cm9pZFJpbmdFbmQ7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVTdGFydCA9IGNlbnRyb2lkTGluZVN0YXJ0O1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVFbmQgPSBjZW50cm9pZExpbmVFbmQ7XG4gIH1cbn07XG5cbi8vIEFyaXRobWV0aWMgbWVhbiBvZiBDYXJ0ZXNpYW4gdmVjdG9ycy5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgY29zUGhpID0gY29zKHBoaSk7XG4gIGNlbnRyb2lkUG9pbnRDYXJ0ZXNpYW4oY29zUGhpICogY29zKGxhbWJkYSksIGNvc1BoaSAqIHNpbihsYW1iZGEpLCBzaW4ocGhpKSk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUG9pbnRDYXJ0ZXNpYW4oeCwgeSwgeikge1xuICArK1cwO1xuICBYMCArPSAoeCAtIFgwKSAvIFcwO1xuICBZMCArPSAoeSAtIFkwKSAvIFcwO1xuICBaMCArPSAoeiAtIFowKSAvIFcwO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVTdGFydCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZExpbmVQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVQb2ludEZpcnN0KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpO1xuICB4MCA9IGNvc1BoaSAqIGNvcyhsYW1iZGEpO1xuICB5MCA9IGNvc1BoaSAqIHNpbihsYW1iZGEpO1xuICB6MCA9IHNpbihwaGkpO1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkTGluZVBvaW50O1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgwLCB5MCwgejApO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHggPSBjb3NQaGkgKiBjb3MobGFtYmRhKSxcbiAgICAgIHkgPSBjb3NQaGkgKiBzaW4obGFtYmRhKSxcbiAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgIHcgPSBhdGFuMihzcXJ0KCh3ID0geTAgKiB6IC0gejAgKiB5KSAqIHcgKyAodyA9IHowICogeCAtIHgwICogeikgKiB3ICsgKHcgPSB4MCAqIHkgLSB5MCAqIHgpICogdyksIHgwICogeCArIHkwICogeSArIHowICogeik7XG4gIFcxICs9IHc7XG4gIFgxICs9IHcgKiAoeDAgKyAoeDAgPSB4KSk7XG4gIFkxICs9IHcgKiAoeTAgKyAoeTAgPSB5KSk7XG4gIFoxICs9IHcgKiAoejAgKyAoejAgPSB6KSk7XG4gIGNlbnRyb2lkUG9pbnRDYXJ0ZXNpYW4oeDAsIHkwLCB6MCk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZUVuZCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50O1xufVxuXG4vLyBTZWUgSi4gRS4gQnJvY2ssIFRoZSBJbmVydGlhIFRlbnNvciBmb3IgYSBTcGhlcmljYWwgVHJpYW5nbGUsXG4vLyBKLiBBcHBsaWVkIE1lY2hhbmljcyA0MiwgMjM5ICgxOTc1KS5cbmZ1bmN0aW9uIGNlbnRyb2lkUmluZ1N0YXJ0KCkge1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUmluZ1BvaW50Rmlyc3Q7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUmluZ0VuZCgpIHtcbiAgY2VudHJvaWRSaW5nUG9pbnQobGFtYmRhMDAsIHBoaTAwKTtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50O1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdQb2ludEZpcnN0KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYTAwID0gbGFtYmRhLCBwaGkwMCA9IHBoaTtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBjZW50cm9pZFN0cmVhbS5wb2ludCA9IGNlbnRyb2lkUmluZ1BvaW50O1xuICB2YXIgY29zUGhpID0gY29zKHBoaSk7XG4gIHgwID0gY29zUGhpICogY29zKGxhbWJkYSk7XG4gIHkwID0gY29zUGhpICogc2luKGxhbWJkYSk7XG4gIHowID0gc2luKHBoaSk7XG4gIGNlbnRyb2lkUG9pbnRDYXJ0ZXNpYW4oeDAsIHkwLCB6MCk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkUmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpLFxuICAgICAgeCA9IGNvc1BoaSAqIGNvcyhsYW1iZGEpLFxuICAgICAgeSA9IGNvc1BoaSAqIHNpbihsYW1iZGEpLFxuICAgICAgeiA9IHNpbihwaGkpLFxuICAgICAgY3ggPSB5MCAqIHogLSB6MCAqIHksXG4gICAgICBjeSA9IHowICogeCAtIHgwICogeixcbiAgICAgIGN6ID0geDAgKiB5IC0geTAgKiB4LFxuICAgICAgbSA9IHNxcnQoY3ggKiBjeCArIGN5ICogY3kgKyBjeiAqIGN6KSxcbiAgICAgIHcgPSBhc2luKG0pLCAvLyBsaW5lIHdlaWdodCA9IGFuZ2xlXG4gICAgICB2ID0gbSAmJiAtdyAvIG07IC8vIGFyZWEgd2VpZ2h0IG11bHRpcGxpZXJcbiAgWDIgKz0gdiAqIGN4O1xuICBZMiArPSB2ICogY3k7XG4gIFoyICs9IHYgKiBjejtcbiAgVzEgKz0gdztcbiAgWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTtcbiAgWTEgKz0gdyAqICh5MCArICh5MCA9IHkpKTtcbiAgWjEgKz0gdyAqICh6MCArICh6MCA9IHopKTtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbih4MCwgeTAsIHowKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0KSB7XG4gIFcwID0gVzEgPVxuICBYMCA9IFkwID0gWjAgPVxuICBYMSA9IFkxID0gWjEgPVxuICBYMiA9IFkyID0gWjIgPSAwO1xuICBzdHJlYW0ob2JqZWN0LCBjZW50cm9pZFN0cmVhbSk7XG5cbiAgdmFyIHggPSBYMixcbiAgICAgIHkgPSBZMixcbiAgICAgIHogPSBaMixcbiAgICAgIG0gPSB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG5cbiAgLy8gSWYgdGhlIGFyZWEtd2VpZ2h0ZWQgY2NlbnRyb2lkIGlzIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIGxlbmd0aC13ZWlnaHRlZCBjY2VudHJvaWQuXG4gIGlmIChtIDwgZXBzaWxvbjIpIHtcbiAgICB4ID0gWDEsIHkgPSBZMSwgeiA9IFoxO1xuICAgIC8vIElmIHRoZSBmZWF0dXJlIGhhcyB6ZXJvIGxlbmd0aCwgZmFsbCBiYWNrIHRvIGFyaXRobWV0aWMgbWVhbiBvZiBwb2ludCB2ZWN0b3JzLlxuICAgIGlmIChXMSA8IGVwc2lsb24pIHggPSBYMCwgeSA9IFkwLCB6ID0gWjA7XG4gICAgbSA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtcbiAgICAvLyBJZiB0aGUgZmVhdHVyZSBzdGlsbCBoYXMgYW4gdW5kZWZpbmVkIGNjZW50cm9pZCwgdGhlbiByZXR1cm4uXG4gICAgaWYgKG0gPCBlcHNpbG9uMikgcmV0dXJuIFtOYU4sIE5hTl07XG4gIH1cblxuICByZXR1cm4gW2F0YW4yKHksIHgpICogZGVncmVlcywgYXNpbih6IC8gc3FydChtKSkgKiBkZWdyZWVzXTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuXG4gIGZ1bmN0aW9uIGNvbXBvc2UoeCwgeSkge1xuICAgIHJldHVybiB4ID0gYSh4LCB5KSwgYih4WzBdLCB4WzFdKTtcbiAgfVxuXG4gIGlmIChhLmludmVydCAmJiBiLmludmVydCkgY29tcG9zZS5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPSBiLmludmVydCh4LCB5KSwgeCAmJiBhLmludmVydCh4WzBdLCB4WzFdKTtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZTtcbn1cbiIsImltcG9ydCBjb21wb3NlIGZyb20gXCIuL2NvbXBvc2UuanNcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBkZWdyZWVzLCBwaSwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcblxuZnVuY3Rpb24gcm90YXRpb25JZGVudGl0eShsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2FicyhsYW1iZGEpID4gcGkgPyBsYW1iZGEgKyBNYXRoLnJvdW5kKC1sYW1iZGEgLyB0YXUpICogdGF1IDogbGFtYmRhLCBwaGldO1xufVxuXG5yb3RhdGlvbklkZW50aXR5LmludmVydCA9IHJvdGF0aW9uSWRlbnRpdHk7XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVSYWRpYW5zKGRlbHRhTGFtYmRhLCBkZWx0YVBoaSwgZGVsdGFHYW1tYSkge1xuICByZXR1cm4gKGRlbHRhTGFtYmRhICU9IHRhdSkgPyAoZGVsdGFQaGkgfHwgZGVsdGFHYW1tYSA/IGNvbXBvc2Uocm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpLCByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKSlcbiAgICA6IHJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKSlcbiAgICA6IChkZWx0YVBoaSB8fCBkZWx0YUdhbW1hID8gcm90YXRpb25QaGlHYW1tYShkZWx0YVBoaSwgZGVsdGFHYW1tYSlcbiAgICA6IHJvdGF0aW9uSWRlbnRpdHkpO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgcmV0dXJuIGxhbWJkYSArPSBkZWx0YUxhbWJkYSwgW2xhbWJkYSA+IHBpID8gbGFtYmRhIC0gdGF1IDogbGFtYmRhIDwgLXBpID8gbGFtYmRhICsgdGF1IDogbGFtYmRhLCBwaGldO1xuICB9O1xufVxuXG5mdW5jdGlvbiByb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSkge1xuICB2YXIgcm90YXRpb24gPSBmb3J3YXJkUm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpO1xuICByb3RhdGlvbi5pbnZlcnQgPSBmb3J3YXJkUm90YXRpb25MYW1iZGEoLWRlbHRhTGFtYmRhKTtcbiAgcmV0dXJuIHJvdGF0aW9uO1xufVxuXG5mdW5jdGlvbiByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKSB7XG4gIHZhciBjb3NEZWx0YVBoaSA9IGNvcyhkZWx0YVBoaSksXG4gICAgICBzaW5EZWx0YVBoaSA9IHNpbihkZWx0YVBoaSksXG4gICAgICBjb3NEZWx0YUdhbW1hID0gY29zKGRlbHRhR2FtbWEpLFxuICAgICAgc2luRGVsdGFHYW1tYSA9IHNpbihkZWx0YUdhbW1hKTtcblxuICBmdW5jdGlvbiByb3RhdGlvbihsYW1iZGEsIHBoaSkge1xuICAgIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgICAgeCA9IGNvcyhsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB5ID0gc2luKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgICAgayA9IHogKiBjb3NEZWx0YVBoaSArIHggKiBzaW5EZWx0YVBoaTtcbiAgICByZXR1cm4gW1xuICAgICAgYXRhbjIoeSAqIGNvc0RlbHRhR2FtbWEgLSBrICogc2luRGVsdGFHYW1tYSwgeCAqIGNvc0RlbHRhUGhpIC0geiAqIHNpbkRlbHRhUGhpKSxcbiAgICAgIGFzaW4oayAqIGNvc0RlbHRhR2FtbWEgKyB5ICogc2luRGVsdGFHYW1tYSlcbiAgICBdO1xuICB9XG5cbiAgcm90YXRpb24uaW52ZXJ0ID0gZnVuY3Rpb24obGFtYmRhLCBwaGkpIHtcbiAgICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICAgIHggPSBjb3MobGFtYmRhKSAqIGNvc1BoaSxcbiAgICAgICAgeSA9IHNpbihsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB6ID0gc2luKHBoaSksXG4gICAgICAgIGsgPSB6ICogY29zRGVsdGFHYW1tYSAtIHkgKiBzaW5EZWx0YUdhbW1hO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih5ICogY29zRGVsdGFHYW1tYSArIHogKiBzaW5EZWx0YUdhbW1hLCB4ICogY29zRGVsdGFQaGkgKyBrICogc2luRGVsdGFQaGkpLFxuICAgICAgYXNpbihrICogY29zRGVsdGFQaGkgLSB4ICogc2luRGVsdGFQaGkpXG4gICAgXTtcbiAgfTtcblxuICByZXR1cm4gcm90YXRpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJvdGF0ZSkge1xuICByb3RhdGUgPSByb3RhdGVSYWRpYW5zKHJvdGF0ZVswXSAqIHJhZGlhbnMsIHJvdGF0ZVsxXSAqIHJhZGlhbnMsIHJvdGF0ZS5sZW5ndGggPiAyID8gcm90YXRlWzJdICogcmFkaWFucyA6IDApO1xuXG4gIGZ1bmN0aW9uIGZvcndhcmQoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcyA9IHJvdGF0ZShjb29yZGluYXRlc1swXSAqIHJhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogcmFkaWFucyk7XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzWzBdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzWzFdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzO1xuICB9XG5cbiAgZm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbihjb29yZGluYXRlcykge1xuICAgIGNvb3JkaW5hdGVzID0gcm90YXRlLmludmVydChjb29yZGluYXRlc1swXSAqIHJhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogcmFkaWFucyk7XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzWzBdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzWzFdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzO1xuICB9O1xuXG4gIHJldHVybiBmb3J3YXJkO1xufVxuIiwiaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWNvcywgY29zLCBkZWdyZWVzLCBlcHNpbG9uLCByYWRpYW5zLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuaW1wb3J0IHtyb3RhdGVSYWRpYW5zfSBmcm9tIFwiLi9yb3RhdGlvbi5qc1wiO1xuXG4vLyBHZW5lcmF0ZXMgYSBjaXJjbGUgY2VudGVyZWQgYXQgWzDCsCwgMMKwXSwgd2l0aCBhIGdpdmVuIHJhZGl1cyBhbmQgcHJlY2lzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZVN0cmVhbShzdHJlYW0sIHJhZGl1cywgZGVsdGEsIGRpcmVjdGlvbiwgdDAsIHQxKSB7XG4gIGlmICghZGVsdGEpIHJldHVybjtcbiAgdmFyIGNvc1JhZGl1cyA9IGNvcyhyYWRpdXMpLFxuICAgICAgc2luUmFkaXVzID0gc2luKHJhZGl1cyksXG4gICAgICBzdGVwID0gZGlyZWN0aW9uICogZGVsdGE7XG4gIGlmICh0MCA9PSBudWxsKSB7XG4gICAgdDAgPSByYWRpdXMgKyBkaXJlY3Rpb24gKiB0YXU7XG4gICAgdDEgPSByYWRpdXMgLSBzdGVwIC8gMjtcbiAgfSBlbHNlIHtcbiAgICB0MCA9IGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHQwKTtcbiAgICB0MSA9IGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHQxKTtcbiAgICBpZiAoZGlyZWN0aW9uID4gMCA/IHQwIDwgdDEgOiB0MCA+IHQxKSB0MCArPSBkaXJlY3Rpb24gKiB0YXU7XG4gIH1cbiAgZm9yICh2YXIgcG9pbnQsIHQgPSB0MDsgZGlyZWN0aW9uID4gMCA/IHQgPiB0MSA6IHQgPCB0MTsgdCAtPSBzdGVwKSB7XG4gICAgcG9pbnQgPSBzcGhlcmljYWwoW2Nvc1JhZGl1cywgLXNpblJhZGl1cyAqIGNvcyh0KSwgLXNpblJhZGl1cyAqIHNpbih0KV0pO1xuICAgIHN0cmVhbS5wb2ludChwb2ludFswXSwgcG9pbnRbMV0pO1xuICB9XG59XG5cbi8vIFJldHVybnMgdGhlIHNpZ25lZCBhbmdsZSBvZiBhIGNhcnRlc2lhbiBwb2ludCByZWxhdGl2ZSB0byBbY29zUmFkaXVzLCAwLCAwXS5cbmZ1bmN0aW9uIGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHBvaW50KSB7XG4gIHBvaW50ID0gY2FydGVzaWFuKHBvaW50KSwgcG9pbnRbMF0gLT0gY29zUmFkaXVzO1xuICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKHBvaW50KTtcbiAgdmFyIHJhZGl1cyA9IGFjb3MoLXBvaW50WzFdKTtcbiAgcmV0dXJuICgoLXBvaW50WzJdIDwgMCA/IC1yYWRpdXMgOiByYWRpdXMpICsgdGF1IC0gZXBzaWxvbikgJSB0YXU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2VudGVyID0gY29uc3RhbnQoWzAsIDBdKSxcbiAgICAgIHJhZGl1cyA9IGNvbnN0YW50KDkwKSxcbiAgICAgIHByZWNpc2lvbiA9IGNvbnN0YW50KDYpLFxuICAgICAgcmluZyxcbiAgICAgIHJvdGF0ZSxcbiAgICAgIHN0cmVhbSA9IHtwb2ludDogcG9pbnR9O1xuXG4gIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHtcbiAgICByaW5nLnB1c2goeCA9IHJvdGF0ZSh4LCB5KSk7XG4gICAgeFswXSAqPSBkZWdyZWVzLCB4WzFdICo9IGRlZ3JlZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjaXJjbGUoKSB7XG4gICAgdmFyIGMgPSBjZW50ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgciA9IHJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICogcmFkaWFucyxcbiAgICAgICAgcCA9IHByZWNpc2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpICogcmFkaWFucztcbiAgICByaW5nID0gW107XG4gICAgcm90YXRlID0gcm90YXRlUmFkaWFucygtY1swXSAqIHJhZGlhbnMsIC1jWzFdICogcmFkaWFucywgMCkuaW52ZXJ0O1xuICAgIGNpcmNsZVN0cmVhbShzdHJlYW0sIHIsIHAsIDEpO1xuICAgIGMgPSB7dHlwZTogXCJQb2x5Z29uXCIsIGNvb3JkaW5hdGVzOiBbcmluZ119O1xuICAgIHJpbmcgPSByb3RhdGUgPSBudWxsO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgY2lyY2xlLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjZW50ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFsrX1swXSwgK19bMV1dKSwgY2lyY2xlKSA6IGNlbnRlcjtcbiAgfTtcblxuICBjaXJjbGUucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBjaXJjbGUpIDogcmFkaXVzO1xuICB9O1xuXG4gIGNpcmNsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2lzaW9uID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGNpcmNsZSkgOiBwcmVjaXNpb247XG4gIH07XG5cbiAgcmV0dXJuIGNpcmNsZTtcbn1cbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbGluZXMgPSBbXSxcbiAgICAgIGxpbmU7XG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHksIG0pIHtcbiAgICAgIGxpbmUucHVzaChbeCwgeSwgbV0pO1xuICAgIH0sXG4gICAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA9IFtdKTtcbiAgICB9LFxuICAgIGxpbmVFbmQ6IG5vb3AsXG4gICAgcmVqb2luOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKSBsaW5lcy5wdXNoKGxpbmVzLnBvcCgpLmNvbmNhdChsaW5lcy5zaGlmdCgpKSk7XG4gICAgfSxcbiAgICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxpbmVzO1xuICAgICAgbGluZXMgPSBbXTtcbiAgICAgIGxpbmUgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQge2FicywgZXBzaWxvbn0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhYnMoYVswXSAtIGJbMF0pIDwgZXBzaWxvbiAmJiBhYnMoYVsxXSAtIGJbMV0pIDwgZXBzaWxvbjtcbn1cbiIsImltcG9ydCBwb2ludEVxdWFsIGZyb20gXCIuLi9wb2ludEVxdWFsLmpzXCI7XG5pbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIEludGVyc2VjdGlvbihwb2ludCwgcG9pbnRzLCBvdGhlciwgZW50cnkpIHtcbiAgdGhpcy54ID0gcG9pbnQ7XG4gIHRoaXMueiA9IHBvaW50cztcbiAgdGhpcy5vID0gb3RoZXI7IC8vIGFub3RoZXIgaW50ZXJzZWN0aW9uXG4gIHRoaXMuZSA9IGVudHJ5OyAvLyBpcyBhbiBlbnRyeT9cbiAgdGhpcy52ID0gZmFsc2U7IC8vIHZpc2l0ZWRcbiAgdGhpcy5uID0gdGhpcy5wID0gbnVsbDsgLy8gbmV4dCAmIHByZXZpb3VzXG59XG5cbi8vIEEgZ2VuZXJhbGl6ZWQgcG9seWdvbiBjbGlwcGluZyBhbGdvcml0aG06IGdpdmVuIGEgcG9seWdvbiB0aGF0IGhhcyBiZWVuIGN1dFxuLy8gaW50byBpdHMgdmlzaWJsZSBsaW5lIHNlZ21lbnRzLCBhbmQgcmVqb2lucyB0aGUgc2VnbWVudHMgYnkgaW50ZXJwb2xhdGluZ1xuLy8gYWxvbmcgdGhlIGNsaXAgZWRnZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHN0cmVhbSkge1xuICB2YXIgc3ViamVjdCA9IFtdLFxuICAgICAgY2xpcCA9IFtdLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50KSB7XG4gICAgaWYgKChuID0gc2VnbWVudC5sZW5ndGggLSAxKSA8PSAwKSByZXR1cm47XG4gICAgdmFyIG4sIHAwID0gc2VnbWVudFswXSwgcDEgPSBzZWdtZW50W25dLCB4O1xuXG4gICAgaWYgKHBvaW50RXF1YWwocDAsIHAxKSkge1xuICAgICAgaWYgKCFwMFsyXSAmJiAhcDFbMl0pIHtcbiAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBzdHJlYW0ucG9pbnQoKHAwID0gc2VnbWVudFtpXSlbMF0sIHAwWzFdKTtcbiAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaGFuZGxlIGRlZ2VuZXJhdGUgY2FzZXMgYnkgbW92aW5nIHRoZSBwb2ludFxuICAgICAgcDFbMF0gKz0gMiAqIGVwc2lsb247XG4gICAgfVxuXG4gICAgc3ViamVjdC5wdXNoKHggPSBuZXcgSW50ZXJzZWN0aW9uKHAwLCBzZWdtZW50LCBudWxsLCB0cnVlKSk7XG4gICAgY2xpcC5wdXNoKHgubyA9IG5ldyBJbnRlcnNlY3Rpb24ocDAsIG51bGwsIHgsIGZhbHNlKSk7XG4gICAgc3ViamVjdC5wdXNoKHggPSBuZXcgSW50ZXJzZWN0aW9uKHAxLCBzZWdtZW50LCBudWxsLCBmYWxzZSkpO1xuICAgIGNsaXAucHVzaCh4Lm8gPSBuZXcgSW50ZXJzZWN0aW9uKHAxLCBudWxsLCB4LCB0cnVlKSk7XG4gIH0pO1xuXG4gIGlmICghc3ViamVjdC5sZW5ndGgpIHJldHVybjtcblxuICBjbGlwLnNvcnQoY29tcGFyZUludGVyc2VjdGlvbik7XG4gIGxpbmsoc3ViamVjdCk7XG4gIGxpbmsoY2xpcCk7XG5cbiAgZm9yIChpID0gMCwgbiA9IGNsaXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgY2xpcFtpXS5lID0gc3RhcnRJbnNpZGUgPSAhc3RhcnRJbnNpZGU7XG4gIH1cblxuICB2YXIgc3RhcnQgPSBzdWJqZWN0WzBdLFxuICAgICAgcG9pbnRzLFxuICAgICAgcG9pbnQ7XG5cbiAgd2hpbGUgKDEpIHtcbiAgICAvLyBGaW5kIGZpcnN0IHVudmlzaXRlZCBpbnRlcnNlY3Rpb24uXG4gICAgdmFyIGN1cnJlbnQgPSBzdGFydCxcbiAgICAgICAgaXNTdWJqZWN0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoY3VycmVudC52KSBpZiAoKGN1cnJlbnQgPSBjdXJyZW50Lm4pID09PSBzdGFydCkgcmV0dXJuO1xuICAgIHBvaW50cyA9IGN1cnJlbnQuejtcbiAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgZG8ge1xuICAgICAgY3VycmVudC52ID0gY3VycmVudC5vLnYgPSB0cnVlO1xuICAgICAgaWYgKGN1cnJlbnQuZSkge1xuICAgICAgICBpZiAoaXNTdWJqZWN0KSB7XG4gICAgICAgICAgZm9yIChpID0gMCwgbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBuOyArK2kpIHN0cmVhbS5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLCBwb2ludFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJwb2xhdGUoY3VycmVudC54LCBjdXJyZW50Lm4ueCwgMSwgc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzU3ViamVjdCkge1xuICAgICAgICAgIHBvaW50cyA9IGN1cnJlbnQucC56O1xuICAgICAgICAgIGZvciAoaSA9IHBvaW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgc3RyZWFtLnBvaW50KChwb2ludCA9IHBvaW50c1tpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShjdXJyZW50LngsIGN1cnJlbnQucC54LCAtMSwgc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubztcbiAgICAgIHBvaW50cyA9IGN1cnJlbnQuejtcbiAgICAgIGlzU3ViamVjdCA9ICFpc1N1YmplY3Q7XG4gICAgfSB3aGlsZSAoIWN1cnJlbnQudik7XG4gICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5rKGFycmF5KSB7XG4gIGlmICghKG4gPSBhcnJheS5sZW5ndGgpKSByZXR1cm47XG4gIHZhciBuLFxuICAgICAgaSA9IDAsXG4gICAgICBhID0gYXJyYXlbMF0sXG4gICAgICBiO1xuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGEubiA9IGIgPSBhcnJheVtpXTtcbiAgICBiLnAgPSBhO1xuICAgIGEgPSBiO1xuICB9XG4gIGEubiA9IGIgPSBhcnJheVswXTtcbiAgYi5wID0gYTtcbn1cbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi9hZGRlci5qc1wiO1xuaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbkNyb3NzLCBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlfSBmcm9tIFwiLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIHBpLCBxdWFydGVyUGksIHNpZ24sIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbnZhciBzdW0gPSBhZGRlcigpO1xuXG5mdW5jdGlvbiBsb25naXR1ZGUocG9pbnQpIHtcbiAgaWYgKGFicyhwb2ludFswXSkgPD0gcGkpXG4gICAgcmV0dXJuIHBvaW50WzBdO1xuICBlbHNlXG4gICAgcmV0dXJuIHNpZ24ocG9pbnRbMF0pICogKChhYnMocG9pbnRbMF0pICsgcGkpICUgdGF1IC0gcGkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbGFtYmRhID0gbG9uZ2l0dWRlKHBvaW50KSxcbiAgICAgIHBoaSA9IHBvaW50WzFdLFxuICAgICAgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBub3JtYWwgPSBbc2luKGxhbWJkYSksIC1jb3MobGFtYmRhKSwgMF0sXG4gICAgICBhbmdsZSA9IDAsXG4gICAgICB3aW5kaW5nID0gMDtcblxuICBzdW0ucmVzZXQoKTtcblxuICBpZiAoc2luUGhpID09PSAxKSBwaGkgPSBoYWxmUGkgKyBlcHNpbG9uO1xuICBlbHNlIGlmIChzaW5QaGkgPT09IC0xKSBwaGkgPSAtaGFsZlBpIC0gZXBzaWxvbjtcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEobSA9IChyaW5nID0gcG9seWdvbltpXSkubGVuZ3RoKSkgY29udGludWU7XG4gICAgdmFyIHJpbmcsXG4gICAgICAgIG0sXG4gICAgICAgIHBvaW50MCA9IHJpbmdbbSAtIDFdLFxuICAgICAgICBsYW1iZGEwID0gbG9uZ2l0dWRlKHBvaW50MCksXG4gICAgICAgIHBoaTAgPSBwb2ludDBbMV0gLyAyICsgcXVhcnRlclBpLFxuICAgICAgICBzaW5QaGkwID0gc2luKHBoaTApLFxuICAgICAgICBjb3NQaGkwID0gY29zKHBoaTApO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBtOyArK2osIGxhbWJkYTAgPSBsYW1iZGExLCBzaW5QaGkwID0gc2luUGhpMSwgY29zUGhpMCA9IGNvc1BoaTEsIHBvaW50MCA9IHBvaW50MSkge1xuICAgICAgdmFyIHBvaW50MSA9IHJpbmdbal0sXG4gICAgICAgICAgbGFtYmRhMSA9IGxvbmdpdHVkZShwb2ludDEpLFxuICAgICAgICAgIHBoaTEgPSBwb2ludDFbMV0gLyAyICsgcXVhcnRlclBpLFxuICAgICAgICAgIHNpblBoaTEgPSBzaW4ocGhpMSksXG4gICAgICAgICAgY29zUGhpMSA9IGNvcyhwaGkxKSxcbiAgICAgICAgICBkZWx0YSA9IGxhbWJkYTEgLSBsYW1iZGEwLFxuICAgICAgICAgIHNpZ24gPSBkZWx0YSA+PSAwID8gMSA6IC0xLFxuICAgICAgICAgIGFic0RlbHRhID0gc2lnbiAqIGRlbHRhLFxuICAgICAgICAgIGFudGltZXJpZGlhbiA9IGFic0RlbHRhID4gcGksXG4gICAgICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGkxO1xuXG4gICAgICBzdW0uYWRkKGF0YW4yKGsgKiBzaWduICogc2luKGFic0RlbHRhKSwgY29zUGhpMCAqIGNvc1BoaTEgKyBrICogY29zKGFic0RlbHRhKSkpO1xuICAgICAgYW5nbGUgKz0gYW50aW1lcmlkaWFuID8gZGVsdGEgKyBzaWduICogdGF1IDogZGVsdGE7XG5cbiAgICAgIC8vIEFyZSB0aGUgbG9uZ2l0dWRlcyBlaXRoZXIgc2lkZSBvZiB0aGUgcG9pbnTigJlzIG1lcmlkaWFuIChsYW1iZGEpLFxuICAgICAgLy8gYW5kIGFyZSB0aGUgbGF0aXR1ZGVzIHNtYWxsZXIgdGhhbiB0aGUgcGFyYWxsZWwgKHBoaSk/XG4gICAgICBpZiAoYW50aW1lcmlkaWFuIF4gbGFtYmRhMCA+PSBsYW1iZGEgXiBsYW1iZGExID49IGxhbWJkYSkge1xuICAgICAgICB2YXIgYXJjID0gY2FydGVzaWFuQ3Jvc3MoY2FydGVzaWFuKHBvaW50MCksIGNhcnRlc2lhbihwb2ludDEpKTtcbiAgICAgICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShhcmMpO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY2FydGVzaWFuQ3Jvc3Mobm9ybWFsLCBhcmMpO1xuICAgICAgICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGludGVyc2VjdGlvbik7XG4gICAgICAgIHZhciBwaGlBcmMgPSAoYW50aW1lcmlkaWFuIF4gZGVsdGEgPj0gMCA/IC0xIDogMSkgKiBhc2luKGludGVyc2VjdGlvblsyXSk7XG4gICAgICAgIGlmIChwaGkgPiBwaGlBcmMgfHwgcGhpID09PSBwaGlBcmMgJiYgKGFyY1swXSB8fCBhcmNbMV0pKSB7XG4gICAgICAgICAgd2luZGluZyArPSBhbnRpbWVyaWRpYW4gXiBkZWx0YSA+PSAwID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QsIGRldGVybWluZSB3aGV0aGVyIHRoZSBTb3V0aCBwb2xlIGlzIGluc2lkZSBvciBvdXRzaWRlOlxuICAvL1xuICAvLyBJdCBpcyBpbnNpZGUgaWY6XG4gIC8vICogdGhlIHBvbHlnb24gd2luZHMgYXJvdW5kIGl0IGluIGEgY2xvY2t3aXNlIGRpcmVjdGlvbi5cbiAgLy8gKiB0aGUgcG9seWdvbiBkb2VzIG5vdCAoY3VtdWxhdGl2ZWx5KSB3aW5kIGFyb3VuZCBpdCwgYnV0IGhhcyBhIG5lZ2F0aXZlXG4gIC8vICAgKGNvdW50ZXItY2xvY2t3aXNlKSBhcmVhLlxuICAvL1xuICAvLyBTZWNvbmQsIGNvdW50IHRoZSAoc2lnbmVkKSBudW1iZXIgb2YgdGltZXMgYSBzZWdtZW50IGNyb3NzZXMgYSBsYW1iZGFcbiAgLy8gZnJvbSB0aGUgcG9pbnQgdG8gdGhlIFNvdXRoIHBvbGUuICBJZiBpdCBpcyB6ZXJvLCB0aGVuIHRoZSBwb2ludCBpcyB0aGVcbiAgLy8gc2FtZSBzaWRlIGFzIHRoZSBTb3V0aCBwb2xlLlxuXG4gIHJldHVybiAoYW5nbGUgPCAtZXBzaWxvbiB8fCBhbmdsZSA8IGVwc2lsb24gJiYgc3VtIDwgLWVwc2lsb24pIF4gKHdpbmRpbmcgJiAxKTtcbn1cbiIsImltcG9ydCBjbGlwQnVmZmVyIGZyb20gXCIuL2J1ZmZlci5qc1wiO1xuaW1wb3J0IGNsaXBSZWpvaW4gZnJvbSBcIi4vcmVqb2luLmpzXCI7XG5pbXBvcnQge2Vwc2lsb24sIGhhbGZQaX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBwb2x5Z29uQ29udGFpbnMgZnJvbSBcIi4uL3BvbHlnb25Db250YWlucy5qc1wiO1xuaW1wb3J0IHttZXJnZX0gZnJvbSBcImQzLWFycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvaW50VmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRlLCBzdGFydCkge1xuICByZXR1cm4gZnVuY3Rpb24oc2luaykge1xuICAgIHZhciBsaW5lID0gY2xpcExpbmUoc2luayksXG4gICAgICAgIHJpbmdCdWZmZXIgPSBjbGlwQnVmZmVyKCksXG4gICAgICAgIHJpbmdTaW5rID0gY2xpcExpbmUocmluZ0J1ZmZlciksXG4gICAgICAgIHBvbHlnb25TdGFydGVkID0gZmFsc2UsXG4gICAgICAgIHBvbHlnb24sXG4gICAgICAgIHNlZ21lbnRzLFxuICAgICAgICByaW5nO1xuXG4gICAgdmFyIGNsaXAgPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnRSaW5nO1xuICAgICAgICBjbGlwLmxpbmVTdGFydCA9IHJpbmdTdGFydDtcbiAgICAgICAgY2xpcC5saW5lRW5kID0gcmluZ0VuZDtcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcbiAgICAgICAgcG9seWdvbiA9IFtdO1xuICAgICAgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnQ7XG4gICAgICAgIGNsaXAubGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICBjbGlwLmxpbmVFbmQgPSBsaW5lRW5kO1xuICAgICAgICBzZWdtZW50cyA9IG1lcmdlKHNlZ21lbnRzKTtcbiAgICAgICAgdmFyIHN0YXJ0SW5zaWRlID0gcG9seWdvbkNvbnRhaW5zKHBvbHlnb24sIHN0YXJ0KTtcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHNpbmspO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5zaWRlKSB7XG4gICAgICAgICAgaWYgKCFwb2x5Z29uU3RhcnRlZCkgc2luay5wb2x5Z29uU3RhcnQoKSwgcG9seWdvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgIHNpbmsubGluZVN0YXJ0KCk7XG4gICAgICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgc2luayk7XG4gICAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvbHlnb25TdGFydGVkKSBzaW5rLnBvbHlnb25FbmQoKSwgcG9seWdvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudHMgPSBwb2x5Z29uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzaW5rLnBvbHlnb25TdGFydCgpO1xuICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzaW5rKTtcbiAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIHNpbmsucG9seWdvbkVuZCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgaWYgKHBvaW50VmlzaWJsZShsYW1iZGEsIHBoaSkpIHNpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50TGluZShsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZS5wb2ludChsYW1iZGEsIHBoaSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcC5wb2ludCA9IHBvaW50TGluZTtcbiAgICAgIGxpbmUubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUVuZCgpIHtcbiAgICAgIGNsaXAucG9pbnQgPSBwb2ludDtcbiAgICAgIGxpbmUubGluZUVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50UmluZyhsYW1iZGEsIHBoaSkge1xuICAgICAgcmluZy5wdXNoKFtsYW1iZGEsIHBoaV0pO1xuICAgICAgcmluZ1NpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdTdGFydCgpIHtcbiAgICAgIHJpbmdTaW5rLmxpbmVTdGFydCgpO1xuICAgICAgcmluZyA9IFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICBwb2ludFJpbmcocmluZ1swXVswXSwgcmluZ1swXVsxXSk7XG4gICAgICByaW5nU2luay5saW5lRW5kKCk7XG5cbiAgICAgIHZhciBjbGVhbiA9IHJpbmdTaW5rLmNsZWFuKCksXG4gICAgICAgICAgcmluZ1NlZ21lbnRzID0gcmluZ0J1ZmZlci5yZXN1bHQoKSxcbiAgICAgICAgICBpLCBuID0gcmluZ1NlZ21lbnRzLmxlbmd0aCwgbSxcbiAgICAgICAgICBzZWdtZW50LFxuICAgICAgICAgIHBvaW50O1xuXG4gICAgICByaW5nLnBvcCgpO1xuICAgICAgcG9seWdvbi5wdXNoKHJpbmcpO1xuICAgICAgcmluZyA9IG51bGw7XG5cbiAgICAgIGlmICghbikgcmV0dXJuO1xuXG4gICAgICAvLyBObyBpbnRlcnNlY3Rpb25zLlxuICAgICAgaWYgKGNsZWFuICYgMSkge1xuICAgICAgICBzZWdtZW50ID0gcmluZ1NlZ21lbnRzWzBdO1xuICAgICAgICBpZiAoKG0gPSBzZWdtZW50Lmxlbmd0aCAtIDEpID4gMCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHNpbmsucG9pbnQoKHBvaW50ID0gc2VnbWVudFtpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgICBzaW5rLmxpbmVFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlam9pbiBjb25uZWN0ZWQgc2VnbWVudHMuXG4gICAgICAvLyBUT0RPIHJldXNlIHJpbmdCdWZmZXIucmVqb2luKCk/XG4gICAgICBpZiAobiA+IDEgJiYgY2xlYW4gJiAyKSByaW5nU2VnbWVudHMucHVzaChyaW5nU2VnbWVudHMucG9wKCkuY29uY2F0KHJpbmdTZWdtZW50cy5zaGlmdCgpKSk7XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocmluZ1NlZ21lbnRzLmZpbHRlcih2YWxpZFNlZ21lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID4gMTtcbn1cblxuLy8gSW50ZXJzZWN0aW9ucyBhcmUgc29ydGVkIGFsb25nIHRoZSBjbGlwIGVkZ2UuIEZvciBib3RoIGFudGltZXJpZGlhbiBjdXR0aW5nXG4vLyBhbmQgY2lyY2xlIGNsaXBwaW5nLCB0aGUgc2FtZSBjb21wYXJpc29uIGlzIHVzZWQuXG5mdW5jdGlvbiBjb21wYXJlSW50ZXJzZWN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuICgoYSA9IGEueClbMF0gPCAwID8gYVsxXSAtIGhhbGZQaSAtIGVwc2lsb24gOiBoYWxmUGkgLSBhWzFdKVxuICAgICAgIC0gKChiID0gYi54KVswXSA8IDAgPyBiWzFdIC0gaGFsZlBpIC0gZXBzaWxvbiA6IGhhbGZQaSAtIGJbMV0pO1xufVxuIiwiaW1wb3J0IGNsaXAgZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7YWJzLCBhdGFuLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgcGksIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xpcChcbiAgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LFxuICBjbGlwQW50aW1lcmlkaWFuTGluZSxcbiAgY2xpcEFudGltZXJpZGlhbkludGVycG9sYXRlLFxuICBbLXBpLCAtaGFsZlBpXVxuKTtcblxuLy8gVGFrZXMgYSBsaW5lIGFuZCBjdXRzIGludG8gdmlzaWJsZSBzZWdtZW50cy4gUmV0dXJuIHZhbHVlczogMCAtIHRoZXJlIHdlcmVcbi8vIGludGVyc2VjdGlvbnMgb3IgdGhlIGxpbmUgd2FzIGVtcHR5OyAxIC0gbm8gaW50ZXJzZWN0aW9uczsgMiAtIHRoZXJlIHdlcmVcbi8vIGludGVyc2VjdGlvbnMsIGFuZCB0aGUgZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHMgc2hvdWxkIGJlIHJlam9pbmVkLlxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkxpbmUoc3RyZWFtKSB7XG4gIHZhciBsYW1iZGEwID0gTmFOLFxuICAgICAgcGhpMCA9IE5hTixcbiAgICAgIHNpZ24wID0gTmFOLFxuICAgICAgY2xlYW47IC8vIG5vIGludGVyc2VjdGlvbnNcblxuICByZXR1cm4ge1xuICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICBjbGVhbiA9IDE7XG4gICAgfSxcbiAgICBwb2ludDogZnVuY3Rpb24obGFtYmRhMSwgcGhpMSkge1xuICAgICAgdmFyIHNpZ24xID0gbGFtYmRhMSA+IDAgPyBwaSA6IC1waSxcbiAgICAgICAgICBkZWx0YSA9IGFicyhsYW1iZGExIC0gbGFtYmRhMCk7XG4gICAgICBpZiAoYWJzKGRlbHRhIC0gcGkpIDwgZXBzaWxvbikgeyAvLyBsaW5lIGNyb3NzZXMgYSBwb2xlXG4gICAgICAgIHN0cmVhbS5wb2ludChsYW1iZGEwLCBwaGkwID0gKHBoaTAgKyBwaGkxKSAvIDIgPiAwID8gaGFsZlBpIDogLWhhbGZQaSk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMCwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24xLCBwaGkwKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KGxhbWJkYTEsIHBoaTApO1xuICAgICAgICBjbGVhbiA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHNpZ24wICE9PSBzaWduMSAmJiBkZWx0YSA+PSBwaSkgeyAvLyBsaW5lIGNyb3NzZXMgYW50aW1lcmlkaWFuXG4gICAgICAgIGlmIChhYnMobGFtYmRhMCAtIHNpZ24wKSA8IGVwc2lsb24pIGxhbWJkYTAgLT0gc2lnbjAgKiBlcHNpbG9uOyAvLyBoYW5kbGUgZGVnZW5lcmFjaWVzXG4gICAgICAgIGlmIChhYnMobGFtYmRhMSAtIHNpZ24xKSA8IGVwc2lsb24pIGxhbWJkYTEgLT0gc2lnbjEgKiBlcHNpbG9uO1xuICAgICAgICBwaGkwID0gY2xpcEFudGltZXJpZGlhbkludGVyc2VjdChsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24wLCBwaGkwKTtcbiAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICBzdHJlYW0ucG9pbnQoc2lnbjEsIHBoaTApO1xuICAgICAgICBjbGVhbiA9IDA7XG4gICAgICB9XG4gICAgICBzdHJlYW0ucG9pbnQobGFtYmRhMCA9IGxhbWJkYTEsIHBoaTAgPSBwaGkxKTtcbiAgICAgIHNpZ24wID0gc2lnbjE7XG4gICAgfSxcbiAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICBsYW1iZGEwID0gcGhpMCA9IE5hTjtcbiAgICB9LFxuICAgIGNsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAyIC0gY2xlYW47IC8vIGlmIGludGVyc2VjdGlvbnMsIHJlam9pbiBmaXJzdCBhbmQgbGFzdCBzZWdtZW50c1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkludGVyc2VjdChsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxKSB7XG4gIHZhciBjb3NQaGkwLFxuICAgICAgY29zUGhpMSxcbiAgICAgIHNpbkxhbWJkYTBMYW1iZGExID0gc2luKGxhbWJkYTAgLSBsYW1iZGExKTtcbiAgcmV0dXJuIGFicyhzaW5MYW1iZGEwTGFtYmRhMSkgPiBlcHNpbG9uXG4gICAgICA/IGF0YW4oKHNpbihwaGkwKSAqIChjb3NQaGkxID0gY29zKHBoaTEpKSAqIHNpbihsYW1iZGExKVxuICAgICAgICAgIC0gc2luKHBoaTEpICogKGNvc1BoaTAgPSBjb3MocGhpMCkpICogc2luKGxhbWJkYTApKVxuICAgICAgICAgIC8gKGNvc1BoaTAgKiBjb3NQaGkxICogc2luTGFtYmRhMExhbWJkYTEpKVxuICAgICAgOiAocGhpMCArIHBoaTEpIC8gMjtcbn1cblxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkludGVycG9sYXRlKGZyb20sIHRvLCBkaXJlY3Rpb24sIHN0cmVhbSkge1xuICB2YXIgcGhpO1xuICBpZiAoZnJvbSA9PSBudWxsKSB7XG4gICAgcGhpID0gZGlyZWN0aW9uICogaGFsZlBpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KHBpLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludChwaSwgMCk7XG4gICAgc3RyZWFtLnBvaW50KHBpLCAtcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQoMCwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgMCk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgcGhpKTtcbiAgfSBlbHNlIGlmIChhYnMoZnJvbVswXSAtIHRvWzBdKSA+IGVwc2lsb24pIHtcbiAgICB2YXIgbGFtYmRhID0gZnJvbVswXSA8IHRvWzBdID8gcGkgOiAtcGk7XG4gICAgcGhpID0gZGlyZWN0aW9uICogbGFtYmRhIC8gMjtcbiAgICBzdHJlYW0ucG9pbnQoLWxhbWJkYSwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQoMCwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQobGFtYmRhLCBwaGkpO1xuICB9IGVsc2Uge1xuICAgIHN0cmVhbS5wb2ludCh0b1swXSwgdG9bMV0pO1xuICB9XG59XG4iLCJpbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQWRkSW5QbGFjZSwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbkRvdCwgY2FydGVzaWFuU2NhbGUsIHNwaGVyaWNhbH0gZnJvbSBcIi4uL2NhcnRlc2lhbi5qc1wiO1xuaW1wb3J0IHtjaXJjbGVTdHJlYW19IGZyb20gXCIuLi9jaXJjbGUuanNcIjtcbmltcG9ydCB7YWJzLCBjb3MsIGVwc2lsb24sIHBpLCByYWRpYW5zLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHBvaW50RXF1YWwgZnJvbSBcIi4uL3BvaW50RXF1YWwuanNcIjtcbmltcG9ydCBjbGlwIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhZGl1cykge1xuICB2YXIgY3IgPSBjb3MocmFkaXVzKSxcbiAgICAgIGRlbHRhID0gNiAqIHJhZGlhbnMsXG4gICAgICBzbWFsbFJhZGl1cyA9IGNyID4gMCxcbiAgICAgIG5vdEhlbWlzcGhlcmUgPSBhYnMoY3IpID4gZXBzaWxvbjsgLy8gVE9ETyBvcHRpbWlzZSBmb3IgdGhpcyBjb21tb24gY2FzZVxuXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlKGZyb20sIHRvLCBkaXJlY3Rpb24sIHN0cmVhbSkge1xuICAgIGNpcmNsZVN0cmVhbShzdHJlYW0sIHJhZGl1cywgZGVsdGEsIGRpcmVjdGlvbiwgZnJvbSwgdG8pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlzaWJsZShsYW1iZGEsIHBoaSkge1xuICAgIHJldHVybiBjb3MobGFtYmRhKSAqIGNvcyhwaGkpID4gY3I7XG4gIH1cblxuICAvLyBUYWtlcyBhIGxpbmUgYW5kIGN1dHMgaW50byB2aXNpYmxlIHNlZ21lbnRzLiBSZXR1cm4gdmFsdWVzIHVzZWQgZm9yIHBvbHlnb25cbiAgLy8gY2xpcHBpbmc6IDAgLSB0aGVyZSB3ZXJlIGludGVyc2VjdGlvbnMgb3IgdGhlIGxpbmUgd2FzIGVtcHR5OyAxIC0gbm9cbiAgLy8gaW50ZXJzZWN0aW9ucyAyIC0gdGhlcmUgd2VyZSBpbnRlcnNlY3Rpb25zLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IHNlZ21lbnRzXG4gIC8vIHNob3VsZCBiZSByZWpvaW5lZC5cbiAgZnVuY3Rpb24gY2xpcExpbmUoc3RyZWFtKSB7XG4gICAgdmFyIHBvaW50MCwgLy8gcHJldmlvdXMgcG9pbnRcbiAgICAgICAgYzAsIC8vIGNvZGUgZm9yIHByZXZpb3VzIHBvaW50XG4gICAgICAgIHYwLCAvLyB2aXNpYmlsaXR5IG9mIHByZXZpb3VzIHBvaW50XG4gICAgICAgIHYwMCwgLy8gdmlzaWJpbGl0eSBvZiBmaXJzdCBwb2ludFxuICAgICAgICBjbGVhbjsgLy8gbm8gaW50ZXJzZWN0aW9uc1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2MDAgPSB2MCA9IGZhbHNlO1xuICAgICAgICBjbGVhbiA9IDE7XG4gICAgICB9LFxuICAgICAgcG9pbnQ6IGZ1bmN0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgICAgIHZhciBwb2ludDEgPSBbbGFtYmRhLCBwaGldLFxuICAgICAgICAgICAgcG9pbnQyLFxuICAgICAgICAgICAgdiA9IHZpc2libGUobGFtYmRhLCBwaGkpLFxuICAgICAgICAgICAgYyA9IHNtYWxsUmFkaXVzXG4gICAgICAgICAgICAgID8gdiA/IDAgOiBjb2RlKGxhbWJkYSwgcGhpKVxuICAgICAgICAgICAgICA6IHYgPyBjb2RlKGxhbWJkYSArIChsYW1iZGEgPCAwID8gcGkgOiAtcGkpLCBwaGkpIDogMDtcbiAgICAgICAgaWYgKCFwb2ludDAgJiYgKHYwMCA9IHYwID0gdikpIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgaWYgKHYgIT09IHYwKSB7XG4gICAgICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCwgcG9pbnQxKTtcbiAgICAgICAgICBpZiAoIXBvaW50MiB8fCBwb2ludEVxdWFsKHBvaW50MCwgcG9pbnQyKSB8fCBwb2ludEVxdWFsKHBvaW50MSwgcG9pbnQyKSlcbiAgICAgICAgICAgIHBvaW50MVsyXSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHYgIT09IHYwKSB7XG4gICAgICAgICAgY2xlYW4gPSAwO1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIGdvaW5nIGluXG4gICAgICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgICAgICBwb2ludDIgPSBpbnRlcnNlY3QocG9pbnQxLCBwb2ludDApO1xuICAgICAgICAgICAgc3RyZWFtLnBvaW50KHBvaW50MlswXSwgcG9pbnQyWzFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaW5zaWRlIGdvaW5nIG91dFxuICAgICAgICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCwgcG9pbnQxKTtcbiAgICAgICAgICAgIHN0cmVhbS5wb2ludChwb2ludDJbMF0sIHBvaW50MlsxXSwgMik7XG4gICAgICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb2ludDAgPSBwb2ludDI7XG4gICAgICAgIH0gZWxzZSBpZiAobm90SGVtaXNwaGVyZSAmJiBwb2ludDAgJiYgc21hbGxSYWRpdXMgXiB2KSB7XG4gICAgICAgICAgdmFyIHQ7XG4gICAgICAgICAgLy8gSWYgdGhlIGNvZGVzIGZvciB0d28gcG9pbnRzIGFyZSBkaWZmZXJlbnQsIG9yIGFyZSBib3RoIHplcm8sXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIHRoaXMgc2VnbWVudCBpbnRlcnNlY3RzIHdpdGggdGhlIHNtYWxsIGNpcmNsZS5cbiAgICAgICAgICBpZiAoIShjICYgYzApICYmICh0ID0gaW50ZXJzZWN0KHBvaW50MSwgcG9pbnQwLCB0cnVlKSkpIHtcbiAgICAgICAgICAgIGNsZWFuID0gMDtcbiAgICAgICAgICAgIGlmIChzbWFsbFJhZGl1cykge1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzBdWzBdLCB0WzBdWzFdKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnBvaW50KHRbMV1bMF0sIHRbMV1bMV0pO1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyZWFtLnBvaW50KHRbMV1bMF0sIHRbMV1bMV0pO1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzBdWzBdLCB0WzBdWzFdLCAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHYgJiYgKCFwb2ludDAgfHwgIXBvaW50RXF1YWwocG9pbnQwLCBwb2ludDEpKSkge1xuICAgICAgICAgIHN0cmVhbS5wb2ludChwb2ludDFbMF0sIHBvaW50MVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnQwID0gcG9pbnQxLCB2MCA9IHYsIGMwID0gYztcbiAgICAgIH0sXG4gICAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHYwKSBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICBwb2ludDAgPSBudWxsO1xuICAgICAgfSxcbiAgICAgIC8vIFJlam9pbiBmaXJzdCBhbmQgbGFzdCBzZWdtZW50cyBpZiB0aGVyZSB3ZXJlIGludGVyc2VjdGlvbnMgYW5kIHRoZSBmaXJzdFxuICAgICAgLy8gYW5kIGxhc3QgcG9pbnRzIHdlcmUgdmlzaWJsZS5cbiAgICAgIGNsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFuIHwgKCh2MDAgJiYgdjApIDw8IDEpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcnNlY3RzIHRoZSBncmVhdCBjaXJjbGUgYmV0d2VlbiBhIGFuZCBiIHdpdGggdGhlIGNsaXAgY2lyY2xlLlxuICBmdW5jdGlvbiBpbnRlcnNlY3QoYSwgYiwgdHdvKSB7XG4gICAgdmFyIHBhID0gY2FydGVzaWFuKGEpLFxuICAgICAgICBwYiA9IGNhcnRlc2lhbihiKTtcblxuICAgIC8vIFdlIGhhdmUgdHdvIHBsYW5lcywgbjEucCA9IGQxIGFuZCBuMi5wID0gZDIuXG4gICAgLy8gRmluZCBpbnRlcnNlY3Rpb24gbGluZSBwKHQpID0gYzEgbjEgKyBjMiBuMiArIHQgKG4xIOKoryBuMikuXG4gICAgdmFyIG4xID0gWzEsIDAsIDBdLCAvLyBub3JtYWxcbiAgICAgICAgbjIgPSBjYXJ0ZXNpYW5Dcm9zcyhwYSwgcGIpLFxuICAgICAgICBuMm4yID0gY2FydGVzaWFuRG90KG4yLCBuMiksXG4gICAgICAgIG4xbjIgPSBuMlswXSwgLy8gY2FydGVzaWFuRG90KG4xLCBuMiksXG4gICAgICAgIGRldGVybWluYW50ID0gbjJuMiAtIG4xbjIgKiBuMW4yO1xuXG4gICAgLy8gVHdvIHBvbGFyIHBvaW50cy5cbiAgICBpZiAoIWRldGVybWluYW50KSByZXR1cm4gIXR3byAmJiBhO1xuXG4gICAgdmFyIGMxID0gIGNyICogbjJuMiAvIGRldGVybWluYW50LFxuICAgICAgICBjMiA9IC1jciAqIG4xbjIgLyBkZXRlcm1pbmFudCxcbiAgICAgICAgbjF4bjIgPSBjYXJ0ZXNpYW5Dcm9zcyhuMSwgbjIpLFxuICAgICAgICBBID0gY2FydGVzaWFuU2NhbGUobjEsIGMxKSxcbiAgICAgICAgQiA9IGNhcnRlc2lhblNjYWxlKG4yLCBjMik7XG4gICAgY2FydGVzaWFuQWRkSW5QbGFjZShBLCBCKTtcblxuICAgIC8vIFNvbHZlIHxwKHQpfF4yID0gMS5cbiAgICB2YXIgdSA9IG4xeG4yLFxuICAgICAgICB3ID0gY2FydGVzaWFuRG90KEEsIHUpLFxuICAgICAgICB1dSA9IGNhcnRlc2lhbkRvdCh1LCB1KSxcbiAgICAgICAgdDIgPSB3ICogdyAtIHV1ICogKGNhcnRlc2lhbkRvdChBLCBBKSAtIDEpO1xuXG4gICAgaWYgKHQyIDwgMCkgcmV0dXJuO1xuXG4gICAgdmFyIHQgPSBzcXJ0KHQyKSxcbiAgICAgICAgcSA9IGNhcnRlc2lhblNjYWxlKHUsICgtdyAtIHQpIC8gdXUpO1xuICAgIGNhcnRlc2lhbkFkZEluUGxhY2UocSwgQSk7XG4gICAgcSA9IHNwaGVyaWNhbChxKTtcblxuICAgIGlmICghdHdvKSByZXR1cm4gcTtcblxuICAgIC8vIFR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAgIHZhciBsYW1iZGEwID0gYVswXSxcbiAgICAgICAgbGFtYmRhMSA9IGJbMF0sXG4gICAgICAgIHBoaTAgPSBhWzFdLFxuICAgICAgICBwaGkxID0gYlsxXSxcbiAgICAgICAgejtcblxuICAgIGlmIChsYW1iZGExIDwgbGFtYmRhMCkgeiA9IGxhbWJkYTAsIGxhbWJkYTAgPSBsYW1iZGExLCBsYW1iZGExID0gejtcblxuICAgIHZhciBkZWx0YSA9IGxhbWJkYTEgLSBsYW1iZGEwLFxuICAgICAgICBwb2xhciA9IGFicyhkZWx0YSAtIHBpKSA8IGVwc2lsb24sXG4gICAgICAgIG1lcmlkaWFuID0gcG9sYXIgfHwgZGVsdGEgPCBlcHNpbG9uO1xuXG4gICAgaWYgKCFwb2xhciAmJiBwaGkxIDwgcGhpMCkgeiA9IHBoaTAsIHBoaTAgPSBwaGkxLCBwaGkxID0gejtcblxuICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpcnN0IHBvaW50IGlzIGJldHdlZW4gYSBhbmQgYi5cbiAgICBpZiAobWVyaWRpYW5cbiAgICAgICAgPyBwb2xhclxuICAgICAgICAgID8gcGhpMCArIHBoaTEgPiAwIF4gcVsxXSA8IChhYnMocVswXSAtIGxhbWJkYTApIDwgZXBzaWxvbiA/IHBoaTAgOiBwaGkxKVxuICAgICAgICAgIDogcGhpMCA8PSBxWzFdICYmIHFbMV0gPD0gcGhpMVxuICAgICAgICA6IGRlbHRhID4gcGkgXiAobGFtYmRhMCA8PSBxWzBdICYmIHFbMF0gPD0gbGFtYmRhMSkpIHtcbiAgICAgIHZhciBxMSA9IGNhcnRlc2lhblNjYWxlKHUsICgtdyArIHQpIC8gdXUpO1xuICAgICAgY2FydGVzaWFuQWRkSW5QbGFjZShxMSwgQSk7XG4gICAgICByZXR1cm4gW3EsIHNwaGVyaWNhbChxMSldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdlbmVyYXRlcyBhIDQtYml0IHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2F0aW9uIG9mIGEgcG9pbnQgcmVsYXRpdmUgdG9cbiAgLy8gdGhlIHNtYWxsIGNpcmNsZSdzIGJvdW5kaW5nIGJveC5cbiAgZnVuY3Rpb24gY29kZShsYW1iZGEsIHBoaSkge1xuICAgIHZhciByID0gc21hbGxSYWRpdXMgPyByYWRpdXMgOiBwaSAtIHJhZGl1cyxcbiAgICAgICAgY29kZSA9IDA7XG4gICAgaWYgKGxhbWJkYSA8IC1yKSBjb2RlIHw9IDE7IC8vIGxlZnRcbiAgICBlbHNlIGlmIChsYW1iZGEgPiByKSBjb2RlIHw9IDI7IC8vIHJpZ2h0XG4gICAgaWYgKHBoaSA8IC1yKSBjb2RlIHw9IDQ7IC8vIGJlbG93XG4gICAgZWxzZSBpZiAocGhpID4gcikgY29kZSB8PSA4OyAvLyBhYm92ZVxuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNsaXAodmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRlLCBzbWFsbFJhZGl1cyA/IFswLCAtcmFkaXVzXSA6IFstcGksIHJhZGl1cyAtIHBpXSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgdDAgPSAwLFxuICAgICAgdDEgPSAxLFxuICAgICAgZHggPSBieCAtIGF4LFxuICAgICAgZHkgPSBieSAtIGF5LFxuICAgICAgcjtcblxuICByID0geDAgLSBheDtcbiAgaWYgKCFkeCAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR4O1xuICBpZiAoZHggPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeCA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHgxIC0gYXg7XG4gIGlmICghZHggJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIHIgPSB5MCAtIGF5O1xuICBpZiAoIWR5ICYmIHIgPiAwKSByZXR1cm47XG4gIHIgLz0gZHk7XG4gIGlmIChkeSA8IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9IGVsc2UgaWYgKGR5ID4gMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH1cblxuICByID0geTEgLSBheTtcbiAgaWYgKCFkeSAmJiByIDwgMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9XG5cbiAgaWYgKHQwID4gMCkgYVswXSA9IGF4ICsgdDAgKiBkeCwgYVsxXSA9IGF5ICsgdDAgKiBkeTtcbiAgaWYgKHQxIDwgMSkgYlswXSA9IGF4ICsgdDEgKiBkeCwgYlsxXSA9IGF5ICsgdDEgKiBkeTtcbiAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQge2FicywgZXBzaWxvbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBjbGlwQnVmZmVyIGZyb20gXCIuL2J1ZmZlci5qc1wiO1xuaW1wb3J0IGNsaXBMaW5lIGZyb20gXCIuL2xpbmUuanNcIjtcbmltcG9ydCBjbGlwUmVqb2luIGZyb20gXCIuL3Jlam9pbi5qc1wiO1xuaW1wb3J0IHttZXJnZX0gZnJvbSBcImQzLWFycmF5XCI7XG5cbnZhciBjbGlwTWF4ID0gMWU5LCBjbGlwTWluID0gLWNsaXBNYXg7XG5cbi8vIFRPRE8gVXNlIGQzLXBvbHlnb27igJlzIHBvbHlnb25Db250YWlucyBoZXJlIGZvciB0aGUgcmluZyBjaGVjaz9cbi8vIFRPRE8gRWxpbWluYXRlIGR1cGxpY2F0ZSBidWZmZXJpbmcgaW4gY2xpcEJ1ZmZlciBhbmQgcG9seWdvbi5wdXNoP1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGlwUmVjdGFuZ2xlKHgwLCB5MCwgeDEsIHkxKSB7XG5cbiAgZnVuY3Rpb24gdmlzaWJsZSh4LCB5KSB7XG4gICAgcmV0dXJuIHgwIDw9IHggJiYgeCA8PSB4MSAmJiB5MCA8PSB5ICYmIHkgPD0geTE7XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZShmcm9tLCB0bywgZGlyZWN0aW9uLCBzdHJlYW0pIHtcbiAgICB2YXIgYSA9IDAsIGExID0gMDtcbiAgICBpZiAoZnJvbSA9PSBudWxsXG4gICAgICAgIHx8IChhID0gY29ybmVyKGZyb20sIGRpcmVjdGlvbikpICE9PSAoYTEgPSBjb3JuZXIodG8sIGRpcmVjdGlvbikpXG4gICAgICAgIHx8IGNvbXBhcmVQb2ludChmcm9tLCB0bykgPCAwIF4gZGlyZWN0aW9uID4gMCkge1xuICAgICAgZG8gc3RyZWFtLnBvaW50KGEgPT09IDAgfHwgYSA9PT0gMyA/IHgwIDogeDEsIGEgPiAxID8geTEgOiB5MCk7XG4gICAgICB3aGlsZSAoKGEgPSAoYSArIGRpcmVjdGlvbiArIDQpICUgNCkgIT09IGExKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLnBvaW50KHRvWzBdLCB0b1sxXSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29ybmVyKHAsIGRpcmVjdGlvbikge1xuICAgIHJldHVybiBhYnMocFswXSAtIHgwKSA8IGVwc2lsb24gPyBkaXJlY3Rpb24gPiAwID8gMCA6IDNcbiAgICAgICAgOiBhYnMocFswXSAtIHgxKSA8IGVwc2lsb24gPyBkaXJlY3Rpb24gPiAwID8gMiA6IDFcbiAgICAgICAgOiBhYnMocFsxXSAtIHkwKSA8IGVwc2lsb24gPyBkaXJlY3Rpb24gPiAwID8gMSA6IDBcbiAgICAgICAgOiBkaXJlY3Rpb24gPiAwID8gMyA6IDI7IC8vIGFicyhwWzFdIC0geTEpIDwgZXBzaWxvblxuICB9XG5cbiAgZnVuY3Rpb24gY29tcGFyZUludGVyc2VjdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVQb2ludChhLngsIGIueCk7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wYXJlUG9pbnQoYSwgYikge1xuICAgIHZhciBjYSA9IGNvcm5lcihhLCAxKSxcbiAgICAgICAgY2IgPSBjb3JuZXIoYiwgMSk7XG4gICAgcmV0dXJuIGNhICE9PSBjYiA/IGNhIC0gY2JcbiAgICAgICAgOiBjYSA9PT0gMCA/IGJbMV0gLSBhWzFdXG4gICAgICAgIDogY2EgPT09IDEgPyBhWzBdIC0gYlswXVxuICAgICAgICA6IGNhID09PSAyID8gYVsxXSAtIGJbMV1cbiAgICAgICAgOiBiWzBdIC0gYVswXTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgYWN0aXZlU3RyZWFtID0gc3RyZWFtLFxuICAgICAgICBidWZmZXJTdHJlYW0gPSBjbGlwQnVmZmVyKCksXG4gICAgICAgIHNlZ21lbnRzLFxuICAgICAgICBwb2x5Z29uLFxuICAgICAgICByaW5nLFxuICAgICAgICB4X18sIHlfXywgdl9fLCAvLyBmaXJzdCBwb2ludFxuICAgICAgICB4XywgeV8sIHZfLCAvLyBwcmV2aW91cyBwb2ludFxuICAgICAgICBmaXJzdCxcbiAgICAgICAgY2xlYW47XG5cbiAgICB2YXIgY2xpcFN0cmVhbSA9IHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgbGluZUVuZDogbGluZUVuZCxcbiAgICAgIHBvbHlnb25TdGFydDogcG9seWdvblN0YXJ0LFxuICAgICAgcG9seWdvbkVuZDogcG9seWdvbkVuZFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludCh4LCB5KSB7XG4gICAgICBpZiAodmlzaWJsZSh4LCB5KSkgYWN0aXZlU3RyZWFtLnBvaW50KHgsIHkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvbHlnb25JbnNpZGUoKSB7XG4gICAgICB2YXIgd2luZGluZyA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gcG9seWdvbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgcmluZyA9IHBvbHlnb25baV0sIGogPSAxLCBtID0gcmluZy5sZW5ndGgsIHBvaW50ID0gcmluZ1swXSwgYTAsIGExLCBiMCA9IHBvaW50WzBdLCBiMSA9IHBvaW50WzFdOyBqIDwgbTsgKytqKSB7XG4gICAgICAgICAgYTAgPSBiMCwgYTEgPSBiMSwgcG9pbnQgPSByaW5nW2pdLCBiMCA9IHBvaW50WzBdLCBiMSA9IHBvaW50WzFdO1xuICAgICAgICAgIGlmIChhMSA8PSB5MSkgeyBpZiAoYjEgPiB5MSAmJiAoYjAgLSBhMCkgKiAoeTEgLSBhMSkgPiAoYjEgLSBhMSkgKiAoeDAgLSBhMCkpICsrd2luZGluZzsgfVxuICAgICAgICAgIGVsc2UgeyBpZiAoYjEgPD0geTEgJiYgKGIwIC0gYTApICogKHkxIC0gYTEpIDwgKGIxIC0gYTEpICogKHgwIC0gYTApKSAtLXdpbmRpbmc7IH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2luZGluZztcbiAgICB9XG5cbiAgICAvLyBCdWZmZXIgZ2VvbWV0cnkgd2l0aGluIGEgcG9seWdvbiBhbmQgdGhlbiBjbGlwIGl0IGVuIG1hc3NlLlxuICAgIGZ1bmN0aW9uIHBvbHlnb25TdGFydCgpIHtcbiAgICAgIGFjdGl2ZVN0cmVhbSA9IGJ1ZmZlclN0cmVhbSwgc2VnbWVudHMgPSBbXSwgcG9seWdvbiA9IFtdLCBjbGVhbiA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9seWdvbkVuZCgpIHtcbiAgICAgIHZhciBzdGFydEluc2lkZSA9IHBvbHlnb25JbnNpZGUoKSxcbiAgICAgICAgICBjbGVhbkluc2lkZSA9IGNsZWFuICYmIHN0YXJ0SW5zaWRlLFxuICAgICAgICAgIHZpc2libGUgPSAoc2VnbWVudHMgPSBtZXJnZShzZWdtZW50cykpLmxlbmd0aDtcbiAgICAgIGlmIChjbGVhbkluc2lkZSB8fCB2aXNpYmxlKSB7XG4gICAgICAgIHN0cmVhbS5wb2x5Z29uU3RhcnQoKTtcbiAgICAgICAgaWYgKGNsZWFuSW5zaWRlKSB7XG4gICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGludGVycG9sYXRlKG51bGwsIG51bGwsIDEsIHN0cmVhbSk7XG4gICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgIGNsaXBSZWpvaW4oc2VnbWVudHMsIGNvbXBhcmVJbnRlcnNlY3Rpb24sIHN0YXJ0SW5zaWRlLCBpbnRlcnBvbGF0ZSwgc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0ucG9seWdvbkVuZCgpO1xuICAgICAgfVxuICAgICAgYWN0aXZlU3RyZWFtID0gc3RyZWFtLCBzZWdtZW50cyA9IHBvbHlnb24gPSByaW5nID0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lU3RhcnQoKSB7XG4gICAgICBjbGlwU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xuICAgICAgaWYgKHBvbHlnb24pIHBvbHlnb24ucHVzaChyaW5nID0gW10pO1xuICAgICAgZmlyc3QgPSB0cnVlO1xuICAgICAgdl8gPSBmYWxzZTtcbiAgICAgIHhfID0geV8gPSBOYU47XG4gICAgfVxuXG4gICAgLy8gVE9ETyByYXRoZXIgdGhhbiBzcGVjaWFsLWNhc2UgcG9seWdvbnMsIHNpbXBseSBoYW5kbGUgdGhlbSBzZXBhcmF0ZWx5LlxuICAgIC8vIElkZWFsbHksIGNvaW5jaWRlbnQgaW50ZXJzZWN0aW9uIHBvaW50cyBzaG91bGQgYmUgaml0dGVyZWQgdG8gYXZvaWRcbiAgICAvLyBjbGlwcGluZyBpc3N1ZXMuXG4gICAgZnVuY3Rpb24gbGluZUVuZCgpIHtcbiAgICAgIGlmIChzZWdtZW50cykge1xuICAgICAgICBsaW5lUG9pbnQoeF9fLCB5X18pO1xuICAgICAgICBpZiAodl9fICYmIHZfKSBidWZmZXJTdHJlYW0ucmVqb2luKCk7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYnVmZmVyU3RyZWFtLnJlc3VsdCgpKTtcbiAgICAgIH1cbiAgICAgIGNsaXBTdHJlYW0ucG9pbnQgPSBwb2ludDtcbiAgICAgIGlmICh2XykgYWN0aXZlU3RyZWFtLmxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lUG9pbnQoeCwgeSkge1xuICAgICAgdmFyIHYgPSB2aXNpYmxlKHgsIHkpO1xuICAgICAgaWYgKHBvbHlnb24pIHJpbmcucHVzaChbeCwgeV0pO1xuICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIHhfXyA9IHgsIHlfXyA9IHksIHZfXyA9IHY7XG4gICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgYWN0aXZlU3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgJiYgdl8pIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGEgPSBbeF8gPSBNYXRoLm1heChjbGlwTWluLCBNYXRoLm1pbihjbGlwTWF4LCB4XykpLCB5XyA9IE1hdGgubWF4KGNsaXBNaW4sIE1hdGgubWluKGNsaXBNYXgsIHlfKSldLFxuICAgICAgICAgICAgICBiID0gW3ggPSBNYXRoLm1heChjbGlwTWluLCBNYXRoLm1pbihjbGlwTWF4LCB4KSksIHkgPSBNYXRoLm1heChjbGlwTWluLCBNYXRoLm1pbihjbGlwTWF4LCB5KSldO1xuICAgICAgICAgIGlmIChjbGlwTGluZShhLCBiLCB4MCwgeTAsIHgxLCB5MSkpIHtcbiAgICAgICAgICAgIGlmICghdl8pIHtcbiAgICAgICAgICAgICAgYWN0aXZlU3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgICBhY3RpdmVTdHJlYW0ucG9pbnQoYVswXSwgYVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3RpdmVTdHJlYW0ucG9pbnQoYlswXSwgYlsxXSk7XG4gICAgICAgICAgICBpZiAoIXYpIGFjdGl2ZVN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgICAgICBjbGVhbiA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodikge1xuICAgICAgICAgICAgYWN0aXZlU3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KHgsIHkpO1xuICAgICAgICAgICAgY2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHhfID0geCwgeV8gPSB5LCB2XyA9IHY7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaXBTdHJlYW07XG4gIH07XG59XG4iLCJpbXBvcnQgY2xpcFJlY3RhbmdsZSBmcm9tIFwiLi9yZWN0YW5nbGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB5MCA9IDAsXG4gICAgICB4MSA9IDk2MCxcbiAgICAgIHkxID0gNTAwLFxuICAgICAgY2FjaGUsXG4gICAgICBjYWNoZVN0cmVhbSxcbiAgICAgIGNsaXA7XG5cbiAgcmV0dXJuIGNsaXAgPSB7XG4gICAgc3RyZWFtOiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgIHJldHVybiBjYWNoZSAmJiBjYWNoZVN0cmVhbSA9PT0gc3RyZWFtID8gY2FjaGUgOiBjYWNoZSA9IGNsaXBSZWN0YW5nbGUoeDAsIHkwLCB4MSwgeTEpKGNhY2hlU3RyZWFtID0gc3RyZWFtKTtcbiAgICB9LFxuICAgIGV4dGVudDogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXVswXSwgeTAgPSArX1swXVsxXSwgeDEgPSArX1sxXVswXSwgeTEgPSArX1sxXVsxXSwgY2FjaGUgPSBjYWNoZVN0cmVhbSA9IG51bGwsIGNsaXApIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyLmpzXCI7XG5pbXBvcnQge2FicywgYXRhbjIsIGNvcywgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wLmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsYW1iZGEwLFxuICAgIHNpblBoaTAsXG4gICAgY29zUGhpMDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgc3BoZXJlOiBub29wLFxuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBsZW5ndGhMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcFxufTtcblxuZnVuY3Rpb24gbGVuZ3RoTGluZVN0YXJ0KCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludEZpcnN0O1xuICBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IGxlbmd0aExpbmVFbmQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVFbmQoKSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFN0cmVhbS5saW5lRW5kID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW4ocGhpKSwgY29zUGhpMCA9IGNvcyhwaGkpO1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIGRlbHRhID0gYWJzKGxhbWJkYSAtIGxhbWJkYTApLFxuICAgICAgY29zRGVsdGEgPSBjb3MoZGVsdGEpLFxuICAgICAgc2luRGVsdGEgPSBzaW4oZGVsdGEpLFxuICAgICAgeCA9IGNvc1BoaSAqIHNpbkRlbHRhLFxuICAgICAgeSA9IGNvc1BoaTAgKiBzaW5QaGkgLSBzaW5QaGkwICogY29zUGhpICogY29zRGVsdGEsXG4gICAgICB6ID0gc2luUGhpMCAqIHNpblBoaSArIGNvc1BoaTAgKiBjb3NQaGkgKiBjb3NEZWx0YTtcbiAgbGVuZ3RoU3VtLmFkZChhdGFuMihzcXJ0KHggKiB4ICsgeSAqIHkpLCB6KSk7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW5QaGksIGNvc1BoaTAgPSBjb3NQaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgc3RyZWFtKG9iamVjdCwgbGVuZ3RoU3RyZWFtKTtcbiAgcmV0dXJuICtsZW5ndGhTdW07XG59XG4iLCJpbXBvcnQgbGVuZ3RoIGZyb20gXCIuL2xlbmd0aC5qc1wiO1xuXG52YXIgY29vcmRpbmF0ZXMgPSBbbnVsbCwgbnVsbF0sXG4gICAgb2JqZWN0ID0ge3R5cGU6IFwiTGluZVN0cmluZ1wiLCBjb29yZGluYXRlczogY29vcmRpbmF0ZXN9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGNvb3JkaW5hdGVzWzBdID0gYTtcbiAgY29vcmRpbmF0ZXNbMV0gPSBiO1xuICByZXR1cm4gbGVuZ3RoKG9iamVjdCk7XG59XG4iLCJpbXBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkNvbnRhaW5zfSBmcm9tIFwiLi9wb2x5Z29uQ29udGFpbnMuanNcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBkaXN0YW5jZX0gZnJvbSBcIi4vZGlzdGFuY2UuanNcIjtcbmltcG9ydCB7ZXBzaWxvbjIsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIGNvbnRhaW5zT2JqZWN0VHlwZSA9IHtcbiAgRmVhdHVyZTogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHJldHVybiBjb250YWluc0dlb21ldHJ5KG9iamVjdC5nZW9tZXRyeSwgcG9pbnQpO1xuICB9LFxuICBGZWF0dXJlQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHZhciBmZWF0dXJlcyA9IG9iamVjdC5mZWF0dXJlcywgaSA9IC0xLCBuID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoY29udGFpbnNHZW9tZXRyeShmZWF0dXJlc1tpXS5nZW9tZXRyeSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBjb250YWluc0dlb21ldHJ5VHlwZSA9IHtcbiAgU3BoZXJlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNQb2ludChvYmplY3QuY29vcmRpbmF0ZXMsIHBvaW50KTtcbiAgfSxcbiAgTXVsdGlQb2ludDogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoY29udGFpbnNQb2ludChjb29yZGluYXRlc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNMaW5lKG9iamVjdC5jb29yZGluYXRlcywgcG9pbnQpO1xuICB9LFxuICBNdWx0aUxpbmVTdHJpbmc6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zTGluZShjb29yZGluYXRlc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIFBvbHlnb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNQb2x5Z29uKG9iamVjdC5jb29yZGluYXRlcywgcG9pbnQpO1xuICB9LFxuICBNdWx0aVBvbHlnb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zUG9seWdvbihjb29yZGluYXRlc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIEdlb21ldHJ5Q29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICAgIHZhciBnZW9tZXRyaWVzID0gb2JqZWN0Lmdlb21ldHJpZXMsIGkgPSAtMSwgbiA9IGdlb21ldHJpZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoY29udGFpbnNHZW9tZXRyeShnZW9tZXRyaWVzW2ldLCBwb2ludCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY29udGFpbnNHZW9tZXRyeShnZW9tZXRyeSwgcG9pbnQpIHtcbiAgcmV0dXJuIGdlb21ldHJ5ICYmIGNvbnRhaW5zR2VvbWV0cnlUeXBlLmhhc093blByb3BlcnR5KGdlb21ldHJ5LnR5cGUpXG4gICAgICA/IGNvbnRhaW5zR2VvbWV0cnlUeXBlW2dlb21ldHJ5LnR5cGVdKGdlb21ldHJ5LCBwb2ludClcbiAgICAgIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUG9pbnQoY29vcmRpbmF0ZXMsIHBvaW50KSB7XG4gIHJldHVybiBkaXN0YW5jZShjb29yZGluYXRlcywgcG9pbnQpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjb250YWluc0xpbmUoY29vcmRpbmF0ZXMsIHBvaW50KSB7XG4gIHZhciBhbywgYm8sIGFiO1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgIGJvID0gZGlzdGFuY2UoY29vcmRpbmF0ZXNbaV0sIHBvaW50KTtcbiAgICBpZiAoYm8gPT09IDApIHJldHVybiB0cnVlO1xuICAgIGlmIChpID4gMCkge1xuICAgICAgYWIgPSBkaXN0YW5jZShjb29yZGluYXRlc1tpXSwgY29vcmRpbmF0ZXNbaSAtIDFdKTtcbiAgICAgIGlmIChcbiAgICAgICAgYWIgPiAwICYmXG4gICAgICAgIGFvIDw9IGFiICYmXG4gICAgICAgIGJvIDw9IGFiICYmXG4gICAgICAgIChhbyArIGJvIC0gYWIpICogKDEgLSBNYXRoLnBvdygoYW8gLSBibykgLyBhYiwgMikpIDwgZXBzaWxvbjIgKiBhYlxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYW8gPSBibztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUG9seWdvbihjb29yZGluYXRlcywgcG9pbnQpIHtcbiAgcmV0dXJuICEhcG9seWdvbkNvbnRhaW5zKGNvb3JkaW5hdGVzLm1hcChyaW5nUmFkaWFucyksIHBvaW50UmFkaWFucyhwb2ludCkpO1xufVxuXG5mdW5jdGlvbiByaW5nUmFkaWFucyhyaW5nKSB7XG4gIHJldHVybiByaW5nID0gcmluZy5tYXAocG9pbnRSYWRpYW5zKSwgcmluZy5wb3AoKSwgcmluZztcbn1cblxuZnVuY3Rpb24gcG9pbnRSYWRpYW5zKHBvaW50KSB7XG4gIHJldHVybiBbcG9pbnRbMF0gKiByYWRpYW5zLCBwb2ludFsxXSAqIHJhZGlhbnNdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gIHJldHVybiAob2JqZWN0ICYmIGNvbnRhaW5zT2JqZWN0VHlwZS5oYXNPd25Qcm9wZXJ0eShvYmplY3QudHlwZSlcbiAgICAgID8gY29udGFpbnNPYmplY3RUeXBlW29iamVjdC50eXBlXVxuICAgICAgOiBjb250YWluc0dlb21ldHJ5KShvYmplY3QsIHBvaW50KTtcbn1cbiIsImltcG9ydCB7cmFuZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHthYnMsIGNlaWwsIGVwc2lsb259IGZyb20gXCIuL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ3JhdGljdWxlWCh5MCwgeTEsIGR5KSB7XG4gIHZhciB5ID0gcmFuZ2UoeTAsIHkxIC0gZXBzaWxvbiwgZHkpLmNvbmNhdCh5MSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiB5Lm1hcChmdW5jdGlvbih5KSB7IHJldHVybiBbeCwgeV07IH0pOyB9O1xufVxuXG5mdW5jdGlvbiBncmF0aWN1bGVZKHgwLCB4MSwgZHgpIHtcbiAgdmFyIHggPSByYW5nZSh4MCwgeDEgLSBlcHNpbG9uLCBkeCkuY29uY2F0KHgxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHkpIHsgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIFt4LCB5XTsgfSk7IH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdyYXRpY3VsZSgpIHtcbiAgdmFyIHgxLCB4MCwgWDEsIFgwLFxuICAgICAgeTEsIHkwLCBZMSwgWTAsXG4gICAgICBkeCA9IDEwLCBkeSA9IGR4LCBEWCA9IDkwLCBEWSA9IDM2MCxcbiAgICAgIHgsIHksIFgsIFksXG4gICAgICBwcmVjaXNpb24gPSAyLjU7XG5cbiAgZnVuY3Rpb24gZ3JhdGljdWxlKCkge1xuICAgIHJldHVybiB7dHlwZTogXCJNdWx0aUxpbmVTdHJpbmdcIiwgY29vcmRpbmF0ZXM6IGxpbmVzKCl9O1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZXMoKSB7XG4gICAgcmV0dXJuIHJhbmdlKGNlaWwoWDAgLyBEWCkgKiBEWCwgWDEsIERYKS5tYXAoWClcbiAgICAgICAgLmNvbmNhdChyYW5nZShjZWlsKFkwIC8gRFkpICogRFksIFkxLCBEWSkubWFwKFkpKVxuICAgICAgICAuY29uY2F0KHJhbmdlKGNlaWwoeDAgLyBkeCkgKiBkeCwgeDEsIGR4KS5maWx0ZXIoZnVuY3Rpb24oeCkgeyByZXR1cm4gYWJzKHggJSBEWCkgPiBlcHNpbG9uOyB9KS5tYXAoeCkpXG4gICAgICAgIC5jb25jYXQocmFuZ2UoY2VpbCh5MCAvIGR5KSAqIGR5LCB5MSwgZHkpLmZpbHRlcihmdW5jdGlvbih5KSB7IHJldHVybiBhYnMoeSAlIERZKSA+IGVwc2lsb247IH0pLm1hcCh5KSk7XG4gIH1cblxuICBncmF0aWN1bGUubGluZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGluZXMoKS5tYXAoZnVuY3Rpb24oY29vcmRpbmF0ZXMpIHsgcmV0dXJuIHt0eXBlOiBcIkxpbmVTdHJpbmdcIiwgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzfTsgfSk7XG4gIH07XG5cbiAgZ3JhdGljdWxlLm91dGxpbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJQb2x5Z29uXCIsXG4gICAgICBjb29yZGluYXRlczogW1xuICAgICAgICBYKFgwKS5jb25jYXQoXG4gICAgICAgIFkoWTEpLnNsaWNlKDEpLFxuICAgICAgICBYKFgxKS5yZXZlcnNlKCkuc2xpY2UoMSksXG4gICAgICAgIFkoWTApLnJldmVyc2UoKS5zbGljZSgxKSlcbiAgICAgIF1cbiAgICB9O1xuICB9O1xuXG4gIGdyYXRpY3VsZS5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZ3JhdGljdWxlLmV4dGVudE1pbm9yKCk7XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5leHRlbnRNYWpvcihfKS5leHRlbnRNaW5vcihfKTtcbiAgfTtcblxuICBncmF0aWN1bGUuZXh0ZW50TWFqb3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW1tYMCwgWTBdLCBbWDEsIFkxXV07XG4gICAgWDAgPSArX1swXVswXSwgWDEgPSArX1sxXVswXTtcbiAgICBZMCA9ICtfWzBdWzFdLCBZMSA9ICtfWzFdWzFdO1xuICAgIGlmIChYMCA+IFgxKSBfID0gWDAsIFgwID0gWDEsIFgxID0gXztcbiAgICBpZiAoWTAgPiBZMSkgXyA9IFkwLCBZMCA9IFkxLCBZMSA9IF87XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5wcmVjaXNpb24ocHJlY2lzaW9uKTtcbiAgfTtcblxuICBncmF0aWN1bGUuZXh0ZW50TWlub3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgeDAgPSArX1swXVswXSwgeDEgPSArX1sxXVswXTtcbiAgICB5MCA9ICtfWzBdWzFdLCB5MSA9ICtfWzFdWzFdO1xuICAgIGlmICh4MCA+IHgxKSBfID0geDAsIHgwID0geDEsIHgxID0gXztcbiAgICBpZiAoeTAgPiB5MSkgXyA9IHkwLCB5MCA9IHkxLCB5MSA9IF87XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5wcmVjaXNpb24ocHJlY2lzaW9uKTtcbiAgfTtcblxuICBncmF0aWN1bGUuc3RlcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBncmF0aWN1bGUuc3RlcE1pbm9yKCk7XG4gICAgcmV0dXJuIGdyYXRpY3VsZS5zdGVwTWFqb3IoXykuc3RlcE1pbm9yKF8pO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5zdGVwTWFqb3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW0RYLCBEWV07XG4gICAgRFggPSArX1swXSwgRFkgPSArX1sxXTtcbiAgICByZXR1cm4gZ3JhdGljdWxlO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5zdGVwTWlub3IgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gW2R4LCBkeV07XG4gICAgZHggPSArX1swXSwgZHkgPSArX1sxXTtcbiAgICByZXR1cm4gZ3JhdGljdWxlO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcHJlY2lzaW9uO1xuICAgIHByZWNpc2lvbiA9ICtfO1xuICAgIHggPSBncmF0aWN1bGVYKHkwLCB5MSwgOTApO1xuICAgIHkgPSBncmF0aWN1bGVZKHgwLCB4MSwgcHJlY2lzaW9uKTtcbiAgICBYID0gZ3JhdGljdWxlWChZMCwgWTEsIDkwKTtcbiAgICBZID0gZ3JhdGljdWxlWShYMCwgWDEsIHByZWNpc2lvbik7XG4gICAgcmV0dXJuIGdyYXRpY3VsZTtcbiAgfTtcblxuICByZXR1cm4gZ3JhdGljdWxlXG4gICAgICAuZXh0ZW50TWFqb3IoW1stMTgwLCAtOTAgKyBlcHNpbG9uXSwgWzE4MCwgOTAgLSBlcHNpbG9uXV0pXG4gICAgICAuZXh0ZW50TWlub3IoW1stMTgwLCAtODAgLSBlcHNpbG9uXSwgWzE4MCwgODAgKyBlcHNpbG9uXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JhdGljdWxlMTAoKSB7XG4gIHJldHVybiBncmF0aWN1bGUoKSgpO1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBkZWdyZWVzLCBoYXZlcnNpbiwgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHgwID0gYVswXSAqIHJhZGlhbnMsXG4gICAgICB5MCA9IGFbMV0gKiByYWRpYW5zLFxuICAgICAgeDEgPSBiWzBdICogcmFkaWFucyxcbiAgICAgIHkxID0gYlsxXSAqIHJhZGlhbnMsXG4gICAgICBjeTAgPSBjb3MoeTApLFxuICAgICAgc3kwID0gc2luKHkwKSxcbiAgICAgIGN5MSA9IGNvcyh5MSksXG4gICAgICBzeTEgPSBzaW4oeTEpLFxuICAgICAga3gwID0gY3kwICogY29zKHgwKSxcbiAgICAgIGt5MCA9IGN5MCAqIHNpbih4MCksXG4gICAgICBreDEgPSBjeTEgKiBjb3MoeDEpLFxuICAgICAga3kxID0gY3kxICogc2luKHgxKSxcbiAgICAgIGQgPSAyICogYXNpbihzcXJ0KGhhdmVyc2luKHkxIC0geTApICsgY3kwICogY3kxICogaGF2ZXJzaW4oeDEgLSB4MCkpKSxcbiAgICAgIGsgPSBzaW4oZCk7XG5cbiAgdmFyIGludGVycG9sYXRlID0gZCA/IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgQiA9IHNpbih0ICo9IGQpIC8gayxcbiAgICAgICAgQSA9IHNpbihkIC0gdCkgLyBrLFxuICAgICAgICB4ID0gQSAqIGt4MCArIEIgKiBreDEsXG4gICAgICAgIHkgPSBBICoga3kwICsgQiAqIGt5MSxcbiAgICAgICAgeiA9IEEgKiBzeTAgKyBCICogc3kxO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih5LCB4KSAqIGRlZ3JlZXMsXG4gICAgICBhdGFuMih6LCBzcXJ0KHggKiB4ICsgeSAqIHkpKSAqIGRlZ3JlZXNcbiAgICBdO1xuICB9IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFt4MCAqIGRlZ3JlZXMsIHkwICogZGVncmVlc107XG4gIH07XG5cbiAgaW50ZXJwb2xhdGUuZGlzdGFuY2UgPSBkO1xuXG4gIHJldHVybiBpbnRlcnBvbGF0ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyLmpzXCI7XG5pbXBvcnQge2Fic30gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbnZhciBhcmVhU3VtID0gYWRkZXIoKSxcbiAgICBhcmVhUmluZ1N1bSA9IGFkZGVyKCksXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGFyZWFTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFTdHJlYW0ucG9pbnQgPSBub29wO1xuICAgIGFyZWFTdW0uYWRkKGFicyhhcmVhUmluZ1N1bSkpO1xuICAgIGFyZWFSaW5nU3VtLnJlc2V0KCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWEgPSBhcmVhU3VtIC8gMjtcbiAgICBhcmVhU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGFyZWE7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFyZWFSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QoeCwgeSkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KHgsIHkpIHtcbiAgYXJlYVJpbmdTdW0uYWRkKHkwICogeCAtIHgwICogeSk7XG4gIHgwID0geCwgeTAgPSB5O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KHgwMCwgeTAwKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJlYVN0cmVhbTtcbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbnZhciB4MCA9IEluZmluaXR5LFxuICAgIHkwID0geDAsXG4gICAgeDEgPSAteDAsXG4gICAgeTEgPSB4MTtcblxudmFyIGJvdW5kc1N0cmVhbSA9IHtcbiAgcG9pbnQ6IGJvdW5kc1BvaW50LFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcCxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYm91bmRzID0gW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgeDEgPSB5MSA9IC0oeTAgPSB4MCA9IEluZmluaXR5KTtcbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBib3VuZHNQb2ludCh4LCB5KSB7XG4gIGlmICh4IDwgeDApIHgwID0geDtcbiAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gIGlmICh5ID4geTEpIHkxID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYm91bmRzU3RyZWFtO1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG4vLyBUT0RPIEVuZm9yY2UgcG9zaXRpdmUgYXJlYSBmb3IgZXh0ZXJpb3IsIG5lZ2F0aXZlIGFyZWEgZm9yIGludGVyaW9yP1xuXG52YXIgWDAgPSAwLFxuICAgIFkwID0gMCxcbiAgICBaMCA9IDAsXG4gICAgWDEgPSAwLFxuICAgIFkxID0gMCxcbiAgICBaMSA9IDAsXG4gICAgWDIgPSAwLFxuICAgIFkyID0gMCxcbiAgICBaMiA9IDAsXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGNlbnRyb2lkU3RyZWFtID0ge1xuICBwb2ludDogY2VudHJvaWRQb2ludCxcbiAgbGluZVN0YXJ0OiBjZW50cm9pZExpbmVTdGFydCxcbiAgbGluZUVuZDogY2VudHJvaWRMaW5lRW5kLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVTdGFydCA9IGNlbnRyb2lkUmluZ1N0YXJ0O1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVFbmQgPSBjZW50cm9pZFJpbmdFbmQ7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZExpbmVTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRMaW5lRW5kO1xuICB9LFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjZW50cm9pZCA9IFoyID8gW1gyIC8gWjIsIFkyIC8gWjJdXG4gICAgICAgIDogWjEgPyBbWDEgLyBaMSwgWTEgLyBaMV1cbiAgICAgICAgOiBaMCA/IFtYMCAvIFowLCBZMCAvIFowXVxuICAgICAgICA6IFtOYU4sIE5hTl07XG4gICAgWDAgPSBZMCA9IFowID1cbiAgICBYMSA9IFkxID0gWjEgPVxuICAgIFgyID0gWTIgPSBaMiA9IDA7XG4gICAgcmV0dXJuIGNlbnRyb2lkO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50KHgsIHkpIHtcbiAgWDAgKz0geDtcbiAgWTAgKz0geTtcbiAgKytaMDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lU3RhcnQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludEZpcnN0TGluZTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludEZpcnN0TGluZSh4LCB5KSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludExpbmU7XG4gIGNlbnRyb2lkUG9pbnQoeDAgPSB4LCB5MCA9IHkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50TGluZSh4LCB5KSB7XG4gIHZhciBkeCA9IHggLSB4MCwgZHkgPSB5IC0geTAsIHogPSBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgWDEgKz0geiAqICh4MCArIHgpIC8gMjtcbiAgWTEgKz0geiAqICh5MCArIHkpIC8gMjtcbiAgWjEgKz0gejtcbiAgY2VudHJvaWRQb2ludCh4MCA9IHgsIHkwID0geSk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZUVuZCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50O1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdTdGFydCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50Rmlyc3RSaW5nO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdFbmQoKSB7XG4gIGNlbnRyb2lkUG9pbnRSaW5nKHgwMCwgeTAwKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludEZpcnN0UmluZyh4LCB5KSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludFJpbmc7XG4gIGNlbnRyb2lkUG9pbnQoeDAwID0geDAgPSB4LCB5MDAgPSB5MCA9IHkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50UmluZyh4LCB5KSB7XG4gIHZhciBkeCA9IHggLSB4MCxcbiAgICAgIGR5ID0geSAtIHkwLFxuICAgICAgeiA9IHNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gIFgxICs9IHogKiAoeDAgKyB4KSAvIDI7XG4gIFkxICs9IHogKiAoeTAgKyB5KSAvIDI7XG4gIFoxICs9IHo7XG5cbiAgeiA9IHkwICogeCAtIHgwICogeTtcbiAgWDIgKz0geiAqICh4MCArIHgpO1xuICBZMiArPSB6ICogKHkwICsgeSk7XG4gIFoyICs9IHogKiAzO1xuICBjZW50cm9pZFBvaW50KHgwID0geCwgeTAgPSB5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2VudHJvaWRTdHJlYW07XG4iLCJpbXBvcnQge3RhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhdGhDb250ZXh0KGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblBhdGhDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgX3JhZGl1czogNC41LFxuICBwb2ludFJhZGl1czogZnVuY3Rpb24oXykge1xuICAgIHJldHVybiB0aGlzLl9yYWRpdXMgPSBfLCB0aGlzO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgPT09IDApIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fcG9pbnQgPSBOYU47XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgICAgICB0aGlzLl9wb2ludCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCArIHRoaXMuX3JhZGl1cywgeSk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuYXJjKHgsIHksIHRoaXMuX3JhZGl1cywgMCwgdGF1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZXN1bHQ6IG5vb3Bcbn07XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyLmpzXCI7XG5pbXBvcnQge3NxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcC5qc1wiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsZW5ndGhSaW5nLFxuICAgIHgwMCxcbiAgICB5MDAsXG4gICAgeDAsXG4gICAgeTA7XG5cbnZhciBsZW5ndGhTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFBvaW50Rmlyc3Q7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChsZW5ndGhSaW5nKSBsZW5ndGhQb2ludCh4MDAsIHkwMCk7XG4gICAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbm9vcDtcbiAgfSxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhSaW5nID0gdHJ1ZTtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoUmluZyA9IG51bGw7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9ICtsZW5ndGhTdW07XG4gICAgbGVuZ3RoU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxufTtcblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdCh4LCB5KSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQoeCwgeSkge1xuICB4MCAtPSB4LCB5MCAtPSB5O1xuICBsZW5ndGhTdW0uYWRkKHNxcnQoeDAgKiB4MCArIHkwICogeTApKTtcbiAgeDAgPSB4LCB5MCA9IHk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxlbmd0aFN0cmVhbTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhdGhTdHJpbmcoKSB7XG4gIHRoaXMuX3N0cmluZyA9IFtdO1xufVxuXG5QYXRoU3RyaW5nLnByb3RvdHlwZSA9IHtcbiAgX3JhZGl1czogNC41LFxuICBfY2lyY2xlOiBjaXJjbGUoNC41KSxcbiAgcG9pbnRSYWRpdXM6IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoKF8gPSArXykgIT09IHRoaXMuX3JhZGl1cykgdGhpcy5fcmFkaXVzID0gXywgdGhpcy5fY2lyY2xlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lID09PSAwKSB0aGlzLl9zdHJpbmcucHVzaChcIlpcIik7XG4gICAgdGhpcy5fcG9pbnQgPSBOYU47XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuX3N0cmluZy5wdXNoKFwiTVwiLCB4LCBcIixcIiwgeSk7XG4gICAgICAgIHRoaXMuX3BvaW50ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fc3RyaW5nLnB1c2goXCJMXCIsIHgsIFwiLFwiLCB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmICh0aGlzLl9jaXJjbGUgPT0gbnVsbCkgdGhpcy5fY2lyY2xlID0gY2lyY2xlKHRoaXMuX3JhZGl1cyk7XG4gICAgICAgIHRoaXMuX3N0cmluZy5wdXNoKFwiTVwiLCB4LCBcIixcIiwgeSwgdGhpcy5fY2lyY2xlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9zdHJpbmcubGVuZ3RoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fc3RyaW5nLmpvaW4oXCJcIik7XG4gICAgICB0aGlzLl9zdHJpbmcgPSBbXTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gY2lyY2xlKHJhZGl1cykge1xuICByZXR1cm4gXCJtMCxcIiArIHJhZGl1c1xuICAgICAgKyBcImFcIiArIHJhZGl1cyArIFwiLFwiICsgcmFkaXVzICsgXCIgMCAxLDEgMCxcIiArIC0yICogcmFkaXVzXG4gICAgICArIFwiYVwiICsgcmFkaXVzICsgXCIsXCIgKyByYWRpdXMgKyBcIiAwIDEsMSAwLFwiICsgMiAqIHJhZGl1c1xuICAgICAgKyBcInpcIjtcbn1cbiIsImltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4uL3N0cmVhbS5qc1wiO1xuaW1wb3J0IHBhdGhBcmVhIGZyb20gXCIuL2FyZWEuanNcIjtcbmltcG9ydCBwYXRoQm91bmRzIGZyb20gXCIuL2JvdW5kcy5qc1wiO1xuaW1wb3J0IHBhdGhDZW50cm9pZCBmcm9tIFwiLi9jZW50cm9pZC5qc1wiO1xuaW1wb3J0IFBhdGhDb250ZXh0IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCBwYXRoTWVhc3VyZSBmcm9tIFwiLi9tZWFzdXJlLmpzXCI7XG5pbXBvcnQgUGF0aFN0cmluZyBmcm9tIFwiLi9zdHJpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocHJvamVjdGlvbiwgY29udGV4dCkge1xuICB2YXIgcG9pbnRSYWRpdXMgPSA0LjUsXG4gICAgICBwcm9qZWN0aW9uU3RyZWFtLFxuICAgICAgY29udGV4dFN0cmVhbTtcblxuICBmdW5jdGlvbiBwYXRoKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9pbnRSYWRpdXMgPT09IFwiZnVuY3Rpb25cIikgY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrcG9pbnRSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKGNvbnRleHRTdHJlYW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHRTdHJlYW0ucmVzdWx0KCk7XG4gIH1cblxuICBwYXRoLmFyZWEgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhBcmVhKSk7XG4gICAgcmV0dXJuIHBhdGhBcmVhLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGgubWVhc3VyZSA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHN0cmVhbShvYmplY3QsIHByb2plY3Rpb25TdHJlYW0ocGF0aE1lYXN1cmUpKTtcbiAgICByZXR1cm4gcGF0aE1lYXN1cmUucmVzdWx0KCk7XG4gIH07XG5cbiAgcGF0aC5ib3VuZHMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhCb3VuZHMpKTtcbiAgICByZXR1cm4gcGF0aEJvdW5kcy5yZXN1bHQoKTtcbiAgfTtcblxuICBwYXRoLmNlbnRyb2lkID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgc3RyZWFtKG9iamVjdCwgcHJvamVjdGlvblN0cmVhbShwYXRoQ2VudHJvaWQpKTtcbiAgICByZXR1cm4gcGF0aENlbnRyb2lkLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGgucHJvamVjdGlvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwcm9qZWN0aW9uU3RyZWFtID0gXyA9PSBudWxsID8gKHByb2plY3Rpb24gPSBudWxsLCBpZGVudGl0eSkgOiAocHJvamVjdGlvbiA9IF8pLnN0cmVhbSwgcGF0aCkgOiBwcm9qZWN0aW9uO1xuICB9O1xuXG4gIHBhdGguY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjb250ZXh0O1xuICAgIGNvbnRleHRTdHJlYW0gPSBfID09IG51bGwgPyAoY29udGV4dCA9IG51bGwsIG5ldyBQYXRoU3RyaW5nKSA6IG5ldyBQYXRoQ29udGV4dChjb250ZXh0ID0gXyk7XG4gICAgaWYgKHR5cGVvZiBwb2ludFJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSBjb250ZXh0U3RyZWFtLnBvaW50UmFkaXVzKHBvaW50UmFkaXVzKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcblxuICBwYXRoLnBvaW50UmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHBvaW50UmFkaXVzO1xuICAgIHBvaW50UmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiAoY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrXyksICtfKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcblxuICByZXR1cm4gcGF0aC5wcm9qZWN0aW9uKHByb2plY3Rpb24pLmNvbnRleHQoY29udGV4dCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtZXRob2RzKSB7XG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiB0cmFuc2Zvcm1lcihtZXRob2RzKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIobWV0aG9kcykge1xuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIHMgPSBuZXcgVHJhbnNmb3JtU3RyZWFtO1xuICAgIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSBzW2tleV0gPSBtZXRob2RzW2tleV07XG4gICAgcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgcmV0dXJuIHM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbSgpIHt9XG5cblRyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm1TdHJlYW0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuc3RyZWFtLnBvaW50KHgsIHkpOyB9LFxuICBzcGhlcmU6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5zcGhlcmUoKTsgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ubGluZVN0YXJ0KCk7IH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5saW5lRW5kKCk7IH0sXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpOyB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpOyB9XG59O1xuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIGdlb1N0cmVhbX0gZnJvbSBcIi4uL3N0cmVhbS5qc1wiO1xuaW1wb3J0IGJvdW5kc1N0cmVhbSBmcm9tIFwiLi4vcGF0aC9ib3VuZHMuanNcIjtcblxuZnVuY3Rpb24gZml0KHByb2plY3Rpb24sIGZpdEJvdW5kcywgb2JqZWN0KSB7XG4gIHZhciBjbGlwID0gcHJvamVjdGlvbi5jbGlwRXh0ZW50ICYmIHByb2plY3Rpb24uY2xpcEV4dGVudCgpO1xuICBwcm9qZWN0aW9uLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLCAwXSk7XG4gIGlmIChjbGlwICE9IG51bGwpIHByb2plY3Rpb24uY2xpcEV4dGVudChudWxsKTtcbiAgZ2VvU3RyZWFtKG9iamVjdCwgcHJvamVjdGlvbi5zdHJlYW0oYm91bmRzU3RyZWFtKSk7XG4gIGZpdEJvdW5kcyhib3VuZHNTdHJlYW0ucmVzdWx0KCkpO1xuICBpZiAoY2xpcCAhPSBudWxsKSBwcm9qZWN0aW9uLmNsaXBFeHRlbnQoY2xpcCk7XG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0RXh0ZW50KHByb2plY3Rpb24sIGV4dGVudCwgb2JqZWN0KSB7XG4gIHJldHVybiBmaXQocHJvamVjdGlvbiwgZnVuY3Rpb24oYikge1xuICAgIHZhciB3ID0gZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdLFxuICAgICAgICBoID0gZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdLFxuICAgICAgICBrID0gTWF0aC5taW4odyAvIChiWzFdWzBdIC0gYlswXVswXSksIGggLyAoYlsxXVsxXSAtIGJbMF1bMV0pKSxcbiAgICAgICAgeCA9ICtleHRlbnRbMF1bMF0gKyAodyAtIGsgKiAoYlsxXVswXSArIGJbMF1bMF0pKSAvIDIsXG4gICAgICAgIHkgPSArZXh0ZW50WzBdWzFdICsgKGggLSBrICogKGJbMV1bMV0gKyBiWzBdWzFdKSkgLyAyO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCkge1xuICByZXR1cm4gZml0RXh0ZW50KHByb2plY3Rpb24sIFtbMCwgMF0sIHNpemVdLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0V2lkdGgocHJvamVjdGlvbiwgd2lkdGgsIG9iamVjdCkge1xuICByZXR1cm4gZml0KHByb2plY3Rpb24sIGZ1bmN0aW9uKGIpIHtcbiAgICB2YXIgdyA9ICt3aWR0aCxcbiAgICAgICAgayA9IHcgLyAoYlsxXVswXSAtIGJbMF1bMF0pLFxuICAgICAgICB4ID0gKHcgLSBrICogKGJbMV1bMF0gKyBiWzBdWzBdKSkgLyAyLFxuICAgICAgICB5ID0gLWsgKiBiWzBdWzFdO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpIHtcbiAgcmV0dXJuIGZpdChwcm9qZWN0aW9uLCBmdW5jdGlvbihiKSB7XG4gICAgdmFyIGggPSAraGVpZ2h0LFxuICAgICAgICBrID0gaCAvIChiWzFdWzFdIC0gYlswXVsxXSksXG4gICAgICAgIHggPSAtayAqIGJbMF1bMF0sXG4gICAgICAgIHkgPSAoaCAtIGsgKiAoYlsxXVsxXSArIGJbMF1bMV0pKSAvIDI7XG4gICAgcHJvamVjdGlvbi5zY2FsZSgxNTAgKiBrKS50cmFuc2xhdGUoW3gsIHldKTtcbiAgfSwgb2JqZWN0KTtcbn1cbiIsImltcG9ydCB7Y2FydGVzaWFufSBmcm9tIFwiLi4vY2FydGVzaWFuLmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgcmFkaWFucywgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm0uanNcIjtcblxudmFyIG1heERlcHRoID0gMTYsIC8vIG1heGltdW0gZGVwdGggb2Ygc3ViZGl2aXNpb25cbiAgICBjb3NNaW5EaXN0YW5jZSA9IGNvcygzMCAqIHJhZGlhbnMpOyAvLyBjb3MobWluaW11bSBhbmd1bGFyIGRpc3RhbmNlKVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcm9qZWN0LCBkZWx0YTIpIHtcbiAgcmV0dXJuICtkZWx0YTIgPyByZXNhbXBsZShwcm9qZWN0LCBkZWx0YTIpIDogcmVzYW1wbGVOb25lKHByb2plY3QpO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZU5vbmUocHJvamVjdCkge1xuICByZXR1cm4gdHJhbnNmb3JtZXIoe1xuICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgICB4ID0gcHJvamVjdCh4LCB5KTtcbiAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHhbMF0sIHhbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlKHByb2plY3QsIGRlbHRhMikge1xuXG4gIGZ1bmN0aW9uIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDEsIHkxLCBsYW1iZGExLCBhMSwgYjEsIGMxLCBkZXB0aCwgc3RyZWFtKSB7XG4gICAgdmFyIGR4ID0geDEgLSB4MCxcbiAgICAgICAgZHkgPSB5MSAtIHkwLFxuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgIGlmIChkMiA+IDQgKiBkZWx0YTIgJiYgZGVwdGgtLSkge1xuICAgICAgdmFyIGEgPSBhMCArIGExLFxuICAgICAgICAgIGIgPSBiMCArIGIxLFxuICAgICAgICAgIGMgPSBjMCArIGMxLFxuICAgICAgICAgIG0gPSBzcXJ0KGEgKiBhICsgYiAqIGIgKyBjICogYyksXG4gICAgICAgICAgcGhpMiA9IGFzaW4oYyAvPSBtKSxcbiAgICAgICAgICBsYW1iZGEyID0gYWJzKGFicyhjKSAtIDEpIDwgZXBzaWxvbiB8fCBhYnMobGFtYmRhMCAtIGxhbWJkYTEpIDwgZXBzaWxvbiA/IChsYW1iZGEwICsgbGFtYmRhMSkgLyAyIDogYXRhbjIoYiwgYSksXG4gICAgICAgICAgcCA9IHByb2plY3QobGFtYmRhMiwgcGhpMiksXG4gICAgICAgICAgeDIgPSBwWzBdLFxuICAgICAgICAgIHkyID0gcFsxXSxcbiAgICAgICAgICBkeDIgPSB4MiAtIHgwLFxuICAgICAgICAgIGR5MiA9IHkyIC0geTAsXG4gICAgICAgICAgZHogPSBkeSAqIGR4MiAtIGR4ICogZHkyO1xuICAgICAgaWYgKGR6ICogZHogLyBkMiA+IGRlbHRhMiAvLyBwZXJwZW5kaWN1bGFyIHByb2plY3RlZCBkaXN0YW5jZVxuICAgICAgICAgIHx8IGFicygoZHggKiBkeDIgKyBkeSAqIGR5MikgLyBkMiAtIDAuNSkgPiAwLjMgLy8gbWlkcG9pbnQgY2xvc2UgdG8gYW4gZW5kXG4gICAgICAgICAgfHwgYTAgKiBhMSArIGIwICogYjEgKyBjMCAqIGMxIDwgY29zTWluRGlzdGFuY2UpIHsgLy8gYW5ndWxhciBkaXN0YW5jZVxuICAgICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgyLCB5MiwgbGFtYmRhMiwgYSAvPSBtLCBiIC89IG0sIGMsIGRlcHRoLCBzdHJlYW0pO1xuICAgICAgICBzdHJlYW0ucG9pbnQoeDIsIHkyKTtcbiAgICAgICAgcmVzYW1wbGVMaW5lVG8oeDIsIHkyLCBsYW1iZGEyLCBhLCBiLCBjLCB4MSwgeTEsIGxhbWJkYTEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGxhbWJkYTAwLCB4MDAsIHkwMCwgYTAwLCBiMDAsIGMwMCwgLy8gZmlyc3QgcG9pbnRcbiAgICAgICAgbGFtYmRhMCwgeDAsIHkwLCBhMCwgYjAsIGMwOyAvLyBwcmV2aW91cyBwb2ludFxuXG4gICAgdmFyIHJlc2FtcGxlU3RyZWFtID0ge1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICBsaW5lRW5kOiBsaW5lRW5kLFxuICAgICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsgc3RyZWFtLnBvbHlnb25TdGFydCgpOyByZXNhbXBsZVN0cmVhbS5saW5lU3RhcnQgPSByaW5nU3RhcnQ7IH0sXG4gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsgc3RyZWFtLnBvbHlnb25FbmQoKTsgcmVzYW1wbGVTdHJlYW0ubGluZVN0YXJ0ID0gbGluZVN0YXJ0OyB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHtcbiAgICAgIHggPSBwcm9qZWN0KHgsIHkpO1xuICAgICAgc3RyZWFtLnBvaW50KHhbMF0sIHhbMV0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVTdGFydCgpIHtcbiAgICAgIHgwID0gTmFOO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBsaW5lUG9pbnQ7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gICAgICB2YXIgYyA9IGNhcnRlc2lhbihbbGFtYmRhLCBwaGldKSwgcCA9IHByb2plY3QobGFtYmRhLCBwaGkpO1xuICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MCA9IHBbMF0sIHkwID0gcFsxXSwgbGFtYmRhMCA9IGxhbWJkYSwgYTAgPSBjWzBdLCBiMCA9IGNbMV0sIGMwID0gY1syXSwgbWF4RGVwdGgsIHN0cmVhbSk7XG4gICAgICBzdHJlYW0ucG9pbnQoeDAsIHkwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lRW5kKCkge1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBwb2ludDtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ1N0YXJ0KCkge1xuICAgICAgbGluZVN0YXJ0KCk7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IHJpbmdQb2ludDtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLmxpbmVFbmQgPSByaW5nRW5kO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZVBvaW50KGxhbWJkYTAwID0gbGFtYmRhLCBwaGkpLCB4MDAgPSB4MCwgeTAwID0geTAsIGEwMCA9IGEwLCBiMDAgPSBiMCwgYzAwID0gYzA7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nRW5kKCkge1xuICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MDAsIHkwMCwgbGFtYmRhMDAsIGEwMCwgYjAwLCBjMDAsIG1heERlcHRoLCBzdHJlYW0pO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ubGluZUVuZCA9IGxpbmVFbmQ7XG4gICAgICBsaW5lRW5kKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc2FtcGxlU3RyZWFtO1xuICB9O1xufVxuIiwiaW1wb3J0IGNsaXBBbnRpbWVyaWRpYW4gZnJvbSBcIi4uL2NsaXAvYW50aW1lcmlkaWFuLmpzXCI7XG5pbXBvcnQgY2xpcENpcmNsZSBmcm9tIFwiLi4vY2xpcC9jaXJjbGUuanNcIjtcbmltcG9ydCBjbGlwUmVjdGFuZ2xlIGZyb20gXCIuLi9jbGlwL3JlY3RhbmdsZS5qc1wiO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSBcIi4uL2NvbXBvc2UuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge3JvdGF0ZVJhZGlhbnN9IGZyb20gXCIuLi9yb3RhdGlvbi5qc1wiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybS5qc1wiO1xuaW1wb3J0IHtmaXRFeHRlbnQsIGZpdFNpemUsIGZpdFdpZHRoLCBmaXRIZWlnaHR9IGZyb20gXCIuL2ZpdC5qc1wiO1xuaW1wb3J0IHJlc2FtcGxlIGZyb20gXCIuL3Jlc2FtcGxlLmpzXCI7XG5cbnZhciB0cmFuc2Zvcm1SYWRpYW5zID0gdHJhbnNmb3JtZXIoe1xuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuc3RyZWFtLnBvaW50KHggKiByYWRpYW5zLCB5ICogcmFkaWFucyk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Sb3RhdGUocm90YXRlKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHZhciByID0gcm90YXRlKHgsIHkpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sIHJbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNjYWxlVHJhbnNsYXRlKGssIGR4LCBkeSwgc3gsIHN5KSB7XG4gIGZ1bmN0aW9uIHRyYW5zZm9ybSh4LCB5KSB7XG4gICAgeCAqPSBzeDsgeSAqPSBzeTtcbiAgICByZXR1cm4gW2R4ICsgayAqIHgsIGR5IC0gayAqIHldO1xuICB9XG4gIHRyYW5zZm9ybS5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIFsoeCAtIGR4KSAvIGsgKiBzeCwgKGR5IC0geSkgLyBrICogc3ldO1xuICB9O1xuICByZXR1cm4gdHJhbnNmb3JtO1xufVxuXG5mdW5jdGlvbiBzY2FsZVRyYW5zbGF0ZVJvdGF0ZShrLCBkeCwgZHksIHN4LCBzeSwgYWxwaGEpIHtcbiAgdmFyIGNvc0FscGhhID0gY29zKGFscGhhKSxcbiAgICAgIHNpbkFscGhhID0gc2luKGFscGhhKSxcbiAgICAgIGEgPSBjb3NBbHBoYSAqIGssXG4gICAgICBiID0gc2luQWxwaGEgKiBrLFxuICAgICAgYWkgPSBjb3NBbHBoYSAvIGssXG4gICAgICBiaSA9IHNpbkFscGhhIC8gayxcbiAgICAgIGNpID0gKHNpbkFscGhhICogZHkgLSBjb3NBbHBoYSAqIGR4KSAvIGssXG4gICAgICBmaSA9IChzaW5BbHBoYSAqIGR4ICsgY29zQWxwaGEgKiBkeSkgLyBrO1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0oeCwgeSkge1xuICAgIHggKj0gc3g7IHkgKj0gc3k7XG4gICAgcmV0dXJuIFthICogeCAtIGIgKiB5ICsgZHgsIGR5IC0gYiAqIHggLSBhICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gW3N4ICogKGFpICogeCAtIGJpICogeSArIGNpKSwgc3kgKiAoZmkgLSBiaSAqIHggLSBhaSAqIHkpXTtcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvamVjdGlvbihwcm9qZWN0KSB7XG4gIHJldHVybiBwcm9qZWN0aW9uTXV0YXRvcihmdW5jdGlvbigpIHsgcmV0dXJuIHByb2plY3Q7IH0pKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0aW9uTXV0YXRvcihwcm9qZWN0QXQpIHtcbiAgdmFyIHByb2plY3QsXG4gICAgICBrID0gMTUwLCAvLyBzY2FsZVxuICAgICAgeCA9IDQ4MCwgeSA9IDI1MCwgLy8gdHJhbnNsYXRlXG4gICAgICBsYW1iZGEgPSAwLCBwaGkgPSAwLCAvLyBjZW50ZXJcbiAgICAgIGRlbHRhTGFtYmRhID0gMCwgZGVsdGFQaGkgPSAwLCBkZWx0YUdhbW1hID0gMCwgcm90YXRlLCAvLyBwcmUtcm90YXRlXG4gICAgICBhbHBoYSA9IDAsIC8vIHBvc3Qtcm90YXRlIGFuZ2xlXG4gICAgICBzeCA9IDEsIC8vIHJlZmxlY3RYXG4gICAgICBzeSA9IDEsIC8vIHJlZmxlY3RYXG4gICAgICB0aGV0YSA9IG51bGwsIHByZWNsaXAgPSBjbGlwQW50aW1lcmlkaWFuLCAvLyBwcmUtY2xpcCBhbmdsZVxuICAgICAgeDAgPSBudWxsLCB5MCwgeDEsIHkxLCBwb3N0Y2xpcCA9IGlkZW50aXR5LCAvLyBwb3N0LWNsaXAgZXh0ZW50XG4gICAgICBkZWx0YTIgPSAwLjUsIC8vIHByZWNpc2lvblxuICAgICAgcHJvamVjdFJlc2FtcGxlLFxuICAgICAgcHJvamVjdFRyYW5zZm9ybSxcbiAgICAgIHByb2plY3RSb3RhdGVUcmFuc2Zvcm0sXG4gICAgICBjYWNoZSxcbiAgICAgIGNhY2hlU3RyZWFtO1xuXG4gIGZ1bmN0aW9uIHByb2plY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gcHJvamVjdFJvdGF0ZVRyYW5zZm9ybShwb2ludFswXSAqIHJhZGlhbnMsIHBvaW50WzFdICogcmFkaWFucyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZlcnQocG9pbnQpIHtcbiAgICBwb2ludCA9IHByb2plY3RSb3RhdGVUcmFuc2Zvcm0uaW52ZXJ0KHBvaW50WzBdLCBwb2ludFsxXSk7XG4gICAgcmV0dXJuIHBvaW50ICYmIFtwb2ludFswXSAqIGRlZ3JlZXMsIHBvaW50WzFdICogZGVncmVlc107XG4gIH1cblxuICBwcm9qZWN0aW9uLnN0cmVhbSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHJldHVybiBjYWNoZSAmJiBjYWNoZVN0cmVhbSA9PT0gc3RyZWFtID8gY2FjaGUgOiBjYWNoZSA9IHRyYW5zZm9ybVJhZGlhbnModHJhbnNmb3JtUm90YXRlKHJvdGF0ZSkocHJlY2xpcChwcm9qZWN0UmVzYW1wbGUocG9zdGNsaXAoY2FjaGVTdHJlYW0gPSBzdHJlYW0pKSkpKTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnByZWNsaXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2xpcCA9IF8sIHRoZXRhID0gdW5kZWZpbmVkLCByZXNldCgpKSA6IHByZWNsaXA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wb3N0Y2xpcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8sIHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgcmVzZXQoKSkgOiBwb3N0Y2xpcDtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmNsaXBBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwcmVjbGlwID0gK18gPyBjbGlwQ2lyY2xlKHRoZXRhID0gXyAqIHJhZGlhbnMpIDogKHRoZXRhID0gbnVsbCwgY2xpcEFudGltZXJpZGlhbiksIHJlc2V0KCkpIDogdGhldGEgKiBkZWdyZWVzO1xuICB9O1xuXG4gIHByb2plY3Rpb24uY2xpcEV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8gPT0gbnVsbCA/ICh4MCA9IHkwID0geDEgPSB5MSA9IG51bGwsIGlkZW50aXR5KSA6IGNsaXBSZWN0YW5nbGUoeDAgPSArX1swXVswXSwgeTAgPSArX1swXVsxXSwgeDEgPSArX1sxXVswXSwgeTEgPSArX1sxXVsxXSksIHJlc2V0KCkpIDogeDAgPT0gbnVsbCA/IG51bGwgOiBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGsgPSArXywgcmVjZW50ZXIoKSkgOiBrO1xuICB9O1xuXG4gIHByb2plY3Rpb24udHJhbnNsYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSArX1swXSwgeSA9ICtfWzFdLCByZWNlbnRlcigpKSA6IFt4LCB5XTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChsYW1iZGEgPSBfWzBdICUgMzYwICogcmFkaWFucywgcGhpID0gX1sxXSAlIDM2MCAqIHJhZGlhbnMsIHJlY2VudGVyKCkpIDogW2xhbWJkYSAqIGRlZ3JlZXMsIHBoaSAqIGRlZ3JlZXNdO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucm90YXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlbHRhTGFtYmRhID0gX1swXSAlIDM2MCAqIHJhZGlhbnMsIGRlbHRhUGhpID0gX1sxXSAlIDM2MCAqIHJhZGlhbnMsIGRlbHRhR2FtbWEgPSBfLmxlbmd0aCA+IDIgPyBfWzJdICUgMzYwICogcmFkaWFucyA6IDAsIHJlY2VudGVyKCkpIDogW2RlbHRhTGFtYmRhICogZGVncmVlcywgZGVsdGFQaGkgKiBkZWdyZWVzLCBkZWx0YUdhbW1hICogZGVncmVlc107XG4gIH07XG5cbiAgcHJvamVjdGlvbi5hbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYSA9IF8gJSAzNjAgKiByYWRpYW5zLCByZWNlbnRlcigpKSA6IGFscGhhICogZGVncmVlcztcbiAgfTtcblxuICBwcm9qZWN0aW9uLnJlZmxlY3RYID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN4ID0gXyA/IC0xIDogMSwgcmVjZW50ZXIoKSkgOiBzeCA8IDA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5yZWZsZWN0WSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzeSA9IF8gPyAtMSA6IDEsIHJlY2VudGVyKCkpIDogc3kgPCAwO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHByb2plY3RSZXNhbXBsZSA9IHJlc2FtcGxlKHByb2plY3RUcmFuc2Zvcm0sIGRlbHRhMiA9IF8gKiBfKSwgcmVzZXQoKSkgOiBzcXJ0KGRlbHRhMik7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRFeHRlbnQgPSBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRFeHRlbnQocHJvamVjdGlvbiwgZXh0ZW50LCBvYmplY3QpO1xuICB9O1xuXG4gIHByb2plY3Rpb24uZml0U2l6ZSA9IGZ1bmN0aW9uKHNpemUsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0V2lkdGgocHJvamVjdGlvbiwgd2lkdGgsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJlY2VudGVyKCkge1xuICAgIHZhciBjZW50ZXIgPSBzY2FsZVRyYW5zbGF0ZVJvdGF0ZShrLCAwLCAwLCBzeCwgc3ksIGFscGhhKS5hcHBseShudWxsLCBwcm9qZWN0KGxhbWJkYSwgcGhpKSksXG4gICAgICAgIHRyYW5zZm9ybSA9IChhbHBoYSA/IHNjYWxlVHJhbnNsYXRlUm90YXRlIDogc2NhbGVUcmFuc2xhdGUpKGssIHggLSBjZW50ZXJbMF0sIHkgLSBjZW50ZXJbMV0sIHN4LCBzeSwgYWxwaGEpO1xuICAgIHJvdGF0ZSA9IHJvdGF0ZVJhZGlhbnMoZGVsdGFMYW1iZGEsIGRlbHRhUGhpLCBkZWx0YUdhbW1hKTtcbiAgICBwcm9qZWN0VHJhbnNmb3JtID0gY29tcG9zZShwcm9qZWN0LCB0cmFuc2Zvcm0pO1xuICAgIHByb2plY3RSb3RhdGVUcmFuc2Zvcm0gPSBjb21wb3NlKHJvdGF0ZSwgcHJvamVjdFRyYW5zZm9ybSk7XG4gICAgcHJvamVjdFJlc2FtcGxlID0gcmVzYW1wbGUocHJvamVjdFRyYW5zZm9ybSwgZGVsdGEyKTtcbiAgICByZXR1cm4gcmVzZXQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHByb2plY3QgPSBwcm9qZWN0QXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBwcm9qZWN0aW9uLmludmVydCA9IHByb2plY3QuaW52ZXJ0ICYmIGludmVydDtcbiAgICByZXR1cm4gcmVjZW50ZXIoKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7ZGVncmVlcywgcGksIHJhZGlhbnN9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge3Byb2plY3Rpb25NdXRhdG9yfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uaWNQcm9qZWN0aW9uKHByb2plY3RBdCkge1xuICB2YXIgcGhpMCA9IDAsXG4gICAgICBwaGkxID0gcGkgLyAzLFxuICAgICAgbSA9IHByb2plY3Rpb25NdXRhdG9yKHByb2plY3RBdCksXG4gICAgICBwID0gbShwaGkwLCBwaGkxKTtcblxuICBwLnBhcmFsbGVscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IG0ocGhpMCA9IF9bMF0gKiByYWRpYW5zLCBwaGkxID0gX1sxXSAqIHJhZGlhbnMpIDogW3BoaTAgKiBkZWdyZWVzLCBwaGkxICogZGVncmVlc107XG4gIH07XG5cbiAgcmV0dXJuIHA7XG59XG4iLCJpbXBvcnQge2FzaW4sIGNvcywgc2lufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3lsaW5kcmljYWxFcXVhbEFyZWFSYXcocGhpMCkge1xuICB2YXIgY29zUGhpMCA9IGNvcyhwaGkwKTtcblxuICBmdW5jdGlvbiBmb3J3YXJkKGxhbWJkYSwgcGhpKSB7XG4gICAgcmV0dXJuIFtsYW1iZGEgKiBjb3NQaGkwLCBzaW4ocGhpKSAvIGNvc1BoaTBdO1xuICB9XG5cbiAgZm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIFt4IC8gY29zUGhpMCwgYXNpbih5ICogY29zUGhpMCldO1xuICB9O1xuXG4gIHJldHVybiBmb3J3YXJkO1xufVxuIiwiaW1wb3J0IHthYnMsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIHBpLCBzaWduLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2NvbmljUHJvamVjdGlvbn0gZnJvbSBcIi4vY29uaWMuanNcIjtcbmltcG9ydCB7Y3lsaW5kcmljYWxFcXVhbEFyZWFSYXd9IGZyb20gXCIuL2N5bGluZHJpY2FsRXF1YWxBcmVhLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0VxdWFsQXJlYVJhdyh5MCwgeTEpIHtcbiAgdmFyIHN5MCA9IHNpbih5MCksIG4gPSAoc3kwICsgc2luKHkxKSkgLyAyO1xuXG4gIC8vIEFyZSB0aGUgcGFyYWxsZWxzIHN5bW1ldHJpY2FsIGFyb3VuZCB0aGUgRXF1YXRvcj9cbiAgaWYgKGFicyhuKSA8IGVwc2lsb24pIHJldHVybiBjeWxpbmRyaWNhbEVxdWFsQXJlYVJhdyh5MCk7XG5cbiAgdmFyIGMgPSAxICsgc3kwICogKDIgKiBuIC0gc3kwKSwgcjAgPSBzcXJ0KGMpIC8gbjtcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICB2YXIgciA9IHNxcnQoYyAtIDIgKiBuICogc2luKHkpKSAvIG47XG4gICAgcmV0dXJuIFtyICogc2luKHggKj0gbiksIHIwIC0gciAqIGNvcyh4KV07XG4gIH1cblxuICBwcm9qZWN0LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgcjB5ID0gcjAgLSB5LFxuICAgICAgICBsID0gYXRhbjIoeCwgYWJzKHIweSkpICogc2lnbihyMHkpO1xuICAgIGlmIChyMHkgKiBuIDwgMClcbiAgICAgIGwgLT0gcGkgKiBzaWduKHgpICogc2lnbihyMHkpO1xuICAgIHJldHVybiBbbCAvIG4sIGFzaW4oKGMgLSAoeCAqIHggKyByMHkgKiByMHkpICogbiAqIG4pIC8gKDIgKiBuKSldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0VxdWFsQXJlYVJhdylcbiAgICAgIC5zY2FsZSgxNTUuNDI0KVxuICAgICAgLmNlbnRlcihbMCwgMzMuNjQ0Ml0pO1xufVxuIiwiaW1wb3J0IGNvbmljRXF1YWxBcmVhIGZyb20gXCIuL2NvbmljRXF1YWxBcmVhLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY29uaWNFcXVhbEFyZWEoKVxuICAgICAgLnBhcmFsbGVscyhbMjkuNSwgNDUuNV0pXG4gICAgICAuc2NhbGUoMTA3MClcbiAgICAgIC50cmFuc2xhdGUoWzQ4MCwgMjUwXSlcbiAgICAgIC5yb3RhdGUoWzk2LCAwXSlcbiAgICAgIC5jZW50ZXIoWy0wLjYsIDM4LjddKTtcbn1cbiIsImltcG9ydCB7ZXBzaWxvbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBhbGJlcnMgZnJvbSBcIi4vYWxiZXJzLmpzXCI7XG5pbXBvcnQgY29uaWNFcXVhbEFyZWEgZnJvbSBcIi4vY29uaWNFcXVhbEFyZWEuanNcIjtcbmltcG9ydCB7Zml0RXh0ZW50LCBmaXRTaXplLCBmaXRXaWR0aCwgZml0SGVpZ2h0fSBmcm9tIFwiLi9maXQuanNcIjtcblxuLy8gVGhlIHByb2plY3Rpb25zIG11c3QgaGF2ZSBtdXR1YWxseSBleGNsdXNpdmUgY2xpcCByZWdpb25zIG9uIHRoZSBzcGhlcmUsXG4vLyBhcyB0aGlzIHdpbGwgYXZvaWQgZW1pdHRpbmcgaW50ZXJsZWF2aW5nIGxpbmVzIGFuZCBwb2x5Z29ucy5cbmZ1bmN0aW9uIG11bHRpcGxleChzdHJlYW1zKSB7XG4gIHZhciBuID0gc3RyZWFtcy5sZW5ndGg7XG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0ucG9pbnQoeCwgeSk7IH0sXG4gICAgc3BoZXJlOiBmdW5jdGlvbigpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0uc3BoZXJlKCk7IH0sXG4gICAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0ubGluZVN0YXJ0KCk7IH0sXG4gICAgbGluZUVuZDogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLmxpbmVFbmQoKTsgfSxcbiAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5wb2x5Z29uU3RhcnQoKTsgfSxcbiAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0ucG9seWdvbkVuZCgpOyB9XG4gIH07XG59XG5cbi8vIEEgY29tcG9zaXRlIHByb2plY3Rpb24gZm9yIHRoZSBVbml0ZWQgU3RhdGVzLCBjb25maWd1cmVkIGJ5IGRlZmF1bHQgZm9yXG4vLyA5NjDDlzUwMC4gVGhlIHByb2plY3Rpb24gYWxzbyB3b3JrcyBxdWl0ZSB3ZWxsIGF0IDk2MMOXNjAwIGlmIHlvdSBjaGFuZ2UgdGhlXG4vLyBzY2FsZSB0byAxMjg1IGFuZCBhZGp1c3QgdGhlIHRyYW5zbGF0ZSBhY2NvcmRpbmdseS4gVGhlIHNldCBvZiBzdGFuZGFyZFxuLy8gcGFyYWxsZWxzIGZvciBlYWNoIHJlZ2lvbiBjb21lcyBmcm9tIFVTR1MsIHdoaWNoIGlzIHB1Ymxpc2hlZCBoZXJlOlxuLy8gaHR0cDovL2Vnc2MudXNncy5nb3YvaXNiL3B1YnMvTWFwUHJvamVjdGlvbnMvcHJvamVjdGlvbnMuaHRtbCNhbGJlcnNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FjaGUsXG4gICAgICBjYWNoZVN0cmVhbSxcbiAgICAgIGxvd2VyNDggPSBhbGJlcnMoKSwgbG93ZXI0OFBvaW50LFxuICAgICAgYWxhc2thID0gY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwgMF0pLmNlbnRlcihbLTIsIDU4LjVdKS5wYXJhbGxlbHMoWzU1LCA2NV0pLCBhbGFza2FQb2ludCwgLy8gRVBTRzozMzM4XG4gICAgICBoYXdhaWkgPSBjb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LCAwXSkuY2VudGVyKFstMywgMTkuOV0pLnBhcmFsbGVscyhbOCwgMThdKSwgaGF3YWlpUG9pbnQsIC8vIEVTUkk6MTAyMDA3XG4gICAgICBwb2ludCwgcG9pbnRTdHJlYW0gPSB7cG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHsgcG9pbnQgPSBbeCwgeV07IH19O1xuXG4gIGZ1bmN0aW9uIGFsYmVyc1VzYShjb29yZGluYXRlcykge1xuICAgIHZhciB4ID0gY29vcmRpbmF0ZXNbMF0sIHkgPSBjb29yZGluYXRlc1sxXTtcbiAgICByZXR1cm4gcG9pbnQgPSBudWxsLFxuICAgICAgICAobG93ZXI0OFBvaW50LnBvaW50KHgsIHkpLCBwb2ludClcbiAgICAgICAgfHwgKGFsYXNrYVBvaW50LnBvaW50KHgsIHkpLCBwb2ludClcbiAgICAgICAgfHwgKGhhd2FpaVBvaW50LnBvaW50KHgsIHkpLCBwb2ludCk7XG4gIH1cblxuICBhbGJlcnNVc2EuaW52ZXJ0ID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpIHtcbiAgICB2YXIgayA9IGxvd2VyNDguc2NhbGUoKSxcbiAgICAgICAgdCA9IGxvd2VyNDgudHJhbnNsYXRlKCksXG4gICAgICAgIHggPSAoY29vcmRpbmF0ZXNbMF0gLSB0WzBdKSAvIGssXG4gICAgICAgIHkgPSAoY29vcmRpbmF0ZXNbMV0gLSB0WzFdKSAvIGs7XG4gICAgcmV0dXJuICh5ID49IDAuMTIwICYmIHkgPCAwLjIzNCAmJiB4ID49IC0wLjQyNSAmJiB4IDwgLTAuMjE0ID8gYWxhc2thXG4gICAgICAgIDogeSA+PSAwLjE2NiAmJiB5IDwgMC4yMzQgJiYgeCA+PSAtMC4yMTQgJiYgeCA8IC0wLjExNSA/IGhhd2FpaVxuICAgICAgICA6IGxvd2VyNDgpLmludmVydChjb29yZGluYXRlcyk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLnN0cmVhbSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHJldHVybiBjYWNoZSAmJiBjYWNoZVN0cmVhbSA9PT0gc3RyZWFtID8gY2FjaGUgOiBjYWNoZSA9IG11bHRpcGxleChbbG93ZXI0OC5zdHJlYW0oY2FjaGVTdHJlYW0gPSBzdHJlYW0pLCBhbGFza2Euc3RyZWFtKHN0cmVhbSksIGhhd2FpaS5zdHJlYW0oc3RyZWFtKV0pO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG93ZXI0OC5wcmVjaXNpb24oKTtcbiAgICBsb3dlcjQ4LnByZWNpc2lvbihfKSwgYWxhc2thLnByZWNpc2lvbihfKSwgaGF3YWlpLnByZWNpc2lvbihfKTtcbiAgICByZXR1cm4gcmVzZXQoKTtcbiAgfTtcblxuICBhbGJlcnNVc2Euc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG93ZXI0OC5zY2FsZSgpO1xuICAgIGxvd2VyNDguc2NhbGUoXyksIGFsYXNrYS5zY2FsZShfICogMC4zNSksIGhhd2FpaS5zY2FsZShfKTtcbiAgICByZXR1cm4gYWxiZXJzVXNhLnRyYW5zbGF0ZShsb3dlcjQ4LnRyYW5zbGF0ZSgpKTtcbiAgfTtcblxuICBhbGJlcnNVc2EudHJhbnNsYXRlID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDgudHJhbnNsYXRlKCk7XG4gICAgdmFyIGsgPSBsb3dlcjQ4LnNjYWxlKCksIHggPSArX1swXSwgeSA9ICtfWzFdO1xuXG4gICAgbG93ZXI0OFBvaW50ID0gbG93ZXI0OFxuICAgICAgICAudHJhbnNsYXRlKF8pXG4gICAgICAgIC5jbGlwRXh0ZW50KFtbeCAtIDAuNDU1ICogaywgeSAtIDAuMjM4ICoga10sIFt4ICsgMC40NTUgKiBrLCB5ICsgMC4yMzggKiBrXV0pXG4gICAgICAgIC5zdHJlYW0ocG9pbnRTdHJlYW0pO1xuXG4gICAgYWxhc2thUG9pbnQgPSBhbGFza2FcbiAgICAgICAgLnRyYW5zbGF0ZShbeCAtIDAuMzA3ICogaywgeSArIDAuMjAxICoga10pXG4gICAgICAgIC5jbGlwRXh0ZW50KFtbeCAtIDAuNDI1ICogayArIGVwc2lsb24sIHkgKyAwLjEyMCAqIGsgKyBlcHNpbG9uXSwgW3ggLSAwLjIxNCAqIGsgLSBlcHNpbG9uLCB5ICsgMC4yMzQgKiBrIC0gZXBzaWxvbl1dKVxuICAgICAgICAuc3RyZWFtKHBvaW50U3RyZWFtKTtcblxuICAgIGhhd2FpaVBvaW50ID0gaGF3YWlpXG4gICAgICAgIC50cmFuc2xhdGUoW3ggLSAwLjIwNSAqIGssIHkgKyAwLjIxMiAqIGtdKVxuICAgICAgICAuY2xpcEV4dGVudChbW3ggLSAwLjIxNCAqIGsgKyBlcHNpbG9uLCB5ICsgMC4xNjYgKiBrICsgZXBzaWxvbl0sIFt4IC0gMC4xMTUgKiBrIC0gZXBzaWxvbiwgeSArIDAuMjM0ICogayAtIGVwc2lsb25dXSlcbiAgICAgICAgLnN0cmVhbShwb2ludFN0cmVhbSk7XG5cbiAgICByZXR1cm4gcmVzZXQoKTtcbiAgfTtcblxuICBhbGJlcnNVc2EuZml0RXh0ZW50ID0gZnVuY3Rpb24oZXh0ZW50LCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0RXh0ZW50KGFsYmVyc1VzYSwgZXh0ZW50LCBvYmplY3QpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5maXRTaXplID0gZnVuY3Rpb24oc2l6ZSwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdFNpemUoYWxiZXJzVXNhLCBzaXplLCBvYmplY3QpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5maXRXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0V2lkdGgoYWxiZXJzVXNhLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcblxuICBhbGJlcnNVc2EuZml0SGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0LCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0SGVpZ2h0KGFsYmVyc1VzYSwgaGVpZ2h0LCBvYmplY3QpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBhbGJlcnNVc2E7XG4gIH1cblxuICByZXR1cm4gYWxiZXJzVXNhLnNjYWxlKDEwNzApO1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxSYXcoc2NhbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgY3ggPSBjb3MoeCksXG4gICAgICAgIGN5ID0gY29zKHkpLFxuICAgICAgICBrID0gc2NhbGUoY3ggKiBjeSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGsgKiBjeSAqIHNpbih4KSxcbiAgICAgIGsgKiBzaW4oeSlcbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxJbnZlcnQoYW5nbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgeiA9IHNxcnQoeCAqIHggKyB5ICogeSksXG4gICAgICAgIGMgPSBhbmdsZSh6KSxcbiAgICAgICAgc2MgPSBzaW4oYyksXG4gICAgICAgIGNjID0gY29zKGMpO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih4ICogc2MsIHogKiBjYyksXG4gICAgICBhc2luKHogJiYgeSAqIHNjIC8geilcbiAgICBdO1xuICB9XG59XG4iLCJpbXBvcnQge2FzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2F6aW11dGhhbFJhdywgYXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWwuanNcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCB2YXIgYXppbXV0aGFsRXF1YWxBcmVhUmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGN4Y3kpIHtcbiAgcmV0dXJuIHNxcnQoMiAvICgxICsgY3hjeSkpO1xufSk7XG5cbmF6aW11dGhhbEVxdWFsQXJlYVJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gMiAqIGFzaW4oeiAvIDIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihhemltdXRoYWxFcXVhbEFyZWFSYXcpXG4gICAgICAuc2NhbGUoMTI0Ljc1KVxuICAgICAgLmNsaXBBbmdsZSgxODAgLSAxZS0zKTtcbn1cbiIsImltcG9ydCB7YWNvcywgc2lufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWlkaXN0YW50UmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGMpIHtcbiAgcmV0dXJuIChjID0gYWNvcyhjKSkgJiYgYyAvIHNpbihjKTtcbn0pO1xuXG5hemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gejtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcpXG4gICAgICAuc2NhbGUoNzkuNDE4OClcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iLCJpbXBvcnQge2F0YW4sIGV4cCwgaGFsZlBpLCBsb2csIHBpLCB0YW4sIHRhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCByb3RhdGlvbiBmcm9tIFwiLi4vcm90YXRpb24uanNcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xhbWJkYSwgbG9nKHRhbigoaGFsZlBpICsgcGhpKSAvIDIpKV07XG59XG5cbm1lcmNhdG9yUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgcmV0dXJuIFt4LCAyICogYXRhbihleHAoeSkpIC0gaGFsZlBpXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbWVyY2F0b3JQcm9qZWN0aW9uKG1lcmNhdG9yUmF3KVxuICAgICAgLnNjYWxlKDk2MSAvIHRhdSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclByb2plY3Rpb24ocHJvamVjdCkge1xuICB2YXIgbSA9IHByb2plY3Rpb24ocHJvamVjdCksXG4gICAgICBjZW50ZXIgPSBtLmNlbnRlcixcbiAgICAgIHNjYWxlID0gbS5zY2FsZSxcbiAgICAgIHRyYW5zbGF0ZSA9IG0udHJhbnNsYXRlLFxuICAgICAgY2xpcEV4dGVudCA9IG0uY2xpcEV4dGVudCxcbiAgICAgIHgwID0gbnVsbCwgeTAsIHgxLCB5MTsgLy8gY2xpcCBleHRlbnRcblxuICBtLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlKF8pLCByZWNsaXAoKSkgOiBzY2FsZSgpO1xuICB9O1xuXG4gIG0udHJhbnNsYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zbGF0ZShfKSwgcmVjbGlwKCkpIDogdHJhbnNsYXRlKCk7XG4gIH07XG5cbiAgbS5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2VudGVyKF8pLCByZWNsaXAoKSkgOiBjZW50ZXIoKTtcbiAgfTtcblxuICBtLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKF8gPT0gbnVsbCA/IHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCA6ICh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKSksIHJlY2xpcCgpKSA6IHgwID09IG51bGwgPyBudWxsIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjbGlwKCkge1xuICAgIHZhciBrID0gcGkgKiBzY2FsZSgpLFxuICAgICAgICB0ID0gbShyb3RhdGlvbihtLnJvdGF0ZSgpKS5pbnZlcnQoWzAsIDBdKSk7XG4gICAgcmV0dXJuIGNsaXBFeHRlbnQoeDAgPT0gbnVsbFxuICAgICAgICA/IFtbdFswXSAtIGssIHRbMV0gLSBrXSwgW3RbMF0gKyBrLCB0WzFdICsga11dIDogcHJvamVjdCA9PT0gbWVyY2F0b3JSYXdcbiAgICAgICAgPyBbW01hdGgubWF4KHRbMF0gLSBrLCB4MCksIHkwXSwgW01hdGgubWluKHRbMF0gKyBrLCB4MSksIHkxXV1cbiAgICAgICAgOiBbW3gwLCBNYXRoLm1heCh0WzFdIC0gaywgeTApXSwgW3gxLCBNYXRoLm1pbih0WzFdICsgaywgeTEpXV0pO1xuICB9XG5cbiAgcmV0dXJuIHJlY2xpcCgpO1xufVxuIiwiaW1wb3J0IHthYnMsIGF0YW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgbG9nLCBwaSwgcG93LCBzaWduLCBzaW4sIHNxcnQsIHRhbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7Y29uaWNQcm9qZWN0aW9ufSBmcm9tIFwiLi9jb25pYy5qc1wiO1xuaW1wb3J0IHttZXJjYXRvclJhd30gZnJvbSBcIi4vbWVyY2F0b3IuanNcIjtcblxuZnVuY3Rpb24gdGFueSh5KSB7XG4gIHJldHVybiB0YW4oKGhhbGZQaSArIHkpIC8gMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0NvbmZvcm1hbFJhdyh5MCwgeTEpIHtcbiAgdmFyIGN5MCA9IGNvcyh5MCksXG4gICAgICBuID0geTAgPT09IHkxID8gc2luKHkwKSA6IGxvZyhjeTAgLyBjb3MoeTEpKSAvIGxvZyh0YW55KHkxKSAvIHRhbnkoeTApKSxcbiAgICAgIGYgPSBjeTAgKiBwb3codGFueSh5MCksIG4pIC8gbjtcblxuICBpZiAoIW4pIHJldHVybiBtZXJjYXRvclJhdztcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICBpZiAoZiA+IDApIHsgaWYgKHkgPCAtaGFsZlBpICsgZXBzaWxvbikgeSA9IC1oYWxmUGkgKyBlcHNpbG9uOyB9XG4gICAgZWxzZSB7IGlmICh5ID4gaGFsZlBpIC0gZXBzaWxvbikgeSA9IGhhbGZQaSAtIGVwc2lsb247IH1cbiAgICB2YXIgciA9IGYgLyBwb3codGFueSh5KSwgbik7XG4gICAgcmV0dXJuIFtyICogc2luKG4gKiB4KSwgZiAtIHIgKiBjb3MobiAqIHgpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBmeSA9IGYgLSB5LCByID0gc2lnbihuKSAqIHNxcnQoeCAqIHggKyBmeSAqIGZ5KSxcbiAgICAgIGwgPSBhdGFuMih4LCBhYnMoZnkpKSAqIHNpZ24oZnkpO1xuICAgIGlmIChmeSAqIG4gPCAwKVxuICAgICAgbCAtPSBwaSAqIHNpZ24oeCkgKiBzaWduKGZ5KTtcbiAgICByZXR1cm4gW2wgLyBuLCAyICogYXRhbihwb3coZiAvIHIsIDEgLyBuKSkgLSBoYWxmUGldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0NvbmZvcm1hbFJhdylcbiAgICAgIC5zY2FsZSgxMDkuNSlcbiAgICAgIC5wYXJhbGxlbHMoWzMwLCAzMF0pO1xufVxuIiwiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWlyZWN0YW5ndWxhclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xhbWJkYSwgcGhpXTtcbn1cblxuZXF1aXJlY3Rhbmd1bGFyUmF3LmludmVydCA9IGVxdWlyZWN0YW5ndWxhclJhdztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGVxdWlyZWN0YW5ndWxhclJhdylcbiAgICAgIC5zY2FsZSgxNTIuNjMpO1xufVxuIiwiaW1wb3J0IHthYnMsIGF0YW4yLCBjb3MsIGVwc2lsb24sIHBpLCBzaWduLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2NvbmljUHJvamVjdGlvbn0gZnJvbSBcIi4vY29uaWMuanNcIjtcbmltcG9ydCB7ZXF1aXJlY3Rhbmd1bGFyUmF3fSBmcm9tIFwiLi9lcXVpcmVjdGFuZ3VsYXIuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmljRXF1aWRpc3RhbnRSYXcoeTAsIHkxKSB7XG4gIHZhciBjeTAgPSBjb3MoeTApLFxuICAgICAgbiA9IHkwID09PSB5MSA/IHNpbih5MCkgOiAoY3kwIC0gY29zKHkxKSkgLyAoeTEgLSB5MCksXG4gICAgICBnID0gY3kwIC8gbiArIHkwO1xuXG4gIGlmIChhYnMobikgPCBlcHNpbG9uKSByZXR1cm4gZXF1aXJlY3Rhbmd1bGFyUmF3O1xuXG4gIGZ1bmN0aW9uIHByb2plY3QoeCwgeSkge1xuICAgIHZhciBneSA9IGcgLSB5LCBueCA9IG4gKiB4O1xuICAgIHJldHVybiBbZ3kgKiBzaW4obngpLCBnIC0gZ3kgKiBjb3MobngpXTtcbiAgfVxuXG4gIHByb2plY3QuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBneSA9IGcgLSB5LFxuICAgICAgICBsID0gYXRhbjIoeCwgYWJzKGd5KSkgKiBzaWduKGd5KTtcbiAgICBpZiAoZ3kgKiBuIDwgMClcbiAgICAgIGwgLT0gcGkgKiBzaWduKHgpICogc2lnbihneSk7XG4gICAgcmV0dXJuIFtsIC8gbiwgZyAtIHNpZ24obikgKiBzcXJ0KHggKiB4ICsgZ3kgKiBneSldO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljUHJvamVjdGlvbihjb25pY0VxdWlkaXN0YW50UmF3KVxuICAgICAgLnNjYWxlKDEzMS4xNTQpXG4gICAgICAuY2VudGVyKFswLCAxMy45Mzg5XSk7XG59XG4iLCJpbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHthYnMsIGFzaW4sIGNvcywgZXBzaWxvbjIsIHNpbiwgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcblxudmFyIEExID0gMS4zNDAyNjQsXG4gICAgQTIgPSAtMC4wODExMDYsXG4gICAgQTMgPSAwLjAwMDg5MyxcbiAgICBBNCA9IDAuMDAzNzk2LFxuICAgIE0gPSBzcXJ0KDMpIC8gMixcbiAgICBpdGVyYXRpb25zID0gMTI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbEVhcnRoUmF3KGxhbWJkYSwgcGhpKSB7XG4gIHZhciBsID0gYXNpbihNICogc2luKHBoaSkpLCBsMiA9IGwgKiBsLCBsNiA9IGwyICogbDIgKiBsMjtcbiAgcmV0dXJuIFtcbiAgICBsYW1iZGEgKiBjb3MobCkgLyAoTSAqIChBMSArIDMgKiBBMiAqIGwyICsgbDYgKiAoNyAqIEEzICsgOSAqIEE0ICogbDIpKSksXG4gICAgbCAqIChBMSArIEEyICogbDIgKyBsNiAqIChBMyArIEE0ICogbDIpKVxuICBdO1xufVxuXG5lcXVhbEVhcnRoUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIGwgPSB5LCBsMiA9IGwgKiBsLCBsNiA9IGwyICogbDIgKiBsMjtcbiAgZm9yICh2YXIgaSA9IDAsIGRlbHRhLCBmeSwgZnB5OyBpIDwgaXRlcmF0aW9uczsgKytpKSB7XG4gICAgZnkgPSBsICogKEExICsgQTIgKiBsMiArIGw2ICogKEEzICsgQTQgKiBsMikpIC0geTtcbiAgICBmcHkgPSBBMSArIDMgKiBBMiAqIGwyICsgbDYgKiAoNyAqIEEzICsgOSAqIEE0ICogbDIpO1xuICAgIGwgLT0gZGVsdGEgPSBmeSAvIGZweSwgbDIgPSBsICogbCwgbDYgPSBsMiAqIGwyICogbDI7XG4gICAgaWYgKGFicyhkZWx0YSkgPCBlcHNpbG9uMikgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIFtcbiAgICBNICogeCAqIChBMSArIDMgKiBBMiAqIGwyICsgbDYgKiAoNyAqIEEzICsgOSAqIEE0ICogbDIpKSAvIGNvcyhsKSxcbiAgICBhc2luKHNpbihsKSAvIE0pXG4gIF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oZXF1YWxFYXJ0aFJhdylcbiAgICAgIC5zY2FsZSgxNzcuMTU4KTtcbn1cbiIsImltcG9ydCB7YXRhbiwgY29zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ25vbW9uaWNSYXcoeCwgeSkge1xuICB2YXIgY3kgPSBjb3MoeSksIGsgPSBjb3MoeCkgKiBjeTtcbiAgcmV0dXJuIFtjeSAqIHNpbih4KSAvIGssIHNpbih5KSAvIGtdO1xufVxuXG5nbm9tb25pY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoYXRhbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihnbm9tb25pY1JhdylcbiAgICAgIC5zY2FsZSgxNDQuMDQ5KVxuICAgICAgLmNsaXBBbmdsZSg2MCk7XG59XG4iLCJpbXBvcnQgY2xpcFJlY3RhbmdsZSBmcm9tIFwiLi4vY2xpcC9yZWN0YW5nbGUuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCB7Zml0RXh0ZW50LCBmaXRTaXplLCBmaXRXaWR0aCwgZml0SGVpZ2h0fSBmcm9tIFwiLi9maXQuanNcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgayA9IDEsIHR4ID0gMCwgdHkgPSAwLCBzeCA9IDEsIHN5ID0gMSwgLy8gc2NhbGUsIHRyYW5zbGF0ZSBhbmQgcmVmbGVjdFxuICAgICAgYWxwaGEgPSAwLCBjYSwgc2EsIC8vIGFuZ2xlXG4gICAgICB4MCA9IG51bGwsIHkwLCB4MSwgeTEsIC8vIGNsaXAgZXh0ZW50XG4gICAgICBreCA9IDEsIGt5ID0gMSxcbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybWVyKHtcbiAgICAgICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgICB2YXIgcCA9IHByb2plY3Rpb24oW3gsIHldKVxuICAgICAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHBbMF0sIHBbMV0pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHBvc3RjbGlwID0gaWRlbnRpdHksXG4gICAgICBjYWNoZSxcbiAgICAgIGNhY2hlU3RyZWFtO1xuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGt4ID0gayAqIHN4O1xuICAgIGt5ID0gayAqIHN5O1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvamVjdGlvbiAocCkge1xuICAgIHZhciB4ID0gcFswXSAqIGt4LCB5ID0gcFsxXSAqIGt5O1xuICAgIGlmIChhbHBoYSkge1xuICAgICAgdmFyIHQgPSB5ICogY2EgLSB4ICogc2E7XG4gICAgICB4ID0geCAqIGNhICsgeSAqIHNhO1xuICAgICAgeSA9IHQ7XG4gICAgfSAgICBcbiAgICByZXR1cm4gW3ggKyB0eCwgeSArIHR5XTtcbiAgfVxuICBwcm9qZWN0aW9uLmludmVydCA9IGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgeCA9IHBbMF0gLSB0eCwgeSA9IHBbMV0gLSB0eTtcbiAgICBpZiAoYWxwaGEpIHtcbiAgICAgIHZhciB0ID0geSAqIGNhICsgeCAqIHNhO1xuICAgICAgeCA9IHggKiBjYSAtIHkgKiBzYTtcbiAgICAgIHkgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gW3ggLyBreCwgeSAvIGt5XTtcbiAgfTtcbiAgcHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSB0cmFuc2Zvcm0ocG9zdGNsaXAoY2FjaGVTdHJlYW0gPSBzdHJlYW0pKTtcbiAgfTtcbiAgcHJvamVjdGlvbi5wb3N0Y2xpcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8sIHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgcmVzZXQoKSkgOiBwb3N0Y2xpcDtcbiAgfTtcbiAgcHJvamVjdGlvbi5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBvc3RjbGlwID0gXyA9PSBudWxsID8gKHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgaWRlbnRpdHkpIDogY2xpcFJlY3RhbmdsZSh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKSwgcmVzZXQoKSkgOiB4MCA9PSBudWxsID8gbnVsbCA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICB9O1xuICBwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGsgPSArXywgcmVzZXQoKSkgOiBrO1xuICB9O1xuICBwcm9qZWN0aW9uLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0eCA9ICtfWzBdLCB0eSA9ICtfWzFdLCByZXNldCgpKSA6IFt0eCwgdHldO1xuICB9XG4gIHByb2plY3Rpb24uYW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSBfICUgMzYwICogcmFkaWFucywgc2EgPSBzaW4oYWxwaGEpLCBjYSA9IGNvcyhhbHBoYSksIHJlc2V0KCkpIDogYWxwaGEgKiBkZWdyZWVzO1xuICB9O1xuICBwcm9qZWN0aW9uLnJlZmxlY3RYID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN4ID0gXyA/IC0xIDogMSwgcmVzZXQoKSkgOiBzeCA8IDA7XG4gIH07XG4gIHByb2plY3Rpb24ucmVmbGVjdFkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3kgPSBfID8gLTEgOiAxLCByZXNldCgpKSA6IHN5IDwgMDtcbiAgfTtcbiAgcHJvamVjdGlvbi5maXRFeHRlbnQgPSBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRFeHRlbnQocHJvamVjdGlvbiwgZXh0ZW50LCBvYmplY3QpO1xuICB9O1xuICBwcm9qZWN0aW9uLmZpdFNpemUgPSBmdW5jdGlvbihzaXplLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0U2l6ZShwcm9qZWN0aW9uLCBzaXplLCBvYmplY3QpO1xuICB9O1xuICBwcm9qZWN0aW9uLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChwcm9qZWN0aW9uLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcbiAgcHJvamVjdGlvbi5maXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuIiwiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7YWJzLCBlcHNpbG9ufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbmF0dXJhbEVhcnRoMVJhdyhsYW1iZGEsIHBoaSkge1xuICB2YXIgcGhpMiA9IHBoaSAqIHBoaSwgcGhpNCA9IHBoaTIgKiBwaGkyO1xuICByZXR1cm4gW1xuICAgIGxhbWJkYSAqICgwLjg3MDcgLSAwLjEzMTk3OSAqIHBoaTIgKyBwaGk0ICogKC0wLjAxMzc5MSArIHBoaTQgKiAoMC4wMDM5NzEgKiBwaGkyIC0gMC4wMDE1MjkgKiBwaGk0KSkpLFxuICAgIHBoaSAqICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKyBwaGk0ICogKC0wLjA0NDQ3NSArIDAuMDI4ODc0ICogcGhpMiAtIDAuMDA1OTE2ICogcGhpNCkpKVxuICBdO1xufVxuXG5uYXR1cmFsRWFydGgxUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIHBoaSA9IHksIGkgPSAyNSwgZGVsdGE7XG4gIGRvIHtcbiAgICB2YXIgcGhpMiA9IHBoaSAqIHBoaSwgcGhpNCA9IHBoaTIgKiBwaGkyO1xuICAgIHBoaSAtPSBkZWx0YSA9IChwaGkgKiAoMS4wMDcyMjYgKyBwaGkyICogKDAuMDE1MDg1ICsgcGhpNCAqICgtMC4wNDQ0NzUgKyAwLjAyODg3NCAqIHBoaTIgLSAwLjAwNTkxNiAqIHBoaTQpKSkgLSB5KSAvXG4gICAgICAgICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKiAzICsgcGhpNCAqICgtMC4wNDQ0NzUgKiA3ICsgMC4wMjg4NzQgKiA5ICogcGhpMiAtIDAuMDA1OTE2ICogMTEgKiBwaGk0KSkpO1xuICB9IHdoaWxlIChhYnMoZGVsdGEpID4gZXBzaWxvbiAmJiAtLWkgPiAwKTtcbiAgcmV0dXJuIFtcbiAgICB4IC8gKDAuODcwNyArIChwaGkyID0gcGhpICogcGhpKSAqICgtMC4xMzE5NzkgKyBwaGkyICogKC0wLjAxMzc5MSArIHBoaTIgKiBwaGkyICogcGhpMiAqICgwLjAwMzk3MSAtIDAuMDAxNTI5ICogcGhpMikpKSksXG4gICAgcGhpXG4gIF07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24obmF0dXJhbEVhcnRoMVJhdylcbiAgICAgIC5zY2FsZSgxNzUuMjk1KTtcbn1cbiIsImltcG9ydCB7YXNpbiwgY29zLCBlcHNpbG9uLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3J0aG9ncmFwaGljUmF3KHgsIHkpIHtcbiAgcmV0dXJuIFtjb3MoeSkgKiBzaW4oeCksIHNpbih5KV07XG59XG5cbm9ydGhvZ3JhcGhpY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoYXNpbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihvcnRob2dyYXBoaWNSYXcpXG4gICAgICAuc2NhbGUoMjQ5LjUpXG4gICAgICAuY2xpcEFuZ2xlKDkwICsgZXBzaWxvbik7XG59XG4iLCJpbXBvcnQge2F0YW4sIGNvcywgc2lufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHthemltdXRoYWxJbnZlcnR9IGZyb20gXCIuL2F6aW11dGhhbC5qc1wiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXJlb2dyYXBoaWNSYXcoeCwgeSkge1xuICB2YXIgY3kgPSBjb3MoeSksIGsgPSAxICsgY29zKHgpICogY3k7XG4gIHJldHVybiBbY3kgKiBzaW4oeCkgLyBrLCBzaW4oeSkgLyBrXTtcbn1cblxuc3RlcmVvZ3JhcGhpY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gMiAqIGF0YW4oeik7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKHN0ZXJlb2dyYXBoaWNSYXcpXG4gICAgICAuc2NhbGUoMjUwKVxuICAgICAgLmNsaXBBbmdsZSgxNDIpO1xufVxuIiwiaW1wb3J0IHthdGFuLCBleHAsIGhhbGZQaSwgbG9nLCB0YW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge21lcmNhdG9yUHJvamVjdGlvbn0gZnJvbSBcIi4vbWVyY2F0b3IuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zdmVyc2VNZXJjYXRvclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xvZyh0YW4oKGhhbGZQaSArIHBoaSkgLyAyKSksIC1sYW1iZGFdO1xufVxuXG50cmFuc3ZlcnNlTWVyY2F0b3JSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4gWy15LCAyICogYXRhbihleHAoeCkpIC0gaGFsZlBpXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbSA9IG1lcmNhdG9yUHJvamVjdGlvbih0cmFuc3ZlcnNlTWVyY2F0b3JSYXcpLFxuICAgICAgY2VudGVyID0gbS5jZW50ZXIsXG4gICAgICByb3RhdGUgPSBtLnJvdGF0ZTtcblxuICBtLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGNlbnRlcihbLV9bMV0sIF9bMF1dKSA6IChfID0gY2VudGVyKCksIFtfWzFdLCAtX1swXV0pO1xuICB9O1xuXG4gIG0ucm90YXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gcm90YXRlKFtfWzBdLCBfWzFdLCBfLmxlbmd0aCA+IDIgPyBfWzJdICsgOTAgOiA5MF0pIDogKF8gPSByb3RhdGUoKSwgW19bMF0sIF9bMV0sIF9bMl0gLSA5MF0pO1xuICB9O1xuXG4gIHJldHVybiByb3RhdGUoWzAsIDAsIDkwXSlcbiAgICAgIC5zY2FsZSgxNTkuMTU1KTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BcmVhfSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQm91bmRzfSBmcm9tIFwiLi9ib3VuZHMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DZW50cm9pZH0gZnJvbSBcIi4vY2VudHJvaWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DaXJjbGV9IGZyb20gXCIuL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0NsaXBBbnRpbWVyaWRpYW59IGZyb20gXCIuL2NsaXAvYW50aW1lcmlkaWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2xpcENpcmNsZX0gZnJvbSBcIi4vY2xpcC9jaXJjbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DbGlwRXh0ZW50fSBmcm9tIFwiLi9jbGlwL2V4dGVudC5qc1wiOyAvLyBERVBSRUNBVEVEISBVc2UgZDMuZ2VvSWRlbnRpdHkoKS5jbGlwRXh0ZW50KOKApikuXG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2xpcFJlY3RhbmdsZX0gZnJvbSBcIi4vY2xpcC9yZWN0YW5nbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db250YWluc30gZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9EaXN0YW5jZX0gZnJvbSBcIi4vZGlzdGFuY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9HcmF0aWN1bGUsIGdyYXRpY3VsZTEwIGFzIGdlb0dyYXRpY3VsZTEwfSBmcm9tIFwiLi9ncmF0aWN1bGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9JbnRlcnBvbGF0ZX0gZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9MZW5ndGh9IGZyb20gXCIuL2xlbmd0aC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1BhdGh9IGZyb20gXCIuL3BhdGgvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BbGJlcnN9IGZyb20gXCIuL3Byb2plY3Rpb24vYWxiZXJzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQWxiZXJzVXNhfSBmcm9tIFwiLi9wcm9qZWN0aW9uL2FsYmVyc1VzYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0F6aW11dGhhbEVxdWFsQXJlYSwgYXppbXV0aGFsRXF1YWxBcmVhUmF3IGFzIGdlb0F6aW11dGhhbEVxdWFsQXJlYVJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9hemltdXRoYWxFcXVhbEFyZWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BemltdXRoYWxFcXVpZGlzdGFudCwgYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcgYXMgZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1aWRpc3RhbnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db25pY0NvbmZvcm1hbCwgY29uaWNDb25mb3JtYWxSYXcgYXMgZ2VvQ29uaWNDb25mb3JtYWxSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vY29uaWNDb25mb3JtYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db25pY0VxdWFsQXJlYSwgY29uaWNFcXVhbEFyZWFSYXcgYXMgZ2VvQ29uaWNFcXVhbEFyZWFSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vY29uaWNFcXVhbEFyZWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Db25pY0VxdWlkaXN0YW50LCBjb25pY0VxdWlkaXN0YW50UmF3IGFzIGdlb0NvbmljRXF1aWRpc3RhbnRSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vY29uaWNFcXVpZGlzdGFudC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0VxdWFsRWFydGgsIGVxdWFsRWFydGhSYXcgYXMgZ2VvRXF1YWxFYXJ0aFJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvRXF1aXJlY3Rhbmd1bGFyLCBlcXVpcmVjdGFuZ3VsYXJSYXcgYXMgZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2VxdWlyZWN0YW5ndWxhci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0dub21vbmljLCBnbm9tb25pY1JhdyBhcyBnZW9Hbm9tb25pY1Jhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9nbm9tb25pYy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0lkZW50aXR5fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2lkZW50aXR5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvUHJvamVjdGlvbiwgcHJvamVjdGlvbk11dGF0b3IgYXMgZ2VvUHJvamVjdGlvbk11dGF0b3J9IGZyb20gXCIuL3Byb2plY3Rpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9NZXJjYXRvciwgbWVyY2F0b3JSYXcgYXMgZ2VvTWVyY2F0b3JSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vbWVyY2F0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9OYXR1cmFsRWFydGgxLCBuYXR1cmFsRWFydGgxUmF3IGFzIGdlb05hdHVyYWxFYXJ0aDFSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vbmF0dXJhbEVhcnRoMS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb09ydGhvZ3JhcGhpYywgb3J0aG9ncmFwaGljUmF3IGFzIGdlb09ydGhvZ3JhcGhpY1Jhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9vcnRob2dyYXBoaWMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9TdGVyZW9ncmFwaGljLCBzdGVyZW9ncmFwaGljUmF3IGFzIGdlb1N0ZXJlb2dyYXBoaWNSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vc3RlcmVvZ3JhcGhpYy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1RyYW5zdmVyc2VNZXJjYXRvciwgdHJhbnN2ZXJzZU1lcmNhdG9yUmF3IGFzIGdlb1RyYW5zdmVyc2VNZXJjYXRvclJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi90cmFuc3ZlcnNlTWVyY2F0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Sb3RhdGlvbn0gZnJvbSBcIi4vcm90YXRpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9TdHJlYW19IGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1RyYW5zZm9ybX0gZnJvbSBcIi4vdHJhbnNmb3JtLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///59039\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-hierarchy.c86351fe8ed2b1c5.bundle.js b/assets/demo/site/npm.d3-hierarchy.c86351fe8ed2b1c5.bundle.js
new file mode 100644
index 00000000..4a4eec5b
--- /dev/null
+++ b/assets/demo/site/npm.d3-hierarchy.c86351fe8ed2b1c5.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[2759],{75222:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "ki": () => (/* reexport */ cluster),\n "bT": () => (/* reexport */ hierarchy),\n "P2": () => (/* reexport */ pack),\n "O1": () => (/* reexport */ enclose),\n "jA": () => (/* reexport */ siblings),\n "uK": () => (/* reexport */ partition),\n "QP": () => (/* reexport */ stratify),\n "G_": () => (/* reexport */ tree),\n "pN": () => (/* reexport */ treemap),\n "wL": () => (/* reexport */ binary),\n "LQ": () => (/* reexport */ dice),\n "eA": () => (/* reexport */ resquarify),\n "Km": () => (/* reexport */ treemap_slice),\n "E_": () => (/* reexport */ sliceDice),\n "o$": () => (/* reexport */ squarify)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/cluster.js\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\n/* harmony default export */ function cluster() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/count.js\nfunction count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\n/* harmony default export */ function hierarchy_count() {\n return this.eachAfter(count);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/each.js\n/* harmony default export */ function each(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js\n/* harmony default export */ function eachBefore(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js\n/* harmony default export */ function eachAfter(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/sum.js\n/* harmony default export */ function sum(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/sort.js\n/* harmony default export */ function sort(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/path.js\n/* harmony default export */ function path(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/ancestors.js\n/* harmony default export */ function ancestors() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/descendants.js\n/* harmony default export */ function descendants() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/leaves.js\n/* harmony default export */ function leaves() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/links.js\n/* harmony default export */ function links() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/index.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nfunction Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: hierarchy_count,\n each: each,\n eachAfter: eachAfter,\n eachBefore: eachBefore,\n sum: sum,\n sort: sort,\n path: path,\n ancestors: ancestors,\n descendants: descendants,\n leaves: leaves,\n links: links,\n copy: node_copy\n};\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/array.js\nvar slice = Array.prototype.slice;\n\nfunction shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/pack/enclose.js\n\n\n/* harmony default export */ function enclose(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/pack/siblings.js\n\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction siblings_Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nfunction packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new siblings_Node(a), b = new siblings_Node(b), c = new siblings_Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new siblings_Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\n/* harmony default export */ function siblings(circles) {\n packEnclose(circles);\n return circles;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/accessors.js\nfunction optional(f) {\n return f == null ? null : required(f);\n}\n\nfunction required(f) {\n if (typeof f !== "function") throw new Error;\n return f;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/constant.js\nfunction constantZero() {\n return 0;\n}\n\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/pack/index.js\n\n\n\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\n/* harmony default export */ function pack() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === "function" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/round.js\n/* harmony default export */ function treemap_round(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/dice.js\n/* harmony default export */ function dice(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/partition.js\n\n\n\n/* harmony default export */ function partition() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(treemap_round);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n dice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/stratify.js\n\n\n\nvar keyPrefix = "$", // Protect against keys like “__proto__”.\n preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\n/* harmony default export */ function stratify() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += "")) {\n if (root) throw new Error("multiple roots");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error("missing: " + nodeId);\n if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error("no root");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error("cycle");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/tree.js\n\n\nfunction tree_defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm\n/* harmony default export */ function tree() {\n var separation = tree_defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/slice.js\n/* harmony default export */ function treemap_slice(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/squarify.js\n\n\n\nvar phi = (1 + Math.sqrt(5)) / 2;\n\nfunction squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) dice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemap_slice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\n/* harmony default export */ const squarify = ((function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi));\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/index.js\n\n\n\n\n\n/* harmony default export */ function treemap() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(treemap_round);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === "function" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === "function" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === "function" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/binary.js\n/* harmony default export */ function binary(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/sliceDice.js\n\n\n\n/* harmony default export */ function sliceDice(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? treemap_slice : dice)(parent, x0, y0, x1, y1);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/treemap/resquarify.js\n\n\n\n\n/* harmony default export */ const resquarify = ((function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) dice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemap_slice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi));\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrREFBa0QsT0FBTztBQUN6RCxzQkFBc0IsSUFBVztBQUNqQyxhQUFhLGFBQVk7QUFDekI7QUFDQTtBQUNBLE1BQU07QUFDTixnQ0FBZ0MsYUFBYTtBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFDOzs7QUNuQ3dDO0FBQ1U7QUFDVjtBQUNXO0FBQ0Y7QUFDTDtBQUNGO0FBQ1I7QUFDWTtBQUNPO0FBQ0o7QUFDRTtBQUNRO0FBQ0Y7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2NsdXN0ZXIuanM/ODI2YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanM/ZTM5ZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcz9lYzQ1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQmVmb3JlLmpzPzYxZTMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcz9jNTc3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanM/ZThmMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcz81NzA5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzP2Q3NGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcz8yMzc5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcz9kNjc0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanM/YmQ3NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanM/MDY2NiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanM/ODI2YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9hcnJheS5qcz8xNWQxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svZW5jbG9zZS5qcz81NjdhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svc2libGluZ3MuanM/YmNmMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9hY2Nlc3NvcnMuanM/NzgwNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9jb25zdGFudC5qcz81NDIwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svaW5kZXguanM/N2RkZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3JvdW5kLmpzPzgyYTUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9kaWNlLmpzP2UxMGUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvcGFydGl0aW9uLmpzPzRlMzIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvc3RyYXRpZnkuanM/YzU3NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlLmpzPzFjY2QiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZS5qcz83ZDc4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc3F1YXJpZnkuanM/MjQ4YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2luZGV4LmpzP2MzMzUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9iaW5hcnkuanM/MjljMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlRGljZS5qcz8xZDAzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvcmVzcXVhcmlmeS5qcz82YTRmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2luZGV4LmpzP2RkMDQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gZGVmYXVsdFNlcGFyYXRpb24oYSwgYikge1xuICByZXR1cm4gYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDI7XG59XG5cbmZ1bmN0aW9uIG1lYW5YKGNoaWxkcmVuKSB7XG4gIHJldHVybiBjaGlsZHJlbi5yZWR1Y2UobWVhblhSZWR1Y2UsIDApIC8gY2hpbGRyZW4ubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtZWFuWFJlZHVjZSh4LCBjKSB7XG4gIHJldHVybiB4ICsgYy54O1xufVxuXG5mdW5jdGlvbiBtYXhZKGNoaWxkcmVuKSB7XG4gIHJldHVybiAxICsgY2hpbGRyZW4ucmVkdWNlKG1heFlSZWR1Y2UsIDApO1xufVxuXG5mdW5jdGlvbiBtYXhZUmVkdWNlKHksIGMpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHksIGMueSk7XG59XG5cbmZ1bmN0aW9uIGxlYWZMZWZ0KG5vZGUpIHtcbiAgdmFyIGNoaWxkcmVuO1xuICB3aGlsZSAoY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKSBub2RlID0gY2hpbGRyZW5bMF07XG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBsZWFmUmlnaHQobm9kZSkge1xuICB2YXIgY2hpbGRyZW47XG4gIHdoaWxlIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIG5vZGUgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBjbHVzdGVyKHJvb3QpIHtcbiAgICB2YXIgcHJldmlvdXNOb2RlLFxuICAgICAgICB4ID0gMDtcblxuICAgIC8vIEZpcnN0IHdhbGssIGNvbXB1dGluZyB0aGUgaW5pdGlhbCB4ICYgeSB2YWx1ZXMuXG4gICAgcm9vdC5lYWNoQWZ0ZXIoZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICBub2RlLnggPSBtZWFuWChjaGlsZHJlbik7XG4gICAgICAgIG5vZGUueSA9IG1heFkoY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS54ID0gcHJldmlvdXNOb2RlID8geCArPSBzZXBhcmF0aW9uKG5vZGUsIHByZXZpb3VzTm9kZSkgOiAwO1xuICAgICAgICBub2RlLnkgPSAwO1xuICAgICAgICBwcmV2aW91c05vZGUgPSBub2RlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxlZnQgPSBsZWFmTGVmdChyb290KSxcbiAgICAgICAgcmlnaHQgPSBsZWFmUmlnaHQocm9vdCksXG4gICAgICAgIHgwID0gbGVmdC54IC0gc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICB4MSA9IHJpZ2h0LnggKyBzZXBhcmF0aW9uKHJpZ2h0LCBsZWZ0KSAvIDI7XG5cbiAgICAvLyBTZWNvbmQgd2Fsaywgbm9ybWFsaXppbmcgeCAmIHkgdG8gdGhlIGRlc2lyZWQgc2l6ZS5cbiAgICByZXR1cm4gcm9vdC5lYWNoQWZ0ZXIobm9kZVNpemUgPyBmdW5jdGlvbihub2RlKSB7XG4gICAgICBub2RlLnggPSAobm9kZS54IC0gcm9vdC54KSAqIGR4O1xuICAgICAgbm9kZS55ID0gKHJvb3QueSAtIG5vZGUueSkgKiBkeTtcbiAgICB9IDogZnVuY3Rpb24obm9kZSkge1xuICAgICAgbm9kZS54ID0gKG5vZGUueCAtIHgwKSAvICh4MSAtIHgwKSAqIGR4O1xuICAgICAgbm9kZS55ID0gKDEgLSAocm9vdC55ID8gbm9kZS55IC8gcm9vdC55IDogMSkpICogZHk7XG4gICAgfSk7XG4gIH1cblxuICBjbHVzdGVyLnNlcGFyYXRpb24gPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2VwYXJhdGlvbiA9IHgsIGNsdXN0ZXIpIDogc2VwYXJhdGlvbjtcbiAgfTtcblxuICBjbHVzdGVyLnNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZVNpemUgPSBmYWxzZSwgZHggPSAreFswXSwgZHkgPSAreFsxXSwgY2x1c3RlcikgOiAobm9kZVNpemUgPyBudWxsIDogW2R4LCBkeV0pO1xuICB9O1xuXG4gIGNsdXN0ZXIubm9kZVNpemUgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZVNpemUgPSB0cnVlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBjbHVzdGVyKSA6IChub2RlU2l6ZSA/IFtkeCwgZHldIDogbnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIGNsdXN0ZXI7XG59XG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgY3VycmVudCwgbmV4dCA9IFtub2RlXSwgY2hpbGRyZW4sIGksIG47XG4gIGRvIHtcbiAgICBjdXJyZW50ID0gbmV4dC5yZXZlcnNlKCksIG5leHQgPSBbXTtcbiAgICB3aGlsZSAobm9kZSA9IGN1cnJlbnQucG9wKCkpIHtcbiAgICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbmV4dC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKG5leHQubGVuZ3RoKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBjaGlsZHJlbiwgaTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbjtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgc3VtID0gK3ZhbHVlKG5vZGUuZGF0YSkgfHwgMCxcbiAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgICBpID0gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICAgIG5vZGUudmFsdWUgPSBzdW07XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlbmQpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcyxcbiAgICAgIGFuY2VzdG9yID0gbGVhc3RDb21tb25BbmNlc3RvcihzdGFydCwgZW5kKSxcbiAgICAgIG5vZGVzID0gW3N0YXJ0XTtcbiAgd2hpbGUgKHN0YXJ0ICE9PSBhbmNlc3Rvcikge1xuICAgIHN0YXJ0ID0gc3RhcnQucGFyZW50O1xuICAgIG5vZGVzLnB1c2goc3RhcnQpO1xuICB9XG4gIHZhciBrID0gbm9kZXMubGVuZ3RoO1xuICB3aGlsZSAoZW5kICE9PSBhbmNlc3Rvcikge1xuICAgIG5vZGVzLnNwbGljZShrLCAwLCBlbmQpO1xuICAgIGVuZCA9IGVuZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBsZWFzdENvbW1vbkFuY2VzdG9yKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBhO1xuICB2YXIgYU5vZGVzID0gYS5hbmNlc3RvcnMoKSxcbiAgICAgIGJOb2RlcyA9IGIuYW5jZXN0b3JzKCksXG4gICAgICBjID0gbnVsbDtcbiAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgd2hpbGUgKGEgPT09IGIpIHtcbiAgICBjID0gYTtcbiAgICBhID0gYU5vZGVzLnBvcCgpO1xuICAgIGIgPSBiTm9kZXMucG9wKCk7XG4gIH1cbiAgcmV0dXJuIGM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXTtcbiAgd2hpbGUgKG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyA9IFtdO1xuICB0aGlzLmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGxlYXZlcyA9IFtdO1xuICB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgbGVhdmVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxlYXZlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgcm9vdCA9IHRoaXMsIGxpbmtzID0gW107XG4gIHJvb3QuZWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IHJvb3QpIHsgLy8gRG9u4oCZdCBpbmNsdWRlIHRoZSByb2904oCZcyBwYXJlbnQsIGlmIGFueS5cbiAgICAgIGxpbmtzLnB1c2goe3NvdXJjZTogbm9kZS5wYXJlbnQsIHRhcmdldDogbm9kZX0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW5rcztcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50LmpzXCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2guanNcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZS5qc1wiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlci5qc1wiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bS5qc1wiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnMuanNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzLmpzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzLmpzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheSkge1xuICB2YXIgbSA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHQsXG4gICAgICBpO1xuXG4gIHdoaWxlIChtKSB7XG4gICAgaSA9IE1hdGgucmFuZG9tKCkgKiBtLS0gfCAwO1xuICAgIHQgPSBhcnJheVttXTtcbiAgICBhcnJheVttXSA9IGFycmF5W2ldO1xuICAgIGFycmF5W2ldID0gdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbiIsImltcG9ydCB7c2h1ZmZsZSwgc2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjaXJjbGVzKSB7XG4gIHZhciBpID0gMCwgbiA9IChjaXJjbGVzID0gc2h1ZmZsZShzbGljZS5jYWxsKGNpcmNsZXMpKSkubGVuZ3RoLCBCID0gW10sIHAsIGU7XG5cbiAgd2hpbGUgKGkgPCBuKSB7XG4gICAgcCA9IGNpcmNsZXNbaV07XG4gICAgaWYgKGUgJiYgZW5jbG9zZXNXZWFrKGUsIHApKSArK2k7XG4gICAgZWxzZSBlID0gZW5jbG9zZUJhc2lzKEIgPSBleHRlbmRCYXNpcyhCLCBwKSksIGkgPSAwO1xuICB9XG5cbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZEJhc2lzKEIsIHApIHtcbiAgdmFyIGksIGo7XG5cbiAgaWYgKGVuY2xvc2VzV2Vha0FsbChwLCBCKSkgcmV0dXJuIFtwXTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIEIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LlxuICBmb3IgKGkgPSAwOyBpIDwgQi5sZW5ndGg7ICsraSkge1xuICAgIGlmIChlbmNsb3Nlc05vdChwLCBCW2ldKVxuICAgICAgICAmJiBlbmNsb3Nlc1dlYWtBbGwoZW5jbG9zZUJhc2lzMihCW2ldLCBwKSwgQikpIHtcbiAgICAgIHJldHVybiBbQltpXSwgcF07XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhlbiBCIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuXG4gIGZvciAoaSA9IDA7IGkgPCBCLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgQi5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGVuY2xvc2VzTm90KGVuY2xvc2VCYXNpczIoQltpXSwgQltqXSksIHApXG4gICAgICAgICAgJiYgZW5jbG9zZXNOb3QoZW5jbG9zZUJhc2lzMihCW2ldLCBwKSwgQltqXSlcbiAgICAgICAgICAmJiBlbmNsb3Nlc05vdChlbmNsb3NlQmFzaXMyKEJbal0sIHApLCBCW2ldKVxuICAgICAgICAgICYmIGVuY2xvc2VzV2Vha0FsbChlbmNsb3NlQmFzaXMzKEJbaV0sIEJbal0sIHApLCBCKSkge1xuICAgICAgICByZXR1cm4gW0JbaV0sIEJbal0sIHBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcuXG4gIHRocm93IG5ldyBFcnJvcjtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZXNOb3QoYSwgYikge1xuICB2YXIgZHIgPSBhLnIgLSBiLnIsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyIDwgMCB8fCBkciAqIGRyIDwgZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzV2VhayhhLCBiKSB7XG4gIHZhciBkciA9IGEuciAtIGIuciArIDFlLTYsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyID4gMCAmJiBkciAqIGRyID4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzV2Vha0FsbChhLCBCKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQi5sZW5ndGg7ICsraSkge1xuICAgIGlmICghZW5jbG9zZXNXZWFrKGEsIEJbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBlbmNsb3NlQmFzaXMoQikge1xuICBzd2l0Y2ggKEIubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZW5jbG9zZUJhc2lzMShCWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBlbmNsb3NlQmFzaXMyKEJbMF0sIEJbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGVuY2xvc2VCYXNpczMoQlswXSwgQlsxXSwgQlsyXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMShhKSB7XG4gIHJldHVybiB7XG4gICAgeDogYS54LFxuICAgIHk6IGEueSxcbiAgICByOiBhLnJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMihhLCBiKSB7XG4gIHZhciB4MSA9IGEueCwgeTEgPSBhLnksIHIxID0gYS5yLFxuICAgICAgeDIgPSBiLngsIHkyID0gYi55LCByMiA9IGIucixcbiAgICAgIHgyMSA9IHgyIC0geDEsIHkyMSA9IHkyIC0geTEsIHIyMSA9IHIyIC0gcjEsXG4gICAgICBsID0gTWF0aC5zcXJ0KHgyMSAqIHgyMSArIHkyMSAqIHkyMSk7XG4gIHJldHVybiB7XG4gICAgeDogKHgxICsgeDIgKyB4MjEgLyBsICogcjIxKSAvIDIsXG4gICAgeTogKHkxICsgeTIgKyB5MjEgLyBsICogcjIxKSAvIDIsXG4gICAgcjogKGwgKyByMSArIHIyKSAvIDJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMyhhLCBiLCBjKSB7XG4gIHZhciB4MSA9IGEueCwgeTEgPSBhLnksIHIxID0gYS5yLFxuICAgICAgeDIgPSBiLngsIHkyID0gYi55LCByMiA9IGIucixcbiAgICAgIHgzID0gYy54LCB5MyA9IGMueSwgcjMgPSBjLnIsXG4gICAgICBhMiA9IHgxIC0geDIsXG4gICAgICBhMyA9IHgxIC0geDMsXG4gICAgICBiMiA9IHkxIC0geTIsXG4gICAgICBiMyA9IHkxIC0geTMsXG4gICAgICBjMiA9IHIyIC0gcjEsXG4gICAgICBjMyA9IHIzIC0gcjEsXG4gICAgICBkMSA9IHgxICogeDEgKyB5MSAqIHkxIC0gcjEgKiByMSxcbiAgICAgIGQyID0gZDEgLSB4MiAqIHgyIC0geTIgKiB5MiArIHIyICogcjIsXG4gICAgICBkMyA9IGQxIC0geDMgKiB4MyAtIHkzICogeTMgKyByMyAqIHIzLFxuICAgICAgYWIgPSBhMyAqIGIyIC0gYTIgKiBiMyxcbiAgICAgIHhhID0gKGIyICogZDMgLSBiMyAqIGQyKSAvIChhYiAqIDIpIC0geDEsXG4gICAgICB4YiA9IChiMyAqIGMyIC0gYjIgKiBjMykgLyBhYixcbiAgICAgIHlhID0gKGEzICogZDIgLSBhMiAqIGQzKSAvIChhYiAqIDIpIC0geTEsXG4gICAgICB5YiA9IChhMiAqIGMzIC0gYTMgKiBjMikgLyBhYixcbiAgICAgIEEgPSB4YiAqIHhiICsgeWIgKiB5YiAtIDEsXG4gICAgICBCID0gMiAqIChyMSArIHhhICogeGIgKyB5YSAqIHliKSxcbiAgICAgIEMgPSB4YSAqIHhhICsgeWEgKiB5YSAtIHIxICogcjEsXG4gICAgICByID0gLShBID8gKEIgKyBNYXRoLnNxcnQoQiAqIEIgLSA0ICogQSAqIEMpKSAvICgyICogQSkgOiBDIC8gQik7XG4gIHJldHVybiB7XG4gICAgeDogeDEgKyB4YSArIHhiICogcixcbiAgICB5OiB5MSArIHlhICsgeWIgKiByLFxuICAgIHI6IHJcbiAgfTtcbn1cbiIsImltcG9ydCBlbmNsb3NlIGZyb20gXCIuL2VuY2xvc2UuanNcIjtcblxuZnVuY3Rpb24gcGxhY2UoYiwgYSwgYykge1xuICB2YXIgZHggPSBiLnggLSBhLngsIHgsIGEyLFxuICAgICAgZHkgPSBiLnkgLSBhLnksIHksIGIyLFxuICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgaWYgKGQyKSB7XG4gICAgYTIgPSBhLnIgKyBjLnIsIGEyICo9IGEyO1xuICAgIGIyID0gYi5yICsgYy5yLCBiMiAqPSBiMjtcbiAgICBpZiAoYTIgPiBiMikge1xuICAgICAgeCA9IChkMiArIGIyIC0gYTIpIC8gKDIgKiBkMik7XG4gICAgICB5ID0gTWF0aC5zcXJ0KE1hdGgubWF4KDAsIGIyIC8gZDIgLSB4ICogeCkpO1xuICAgICAgYy54ID0gYi54IC0geCAqIGR4IC0geSAqIGR5O1xuICAgICAgYy55ID0gYi55IC0geCAqIGR5ICsgeSAqIGR4O1xuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gKGQyICsgYTIgLSBiMikgLyAoMiAqIGQyKTtcbiAgICAgIHkgPSBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgYTIgLyBkMiAtIHggKiB4KSk7XG4gICAgICBjLnggPSBhLnggKyB4ICogZHggLSB5ICogZHk7XG4gICAgICBjLnkgPSBhLnkgKyB4ICogZHkgKyB5ICogZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGMueCA9IGEueCArIGMucjtcbiAgICBjLnkgPSBhLnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0cyhhLCBiKSB7XG4gIHZhciBkciA9IGEuciArIGIuciAtIDFlLTYsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyID4gMCAmJiBkciAqIGRyID4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIHNjb3JlKG5vZGUpIHtcbiAgdmFyIGEgPSBub2RlLl8sXG4gICAgICBiID0gbm9kZS5uZXh0Ll8sXG4gICAgICBhYiA9IGEuciArIGIucixcbiAgICAgIGR4ID0gKGEueCAqIGIuciArIGIueCAqIGEucikgLyBhYixcbiAgICAgIGR5ID0gKGEueSAqIGIuciArIGIueSAqIGEucikgLyBhYjtcbiAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuXG5mdW5jdGlvbiBOb2RlKGNpcmNsZSkge1xuICB0aGlzLl8gPSBjaXJjbGU7XG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMucHJldmlvdXMgPSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0VuY2xvc2UoY2lyY2xlcykge1xuICBpZiAoIShuID0gY2lyY2xlcy5sZW5ndGgpKSByZXR1cm4gMDtcblxuICB2YXIgYSwgYiwgYywgbiwgYWEsIGNhLCBpLCBqLCBrLCBzaiwgc2s7XG5cbiAgLy8gUGxhY2UgdGhlIGZpcnN0IGNpcmNsZS5cbiAgYSA9IGNpcmNsZXNbMF0sIGEueCA9IDAsIGEueSA9IDA7XG4gIGlmICghKG4gPiAxKSkgcmV0dXJuIGEucjtcblxuICAvLyBQbGFjZSB0aGUgc2Vjb25kIGNpcmNsZS5cbiAgYiA9IGNpcmNsZXNbMV0sIGEueCA9IC1iLnIsIGIueCA9IGEuciwgYi55ID0gMDtcbiAgaWYgKCEobiA+IDIpKSByZXR1cm4gYS5yICsgYi5yO1xuXG4gIC8vIFBsYWNlIHRoZSB0aGlyZCBjaXJjbGUuXG4gIHBsYWNlKGIsIGEsIGMgPSBjaXJjbGVzWzJdKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBmcm9udC1jaGFpbiB1c2luZyB0aGUgZmlyc3QgdGhyZWUgY2lyY2xlcyBhLCBiIGFuZCBjLlxuICBhID0gbmV3IE5vZGUoYSksIGIgPSBuZXcgTm9kZShiKSwgYyA9IG5ldyBOb2RlKGMpO1xuICBhLm5leHQgPSBjLnByZXZpb3VzID0gYjtcbiAgYi5uZXh0ID0gYS5wcmV2aW91cyA9IGM7XG4gIGMubmV4dCA9IGIucHJldmlvdXMgPSBhO1xuXG4gIC8vIEF0dGVtcHQgdG8gcGxhY2UgZWFjaCByZW1haW5pbmcgY2lyY2xl4oCmXG4gIHBhY2s6IGZvciAoaSA9IDM7IGkgPCBuOyArK2kpIHtcbiAgICBwbGFjZShhLl8sIGIuXywgYyA9IGNpcmNsZXNbaV0pLCBjID0gbmV3IE5vZGUoYyk7XG5cbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGludGVyc2VjdGluZyBjaXJjbGUgb24gdGhlIGZyb250LWNoYWluLCBpZiBhbnkuXG4gICAgLy8g4oCcQ2xvc2VuZXNz4oCdIGlzIGRldGVybWluZWQgYnkgbGluZWFyIGRpc3RhbmNlIGFsb25nIHRoZSBmcm9udC1jaGFpbi5cbiAgICAvLyDigJxBaGVhZOKAnSBvciDigJxiZWhpbmTigJ0gaXMgbGlrZXdpc2UgZGV0ZXJtaW5lZCBieSBsaW5lYXIgZGlzdGFuY2UuXG4gICAgaiA9IGIubmV4dCwgayA9IGEucHJldmlvdXMsIHNqID0gYi5fLnIsIHNrID0gYS5fLnI7XG4gICAgZG8ge1xuICAgICAgaWYgKHNqIDw9IHNrKSB7XG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGouXywgYy5fKSkge1xuICAgICAgICAgIGIgPSBqLCBhLm5leHQgPSBiLCBiLnByZXZpb3VzID0gYSwgLS1pO1xuICAgICAgICAgIGNvbnRpbnVlIHBhY2s7XG4gICAgICAgIH1cbiAgICAgICAgc2ogKz0gai5fLnIsIGogPSBqLm5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW50ZXJzZWN0cyhrLl8sIGMuXykpIHtcbiAgICAgICAgICBhID0gaywgYS5uZXh0ID0gYiwgYi5wcmV2aW91cyA9IGEsIC0taTtcbiAgICAgICAgICBjb250aW51ZSBwYWNrO1xuICAgICAgICB9XG4gICAgICAgIHNrICs9IGsuXy5yLCBrID0gay5wcmV2aW91cztcbiAgICAgIH1cbiAgICB9IHdoaWxlIChqICE9PSBrLm5leHQpO1xuXG4gICAgLy8gU3VjY2VzcyEgSW5zZXJ0IHRoZSBuZXcgY2lyY2xlIGMgYmV0d2VlbiBhIGFuZCBiLlxuICAgIGMucHJldmlvdXMgPSBhLCBjLm5leHQgPSBiLCBhLm5leHQgPSBiLnByZXZpb3VzID0gYiA9IGM7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBuZXcgY2xvc2VzdCBjaXJjbGUgcGFpciB0byB0aGUgY2VudHJvaWQuXG4gICAgYWEgPSBzY29yZShhKTtcbiAgICB3aGlsZSAoKGMgPSBjLm5leHQpICE9PSBiKSB7XG4gICAgICBpZiAoKGNhID0gc2NvcmUoYykpIDwgYWEpIHtcbiAgICAgICAgYSA9IGMsIGFhID0gY2E7XG4gICAgICB9XG4gICAgfVxuICAgIGIgPSBhLm5leHQ7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBlbmNsb3NpbmcgY2lyY2xlIG9mIHRoZSBmcm9udCBjaGFpbi5cbiAgYSA9IFtiLl9dLCBjID0gYjsgd2hpbGUgKChjID0gYy5uZXh0KSAhPT0gYikgYS5wdXNoKGMuXyk7IGMgPSBlbmNsb3NlKGEpO1xuXG4gIC8vIFRyYW5zbGF0ZSB0aGUgY2lyY2xlcyB0byBwdXQgdGhlIGVuY2xvc2luZyBjaXJjbGUgYXJvdW5kIHRoZSBvcmlnaW4uXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGEgPSBjaXJjbGVzW2ldLCBhLnggLT0gYy54LCBhLnkgLT0gYy55O1xuXG4gIHJldHVybiBjLnI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNpcmNsZXMpIHtcbiAgcGFja0VuY2xvc2UoY2lyY2xlcyk7XG4gIHJldHVybiBjaXJjbGVzO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsKGYpIHtcbiAgcmV0dXJuIGYgPT0gbnVsbCA/IG51bGwgOiByZXF1aXJlZChmKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkKGYpIHtcbiAgaWYgKHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGY7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY29uc3RhbnRaZXJvKCkge1xuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3BhY2tFbmNsb3NlfSBmcm9tIFwiLi9zaWJsaW5ncy5qc1wiO1xuaW1wb3J0IHtvcHRpb25hbH0gZnJvbSBcIi4uL2FjY2Vzc29ycy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50LCB7Y29uc3RhbnRaZXJvfSBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gZGVmYXVsdFJhZGl1cyhkKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoZC52YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgcmFkaXVzID0gbnVsbCxcbiAgICAgIGR4ID0gMSxcbiAgICAgIGR5ID0gMSxcbiAgICAgIHBhZGRpbmcgPSBjb25zdGFudFplcm87XG5cbiAgZnVuY3Rpb24gcGFjayhyb290KSB7XG4gICAgcm9vdC54ID0gZHggLyAyLCByb290LnkgPSBkeSAvIDI7XG4gICAgaWYgKHJhZGl1cykge1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKHJhZGl1c0xlYWYocmFkaXVzKSlcbiAgICAgICAgICAuZWFjaEFmdGVyKHBhY2tDaGlsZHJlbihwYWRkaW5nLCAwLjUpKVxuICAgICAgICAgIC5lYWNoQmVmb3JlKHRyYW5zbGF0ZUNoaWxkKDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKHJhZGl1c0xlYWYoZGVmYXVsdFJhZGl1cykpXG4gICAgICAgICAgLmVhY2hBZnRlcihwYWNrQ2hpbGRyZW4oY29uc3RhbnRaZXJvLCAxKSlcbiAgICAgICAgICAuZWFjaEFmdGVyKHBhY2tDaGlsZHJlbihwYWRkaW5nLCByb290LnIgLyBNYXRoLm1pbihkeCwgZHkpKSlcbiAgICAgICAgICAuZWFjaEJlZm9yZSh0cmFuc2xhdGVDaGlsZChNYXRoLm1pbihkeCwgZHkpIC8gKDIgKiByb290LnIpKSk7XG4gICAgfVxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgcGFjay5yYWRpdXMgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFkaXVzID0gb3B0aW9uYWwoeCksIHBhY2spIDogcmFkaXVzO1xuICB9O1xuXG4gIHBhY2suc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBwYWNrKSA6IFtkeCwgZHldO1xuICB9O1xuXG4gIHBhY2sucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHBhY2spIDogcGFkZGluZztcbiAgfTtcblxuICByZXR1cm4gcGFjaztcbn1cblxuZnVuY3Rpb24gcmFkaXVzTGVhZihyYWRpdXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuciA9IE1hdGgubWF4KDAsICtyYWRpdXMobm9kZSkgfHwgMCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYWNrQ2hpbGRyZW4ocGFkZGluZywgaykge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHZhciBjaGlsZHJlbixcbiAgICAgICAgICBpLFxuICAgICAgICAgIG4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgICAgciA9IHBhZGRpbmcobm9kZSkgKiBrIHx8IDAsXG4gICAgICAgICAgZTtcblxuICAgICAgaWYgKHIpIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNoaWxkcmVuW2ldLnIgKz0gcjtcbiAgICAgIGUgPSBwYWNrRW5jbG9zZShjaGlsZHJlbik7XG4gICAgICBpZiAocikgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY2hpbGRyZW5baV0uciAtPSByO1xuICAgICAgbm9kZS5yID0gZSArIHI7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVDaGlsZChrKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuICAgIG5vZGUuciAqPSBrO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIG5vZGUueCA9IHBhcmVudC54ICsgayAqIG5vZGUueDtcbiAgICAgIG5vZGUueSA9IHBhcmVudC55ICsgayAqIG5vZGUueTtcbiAgICB9XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIG5vZGUueDAgPSBNYXRoLnJvdW5kKG5vZGUueDApO1xuICBub2RlLnkwID0gTWF0aC5yb3VuZChub2RlLnkwKTtcbiAgbm9kZS54MSA9IE1hdGgucm91bmQobm9kZS54MSk7XG4gIG5vZGUueTEgPSBNYXRoLnJvdW5kKG5vZGUueTEpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICBub2RlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgIGsgPSBwYXJlbnQudmFsdWUgJiYgKHgxIC0geDApIC8gcGFyZW50LnZhbHVlO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLnkwID0geTAsIG5vZGUueTEgPSB5MTtcbiAgICBub2RlLngwID0geDAsIG5vZGUueDEgPSB4MCArPSBub2RlLnZhbHVlICogaztcbiAgfVxufVxuIiwiaW1wb3J0IHJvdW5kTm9kZSBmcm9tIFwiLi90cmVlbWFwL3JvdW5kLmpzXCI7XG5pbXBvcnQgdHJlZW1hcERpY2UgZnJvbSBcIi4vdHJlZW1hcC9kaWNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgcGFkZGluZyA9IDAsXG4gICAgICByb3VuZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHBhcnRpdGlvbihyb290KSB7XG4gICAgdmFyIG4gPSByb290LmhlaWdodCArIDE7XG4gICAgcm9vdC54MCA9XG4gICAgcm9vdC55MCA9IHBhZGRpbmc7XG4gICAgcm9vdC54MSA9IGR4O1xuICAgIHJvb3QueTEgPSBkeSAvIG47XG4gICAgcm9vdC5lYWNoQmVmb3JlKHBvc2l0aW9uTm9kZShkeSwgbikpO1xuICAgIGlmIChyb3VuZCkgcm9vdC5lYWNoQmVmb3JlKHJvdW5kTm9kZSk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwb3NpdGlvbk5vZGUoZHksIG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdHJlZW1hcERpY2Uobm9kZSwgbm9kZS54MCwgZHkgKiAobm9kZS5kZXB0aCArIDEpIC8gbiwgbm9kZS54MSwgZHkgKiAobm9kZS5kZXB0aCArIDIpIC8gbik7XG4gICAgICB9XG4gICAgICB2YXIgeDAgPSBub2RlLngwLFxuICAgICAgICAgIHkwID0gbm9kZS55MCxcbiAgICAgICAgICB4MSA9IG5vZGUueDEgLSBwYWRkaW5nLFxuICAgICAgICAgIHkxID0gbm9kZS55MSAtIHBhZGRpbmc7XG4gICAgICBpZiAoeDEgPCB4MCkgeDAgPSB4MSA9ICh4MCArIHgxKSAvIDI7XG4gICAgICBpZiAoeTEgPCB5MCkgeTAgPSB5MSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBub2RlLngwID0geDA7XG4gICAgICBub2RlLnkwID0geTA7XG4gICAgICBub2RlLngxID0geDE7XG4gICAgICBub2RlLnkxID0geTE7XG4gICAgfTtcbiAgfVxuXG4gIHBhcnRpdGlvbi5yb3VuZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEheCwgcGFydGl0aW9uKSA6IHJvdW5kO1xuICB9O1xuXG4gIHBhcnRpdGlvbi5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHBhcnRpdGlvbikgOiBbZHgsIGR5XTtcbiAgfTtcblxuICBwYXJ0aXRpb24ucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nID0gK3gsIHBhcnRpdGlvbikgOiBwYWRkaW5nO1xuICB9O1xuXG4gIHJldHVybiBwYXJ0aXRpb247XG59XG4iLCJpbXBvcnQge3JlcXVpcmVkfSBmcm9tIFwiLi9hY2Nlc3NvcnMuanNcIjtcbmltcG9ydCB7Tm9kZSwgY29tcHV0ZUhlaWdodH0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4LmpzXCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIiwgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG4gICAgcHJlcm9vdCA9IHtkZXB0aDogLTF9LFxuICAgIGFtYmlndW91cyA9IHt9O1xuXG5mdW5jdGlvbiBkZWZhdWx0SWQoZCkge1xuICByZXR1cm4gZC5pZDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFBhcmVudElkKGQpIHtcbiAgcmV0dXJuIGQucGFyZW50SWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgaWQgPSBkZWZhdWx0SWQsXG4gICAgICBwYXJlbnRJZCA9IGRlZmF1bHRQYXJlbnRJZDtcblxuICBmdW5jdGlvbiBzdHJhdGlmeShkYXRhKSB7XG4gICAgdmFyIGQsXG4gICAgICAgIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBub2RlLFxuICAgICAgICBub2RlcyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgbm9kZUlkLFxuICAgICAgICBub2RlS2V5LFxuICAgICAgICBub2RlQnlLZXkgPSB7fTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGQgPSBkYXRhW2ldLCBub2RlID0gbm9kZXNbaV0gPSBuZXcgTm9kZShkKTtcbiAgICAgIGlmICgobm9kZUlkID0gaWQoZCwgaSwgZGF0YSkpICE9IG51bGwgJiYgKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBub2RlS2V5ID0ga2V5UHJlZml4ICsgKG5vZGUuaWQgPSBub2RlSWQpO1xuICAgICAgICBub2RlQnlLZXlbbm9kZUtleV0gPSBub2RlS2V5IGluIG5vZGVCeUtleSA/IGFtYmlndW91cyA6IG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlSWQgPSBwYXJlbnRJZChkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICAgIGlmIChub2RlSWQgPT0gbnVsbCB8fCAhKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBpZiAocm9vdCkgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgcm9vdHNcIik7XG4gICAgICAgIHJvb3QgPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50ID0gbm9kZUJ5S2V5W2tleVByZWZpeCArIG5vZGVJZF07XG4gICAgICAgIGlmICghcGFyZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIiArIG5vZGVJZCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IGFtYmlndW91cykgdGhyb3cgbmV3IEVycm9yKFwiYW1iaWd1b3VzOiBcIiArIG5vZGVJZCk7XG4gICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4pIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgICBlbHNlIHBhcmVudC5jaGlsZHJlbiA9IFtub2RlXTtcbiAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoXCJubyByb290XCIpO1xuICAgIHJvb3QucGFyZW50ID0gcHJlcm9vdDtcbiAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkgeyBub2RlLmRlcHRoID0gbm9kZS5wYXJlbnQuZGVwdGggKyAxOyAtLW47IH0pLmVhY2hCZWZvcmUoY29tcHV0ZUhlaWdodCk7XG4gICAgcm9vdC5wYXJlbnQgPSBudWxsO1xuICAgIGlmIChuID4gMCkgdGhyb3cgbmV3IEVycm9yKFwiY3ljbGVcIik7XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIHN0cmF0aWZ5LmlkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlkID0gcmVxdWlyZWQoeCksIHN0cmF0aWZ5KSA6IGlkO1xuICB9O1xuXG4gIHN0cmF0aWZ5LnBhcmVudElkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhcmVudElkID0gcmVxdWlyZWQoeCksIHN0cmF0aWZ5KSA6IHBhcmVudElkO1xuICB9O1xuXG4gIHJldHVybiBzdHJhdGlmeTtcbn1cbiIsImltcG9ydCB7Tm9kZX0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4LmpzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXBhcmF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEucGFyZW50ID09PSBiLnBhcmVudCA/IDEgOiAyO1xufVxuXG4vLyBmdW5jdGlvbiByYWRpYWxTZXBhcmF0aW9uKGEsIGIpIHtcbi8vICAgcmV0dXJuIChhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMikgLyBhLmRlcHRoO1xuLy8gfVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGxlZnQgY29udG91ciBvZiBhIHN1YnRyZWUgKG9yXG4vLyBzdWJmb3Jlc3QpLiBJdCByZXR1cm5zIHRoZSBzdWNjZXNzb3Igb2YgdiBvbiB0aGlzIGNvbnRvdXIuIFRoaXMgc3VjY2Vzc29yIGlzXG4vLyBlaXRoZXIgZ2l2ZW4gYnkgdGhlIGxlZnRtb3N0IGNoaWxkIG9mIHYgb3IgYnkgdGhlIHRocmVhZCBvZiB2LiBUaGUgZnVuY3Rpb25cbi8vIHJldHVybnMgbnVsbCBpZiBhbmQgb25seSBpZiB2IGlzIG9uIHRoZSBoaWdoZXN0IGxldmVsIG9mIGl0cyBzdWJ0cmVlLlxuZnVuY3Rpb24gbmV4dExlZnQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlblswXSA6IHYudDtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiB3b3JrcyBhbmFsb2dvdXNseSB0byBuZXh0TGVmdC5cbmZ1bmN0aW9uIG5leHRSaWdodCh2KSB7XG4gIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdIDogdi50O1xufVxuXG4vLyBTaGlmdHMgdGhlIGN1cnJlbnQgc3VidHJlZSByb290ZWQgYXQgdysuIFRoaXMgaXMgZG9uZSBieSBpbmNyZWFzaW5nXG4vLyBwcmVsaW0odyspIGFuZCBtb2QodyspIGJ5IHNoaWZ0LlxuZnVuY3Rpb24gbW92ZVN1YnRyZWUod20sIHdwLCBzaGlmdCkge1xuICB2YXIgY2hhbmdlID0gc2hpZnQgLyAod3AuaSAtIHdtLmkpO1xuICB3cC5jIC09IGNoYW5nZTtcbiAgd3AucyArPSBzaGlmdDtcbiAgd20uYyArPSBjaGFuZ2U7XG4gIHdwLnogKz0gc2hpZnQ7XG4gIHdwLm0gKz0gc2hpZnQ7XG59XG5cbi8vIEFsbCBvdGhlciBzaGlmdHMsIGFwcGxpZWQgdG8gdGhlIHNtYWxsZXIgc3VidHJlZXMgYmV0d2VlbiB3LSBhbmQgdyssIGFyZVxuLy8gcGVyZm9ybWVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRvIHByZXBhcmUgdGhlIHNoaWZ0cywgd2UgaGF2ZSB0byBhZGp1c3Rcbi8vIGNoYW5nZSh3KyksIHNoaWZ0KHcrKSwgYW5kIGNoYW5nZSh3LSkuXG5mdW5jdGlvbiBleGVjdXRlU2hpZnRzKHYpIHtcbiAgdmFyIHNoaWZ0ID0gMCxcbiAgICAgIGNoYW5nZSA9IDAsXG4gICAgICBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICBpID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgdztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgdyA9IGNoaWxkcmVuW2ldO1xuICAgIHcueiArPSBzaGlmdDtcbiAgICB3Lm0gKz0gc2hpZnQ7XG4gICAgc2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMpO1xuICB9XG59XG5cbi8vIElmIHZpLeKAmXMgYW5jZXN0b3IgaXMgYSBzaWJsaW5nIG9mIHYsIHJldHVybnMgdmkt4oCZcyBhbmNlc3Rvci4gT3RoZXJ3aXNlLFxuLy8gcmV0dXJucyB0aGUgc3BlY2lmaWVkIChkZWZhdWx0KSBhbmNlc3Rvci5cbmZ1bmN0aW9uIG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSB7XG4gIHJldHVybiB2aW0uYS5wYXJlbnQgPT09IHYucGFyZW50ID8gdmltLmEgOiBhbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gVHJlZU5vZGUobm9kZSwgaSkge1xuICB0aGlzLl8gPSBub2RlO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG4gIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLkEgPSBudWxsOyAvLyBkZWZhdWx0IGFuY2VzdG9yXG4gIHRoaXMuYSA9IHRoaXM7IC8vIGFuY2VzdG9yXG4gIHRoaXMueiA9IDA7IC8vIHByZWxpbVxuICB0aGlzLm0gPSAwOyAvLyBtb2RcbiAgdGhpcy5jID0gMDsgLy8gY2hhbmdlXG4gIHRoaXMucyA9IDA7IC8vIHNoaWZ0XG4gIHRoaXMudCA9IG51bGw7IC8vIHRocmVhZFxuICB0aGlzLmkgPSBpOyAvLyBudW1iZXJcbn1cblxuVHJlZU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIHRyZWVSb290KHJvb3QpIHtcbiAgdmFyIHRyZWUgPSBuZXcgVHJlZU5vZGUocm9vdCwgMCksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbdHJlZV0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuXy5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IG5ldyBBcnJheShuID0gY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXSA9IG5ldyBUcmVlTm9kZShjaGlsZHJlbltpXSwgaSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICh0cmVlLnBhcmVudCA9IG5ldyBUcmVlTm9kZShudWxsLCAwKSkuY2hpbGRyZW4gPSBbdHJlZV07XG4gIHJldHVybiB0cmVlO1xufVxuXG4vLyBOb2RlLWxpbmsgdHJlZSBkaWFncmFtIHVzaW5nIHRoZSBSZWluZ29sZC1UaWxmb3JkIFwidGlkeVwiIGFsZ29yaXRobVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzZXBhcmF0aW9uID0gZGVmYXVsdFNlcGFyYXRpb24sXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBub2RlU2l6ZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJlZShyb290KSB7XG4gICAgdmFyIHQgPSB0cmVlUm9vdChyb290KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGxheW91dCB1c2luZyBCdWNoaGVpbSBldCBhbC7igJlzIGFsZ29yaXRobS5cbiAgICB0LmVhY2hBZnRlcihmaXJzdFdhbGspLCB0LnBhcmVudC5tID0gLXQuejtcbiAgICB0LmVhY2hCZWZvcmUoc2Vjb25kV2Fsayk7XG5cbiAgICAvLyBJZiBhIGZpeGVkIG5vZGUgc2l6ZSBpcyBzcGVjaWZpZWQsIHNjYWxlIHggYW5kIHkuXG4gICAgaWYgKG5vZGVTaXplKSByb290LmVhY2hCZWZvcmUoc2l6ZU5vZGUpO1xuXG4gICAgLy8gSWYgYSBmaXhlZCB0cmVlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5IGJhc2VkIG9uIHRoZSBleHRlbnQuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbGVmdC1tb3N0LCByaWdodC1tb3N0LCBhbmQgZGVwdGgtbW9zdCBub2RlcyBmb3IgZXh0ZW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHZhciBsZWZ0ID0gcm9vdCxcbiAgICAgICAgICByaWdodCA9IHJvb3QsXG4gICAgICAgICAgYm90dG9tID0gcm9vdDtcbiAgICAgIHJvb3QuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnggPCBsZWZ0LngpIGxlZnQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS54ID4gcmlnaHQueCkgcmlnaHQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aCkgYm90dG9tID0gbm9kZTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHMgPSBsZWZ0ID09PSByaWdodCA/IDEgOiBzZXBhcmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIsXG4gICAgICAgICAgdHggPSBzIC0gbGVmdC54LFxuICAgICAgICAgIGt4ID0gZHggLyAocmlnaHQueCArIHMgKyB0eCksXG4gICAgICAgICAga3kgPSBkeSAvIChib3R0b20uZGVwdGggfHwgMSk7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLnggPSAobm9kZS54ICsgdHgpICoga3g7XG4gICAgICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBreTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYSBwcmVsaW1pbmFyeSB4LWNvb3JkaW5hdGUgZm9yIHYuIEJlZm9yZSB0aGF0LCBGSVJTVCBXQUxLIGlzXG4gIC8vIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gdGhlIGNoaWxkcmVuIG9mIHYsIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uXG4gIC8vIEFQUE9SVElPTi4gQWZ0ZXIgc3BhY2luZyBvdXQgdGhlIGNoaWxkcmVuIGJ5IGNhbGxpbmcgRVhFQ1VURSBTSElGVFMsIHRoZVxuICAvLyBub2RlIHYgaXMgcGxhY2VkIHRvIHRoZSBtaWRwb2ludCBvZiBpdHMgb3V0ZXJtb3N0IGNoaWxkcmVuLlxuICBmdW5jdGlvbiBmaXJzdFdhbGsodikge1xuICAgIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICAgIHNpYmxpbmdzID0gdi5wYXJlbnQuY2hpbGRyZW4sXG4gICAgICAgIHcgPSB2LmkgPyBzaWJsaW5nc1t2LmkgLSAxXSA6IG51bGw7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBleGVjdXRlU2hpZnRzKHYpO1xuICAgICAgdmFyIG1pZHBvaW50ID0gKGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS56KSAvIDI7XG4gICAgICBpZiAodykge1xuICAgICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICAgICAgdi5tID0gdi56IC0gbWlkcG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2LnogPSBtaWRwb2ludDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHcpIHtcbiAgICAgIHYueiA9IHcueiArIHNlcGFyYXRpb24odi5fLCB3Ll8pO1xuICAgIH1cbiAgICB2LnBhcmVudC5BID0gYXBwb3J0aW9uKHYsIHcsIHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pO1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYWxsIHJlYWwgeC1jb29yZGluYXRlcyBieSBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgcmVjdXJzaXZlbHkuXG4gIGZ1bmN0aW9uIHNlY29uZFdhbGsodikge1xuICAgIHYuXy54ID0gdi56ICsgdi5wYXJlbnQubTtcbiAgICB2Lm0gKz0gdi5wYXJlbnQubTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JlIG9mIHRoZSBhbGdvcml0aG0uIEhlcmUsIGEgbmV3IHN1YnRyZWUgaXMgY29tYmluZWQgd2l0aCB0aGVcbiAgLy8gcHJldmlvdXMgc3VidHJlZXMuIFRocmVhZHMgYXJlIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGluc2lkZSBhbmQgb3V0c2lkZVxuICAvLyBjb250b3VycyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZSB1cCB0byB0aGUgaGlnaGVzdCBjb21tb24gbGV2ZWwuIFRoZVxuICAvLyB2ZXJ0aWNlcyB1c2VkIGZvciB0aGUgdHJhdmVyc2FscyBhcmUgdmkrLCB2aS0sIHZvLSwgYW5kIHZvKywgd2hlcmUgdGhlXG4gIC8vIHN1cGVyc2NyaXB0IG8gbWVhbnMgb3V0c2lkZSBhbmQgaSBtZWFucyBpbnNpZGUsIHRoZSBzdWJzY3JpcHQgLSBtZWFucyBsZWZ0XG4gIC8vIHN1YnRyZWUgYW5kICsgbWVhbnMgcmlnaHQgc3VidHJlZS4gRm9yIHN1bW1pbmcgdXAgdGhlIG1vZGlmaWVycyBhbG9uZyB0aGVcbiAgLy8gY29udG91ciwgd2UgdXNlIHJlc3BlY3RpdmUgdmFyaWFibGVzIHNpKywgc2ktLCBzby0sIGFuZCBzbysuIFdoZW5ldmVyIHR3b1xuICAvLyBub2RlcyBvZiB0aGUgaW5zaWRlIGNvbnRvdXJzIGNvbmZsaWN0LCB3ZSBjb21wdXRlIHRoZSBsZWZ0IG9uZSBvZiB0aGVcbiAgLy8gZ3JlYXRlc3QgdW5jb21tb24gYW5jZXN0b3JzIHVzaW5nIHRoZSBmdW5jdGlvbiBBTkNFU1RPUiBhbmQgY2FsbCBNT1ZFXG4gIC8vIFNVQlRSRUUgdG8gc2hpZnQgdGhlIHN1YnRyZWUgYW5kIHByZXBhcmUgdGhlIHNoaWZ0cyBvZiBzbWFsbGVyIHN1YnRyZWVzLlxuICAvLyBGaW5hbGx5LCB3ZSBhZGQgYSBuZXcgdGhyZWFkIChpZiBuZWNlc3NhcnkpLlxuICBmdW5jdGlvbiBhcHBvcnRpb24odiwgdywgYW5jZXN0b3IpIHtcbiAgICBpZiAodykge1xuICAgICAgdmFyIHZpcCA9IHYsXG4gICAgICAgICAgdm9wID0gdixcbiAgICAgICAgICB2aW0gPSB3LFxuICAgICAgICAgIHZvbSA9IHZpcC5wYXJlbnQuY2hpbGRyZW5bMF0sXG4gICAgICAgICAgc2lwID0gdmlwLm0sXG4gICAgICAgICAgc29wID0gdm9wLm0sXG4gICAgICAgICAgc2ltID0gdmltLm0sXG4gICAgICAgICAgc29tID0gdm9tLm0sXG4gICAgICAgICAgc2hpZnQ7XG4gICAgICB3aGlsZSAodmltID0gbmV4dFJpZ2h0KHZpbSksIHZpcCA9IG5leHRMZWZ0KHZpcCksIHZpbSAmJiB2aXApIHtcbiAgICAgICAgdm9tID0gbmV4dExlZnQodm9tKTtcbiAgICAgICAgdm9wID0gbmV4dFJpZ2h0KHZvcCk7XG4gICAgICAgIHZvcC5hID0gdjtcbiAgICAgICAgc2hpZnQgPSB2aW0ueiArIHNpbSAtIHZpcC56IC0gc2lwICsgc2VwYXJhdGlvbih2aW0uXywgdmlwLl8pO1xuICAgICAgICBpZiAoc2hpZnQgPiAwKSB7XG4gICAgICAgICAgbW92ZVN1YnRyZWUobmV4dEFuY2VzdG9yKHZpbSwgdiwgYW5jZXN0b3IpLCB2LCBzaGlmdCk7XG4gICAgICAgICAgc2lwICs9IHNoaWZ0O1xuICAgICAgICAgIHNvcCArPSBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgICBzaW0gKz0gdmltLm07XG4gICAgICAgIHNpcCArPSB2aXAubTtcbiAgICAgICAgc29tICs9IHZvbS5tO1xuICAgICAgICBzb3AgKz0gdm9wLm07XG4gICAgICB9XG4gICAgICBpZiAodmltICYmICFuZXh0UmlnaHQodm9wKSkge1xuICAgICAgICB2b3AudCA9IHZpbTtcbiAgICAgICAgdm9wLm0gKz0gc2ltIC0gc29wO1xuICAgICAgfVxuICAgICAgaWYgKHZpcCAmJiAhbmV4dExlZnQodm9tKSkge1xuICAgICAgICB2b20udCA9IHZpcDtcbiAgICAgICAgdm9tLm0gKz0gc2lwIC0gc29tO1xuICAgICAgICBhbmNlc3RvciA9IHY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpemVOb2RlKG5vZGUpIHtcbiAgICBub2RlLnggKj0gZHg7XG4gICAgbm9kZS55ID0gbm9kZS5kZXB0aCAqIGR5O1xuICB9XG5cbiAgdHJlZS5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNlcGFyYXRpb24gPSB4LCB0cmVlKSA6IHNlcGFyYXRpb247XG4gIH07XG5cbiAgdHJlZS5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gZmFsc2UsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gbnVsbCA6IFtkeCwgZHldKTtcbiAgfTtcblxuICB0cmVlLm5vZGVTaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gdHJ1ZSwgZHggPSAreFswXSwgZHkgPSAreFsxXSwgdHJlZSkgOiAobm9kZVNpemUgPyBbZHgsIGR5XSA6IG51bGwpO1xuICB9O1xuXG4gIHJldHVybiB0cmVlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICBub2RlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgIGsgPSBwYXJlbnQudmFsdWUgJiYgKHkxIC0geTApIC8gcGFyZW50LnZhbHVlO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLngwID0geDAsIG5vZGUueDEgPSB4MTtcbiAgICBub2RlLnkwID0geTAsIG5vZGUueTEgPSB5MCArPSBub2RlLnZhbHVlICogaztcbiAgfVxufVxuIiwiaW1wb3J0IHRyZWVtYXBEaWNlIGZyb20gXCIuL2RpY2UuanNcIjtcbmltcG9ydCB0cmVlbWFwU2xpY2UgZnJvbSBcIi4vc2xpY2UuanNcIjtcblxuZXhwb3J0IHZhciBwaGkgPSAoMSArIE1hdGguc3FydCg1KSkgLyAyO1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcm93cyA9IFtdLFxuICAgICAgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICByb3csXG4gICAgICBub2RlVmFsdWUsXG4gICAgICBpMCA9IDAsXG4gICAgICBpMSA9IDAsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgZHgsIGR5LFxuICAgICAgdmFsdWUgPSBwYXJlbnQudmFsdWUsXG4gICAgICBzdW1WYWx1ZSxcbiAgICAgIG1pblZhbHVlLFxuICAgICAgbWF4VmFsdWUsXG4gICAgICBuZXdSYXRpbyxcbiAgICAgIG1pblJhdGlvLFxuICAgICAgYWxwaGEsXG4gICAgICBiZXRhO1xuXG4gIHdoaWxlIChpMCA8IG4pIHtcbiAgICBkeCA9IHgxIC0geDAsIGR5ID0geTEgLSB5MDtcblxuICAgIC8vIEZpbmQgdGhlIG5leHQgbm9uLWVtcHR5IG5vZGUuXG4gICAgZG8gc3VtVmFsdWUgPSBub2Rlc1tpMSsrXS52YWx1ZTsgd2hpbGUgKCFzdW1WYWx1ZSAmJiBpMSA8IG4pO1xuICAgIG1pblZhbHVlID0gbWF4VmFsdWUgPSBzdW1WYWx1ZTtcbiAgICBhbHBoYSA9IE1hdGgubWF4KGR5IC8gZHgsIGR4IC8gZHkpIC8gKHZhbHVlICogcmF0aW8pO1xuICAgIGJldGEgPSBzdW1WYWx1ZSAqIHN1bVZhbHVlICogYWxwaGE7XG4gICAgbWluUmF0aW8gPSBNYXRoLm1heChtYXhWYWx1ZSAvIGJldGEsIGJldGEgLyBtaW5WYWx1ZSk7XG5cbiAgICAvLyBLZWVwIGFkZGluZyBub2RlcyB3aGlsZSB0aGUgYXNwZWN0IHJhdGlvIG1haW50YWlucyBvciBpbXByb3Zlcy5cbiAgICBmb3IgKDsgaTEgPCBuOyArK2kxKSB7XG4gICAgICBzdW1WYWx1ZSArPSBub2RlVmFsdWUgPSBub2Rlc1tpMV0udmFsdWU7XG4gICAgICBpZiAobm9kZVZhbHVlIDwgbWluVmFsdWUpIG1pblZhbHVlID0gbm9kZVZhbHVlO1xuICAgICAgaWYgKG5vZGVWYWx1ZSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgIGJldGEgPSBzdW1WYWx1ZSAqIHN1bVZhbHVlICogYWxwaGE7XG4gICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KG1heFZhbHVlIC8gYmV0YSwgYmV0YSAvIG1pblZhbHVlKTtcbiAgICAgIGlmIChuZXdSYXRpbyA+IG1pblJhdGlvKSB7IHN1bVZhbHVlIC09IG5vZGVWYWx1ZTsgYnJlYWs7IH1cbiAgICAgIG1pblJhdGlvID0gbmV3UmF0aW87XG4gICAgfVxuXG4gICAgLy8gUG9zaXRpb24gYW5kIHJlY29yZCB0aGUgcm93IG9yaWVudGF0aW9uLlxuICAgIHJvd3MucHVzaChyb3cgPSB7dmFsdWU6IHN1bVZhbHVlLCBkaWNlOiBkeCA8IGR5LCBjaGlsZHJlbjogbm9kZXMuc2xpY2UoaTAsIGkxKX0pO1xuICAgIGlmIChyb3cuZGljZSkgdHJlZW1hcERpY2Uocm93LCB4MCwgeTAsIHgxLCB2YWx1ZSA/IHkwICs9IGR5ICogc3VtVmFsdWUgLyB2YWx1ZSA6IHkxKTtcbiAgICBlbHNlIHRyZWVtYXBTbGljZShyb3csIHgwLCB5MCwgdmFsdWUgPyB4MCArPSBkeCAqIHN1bVZhbHVlIC8gdmFsdWUgOiB4MSwgeTEpO1xuICAgIHZhbHVlIC09IHN1bVZhbHVlLCBpMCA9IGkxO1xuICB9XG5cbiAgcmV0dXJuIHJvd3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20ocmF0aW8pIHtcblxuICBmdW5jdGlvbiBzcXVhcmlmeShwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgc3F1YXJpZnlSYXRpbyhyYXRpbywgcGFyZW50LCB4MCwgeTAsIHgxLCB5MSk7XG4gIH1cblxuICBzcXVhcmlmeS5yYXRpbyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gY3VzdG9tKCh4ID0gK3gpID4gMSA/IHggOiAxKTtcbiAgfTtcblxuICByZXR1cm4gc3F1YXJpZnk7XG59KShwaGkpO1xuIiwiaW1wb3J0IHJvdW5kTm9kZSBmcm9tIFwiLi9yb3VuZC5qc1wiO1xuaW1wb3J0IHNxdWFyaWZ5IGZyb20gXCIuL3NxdWFyaWZ5LmpzXCI7XG5pbXBvcnQge3JlcXVpcmVkfSBmcm9tIFwiLi4vYWNjZXNzb3JzLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQsIHtjb25zdGFudFplcm99IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHRpbGUgPSBzcXVhcmlmeSxcbiAgICAgIHJvdW5kID0gZmFsc2UsXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBwYWRkaW5nU3RhY2sgPSBbMF0sXG4gICAgICBwYWRkaW5nSW5uZXIgPSBjb25zdGFudFplcm8sXG4gICAgICBwYWRkaW5nVG9wID0gY29uc3RhbnRaZXJvLFxuICAgICAgcGFkZGluZ1JpZ2h0ID0gY29uc3RhbnRaZXJvLFxuICAgICAgcGFkZGluZ0JvdHRvbSA9IGNvbnN0YW50WmVybyxcbiAgICAgIHBhZGRpbmdMZWZ0ID0gY29uc3RhbnRaZXJvO1xuXG4gIGZ1bmN0aW9uIHRyZWVtYXAocm9vdCkge1xuICAgIHJvb3QueDAgPVxuICAgIHJvb3QueTAgPSAwO1xuICAgIHJvb3QueDEgPSBkeDtcbiAgICByb290LnkxID0gZHk7XG4gICAgcm9vdC5lYWNoQmVmb3JlKHBvc2l0aW9uTm9kZSk7XG4gICAgcGFkZGluZ1N0YWNrID0gWzBdO1xuICAgIGlmIChyb3VuZCkgcm9vdC5lYWNoQmVmb3JlKHJvdW5kTm9kZSk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwb3NpdGlvbk5vZGUobm9kZSkge1xuICAgIHZhciBwID0gcGFkZGluZ1N0YWNrW25vZGUuZGVwdGhdLFxuICAgICAgICB4MCA9IG5vZGUueDAgKyBwLFxuICAgICAgICB5MCA9IG5vZGUueTAgKyBwLFxuICAgICAgICB4MSA9IG5vZGUueDEgLSBwLFxuICAgICAgICB5MSA9IG5vZGUueTEgLSBwO1xuICAgIGlmICh4MSA8IHgwKSB4MCA9IHgxID0gKHgwICsgeDEpIC8gMjtcbiAgICBpZiAoeTEgPCB5MCkgeTAgPSB5MSA9ICh5MCArIHkxKSAvIDI7XG4gICAgbm9kZS54MCA9IHgwO1xuICAgIG5vZGUueTAgPSB5MDtcbiAgICBub2RlLngxID0geDE7XG4gICAgbm9kZS55MSA9IHkxO1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBwID0gcGFkZGluZ1N0YWNrW25vZGUuZGVwdGggKyAxXSA9IHBhZGRpbmdJbm5lcihub2RlKSAvIDI7XG4gICAgICB4MCArPSBwYWRkaW5nTGVmdChub2RlKSAtIHA7XG4gICAgICB5MCArPSBwYWRkaW5nVG9wKG5vZGUpIC0gcDtcbiAgICAgIHgxIC09IHBhZGRpbmdSaWdodChub2RlKSAtIHA7XG4gICAgICB5MSAtPSBwYWRkaW5nQm90dG9tKG5vZGUpIC0gcDtcbiAgICAgIGlmICh4MSA8IHgwKSB4MCA9IHgxID0gKHgwICsgeDEpIC8gMjtcbiAgICAgIGlmICh5MSA8IHkwKSB5MCA9IHkxID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIHRpbGUobm9kZSwgeDAsIHkwLCB4MSwgeTEpO1xuICAgIH1cbiAgfVxuXG4gIHRyZWVtYXAucm91bmQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIXgsIHRyZWVtYXApIDogcm91bmQ7XG4gIH07XG5cbiAgdHJlZW1hcC5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWVtYXApIDogW2R4LCBkeV07XG4gIH07XG5cbiAgdHJlZW1hcC50aWxlID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpbGUgPSByZXF1aXJlZCh4KSwgdHJlZW1hcCkgOiB0aWxlO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRyZWVtYXAucGFkZGluZ0lubmVyKHgpLnBhZGRpbmdPdXRlcih4KSA6IHRyZWVtYXAucGFkZGluZ0lubmVyKCk7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHRyZWVtYXApIDogcGFkZGluZ0lubmVyO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ091dGVyID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdHJlZW1hcC5wYWRkaW5nVG9wKHgpLnBhZGRpbmdSaWdodCh4KS5wYWRkaW5nQm90dG9tKHgpLnBhZGRpbmdMZWZ0KHgpIDogdHJlZW1hcC5wYWRkaW5nVG9wKCk7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nVG9wID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdUb3AgPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgdHJlZW1hcCkgOiBwYWRkaW5nVG9wO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ1JpZ2h0ID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdSaWdodCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdSaWdodDtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdCb3R0b20gPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0JvdHRvbSA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdCb3R0b207XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nTGVmdCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nTGVmdCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdMZWZ0O1xuICB9O1xuXG4gIHJldHVybiB0cmVlbWFwO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICBpLCBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgc3VtLCBzdW1zID0gbmV3IEFycmF5KG4gKyAxKTtcblxuICBmb3IgKHN1bXNbMF0gPSBzdW0gPSBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHN1bXNbaSArIDFdID0gc3VtICs9IG5vZGVzW2ldLnZhbHVlO1xuICB9XG5cbiAgcGFydGl0aW9uKDAsIG4sIHBhcmVudC52YWx1ZSwgeDAsIHkwLCB4MSwgeTEpO1xuXG4gIGZ1bmN0aW9uIHBhcnRpdGlvbihpLCBqLCB2YWx1ZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICBpZiAoaSA+PSBqIC0gMSkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIG5vZGUueDAgPSB4MCwgbm9kZS55MCA9IHkwO1xuICAgICAgbm9kZS54MSA9IHgxLCBub2RlLnkxID0geTE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlT2Zmc2V0ID0gc3Vtc1tpXSxcbiAgICAgICAgdmFsdWVUYXJnZXQgPSAodmFsdWUgLyAyKSArIHZhbHVlT2Zmc2V0LFxuICAgICAgICBrID0gaSArIDEsXG4gICAgICAgIGhpID0gaiAtIDE7XG5cbiAgICB3aGlsZSAoayA8IGhpKSB7XG4gICAgICB2YXIgbWlkID0gayArIGhpID4+PiAxO1xuICAgICAgaWYgKHN1bXNbbWlkXSA8IHZhbHVlVGFyZ2V0KSBrID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZVRhcmdldCAtIHN1bXNbayAtIDFdKSA8IChzdW1zW2tdIC0gdmFsdWVUYXJnZXQpICYmIGkgKyAxIDwgaykgLS1rO1xuXG4gICAgdmFyIHZhbHVlTGVmdCA9IHN1bXNba10gLSB2YWx1ZU9mZnNldCxcbiAgICAgICAgdmFsdWVSaWdodCA9IHZhbHVlIC0gdmFsdWVMZWZ0O1xuXG4gICAgaWYgKCh4MSAtIHgwKSA+ICh5MSAtIHkwKSkge1xuICAgICAgdmFyIHhrID0gKHgwICogdmFsdWVSaWdodCArIHgxICogdmFsdWVMZWZ0KSAvIHZhbHVlO1xuICAgICAgcGFydGl0aW9uKGksIGssIHZhbHVlTGVmdCwgeDAsIHkwLCB4aywgeTEpO1xuICAgICAgcGFydGl0aW9uKGssIGosIHZhbHVlUmlnaHQsIHhrLCB5MCwgeDEsIHkxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHlrID0gKHkwICogdmFsdWVSaWdodCArIHkxICogdmFsdWVMZWZ0KSAvIHZhbHVlO1xuICAgICAgcGFydGl0aW9uKGksIGssIHZhbHVlTGVmdCwgeDAsIHkwLCB4MSwgeWspO1xuICAgICAgcGFydGl0aW9uKGssIGosIHZhbHVlUmlnaHQsIHgwLCB5aywgeDEsIHkxKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBkaWNlIGZyb20gXCIuL2RpY2UuanNcIjtcbmltcG9ydCBzbGljZSBmcm9tIFwiLi9zbGljZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIChwYXJlbnQuZGVwdGggJiAxID8gc2xpY2UgOiBkaWNlKShwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKTtcbn1cbiIsImltcG9ydCB0cmVlbWFwRGljZSBmcm9tIFwiLi9kaWNlLmpzXCI7XG5pbXBvcnQgdHJlZW1hcFNsaWNlIGZyb20gXCIuL3NsaWNlLmpzXCI7XG5pbXBvcnQge3BoaSwgc3F1YXJpZnlSYXRpb30gZnJvbSBcIi4vc3F1YXJpZnkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShyYXRpbykge1xuXG4gIGZ1bmN0aW9uIHJlc3F1YXJpZnkocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgIGlmICgocm93cyA9IHBhcmVudC5fc3F1YXJpZnkpICYmIChyb3dzLnJhdGlvID09PSByYXRpbykpIHtcbiAgICAgIHZhciByb3dzLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGogPSAtMSxcbiAgICAgICAgICBuLFxuICAgICAgICAgIG0gPSByb3dzLmxlbmd0aCxcbiAgICAgICAgICB2YWx1ZSA9IHBhcmVudC52YWx1ZTtcblxuICAgICAgd2hpbGUgKCsraiA8IG0pIHtcbiAgICAgICAgcm93ID0gcm93c1tqXSwgbm9kZXMgPSByb3cuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IHJvdy52YWx1ZSA9IDAsIG4gPSBub2Rlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHJvdy52YWx1ZSArPSBub2Rlc1tpXS52YWx1ZTtcbiAgICAgICAgaWYgKHJvdy5kaWNlKSB0cmVlbWFwRGljZShyb3csIHgwLCB5MCwgeDEsIHkwICs9ICh5MSAtIHkwKSAqIHJvdy52YWx1ZSAvIHZhbHVlKTtcbiAgICAgICAgZWxzZSB0cmVlbWFwU2xpY2Uocm93LCB4MCwgeTAsIHgwICs9ICh4MSAtIHgwKSAqIHJvdy52YWx1ZSAvIHZhbHVlLCB5MSk7XG4gICAgICAgIHZhbHVlIC09IHJvdy52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Ll9zcXVhcmlmeSA9IHJvd3MgPSBzcXVhcmlmeVJhdGlvKHJhdGlvLCBwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKTtcbiAgICAgIHJvd3MucmF0aW8gPSByYXRpbztcbiAgICB9XG4gIH1cblxuICByZXNxdWFyaWZ5LnJhdGlvID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBjdXN0b20oKHggPSAreCkgPiAxID8geCA6IDEpO1xuICB9O1xuXG4gIHJldHVybiByZXNxdWFyaWZ5O1xufSkocGhpKTtcbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjbHVzdGVyfSBmcm9tIFwiLi9jbHVzdGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGllcmFyY2h5fSBmcm9tIFwiLi9oaWVyYXJjaHkvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWNrfSBmcm9tIFwiLi9wYWNrL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja1NpYmxpbmdzfSBmcm9tIFwiLi9wYWNrL3NpYmxpbmdzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja0VuY2xvc2V9IGZyb20gXCIuL3BhY2svZW5jbG9zZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhcnRpdGlvbn0gZnJvbSBcIi4vcGFydGl0aW9uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RyYXRpZnl9IGZyb20gXCIuL3N0cmF0aWZ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZX0gZnJvbSBcIi4vdHJlZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXB9IGZyb20gXCIuL3RyZWVtYXAvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwQmluYXJ5fSBmcm9tIFwiLi90cmVlbWFwL2JpbmFyeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBEaWNlfSBmcm9tIFwiLi90cmVlbWFwL2RpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2V9IGZyb20gXCIuL3RyZWVtYXAvc2xpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2VEaWNlfSBmcm9tIFwiLi90cmVlbWFwL3NsaWNlRGljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBTcXVhcmlmeX0gZnJvbSBcIi4vdHJlZW1hcC9zcXVhcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBSZXNxdWFyaWZ5fSBmcm9tIFwiLi90cmVlbWFwL3Jlc3F1YXJpZnkuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///75222\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-interpolate.6c0cb10605963ce4.bundle.js b/assets/demo/site/npm.d3-interpolate.6c0cb10605963ce4.bundle.js
new file mode 100644
index 00000000..83ac0487
--- /dev/null
+++ b/assets/demo/site/npm.d3-interpolate.6c0cb10605963ce4.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[1326],{88122:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "M": () => (/* binding */ genericArray),\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81265);\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67896);\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return ((0,_numberArray_js__WEBPACK_IMPORTED_MODULE_0__/* .isNumberArray */ .v)(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : genericArray)(a, b);\n}\n\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = (0,_value_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgxMjIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStCO0FBQzZCOztBQUU1RCw2QkFBZSxvQ0FBUztBQUN4QixVQUFVLHVFQUFhLE1BQU0sZ0VBQVc7QUFDeEM7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsUUFBUSxZQUFZLDhEQUFLO0FBQ3ZDLFNBQVMsUUFBUTs7QUFFakI7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2FycmF5LmpzPzgyNDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiAoaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5IDogZ2VuZXJpY0FycmF5KShhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///88122\n')},49885:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "t": () => (/* binding */ basis)\n/* harmony export */ });\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk4ODUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcz9iNzdmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49885\n')},95692:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(49885);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return (0,_basis_js__WEBPACK_IMPORTED_MODULE_0__/* .basis */ .t)((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU2OTIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFpQzs7QUFFakMsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlEQUFLO0FBQ2hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzPzVmNWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtiYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoKCh0ICU9IDEpIDwgMCA/ICsrdCA6IHQpICogbiksXG4gICAgICAgIHYwID0gdmFsdWVzWyhpICsgbiAtIDEpICUgbl0sXG4gICAgICAgIHYxID0gdmFsdWVzW2kgJSBuXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbKGkgKyAxKSAlIG5dLFxuICAgICAgICB2MyA9IHZhbHVlc1soaSArIDIpICUgbl07XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95692\n')},85910:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "ZP": () => (/* binding */ nogamma),\n/* harmony export */ "wx": () => (/* binding */ hue),\n/* harmony export */ "yi": () => (/* binding */ gamma)\n/* harmony export */ });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55302);\n\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(isNaN(a) ? b : a);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU5MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBLGtGQUFrRixpRUFBUTtBQUMxRjs7QUFFTztBQUNQO0FBQ0EsMENBQTBDLGlFQUFRO0FBQ2xEO0FBQ0E7O0FBRWU7QUFDZjtBQUNBLDRCQUE0QixpRUFBUTtBQUNwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanM/OTQ5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///85910\n')},55302:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return function() {\n return x;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUzMDIuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzPzAwNTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///55302\n')},68499:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "B": () => (/* binding */ cubehelixLong),\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18218);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(85910);\n\n\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(start)).h, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(end)).h),\n s = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .ZP)(start.s, end.s),\n l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .ZP)(start.l, end.l),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .ZP)(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__/* .hue */ .wx));\nvar cubehelixLong = cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .ZP);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0OTkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXFEO0FBQ2Y7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQiw2REFBYyxtQkFBbUIsNkRBQWM7QUFDMUUsY0FBYywrREFBSztBQUNuQixjQUFjLCtEQUFLO0FBQ25CLG9CQUFvQiwrREFBSztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBLGlFQUFlLFVBQVUsb0RBQUcsQ0FBQyxFQUFDO0FBQ3ZCLDhCQUE4QiwyREFBSyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzP2VkZGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///68499\n')},70088:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAwODguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcz82NTMyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///70088\n')},94743:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "sX": () => (/* reexport */ value/* default */.Z),\n "Ck": () => (/* reexport */ array/* default */.Z),\n "nH": () => (/* reexport */ basis/* default */.Z),\n "FO": () => (/* reexport */ basisClosed/* default */.Z),\n "Ji": () => (/* reexport */ cubehelix/* default */.Z),\n "tR": () => (/* reexport */ cubehelix/* cubehelixLong */.B),\n "NW": () => (/* reexport */ date/* default */.Z),\n "Tp": () => (/* reexport */ discrete),\n "JH": () => (/* reexport */ src_hcl),\n "Yr": () => (/* reexport */ hclLong),\n "US": () => (/* reexport */ src_hsl),\n "H": () => (/* reexport */ hslLong),\n "EP": () => (/* reexport */ hue),\n "uU": () => (/* reexport */ lab_lab),\n "k4": () => (/* reexport */ number/* default */.Z),\n "qN": () => (/* reexport */ numberArray/* default */.Z),\n "IW": () => (/* reexport */ object/* default */.Z),\n "LX": () => (/* reexport */ rgb/* default */.ZP),\n "u1": () => (/* reexport */ rgb/* rgbBasis */.hD),\n "F5": () => (/* reexport */ rgb/* rgbBasisClosed */.YD),\n "uL": () => (/* reexport */ round/* default */.Z),\n "IT": () => (/* reexport */ string/* default */.Z),\n "Yb": () => (/* reexport */ transform/* interpolateTransformCss */.Y),\n "wL": () => (/* reexport */ transform/* interpolateTransformSvg */.w),\n "JX": () => (/* reexport */ zoom/* default */.Z),\n "sO": () => (/* reexport */ piecewise),\n "q$": () => (/* reexport */ quantize)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/value.js\nvar value = __webpack_require__(81265);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/array.js\nvar array = __webpack_require__(88122);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/basis.js\nvar basis = __webpack_require__(49885);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/basisClosed.js\nvar basisClosed = __webpack_require__(95692);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/date.js\nvar date = __webpack_require__(70088);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/discrete.js\n/* harmony default export */ function discrete(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/color.js\nvar color = __webpack_require__(85910);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/hue.js\n\n\n/* harmony default export */ function hue(a, b) {\n var i = (0,color/* hue */.wx)(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/number.js\nvar number = __webpack_require__(73626);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/numberArray.js\nvar numberArray = __webpack_require__(67896);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/object.js\nvar object = __webpack_require__(48528);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/round.js\nvar round = __webpack_require__(55720);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/string.js\nvar string = __webpack_require__(59843);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/transform/index.js + 2 modules\nvar transform = __webpack_require__(55370);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/zoom.js\nvar zoom = __webpack_require__(20588);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/rgb.js\nvar rgb = __webpack_require__(93414);\n// EXTERNAL MODULE: ./node_modules/d3-color/src/color.js\nvar src_color = __webpack_require__(16372);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/hsl.js\n\n\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = (0,src_color/* hsl */.Ym)(start)).h, (end = (0,src_color/* hsl */.Ym)(end)).h),\n s = (0,color/* default */.ZP)(start.s, end.s),\n l = (0,color/* default */.ZP)(start.l, end.l),\n opacity = (0,color/* default */.ZP)(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + "";\n };\n }\n}\n\n/* harmony default export */ const src_hsl = (hsl(color/* hue */.wx));\nvar hslLong = hsl(color/* default */.ZP);\n\n// EXTERNAL MODULE: ./node_modules/d3-color/src/lab.js\nvar lab = __webpack_require__(80241);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/lab.js\n\n\n\nfunction lab_lab(start, end) {\n var l = (0,color/* default */.ZP)((start = (0,lab/* default */.ZP)(start)).l, (end = (0,lab/* default */.ZP)(end)).l),\n a = (0,color/* default */.ZP)(start.a, end.a),\n b = (0,color/* default */.ZP)(start.b, end.b),\n opacity = (0,color/* default */.ZP)(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + "";\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/hcl.js\n\n\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = (0,lab/* hcl */.Uc)(start)).h, (end = (0,lab/* hcl */.Uc)(end)).h),\n c = (0,color/* default */.ZP)(start.c, end.c),\n l = (0,color/* default */.ZP)(start.l, end.l),\n opacity = (0,color/* default */.ZP)(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + "";\n };\n }\n}\n\n/* harmony default export */ const src_hcl = (hcl(color/* hue */.wx));\nvar hclLong = hcl(color/* default */.ZP);\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/cubehelix.js\nvar cubehelix = __webpack_require__(68499);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/piecewise.js\nfunction piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/quantize.js\n/* harmony default export */ function quantize(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ3NDMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUFlLGtCQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDTCtCOztBQUUvQiw2QkFBZSxhQUFTO0FBQ3hCLFVBQVUscUJBQUc7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSeUM7QUFDSDs7QUFFdEM7QUFDQTtBQUNBLHlCQUF5Qix5QkFBUSxtQkFBbUIseUJBQVE7QUFDNUQsWUFBWSx5QkFBSztBQUNqQixZQUFZLHlCQUFLO0FBQ2pCLGtCQUFrQix5QkFBSztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQWUsSUFBSSxpQkFBRyxDQUFDLEVBQUM7QUFDakIsa0JBQWtCLHFCQUFLOzs7OztBQ3BCVztBQUNWOztBQUVoQixTQUFTLE9BQUc7QUFDM0IsVUFBVSx5QkFBSyxVQUFVLHVCQUFRLG1CQUFtQix1QkFBUTtBQUM1RCxVQUFVLHlCQUFLO0FBQ2YsVUFBVSx5QkFBSztBQUNmLGdCQUFnQix5QkFBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNmeUM7QUFDSDs7QUFFdEM7QUFDQTtBQUNBLHlCQUF5QixtQkFBUSxtQkFBbUIsbUJBQVE7QUFDNUQsWUFBWSx5QkFBSztBQUNqQixZQUFZLHlCQUFLO0FBQ2pCLGtCQUFrQix5QkFBSztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQWUsSUFBSSxpQkFBRyxDQUFDLEVBQUM7QUFDakIsa0JBQWtCLHFCQUFLOzs7OztBQ3BCZjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNQQSw2QkFBZSxrQkFBUztBQUN4QjtBQUNBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7OztBQ0prRDtBQUNLO0FBQ0E7QUFDWTtBQUNkO0FBQ1E7QUFDVjtBQUNNO0FBQ1U7QUFDVjtBQUNGO0FBQ0U7QUFDNkI7QUFDakM7QUFDNEU7QUFDL0M7QUFDL0I7QUFDK0I7QUFDd0I7QUFDdEQ7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGlzY3JldGUuanM/YjRhMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2h1ZS5qcz8xMGE0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHNsLmpzP2ZjOWIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9sYWIuanM/M2U1NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hjbC5qcz8xYTU4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcGllY2V3aXNlLmpzPzFjMGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9xdWFudGl6ZS5qcz83Mzg3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanM/ZmUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYW5nZSkge1xuICB2YXIgbiA9IHJhbmdlLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gcmFuZ2VbTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDEsIE1hdGguZmxvb3IodCAqIG4pKSldO1xuICB9O1xufVxuIiwiaW1wb3J0IHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSBodWUoK2EsICtiKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgeCA9IGkodCk7XG4gICAgcmV0dXJuIHggLSAzNjAgKiBNYXRoLmZsb29yKHggLyAzNjApO1xuICB9O1xufVxuIiwiaW1wb3J0IHtoc2wgYXMgY29sb3JIc2x9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBoc2woaHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JIc2woc3RhcnQpKS5oLCAoZW5kID0gY29sb3JIc2woZW5kKSkuaCksXG4gICAgICAgIHMgPSBjb2xvcihzdGFydC5zLCBlbmQucyksXG4gICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICBzdGFydC5sID0gbCh0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhzbChodWUpO1xuZXhwb3J0IHZhciBoc2xMb25nID0gaHNsKGNvbG9yKTtcbiIsImltcG9ydCB7bGFiIGFzIGNvbG9yTGFifSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIoc3RhcnQsIGVuZCkge1xuICB2YXIgbCA9IGNvbG9yKChzdGFydCA9IGNvbG9yTGFiKHN0YXJ0KSkubCwgKGVuZCA9IGNvbG9yTGFiKGVuZCkpLmwpLFxuICAgICAgYSA9IGNvbG9yKHN0YXJ0LmEsIGVuZC5hKSxcbiAgICAgIGIgPSBjb2xvcihzdGFydC5iLCBlbmQuYiksXG4gICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgIHN0YXJ0LmEgPSBhKHQpO1xuICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gIH07XG59XG4iLCJpbXBvcnQge2hjbCBhcyBjb2xvckhjbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGhjbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhjbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IGNvbG9yKHN0YXJ0LmMsIGVuZC5jKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGNsKGh1ZSk7XG5leHBvcnQgdmFyIGhjbExvbmcgPSBoY2woY29sb3IpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGllY2V3aXNlKGludGVycG9sYXRlLCB2YWx1ZXMpIHtcbiAgdmFyIGkgPSAwLCBuID0gdmFsdWVzLmxlbmd0aCAtIDEsIHYgPSB2YWx1ZXNbMF0sIEkgPSBuZXcgQXJyYXkobiA8IDAgPyAwIDogbik7XG4gIHdoaWxlIChpIDwgbikgSVtpXSA9IGludGVycG9sYXRlKHYsIHYgPSB2YWx1ZXNbKytpXSk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICo9IG4pKSk7XG4gICAgcmV0dXJuIElbaV0odCAtIGkpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW50ZXJwb2xhdG9yLCBuKSB7XG4gIHZhciBzYW1wbGVzID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgc2FtcGxlc1tpXSA9IGludGVycG9sYXRvcihpIC8gKG4gLSAxKSk7XG4gIHJldHVybiBzYW1wbGVzO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlfSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlRGF0ZX0gZnJvbSBcIi4vZGF0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlRGlzY3JldGV9IGZyb20gXCIuL2Rpc2NyZXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIdWV9IGZyb20gXCIuL2h1ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlTnVtYmVyfSBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU51bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT2JqZWN0fSBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiLi9yb3VuZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiLi9zdHJpbmcuanNcIjtcbmV4cG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MsIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnfSBmcm9tIFwiLi90cmFuc2Zvcm0vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVpvb219IGZyb20gXCIuL3pvb20uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJnYiwgcmdiQmFzaXMgYXMgaW50ZXJwb2xhdGVSZ2JCYXNpcywgcmdiQmFzaXNDbG9zZWQgYXMgaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vcmdiLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIc2wsIGhzbExvbmcgYXMgaW50ZXJwb2xhdGVIc2xMb25nfSBmcm9tIFwiLi9oc2wuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUxhYn0gZnJvbSBcIi4vbGFiLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIY2wsIGhjbExvbmcgYXMgaW50ZXJwb2xhdGVIY2xMb25nfSBmcm9tIFwiLi9oY2wuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeCwgY3ViZWhlbGl4TG9uZyBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCIuL2N1YmVoZWxpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZWNld2lzZX0gZnJvbSBcIi4vcGllY2V3aXNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVhbnRpemV9IGZyb20gXCIuL3F1YW50aXplLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///94743\n')},73626:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2MjYuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlci5qcz8zMTAzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73626\n')},67896:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "v": () => (/* binding */ isNumberArray)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nfunction isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjc4OTYuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXJBcnJheS5qcz80MmYzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgaWYgKCFiKSBiID0gW107XG4gIHZhciBuID0gYSA/IE1hdGgubWluKGIubGVuZ3RoLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgYyA9IGIuc2xpY2UoKSxcbiAgICAgIGk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5KHgpIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///67896\n')},48528:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81265);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== "object") a = {};\n if (b === null || typeof b !== "object") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = (0,_value_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1MjguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUErQjs7QUFFL0IsNkJBQWUsb0NBQVM7QUFDeEIsWUFBWTtBQUNaLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLDhEQUFLO0FBQ2xCLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvb2JqZWN0LmpzPzgxMTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///48528\n')},93414:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "YD": () => (/* binding */ rgbBasisClosed),\n/* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "hD": () => (/* binding */ rgbBasis)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16372);\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49885);\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(95692);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(85910);\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function rgbGamma(y) {\n var color = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__/* .gamma */ .yi)(y);\n\n function rgb(start, end) {\n var r = color((start = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__/* .rgb */ .B8)(start)).r, (end = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__/* .rgb */ .B8)(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP)(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__/* .rgb */ .B8)(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + "";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(_basis_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z);\nvar rgbBasisClosed = rgbSpline(_basisClosed_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0MTQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlDO0FBQ1Y7QUFDWTtBQUNEOztBQUUxQyxpRUFBZTtBQUNmLGNBQWMsMERBQUs7O0FBRW5CO0FBQ0EsMkJBQTJCLHVEQUFRLG1CQUFtQix1REFBUTtBQUM5RDtBQUNBO0FBQ0Esa0JBQWtCLCtEQUFPO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDLElBQUksRUFBQzs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCLGNBQWMsdURBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU8seUJBQXlCLDBEQUFLO0FBQzlCLCtCQUErQixnRUFBVyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzP2NlMmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93414\n')},55720:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU3MjAuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzP2YxZjAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChhICogKDEgLSB0KSArIGIgKiB0KTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55720\n')},59843:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73626);\n\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, "g");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + "";\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + "", b = b + "";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join("");\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTk4NDMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFpQzs7QUFFakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDRCQUE0QjtBQUM1QjtBQUNBLE1BQU0sT0FBTztBQUNiO0FBQ0EsY0FBYyxTQUFTLCtEQUFNLFNBQVM7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0EsU0FBUztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanM/MTk4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59843\n')},55370:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Y": () => (/* binding */ interpolateTransformCss),\n "w": () => (/* binding */ interpolateTransformSvg)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/number.js\nvar number = __webpack_require__(73626);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/decompose.js\nvar degrees = 180 / Math.PI;\n\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\n/* harmony default export */ function decompose(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/parse.js\n\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nfunction parseCss(value) {\n if (value === "none") return identity;\n if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(",");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");\n svgNode.setAttribute("transform", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/index.js\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + " " : "";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push("translate(", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: (0,number/* default */.Z)(xa, xb)}, {i: i - 2, x: (0,number/* default */.Z)(ya, yb)});\n } else if (xb || yb) {\n s.push("translate(" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: (0,number/* default */.Z)(a, b)});\n } else if (b) {\n s.push(pop(s) + "rotate(" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: (0,number/* default */.Z)(a, b)});\n } else if (b) {\n s.push(pop(s) + "skewX(" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + "scale(", null, ",", null, ")");\n q.push({i: i - 4, x: (0,number/* default */.Z)(xa, xb)}, {i: i - 2, x: (0,number/* default */.Z)(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + "scale(" + xb + "," + yb + ")");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join("");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUzNzAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsbUJBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDekJtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCwrQkFBK0IsUUFBUTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCOztBQUVPO0FBQ1AsNEJBQTRCLFFBQVE7QUFDcEM7QUFDQTtBQUNBLGlFQUFpRSxRQUFRO0FBQ3pFO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCOzs7QUN4QmtDO0FBQ1k7O0FBRTlDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGFBQWEseUJBQU0sU0FBUyxHQUFHLGFBQWEseUJBQU0sU0FBUztBQUN6RSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMsZ0NBQWdDO0FBQ2pFLGNBQWMsc0RBQXNELHlCQUFNLE9BQU87QUFDakYsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxxREFBcUQseUJBQU0sT0FBTztBQUNoRixNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsYUFBYSx5QkFBTSxTQUFTLEdBQUcsYUFBYSx5QkFBTSxTQUFTO0FBQ3pFLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLG1EQUFtRCxRQUFRO0FBQzNELG1EQUFtRCxRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzP2FlNGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanM/NTYxMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcz85ZjA2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIGNzc05vZGUsXG4gICAgY3NzUm9vdCxcbiAgICBjc3NWaWV3LFxuICAgIHN2Z05vZGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IFwibm9uZVwiKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghY3NzTm9kZSkgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksIGNzc1Jvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGNzc1ZpZXcgPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgY3NzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgdmFsdWUgPSBjc3NWaWV3LmdldENvbXB1dGVkU3R5bGUoY3NzUm9vdC5hcHBlbmRDaGlsZChjc3NOb2RlKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKTtcbiAgY3NzUm9vdC5yZW1vdmVDaGlsZChjc3NOb2RlKTtcbiAgdmFsdWUgPSB2YWx1ZS5zbGljZSg3LCAtMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gZGVjb21wb3NlKCt2YWx1ZVswXSwgK3ZhbHVlWzFdLCArdmFsdWVbMl0sICt2YWx1ZVszXSwgK3ZhbHVlWzRdLCArdmFsdWVbNV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlci5qc1wiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///55370\n')},81265:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16372);\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(93414);\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88122);\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70088);\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73626);\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(48528);\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(59843);\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55302);\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(67896);\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n var t = typeof b, c;\n return b == null || t === "boolean" ? (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(b)\n : (t === "number" ? _number_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z\n : t === "string" ? ((c = (0,d3_color__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .ZP)(b)) ? (b = c, _rgb_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .ZP) : _string_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)\n : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .ZP ? _rgb_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .ZP\n : b instanceof Date ? _date_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z\n : (0,_numberArray_js__WEBPACK_IMPORTED_MODULE_6__/* .isNumberArray */ .v)(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z\n : Array.isArray(b) ? _array_js__WEBPACK_IMPORTED_MODULE_7__/* .genericArray */ .M\n : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? _object_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z\n : _number_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(a, b);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODEyNjUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ0o7QUFDYTtBQUNYO0FBQ0k7QUFDQTtBQUNBO0FBQ0k7QUFDdUI7O0FBRTVELDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0Esd0NBQXdDLGlFQUFRO0FBQ2hELDBCQUEwQiwyREFBTTtBQUNoQywrQkFBK0IsOERBQUssZUFBZSx5REFBRyxJQUFJLDJEQUFNO0FBQ2hFLHFCQUFxQiwwREFBSyxHQUFHLHlEQUFHO0FBQ2hDLDRCQUE0Qix5REFBSTtBQUNoQyxRQUFRLHVFQUFhLE1BQU0sZ0VBQVc7QUFDdEMsMkJBQTJCLDREQUFZO0FBQ3ZDLDBGQUEwRiwyREFBTTtBQUNoRyxRQUFRLDJEQUFNO0FBQ2QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzPzI0Y2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///81265\n')},20588:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjA1ODguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvem9vbS5qcz85YWY3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciByaG8gPSBNYXRoLlNRUlQyLFxuICAgIHJobzIgPSAyLFxuICAgIHJobzQgPSA0LFxuICAgIGVwc2lsb24yID0gMWUtMTI7XG5cbmZ1bmN0aW9uIGNvc2goeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpICsgMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gc2luaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgLSAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiB0YW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKDIgKiB4KSkgLSAxKSAvICh4ICsgMSk7XG59XG5cbi8vIHAwID0gW3V4MCwgdXkwLCB3MF1cbi8vIHAxID0gW3V4MSwgdXkxLCB3MV1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHAwLCBwMSkge1xuICB2YXIgdXgwID0gcDBbMF0sIHV5MCA9IHAwWzFdLCB3MCA9IHAwWzJdLFxuICAgICAgdXgxID0gcDFbMF0sIHV5MSA9IHAxWzFdLCB3MSA9IHAxWzJdLFxuICAgICAgZHggPSB1eDEgLSB1eDAsXG4gICAgICBkeSA9IHV5MSAtIHV5MCxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICBpLFxuICAgICAgUztcblxuICAvLyBTcGVjaWFsIGNhc2UgZm9yIHUwIOKJhSB1MS5cbiAgaWYgKGQyIDwgZXBzaWxvbjIpIHtcbiAgICBTID0gTWF0aC5sb2codzEgLyB3MCkgLyByaG87XG4gICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHV4MCArIHQgKiBkeCxcbiAgICAgICAgdXkwICsgdCAqIGR5LFxuICAgICAgICB3MCAqIE1hdGguZXhwKHJobyAqIHQgKiBTKVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmFsIGNhc2UuXG4gIGVsc2Uge1xuICAgIHZhciBkMSA9IE1hdGguc3FydChkMiksXG4gICAgICAgIGIwID0gKHcxICogdzEgLSB3MCAqIHcwICsgcmhvNCAqIGQyKSAvICgyICogdzAgKiByaG8yICogZDEpLFxuICAgICAgICBiMSA9ICh3MSAqIHcxIC0gdzAgKiB3MCAtIHJobzQgKiBkMikgLyAoMiAqIHcxICogcmhvMiAqIGQxKSxcbiAgICAgICAgcjAgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjAgKiBiMCArIDEpIC0gYjApLFxuICAgICAgICByMSA9IE1hdGgubG9nKE1hdGguc3FydChiMSAqIGIxICsgMSkgLSBiMSk7XG4gICAgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgICBpID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHMgPSB0ICogUyxcbiAgICAgICAgICBjb3NocjAgPSBjb3NoKHIwKSxcbiAgICAgICAgICB1ID0gdzAgLyAocmhvMiAqIGQxKSAqIChjb3NocjAgKiB0YW5oKHJobyAqIHMgKyByMCkgLSBzaW5oKHIwKSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB1ICogZHgsXG4gICAgICAgIHV5MCArIHUgKiBkeSxcbiAgICAgICAgdzAgKiBjb3NocjAgLyBjb3NoKHJobyAqIHMgKyByMClcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwO1xuXG4gIHJldHVybiBpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20588\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-path.186a2a7db50d25b5.bundle.js b/assets/demo/site/npm.d3-path.186a2a7db50d25b5.bundle.js
new file mode 100644
index 00000000..01e92e9b
--- /dev/null
+++ b/assets/demo/site/npm.d3-path.186a2a7db50d25b5.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[730],{40549:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "E": () => (/* reexport safe */ _path_js__WEBPACK_IMPORTED_MODULE_0__.Z)\n/* harmony export */ });\n/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(11108);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA1NDkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1wYXRoL3NyYy9pbmRleC5qcz8xNzdiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBwYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40549\n')},11108:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = "";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += "Z";\n }\n },\n lineTo: function(x, y) {\n this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error("negative radius: " + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);\n }\n\n this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error("negative radius: " + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += "M" + x0 + "," + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += "L" + x0 + "," + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";\n },\n toString: function() {\n return this._;\n }\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (path);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTExMDguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsSUFBSSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanM/YTBjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcGkgPSBNYXRoLlBJLFxuICAgIHRhdSA9IDIgKiBwaSxcbiAgICBlcHNpbG9uID0gMWUtNixcbiAgICB0YXVFcHNpbG9uID0gdGF1IC0gZXBzaWxvbjtcblxuZnVuY3Rpb24gUGF0aCgpIHtcbiAgdGhpcy5feDAgPSB0aGlzLl95MCA9IC8vIHN0YXJ0IG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl8gPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gbmV3IFBhdGg7XG59XG5cblBhdGgucHJvdG90eXBlID0gcGF0aC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQYXRoLFxuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fICs9IFwiWlwiO1xuICAgIH1cbiAgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIHF1YWRyYXRpY0N1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIlFcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiQ1wiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAoK3gyKSArIFwiLFwiICsgKCt5MikgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBhcmNUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHIpIHtcbiAgICB4MSA9ICt4MSwgeTEgPSAreTEsIHgyID0gK3gyLCB5MiA9ICt5MiwgciA9ICtyO1xuICAgIHZhciB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MSx5MSkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgwLHkwKT8gRG8gbm90aGluZy5cbiAgICBlbHNlIGlmICghKGwwMV8yID4gZXBzaWxvbikpO1xuXG4gICAgLy8gT3IsIGFyZSAoeDAseTApLCAoeDEseTEpIGFuZCAoeDIseTIpIGNvbGxpbmVhcj9cbiAgICAvLyBFcXVpdmFsZW50bHksIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4Mix5Mik/XG4gICAgLy8gT3IsIGlzIHRoZSByYWRpdXMgemVybz8gTGluZSB0byAoeDEseTEpLlxuICAgIGVsc2UgaWYgKCEoTWF0aC5hYnMoeTAxICogeDIxIC0geTIxICogeDAxKSA+IGVwc2lsb24pIHx8ICFyKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl8gKz0gXCJMXCIgKyAoeDEgKyB0MDEgKiB4MDEpICsgXCIsXCIgKyAoeTEgKyB0MDEgKiB5MDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwwLFwiICsgKCsoeTAxICogeDIwID4geDAxICogeTIwKSkgKyBcIixcIiArICh0aGlzLl94MSA9IHgxICsgdDIxICogeDIxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEgKyB0MjEgKiB5MjEpO1xuICAgIH1cbiAgfSxcbiAgYXJjOiBmdW5jdGlvbih4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3IsIGNjdyA9ICEhY2N3O1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11108\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-polygon.7604adc0997943dc.bundle.js b/assets/demo/site/npm.d3-polygon.7604adc0997943dc.bundle.js
new file mode 100644
index 00000000..057ce5e9
--- /dev/null
+++ b/assets/demo/site/npm.d3-polygon.7604adc0997943dc.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4502],{5313:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ hull)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/cross.js\n// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\n/* harmony default export */ function cross(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/hull.js\n\n\nfunction lexicographicOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n var n = points.length,\n indexes = [0, 1],\n size = 2;\n\n for (var i = 2; i < n; ++i) {\n while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n indexes[size++] = i;\n }\n\n return indexes.slice(0, size); // remove popped points\n}\n\n/* harmony default export */ function hull(points) {\n if ((n = points.length) < 3) return null;\n\n var i,\n n,\n sortedPoints = new Array(n),\n flippedPoints = new Array(n);\n\n for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n sortedPoints.sort(lexicographicOrder);\n for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n var upperIndexes = computeUpperHullIndexes(sortedPoints),\n lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n // Construct the hull polygon, removing possible duplicate endpoints.\n var skipLeft = lowerIndexes[0] === upperIndexes[0],\n skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n hull = [];\n\n // Add upper hull in right-to-l order.\n // Then add lower hull in left-to-right order.\n for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n return hull;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMxMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBZSxlQUFTO0FBQ3hCO0FBQ0E7OztBQ04rQjs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixPQUFPO0FBQ3pCLHVCQUF1QixLQUFLO0FBQzVCO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDOztBQUVBLDZCQUFlLGNBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxPQUFPO0FBQ3JCO0FBQ0EsY0FBYyxPQUFPOztBQUVyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0MsUUFBUTtBQUM1QyxzQkFBc0IscUNBQXFDOztBQUUzRDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2Nyb3NzLmpzPzhmMTMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2h1bGwuanM/ZWFiZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBSZXR1cm5zIHRoZSAyRCBjcm9zcyBwcm9kdWN0IG9mIEFCIGFuZCBBQyB2ZWN0b3JzLCBpLmUuLCB0aGUgei1jb21wb25lbnQgb2Zcbi8vIHRoZSAzRCBjcm9zcyBwcm9kdWN0IGluIGEgcXVhZHJhbnQgSSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0gKCt4IGlzXG4vLyByaWdodCwgK3kgaXMgdXApLiBSZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgaWYgQUJDIGlzIGNvdW50ZXItY2xvY2t3aXNlLFxuLy8gbmVnYXRpdmUgaWYgY2xvY2t3aXNlLCBhbmQgemVybyBpZiB0aGUgcG9pbnRzIGFyZSBjb2xsaW5lYXIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjKSB7XG4gIHJldHVybiAoYlswXSAtIGFbMF0pICogKGNbMV0gLSBhWzFdKSAtIChiWzFdIC0gYVsxXSkgKiAoY1swXSAtIGFbMF0pO1xufVxuIiwiaW1wb3J0IGNyb3NzIGZyb20gXCIuL2Nyb3NzLmpzXCI7XG5cbmZ1bmN0aW9uIGxleGljb2dyYXBoaWNPcmRlcihhLCBiKSB7XG4gIHJldHVybiBhWzBdIC0gYlswXSB8fCBhWzFdIC0gYlsxXTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIHVwcGVyIGNvbnZleCBodWxsIHBlciB0aGUgbW9ub3RvbmUgY2hhaW4gYWxnb3JpdGhtLlxuLy8gQXNzdW1lcyBwb2ludHMubGVuZ3RoID49IDMsIGlzIHNvcnRlZCBieSB4LCB1bmlxdWUgaW4geS5cbi8vIFJldHVybnMgYW4gYXJyYXkgb2YgaW5kaWNlcyBpbnRvIHBvaW50cyBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuZnVuY3Rpb24gY29tcHV0ZVVwcGVySHVsbEluZGV4ZXMocG9pbnRzKSB7XG4gIHZhciBuID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgIGluZGV4ZXMgPSBbMCwgMV0sXG4gICAgICBzaXplID0gMjtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IG47ICsraSkge1xuICAgIHdoaWxlIChzaXplID4gMSAmJiBjcm9zcyhwb2ludHNbaW5kZXhlc1tzaXplIC0gMl1dLCBwb2ludHNbaW5kZXhlc1tzaXplIC0gMV1dLCBwb2ludHNbaV0pIDw9IDApIC0tc2l6ZTtcbiAgICBpbmRleGVzW3NpemUrK10gPSBpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4ZXMuc2xpY2UoMCwgc2l6ZSk7IC8vIHJlbW92ZSBwb3BwZWQgcG9pbnRzXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvaW50cykge1xuICBpZiAoKG4gPSBwb2ludHMubGVuZ3RoKSA8IDMpIHJldHVybiBudWxsO1xuXG4gIHZhciBpLFxuICAgICAgbixcbiAgICAgIHNvcnRlZFBvaW50cyA9IG5ldyBBcnJheShuKSxcbiAgICAgIGZsaXBwZWRQb2ludHMgPSBuZXcgQXJyYXkobik7XG5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgc29ydGVkUG9pbnRzW2ldID0gWytwb2ludHNbaV1bMF0sICtwb2ludHNbaV1bMV0sIGldO1xuICBzb3J0ZWRQb2ludHMuc29ydChsZXhpY29ncmFwaGljT3JkZXIpO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBmbGlwcGVkUG9pbnRzW2ldID0gW3NvcnRlZFBvaW50c1tpXVswXSwgLXNvcnRlZFBvaW50c1tpXVsxXV07XG5cbiAgdmFyIHVwcGVySW5kZXhlcyA9IGNvbXB1dGVVcHBlckh1bGxJbmRleGVzKHNvcnRlZFBvaW50cyksXG4gICAgICBsb3dlckluZGV4ZXMgPSBjb21wdXRlVXBwZXJIdWxsSW5kZXhlcyhmbGlwcGVkUG9pbnRzKTtcblxuICAvLyBDb25zdHJ1Y3QgdGhlIGh1bGwgcG9seWdvbiwgcmVtb3ZpbmcgcG9zc2libGUgZHVwbGljYXRlIGVuZHBvaW50cy5cbiAgdmFyIHNraXBMZWZ0ID0gbG93ZXJJbmRleGVzWzBdID09PSB1cHBlckluZGV4ZXNbMF0sXG4gICAgICBza2lwUmlnaHQgPSBsb3dlckluZGV4ZXNbbG93ZXJJbmRleGVzLmxlbmd0aCAtIDFdID09PSB1cHBlckluZGV4ZXNbdXBwZXJJbmRleGVzLmxlbmd0aCAtIDFdLFxuICAgICAgaHVsbCA9IFtdO1xuXG4gIC8vIEFkZCB1cHBlciBodWxsIGluIHJpZ2h0LXRvLWwgb3JkZXIuXG4gIC8vIFRoZW4gYWRkIGxvd2VyIGh1bGwgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbiAgZm9yIChpID0gdXBwZXJJbmRleGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBodWxsLnB1c2gocG9pbnRzW3NvcnRlZFBvaW50c1t1cHBlckluZGV4ZXNbaV1dWzJdXSk7XG4gIGZvciAoaSA9ICtza2lwTGVmdDsgaSA8IGxvd2VySW5kZXhlcy5sZW5ndGggLSBza2lwUmlnaHQ7ICsraSkgaHVsbC5wdXNoKHBvaW50c1tzb3J0ZWRQb2ludHNbbG93ZXJJbmRleGVzW2ldXVsyXV0pO1xuXG4gIHJldHVybiBodWxsO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5313\n')},15697:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "mI": () => (/* reexport */ src_area),\n "tO": () => (/* reexport */ centroid),\n "Q6": () => (/* reexport */ contains),\n "WF": () => (/* reexport */ hull/* default */.Z),\n "NZ": () => (/* reexport */ src_length)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/area.js\n/* harmony default export */ function src_area(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/centroid.js\n/* harmony default export */ function centroid(polygon) {\n var i = -1,\n n = polygon.length,\n x = 0,\n y = 0,\n a,\n b = polygon[n - 1],\n c,\n k = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n k += c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n\n return k *= 3, [x / k, y / k];\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-polygon/src/hull.js + 1 modules\nvar hull = __webpack_require__(5313);\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/contains.js\n/* harmony default export */ function contains(polygon, point) {\n var n = polygon.length,\n p = polygon[n - 1],\n x = point[0], y = point[1],\n x0 = p[0], y0 = p[1],\n x1, y1,\n inside = false;\n\n for (var i = 0; i < n; ++i) {\n p = polygon[i], x1 = p[0], y1 = p[1];\n if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n x0 = x1, y0 = y1;\n }\n\n return inside;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/length.js\n/* harmony default export */ function src_length(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.sqrt(xa * xa + ya * ya);\n }\n\n return perimeter;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-polygon/src/index.js\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU2OTcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSw2QkFBZSxrQkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FDZEEsNkJBQWUsa0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7OztBQ25CQSw2QkFBZSxrQkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FDZkEsNkJBQWUsb0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUN0QmlEO0FBQ1E7QUFDUjtBQUNRO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvYXJlYS5qcz9jYWQ4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jZW50cm9pZC5qcz8yMDBiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jb250YWlucy5qcz9lMmQxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9sZW5ndGguanM/ZGRlNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaW5kZXguanM/ZjJmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uKSB7XG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gcG9seWdvbi5sZW5ndGgsXG4gICAgICBhLFxuICAgICAgYiA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgYXJlYSA9IDA7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBhID0gYjtcbiAgICBiID0gcG9seWdvbltpXTtcbiAgICBhcmVhICs9IGFbMV0gKiBiWzBdIC0gYVswXSAqIGJbMV07XG4gIH1cblxuICByZXR1cm4gYXJlYSAvIDI7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uKSB7XG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gcG9seWdvbi5sZW5ndGgsXG4gICAgICB4ID0gMCxcbiAgICAgIHkgPSAwLFxuICAgICAgYSxcbiAgICAgIGIgPSBwb2x5Z29uW24gLSAxXSxcbiAgICAgIGMsXG4gICAgICBrID0gMDtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGEgPSBiO1xuICAgIGIgPSBwb2x5Z29uW2ldO1xuICAgIGsgKz0gYyA9IGFbMF0gKiBiWzFdIC0gYlswXSAqIGFbMV07XG4gICAgeCArPSAoYVswXSArIGJbMF0pICogYztcbiAgICB5ICs9IChhWzFdICsgYlsxXSkgKiBjO1xuICB9XG5cbiAgcmV0dXJuIGsgKj0gMywgW3ggLyBrLCB5IC8ga107XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgcCA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgeCA9IHBvaW50WzBdLCB5ID0gcG9pbnRbMV0sXG4gICAgICB4MCA9IHBbMF0sIHkwID0gcFsxXSxcbiAgICAgIHgxLCB5MSxcbiAgICAgIGluc2lkZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgcCA9IHBvbHlnb25baV0sIHgxID0gcFswXSwgeTEgPSBwWzFdO1xuICAgIGlmICgoKHkxID4geSkgIT09ICh5MCA+IHkpKSAmJiAoeCA8ICh4MCAtIHgxKSAqICh5IC0geTEpIC8gKHkwIC0geTEpICsgeDEpKSBpbnNpZGUgPSAhaW5zaWRlO1xuICAgIHgwID0geDEsIHkwID0geTE7XG4gIH1cblxuICByZXR1cm4gaW5zaWRlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbikge1xuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgYiA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgeGEsXG4gICAgICB5YSxcbiAgICAgIHhiID0gYlswXSxcbiAgICAgIHliID0gYlsxXSxcbiAgICAgIHBlcmltZXRlciA9IDA7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICB4YSA9IHhiO1xuICAgIHlhID0geWI7XG4gICAgYiA9IHBvbHlnb25baV07XG4gICAgeGIgPSBiWzBdO1xuICAgIHliID0gYlsxXTtcbiAgICB4YSAtPSB4YjtcbiAgICB5YSAtPSB5YjtcbiAgICBwZXJpbWV0ZXIgKz0gTWF0aC5zcXJ0KHhhICogeGEgKyB5YSAqIHlhKTtcbiAgfVxuXG4gIHJldHVybiBwZXJpbWV0ZXI7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkFyZWF9IGZyb20gXCIuL2FyZWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uQ2VudHJvaWR9IGZyb20gXCIuL2NlbnRyb2lkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkh1bGx9IGZyb20gXCIuL2h1bGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uQ29udGFpbnN9IGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9seWdvbkxlbmd0aH0gZnJvbSBcIi4vbGVuZ3RoLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15697\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-quadtree.53a3ce69a0c5c15e.bundle.js b/assets/demo/site/npm.d3-quadtree.53a3ce69a0c5c15e.bundle.js
new file mode 100644
index 00000000..39cfd539
--- /dev/null
+++ b/assets/demo/site/npm.d3-quadtree.53a3ce69a0c5c15e.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[1337],{71829:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "T": () => (/* reexport safe */ _quadtree_js__WEBPACK_IMPORTED_MODULE_0__.Z)\n/* harmony export */ });\n/* harmony import */ var _quadtree_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47148);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzE4MjkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFrRCIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvaW5kZXguanM/YzkyMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgcXVhZHRyZWV9IGZyb20gXCIuL3F1YWR0cmVlLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///71829\n')},47148:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ quadtree)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/add.js\n/* harmony default export */ function add(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add_add(this.cover(x, y), x, y, d);\n}\n\nfunction add_add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nfunction addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add_add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/cover.js\n/* harmony default export */ function cover(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/data.js\n/* harmony default export */ function data() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/extent.js\n/* harmony default export */ function extent(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/quad.js\n/* harmony default export */ function quad(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/find.js\n\n\n/* harmony default export */ function find(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new quad(node[3], xm, ym, x2, y2),\n new quad(node[2], x1, ym, xm, y2),\n new quad(node[1], xm, y1, x2, ym),\n new quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/remove.js\n/* harmony default export */ function remove(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nfunction removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/root.js\n/* harmony default export */ function root() {\n return this._root;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/size.js\n/* harmony default export */ function size() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/visit.js\n\n\n/* harmony default export */ function visit(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/visitAfter.js\n\n\n/* harmony default export */ function visitAfter(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/x.js\nfunction defaultX(d) {\n return d[0];\n}\n\n/* harmony default export */ function x(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/y.js\nfunction defaultY(d) {\n return d[1];\n}\n\n/* harmony default export */ function y(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/quadtree.js\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = add;\ntreeProto.addAll = addAll;\ntreeProto.cover = cover;\ntreeProto.data = data;\ntreeProto.extent = extent;\ntreeProto.find = find;\ntreeProto.remove = remove;\ntreeProto.removeAll = removeAll;\ntreeProto.root = root;\ntreeProto.size = size;\ntreeProto.visit = visit;\ntreeProto.visitAfter = visitAfter;\ntreeProto.x = x;\ntreeProto.y = y;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFTO0FBQzFCLGtCQUFrQixLQUFVO0FBQzVCLHVCQUF1QixVQUFlO0FBQ3RDLGNBQWMsQ0FBTTtBQUNwQixjQUFjLENBQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2FkZC5qcz9hODM3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvY292ZXIuanM/YTNjNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2RhdGEuanM/Y2FkMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2V4dGVudC5qcz9jMzcyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZC5qcz9mNzEyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZmluZC5qcz9mMjZjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzPzY0MmUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yb290LmpzPzdiOGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9zaXplLmpzPzhhN2QiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcz9kMmQ3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXRBZnRlci5qcz8yNTgwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveC5qcz8wMWYyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcz9jMjA1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZHRyZWUuanM/YTNjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIHZhciB4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkKSxcbiAgICAgIHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpO1xuICByZXR1cm4gYWRkKHRoaXMuY292ZXIoeCwgeSksIHgsIHksIGQpO1xufVxuXG5mdW5jdGlvbiBhZGQodHJlZSwgeCwgeSwgZCkge1xuICBpZiAoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiB0cmVlOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgcGFyZW50LFxuICAgICAgbm9kZSA9IHRyZWUuX3Jvb3QsXG4gICAgICBsZWFmID0ge2RhdGE6IGR9LFxuICAgICAgeDAgPSB0cmVlLl94MCxcbiAgICAgIHkwID0gdHJlZS5feTAsXG4gICAgICB4MSA9IHRyZWUuX3gxLFxuICAgICAgeTEgPSB0cmVlLl95MSxcbiAgICAgIHhtLFxuICAgICAgeW0sXG4gICAgICB4cCxcbiAgICAgIHlwLFxuICAgICAgcmlnaHQsXG4gICAgICBib3R0b20sXG4gICAgICBpLFxuICAgICAgajtcblxuICAvLyBJZiB0aGUgdHJlZSBpcyBlbXB0eSwgaW5pdGlhbGl6ZSB0aGUgcm9vdCBhcyBhIGxlYWYuXG4gIGlmICghbm9kZSkgcmV0dXJuIHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIEZpbmQgdGhlIGV4aXN0aW5nIGxlYWYgZm9yIHRoZSBuZXcgcG9pbnQsIG9yIGFkZCBpdC5cbiAgd2hpbGUgKG5vZGUubGVuZ3RoKSB7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gICAgaWYgKHBhcmVudCA9IG5vZGUsICEobm9kZSA9IG5vZGVbaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHRdKSkgcmV0dXJuIHBhcmVudFtpXSA9IGxlYWYsIHRyZWU7XG4gIH1cblxuICAvLyBJcyB0aGUgbmV3IHBvaW50IGlzIGV4YWN0bHkgY29pbmNpZGVudCB3aXRoIHRoZSBleGlzdGluZyBwb2ludD9cbiAgeHAgPSArdHJlZS5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSk7XG4gIHlwID0gK3RyZWUuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICBpZiAoeCA9PT0geHAgJiYgeSA9PT0geXApIHJldHVybiBsZWFmLm5leHQgPSBub2RlLCBwYXJlbnQgPyBwYXJlbnRbaV0gPSBsZWFmIDogdHJlZS5fcm9vdCA9IGxlYWYsIHRyZWU7XG5cbiAgLy8gT3RoZXJ3aXNlLCBzcGxpdCB0aGUgbGVhZiBub2RlIHVudGlsIHRoZSBvbGQgYW5kIG5ldyBwb2ludCBhcmUgc2VwYXJhdGVkLlxuICBkbyB7XG4gICAgcGFyZW50ID0gcGFyZW50ID8gcGFyZW50W2ldID0gbmV3IEFycmF5KDQpIDogdHJlZS5fcm9vdCA9IG5ldyBBcnJheSg0KTtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgfSB3aGlsZSAoKGkgPSBib3R0b20gPDwgMSB8IHJpZ2h0KSA9PT0gKGogPSAoeXAgPj0geW0pIDw8IDEgfCAoeHAgPj0geG0pKSk7XG4gIHJldHVybiBwYXJlbnRbal0gPSBub2RlLCBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQWxsKGRhdGEpIHtcbiAgdmFyIGQsIGksIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeHogPSBuZXcgQXJyYXkobiksXG4gICAgICB5eiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHgwID0gSW5maW5pdHksXG4gICAgICB5MCA9IEluZmluaXR5LFxuICAgICAgeDEgPSAtSW5maW5pdHksXG4gICAgICB5MSA9IC1JbmZpbml0eTtcblxuICAvLyBDb21wdXRlIHRoZSBwb2ludHMgYW5kIHRoZWlyIGV4dGVudC5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGlmIChpc05hTih4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkID0gZGF0YVtpXSkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgY29udGludWU7XG4gICAgeHpbaV0gPSB4O1xuICAgIHl6W2ldID0geTtcbiAgICBpZiAoeCA8IHgwKSB4MCA9IHg7XG4gICAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICAgIGlmICh5IDwgeTApIHkwID0geTtcbiAgICBpZiAoeSA+IHkxKSB5MSA9IHk7XG4gIH1cblxuICAvLyBJZiB0aGVyZSB3ZXJlIG5vICh2YWxpZCkgcG9pbnRzLCBhYm9ydC5cbiAgaWYgKHgwID4geDEgfHwgeTAgPiB5MSkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRXhwYW5kIHRoZSB0cmVlIHRvIGNvdmVyIHRoZSBuZXcgcG9pbnRzLlxuICB0aGlzLmNvdmVyKHgwLCB5MCkuY292ZXIoeDEsIHkxKTtcblxuICAvLyBBZGQgdGhlIG5ldyBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBhZGQodGhpcywgeHpbaV0sIHl6W2ldLCBkYXRhW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICBpZiAoaXNOYU4oeCA9ICt4KSB8fCBpc05hTih5ID0gK3kpKSByZXR1cm4gdGhpczsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEgPSB0aGlzLl94MSxcbiAgICAgIHkxID0gdGhpcy5feTE7XG5cbiAgLy8gSWYgdGhlIHF1YWR0cmVlIGhhcyBubyBleHRlbnQsIGluaXRpYWxpemUgdGhlbS5cbiAgLy8gSW50ZWdlciBleHRlbnQgYXJlIG5lY2Vzc2FyeSBzbyB0aGF0IGlmIHdlIGxhdGVyIGRvdWJsZSB0aGUgZXh0ZW50LFxuICAvLyB0aGUgZXhpc3RpbmcgcXVhZHJhbnQgYm91bmRhcmllcyBkb27igJl0IGNoYW5nZSBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgZXJyb3IhXG4gIGlmIChpc05hTih4MCkpIHtcbiAgICB4MSA9ICh4MCA9IE1hdGguZmxvb3IoeCkpICsgMTtcbiAgICB5MSA9ICh5MCA9IE1hdGguZmxvb3IoeSkpICsgMTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgZG91YmxlIHJlcGVhdGVkbHkgdG8gY292ZXIuXG4gIGVsc2Uge1xuICAgIHZhciB6ID0geDEgLSB4MCxcbiAgICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgaTtcblxuICAgIHdoaWxlICh4MCA+IHggfHwgeCA+PSB4MSB8fCB5MCA+IHkgfHwgeSA+PSB5MSkge1xuICAgICAgaSA9ICh5IDwgeTApIDw8IDEgfCAoeCA8IHgwKTtcbiAgICAgIHBhcmVudCA9IG5ldyBBcnJheSg0KSwgcGFyZW50W2ldID0gbm9kZSwgbm9kZSA9IHBhcmVudCwgeiAqPSAyO1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgMDogeDEgPSB4MCArIHosIHkxID0geTAgKyB6OyBicmVhaztcbiAgICAgICAgY2FzZSAxOiB4MCA9IHgxIC0geiwgeTEgPSB5MCArIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IHgxID0geDAgKyB6LCB5MCA9IHkxIC0gejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogeDAgPSB4MSAtIHosIHkwID0geTEgLSB6OyBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcm9vdCAmJiB0aGlzLl9yb290Lmxlbmd0aCkgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICB0aGlzLl94MCA9IHgwO1xuICB0aGlzLl95MCA9IHkwO1xuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YSA9IFtdO1xuICB0aGlzLnZpc2l0KGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBkbyBkYXRhLnB1c2gobm9kZS5kYXRhKTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gZGF0YTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5jb3ZlcigrX1swXVswXSwgK19bMF1bMV0pLmNvdmVyKCtfWzFdWzBdLCArX1sxXVsxXSlcbiAgICAgIDogaXNOYU4odGhpcy5feDApID8gdW5kZWZpbmVkIDogW1t0aGlzLl94MCwgdGhpcy5feTBdLCBbdGhpcy5feDEsIHRoaXMuX3kxXV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLm5vZGUgPSBub2RlO1xuICB0aGlzLngwID0geDA7XG4gIHRoaXMueTAgPSB5MDtcbiAgdGhpcy54MSA9IHgxO1xuICB0aGlzLnkxID0geTE7XG59XG4iLCJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICB2YXIgZGF0YSxcbiAgICAgIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEsXG4gICAgICB5MSxcbiAgICAgIHgyLFxuICAgICAgeTIsXG4gICAgICB4MyA9IHRoaXMuX3gxLFxuICAgICAgeTMgPSB0aGlzLl95MSxcbiAgICAgIHF1YWRzID0gW10sXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHEsXG4gICAgICBpO1xuXG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHgwLCB5MCwgeDMsIHkzKSk7XG4gIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gIGVsc2Uge1xuICAgIHgwID0geCAtIHJhZGl1cywgeTAgPSB5IC0gcmFkaXVzO1xuICAgIHgzID0geCArIHJhZGl1cywgeTMgPSB5ICsgcmFkaXVzO1xuICAgIHJhZGl1cyAqPSByYWRpdXM7XG4gIH1cblxuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG5cbiAgICAvLyBTdG9wIHNlYXJjaGluZyBpZiB0aGlzIHF1YWRyYW50IGNhbuKAmXQgY29udGFpbiBhIGNsb3NlciBub2RlLlxuICAgIGlmICghKG5vZGUgPSBxLm5vZGUpXG4gICAgICAgIHx8ICh4MSA9IHEueDApID4geDNcbiAgICAgICAgfHwgKHkxID0gcS55MCkgPiB5M1xuICAgICAgICB8fCAoeDIgPSBxLngxKSA8IHgwXG4gICAgICAgIHx8ICh5MiA9IHEueTEpIDwgeTApIGNvbnRpbnVlO1xuXG4gICAgLy8gQmlzZWN0IHRoZSBjdXJyZW50IHF1YWRyYW50LlxuICAgIGlmIChub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIHhtID0gKHgxICsgeDIpIC8gMixcbiAgICAgICAgICB5bSA9ICh5MSArIHkyKSAvIDI7XG5cbiAgICAgIHF1YWRzLnB1c2goXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbM10sIHhtLCB5bSwgeDIsIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsyXSwgeDEsIHltLCB4bSwgeTIpLFxuICAgICAgICBuZXcgUXVhZChub2RlWzFdLCB4bSwgeTEsIHgyLCB5bSksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMF0sIHgxLCB5MSwgeG0sIHltKVxuICAgICAgKTtcblxuICAgICAgLy8gVmlzaXQgdGhlIGNsb3Nlc3QgcXVhZHJhbnQgZmlyc3QuXG4gICAgICBpZiAoaSA9ICh5ID49IHltKSA8PCAxIHwgKHggPj0geG0pKSB7XG4gICAgICAgIHEgPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV0gPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDEgLSBpXSA9IHE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmlzaXQgdGhpcyBwb2ludC4gKFZpc2l0aW5nIGNvaW5jaWRlbnQgcG9pbnRzIGlzbuKAmXQgbmVjZXNzYXJ5ISlcbiAgICBlbHNlIHtcbiAgICAgIHZhciBkeCA9IHggLSArdGhpcy5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSksXG4gICAgICAgICAgZHkgPSB5IC0gK3RoaXMuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICBpZiAoZDIgPCByYWRpdXMpIHtcbiAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQocmFkaXVzID0gZDIpO1xuICAgICAgICB4MCA9IHggLSBkLCB5MCA9IHkgLSBkO1xuICAgICAgICB4MyA9IHggKyBkLCB5MyA9IHkgKyBkO1xuICAgICAgICBkYXRhID0gbm9kZS5kYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHJldGFpbmVyLFxuICAgICAgcHJldmlvdXMsXG4gICAgICBuZXh0LFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0aGlzO1xuXG4gIC8vIEZpbmQgdGhlIGxlYWYgbm9kZSBmb3IgdGhlIHBvaW50LlxuICAvLyBXaGlsZSBkZXNjZW5kaW5nLCBhbHNvIHJldGFpbiB0aGUgZGVlcGVzdCBwYXJlbnQgd2l0aCBhIG5vbi1yZW1vdmVkIHNpYmxpbmcuXG4gIGlmIChub2RlLmxlbmd0aCkgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAoIShwYXJlbnQgPSBub2RlLCBub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBicmVhaztcbiAgICBpZiAocGFyZW50WyhpICsgMSkgJiAzXSB8fCBwYXJlbnRbKGkgKyAyKSAmIDNdIHx8IHBhcmVudFsoaSArIDMpICYgM10pIHJldGFpbmVyID0gcGFyZW50LCBqID0gaTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHBvaW50IHRvIHJlbW92ZS5cbiAgd2hpbGUgKG5vZGUuZGF0YSAhPT0gZCkgaWYgKCEocHJldmlvdXMgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0KSkgcmV0dXJuIHRoaXM7XG4gIGlmIChuZXh0ID0gbm9kZS5uZXh0KSBkZWxldGUgbm9kZS5uZXh0O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2luY2lkZW50IHBvaW50cywgcmVtb3ZlIGp1c3QgdGhlIHBvaW50LlxuICBpZiAocHJldmlvdXMpIHJldHVybiAobmV4dCA/IHByZXZpb3VzLm5leHQgPSBuZXh0IDogZGVsZXRlIHByZXZpb3VzLm5leHQpLCB0aGlzO1xuXG4gIC8vIElmIHRoaXMgaXMgdGhlIHJvb3QgcG9pbnQsIHJlbW92ZSBpdC5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiB0aGlzLl9yb290ID0gbmV4dCwgdGhpcztcblxuICAvLyBSZW1vdmUgdGhpcyBsZWFmLlxuICBuZXh0ID8gcGFyZW50W2ldID0gbmV4dCA6IGRlbGV0ZSBwYXJlbnRbaV07XG5cbiAgLy8gSWYgdGhlIHBhcmVudCBub3cgY29udGFpbnMgZXhhY3RseSBvbmUgbGVhZiwgY29sbGFwc2Ugc3VwZXJmbHVvdXMgcGFyZW50cy5cbiAgaWYgKChub2RlID0gcGFyZW50WzBdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzNdKVxuICAgICAgJiYgbm9kZSA9PT0gKHBhcmVudFszXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFswXSlcbiAgICAgICYmICFub2RlLmxlbmd0aCkge1xuICAgIGlmIChyZXRhaW5lcikgcmV0YWluZXJbal0gPSBub2RlO1xuICAgIGVsc2UgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbChkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHRoaXMucmVtb3ZlKGRhdGFbaV0pO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcm9vdDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIHEsIG5vZGUgPSB0aGlzLl9yb290LCBjaGlsZCwgeDAsIHkwLCB4MSwgeTE7XG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICBpZiAoIWNhbGxiYWNrKG5vZGUgPSBxLm5vZGUsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSkgJiYgbm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgbmV4dCA9IFtdLCBxO1xuICBpZiAodGhpcy5fcm9vdCkgcXVhZHMucHVzaChuZXcgUXVhZCh0aGlzLl9yb290LCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgdmFyIG5vZGUgPSBxLm5vZGU7XG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgY2hpbGQsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSwgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgIH1cbiAgICBuZXh0LnB1c2gocSk7XG4gIH1cbiAgd2hpbGUgKHEgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2socS5ub2RlLCBxLngwLCBxLnkwLCBxLngxLCBxLnkxKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3ggPSBfLCB0aGlzKSA6IHRoaXMuX3g7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFkoZCkge1xuICByZXR1cm4gZFsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl95ID0gXywgdGhpcykgOiB0aGlzLl95O1xufVxuIiwiaW1wb3J0IHRyZWVfYWRkLCB7YWRkQWxsIGFzIHRyZWVfYWRkQWxsfSBmcm9tIFwiLi9hZGQuanNcIjtcbmltcG9ydCB0cmVlX2NvdmVyIGZyb20gXCIuL2NvdmVyLmpzXCI7XG5pbXBvcnQgdHJlZV9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCB0cmVlX2V4dGVudCBmcm9tIFwiLi9leHRlbnQuanNcIjtcbmltcG9ydCB0cmVlX2ZpbmQgZnJvbSBcIi4vZmluZC5qc1wiO1xuaW1wb3J0IHRyZWVfcmVtb3ZlLCB7cmVtb3ZlQWxsIGFzIHRyZWVfcmVtb3ZlQWxsfSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCB0cmVlX3Jvb3QgZnJvbSBcIi4vcm9vdC5qc1wiO1xuaW1wb3J0IHRyZWVfc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgdHJlZV92aXNpdCBmcm9tIFwiLi92aXNpdC5qc1wiO1xuaW1wb3J0IHRyZWVfdmlzaXRBZnRlciBmcm9tIFwiLi92aXNpdEFmdGVyLmpzXCI7XG5pbXBvcnQgdHJlZV94LCB7ZGVmYXVsdFh9IGZyb20gXCIuL3guanNcIjtcbmltcG9ydCB0cmVlX3ksIHtkZWZhdWx0WX0gZnJvbSBcIi4veS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkdHJlZShub2RlcywgeCwgeSkge1xuICB2YXIgdHJlZSA9IG5ldyBRdWFkdHJlZSh4ID09IG51bGwgPyBkZWZhdWx0WCA6IHgsIHkgPT0gbnVsbCA/IGRlZmF1bHRZIDogeSwgTmFOLCBOYU4sIE5hTiwgTmFOKTtcbiAgcmV0dXJuIG5vZGVzID09IG51bGwgPyB0cmVlIDogdHJlZS5hZGRBbGwobm9kZXMpO1xufVxuXG5mdW5jdGlvbiBRdWFkdHJlZSh4LCB5LCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLl94ID0geDtcbiAgdGhpcy5feSA9IHk7XG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHRoaXMuX3Jvb3QgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxlYWZfY29weShsZWFmKSB7XG4gIHZhciBjb3B5ID0ge2RhdGE6IGxlYWYuZGF0YX0sIG5leHQgPSBjb3B5O1xuICB3aGlsZSAobGVhZiA9IGxlYWYubmV4dCkgbmV4dCA9IG5leHQubmV4dCA9IHtkYXRhOiBsZWFmLmRhdGF9O1xuICByZXR1cm4gY29weTtcbn1cblxudmFyIHRyZWVQcm90byA9IHF1YWR0cmVlLnByb3RvdHlwZSA9IFF1YWR0cmVlLnByb3RvdHlwZTtcblxudHJlZVByb3RvLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvcHkgPSBuZXcgUXVhZHRyZWUodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBub2RlcyxcbiAgICAgIGNoaWxkO1xuXG4gIGlmICghbm9kZSkgcmV0dXJuIGNvcHk7XG5cbiAgaWYgKCFub2RlLmxlbmd0aCkgcmV0dXJuIGNvcHkuX3Jvb3QgPSBsZWFmX2NvcHkobm9kZSksIGNvcHk7XG5cbiAgbm9kZXMgPSBbe3NvdXJjZTogbm9kZSwgdGFyZ2V0OiBjb3B5Ll9yb290ID0gbmV3IEFycmF5KDQpfV07XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKGNoaWxkID0gbm9kZS5zb3VyY2VbaV0pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxlbmd0aCkgbm9kZXMucHVzaCh7c291cmNlOiBjaGlsZCwgdGFyZ2V0OiBub2RlLnRhcmdldFtpXSA9IG5ldyBBcnJheSg0KX0pO1xuICAgICAgICBlbHNlIG5vZGUudGFyZ2V0W2ldID0gbGVhZl9jb3B5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn07XG5cbnRyZWVQcm90by5hZGQgPSB0cmVlX2FkZDtcbnRyZWVQcm90by5hZGRBbGwgPSB0cmVlX2FkZEFsbDtcbnRyZWVQcm90by5jb3ZlciA9IHRyZWVfY292ZXI7XG50cmVlUHJvdG8uZGF0YSA9IHRyZWVfZGF0YTtcbnRyZWVQcm90by5leHRlbnQgPSB0cmVlX2V4dGVudDtcbnRyZWVQcm90by5maW5kID0gdHJlZV9maW5kO1xudHJlZVByb3RvLnJlbW92ZSA9IHRyZWVfcmVtb3ZlO1xudHJlZVByb3RvLnJlbW92ZUFsbCA9IHRyZWVfcmVtb3ZlQWxsO1xudHJlZVByb3RvLnJvb3QgPSB0cmVlX3Jvb3Q7XG50cmVlUHJvdG8uc2l6ZSA9IHRyZWVfc2l6ZTtcbnRyZWVQcm90by52aXNpdCA9IHRyZWVfdmlzaXQ7XG50cmVlUHJvdG8udmlzaXRBZnRlciA9IHRyZWVfdmlzaXRBZnRlcjtcbnRyZWVQcm90by54ID0gdHJlZV94O1xudHJlZVByb3RvLnkgPSB0cmVlX3k7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///47148\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-random.a90ff7c6b164351b.bundle.js b/assets/demo/site/npm.d3-random.a90ff7c6b164351b.bundle.js
new file mode 100644
index 00000000..317cf0f3
--- /dev/null
+++ b/assets/demo/site/npm.d3-random.a90ff7c6b164351b.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[6050],{72731:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "WL": () => (/* reexport */ bates),\n "pP": () => (/* reexport */ exponential),\n "S_": () => (/* reexport */ irwinHall),\n "bw": () => (/* reexport */ logNormal),\n "nG": () => (/* reexport */ normal),\n "LG": () => (/* reexport */ uniform)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/defaultSource.js\n/* harmony default export */ function defaultSource() {\n return Math.random();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/uniform.js\n\n\n/* harmony default export */ const uniform = ((function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource));\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/normal.js\n\n\n/* harmony default export */ const normal = ((function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource));\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/logNormal.js\n\n\n\n/* harmony default export */ const logNormal = ((function sourceRandomLogNormal(source) {\n function randomLogNormal() {\n var randomNormal = normal.source(source).apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(defaultSource));\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/irwinHall.js\n\n\n/* harmony default export */ const irwinHall = ((function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n return function() {\n for (var sum = 0, i = 0; i < n; ++i) sum += source();\n return sum;\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(defaultSource));\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/bates.js\n\n\n\n/* harmony default export */ const bates = ((function sourceRandomBates(source) {\n function randomBates(n) {\n var randomIrwinHall = irwinHall.source(source)(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(defaultSource));\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/exponential.js\n\n\n/* harmony default export */ const exponential = ((function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log(1 - source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(defaultSource));\n\n;// CONCATENATED MODULE: ./node_modules/d3-random/src/index.js\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI3MzEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQWUseUJBQVc7QUFDMUI7QUFDQTs7O0FDRjRDOztBQUU1Qyw4Q0FBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSxhQUFhLENBQUMsRUFBQzs7O0FDaEIwQjs7QUFFNUMsNkNBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUM7OztBQzNCMEI7QUFDZDs7QUFFOUIsZ0RBQWU7QUFDZjtBQUNBLHVCQUF1QixhQUFhO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFDOzs7QUNkMEI7O0FBRTVDLGdEQUFlO0FBQ2Y7QUFDQTtBQUNBLCtCQUErQixPQUFPO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSxhQUFhLENBQUMsRUFBQzs7O0FDYjBCO0FBQ1I7O0FBRXBDLDRDQUFlO0FBQ2Y7QUFDQSwwQkFBMEIsZ0JBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFDOzs7QUNkMEI7O0FBRTVDLGtEQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLENBQUMsRUFBRSxhQUFhLENBQUMsRUFBQzs7O0FDWmlDO0FBQ0Y7QUFDTTtBQUNSO0FBQ1E7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2RlZmF1bHRTb3VyY2UuanM/NThmYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy91bmlmb3JtLmpzPzI4ZDUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbm9ybWFsLmpzPzdmMWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvbG9nTm9ybWFsLmpzP2IzYjciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaXJ3aW5IYWxsLmpzPzRiNjUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmF0ZXMuanM/MDA5OCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9leHBvbmVudGlhbC5qcz80YTcyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2luZGV4LmpzPzRkYWUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tVW5pZm9ybShzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tVW5pZm9ybShtaW4sIG1heCkge1xuICAgIG1pbiA9IG1pbiA9PSBudWxsID8gMCA6ICttaW47XG4gICAgbWF4ID0gbWF4ID09IG51bGwgPyAxIDogK21heDtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgbWF4ID0gbWluLCBtaW4gPSAwO1xuICAgIGVsc2UgbWF4IC09IG1pbjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc291cmNlKCkgKiBtYXggKyBtaW47XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbVVuaWZvcm0uc291cmNlID0gc291cmNlUmFuZG9tVW5pZm9ybTtcblxuICByZXR1cm4gcmFuZG9tVW5pZm9ybTtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tTm9ybWFsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Ob3JtYWwobXUsIHNpZ21hKSB7XG4gICAgdmFyIHgsIHI7XG4gICAgbXUgPSBtdSA9PSBudWxsID8gMCA6ICttdTtcbiAgICBzaWdtYSA9IHNpZ21hID09IG51bGwgPyAxIDogK3NpZ21hO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB5O1xuXG4gICAgICAvLyBJZiBhdmFpbGFibGUsIHVzZSB0aGUgc2Vjb25kIHByZXZpb3VzbHktZ2VuZXJhdGVkIHVuaWZvcm0gcmFuZG9tLlxuICAgICAgaWYgKHggIT0gbnVsbCkgeSA9IHgsIHggPSBudWxsO1xuXG4gICAgICAvLyBPdGhlcndpc2UsIGdlbmVyYXRlIGEgbmV3IHggYW5kIHkuXG4gICAgICBlbHNlIGRvIHtcbiAgICAgICAgeCA9IHNvdXJjZSgpICogMiAtIDE7XG4gICAgICAgIHkgPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICByID0geCAqIHggKyB5ICogeTtcbiAgICAgIH0gd2hpbGUgKCFyIHx8IHIgPiAxKTtcblxuICAgICAgcmV0dXJuIG11ICsgc2lnbWEgKiB5ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocikgLyByKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tTm9ybWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbU5vcm1hbDtcblxuICByZXR1cm4gcmFuZG9tTm9ybWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5pbXBvcnQgbm9ybWFsIGZyb20gXCIuL25vcm1hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tTG9nTm9ybWFsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Mb2dOb3JtYWwoKSB7XG4gICAgdmFyIHJhbmRvbU5vcm1hbCA9IG5vcm1hbC5zb3VyY2Uoc291cmNlKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBNYXRoLmV4cChyYW5kb21Ob3JtYWwoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUxvZ05vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Mb2dOb3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbUxvZ05vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tSXJ3aW5IYWxsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21JcndpbkhhbGwobikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHN1bSA9IDAsIGkgPSAwOyBpIDwgbjsgKytpKSBzdW0gKz0gc291cmNlKCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH07XG4gIH1cblxuICByYW5kb21JcndpbkhhbGwuc291cmNlID0gc291cmNlUmFuZG9tSXJ3aW5IYWxsO1xuXG4gIHJldHVybiByYW5kb21JcndpbkhhbGw7XG59KShkZWZhdWx0U291cmNlKTtcbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcbmltcG9ydCBpcndpbkhhbGwgZnJvbSBcIi4vaXJ3aW5IYWxsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21CYXRlcyhzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tQmF0ZXMobikge1xuICAgIHZhciByYW5kb21JcndpbkhhbGwgPSBpcndpbkhhbGwuc291cmNlKHNvdXJjZSkobik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJhbmRvbUlyd2luSGFsbCgpIC8gbjtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tQmF0ZXMuc291cmNlID0gc291cmNlUmFuZG9tQmF0ZXM7XG5cbiAgcmV0dXJuIHJhbmRvbUJhdGVzO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21FeHBvbmVudGlhbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tRXhwb25lbnRpYWwobGFtYmRhKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIC1NYXRoLmxvZygxIC0gc291cmNlKCkpIC8gbGFtYmRhO1xuICAgIH07XG4gIH1cblxuICByYW5kb21FeHBvbmVudGlhbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21FeHBvbmVudGlhbDtcblxuICByZXR1cm4gcmFuZG9tRXhwb25lbnRpYWw7XG59KShkZWZhdWx0U291cmNlKTtcbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21Vbmlmb3JtfSBmcm9tIFwiLi91bmlmb3JtXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tTm9ybWFsfSBmcm9tIFwiLi9ub3JtYWxcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21Mb2dOb3JtYWx9IGZyb20gXCIuL2xvZ05vcm1hbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUJhdGVzfSBmcm9tIFwiLi9iYXRlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUlyd2luSGFsbH0gZnJvbSBcIi4vaXJ3aW5IYWxsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tRXhwb25lbnRpYWx9IGZyb20gXCIuL2V4cG9uZW50aWFsXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72731\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-scale-chromatic.2c8448939abd87e6.bundle.js b/assets/demo/site/npm.d3-scale-chromatic.2c8448939abd87e6.bundle.js
new file mode 100644
index 00000000..c6d0f065
--- /dev/null
+++ b/assets/demo/site/npm.d3-scale-chromatic.2c8448939abd87e6.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[7471],{17206:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "sY": () => (/* reexport */ Blues),\n "yl": () => (/* reexport */ BrBG),\n "pl": () => (/* reexport */ BuGn),\n "hb": () => (/* reexport */ BuPu),\n "r1": () => (/* reexport */ cividis),\n "vc": () => (/* reexport */ cool),\n "yB": () => (/* reexport */ sequential_multi_cubehelix),\n "Xw": () => (/* reexport */ GnBu),\n "M": () => (/* reexport */ Greens),\n "A_": () => (/* reexport */ Greys),\n "sN": () => (/* reexport */ inferno),\n "Gi": () => (/* reexport */ magma),\n "RZ": () => (/* reexport */ OrRd),\n "n$": () => (/* reexport */ Oranges),\n "nn": () => (/* reexport */ PRGn),\n "qw": () => (/* reexport */ PiYG),\n "iA": () => (/* reexport */ plasma),\n "GM": () => (/* reexport */ PuBu),\n "S7": () => (/* reexport */ PuBuGn),\n "xN": () => (/* reexport */ PuOr),\n "cU": () => (/* reexport */ PuRd),\n "XW": () => (/* reexport */ Purples),\n "IC": () => (/* reexport */ rainbow),\n "De": () => (/* reexport */ RdBu),\n "PL": () => (/* reexport */ RdGy),\n "A4": () => (/* reexport */ RdPu),\n "zJ": () => (/* reexport */ RdYlBu),\n "BT": () => (/* reexport */ RdYlGn),\n "bc": () => (/* reexport */ Reds),\n "OO": () => (/* reexport */ sinebow),\n "T0": () => (/* reexport */ Spectral),\n "_B": () => (/* reexport */ turbo),\n "V": () => (/* reexport */ viridis),\n "AO": () => (/* reexport */ warm),\n "aE": () => (/* reexport */ YlGn),\n "Ht": () => (/* reexport */ YlGnBu),\n "Y_": () => (/* reexport */ YlOrBr),\n "cj": () => (/* reexport */ YlOrRd),\n "Mr": () => (/* reexport */ Accent),\n "KH": () => (/* reexport */ Blues_scheme),\n "QA": () => (/* reexport */ scheme),\n "S1": () => (/* reexport */ BuGn_scheme),\n "DQ": () => (/* reexport */ BuPu_scheme),\n "Cn": () => (/* reexport */ category10),\n "Xg": () => (/* reexport */ Dark2),\n "AT": () => (/* reexport */ GnBu_scheme),\n "Yo": () => (/* reexport */ Greens_scheme),\n "bU": () => (/* reexport */ Greys_scheme),\n "MX": () => (/* reexport */ OrRd_scheme),\n "P0": () => (/* reexport */ Oranges_scheme),\n "Uh": () => (/* reexport */ PRGn_scheme),\n "xH": () => (/* reexport */ Paired),\n "rp": () => (/* reexport */ Pastel1),\n "i4": () => (/* reexport */ Pastel2),\n "Lx": () => (/* reexport */ PiYG_scheme),\n "UV": () => (/* reexport */ PuBu_scheme),\n "g1": () => (/* reexport */ PuBuGn_scheme),\n "$K": () => (/* reexport */ PuOr_scheme),\n "F6": () => (/* reexport */ PuRd_scheme),\n "DR": () => (/* reexport */ Purples_scheme),\n "HW": () => (/* reexport */ RdBu_scheme),\n "u_": () => (/* reexport */ RdGy_scheme),\n "zs": () => (/* reexport */ RdPu_scheme),\n "XX": () => (/* reexport */ RdYlBu_scheme),\n "Kr": () => (/* reexport */ RdYlGn_scheme),\n "zU": () => (/* reexport */ Reds_scheme),\n "yK": () => (/* reexport */ Set1),\n "W1": () => (/* reexport */ Set2),\n "UC": () => (/* reexport */ Set3),\n "lq": () => (/* reexport */ Spectral_scheme),\n "K2": () => (/* reexport */ Tableau10),\n "GE": () => (/* reexport */ YlGn_scheme),\n "Yi": () => (/* reexport */ YlGnBu_scheme),\n "Gb": () => (/* reexport */ YlOrBr_scheme),\n "M7": () => (/* reexport */ YlOrRd_scheme)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/colors.js\n/* harmony default export */ function colors(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/category10.js\n\n\n/* harmony default export */ const category10 = (colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Accent.js\n\n\n/* harmony default export */ const Accent = (colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Dark2.js\n\n\n/* harmony default export */ const Dark2 = (colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Paired.js\n\n\n/* harmony default export */ const Paired = (colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js\n\n\n/* harmony default export */ const Pastel1 = (colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js\n\n\n/* harmony default export */ const Pastel2 = (colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Set1.js\n\n\n/* harmony default export */ const Set1 = (colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Set2.js\n\n\n/* harmony default export */ const Set2 = (colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Set3.js\n\n\n/* harmony default export */ const Set3 = (colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js\n\n\n/* harmony default export */ const Tableau10 = (colors("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"));\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/rgb.js\nvar rgb = __webpack_require__(93414);\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/ramp.js\n\n\n/* harmony default export */ function ramp(scheme) {\n return (0,rgb/* rgbBasis */.hD)(scheme[scheme.length - 1]);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/BrBG.js\n\n\n\nvar scheme = new Array(3).concat(\n "d8b365f5f5f55ab4ac",\n "a6611adfc27d80cdc1018571",\n "a6611adfc27df5f5f580cdc1018571",\n "8c510ad8b365f6e8c3c7eae55ab4ac01665e",\n "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e",\n "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e",\n "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e",\n "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30",\n "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30"\n).map(colors);\n\n/* harmony default export */ const BrBG = (ramp(scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/PRGn.js\n\n\n\nvar PRGn_scheme = new Array(3).concat(\n "af8dc3f7f7f77fbf7b",\n "7b3294c2a5cfa6dba0008837",\n "7b3294c2a5cff7f7f7a6dba0008837",\n "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837",\n "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837",\n "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837",\n "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837",\n "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b",\n "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b"\n).map(colors);\n\n/* harmony default export */ const PRGn = (ramp(PRGn_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/PiYG.js\n\n\n\nvar PiYG_scheme = new Array(3).concat(\n "e9a3c9f7f7f7a1d76a",\n "d01c8bf1b6dab8e1864dac26",\n "d01c8bf1b6daf7f7f7b8e1864dac26",\n "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221",\n "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221",\n "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221",\n "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221",\n "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419",\n "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419"\n).map(colors);\n\n/* harmony default export */ const PiYG = (ramp(PiYG_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/PuOr.js\n\n\n\nvar PuOr_scheme = new Array(3).concat(\n "998ec3f7f7f7f1a340",\n "5e3c99b2abd2fdb863e66101",\n "5e3c99b2abd2f7f7f7fdb863e66101",\n "542788998ec3d8daebfee0b6f1a340b35806",\n "542788998ec3d8daebf7f7f7fee0b6f1a340b35806",\n "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806",\n "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806",\n "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08",\n "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08"\n).map(colors);\n\n/* harmony default export */ const PuOr = (ramp(PuOr_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/RdBu.js\n\n\n\nvar RdBu_scheme = new Array(3).concat(\n "ef8a62f7f7f767a9cf",\n "ca0020f4a58292c5de0571b0",\n "ca0020f4a582f7f7f792c5de0571b0",\n "b2182bef8a62fddbc7d1e5f067a9cf2166ac",\n "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac",\n "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac",\n "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac",\n "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061",\n "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061"\n).map(colors);\n\n/* harmony default export */ const RdBu = (ramp(RdBu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/RdGy.js\n\n\n\nvar RdGy_scheme = new Array(3).concat(\n "ef8a62ffffff999999",\n "ca0020f4a582bababa404040",\n "ca0020f4a582ffffffbababa404040",\n "b2182bef8a62fddbc7e0e0e09999994d4d4d",\n "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d",\n "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d",\n "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d",\n "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a",\n "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a"\n).map(colors);\n\n/* harmony default export */ const RdGy = (ramp(RdGy_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js\n\n\n\nvar RdYlBu_scheme = new Array(3).concat(\n "fc8d59ffffbf91bfdb",\n "d7191cfdae61abd9e92c7bb6",\n "d7191cfdae61ffffbfabd9e92c7bb6",\n "d73027fc8d59fee090e0f3f891bfdb4575b4",\n "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4",\n "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4",\n "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4",\n "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695",\n "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695"\n).map(colors);\n\n/* harmony default export */ const RdYlBu = (ramp(RdYlBu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js\n\n\n\nvar RdYlGn_scheme = new Array(3).concat(\n "fc8d59ffffbf91cf60",\n "d7191cfdae61a6d96a1a9641",\n "d7191cfdae61ffffbfa6d96a1a9641",\n "d73027fc8d59fee08bd9ef8b91cf601a9850",\n "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850",\n "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850",\n "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850",\n "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837",\n "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837"\n).map(colors);\n\n/* harmony default export */ const RdYlGn = (ramp(RdYlGn_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/diverging/Spectral.js\n\n\n\nvar Spectral_scheme = new Array(3).concat(\n "fc8d59ffffbf99d594",\n "d7191cfdae61abdda42b83ba",\n "d7191cfdae61ffffbfabdda42b83ba",\n "d53e4ffc8d59fee08be6f59899d5943288bd",\n "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd",\n "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd",\n "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd",\n "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2",\n "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2"\n).map(colors);\n\n/* harmony default export */ const Spectral = (ramp(Spectral_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js\n\n\n\nvar BuGn_scheme = new Array(3).concat(\n "e5f5f999d8c92ca25f",\n "edf8fbb2e2e266c2a4238b45",\n "edf8fbb2e2e266c2a42ca25f006d2c",\n "edf8fbccece699d8c966c2a42ca25f006d2c",\n "edf8fbccece699d8c966c2a441ae76238b45005824",\n "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824",\n "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b"\n).map(colors);\n\n/* harmony default export */ const BuGn = (ramp(BuGn_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js\n\n\n\nvar BuPu_scheme = new Array(3).concat(\n "e0ecf49ebcda8856a7",\n "edf8fbb3cde38c96c688419d",\n "edf8fbb3cde38c96c68856a7810f7c",\n "edf8fbbfd3e69ebcda8c96c68856a7810f7c",\n "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b",\n "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b",\n "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b"\n).map(colors);\n\n/* harmony default export */ const BuPu = (ramp(BuPu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js\n\n\n\nvar GnBu_scheme = new Array(3).concat(\n "e0f3dba8ddb543a2ca",\n "f0f9e8bae4bc7bccc42b8cbe",\n "f0f9e8bae4bc7bccc443a2ca0868ac",\n "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac",\n "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e",\n "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e",\n "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081"\n).map(colors);\n\n/* harmony default export */ const GnBu = (ramp(GnBu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js\n\n\n\nvar OrRd_scheme = new Array(3).concat(\n "fee8c8fdbb84e34a33",\n "fef0d9fdcc8afc8d59d7301f",\n "fef0d9fdcc8afc8d59e34a33b30000",\n "fef0d9fdd49efdbb84fc8d59e34a33b30000",\n "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000",\n "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000",\n "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000"\n).map(colors);\n\n/* harmony default export */ const OrRd = (ramp(OrRd_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js\n\n\n\nvar PuBuGn_scheme = new Array(3).concat(\n "ece2f0a6bddb1c9099",\n "f6eff7bdc9e167a9cf02818a",\n "f6eff7bdc9e167a9cf1c9099016c59",\n "f6eff7d0d1e6a6bddb67a9cf1c9099016c59",\n "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450",\n "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450",\n "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636"\n).map(colors);\n\n/* harmony default export */ const PuBuGn = (ramp(PuBuGn_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js\n\n\n\nvar PuBu_scheme = new Array(3).concat(\n "ece7f2a6bddb2b8cbe",\n "f1eef6bdc9e174a9cf0570b0",\n "f1eef6bdc9e174a9cf2b8cbe045a8d",\n "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d",\n "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b",\n "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b",\n "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858"\n).map(colors);\n\n/* harmony default export */ const PuBu = (ramp(PuBu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js\n\n\n\nvar PuRd_scheme = new Array(3).concat(\n "e7e1efc994c7dd1c77",\n "f1eef6d7b5d8df65b0ce1256",\n "f1eef6d7b5d8df65b0dd1c77980043",\n "f1eef6d4b9dac994c7df65b0dd1c77980043",\n "f1eef6d4b9dac994c7df65b0e7298ace125691003f",\n "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f",\n "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f"\n).map(colors);\n\n/* harmony default export */ const PuRd = (ramp(PuRd_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js\n\n\n\nvar RdPu_scheme = new Array(3).concat(\n "fde0ddfa9fb5c51b8a",\n "feebe2fbb4b9f768a1ae017e",\n "feebe2fbb4b9f768a1c51b8a7a0177",\n "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177",\n "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177",\n "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177",\n "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a"\n).map(colors);\n\n/* harmony default export */ const RdPu = (ramp(RdPu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js\n\n\n\nvar YlGnBu_scheme = new Array(3).concat(\n "edf8b17fcdbb2c7fb8",\n "ffffcca1dab441b6c4225ea8",\n "ffffcca1dab441b6c42c7fb8253494",\n "ffffccc7e9b47fcdbb41b6c42c7fb8253494",\n "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84",\n "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84",\n "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58"\n).map(colors);\n\n/* harmony default export */ const YlGnBu = (ramp(YlGnBu_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js\n\n\n\nvar YlGn_scheme = new Array(3).concat(\n "f7fcb9addd8e31a354",\n "ffffccc2e69978c679238443",\n "ffffccc2e69978c67931a354006837",\n "ffffccd9f0a3addd8e78c67931a354006837",\n "ffffccd9f0a3addd8e78c67941ab5d238443005a32",\n "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32",\n "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529"\n).map(colors);\n\n/* harmony default export */ const YlGn = (ramp(YlGn_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js\n\n\n\nvar YlOrBr_scheme = new Array(3).concat(\n "fff7bcfec44fd95f0e",\n "ffffd4fed98efe9929cc4c02",\n "ffffd4fed98efe9929d95f0e993404",\n "ffffd4fee391fec44ffe9929d95f0e993404",\n "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04",\n "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04",\n "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506"\n).map(colors);\n\n/* harmony default export */ const YlOrBr = (ramp(YlOrBr_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js\n\n\n\nvar YlOrRd_scheme = new Array(3).concat(\n "ffeda0feb24cf03b20",\n "ffffb2fecc5cfd8d3ce31a1c",\n "ffffb2fecc5cfd8d3cf03b20bd0026",\n "ffffb2fed976feb24cfd8d3cf03b20bd0026",\n "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026",\n "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026",\n "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026"\n).map(colors);\n\n/* harmony default export */ const YlOrRd = (ramp(YlOrRd_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js\n\n\n\nvar Blues_scheme = new Array(3).concat(\n "deebf79ecae13182bd",\n "eff3ffbdd7e76baed62171b5",\n "eff3ffbdd7e76baed63182bd08519c",\n "eff3ffc6dbef9ecae16baed63182bd08519c",\n "eff3ffc6dbef9ecae16baed64292c62171b5084594",\n "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594",\n "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b"\n).map(colors);\n\n/* harmony default export */ const Blues = (ramp(Blues_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js\n\n\n\nvar Greens_scheme = new Array(3).concat(\n "e5f5e0a1d99b31a354",\n "edf8e9bae4b374c476238b45",\n "edf8e9bae4b374c47631a354006d2c",\n "edf8e9c7e9c0a1d99b74c47631a354006d2c",\n "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32",\n "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32",\n "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b"\n).map(colors);\n\n/* harmony default export */ const Greens = (ramp(Greens_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js\n\n\n\nvar Greys_scheme = new Array(3).concat(\n "f0f0f0bdbdbd636363",\n "f7f7f7cccccc969696525252",\n "f7f7f7cccccc969696636363252525",\n "f7f7f7d9d9d9bdbdbd969696636363252525",\n "f7f7f7d9d9d9bdbdbd969696737373525252252525",\n "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525",\n "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000"\n).map(colors);\n\n/* harmony default export */ const Greys = (ramp(Greys_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js\n\n\n\nvar Purples_scheme = new Array(3).concat(\n "efedf5bcbddc756bb1",\n "f2f0f7cbc9e29e9ac86a51a3",\n "f2f0f7cbc9e29e9ac8756bb154278f",\n "f2f0f7dadaebbcbddc9e9ac8756bb154278f",\n "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486",\n "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486",\n "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d"\n).map(colors);\n\n/* harmony default export */ const Purples = (ramp(Purples_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js\n\n\n\nvar Reds_scheme = new Array(3).concat(\n "fee0d2fc9272de2d26",\n "fee5d9fcae91fb6a4acb181d",\n "fee5d9fcae91fb6a4ade2d26a50f15",\n "fee5d9fcbba1fc9272fb6a4ade2d26a50f15",\n "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d",\n "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d",\n "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d"\n).map(colors);\n\n/* harmony default export */ const Reds = (ramp(Reds_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js\n\n\n\nvar Oranges_scheme = new Array(3).concat(\n "fee6cefdae6be6550d",\n "feeddefdbe85fd8d3cd94701",\n "feeddefdbe85fd8d3ce6550da63603",\n "feeddefdd0a2fdae6bfd8d3ce6550da63603",\n "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04",\n "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04",\n "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704"\n).map(colors);\n\n/* harmony default export */ const Oranges = (ramp(Oranges_scheme));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js\n/* harmony default export */ function cividis(t) {\n t = Math.max(0, Math.min(1, t));\n return "rgb("\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + ", "\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + ", "\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + ")";\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-color/src/cubehelix.js\nvar cubehelix = __webpack_require__(18218);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/cubehelix.js\nvar src_cubehelix = __webpack_require__(68499);\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js\n\n\n\n/* harmony default export */ const sequential_multi_cubehelix = ((0,src_cubehelix/* cubehelixLong */.B)((0,cubehelix/* default */.Z)(300, 0.5, 0.0), (0,cubehelix/* default */.Z)(-240, 0.5, 1.0)));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js\n\n\n\nvar warm = (0,src_cubehelix/* cubehelixLong */.B)((0,cubehelix/* default */.Z)(-100, 0.75, 0.35), (0,cubehelix/* default */.Z)(80, 1.50, 0.8));\n\nvar cool = (0,src_cubehelix/* cubehelixLong */.B)((0,cubehelix/* default */.Z)(260, 0.75, 0.35), (0,cubehelix/* default */.Z)(80, 1.50, 0.8));\n\nvar c = (0,cubehelix/* default */.Z)();\n\n/* harmony default export */ function rainbow(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + "";\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-color/src/color.js\nvar color = __webpack_require__(16372);\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js\n\n\nvar sinebow_c = (0,color/* rgb */.B8)(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\n/* harmony default export */ function sinebow(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n sinebow_c.r = 255 * (x = Math.sin(t)) * x;\n sinebow_c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n sinebow_c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return sinebow_c + "";\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js\n/* harmony default export */ function turbo(t) {\n t = Math.max(0, Math.min(1, t));\n return "rgb("\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + ", "\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + ", "\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + ")";\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js\n\n\nfunction viridis_ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\n/* harmony default export */ const viridis = (viridis_ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")));\n\nvar magma = viridis_ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));\n\nvar inferno = viridis_ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));\n\nvar plasma = viridis_ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGFBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNkNBQWUsSUFBSSxDQUFDLGFBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGFBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNkNBQWUsSUFBSSxDQUFDLGFBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGFBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNkNBQWUsSUFBSSxDQUFDLGFBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGFBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNkNBQWUsSUFBSSxDQUFDLGFBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFlBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNENBQWUsSUFBSSxDQUFDLFlBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGFBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNkNBQWUsSUFBSSxDQUFDLGFBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFlBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosNENBQWUsSUFBSSxDQUFDLFlBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGNBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosOENBQWUsSUFBSSxDQUFDLGNBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLFdBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosMkNBQWUsSUFBSSxDQUFDLFdBQU0sQ0FBQyxFQUFDOzs7QUNiTTtBQUNKOztBQUV2QixJQUFJLGNBQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07O0FBRVosOENBQWUsSUFBSSxDQUFDLGNBQU0sQ0FBQyxFQUFDOzs7QUNiNUIsNkJBQWUsaUJBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQbUM7QUFDcUI7O0FBRXhELGlFQUFlLHNDQUF3QixDQUFDLDRCQUFTLGlCQUFpQiw0QkFBUyxpQkFBaUIsRUFBQzs7O0FDSDFEO0FBQ3FCOztBQUVqRCxXQUFXLHNDQUF3QixDQUFDLDRCQUFTLG9CQUFvQiw0QkFBUzs7QUFFMUUsV0FBVyxzQ0FBd0IsQ0FBQyw0QkFBUyxtQkFBbUIsNEJBQVM7O0FBRWhGLFFBQVEsNEJBQVM7O0FBRWpCLDZCQUFlLGlCQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2hCNkI7O0FBRTdCLElBQUksU0FBQyxHQUFHLHFCQUFHO0FBQ1g7QUFDQTs7QUFFQSw2QkFBZSxpQkFBUztBQUN4QjtBQUNBO0FBQ0EsRUFBRSxTQUFDO0FBQ0gsRUFBRSxTQUFDO0FBQ0gsRUFBRSxTQUFDO0FBQ0gsU0FBUyxTQUFDO0FBQ1Y7OztBQ2JBLDZCQUFlLGVBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1BrQzs7QUFFbEMsU0FBUyxZQUFJO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBZSxZQUFJLENBQUMsTUFBTSxxZ0RBQXFnRCxFQUFDOztBQUV6aEQsWUFBWSxZQUFJLENBQUMsTUFBTTs7QUFFdkIsY0FBYyxZQUFJLENBQUMsTUFBTTs7QUFFekIsYUFBYSxZQUFJLENBQUMsTUFBTTs7O0FDZnlDO0FBQ1I7QUFDRjtBQUNFO0FBQ0U7QUFDQTtBQUNOO0FBQ0E7QUFDQTtBQUNVO0FBQ2U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ007QUFDQTtBQUNNO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDTTtBQUNOO0FBQ0E7QUFDQTtBQUNNO0FBQ047QUFDTTtBQUNBO0FBQ0Y7QUFDRztBQUNIO0FBQ007QUFDVDtBQUNTO0FBQzFCO0FBQ1c7QUFDdUM7QUFDbEQ7QUFDSjtBQUMyRiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcz9jN2I1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanM/ZTcxOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9BY2NlbnQuanM/M2I3OSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9EYXJrMi5qcz8zZWU2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1BhaXJlZC5qcz9lNDc5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDEuanM/NjAyNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYXN0ZWwyLmpzP2QzNGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0MS5qcz9hNDUzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDIuanM/OGI0ZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQzLmpzPzJlMjUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvVGFibGVhdTEwLmpzPzkxZjUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcz81NTgwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9CckJHLmpzP2Q5YzMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1BSR24uanM/ZDA1MyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUGlZRy5qcz9iM2Q5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QdU9yLmpzPzg1NjYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkQnUuanM/NDRlYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRHeS5qcz9lYWVhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsQnUuanM/Y2I4YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRZbEduLmpzPzFmOWQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1NwZWN0cmFsLmpzPzk2NjQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzP2I1N2UiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdVB1LmpzPzJhNDkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9HbkJ1LmpzP2YzM2EiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzPzkwYmEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanM/ODEwNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnUuanM/MzFiNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1UmQuanM/MjFjZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1JkUHUuanM/M2U3ZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsR25CdS5qcz9lNTA5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbi5qcz8yZjgzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxPckJyLmpzP2E3ZWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yUmQuanM/NTk3YyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9CbHVlcy5qcz82ZTExIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0dyZWVucy5qcz8xMTlhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0dyZXlzLmpzPzQzZDMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUHVycGxlcy5qcz9mMGMzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL1JlZHMuanM/Yjg1OSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9PcmFuZ2VzLmpzPzQyOGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9jaXZpZGlzLmpzPzM2NDUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9jdWJlaGVsaXguanM/NTM0YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanM/M2YxZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3NpbmVib3cuanM/ZTcwOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3R1cmJvLmpzP2VkOWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzP2UyZGUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvaW5kZXguanM/Y2M5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgdmFyIG4gPSBzcGVjaWZpZXIubGVuZ3RoIC8gNiB8IDAsIGNvbG9ycyA9IG5ldyBBcnJheShuKSwgaSA9IDA7XG4gIHdoaWxlIChpIDwgbikgY29sb3JzW2ldID0gXCIjXCIgKyBzcGVjaWZpZXIuc2xpY2UoaSAqIDYsICsraSAqIDYpO1xuICByZXR1cm4gY29sb3JzO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOFwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjJcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OVwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjNcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYlwiKTtcbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNjaGVtZSkge1xuICByZXR1cm4gaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdKTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImQ4YjM2NWY1ZjVmNTVhYjRhY1wiLFxuICBcImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MVwiLFxuICBcImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJhZjhkYzNmN2Y3Zjc3ZmJmN2JcIixcbiAgXCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzdcIixcbiAgXCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTlhM2M5ZjdmN2Y3YTFkNzZhXCIsXG4gIFwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2XCIsXG4gIFwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2XCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcIjk5OGVjM2Y3ZjdmN2YxYTM0MFwiLFxuICBcIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMVwiLFxuICBcIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMVwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZjhhNjJmN2Y3Zjc2N2E5Y2ZcIixcbiAgXCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjBcIixcbiAgXCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjBcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZmZmZmZmOTk5OTk5XCIsXG4gIFwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxYmZkYlwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNlwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNlwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5MWNmNjBcIixcbiAgXCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVmOTk5ZDhjOTJjYTI1ZlwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NVwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGVjZjQ5ZWJjZGE4ODU2YTdcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWRcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTBmM2RiYThkZGI1NDNhMmNhXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZThjOGZkYmI4NGUzNGEzM1wiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZlwiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2UyZjBhNmJkZGIxYzkwOTlcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGFcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWNlN2YyYTZiZGRiMmI4Y2JlXCIsXG4gIFwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwXCIsXG4gIFwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXG4gIFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXG4gIFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiXCIsXG4gIFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiXCIsXG4gIFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU3ZTFlZmM5OTRjN2RkMWM3N1wiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NlwiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZGUwZGRmYTlmYjVjNTFiOGFcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2VcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWRmOGIxN2ZjZGJiMmM3ZmI4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImY3ZmNiOWFkZGQ4ZTMxYTM1NFwiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0M1wiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmY3YmNmZWM0NGZkOTVmMGVcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDJcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmZlZGEwZmViMjRjZjAzYjIwXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImRlZWJmNzllY2FlMTMxODJiZFwiLFxuICBcImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNVwiLFxuICBcImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5Y1wiLFxuICBcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5Y1wiLFxuICBcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFxuICBcImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFxuICBcImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlNWY1ZTBhMWQ5OWIzMWEzNTRcIixcbiAgXCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDVcIixcbiAgXCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmNcIixcbiAgXCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmNcIixcbiAgXCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcbiAgXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcbiAgXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZjBmMGYwYmRiZGJkNjM2MzYzXCIsXG4gIFwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyXCIsXG4gIFwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1XCIsXG4gIFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1XCIsXG4gIFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1XCIsXG4gIFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1XCIsXG4gIFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmZWRmNWJjYmRkYzc1NmJiMVwiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODZhNTFhM1wiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWUwZDJmYzkyNzJkZTJkMjZcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWRcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgcmV0dXJuIFwicmdiKFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgtNC41NCAtIHQgKiAoMzUuMzQgLSB0ICogKDIzODEuNzMgLSB0ICogKDY0MDIuNyAtIHQgKiAoNzAyNC43MiAtIHQgKiAyNzEwLjU3KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMzIuNDkgKyB0ICogKDE3MC43MyArIHQgKiAoNTIuODIgLSB0ICogKDEzMS40NiAtIHQgKiAoMTc2LjU4IC0gdCAqIDY3LjM3KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoODEuMjQgKyB0ICogKDQ0Mi4zNiAtIHQgKiAoMjQ4Mi40MyAtIHQgKiAoNjE2Ny4yNCAtIHQgKiAoNjYxNC45NCAtIHQgKiAyNDc1LjY3KSkpKSkpKVxuICAgICAgKyBcIilcIjtcbn1cbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgzMDAsIDAuNSwgMC4wKSwgY3ViZWhlbGl4KC0yNDAsIDAuNSwgMS4wKSk7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCB2YXIgd2FybSA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoLTEwMCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbmV4cG9ydCB2YXIgY29vbCA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMjYwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxudmFyIGMgPSBjdWJlaGVsaXgoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICBpZiAodCA8IDAgfHwgdCA+IDEpIHQgLT0gTWF0aC5mbG9vcih0KTtcbiAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gIGMuaCA9IDM2MCAqIHQgLSAxMDA7XG4gIGMucyA9IDEuNSAtIDEuNSAqIHRzO1xuICBjLmwgPSAwLjggLSAwLjkgKiB0cztcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IHtyZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuXG52YXIgYyA9IHJnYigpLFxuICAgIHBpXzFfMyA9IE1hdGguUEkgLyAzLFxuICAgIHBpXzJfMyA9IE1hdGguUEkgKiAyIC8gMztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICB2YXIgeDtcbiAgdCA9ICgwLjUgLSB0KSAqIE1hdGguUEk7XG4gIGMuciA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCkpICogeDtcbiAgYy5nID0gMjU1ICogKHggPSBNYXRoLnNpbih0ICsgcGlfMV8zKSkgKiB4O1xuICBjLmIgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8yXzMpKSAqIHg7XG4gIHJldHVybiBjICsgXCJcIjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgcmV0dXJuIFwicmdiKFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgzNC42MSArIHQgKiAoMTE3Mi4zMyAtIHQgKiAoMTA3OTMuNTYgLSB0ICogKDMzMzAwLjEyIC0gdCAqICgzODM5NC40OSAtIHQgKiAxNDgyNS4wNSkpKSkpKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDIzLjMxICsgdCAqICg1NTcuMzMgKyB0ICogKDEyMjUuMzMgLSB0ICogKDM1NzQuOTYgLSB0ICogKDEwNzMuNzcgKyB0ICogNzA3LjU2KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMjcuMiArIHQgKiAoMzIxMS4xIC0gdCAqICgxNTMyNy45NyAtIHQgKiAoMjc4MTQgLSB0ICogKDIyNTY5LjE4IC0gdCAqIDY4MzguNjYpKSkpKSkpXG4gICAgICArIFwiKVwiO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmZ1bmN0aW9uIHJhbXAocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG5leHBvcnQgdmFyIG1hZ21hID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmZcIikpO1xuXG5leHBvcnQgdmFyIGluZmVybm8gPSByYW1wKGNvbG9ycyhcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNFwiKSk7XG5cbmV4cG9ydCB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZUNhdGVnb3J5MTB9IGZyb20gXCIuL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVBY2NlbnR9IGZyb20gXCIuL2NhdGVnb3JpY2FsL0FjY2VudC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZURhcmsyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9EYXJrMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVBhaXJlZH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFpcmVkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFzdGVsMX0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFzdGVsMS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVBhc3RlbDJ9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1Bhc3RlbDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQxfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQxLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0Mn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0Mi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDN9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVUYWJsZWF1MTB9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1RhYmxlYXUxMC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnJCRywgc2NoZW1lIGFzIHNjaGVtZUJyQkd9IGZyb20gXCIuL2RpdmVyZ2luZy9CckJHLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQUkduLCBzY2hlbWUgYXMgc2NoZW1lUFJHbn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1BSR24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVBpWUcsIHNjaGVtZSBhcyBzY2hlbWVQaVlHfSBmcm9tIFwiLi9kaXZlcmdpbmcvUGlZRy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVPciwgc2NoZW1lIGFzIHNjaGVtZVB1T3J9IGZyb20gXCIuL2RpdmVyZ2luZy9QdU9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZEJ1LCBzY2hlbWUgYXMgc2NoZW1lUmRCdX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkR3ksIHNjaGVtZSBhcyBzY2hlbWVSZEd5fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRHeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRZbEJ1LCBzY2hlbWUgYXMgc2NoZW1lUmRZbEJ1fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRZbEJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFlsR24sIHNjaGVtZSBhcyBzY2hlbWVSZFlsR259IGZyb20gXCIuL2RpdmVyZ2luZy9SZFlsR24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVNwZWN0cmFsLCBzY2hlbWUgYXMgc2NoZW1lU3BlY3RyYWx9IGZyb20gXCIuL2RpdmVyZ2luZy9TcGVjdHJhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnVHbiwgc2NoZW1lIGFzIHNjaGVtZUJ1R259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvQnVHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnVQdSwgc2NoZW1lIGFzIHNjaGVtZUJ1UHV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvQnVQdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR25CdSwgc2NoZW1lIGFzIHNjaGVtZUduQnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvR25CdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT3JSZCwgc2NoZW1lIGFzIHNjaGVtZU9yUmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvT3JSZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVCdUduLCBzY2hlbWUgYXMgc2NoZW1lUHVCdUdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVCdSwgc2NoZW1lIGFzIHNjaGVtZVB1QnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVSZCwgc2NoZW1lIGFzIHNjaGVtZVB1UmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRQdSwgc2NoZW1lIGFzIHNjaGVtZVJkUHV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxHbkJ1LCBzY2hlbWUgYXMgc2NoZW1lWWxHbkJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsR25CdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxHbiwgc2NoZW1lIGFzIHNjaGVtZVlsR259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxPckJyLCBzY2hlbWUgYXMgc2NoZW1lWWxPckJyfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsT3JCci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxPclJkLCBzY2hlbWUgYXMgc2NoZW1lWWxPclJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmx1ZXMsIHNjaGVtZSBhcyBzY2hlbWVCbHVlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvQmx1ZXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUdyZWVucywgc2NoZW1lIGFzIHNjaGVtZUdyZWVuc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHcmV5cywgc2NoZW1lIGFzIHNjaGVtZUdyZXlzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9HcmV5cy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVycGxlcywgc2NoZW1lIGFzIHNjaGVtZVB1cnBsZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL1B1cnBsZXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJlZHMsIHNjaGVtZSBhcyBzY2hlbWVSZWRzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9SZWRzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPcmFuZ2VzLCBzY2hlbWUgYXMgc2NoZW1lT3Jhbmdlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ2l2aWRpc30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9jaXZpZGlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmFpbmJvdywgd2FybSBhcyBpbnRlcnBvbGF0ZVdhcm0sIGNvb2wgYXMgaW50ZXJwb2xhdGVDb29sfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVNpbmVib3d9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlVHVyYm99IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvdHVyYm8uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVZpcmlkaXMsIG1hZ21hIGFzIGludGVycG9sYXRlTWFnbWEsIGluZmVybm8gYXMgaW50ZXJwb2xhdGVJbmZlcm5vLCBwbGFzbWEgYXMgaW50ZXJwb2xhdGVQbGFzbWF9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///17206\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-scale.6ad42416350b5309.bundle.js b/assets/demo/site/npm.d3-scale.6ad42416350b5309.bundle.js
new file mode 100644
index 00000000..d38e719d
--- /dev/null
+++ b/assets/demo/site/npm.d3-scale.6ad42416350b5309.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4072],{71571:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ ascending)\n/* harmony export */ });\nfunction ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzE1NzEuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzP2M0OTMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU4gOiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71571\n')},6931:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "ZP": () => (/* binding */ bisect)\n});\n\n// UNUSED EXPORTS: bisectCenter, bisectLeft, bisectRight\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/ascending.js\nvar ascending = __webpack_require__(71571);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/descending.js\nfunction descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/bisector.js\n\n\n\nfunction bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending/* default */.Z;\n compare2 = (d, x) => (0,ascending/* default */.Z)(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending/* default */.Z || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/number.js\nvar number = __webpack_require__(39733);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/bisect.js\n\n\n\n\nconst ascendingBisect = bisector(ascending/* default */.Z);\nconst bisectRight = ascendingBisect.right;\nconst bisectLeft = ascendingBisect.left;\nconst bisectCenter = bisector(number/* default */.Z).center;\n/* harmony default export */ const bisect = (bisectRight);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkzMS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNOdUM7QUFDRTs7QUFFMUI7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHdCQUFTO0FBQ3hCLHlCQUF5Qiw0QkFBUztBQUNsQztBQUNBLElBQUk7QUFDSixxQkFBcUIsd0JBQVMsVUFBVSxVQUFVO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FDdkR1QztBQUNGO0FBQ0o7O0FBRWpDLHdCQUF3QixRQUFRLENBQUMsd0JBQVM7QUFDbkM7QUFDQTtBQUNBLHFCQUFxQixRQUFRLENBQUMscUJBQU07QUFDM0MsNkNBQWUsV0FBVyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGVzY2VuZGluZy5qcz80YmI4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzPzJmODgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzPzM3ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOXG4gICAgOiBiIDwgYSA/IC0xXG4gICAgOiBiID4gYSA/IDFcbiAgICA6IGIgPj0gYSA/IDBcbiAgICA6IE5hTjtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpc2VjdG9yKGYpIHtcbiAgbGV0IGNvbXBhcmUxLCBjb21wYXJlMiwgZGVsdGE7XG5cbiAgLy8gSWYgYW4gYWNjZXNzb3IgaXMgc3BlY2lmaWVkLCBwcm9tb3RlIGl0IHRvIGEgY29tcGFyYXRvci4gSW4gdGhpcyBjYXNlIHdlXG4gIC8vIGNhbiB0ZXN0IHdoZXRoZXIgdGhlIHNlYXJjaCB2YWx1ZSBpcyAoc2VsZi0pIGNvbXBhcmFibGUuIFdlIGNhbuKAmXQgZG8gdGhpc1xuICAvLyBmb3IgYSBjb21wYXJhdG9yIChleGNlcHQgZm9yIHNwZWNpZmljLCBrbm93biBjb21wYXJhdG9ycykgYmVjYXVzZSB3ZSBjYW7igJl0XG4gIC8vIHRlbGwgaWYgdGhlIGNvbXBhcmF0b3IgaXMgc3ltbWV0cmljLCBhbmQgYW4gYXN5bW1ldHJpYyBjb21wYXJhdG9yIGNhbuKAmXQgYmVcbiAgLy8gdXNlZCB0byB0ZXN0IHdoZXRoZXIgYSBzaW5nbGUgdmFsdWUgaXMgY29tcGFyYWJsZS5cbiAgaWYgKGYubGVuZ3RoICE9PSAyKSB7XG4gICAgY29tcGFyZTEgPSBhc2NlbmRpbmc7XG4gICAgY29tcGFyZTIgPSAoZCwgeCkgPT4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4O1xuICB9IGVsc2Uge1xuICAgIGNvbXBhcmUxID0gZiA9PT0gYXNjZW5kaW5nIHx8IGYgPT09IGRlc2NlbmRpbmcgPyBmIDogemVybztcbiAgICBjb21wYXJlMiA9IGY7XG4gICAgZGVsdGEgPSBmO1xuICB9XG5cbiAgZnVuY3Rpb24gbGVmdChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICB9IHdoaWxlIChsbyA8IGhpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmlnaHQoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgaWYgKGxvIDwgaGkpIHtcbiAgICAgIGlmIChjb21wYXJlMSh4LCB4KSAhPT0gMCkgcmV0dXJuIGhpO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlMihhW21pZF0sIHgpIDw9IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7XG4gICAgcmV0dXJuIGkgPiBsbyAmJiBkZWx0YShhW2kgLSAxXSwgeCkgPiAtZGVsdGEoYVtpXSwgeCkgPyBpIC0gMSA6IGk7XG4gIH1cblxuICByZXR1cm4ge2xlZnQsIGNlbnRlciwgcmlnaHR9O1xufVxuXG5mdW5jdGlvbiB6ZXJvKCkge1xuICByZXR1cm4gMDtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3IuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmNvbnN0IGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgY29uc3QgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgY29uc3QgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdENlbnRlciA9IGJpc2VjdG9yKG51bWJlcikuY2VudGVyO1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6931\n')},39733:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "K": () => (/* binding */ numbers),\n/* harmony export */ "Z": () => (/* binding */ number)\n/* harmony export */ });\nfunction number(x) {\n return x === null ? NaN : +x;\n}\n\nfunction* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk3MzMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzPzJmOGQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39733\n')},42193:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "G9": () => (/* binding */ tickIncrement),\n/* harmony export */ "ZP": () => (/* binding */ ticks),\n/* harmony export */ "ly": () => (/* binding */ tickStep)\n/* harmony export */ });\nconst e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nfunction ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nfunction tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIxOTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTztBQUN4Qyx5QkFBeUIsT0FBTztBQUNoQyxJQUFJO0FBQ0osaUNBQWlDLE9BQU87QUFDeEMseUJBQXlCLE9BQU87QUFDaEM7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcz9mMTFjIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5mdW5jdGlvbiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgY29uc3Qgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAoc3RlcCkpLFxuICAgICAgZXJyb3IgPSBzdGVwIC8gTWF0aC5wb3coMTAsIHBvd2VyKSxcbiAgICAgIGZhY3RvciA9IGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMTtcbiAgbGV0IGkxLCBpMiwgaW5jO1xuICBpZiAocG93ZXIgPCAwKSB7XG4gICAgaW5jID0gTWF0aC5wb3coMTAsIC1wb3dlcikgLyBmYWN0b3I7XG4gICAgaTEgPSBNYXRoLnJvdW5kKHN0YXJ0ICogaW5jKTtcbiAgICBpMiA9IE1hdGgucm91bmQoc3RvcCAqIGluYyk7XG4gICAgaWYgKGkxIC8gaW5jIDwgc3RhcnQpICsraTE7XG4gICAgaWYgKGkyIC8gaW5jID4gc3RvcCkgLS1pMjtcbiAgICBpbmMgPSAtaW5jO1xuICB9IGVsc2Uge1xuICAgIGluYyA9IE1hdGgucG93KDEwLCBwb3dlcikgKiBmYWN0b3I7XG4gICAgaTEgPSBNYXRoLnJvdW5kKHN0YXJ0IC8gaW5jKTtcbiAgICBpMiA9IE1hdGgucm91bmQoc3RvcCAvIGluYyk7XG4gICAgaWYgKGkxICogaW5jIDwgc3RhcnQpICsraTE7XG4gICAgaWYgKGkyICogaW5jID4gc3RvcCkgLS1pMjtcbiAgfVxuICBpZiAoaTIgPCBpMSAmJiAwLjUgPD0gY291bnQgJiYgY291bnQgPCAyKSByZXR1cm4gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50ICogMik7XG4gIHJldHVybiBbaTEsIGkyLCBpbmNdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIGlmICghKGNvdW50ID4gMCkpIHJldHVybiBbXTtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wKSByZXR1cm4gW3N0YXJ0XTtcbiAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydCwgW2kxLCBpMiwgaW5jXSA9IHJldmVyc2UgPyB0aWNrU3BlYyhzdG9wLCBzdGFydCwgY291bnQpIDogdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgaWYgKCEoaTIgPj0gaTEpKSByZXR1cm4gW107XG4gIGNvbnN0IG4gPSBpMiAtIGkxICsgMSwgdGlja3MgPSBuZXcgQXJyYXkobik7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgaWYgKGluYyA8IDApIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMiAtIGkpIC8gLWluYztcbiAgICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMiAtIGkpICogaW5jO1xuICB9IGVsc2Uge1xuICAgIGlmIChpbmMgPCAwKSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTEgKyBpKSAvIC1pbmM7XG4gICAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTEgKyBpKSAqIGluYztcbiAgfVxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgcmV0dXJuIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudClbMl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQsIGluYyA9IHJldmVyc2UgPyB0aWNrSW5jcmVtZW50KHN0b3AsIHN0YXJ0LCBjb3VudCkgOiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gIHJldHVybiAocmV2ZXJzZSA/IC0xIDogMSkgKiAoaW5jIDwgMCA/IDEgLyAtaW5jIDogaW5jKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///42193\n')},10049:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "WU": () => (/* binding */ format),\n "jH": () => (/* binding */ formatPrefix)\n});\n\n// UNUSED EXPORTS: default\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/exponent.js\nvar exponent = __webpack_require__(62898);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatGroup.js\n/* harmony default export */ function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatNumerals.js\n/* harmony default export */ function formatNumerals(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatSpecifier.js\nvar formatSpecifier = __webpack_require__(71300);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatTrim.js\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n/* harmony default export */ function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case ".": i0 = i1 = i; break;\n case "0": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatDecimal.js\nvar formatDecimal = __webpack_require__(14419);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatPrefixAuto.js\n\n\nvar prefixExponent;\n\n/* harmony default export */ function formatPrefixAuto(x, p) {\n var d = (0,formatDecimal/* formatDecimalParts */.V)(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join("0")\n : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)\n : "0." + new Array(1 - i).join("0") + (0,formatDecimal/* formatDecimalParts */.V)(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatRounded.js\n\n\n/* harmony default export */ function formatRounded(x, p) {\n var d = (0,formatDecimal/* formatDecimalParts */.V)(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join("0");\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatTypes.js\n\n\n\n\n/* harmony default export */ const formatTypes = ({\n "%": (x, p) => (x * 100).toFixed(p),\n "b": (x) => Math.round(x).toString(2),\n "c": (x) => x + "",\n "d": formatDecimal/* default */.Z,\n "e": (x, p) => x.toExponential(p),\n "f": (x, p) => x.toFixed(p),\n "g": (x, p) => x.toPrecision(p),\n "o": (x) => Math.round(x).toString(8),\n "p": (x, p) => formatRounded(x * 100, p),\n "r": formatRounded,\n "s": formatPrefixAuto,\n "X": (x) => Math.round(x).toString(16).toUpperCase(),\n "x": (x) => Math.round(x).toString(16)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/identity.js\n/* harmony default export */ function identity(x) {\n return x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/locale.js\n\n\n\n\n\n\n\n\n\nvar map = Array.prototype.map,\n prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];\n\n/* harmony default export */ function locale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),\n currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",\n currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",\n decimal = locale.decimal === undefined ? "." : locale.decimal + "",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? "%" : locale.percent + "",\n minus = locale.minus === undefined ? "−" : locale.minus + "",\n nan = locale.nan === undefined ? "NaN" : locale.nan + "";\n\n function newFormat(specifier) {\n specifier = (0,formatSpecifier/* default */.Z)(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The "n" type is an alias for ",g".\n if (type === "n") comma = true, type = "g";\n\n // The "" type, and any invalid type, is an alias for ".12~g".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",\n suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === "c") {\n valueSuffix = formatType(value) + valueSuffix;\n value = "";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;\n valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not "0", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : "";\n\n // If the fill character is "0", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case "<": value = valuePrefix + value + valueSuffix + padding; break;\n case "=": value = valuePrefix + padding + value + valueSuffix; break;\n case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + "";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = (0,formatSpecifier/* default */.Z)(specifier), specifier.type = "f", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor((0,exponent/* default */.Z)(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/defaultLocale.js\n\n\nvar defaultLocale_locale;\nvar format;\nvar formatPrefix;\n\ndefaultLocale({\n thousands: ",",\n grouping: [3],\n currency: ["$", ""]\n});\n\nfunction defaultLocale(definition) {\n defaultLocale_locale = locale(definition);\n format = defaultLocale_locale.format;\n formatPrefix = defaultLocale_locale.formatPrefix;\n return defaultLocale_locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAwNDkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQWUscUJBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQ2pCQSw2QkFBZSx3QkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7QUNOQTtBQUNBLDZCQUFlLG9CQUFTO0FBQ3hCLGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0EsNkJBQTZCO0FBQzdCLHNDQUFzQyxRQUFRO0FBQzlDLHNDQUFzQyxvQkFBb0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDVnNEOztBQUUvQzs7QUFFUCw2QkFBZSwwQkFBUztBQUN4QixVQUFVLDJDQUFrQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDJDQUFrQixnQ0FBZ0M7QUFDOUY7OztBQ2ZzRDs7QUFFdEQsNkJBQWUsdUJBQVM7QUFDeEIsVUFBVSwyQ0FBa0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1YrQztBQUNNO0FBQ047O0FBRS9DLGtEQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsT0FBTyw0QkFBYTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixhQUFhO0FBQzlCLE9BQU8sYUFBYTtBQUNwQixPQUFPLGdCQUFnQjtBQUN2QjtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7QUNsQkYsNkJBQWUsa0JBQVM7QUFDeEI7QUFDQTs7O0FDRnFDO0FBQ007QUFDTTtBQUNFO0FBQ1Y7QUFDRTtBQUNVO0FBQ2hCOztBQUVyQztBQUNBOztBQUVBLDZCQUFlLGdCQUFTO0FBQ3hCLGdGQUFnRixRQUFRLEdBQUcsV0FBVztBQUN0RztBQUNBO0FBQ0E7QUFDQSxpREFBaUQsUUFBUSxHQUFHLGNBQWM7QUFDMUU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLGtDQUFlOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxXQUFXOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsVUFBVTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbURBQW1ELGNBQWM7O0FBRWpFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsc0lBQXNJO0FBQ3RJLHNFQUFzRTtBQUN0RTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLGtDQUFlO0FBQ2xELGdEQUFnRCwyQkFBUTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkp1Qzs7QUFFdkMsSUFBSSxvQkFBTTtBQUNIO0FBQ0E7O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVjO0FBQ2YsRUFBRSxvQkFBTSxHQUFHLE1BQVk7QUFDdkIsV0FBVyxvQkFBTTtBQUNqQixpQkFBaUIsb0JBQU07QUFDdkIsU0FBUyxvQkFBTTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzPzk1MjkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzPzkzNmEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanM/ZDc3YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0UHJlZml4QXV0by5qcz9lMDRmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzPzI1MDEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzP2IxYzQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzP2FhMjkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcz82ZmY3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzP2FiM2IiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbFBhcnRzKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG59XG4iLCJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXTtcbiAgcmV0dXJuIGV4cG9uZW50IDwgMCA/IFwiMC5cIiArIG5ldyBBcnJheSgtZXhwb25lbnQpLmpvaW4oXCIwXCIpICsgY29lZmZpY2llbnRcbiAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxuICAgICAgOiBjb2VmZmljaWVudCArIG5ldyBBcnJheShleHBvbmVudCAtIGNvZWZmaWNpZW50Lmxlbmd0aCArIDIpLmpvaW4oXCIwXCIpO1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiAoeCwgcCkgPT4gKHggKiAxMDApLnRvRml4ZWQocCksXG4gIFwiYlwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKSxcbiAgXCJjXCI6ICh4KSA9PiB4ICsgXCJcIixcbiAgXCJkXCI6IGZvcm1hdERlY2ltYWwsXG4gIFwiZVwiOiAoeCwgcCkgPT4geC50b0V4cG9uZW50aWFsKHApLFxuICBcImZcIjogKHgsIHApID0+IHgudG9GaXhlZChwKSxcbiAgXCJnXCI6ICh4LCBwKSA9PiB4LnRvUHJlY2lzaW9uKHApLFxuICBcIm9cIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCksXG4gIFwicFwiOiAoeCwgcCkgPT4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksXG4gIFwieFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNilcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5pbXBvcnQgZm9ybWF0R3JvdXAgZnJvbSBcIi4vZm9ybWF0R3JvdXAuanNcIjtcbmltcG9ydCBmb3JtYXROdW1lcmFscyBmcm9tIFwiLi9mb3JtYXROdW1lcmFscy5qc1wiO1xuaW1wb3J0IGZvcm1hdFNwZWNpZmllciBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXIuanNcIjtcbmltcG9ydCBmb3JtYXRUcmltIGZyb20gXCIuL2Zvcm1hdFRyaW0uanNcIjtcbmltcG9ydCBmb3JtYXRUeXBlcyBmcm9tIFwiLi9mb3JtYXRUeXBlcy5qc1wiO1xuaW1wb3J0IHtwcmVmaXhFeHBvbmVudH0gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciBtYXAgPSBBcnJheS5wcm90b3R5cGUubWFwLFxuICAgIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyA9PT0gdW5kZWZpbmVkIHx8IGxvY2FsZS50aG91c2FuZHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5IDogZm9ybWF0R3JvdXAobWFwLmNhbGwobG9jYWxlLmdyb3VwaW5nLCBOdW1iZXIpLCBsb2NhbGUudGhvdXNhbmRzICsgXCJcIiksXG4gICAgICBjdXJyZW5jeVByZWZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVswXSArIFwiXCIsXG4gICAgICBjdXJyZW5jeVN1ZmZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVsxXSArIFwiXCIsXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwgPT09IHVuZGVmaW5lZCA/IFwiLlwiIDogbG9jYWxlLmRlY2ltYWwgKyBcIlwiLFxuICAgICAgbnVtZXJhbHMgPSBsb2NhbGUubnVtZXJhbHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5IDogZm9ybWF0TnVtZXJhbHMobWFwLmNhbGwobG9jYWxlLm51bWVyYWxzLCBTdHJpbmcpKSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCA9PT0gdW5kZWZpbmVkID8gXCIlXCIgOiBsb2NhbGUucGVyY2VudCArIFwiXCIsXG4gICAgICBtaW51cyA9IGxvY2FsZS5taW51cyA9PT0gdW5kZWZpbmVkID8gXCLiiJJcIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpZ24uIC0wIGlzIG5vdCBsZXNzIHRoYW4gMCwgYnV0IDEgLyAtMCBpcyFcbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDAgfHwgMSAvIHZhbHVlIDwgMDtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gbmFuIDogZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGFmdGVyIGZvcm1hdHRpbmcsIGFuZCBubyBleHBsaWNpdCBwb3NpdGl2ZSBzaWduIGlzIHJlcXVlc3RlZCwgaGlkZSB0aGUgc2lnbi5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwICYmIHNpZ24gIT09IFwiK1wiKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogbWludXMpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///10049\n')},62898:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14419);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return x = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__/* .formatDecimalParts */ .V)(Math.abs(x)), x ? x[1] : NaN;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI4OTguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFzRDs7QUFFdEQsNkJBQWUsb0NBQVM7QUFDeEIsYUFBYSw4RUFBa0I7QUFDL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanM/ZmI2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbFBhcnRzKE1hdGguYWJzKHgpKSwgeCA/IHhbMV0gOiBOYU47XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///62898\n')},14419:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "V": () => (/* binding */ formatDecimalParts),\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString("en").replace(/,/g, "")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns ["123", 0].\nfunction formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQ0MTkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZCQUFlLG9DQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsZ0dBQWdHO0FBQ2hHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanM/NGUxYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14419\n')},71300:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ formatSpecifier)\n/* harmony export */ });\n/* unused harmony export FormatSpecifier */\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? " " : specifier.fill + "";\n this.align = specifier.align === undefined ? ">" : specifier.align + "";\n this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";\n this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? "" : specifier.type + "";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? "0" : "")\n + (this.width === undefined ? "" : Math.max(1, this.width | 0))\n + (this.comma ? "," : "")\n + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))\n + (this.trim ? "~" : "")\n + this.type;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzEzMDAuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSx1REFBdUQ7O0FBRWhEO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzPzFjNTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71300\n')},81445:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODE0NDUuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanM/OTIyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///81445\n')},27270:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcyNzAuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcz8zNzRiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27270\n')},52763:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ value)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-color/src/define.js\n/* harmony default export */ function src_define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-color/src/color.js\n\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = "\\\\s*([+-]?\\\\d+)\\\\s*",\n reN = "\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*",\n reP = "\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nsrc_define(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + "").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction color_rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\nsrc_define(Rgb, color_rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? "0" : "") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nsrc_define(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/basis.js\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\n/* harmony default export */ function src_basis(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/basisClosed.js\n\n\n/* harmony default export */ function basisClosed(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/constant.js\n/* harmony default export */ const src_constant = (x => () => x);\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/color.js\n\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : src_constant(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : src_constant(isNaN(a) ? b : a);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/rgb.js\n\n\n\n\n\n/* harmony default export */ const rgb = ((function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = color_rgb(start)).r, (end = color_rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = color_rgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + "";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(src_basis);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/array.js\n\n\n\n/* harmony default export */ function array(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/date.js\n/* harmony default export */ function date(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/number.js\nvar number = __webpack_require__(81445);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/object.js\n\n\n/* harmony default export */ function object(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== "object") a = {};\n if (b === null || typeof b !== "object") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/string.js\n\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, "g");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + "";\n };\n}\n\n/* harmony default export */ function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + "", b = b + "";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: (0,number/* default */.Z)(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join("");\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/numberArray.js\n/* harmony default export */ function src_numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nfunction numberArray_isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/value.js\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function value(a, b) {\n var t = typeof b, c;\n return b == null || t === "boolean" ? src_constant(b)\n : (t === "number" ? number/* default */.Z\n : t === "string" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : numberArray_isNumberArray(b) ? src_numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object\n : number/* default */.Z)(a, b);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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L25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvZGVmaW5lLmpzPzM3NzMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanM/OWJlZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcz9iOWIxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzPzIzNzMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanM/ZTU4MyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcz80NGM3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcz8wNGUwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2FycmF5LmpzP2U2YzYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcz82MDA2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcz84OTBmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcz8wYzFlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzPzRlMmUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanM/ZWM1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX1cXFxcKSRgKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsYVxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCk7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHkoY2hhbm5lbHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcywgY2hhbm5lbHMpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IGNvbG9yX2Zvcm1hdEhleDgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgUmdiKGNsYW1waSh0aGlzLnIpLCBjbGFtcGkodGhpcy5nKSwgY2xhbXBpKHRoaXMuYiksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiByZ2JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxufSkpO1xuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9JHtoZXgoKGlzTmFOKHRoaXMub3BhY2l0eSkgPyAxIDogdGhpcy5vcGFjaXR5KSAqIDI1NSl9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICByZXR1cm4gYCR7YSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwifSR7Y2xhbXBpKHRoaXMucil9LCAke2NsYW1waSh0aGlzLmcpfSwgJHtjbGFtcGkodGhpcy5iKX0ke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcGEob3BhY2l0eSkge1xuICByZXR1cm4gaXNOYU4ob3BhY2l0eSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgb3BhY2l0eSkpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGkodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBjbGFtcGkodmFsdWUpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IEhzbChjbGFtcGgodGhpcy5oKSwgY2xhbXB0KHRoaXMucyksIGNsYW1wdCh0aGlzLmwpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2woKSB7XG4gICAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICAgIHJldHVybiBgJHthID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCJ9JHtjbGFtcGgodGhpcy5oKX0sICR7Y2xhbXB0KHRoaXMucykgKiAxMDB9JSwgJHtjbGFtcHQodGhpcy5sKSAqIDEwMH0lJHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBjbGFtcGgodmFsdWUpIHtcbiAgdmFsdWUgPSAodmFsdWUgfHwgMCkgJSAzNjA7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyB2YWx1ZSArIDM2MCA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjbGFtcHQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlIHx8IDApKTtcbn1cblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJhc2lzKHQxLCB2MCwgdjEsIHYyLCB2Mykge1xuICB2YXIgdDIgPSB0MSAqIHQxLCB0MyA9IHQyICogdDE7XG4gIHJldHVybiAoKDEgLSAzICogdDEgKyAzICogdDIgLSB0MykgKiB2MFxuICAgICAgKyAoNCAtIDYgKiB0MiArIDMgKiB0MykgKiB2MVxuICAgICAgKyAoMSArIDMgKiB0MSArIDMgKiB0MiAtIDMgKiB0MykgKiB2MlxuICAgICAgKyB0MyAqIHYzKSAvIDY7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdCA8PSAwID8gKHQgPSAwKSA6IHQgPj0gMSA/ICh0ID0gMSwgbiAtIDEpIDogTWF0aC5mbG9vcih0ICogbiksXG4gICAgICAgIHYxID0gdmFsdWVzW2ldLFxuICAgICAgICB2MiA9IHZhbHVlc1tpICsgMV0sXG4gICAgICAgIHYwID0gaSA+IDAgPyB2YWx1ZXNbaSAtIDFdIDogMiAqIHYxIC0gdjIsXG4gICAgICAgIHYzID0gaSA8IG4gLSAxID8gdmFsdWVzW2kgKyAyXSA6IDIgKiB2MiAtIHYxO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7YmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIChpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXkgOiBnZW5lcmljQXJyYXkpKGEsIGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJpY0FycmF5KGEsIGIpIHtcbiAgdmFyIG5iID0gYiA/IGIubGVuZ3RoIDogMCxcbiAgICAgIG5hID0gYSA/IE1hdGgubWluKG5iLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgeCA9IG5ldyBBcnJheShuYSksXG4gICAgICBjID0gbmV3IEFycmF5KG5iKSxcbiAgICAgIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSB2YWx1ZShhW2ldLCBiW2ldKTtcbiAgZm9yICg7IGkgPCBuYjsgKytpKSBjW2ldID0gYltpXTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgaWYgKCFiKSBiID0gW107XG4gIHZhciBuID0gYSA/IE1hdGgubWluKGIubGVuZ3RoLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgYyA9IGIuc2xpY2UoKSxcbiAgICAgIGk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5KHgpIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCByZ2IgZnJvbSBcIi4vcmdiLmpzXCI7XG5pbXBvcnQge2dlbmVyaWNBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBkYXRlIGZyb20gXCIuL2RhdGUuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQgb2JqZWN0IGZyb20gXCIuL29iamVjdC5qc1wiO1xuaW1wb3J0IHN0cmluZyBmcm9tIFwiLi9zdHJpbmcuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICByZXR1cm4gYiA9PSBudWxsIHx8IHQgPT09IFwiYm9vbGVhblwiID8gY29uc3RhbnQoYilcbiAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBudW1iZXJcbiAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiXG4gICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxuICAgICAgOiBpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXlcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGdlbmVyaWNBcnJheVxuICAgICAgOiB0eXBlb2YgYi52YWx1ZU9mICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGIudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIiB8fCBpc05hTihiKSA/IG9iamVjdFxuICAgICAgOiBudW1iZXIpKGEsIGIpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///52763\n')},57953:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "JG": () => (/* binding */ copy),\n "ZP": () => (/* binding */ continuous),\n "yR": () => (/* binding */ identity),\n "l4": () => (/* binding */ transformer)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/bisect.js + 2 modules\nvar bisect = __webpack_require__(6931);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/value.js + 12 modules\nvar value = __webpack_require__(52763);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/number.js\nvar number = __webpack_require__(81445);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/round.js\nvar round = __webpack_require__(27270);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/constant.js\nfunction constants(x) {\n return function() {\n return x;\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/src/number.js\nvar src_number = __webpack_require__(66938);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/continuous.js\n\n\n\n\n\nvar unit = [0, 1];\n\nfunction identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constants(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = (0,bisect/* default */.ZP)(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction transformer() {\n var domain = unit,\n range = unit,\n interpolate = value/* default */.Z,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), number/* default */.Z)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, src_number/* default */.Z), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = round/* default */.Z, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nfunction continuous() {\n return transformer()(identity, identity);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc5NTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNKZ0M7QUFDb0U7QUFDL0Q7QUFDSjs7QUFFakM7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsUUFBUSxTQUFRO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSwwQkFBTTtBQUNsQjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdGQUF3RixxQkFBaUI7QUFDekc7O0FBRUE7QUFDQSxzREFBc0QseUJBQU07QUFDNUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdELG9CQUFnQjtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlO0FBQ2Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanM/NGY3MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanM/MzcwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHVuaXQgPSBbMCwgMV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGlzTmFOKGIpID8gTmFOIDogMC41KTtcbn1cblxuZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XG4gIHZhciB0O1xuICBpZiAoYSA+IGIpIHQgPSBhLCBhID0gYiwgYiA9IHQ7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG59XG5cbi8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcbiAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICByID0gbmV3IEFycmF5KGopLFxuICAgICAgaSA9IC0xO1xuXG4gIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIH1cblxuICB3aGlsZSAoKytpIDwgaikge1xuICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpID0gYmlzZWN0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xuICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcbiAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcbiAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICB1bmtub3duLFxuICAgICAgY2xhbXAgPSBpZGVudGl0eSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpO1xuICAgIGlmIChjbGFtcCAhPT0gaWRlbnRpdHkpIGNsYW1wID0gY2xhbXBlcihkb21haW5bMF0sIGRvbWFpbltuIC0gMV0pO1xuICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xuICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gQXJyYXkuZnJvbShfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gdHJ1ZSA6IGlkZW50aXR5LCByZXNjYWxlKCkpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cygpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKCkoaWRlbnRpdHksIGlkZW50aXR5KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57953\n')},7276:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "ti": () => (/* reexport */ band),\n "AB": () => (/* reexport */ diverging),\n "Wr": () => (/* reexport */ divergingLog),\n "dK": () => (/* reexport */ divergingPow),\n "KR": () => (/* reexport */ divergingSqrt),\n "b4": () => (/* reexport */ divergingSymlog),\n "ez": () => (/* reexport */ identity),\n "qm": () => (/* reexport */ implicit),\n "BY": () => (/* reexport */ linear/* default */.Z),\n "p2": () => (/* reexport */ log),\n "PK": () => (/* reexport */ ordinal),\n "q2": () => (/* reexport */ point),\n "vY": () => (/* reexport */ pow),\n "FT": () => (/* reexport */ quantile_quantile),\n "aE": () => (/* reexport */ quantize),\n "s$": () => (/* reexport */ radial),\n "cJ": () => (/* reexport */ sequential),\n "$l": () => (/* reexport */ sequentialLog),\n "bE": () => (/* reexport */ sequentialPow),\n "IO": () => (/* reexport */ sequentialQuantile),\n "aA": () => (/* reexport */ sequentialSqrt),\n "lQ": () => (/* reexport */ sequentialSymlog),\n "PU": () => (/* reexport */ sqrt),\n "eh": () => (/* reexport */ symlog),\n "ut": () => (/* reexport */ threshold),\n "Xf": () => (/* reexport */ time),\n "KY": () => (/* reexport */ utcTime),\n "uk": () => (/* reexport */ tickFormat/* default */.Z)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/range.js\nfunction range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/src/init.js\nvar init = __webpack_require__(94182);\n// EXTERNAL MODULE: ./node_modules/internmap/src/index.js\nvar src = __webpack_require__(909);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/ordinal.js\n\n\n\nconst implicit = Symbol("implicit");\n\nfunction ordinal() {\n var index = new src/* InternMap */.L(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new src/* InternMap */.L();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n init/* initRange.apply */.o.apply(scale, arguments);\n\n return scale;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/band.js\n\n\n\n\nfunction band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = range(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return init/* initRange.apply */.o.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/src/linear.js\nvar linear = __webpack_require__(85036);\n// EXTERNAL MODULE: ./node_modules/d3-scale/src/number.js\nvar number = __webpack_require__(66938);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/identity.js\n\n\n\nfunction identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number/* default */.Z), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number/* default */.Z) : [0, 1];\n\n return (0,linear/* linearish */.Q)(scale);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/ticks.js\nvar ticks = __webpack_require__(42193);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatSpecifier.js\nvar formatSpecifier = __webpack_require__(71300);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/defaultLocale.js + 8 modules\nvar defaultLocale = __webpack_require__(10049);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/nice.js\nfunction nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/src/continuous.js + 1 modules\nvar continuous = __webpack_require__(57953);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/log.js\n\n\n\n\n\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nfunction loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = (0,ticks/* default */.ZP)(u, v, n);\n } else {\n z = (0,ticks/* default */.ZP)(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? "s" : ",";\n if (typeof specifier !== "function") {\n if (!(base % 1) && (specifier = (0,formatSpecifier/* default */.Z)(specifier)).precision == null) specifier.trim = true;\n specifier = (0,defaultLocale/* format */.WU)(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : "";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nfunction log() {\n const scale = loggish((0,continuous/* transformer */.l4)()).domain([1, 10]);\n scale.copy = () => (0,continuous/* copy */.JG)(scale, log()).base(scale.base());\n init/* initRange.apply */.o.apply(scale, arguments);\n return scale;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/symlog.js\n\n\n\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nfunction symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return (0,linear/* linearish */.Q)(scale);\n}\n\nfunction symlog() {\n var scale = symlogish((0,continuous/* transformer */.l4)());\n\n scale.copy = function() {\n return (0,continuous/* copy */.JG)(scale, symlog()).constant(scale.constant());\n };\n\n return init/* initRange.apply */.o.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/pow.js\n\n\n\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n var scale = transform(continuous/* identity */.yR, continuous/* identity */.yR),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(continuous/* identity */.yR, continuous/* identity */.yR)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return (0,linear/* linearish */.Q)(scale);\n}\n\nfunction pow() {\n var scale = powish((0,continuous/* transformer */.l4)());\n\n scale.copy = function() {\n return (0,continuous/* copy */.JG)(scale, pow()).exponent(scale.exponent());\n };\n\n init/* initRange.apply */.o.apply(scale, arguments);\n\n return scale;\n}\n\nfunction sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/radial.js\n\n\n\n\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nfunction radial() {\n var squared = (0,continuous/* default */.ZP)(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number/* default */.Z)).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n init/* initRange.apply */.o.apply(scale, arguments);\n\n return (0,linear/* linearish */.Q)(scale);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/max.js\nfunction max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/min.js\nfunction min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/ascending.js\nvar ascending = __webpack_require__(71571);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/sort.js\n\n\n\nfunction sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = sort_ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => sort_ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nfunction compareDefined(compare = ascending/* default */.Z) {\n if (compare === ascending/* default */.Z) return sort_ascendingDefined;\n if (typeof compare !== "function") throw new TypeError("compare is not a function");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nfunction sort_ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/quickselect.js\n\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nfunction quickselect_quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? sort_ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect_quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/number.js\nvar src_number = __webpack_require__(39733);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/quantile.js\n\n\n\n\n\n\n\n\n\nfunction quantile(values, p, valueof) {\n values = Float64Array.from((0,src_number/* numbers */.K)(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect_quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction quantileSorted(values, p, valueof = src_number/* default */.Z) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction quantileIndex(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return minIndex(values);\n if (p >= 1) return maxIndex(values);\n var n,\n i = Math.floor((n - 1) * p),\n order = (i, j) => ascendingDefined(values[i], values[j]),\n index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/bisect.js + 2 modules\nvar bisect = __webpack_require__(6931);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/quantile.js\n\n\n\nfunction quantile_quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = quantileSorted(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[(0,bisect/* default */.ZP)(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending/* default */.Z);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile_quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return init/* initRange.apply */.o.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/quantize.js\n\n\n\n\nfunction quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[(0,bisect/* default */.ZP)(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return init/* initRange.apply */.o.apply((0,linear/* linearish */.Q)(scale), arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/threshold.js\n\n\n\nfunction threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[(0,bisect/* default */.ZP)(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return init/* initRange.apply */.o.apply(scale, arguments);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-time/src/ticks.js + 5 modules\nvar src_ticks = __webpack_require__(9981);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/year.js\nvar year = __webpack_require__(38887);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/month.js\nvar month = __webpack_require__(36978);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/week.js\nvar src_week = __webpack_require__(85235);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/day.js\nvar src_day = __webpack_require__(96199);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/hour.js\nvar hour = __webpack_require__(66549);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/minute.js\nvar minute = __webpack_require__(22828);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/second.js\nvar second = __webpack_require__(26599);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-time-format/src/locale.js\n\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n "a": formatShortWeekday,\n "A": formatWeekday,\n "b": formatShortMonth,\n "B": formatMonth,\n "c": null,\n "d": formatDayOfMonth,\n "e": formatDayOfMonth,\n "f": formatMicroseconds,\n "g": formatYearISO,\n "G": formatFullYearISO,\n "H": formatHour24,\n "I": formatHour12,\n "j": formatDayOfYear,\n "L": formatMilliseconds,\n "m": formatMonthNumber,\n "M": formatMinutes,\n "p": formatPeriod,\n "q": formatQuarter,\n "Q": formatUnixTimestamp,\n "s": formatUnixTimestampSeconds,\n "S": formatSeconds,\n "u": formatWeekdayNumberMonday,\n "U": formatWeekNumberSunday,\n "V": formatWeekNumberISO,\n "w": formatWeekdayNumberSunday,\n "W": formatWeekNumberMonday,\n "x": null,\n "X": null,\n "y": formatYear,\n "Y": formatFullYear,\n "Z": formatZone,\n "%": formatLiteralPercent\n };\n\n var utcFormats = {\n "a": formatUTCShortWeekday,\n "A": formatUTCWeekday,\n "b": formatUTCShortMonth,\n "B": formatUTCMonth,\n "c": null,\n "d": formatUTCDayOfMonth,\n "e": formatUTCDayOfMonth,\n "f": formatUTCMicroseconds,\n "g": formatUTCYearISO,\n "G": formatUTCFullYearISO,\n "H": formatUTCHour24,\n "I": formatUTCHour12,\n "j": formatUTCDayOfYear,\n "L": formatUTCMilliseconds,\n "m": formatUTCMonthNumber,\n "M": formatUTCMinutes,\n "p": formatUTCPeriod,\n "q": formatUTCQuarter,\n "Q": formatUnixTimestamp,\n "s": formatUnixTimestampSeconds,\n "S": formatUTCSeconds,\n "u": formatUTCWeekdayNumberMonday,\n "U": formatUTCWeekNumberSunday,\n "V": formatUTCWeekNumberISO,\n "w": formatUTCWeekdayNumberSunday,\n "W": formatUTCWeekNumberMonday,\n "x": null,\n "X": null,\n "y": formatUTCYear,\n "Y": formatUTCFullYear,\n "Z": formatUTCZone,\n "%": formatLiteralPercent\n };\n\n var parses = {\n "a": parseShortWeekday,\n "A": parseWeekday,\n "b": parseShortMonth,\n "B": parseMonth,\n "c": parseLocaleDateTime,\n "d": parseDayOfMonth,\n "e": parseDayOfMonth,\n "f": parseMicroseconds,\n "g": parseYear,\n "G": parseFullYear,\n "H": parseHour24,\n "I": parseHour24,\n "j": parseDayOfYear,\n "L": parseMilliseconds,\n "m": parseMonthNumber,\n "M": parseMinutes,\n "p": parsePeriod,\n "q": parseQuarter,\n "Q": parseUnixTimestamp,\n "s": parseUnixTimestampSeconds,\n "S": parseSeconds,\n "u": parseWeekdayNumberMonday,\n "U": parseWeekNumberSunday,\n "V": parseWeekNumberISO,\n "w": parseWeekdayNumberSunday,\n "W": parseWeekNumberMonday,\n "x": parseLocaleDate,\n "X": parseLocaleTime,\n "y": parseYear,\n "Y": parseFullYear,\n "Z": parseZone,\n "%": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === "e" ? " " : "0";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join("");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += "", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if ("Q" in d) return new Date(d.Q);\n if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !("Z" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ("p" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = "q" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if ("V" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!("w" in d)) d.w = 1;\n if ("Z" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? src_week/* utcMonday.ceil */.l6.ceil(week) : (0,src_week/* utcMonday */.l6)(week);\n week = src_day/* utcDay.offset */.AN.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? src_week/* timeMonday.ceil */.Ox.ceil(week) : (0,src_week/* timeMonday */.Ox)(week);\n week = src_day/* timeDay.offset */.rr.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if ("W" in d || "U" in d) {\n if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;\n day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if ("Z" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += "", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += "", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += "", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += "", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {"-": "", "_": " ", "0": "0"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? "-" : "",\n string = (sign ? -value : value) + "",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, "\\\\$&");\n}\n\nfunction formatRe(names) {\n return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + src_day/* timeDay.count */.rr.count((0,year/* timeYear */.jB)(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + "000";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(src_week/* timeSunday.count */.Zy.count((0,year/* timeYear */.jB)(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? (0,src_week/* timeThursday */.Ig)(d) : src_week/* timeThursday.ceil */.Ig.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(src_week/* timeThursday.count */.Ig.count((0,year/* timeYear */.jB)(d), d) + ((0,year/* timeYear */.jB)(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(src_week/* timeMonday.count */.Ox.count((0,year/* timeYear */.jB)(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? (0,src_week/* timeThursday */.Ig)(d) : src_week/* timeThursday.ceil */.Ig.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? "-" : (z *= -1, "+"))\n + pad(z / 60 | 0, "0", 2)\n + pad(z % 60, "0", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + src_day/* utcDay.count */.AN.count((0,year/* utcYear */.ol)(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + "000";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(src_week/* utcSunday.count */.pI.count((0,year/* utcYear */.ol)(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? (0,src_week/* utcThursday */.hB)(d) : src_week/* utcThursday.ceil */.hB.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(src_week/* utcThursday.count */.hB.count((0,year/* utcYear */.ol)(d), d) + ((0,year/* utcYear */.ol)(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(src_week/* utcMonday.count */.l6.count((0,year/* utcYear */.ol)(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? (0,src_week/* utcThursday */.hB)(d) : src_week/* utcThursday.ceil */.hB.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return "+0000";\n}\n\nfunction formatLiteralPercent() {\n return "%";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-time-format/src/defaultLocale.js\n\n\nvar locale;\nvar timeFormat;\nvar timeParse;\nvar utcFormat;\nvar utcParse;\n\ndefaultLocale_defaultLocale({\n dateTime: "%x, %X",\n date: "%-m/%-d/%Y",\n time: "%-I:%M:%S %p",\n periods: ["AM", "PM"],\n days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],\n shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],\n months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],\n shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]\n});\n\nfunction defaultLocale_defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/time.js\n\n\n\n\n\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction time_number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = (0,continuous/* default */.ZP)(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(".%L"),\n formatSecond = format(":%S"),\n formatMinute = format("%I:%M"),\n formatHour = format("%I %p"),\n formatDay = format("%a %d"),\n formatWeek = format("%b %d"),\n formatMonth = format("%B"),\n formatYear = format("%Y");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, time_number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return (0,continuous/* copy */.JG)(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nfunction time() {\n return init/* initRange.apply */.o.apply(calendar(src_ticks/* timeTicks */.jK, src_ticks/* timeTickInterval */._g, year/* timeYear */.jB, month/* timeMonth */.F0, src_week/* timeSunday */.Zy, src_day/* timeDay */.rr, hour/* timeHour */.WQ, minute/* timeMinute */.Z_, second/* second */.E, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/utcTime.js\n\n\n\n\n\nfunction utcTime() {\n return init/* initRange.apply */.o.apply(calendar(src_ticks/* utcTicks */.WG, src_ticks/* utcTickInterval */.jo, year/* utcYear */.ol, month/* utcMonth */.me, src_week/* utcSunday */.pI, src_day/* utcDay */.AN, hour/* utcHour */.lM, minute/* utcMinute */.rz, second/* second */.E, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/value.js + 12 modules\nvar value = __webpack_require__(52763);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/round.js\nvar round = __webpack_require__(27270);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/sequential.js\n\n\n\n\n\n\n\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = continuous/* identity */.yR,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(value/* default */.Z);\n\n scale.rangeRound = range(round/* default */.Z);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction sequential() {\n var scale = (0,linear/* linearish */.Q)(transformer()(continuous/* identity */.yR));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/sequentialQuantile.js\n\n\n\n\nfunction sequentialQuantile() {\n var domain = [],\n interpolator = continuous/* identity */.yR;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator(((0,bisect/* default */.ZP)(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending/* default */.Z);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-interpolate/src/piecewise.js\n\n\nfunction piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value/* default */.Z;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/diverging.js\n\n\n\n\n\n\n\n\n\nfunction diverging_transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = continuous/* identity */.yR,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(value/* default */.Z);\n\n scale.rangeRound = range(round/* default */.Z);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nfunction diverging() {\n var scale = (0,linear/* linearish */.Q)(diverging_transformer()(continuous/* identity */.yR));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n var scale = loggish(diverging_transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n var scale = symlogish(diverging_transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n var scale = powish(diverging_transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return init/* initInterpolator.apply */.O.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/src/tickFormat.js + 3 modules\nvar tickFormat = __webpack_require__(63093);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsaUNBQWU7QUFDeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQmlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FB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Q3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwyQkFBUTtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxTQUFTO0FBQzNFO0FBQ0E7O0FBRUEsc0JBQXNCLG9CQUFXOztBQUVqQywyQkFBMkIsb0JBQWdCOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmLGNBQWMsMkJBQVMsQ0FBQyxxQkFBVyxHQUFHLDJCQUFROztBQUU5QztBQUNBLFdBQVcsSUFBSTtBQUNmOztBQUVBLFNBQVMsd0NBQXNCO0FBQy9COztBQUVPO0FBQ1AsY0FBYyxPQUFPLENBQUMscUJBQVc7O0FBRWpDO0FBQ0EsV0FBVyxJQUFJO0FBQ2Y7O0FBRUEsU0FBUyx3Q0FBc0I7QUFDL0I7O0FBRU87QUFDUCxjQUFjLFNBQVMsQ0FBQyxxQkFBVzs7QUFFbkM7QUFDQSxXQUFXLElBQUk7QUFDZjs7QUFFQSxTQUFTLHdDQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMsTUFBTSxDQUFDLHFCQUFXOztBQUVoQztBQUNBLFdBQVcsSUFBSTtBQUNmOztBQUVBLFNBQVMsd0NBQXNCO0FBQy9COztBQUVPO0FBQ1A7QUFDQTs7Ozs7QUNwR21COztBQUlJOztBQUlGOztBQUlIOztBQUlHOztBQUtDOztBQUtKOztBQUlHOztBQUlFOztBQUlBOztBQUlDOztBQUlMOztBQUlHOztBQVFHOztBQUlROztBQVFUOztBQUlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanM/NjIwNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanM/MDY3OSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanM/NjYzYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2lkZW50aXR5LmpzPzNmM2IiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9uaWNlLmpzP2RkOWMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9sb2cuanM/OWEwYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3N5bWxvZy5qcz84MDU1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcG93LmpzPzIxN2UiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9yYWRpYWwuanM/Njg2ZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanM/MjhmYiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanM/MTc5YSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zb3J0LmpzPzMyMDYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVpY2tzZWxlY3QuanM/ODJkMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcz85YjYyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcXVhbnRpbGUuanM/MmVjOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3F1YW50aXplLmpzPzFjZGMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aHJlc2hvbGQuanM/ODliOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9sb2NhbGUuanM/MGI1NiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzPzgxZWUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aW1lLmpzP2U3MjEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy91dGNUaW1lLmpzP2JlODEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsLmpzPzAyOTciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsUXVhbnRpbGUuanM/ZGVkNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9waWVjZXdpc2UuanM/MDNlZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2RpdmVyZ2luZy5qcz82ZWU2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5kZXguanM/ODQ1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICBzdGFydCA9ICtzdGFydCwgc3RvcCA9ICtzdG9wLCBzdGVwID0gKG4gPSBhcmd1bWVudHMubGVuZ3RoKSA8IDIgPyAoc3RvcCA9IHN0YXJ0LCBzdGFydCA9IDAsIDEpIDogbiA8IDMgPyAxIDogK3N0ZXA7XG5cbiAgdmFyIGkgPSAtMSxcbiAgICAgIG4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSkgfCAwLFxuICAgICAgcmFuZ2UgPSBuZXcgQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICByYW5nZVtpXSA9IHN0YXJ0ICsgaSAqIHN0ZXA7XG4gIH1cblxuICByZXR1cm4gcmFuZ2U7XG59XG4iLCJpbXBvcnQge0ludGVybk1hcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgY29uc3QgaW1wbGljaXQgPSBTeW1ib2woXCJpbXBsaWNpdFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbCgpIHtcbiAgdmFyIGluZGV4ID0gbmV3IEludGVybk1hcCgpLFxuICAgICAgZG9tYWluID0gW10sXG4gICAgICByYW5nZSA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKGQpIHtcbiAgICBsZXQgaSA9IGluZGV4LmdldChkKTtcbiAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGQsIGkgPSBkb21haW4ucHVzaChkKSAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuZ2VbaSAlIHJhbmdlLmxlbmd0aF07XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW10sIGluZGV4ID0gbmV3IEludGVybk1hcCgpO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgXykge1xuICAgICAgaWYgKGluZGV4Lmhhcyh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgaW5kZXguc2V0KHZhbHVlLCBkb21haW4ucHVzaCh2YWx1ZSkgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbChkb21haW4sIHJhbmdlKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG4iLCJpbXBvcnQge3JhbmdlIGFzIHNlcXVlbmNlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgb3JkaW5hbCBmcm9tIFwiLi9vcmRpbmFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhbmQoKSB7XG4gIHZhciBzY2FsZSA9IG9yZGluYWwoKS51bmtub3duKHVuZGVmaW5lZCksXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW4sXG4gICAgICBvcmRpbmFsUmFuZ2UgPSBzY2FsZS5yYW5nZSxcbiAgICAgIHIwID0gMCxcbiAgICAgIHIxID0gMSxcbiAgICAgIHN0ZXAsXG4gICAgICBiYW5kd2lkdGgsXG4gICAgICByb3VuZCA9IGZhbHNlLFxuICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgIHBhZGRpbmdPdXRlciA9IDAsXG4gICAgICBhbGlnbiA9IDAuNTtcblxuICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gZG9tYWluKCkubGVuZ3RoLFxuICAgICAgICByZXZlcnNlID0gcjEgPCByMCxcbiAgICAgICAgc3RhcnQgPSByZXZlcnNlID8gcjEgOiByMCxcbiAgICAgICAgc3RvcCA9IHJldmVyc2UgPyByMCA6IHIxO1xuICAgIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDEsIG4gLSBwYWRkaW5nSW5uZXIgKyBwYWRkaW5nT3V0ZXIgKiAyKTtcbiAgICBpZiAocm91bmQpIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgIHN0YXJ0ICs9IChzdG9wIC0gc3RhcnQgLSBzdGVwICogKG4gLSBwYWRkaW5nSW5uZXIpKSAqIGFsaWduO1xuICAgIGJhbmR3aWR0aCA9IHN0ZXAgKiAoMSAtIHBhZGRpbmdJbm5lcik7XG4gICAgaWYgKHJvdW5kKSBzdGFydCA9IE1hdGgucm91bmQoc3RhcnQpLCBiYW5kd2lkdGggPSBNYXRoLnJvdW5kKGJhbmR3aWR0aCk7XG4gICAgdmFyIHZhbHVlcyA9IHNlcXVlbmNlKG4pLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiBzdGFydCArIHN0ZXAgKiBpOyB9KTtcbiAgICByZXR1cm4gb3JkaW5hbFJhbmdlKHJldmVyc2UgPyB2YWx1ZXMucmV2ZXJzZSgpIDogdmFsdWVzKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbcjAsIHIxXSA9IF8sIHIwID0gK3IwLCByMSA9ICtyMSwgcmVzY2FsZSgpKSA6IFtyMCwgcjFdO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIFtyMCwgcjFdID0gXywgcjAgPSArcjAsIHIxID0gK3IxLCByb3VuZCA9IHRydWUsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5iYW5kd2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYmFuZHdpZHRoO1xuICB9O1xuXG4gIHNjYWxlLnN0ZXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3RlcDtcbiAgfTtcblxuICBzY2FsZS5yb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEhXywgcmVzY2FsZSgpKSA6IHJvdW5kO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgcGFkZGluZ091dGVyID0gK18pLCByZXNjYWxlKCkpIDogcGFkZGluZ0lubmVyO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmdJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBNYXRoLm1pbigxLCBfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gK18sIHJlc2NhbGUoKSkgOiBwYWRkaW5nT3V0ZXI7XG4gIH07XG5cbiAgc2NhbGUuYWxpZ24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxpZ24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBhbGlnbjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmQoZG9tYWluKCksIFtyMCwgcjFdKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHJlc2NhbGUoKSwgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRpc2goc2NhbGUpIHtcbiAgdmFyIGNvcHkgPSBzY2FsZS5jb3B5O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nSW5uZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwb2ludGlzaChjb3B5KCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50KCkge1xuICByZXR1cm4gcG9pbnRpc2goYmFuZC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSk7XG59XG4iLCJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eShkb21haW4pIHtcbiAgdmFyIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiB4O1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gc2NhbGU7XG5cbiAgc2NhbGUuZG9tYWluID0gc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoZG9tYWluKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGRvbWFpbiA9IGFyZ3VtZW50cy5sZW5ndGggPyBBcnJheS5mcm9tKGRvbWFpbiwgbnVtYmVyKSA6IFswLCAxXTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5pY2UoZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImltcG9ydCB7dGlja3N9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFNwZWNpZmllcn0gZnJvbSBcImQzLWZvcm1hdFwiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZS5qc1wiO1xuaW1wb3J0IHtjb3B5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtTG9nKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1FeHAoeCkge1xuICByZXR1cm4gTWF0aC5leHAoeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxvZ24oeCkge1xuICByZXR1cm4gLU1hdGgubG9nKC14KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRXhwbih4KSB7XG4gIHJldHVybiAtTWF0aC5leHAoLXgpO1xufVxuXG5mdW5jdGlvbiBwb3cxMCh4KSB7XG4gIHJldHVybiBpc0Zpbml0ZSh4KSA/ICsoXCIxZVwiICsgeCkgOiB4IDwgMCA/IDAgOiB4O1xufVxuXG5mdW5jdGlvbiBwb3dwKGJhc2UpIHtcbiAgcmV0dXJuIGJhc2UgPT09IDEwID8gcG93MTBcbiAgICAgIDogYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5leHBcbiAgICAgIDogeCA9PiBNYXRoLnBvdyhiYXNlLCB4KTtcbn1cblxuZnVuY3Rpb24gbG9ncChiYXNlKSB7XG4gIHJldHVybiBiYXNlID09PSBNYXRoLkUgPyBNYXRoLmxvZ1xuICAgICAgOiBiYXNlID09PSAxMCAmJiBNYXRoLmxvZzEwXG4gICAgICB8fCBiYXNlID09PSAyICYmIE1hdGgubG9nMlxuICAgICAgfHwgKGJhc2UgPSBNYXRoLmxvZyhiYXNlKSwgeCA9PiBNYXRoLmxvZyh4KSAvIGJhc2UpO1xufVxuXG5mdW5jdGlvbiByZWZsZWN0KGYpIHtcbiAgcmV0dXJuICh4LCBrKSA9PiAtZigteCwgayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dnaXNoKHRyYW5zZm9ybSkge1xuICBjb25zdCBzY2FsZSA9IHRyYW5zZm9ybSh0cmFuc2Zvcm1Mb2csIHRyYW5zZm9ybUV4cCk7XG4gIGNvbnN0IGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcbiAgbGV0IGJhc2UgPSAxMDtcbiAgbGV0IGxvZ3M7XG4gIGxldCBwb3dzO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgbG9ncyA9IGxvZ3AoYmFzZSksIHBvd3MgPSBwb3dwKGJhc2UpO1xuICAgIGlmIChkb21haW4oKVswXSA8IDApIHtcbiAgICAgIGxvZ3MgPSByZWZsZWN0KGxvZ3MpLCBwb3dzID0gcmVmbGVjdChwb3dzKTtcbiAgICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm1Mb2duLCB0cmFuc2Zvcm1FeHBuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmb3JtKHRyYW5zZm9ybUxvZywgdHJhbnNmb3JtRXhwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgc2NhbGUuYmFzZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChiYXNlID0gK18sIHJlc2NhbGUoKSkgOiBiYXNlO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGNvdW50ID0+IHtcbiAgICBjb25zdCBkID0gZG9tYWluKCk7XG4gICAgbGV0IHUgPSBkWzBdO1xuICAgIGxldCB2ID0gZFtkLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHIgPSB2IDwgdTtcblxuICAgIGlmIChyKSAoW3UsIHZdID0gW3YsIHVdKTtcblxuICAgIGxldCBpID0gbG9ncyh1KTtcbiAgICBsZXQgaiA9IGxvZ3Modik7XG4gICAgbGV0IGs7XG4gICAgbGV0IHQ7XG4gICAgY29uc3QgbiA9IGNvdW50ID09IG51bGwgPyAxMCA6ICtjb3VudDtcbiAgICBsZXQgeiA9IFtdO1xuXG4gICAgaWYgKCEoYmFzZSAlIDEpICYmIGogLSBpIDwgbikge1xuICAgICAgaSA9IE1hdGguZmxvb3IoaSksIGogPSBNYXRoLmNlaWwoaik7XG4gICAgICBpZiAodSA+IDApIGZvciAoOyBpIDw9IGo7ICsraSkge1xuICAgICAgICBmb3IgKGsgPSAxOyBrIDwgYmFzZTsgKytrKSB7XG4gICAgICAgICAgdCA9IGkgPCAwID8gayAvIHBvd3MoLWkpIDogayAqIHBvd3MoaSk7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZvciAoOyBpIDw9IGo7ICsraSkge1xuICAgICAgICBmb3IgKGsgPSBiYXNlIC0gMTsgayA+PSAxOyAtLWspIHtcbiAgICAgICAgICB0ID0gaSA+IDAgPyBrIC8gcG93cygtaSkgOiBrICogcG93cyhpKTtcbiAgICAgICAgICBpZiAodCA8IHUpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICh0ID4gdikgYnJlYWs7XG4gICAgICAgICAgei5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoei5sZW5ndGggKiAyIDwgbikgeiA9IHRpY2tzKHUsIHYsIG4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ID0gdGlja3MoaSwgaiwgTWF0aC5taW4oaiAtIGksIG4pKS5tYXAocG93cyk7XG4gICAgfVxuICAgIHJldHVybiByID8gei5yZXZlcnNlKCkgOiB6O1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSAoY291bnQsIHNwZWNpZmllcikgPT4ge1xuICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuICAgIGlmIChzcGVjaWZpZXIgPT0gbnVsbCkgc3BlY2lmaWVyID0gYmFzZSA9PT0gMTAgPyBcInNcIiA6IFwiLFwiO1xuICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICghKGJhc2UgJSAxKSAmJiAoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikpLnByZWNpc2lvbiA9PSBudWxsKSBzcGVjaWZpZXIudHJpbSA9IHRydWU7XG4gICAgICBzcGVjaWZpZXIgPSBmb3JtYXQoc3BlY2lmaWVyKTtcbiAgICB9XG4gICAgaWYgKGNvdW50ID09PSBJbmZpbml0eSkgcmV0dXJuIHNwZWNpZmllcjtcbiAgICBjb25zdCBrID0gTWF0aC5tYXgoMSwgYmFzZSAqIGNvdW50IC8gc2NhbGUudGlja3MoKS5sZW5ndGgpOyAvLyBUT0RPIGZhc3QgZXN0aW1hdGU/XG4gICAgcmV0dXJuIGQgPT4ge1xuICAgICAgbGV0IGkgPSBkIC8gcG93cyhNYXRoLnJvdW5kKGxvZ3MoZCkpKTtcbiAgICAgIGlmIChpICogYmFzZSA8IGJhc2UgLSAwLjUpIGkgKj0gYmFzZTtcbiAgICAgIHJldHVybiBpIDw9IGsgPyBzcGVjaWZpZXIoZCkgOiBcIlwiO1xuICAgIH07XG4gIH07XG5cbiAgc2NhbGUubmljZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZG9tYWluKG5pY2UoZG9tYWluKCksIHtcbiAgICAgIGZsb29yOiB4ID0+IHBvd3MoTWF0aC5mbG9vcihsb2dzKHgpKSksXG4gICAgICBjZWlsOiB4ID0+IHBvd3MoTWF0aC5jZWlsKGxvZ3MoeCkpKVxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvZygpIHtcbiAgY29uc3Qgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcbiAgc2NhbGUuY29weSA9ICgpID0+IGNvcHkoc2NhbGUsIGxvZygpKS5iYXNlKHNjYWxlLmJhc2UoKSk7XG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhci5qc1wiO1xuaW1wb3J0IHtjb3B5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtU3ltbG9nKGMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5zaWduKHgpICogTWF0aC5sb2cxcChNYXRoLmFicyh4IC8gYykpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TeW1leHAoYykge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBNYXRoLnNpZ24oeCkgKiBNYXRoLmV4cG0xKE1hdGguYWJzKHgpKSAqIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzeW1sb2dpc2godHJhbnNmb3JtKSB7XG4gIHZhciBjID0gMSwgc2NhbGUgPSB0cmFuc2Zvcm0odHJhbnNmb3JtU3ltbG9nKGMpLCB0cmFuc2Zvcm1TeW1leHAoYykpO1xuXG4gIHNjYWxlLmNvbnN0YW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdHJhbnNmb3JtKHRyYW5zZm9ybVN5bWxvZyhjID0gK18pLCB0cmFuc2Zvcm1TeW1leHAoYykpIDogYztcbiAgfTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ltbG9nKCkge1xuICB2YXIgc2NhbGUgPSBzeW1sb2dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7Y29weSwgaWRlbnRpdHksIHRyYW5zZm9ybWVyfSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Qb3coZXhwb25lbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtTWF0aC5wb3coLXgsIGV4cG9uZW50KSA6IE1hdGgucG93KHgsIGV4cG9uZW50KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3FydCh4KSB7XG4gIHJldHVybiB4IDwgMCA/IC1NYXRoLnNxcnQoLXgpIDogTWF0aC5zcXJ0KHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TcXVhcmUoeCkge1xuICByZXR1cm4geCA8IDAgPyAteCAqIHggOiB4ICogeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvd2lzaCh0cmFuc2Zvcm0pIHtcbiAgdmFyIHNjYWxlID0gdHJhbnNmb3JtKGlkZW50aXR5LCBpZGVudGl0eSksXG4gICAgICBleHBvbmVudCA9IDE7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICByZXR1cm4gZXhwb25lbnQgPT09IDEgPyB0cmFuc2Zvcm0oaWRlbnRpdHksIGlkZW50aXR5KVxuICAgICAgICA6IGV4cG9uZW50ID09PSAwLjUgPyB0cmFuc2Zvcm0odHJhbnNmb3JtU3FydCwgdHJhbnNmb3JtU3F1YXJlKVxuICAgICAgICA6IHRyYW5zZm9ybSh0cmFuc2Zvcm1Qb3coZXhwb25lbnQpLCB0cmFuc2Zvcm1Qb3coMSAvIGV4cG9uZW50KSk7XG4gIH1cblxuICBzY2FsZS5leHBvbmVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHBvbmVudCA9ICtfLCByZXNjYWxlKCkpIDogZXhwb25lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvdygpIHtcbiAgdmFyIHNjYWxlID0gcG93aXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgcG93KCkpLmV4cG9uZW50KHNjYWxlLmV4cG9uZW50KCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcXJ0KCkge1xuICByZXR1cm4gcG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImltcG9ydCBjb250aW51b3VzIGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG5mdW5jdGlvbiBzcXVhcmUoeCkge1xuICByZXR1cm4gTWF0aC5zaWduKHgpICogeCAqIHg7XG59XG5cbmZ1bmN0aW9uIHVuc3F1YXJlKHgpIHtcbiAgcmV0dXJuIE1hdGguc2lnbih4KSAqIE1hdGguc3FydChNYXRoLmFicyh4KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhZGlhbCgpIHtcbiAgdmFyIHNxdWFyZWQgPSBjb250aW51b3VzKCksXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHJvdW5kID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICB2YXIgeSA9IHVuc3F1YXJlKHNxdWFyZWQoeCkpO1xuICAgIHJldHVybiBpc05hTih5KSA/IHVua25vd24gOiByb3VuZCA/IE1hdGgucm91bmQoeSkgOiB5O1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBzcXVhcmVkLmludmVydChzcXVhcmUoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzcXVhcmVkLmRvbWFpbihfKSwgc2NhbGUpIDogc3F1YXJlZC5kb21haW4oKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzcXVhcmVkLnJhbmdlKChyYW5nZSA9IEFycmF5LmZyb20oXywgbnVtYmVyKSkubWFwKHNxdWFyZSkpLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHNjYWxlLnJhbmdlKF8pLnJvdW5kKHRydWUpO1xuICB9O1xuXG4gIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISFfLCBzY2FsZSkgOiByb3VuZDtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzcXVhcmVkLmNsYW1wKF8pLCBzY2FsZSkgOiBzcXVhcmVkLmNsYW1wKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHJhZGlhbChzcXVhcmVkLmRvbWFpbigpLCByYW5nZSlcbiAgICAgICAgLnJvdW5kKHJvdW5kKVxuICAgICAgICAuY2xhbXAoc3F1YXJlZC5jbGFtcCgpKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IHBlcm11dGUgZnJvbSBcIi4vcGVybXV0ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0KHZhbHVlcywgLi4uRikge1xuICBpZiAodHlwZW9mIHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB2YWx1ZXMgPSBBcnJheS5mcm9tKHZhbHVlcyk7XG4gIGxldCBbZl0gPSBGO1xuICBpZiAoKGYgJiYgZi5sZW5ndGggIT09IDIpIHx8IEYubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGluZGV4ID0gVWludDMyQXJyYXkuZnJvbSh2YWx1ZXMsIChkLCBpKSA9PiBpKTtcbiAgICBpZiAoRi5sZW5ndGggPiAxKSB7XG4gICAgICBGID0gRi5tYXAoZiA9PiB2YWx1ZXMubWFwKGYpKTtcbiAgICAgIGluZGV4LnNvcnQoKGksIGopID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIEYpIHtcbiAgICAgICAgICBjb25zdCBjID0gYXNjZW5kaW5nRGVmaW5lZChmW2ldLCBmW2pdKTtcbiAgICAgICAgICBpZiAoYykgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmID0gdmFsdWVzLm1hcChmKTtcbiAgICAgIGluZGV4LnNvcnQoKGksIGopID0+IGFzY2VuZGluZ0RlZmluZWQoZltpXSwgZltqXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcGVybXV0ZSh2YWx1ZXMsIGluZGV4KTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLnNvcnQoY29tcGFyZURlZmluZWQoZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURlZmluZWQoY29tcGFyZSA9IGFzY2VuZGluZykge1xuICBpZiAoY29tcGFyZSA9PT0gYXNjZW5kaW5nKSByZXR1cm4gYXNjZW5kaW5nRGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBjb21wYXJlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb21wYXJlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICBjb25zdCB4ID0gY29tcGFyZShhLCBiKTtcbiAgICBpZiAoeCB8fCB4ID09PSAwKSByZXR1cm4geDtcbiAgICByZXR1cm4gKGNvbXBhcmUoYiwgYikgPT09IDApIC0gKGNvbXBhcmUoYSwgYSkgPT09IDApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kaW5nRGVmaW5lZChhLCBiKSB7XG4gIHJldHVybiAoYSA9PSBudWxsIHx8ICEoYSA+PSBhKSkgLSAoYiA9PSBudWxsIHx8ICEoYiA+PSBiKSkgfHwgKGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcbn1cbiIsImltcG9ydCB7YXNjZW5kaW5nRGVmaW5lZCwgY29tcGFyZURlZmluZWR9IGZyb20gXCIuL3NvcnQuanNcIjtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21vdXJuZXIvcXVpY2tzZWxlY3Rcbi8vIElTQyBsaWNlbnNlLCBDb3B5cmlnaHQgMjAxOCBWbGFkaW1pciBBZ2Fmb25raW4uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWlja3NlbGVjdChhcnJheSwgaywgbGVmdCA9IDAsIHJpZ2h0ID0gSW5maW5pdHksIGNvbXBhcmUpIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGxlZnQgPSBNYXRoLmZsb29yKE1hdGgubWF4KDAsIGxlZnQpKTtcbiAgcmlnaHQgPSBNYXRoLmZsb29yKE1hdGgubWluKGFycmF5Lmxlbmd0aCAtIDEsIHJpZ2h0KSk7XG5cbiAgaWYgKCEobGVmdCA8PSBrICYmIGsgPD0gcmlnaHQpKSByZXR1cm4gYXJyYXk7XG5cbiAgY29tcGFyZSA9IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IGFzY2VuZGluZ0RlZmluZWQgOiBjb21wYXJlRGVmaW5lZChjb21wYXJlKTtcblxuICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIHF1aWNrc2VsZWN0KGFycmF5LCBrLCBuZXdMZWZ0LCBuZXdSaWdodCwgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IGFycmF5W2tdO1xuICAgIGxldCBpID0gbGVmdDtcbiAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgc3dhcChhcnJheSwgbGVmdCwgayk7XG4gICAgaWYgKGNvbXBhcmUoYXJyYXlbcmlnaHRdLCB0KSA+IDApIHN3YXAoYXJyYXksIGxlZnQsIHJpZ2h0KTtcblxuICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgc3dhcChhcnJheSwgaSwgaiksICsraSwgLS1qO1xuICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyYXlbaV0sIHQpIDwgMCkgKytpO1xuICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyYXlbal0sIHQpID4gMCkgLS1qO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlKGFycmF5W2xlZnRdLCB0KSA9PT0gMCkgc3dhcChhcnJheSwgbGVmdCwgaik7XG4gICAgZWxzZSArK2osIHN3YXAoYXJyYXksIGosIHJpZ2h0KTtcblxuICAgIGlmIChqIDw9IGspIGxlZnQgPSBqICsgMTtcbiAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBzd2FwKGFycmF5LCBpLCBqKSB7XG4gIGNvbnN0IHQgPSBhcnJheVtpXTtcbiAgYXJyYXlbaV0gPSBhcnJheVtqXTtcbiAgYXJyYXlbal0gPSB0O1xufVxuIiwiaW1wb3J0IG1heCBmcm9tIFwiLi9tYXguanNcIjtcbmltcG9ydCBtYXhJbmRleCBmcm9tIFwiLi9tYXhJbmRleC5qc1wiO1xuaW1wb3J0IG1pbiBmcm9tIFwiLi9taW4uanNcIjtcbmltcG9ydCBtaW5JbmRleCBmcm9tIFwiLi9taW5JbmRleC5qc1wiO1xuaW1wb3J0IHF1aWNrc2VsZWN0IGZyb20gXCIuL3F1aWNrc2VsZWN0LmpzXCI7XG5pbXBvcnQgbnVtYmVyLCB7bnVtYmVyc30gZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge2FzY2VuZGluZ0RlZmluZWR9IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBncmVhdGVzdCBmcm9tIFwiLi9ncmVhdGVzdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFudGlsZSh2YWx1ZXMsIHAsIHZhbHVlb2YpIHtcbiAgdmFsdWVzID0gRmxvYXQ2NEFycmF5LmZyb20obnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpKTtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpIHx8IGlzTmFOKHAgPSArcCkpIHJldHVybjtcbiAgaWYgKHAgPD0gMCB8fCBuIDwgMikgcmV0dXJuIG1pbih2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gbWF4KHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gbWF4KHF1aWNrc2VsZWN0KHZhbHVlcywgaTApLnN1YmFycmF5KDAsIGkwICsgMSkpLFxuICAgICAgdmFsdWUxID0gbWluKHZhbHVlcy5zdWJhcnJheShpMCArIDEpKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFudGlsZVNvcnRlZCh2YWx1ZXMsIHAsIHZhbHVlb2YgPSBudW1iZXIpIHtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpIHx8IGlzTmFOKHAgPSArcCkpIHJldHVybjtcbiAgaWYgKHAgPD0gMCB8fCBuIDwgMikgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1swXSwgMCwgdmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuICt2YWx1ZW9mKHZhbHVlc1tuIC0gMV0sIG4gLSAxLCB2YWx1ZXMpO1xuICB2YXIgbixcbiAgICAgIGkgPSAobiAtIDEpICogcCxcbiAgICAgIGkwID0gTWF0aC5mbG9vcihpKSxcbiAgICAgIHZhbHVlMCA9ICt2YWx1ZW9mKHZhbHVlc1tpMF0sIGkwLCB2YWx1ZXMpLFxuICAgICAgdmFsdWUxID0gK3ZhbHVlb2YodmFsdWVzW2kwICsgMV0sIGkwICsgMSwgdmFsdWVzKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFudGlsZUluZGV4KHZhbHVlcywgcCwgdmFsdWVvZikge1xuICB2YWx1ZXMgPSBGbG9hdDY0QXJyYXkuZnJvbShudW1iZXJzKHZhbHVlcywgdmFsdWVvZikpO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gbWluSW5kZXgodmFsdWVzKTtcbiAgaWYgKHAgPj0gMSkgcmV0dXJuIG1heEluZGV4KHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IE1hdGguZmxvb3IoKG4gLSAxKSAqIHApLFxuICAgICAgb3JkZXIgPSAoaSwgaikgPT4gYXNjZW5kaW5nRGVmaW5lZCh2YWx1ZXNbaV0sIHZhbHVlc1tqXSksXG4gICAgICBpbmRleCA9IHF1aWNrc2VsZWN0KFVpbnQzMkFycmF5LmZyb20odmFsdWVzLCAoXywgaSkgPT4gaSksIGksIDAsIG4gLSAxLCBvcmRlcik7XG4gIHJldHVybiBncmVhdGVzdChpbmRleC5zdWJhcnJheSgwLCBpICsgMSksIGkgPT4gdmFsdWVzW2ldKTtcbn1cbiIsImltcG9ydCB7YXNjZW5kaW5nLCBiaXNlY3QsIHF1YW50aWxlU29ydGVkIGFzIHRocmVzaG9sZH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFudGlsZSgpIHtcbiAgdmFyIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgaSA9IDAsIG4gPSBNYXRoLm1heCgxLCByYW5nZS5sZW5ndGgpO1xuICAgIHRocmVzaG9sZHMgPSBuZXcgQXJyYXkobiAtIDEpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aHJlc2hvbGRzW2kgLSAxXSA9IHRocmVzaG9sZChkb21haW4sIGkgLyBuKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHJhbmdlW2Jpc2VjdCh0aHJlc2hvbGRzLCB4KV07XG4gIH1cblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl0gOiBbXG4gICAgICBpID4gMCA/IHRocmVzaG9sZHNbaSAtIDFdIDogZG9tYWluWzBdLFxuICAgICAgaSA8IHRocmVzaG9sZHMubGVuZ3RoID8gdGhyZXNob2xkc1tpXSA6IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV1cbiAgICBdO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXTtcbiAgICBmb3IgKGxldCBkIG9mIF8pIGlmIChkICE9IG51bGwgJiYgIWlzTmFOKGQgPSArZCkpIGRvbWFpbi5wdXNoKGQpO1xuICAgIGRvbWFpbi5zb3J0KGFzY2VuZGluZyk7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUucXVhbnRpbGVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRocmVzaG9sZHMuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHF1YW50aWxlKClcbiAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aXplKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgbiA9IDEsXG4gICAgICBkb21haW4gPSBbMC41XSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggIT0gbnVsbCAmJiB4IDw9IHggPyByYW5nZVtiaXNlY3QoZG9tYWluLCB4LCAwLCBuKV0gOiB1bmtub3duO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgaSA9IC0xO1xuICAgIGRvbWFpbiA9IG5ldyBBcnJheShuKTtcbiAgICB3aGlsZSAoKytpIDwgbikgZG9tYWluW2ldID0gKChpICsgMSkgKiB4MSAtIChpIC0gbikgKiB4MCkgLyAobiArIDEpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbeDAsIHgxXSA9IF8sIHgwID0gK3gwLCB4MSA9ICt4MSwgcmVzY2FsZSgpKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG4gPSAocmFuZ2UgPSBBcnJheS5mcm9tKF8pKS5sZW5ndGggLSAxLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl1cbiAgICAgICAgOiBpIDwgMSA/IFt4MCwgZG9tYWluWzBdXVxuICAgICAgICA6IGkgPj0gbiA/IFtkb21haW5bbiAtIDFdLCB4MV1cbiAgICAgICAgOiBbZG9tYWluW2kgLSAxXSwgZG9tYWluW2ldXTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS50aHJlc2hvbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcXVhbnRpemUoKVxuICAgICAgICAuZG9tYWluKFt4MCwgeDFdKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkobGluZWFyaXNoKHNjYWxlKSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRocmVzaG9sZCgpIHtcbiAgdmFyIGRvbWFpbiA9IFswLjVdLFxuICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICB1bmtub3duLFxuICAgICAgbiA9IDE7XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ICE9IG51bGwgJiYgeCA8PSB4ID8gcmFuZ2VbYmlzZWN0KGRvbWFpbiwgeCwgMCwgbildIDogdW5rbm93bjtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8pLCBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoIC0gMSksIHNjYWxlKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpIHtcbiAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgcmV0dXJuIFtkb21haW5baSAtIDFdLCBkb21haW5baV1dO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aHJlc2hvbGQoKVxuICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuIiwiaW1wb3J0IHtcbiAgdGltZURheSxcbiAgdGltZVN1bmRheSxcbiAgdGltZU1vbmRheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lWWVhcixcbiAgdXRjRGF5LFxuICB1dGNTdW5kYXksXG4gIHV0Y01vbmRheSxcbiAgdXRjVGh1cnNkYXksXG4gIHV0Y1llYXJcbn0gZnJvbSBcImQzLXRpbWVcIjtcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3RGF0ZSh5LCBtLCBkKSB7XG4gIHJldHVybiB7eTogeSwgbTogbSwgZDogZCwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdE1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogZm9ybWF0WWVhcklTTyxcbiAgICBcIkdcIjogZm9ybWF0RnVsbFllYXJJU08sXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcInFcIjogZm9ybWF0UXVhcnRlcixcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFVUQ1llYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdFVUQ0Z1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRVVENIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcbiAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRVVENNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRVVENQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFVUQ1F1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBwYXJzZU1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogcGFyc2VZZWFyLFxuICAgIFwiR1wiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcInFcIjogcGFyc2VRdWFydGVyLFxuICAgIFwiUVwiOiBwYXJzZVVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICBcInVcIjogcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IHBhcnNlV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBwYXJzZVdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IHBhcnNlTG9jYWxlRGF0ZSxcbiAgICBcIlhcIjogcGFyc2VMb2NhbGVUaW1lLFxuICAgIFwieVwiOiBwYXJzZVllYXIsXG4gICAgXCJZXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgXCJaXCI6IHBhcnNlWm9uZSxcbiAgICBcIiVcIjogcGFyc2VMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIC8vIFRoZXNlIHJlY3Vyc2l2ZSBkaXJlY3RpdmUgZGVmaW5pdGlvbnMgbXVzdCBiZSBkZWZlcnJlZC5cbiAgZm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgZm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIHV0Y0Zvcm1hdHMpO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIsIGZvcm1hdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgdmFyIHN0cmluZyA9IFtdLFxuICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICBqID0gMCxcbiAgICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgICBjLFxuICAgICAgICAgIHBhZCxcbiAgICAgICAgICBmb3JtYXQ7XG5cbiAgICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKTtcblxuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5jaGFyQ29kZUF0KGkpID09PSAzNykge1xuICAgICAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICAgICAgaWYgKChwYWQgPSBwYWRzW2MgPSBzcGVjaWZpZXIuY2hhckF0KCsraSldKSAhPSBudWxsKSBjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpO1xuICAgICAgICAgIGVsc2UgcGFkID0gYyA9PT0gXCJlXCIgPyBcIiBcIiA6IFwiMFwiO1xuICAgICAgICAgIGlmIChmb3JtYXQgPSBmb3JtYXRzW2NdKSBjID0gZm9ybWF0KGRhdGUsIHBhZCk7XG4gICAgICAgICAgc3RyaW5nLnB1c2goYyk7XG4gICAgICAgICAgaiA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICByZXR1cm4gc3RyaW5nLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5ld1BhcnNlKHNwZWNpZmllciwgWikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHZhciBkID0gbmV3RGF0ZSgxOTAwLCB1bmRlZmluZWQsIDEpLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKSxcbiAgICAgICAgICB3ZWVrLCBkYXk7XG4gICAgICBpZiAoaSAhPSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gSWYgYSBVTklYIHRpbWVzdGFtcCBpcyBzcGVjaWZpZWQsIHJldHVybiBpdC5cbiAgICAgIGlmIChcIlFcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5RKTtcbiAgICAgIGlmIChcInNcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5zICogMTAwMCArIChcIkxcIiBpbiBkID8gZC5MIDogMCkpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIHV0Y1BhcnNlLCBuZXZlciB1c2UgdGhlIGxvY2FsIHRpbWV6b25lLlxuICAgICAgaWYgKFogJiYgIShcIlpcIiBpbiBkKSkgZC5aID0gMDtcblxuICAgICAgLy8gVGhlIGFtLXBtIGZsYWcgaXMgMCBmb3IgQU0sIGFuZCAxIGZvciBQTS5cbiAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xuXG4gICAgICAvLyBJZiB0aGUgbW9udGggd2FzIG5vdCBzcGVjaWZpZWQsIGluaGVyaXQgZnJvbSB0aGUgcXVhcnRlci5cbiAgICAgIGlmIChkLm0gPT09IHVuZGVmaW5lZCkgZC5tID0gXCJxXCIgaW4gZCA/IGQucSA6IDA7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0RGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdGltZU1vbmRheS5jZWlsKHdlZWspIDogdGltZU1vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdGltZURheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0TW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldERhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXCJXXCIgaW4gZCB8fCBcIlVcIiBpbiBkKSB7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSBcInVcIiBpbiBkID8gZC51ICUgNyA6IFwiV1wiIGluIGQgPyAxIDogMDtcbiAgICAgICAgZGF5ID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXRVVENEYXkoKSA6IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldERheSgpO1xuICAgICAgICBkLm0gPSAwO1xuICAgICAgICBkLmQgPSBcIldcIiBpbiBkID8gKGQudyArIDYpICUgNyArIGQuVyAqIDcgLSAoZGF5ICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChkYXkgKyA2KSAlIDc7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGEgdGltZSB6b25lIGlzIHNwZWNpZmllZCwgYWxsIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRDIGFuZCB0aGVuXG4gICAgICAvLyBvZmZzZXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lLlxuICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgZC5IICs9IGQuWiAvIDEwMCB8IDA7XG4gICAgICAgIGQuTSArPSBkLlogJSAxMDA7XG4gICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGFsbCBmaWVsZHMgYXJlIGluIGxvY2FsIHRpbWUuXG4gICAgICByZXR1cm4gbG9jYWxEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0V2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gd2Vla2RheUxvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldE1vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1F1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRVVENNb250aCgpIC8gMyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgZm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGZhbHNlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgdHJ1ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXG4gICAgbnVtYmVyUmUgPSAvXlxccypcXGQrLywgLy8gbm90ZTogaWdub3JlcyBuZXh0IGRpcmVjdGl2ZVxuICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgcmVxdW90ZVJlID0gL1tcXFxcXiQqKz98W1xcXSgpLnt9XS9nO1xuXG5mdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XG4gIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVxdW90ZShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmUobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBNYXAobmFtZXMubWFwKChuYW1lLCBpKSA9PiBbbmFtZS50b0xvd2VyQ2FzZSgpLCBpXSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJJU08oZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5WID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVsbFllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDQpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdICsgKCtuWzBdID4gNjggPyAxOTAwIDogMjAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vab25lKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IC9eKFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVF1YXJ0ZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC5xID0gblswXSAqIDMgLSAzLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9udGhOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZk1vbnRoKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQubSA9IDAsIGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSG91cjI0KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWludXRlcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLk0gPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWxsaXNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWNyb3NlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gTWF0aC5mbG9vcihuWzBdIC8gMTAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaXRlcmFsUGVyY2VudChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBwZXJjZW50UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyBpICsgblswXS5sZW5ndGggOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQucyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdGltZURheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZElTTyhkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKHRpbWVUaHVyc2RheS5jb3VudCh0aW1lWWVhcihkKSwgZCkgKyAodGltZVllYXIoZCkuZ2V0RGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldERheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lTW9uZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFySVNPKGQsIHApIHtcbiAgZCA9IGRJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcbiAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcbiAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHV0Y0RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRvdyA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiBkb3cgPT09IDAgPyA3IDogZG93O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gVVRDZElTTyhkKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gVVRDZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh1dGNUaHVyc2RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSArICh1dGNZZWFyKGQpLmdldFVUQ0RheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXRVVENEYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjTW9uZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXJJU08oZCwgcCkge1xuICBkID0gVVRDZElTTyhkKTtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENab25lKCkge1xuICByZXR1cm4gXCIrMDAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXRlcmFsUGVyY2VudCgpIHtcbiAgcmV0dXJuIFwiJVwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wKGQpIHtcbiAgcmV0dXJuICtkO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyhkKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKCtkIC8gMTAwMCk7XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciB0aW1lRm9ybWF0O1xuZXhwb3J0IHZhciB0aW1lUGFyc2U7XG5leHBvcnQgdmFyIHV0Y0Zvcm1hdDtcbmV4cG9ydCB2YXIgdXRjUGFyc2U7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkYXRlVGltZTogXCIleCwgJVhcIixcbiAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXG4gIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXG4gIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcbiAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIHRpbWVGb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICB0aW1lUGFyc2UgPSBsb2NhbGUucGFyc2U7XG4gIHV0Y0Zvcm1hdCA9IGxvY2FsZS51dGNGb3JtYXQ7XG4gIHV0Y1BhcnNlID0gbG9jYWxlLnV0Y1BhcnNlO1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiaW1wb3J0IHt0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVUaWNrcywgdGltZVRpY2tJbnRlcnZhbH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dGltZUZvcm1hdH0gZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgbmljZSBmcm9tIFwiLi9uaWNlLmpzXCI7XG5cbmZ1bmN0aW9uIGRhdGUodCkge1xuICByZXR1cm4gbmV3IERhdGUodCk7XG59XG5cbmZ1bmN0aW9uIG51bWJlcih0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSA/ICt0IDogK25ldyBEYXRlKCt0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyKHRpY2tzLCB0aWNrSW50ZXJ2YWwsIHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cygpLFxuICAgICAgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0LFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHZhciBmb3JtYXRNaWxsaXNlY29uZCA9IGZvcm1hdChcIi4lTFwiKSxcbiAgICAgIGZvcm1hdFNlY29uZCA9IGZvcm1hdChcIjolU1wiKSxcbiAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgZm9ybWF0SG91ciA9IGZvcm1hdChcIiVJICVwXCIpLFxuICAgICAgZm9ybWF0RGF5ID0gZm9ybWF0KFwiJWEgJWRcIiksXG4gICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICBmb3JtYXRNb250aCA9IGZvcm1hdChcIiVCXCIpLFxuICAgICAgZm9ybWF0WWVhciA9IGZvcm1hdChcIiVZXCIpO1xuXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgIHJldHVybiAoc2Vjb25kKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbGxpc2Vjb25kXG4gICAgICAgIDogbWludXRlKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdFNlY29uZFxuICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgIDogZGF5KGRhdGUpIDwgZGF0ZSA/IGZvcm1hdEhvdXJcbiAgICAgICAgOiBtb250aChkYXRlKSA8IGRhdGUgPyAod2VlayhkYXRlKSA8IGRhdGUgPyBmb3JtYXREYXkgOiBmb3JtYXRXZWVrKVxuICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgOiBmb3JtYXRZZWFyKShkYXRlKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoaW52ZXJ0KHkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBkb21haW4oQXJyYXkuZnJvbShfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBpbnRlcnZhbCA9PSBudWxsID8gMTAgOiBpbnRlcnZhbCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICBpZiAoIWludGVydmFsIHx8IHR5cGVvZiBpbnRlcnZhbC5yYW5nZSAhPT0gXCJmdW5jdGlvblwiKSBpbnRlcnZhbCA9IHRpY2tJbnRlcnZhbChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGludGVydmFsID09IG51bGwgPyAxMCA6IGludGVydmFsKTtcbiAgICByZXR1cm4gaW50ZXJ2YWwgPyBkb21haW4obmljZShkLCBpbnRlcnZhbCkpIDogc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBjYWxlbmRhcih0aWNrcywgdGlja0ludGVydmFsLCB5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aW1lKCkge1xuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGNhbGVuZGFyKHRpbWVUaWNrcywgdGltZVRpY2tJbnRlcnZhbCwgdGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pLCBhcmd1bWVudHMpO1xufVxuIiwiaW1wb3J0IHt1dGNZZWFyLCB1dGNNb250aCwgdXRjV2VlaywgdXRjRGF5LCB1dGNIb3VyLCB1dGNNaW51dGUsIHV0Y1NlY29uZCwgdXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dXRjRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7Y2FsZW5kYXJ9IGZyb20gXCIuL3RpbWUuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHV0Y1RpbWUoKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y0Zvcm1hdCkuZG9tYWluKFtEYXRlLlVUQygyMDAwLCAwLCAxKSwgRGF0ZS5VVEMoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGUsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0SW50ZXJwb2xhdG9yfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5pbXBvcnQge2xvZ2dpc2h9IGZyb20gXCIuL2xvZy5qc1wiO1xuaW1wb3J0IHtzeW1sb2dpc2h9IGZyb20gXCIuL3N5bWxvZy5qc1wiO1xuaW1wb3J0IHtwb3dpc2h9IGZyb20gXCIuL3Bvdy5qc1wiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIHgwID0gMCxcbiAgICAgIHgxID0gMSxcbiAgICAgIHQwLFxuICAgICAgdDEsXG4gICAgICBrMTAsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eSxcbiAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4geCA9PSBudWxsIHx8IGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogaW50ZXJwb2xhdG9yKGsxMCA9PT0gMCA/IDAuNSA6ICh4ID0gKHRyYW5zZm9ybSh4KSAtIHQwKSAqIGsxMCwgY2xhbXAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB4KSkgOiB4KSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3gwLCB4MV0gPSBfLCB0MCA9IHRyYW5zZm9ybSh4MCA9ICt4MCksIHQxID0gdHJhbnNmb3JtKHgxID0gK3gxKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJhbmdlKGludGVycG9sYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKF8pIHtcbiAgICAgIHZhciByMCwgcjE7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbcjAsIHIxXSA9IF8sIGludGVycG9sYXRvciA9IGludGVycG9sYXRlKHIwLCByMSksIHNjYWxlKSA6IFtpbnRlcnBvbGF0b3IoMCksIGludGVycG9sYXRvcigxKV07XG4gICAgfTtcbiAgfVxuXG4gIHNjYWxlLnJhbmdlID0gcmFuZ2UoaW50ZXJwb2xhdGUpO1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSByYW5nZShpbnRlcnBvbGF0ZVJvdW5kKTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdDAgPSB0KHgwKSwgdDEgPSB0KHgxKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5pbnRlcnBvbGF0b3Ioc291cmNlLmludGVycG9sYXRvcigpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxuICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcXVlbnRpYWwoKSB7XG4gIHZhciBzY2FsZSA9IGxpbmVhcmlzaCh0cmFuc2Zvcm1lcigpKGlkZW50aXR5KSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzZXF1ZW50aWFsKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbExvZygpIHtcbiAgdmFyIHNjYWxlID0gbG9nZ2lzaCh0cmFuc2Zvcm1lcigpKS5kb21haW4oWzEsIDEwXSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzZXF1ZW50aWFsTG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxTeW1sb2coKSB7XG4gIHZhciBzY2FsZSA9IHN5bWxvZ2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxTeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsUG93KCkge1xuICB2YXIgc2NhbGUgPSBwb3dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBzZXF1ZW50aWFsUG93KCkpLmV4cG9uZW50KHNjYWxlLmV4cG9uZW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFNxcnQoKSB7XG4gIHJldHVybiBzZXF1ZW50aWFsUG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImltcG9ydCB7YXNjZW5kaW5nLCBiaXNlY3QsIHF1YW50aWxlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdEludGVycG9sYXRvcn0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXF1ZW50aWFsUXVhbnRpbGUoKSB7XG4gIHZhciBkb21haW4gPSBbXSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICBpZiAoeCAhPSBudWxsICYmICFpc05hTih4ID0gK3gpKSByZXR1cm4gaW50ZXJwb2xhdG9yKChiaXNlY3QoZG9tYWluLCB4LCAxKSAtIDEpIC8gKGRvbWFpbi5sZW5ndGggLSAxKSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW107XG4gICAgZm9yIChsZXQgZCBvZiBfKSBpZiAoZCAhPSBudWxsICYmICFpc05hTihkID0gK2QpKSBkb21haW4ucHVzaChkKTtcbiAgICBkb21haW4uc29ydChhc2NlbmRpbmcpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvbWFpbi5tYXAoKGQsIGkpID0+IGludGVycG9sYXRvcihpIC8gKGRvbWFpbi5sZW5ndGggLSAxKSkpO1xuICB9O1xuXG4gIHNjYWxlLnF1YW50aWxlcyA9IGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiBuICsgMX0sIChfLCBpKSA9PiBxdWFudGlsZShkb21haW4sIGkgLyBuKSk7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXF1ZW50aWFsUXVhbnRpbGUoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7ZGVmYXVsdCBhcyB2YWx1ZX0gZnJvbSBcIi4vdmFsdWUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGllY2V3aXNlKGludGVycG9sYXRlLCB2YWx1ZXMpIHtcbiAgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSB2YWx1ZXMgPSBpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGUgPSB2YWx1ZTtcbiAgdmFyIGkgPSAwLCBuID0gdmFsdWVzLmxlbmd0aCAtIDEsIHYgPSB2YWx1ZXNbMF0sIEkgPSBuZXcgQXJyYXkobiA8IDAgPyAwIDogbik7XG4gIHdoaWxlIChpIDwgbikgSVtpXSA9IGludGVycG9sYXRlKHYsIHYgPSB2YWx1ZXNbKytpXSk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICo9IG4pKSk7XG4gICAgcmV0dXJuIElbaV0odCAtIGkpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGVSb3VuZCwgcGllY2V3aXNlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdEludGVycG9sYXRvcn0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhci5qc1wiO1xuaW1wb3J0IHtsb2dnaXNofSBmcm9tIFwiLi9sb2cuanNcIjtcbmltcG9ydCB7Y29weX0gZnJvbSBcIi4vc2VxdWVudGlhbC5qc1wiO1xuaW1wb3J0IHtzeW1sb2dpc2h9IGZyb20gXCIuL3N5bWxvZy5qc1wiO1xuaW1wb3J0IHtwb3dpc2h9IGZyb20gXCIuL3Bvdy5qc1wiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIHgwID0gMCxcbiAgICAgIHgxID0gMC41LFxuICAgICAgeDIgPSAxLFxuICAgICAgcyA9IDEsXG4gICAgICB0MCxcbiAgICAgIHQxLFxuICAgICAgdDIsXG4gICAgICBrMTAsXG4gICAgICBrMjEsXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAoeCA9IDAuNSArICgoeCA9ICt0cmFuc2Zvcm0oeCkpIC0gdDEpICogKHMgKiB4IDwgcyAqIHQxID8gazEwIDogazIxKSwgaW50ZXJwb2xhdG9yKGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeCkpIDogeCkpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKFt4MCwgeDEsIHgyXSA9IF8sIHQwID0gdHJhbnNmb3JtKHgwID0gK3gwKSwgdDEgPSB0cmFuc2Zvcm0oeDEgPSAreDEpLCB0MiA9IHRyYW5zZm9ybSh4MiA9ICt4MiksIGsxMCA9IHQwID09PSB0MSA/IDAgOiAwLjUgLyAodDEgLSB0MCksIGsyMSA9IHQxID09PSB0MiA/IDAgOiAwLjUgLyAodDIgLSB0MSksIHMgPSB0MSA8IHQwID8gLTEgOiAxLCBzY2FsZSkgOiBbeDAsIHgxLCB4Ml07XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHNjYWxlKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmFuZ2UoaW50ZXJwb2xhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oXykge1xuICAgICAgdmFyIHIwLCByMSwgcjI7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbcjAsIHIxLCByMl0gPSBfLCBpbnRlcnBvbGF0b3IgPSBwaWVjZXdpc2UoaW50ZXJwb2xhdGUsIFtyMCwgcjEsIHIyXSksIHNjYWxlKSA6IFtpbnRlcnBvbGF0b3IoMCksIGludGVycG9sYXRvcigwLjUpLCBpbnRlcnBvbGF0b3IoMSldO1xuICAgIH07XG4gIH1cblxuICBzY2FsZS5yYW5nZSA9IHJhbmdlKGludGVycG9sYXRlKTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gcmFuZ2UoaW50ZXJwb2xhdGVSb3VuZCk7XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRyYW5zZm9ybSA9IHQsIHQwID0gdCh4MCksIHQxID0gdCh4MSksIHQyID0gdCh4MiksIGsxMCA9IHQwID09PSB0MSA/IDAgOiAwLjUgLyAodDEgLSB0MCksIGsyMSA9IHQxID09PSB0MiA/IDAgOiAwLjUgLyAodDIgLSB0MSksIHMgPSB0MSA8IHQwID8gLTEgOiAxO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGl2ZXJnaW5nKCkge1xuICB2YXIgc2NhbGUgPSBsaW5lYXJpc2godHJhbnNmb3JtZXIoKShpZGVudGl0eSkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMC4xLCAxLCAxMF0pO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nTG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ1N5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nU3ltbG9nKCkpLmNvbnN0YW50KHNjYWxlLmNvbnN0YW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nUG93KCkge1xuICB2YXIgc2NhbGUgPSBwb3dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdTcXJ0KCkge1xuICByZXR1cm4gZGl2ZXJnaW5nUG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVSYWRpYWxcbn0gZnJvbSBcIi4vcmFkaWFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmcuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7276\n')},94182:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "O": () => (/* binding */ initInterpolator),\n/* harmony export */ "o": () => (/* binding */ initRange)\n/* harmony export */ });\nfunction initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === "function") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === "function") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQxODIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBLGdDQUFnQztBQUNoQywrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanM/Y2I2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///94182\n')},85036:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Q": () => (/* binding */ linearish),\n/* harmony export */ "Z": () => (/* binding */ linear)\n/* harmony export */ });\n/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42193);\n/* harmony import */ var _continuous_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57953);\n/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94182);\n/* harmony import */ var _tickFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63093);\n\n\n\n\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return (0,d3_array__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP)(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return (0,_tickFormat_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__/* .tickIncrement */ .G9)(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nfunction linear() {\n var scale = (0,_continuous_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .ZP)();\n\n scale.copy = function() {\n return (0,_continuous_js__WEBPACK_IMPORTED_MODULE_2__/* .copy */ .JG)(scale, linear());\n };\n\n _init_js__WEBPACK_IMPORTED_MODULE_3__/* .initRange.apply */ .o.apply(scale, arguments);\n\n return linearish(scale);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwMzYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBOEM7QUFDRztBQUNiO0FBQ0s7O0FBRWxDO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLFdBQVcsOERBQUs7QUFDaEI7O0FBRUE7QUFDQTtBQUNBLFdBQVcsbUVBQVU7QUFDckI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUVBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFZTtBQUNmLGNBQWMsb0VBQVU7O0FBRXhCO0FBQ0EsV0FBVyw4REFBSTtBQUNmOztBQUVBLEVBQUUsb0VBQWU7O0FBRWpCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcz8yZjA5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IHRpY2tGb3JtYXQgZnJvbSBcIi4vdGlja0Zvcm1hdC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluZWFyaXNoKHNjYWxlKSB7XG4gIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja0Zvcm1hdChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50LCBzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuXG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICB2YXIgaTAgPSAwO1xuICAgIHZhciBpMSA9IGQubGVuZ3RoIC0gMTtcbiAgICB2YXIgc3RhcnQgPSBkW2kwXTtcbiAgICB2YXIgc3RvcCA9IGRbaTFdO1xuICAgIHZhciBwcmVzdGVwO1xuICAgIHZhciBzdGVwO1xuICAgIHZhciBtYXhJdGVyID0gMTA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG4gICAgXG4gICAgd2hpbGUgKG1heEl0ZXItLSA+IDApIHtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgICBpZiAoc3RlcCA9PT0gcHJlc3RlcCkge1xuICAgICAgICBkW2kwXSA9IHN0YXJ0XG4gICAgICAgIGRbaTFdID0gc3RvcFxuICAgICAgICByZXR1cm4gZG9tYWluKGQpO1xuICAgICAgfSBlbHNlIGlmIChzdGVwID4gMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByZXN0ZXAgPSBzdGVwO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVhcigpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cygpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbGluZWFyKCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///85036\n')},66938:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* binding */ number)\n/* harmony export */ });\nfunction number(x) {\n return +x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY5MzguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanM/YTQyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBudW1iZXIoeCkge1xuICByZXR1cm4gK3g7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66938\n')},63093:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ tickFormat)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-array/src/ticks.js\nvar ticks = __webpack_require__(42193);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/formatSpecifier.js\nvar formatSpecifier = __webpack_require__(71300);\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/exponent.js\nvar exponent = __webpack_require__(62898);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/precisionPrefix.js\n\n\n/* harmony default export */ function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor((0,exponent/* default */.Z)(value) / 3))) * 3 - (0,exponent/* default */.Z)(Math.abs(step)));\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/defaultLocale.js + 8 modules\nvar defaultLocale = __webpack_require__(10049);\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/precisionRound.js\n\n\n/* harmony default export */ function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, (0,exponent/* default */.Z)(max) - (0,exponent/* default */.Z)(step)) + 1;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/node_modules/d3-format/src/precisionFixed.js\n\n\n/* harmony default export */ function precisionFixed(step) {\n return Math.max(0, -(0,exponent/* default */.Z)(Math.abs(step)));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/tickFormat.js\n\n\n\nfunction tickFormat(start, stop, count, specifier) {\n var step = (0,ticks/* tickStep */.ly)(start, stop, count),\n precision;\n specifier = (0,formatSpecifier/* default */.Z)(specifier == null ? ",f" : specifier);\n switch (specifier.type) {\n case "s": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return (0,defaultLocale/* formatPrefix */.jH)(specifier, value);\n }\n case "":\n case "e":\n case "g":\n case "p":\n case "r": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");\n break;\n }\n case "f":\n case "%": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;\n break;\n }\n }\n return (0,defaultLocale/* format */.WU)(specifier);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMwOTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFxQzs7QUFFckMsNkJBQWUseUJBQVM7QUFDeEIseURBQXlELDJCQUFRLHFCQUFxQiwyQkFBUTtBQUM5Rjs7Ozs7QUNKcUM7O0FBRXJDLDZCQUFlLHdCQUFTO0FBQ3hCO0FBQ0EscUJBQXFCLDJCQUFRLFFBQVEsMkJBQVE7QUFDN0M7OztBQ0xxQzs7QUFFckMsNkJBQWUsd0JBQVM7QUFDeEIsc0JBQXNCLDJCQUFRO0FBQzlCOzs7QUNKa0M7QUFDK0U7O0FBRWxHO0FBQ2YsYUFBYSwwQkFBUTtBQUNyQjtBQUNBLGNBQWMsa0NBQWU7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsNERBQTRELGVBQWU7QUFDM0UsYUFBYSxzQ0FBWTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQsY0FBYztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxjQUFjO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLFNBQVMsZ0NBQU07QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanM/YmIwOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanM/MzBkMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanM/MTA1NiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanM/YjlkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdCwgZm9ybWF0UHJlZml4LCBmb3JtYXRTcGVjaWZpZXIsIHByZWNpc2lvbkZpeGVkLCBwcmVjaXNpb25QcmVmaXgsIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiZDMtZm9ybWF0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2tGb3JtYXQoc3RhcnQsIHN0b3AsIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLFxuICAgICAgcHJlY2lzaW9uO1xuICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xuICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgY2FzZSBcInNcIjoge1xuICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgIHJldHVybiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNhc2UgXCJcIjpcbiAgICBjYXNlIFwiZVwiOlxuICAgIGNhc2UgXCJnXCI6XG4gICAgY2FzZSBcInBcIjpcbiAgICBjYXNlIFwiclwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZcIjpcbiAgICBjYXNlIFwiJVwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25GaXhlZChzdGVwKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiJVwiKSAqIDI7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///63093\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-selection.ae4e048672ab4205.bundle.js b/assets/demo/site/npm.d3-selection.ae4e048672ab4205.bundle.js
new file mode 100644
index 00000000..5f8eafe0
--- /dev/null
+++ b/assets/demo/site/npm.d3-selection.ae4e048672ab4205.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[7531],{789:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73888);\n/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(31986);\n\n\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === _namespaces__WEBPACK_IMPORTED_MODULE_0__/* .xhtml */ .P && document.documentElement.namespaceURI === _namespaces__WEBPACK_IMPORTED_MODULE_0__/* .xhtml */ .P\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var fullname = (0,_namespace__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW9DO0FBQ0Q7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHVEQUFLLDhDQUE4Qyx1REFBSztBQUMzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUFlLG9DQUFTO0FBQ3hCLGlCQUFpQiwrREFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanM/NGI1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZVwiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///789\n')},14469:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Eb": () => (/* reexport */ point/* default */.Z),\n "Ue": () => (/* reexport */ create),\n "Du": () => (/* reexport */ creator/* default */.Z),\n "_H": () => (/* reexport */ on/* customEvent */._H),\n "B": () => (/* reexport */ on/* event */.B),\n "I_": () => (/* reexport */ local),\n "C2": () => (/* reexport */ matcher/* default */.Z),\n "Jz": () => (/* reexport */ mouse/* default */.Z),\n "uD": () => (/* reexport */ namespace/* default */.Z),\n "aC": () => (/* reexport */ namespaces/* default */.Z),\n "Ys": () => (/* reexport */ src_select/* default */.Z),\n "td": () => (/* reexport */ selectAll),\n "f_": () => (/* reexport */ selection/* default */.ZP),\n "nZ": () => (/* reexport */ selector/* default */.Z),\n "UK": () => (/* reexport */ selectorAll/* default */.Z),\n "oB": () => (/* reexport */ style/* styleValue */.S),\n "Fq": () => (/* reexport */ touch/* default */.Z),\n "W4": () => (/* reexport */ touches),\n "u9": () => (/* reexport */ src_window/* default */.Z)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/creator.js\nvar creator = __webpack_require__(789);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/select.js\nvar src_select = __webpack_require__(94017);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/create.js\n\n\n\n/* harmony default export */ function create(name) {\n return (0,src_select/* default */.Z)((0,creator/* default */.Z)(name).call(document.documentElement));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/local.js\nvar nextId = 0;\n\nfunction local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = "@" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/matcher.js\nvar matcher = __webpack_require__(3083);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/mouse.js\nvar mouse = __webpack_require__(43095);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/namespace.js\nvar namespace = __webpack_require__(73888);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/namespaces.js\nvar namespaces = __webpack_require__(31986);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/point.js\nvar point = __webpack_require__(14103);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/index.js + 31 modules\nvar selection = __webpack_require__(21334);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selectAll.js\n\n\n/* harmony default export */ function selectAll(selector) {\n return typeof selector === "string"\n ? new selection/* Selection */.Y1([document.querySelectorAll(selector)], [document.documentElement])\n : new selection/* Selection */.Y1([selector == null ? [] : selector], selection/* root */.Jz);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selector.js\nvar selector = __webpack_require__(82634);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selectorAll.js\nvar selectorAll = __webpack_require__(3545);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/style.js\nvar style = __webpack_require__(49986);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/touch.js\nvar touch = __webpack_require__(24793);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/sourceEvent.js\nvar sourceEvent = __webpack_require__(45553);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/touches.js\n\n\n\n/* harmony default export */ function touches(node, touches) {\n if (touches == null) touches = (0,sourceEvent/* default */.Z)().touches;\n\n for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n points[i] = (0,point/* default */.Z)(node, touches[i]);\n }\n\n return points;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/window.js\nvar src_window = __webpack_require__(85021);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/on.js\nvar on = __webpack_require__(25109);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQ0NjkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBZ0M7QUFDRjs7QUFFOUIsNkJBQWUsZ0JBQVM7QUFDeEIsU0FBUyw2QkFBTSxDQUFDLDBCQUFPO0FBQ3ZCOzs7QUNMQTs7QUFFZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzFCa0Q7O0FBRWxELDZCQUFlLG1CQUFTO0FBQ3hCO0FBQ0EsWUFBWSwyQkFBUztBQUNyQixZQUFZLDJCQUFTLHFDQUFxQyxzQkFBSTtBQUM5RDs7Ozs7Ozs7Ozs7OztBQ053QztBQUNaOztBQUU1Qiw2QkFBZSxpQkFBUztBQUN4QixpQ0FBaUMsOEJBQVc7O0FBRTVDLDJFQUEyRSxPQUFPO0FBQ2xGLGdCQUFnQix3QkFBSztBQUNyQjs7QUFFQTtBQUNBOzs7Ozs7O0FDWDJDO0FBQ0U7QUFDSjtBQUNJO0FBQ0o7QUFDUTtBQUNFO0FBQ0o7QUFDSjtBQUNNO0FBQ007QUFDUjtBQUNNO0FBQ0M7QUFDYjtBQUNJO0FBQ0Y7QUFDTyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0ZS5qcz83OTQ4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2xvY2FsLmpzP2FlOTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0QWxsLmpzPzA5NGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvdG91Y2hlcy5qcz82MDg4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzPzA0ZWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4vY3JlYXRvclwiO1xuaW1wb3J0IHNlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0KGNyZWF0b3IobmFtZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKTtcbn1cbiIsInZhciBuZXh0SWQgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2NhbCgpIHtcbiAgcmV0dXJuIG5ldyBMb2NhbDtcbn1cblxuZnVuY3Rpb24gTG9jYWwoKSB7XG4gIHRoaXMuXyA9IFwiQFwiICsgKCsrbmV4dElkKS50b1N0cmluZygzNik7XG59XG5cbkxvY2FsLnByb3RvdHlwZSA9IGxvY2FsLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IExvY2FsLFxuICBnZXQ6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgaWQgPSB0aGlzLl87XG4gICAgd2hpbGUgKCEoaWQgaW4gbm9kZSkpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gICAgcmV0dXJuIG5vZGVbaWRdO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKG5vZGUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIG5vZGVbdGhpcy5fXSA9IHZhbHVlO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fIGluIG5vZGUgJiYgZGVsZXRlIG5vZGVbdGhpcy5fXTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbc2VsZWN0b3IgPT0gbnVsbCA/IFtdIDogc2VsZWN0b3JdLCByb290KTtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudFwiO1xuaW1wb3J0IHBvaW50IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHRvdWNoZXMpIHtcbiAgaWYgKHRvdWNoZXMgPT0gbnVsbCkgdG91Y2hlcyA9IHNvdXJjZUV2ZW50KCkudG91Y2hlcztcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHBvaW50cyA9IG5ldyBBcnJheShuKTsgaSA8IG47ICsraSkge1xuICAgIHBvaW50c1tpXSA9IHBvaW50KG5vZGUsIHRvdWNoZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHBvaW50cztcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjcmVhdGV9IGZyb20gXCIuL2NyZWF0ZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0b3J9IGZyb20gXCIuL2NyZWF0b3JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsb2NhbH0gZnJvbSBcIi4vbG9jYWxcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXRjaGVyfSBmcm9tIFwiLi9tYXRjaGVyXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbW91c2V9IGZyb20gXCIuL21vdXNlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmFtZXNwYWNlfSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2VzfSBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY2xpZW50UG9pbnR9IGZyb20gXCIuL3BvaW50XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0fSBmcm9tIFwiLi9zZWxlY3RcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3RBbGx9IGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdGlvbn0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0b3J9IGZyb20gXCIuL3NlbGVjdG9yXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0b3JBbGx9IGZyb20gXCIuL3NlbGVjdG9yQWxsXCI7XG5leHBvcnQge3N0eWxlVmFsdWUgYXMgc3R5bGV9IGZyb20gXCIuL3NlbGVjdGlvbi9zdHlsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRvdWNofSBmcm9tIFwiLi90b3VjaFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRvdWNoZXN9IGZyb20gXCIuL3RvdWNoZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB3aW5kb3d9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHtldmVudCwgY3VzdG9tRXZlbnR9IGZyb20gXCIuL3NlbGVjdGlvbi9vblwiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14469\n')},3083:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4My5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanM/ZmIwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3083\n')},43095:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45553);\n/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14103);\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) {\n var event = (0,_sourceEvent__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)();\n if (event.changedTouches) event = event.changedTouches[0];\n return (0,_point__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(node, event);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwOTUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7QUFDWjs7QUFFNUIsNkJBQWUsb0NBQVM7QUFDeEIsY0FBYyxpRUFBVztBQUN6QjtBQUNBLFNBQVMsMkRBQUs7QUFDZCIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21vdXNlLmpzP2U0MzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICB2YXIgZXZlbnQgPSBzb3VyY2VFdmVudCgpO1xuICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///43095\n')},73888:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(31986);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) {\n var prefix = name += "", i = prefix.indexOf(":");\n if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);\n return _namespaces__WEBPACK_IMPORTED_MODULE_0__/* ["default"].hasOwnProperty */ .Z.hasOwnProperty(prefix) ? {space: _namespaces__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z[prefix], local: name} : name;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM4ODguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFzQzs7QUFFdEMsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBLFNBQVMsMEZBQXlCLFlBQVksT0FBTyw0REFBVSx1QkFBdUI7QUFDdEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanM/ZjgyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73888\n')},31986:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "P": () => (/* binding */ xhtml),\n/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar xhtml = "http://www.w3.org/1999/xhtml";\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n svg: "http://www.w3.org/2000/svg",\n xhtml: xhtml,\n xlink: "http://www.w3.org/1999/xlink",\n xml: "http://www.w3.org/XML/1998/namespace",\n xmlns: "http://www.w3.org/2000/xmlns/"\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE5ODYuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPOztBQUVQLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanM/MGQwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31986\n')},14103:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxMDMuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50LmpzP2NkMjUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgZXZlbnQpIHtcbiAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgfVxuXG4gIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14103\n')},94017:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21334);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return typeof selector === "string"\n ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__/* .Selection */ .Y1([[document.querySelector(selector)]], [document.documentElement])\n : new _selection_index__WEBPACK_IMPORTED_MODULE_0__/* .Selection */ .Y1([[selector]], _selection_index__WEBPACK_IMPORTED_MODULE_0__/* .root */ .Jz);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQwMTcuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFrRDs7QUFFbEQsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQSxZQUFZLGlFQUFTO0FBQ3JCLFlBQVksaUVBQVMsZUFBZSw0REFBSTtBQUN4QyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdC5qcz8wZTRhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///94017\n')},21334:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Y1": () => (/* binding */ Selection),\n "ZP": () => (/* binding */ src_selection),\n "Jz": () => (/* binding */ root)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selector.js\nvar selector = __webpack_require__(82634);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/select.js\n\n\n\n/* harmony default export */ function selection_select(select) {\n if (typeof select !== "function") select = (0,selector/* default */.Z)(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if ("__data__" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selectorAll.js\nvar selectorAll = __webpack_require__(3545);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectAll.js\n\n\n\n/* harmony default export */ function selectAll(select) {\n if (typeof select !== "function") select = (0,selectorAll/* default */.Z)(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/matcher.js\nvar matcher = __webpack_require__(3083);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/filter.js\n\n\n\n/* harmony default export */ function filter(match) {\n if (typeof match !== "function") match = (0,matcher/* default */.Z)(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sparse.js\n/* harmony default export */ function sparse(update) {\n return new Array(update.length);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/enter.js\n\n\n\n/* harmony default export */ function enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nfunction EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/data.js\n\n\n\n\nvar keyPrefix = "$"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\n/* harmony default export */ function data(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== "function") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/exit.js\n\n\n\n/* harmony default export */ function exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/join.js\n/* harmony default export */ function join(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/merge.js\n\n\n/* harmony default export */ function merge(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/order.js\n/* harmony default export */ function order() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sort.js\n\n\n/* harmony default export */ function sort(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/call.js\n/* harmony default export */ function call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/nodes.js\n/* harmony default export */ function nodes() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/node.js\n/* harmony default export */ function node() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/size.js\n/* harmony default export */ function size() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/empty.js\n/* harmony default export */ function empty() {\n return !this.node();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/each.js\n/* harmony default export */ function each(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/namespace.js\nvar namespace = __webpack_require__(73888);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/attr.js\n\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\n/* harmony default export */ function attr(name, value) {\n var fullname = (0,namespace/* default */.Z)(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/style.js\nvar style = __webpack_require__(49986);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/property.js\nfunction propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\n/* harmony default export */ function property(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === "function"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/classed.js\nfunction classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute("class") || "");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute("class", this._names.join(" "));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute("class", this._names.join(" "));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\n/* harmony default export */ function classed(name, value) {\n var names = classArray(name + "");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === "function"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/text.js\nfunction textRemove() {\n this.textContent = "";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? "" : v;\n };\n}\n\n/* harmony default export */ function selection_text(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === "function"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/html.js\nfunction htmlRemove() {\n this.innerHTML = "";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? "" : v;\n };\n}\n\n/* harmony default export */ function html(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === "function"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/raise.js\nfunction raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\n/* harmony default export */ function selection_raise() {\n return this.each(raise);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/lower.js\nfunction lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\n/* harmony default export */ function selection_lower() {\n return this.each(lower);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/creator.js\nvar creator = __webpack_require__(789);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/append.js\n\n\n/* harmony default export */ function append(name) {\n var create = typeof name === "function" ? name : (0,creator/* default */.Z)(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/insert.js\n\n\n\nfunction constantNull() {\n return null;\n}\n\n/* harmony default export */ function insert(name, before) {\n var create = typeof name === "function" ? name : (0,creator/* default */.Z)(name),\n select = before == null ? constantNull : typeof before === "function" ? before : (0,selector/* default */.Z)(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/remove.js\nfunction remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\n/* harmony default export */ function selection_remove() {\n return this.each(remove);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/clone.js\nfunction selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\n/* harmony default export */ function clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/datum.js\n/* harmony default export */ function datum(value) {\n return arguments.length\n ? this.property("__data__", value)\n : this.node().__data__;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/on.js\nvar on = __webpack_require__(25109);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/window.js\nvar src_window = __webpack_require__(85021);\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/dispatch.js\n\n\nfunction dispatchEvent(node, type, params) {\n var window = (0,src_window/* default */.Z)(node),\n event = window.CustomEvent;\n\n if (typeof event === "function") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent("Event");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function dispatch(type, params) {\n return this.each((typeof params === "function"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar root = [null];\n\nfunction Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selectAll,\n filter: filter,\n data: data,\n enter: enter,\n exit: exit,\n join: join,\n merge: merge,\n order: order,\n sort: sort,\n call: call,\n nodes: nodes,\n node: node,\n size: size,\n empty: empty,\n each: each,\n attr: attr,\n style: style/* default */.Z,\n property: property,\n classed: classed,\n text: selection_text,\n html: html,\n raise: selection_raise,\n lower: selection_lower,\n append: append,\n insert: insert,\n remove: selection_remove,\n clone: clone,\n datum: datum,\n on: on/* default */.ZP,\n dispatch: dispatch\n};\n\n/* harmony default export */ const src_selection = (selection);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQVMsb0JBQWU7QUFDeEIsWUFBWSxRQUFrQjtBQUM5QixXQUFXLE9BQWlCO0FBQzVCLFFBQVEsY0FBYztBQUN0QixRQUFRLElBQWM7QUFDdEIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsZUFBZTtBQUN4QixVQUFVLE1BQWdCO0FBQzFCLFVBQVUsTUFBZ0I7QUFDMUIsVUFBVSxnQkFBZ0I7QUFDMUIsU0FBUyxLQUFlO0FBQ3hCLFNBQVMsS0FBZTtBQUN4QixNQUFNLGtCQUFZO0FBQ2xCLFlBQVksUUFBa0I7QUFDOUI7O0FBRUEsb0RBQWUsU0FBUyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcz80OGNkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanM/NTAwMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzPzU5MTAiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcz81NmM5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcz85M2E3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzP2U0NWYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanM/M2QxZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcz82MTI3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzP2Q2ZjciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzP2UzNDIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzPzc1MmUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanM/MDhlMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcz80NmFmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcz8xNGJmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzPzM1M2MiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanM/YzU0MSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanM/MmNlOCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcz83NWE1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzPzM4YzgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzPzhjYjQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanM/ZDJjNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcz9hNTQxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzP2ZmODEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzP2M4N2QiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzPzk5NTkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcz83OTQ2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanM/Y2Y2MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzPzQxYTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzPzY4YzEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzP2I3MTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Rpc3BhdGNoLmpzPzk1ZjMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzPzUxNTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2VsZWN0b3JBbGwgZnJvbSBcIi4uL3NlbGVjdG9yQWxsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHBhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50XCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0ge30sXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZXNbaV1dID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSB2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cyksXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcbiAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XG4gICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XG4gICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xuICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICByZXR1cm4gdXBkYXRlO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgZW50ZXIgPSB0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiID8gb25lbnRlcihlbnRlcikgOiBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rpb24pIHtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xuICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHNvcnRncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNvcnRncm91cFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRncm91cC5zb3J0KGNvbXBhcmVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMF07XG4gIGFyZ3VtZW50c1swXSA9IHRoaXM7XG4gIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyA9IG5ldyBBcnJheSh0aGlzLnNpemUoKSksIGkgPSAtMTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyBub2Rlc1srK2ldID0gdGhpczsgfSk7XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyArK3NpemU7IH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2VcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fam9pbiBmcm9tIFwiLi9qb2luXCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmRcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Nsb25lIGZyb20gXCIuL2Nsb25lXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXG4gIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxuICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXG4gIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxuICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXG4gIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gIG9uOiBzZWxlY3Rpb25fb24sXG4gIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2hcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21334\n')},25109:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "B": () => (/* binding */ event),\n/* harmony export */ "ZP": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ "_H": () => (/* binding */ customEvent)\n/* harmony export */ });\nvar filterEvents = {};\n\nvar event = null;\n\nif (typeof document !== "undefined") {\n var element = document.documentElement;\n if (!("onmouseenter" in element)) {\n filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = "", i = t.indexOf(".");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(typename, value, capture) {\n var typenames = parseTypenames(typename + ""), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nfunction customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUxMDkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JELDZCQUE2QixPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzPzg2M2MiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGZpbHRlckV2ZW50cyA9IHt9O1xuXG5leHBvcnQgdmFyIGV2ZW50ID0gbnVsbDtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKCEoXCJvbm1vdXNlZW50ZXJcIiBpbiBlbGVtZW50KSkge1xuICAgIGZpbHRlckV2ZW50cyA9IHttb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLCBtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCJ9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbHRlckNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XG4gIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApO1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgaWYgKCFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0aGlzICYmICEocmVsYXRlZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSAmIDgpKSkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQxKSB7XG4gICAgdmFyIGV2ZW50MCA9IGV2ZW50OyAvLyBFdmVudHMgY2FuIGJlIHJlZW50cmFudCAoZS5nLiwgZm9jdXMpLlxuICAgIGV2ZW50ID0gZXZlbnQxO1xuICAgIHRyeSB7XG4gICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHRoaXMuX19kYXRhX18sIGluZGV4LCBncm91cCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV2ZW50ID0gZXZlbnQwO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25SZW1vdmUodHlwZW5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbjtcbiAgICBpZiAoIW9uKSByZXR1cm47XG4gICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblsrK2ldID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLl9fb247XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uQWRkKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgd3JhcCA9IGZpbHRlckV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlbmFtZS50eXBlKSA/IGZpbHRlckNvbnRleHRMaXN0ZW5lciA6IGNvbnRleHRMaXN0ZW5lcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQsIGksIGdyb3VwKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uLCBvLCBsaXN0ZW5lciA9IHdyYXAodmFsdWUsIGksIGdyb3VwKTtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAoKG8gPSBvbltqXSkudHlwZSA9PT0gdHlwZW5hbWUudHlwZSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciA9IGxpc3RlbmVyLCBvLmNhcHR1cmUgPSBjYXB0dXJlKTtcbiAgICAgICAgby52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlbmFtZS50eXBlLCBsaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgbyA9IHt0eXBlOiB0eXBlbmFtZS50eXBlLCBuYW1lOiB0eXBlbmFtZS5uYW1lLCB2YWx1ZTogdmFsdWUsIGxpc3RlbmVyOiBsaXN0ZW5lciwgY2FwdHVyZTogY2FwdHVyZX07XG4gICAgaWYgKCFvbikgdGhpcy5fX29uID0gW29dO1xuICAgIGVsc2Ugb24ucHVzaChvKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gIHZhciB0eXBlbmFtZXMgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIpLCBpLCBuID0gdHlwZW5hbWVzLmxlbmd0aCwgdDtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgb24gPSB0aGlzLm5vZGUoKS5fX29uO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKHQgPSB0eXBlbmFtZXNbaV0pLnR5cGUgPT09IG8udHlwZSAmJiB0Lm5hbWUgPT09IG8ubmFtZSkge1xuICAgICAgICAgIHJldHVybiBvLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIG9uID0gdmFsdWUgPyBvbkFkZCA6IG9uUmVtb3ZlO1xuICBpZiAoY2FwdHVyZSA9PSBudWxsKSBjYXB0dXJlID0gZmFsc2U7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBjYXB0dXJlKSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRXZlbnQoZXZlbnQxLCBsaXN0ZW5lciwgdGhhdCwgYXJncykge1xuICB2YXIgZXZlbnQwID0gZXZlbnQ7XG4gIGV2ZW50MS5zb3VyY2VFdmVudCA9IGV2ZW50O1xuICBldmVudCA9IGV2ZW50MTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlzdGVuZXIuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0gZmluYWxseSB7XG4gICAgZXZlbnQgPSBldmVudDA7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///25109\n')},49986:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "S": () => (/* binding */ styleValue),\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(85021);\n\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === "function"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? "" : priority))\n : styleValue(this.node(), name);\n}\n\nfunction styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || (0,_window__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk5ODYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0EsU0FBUyw0REFBVztBQUNwQiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcz82NWM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93XCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49986\n')},82634:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction none() {}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI2MzQuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcz9hNGFiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///82634\n')},3545:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction empty() {\n return [];\n}\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU0NS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcz9mYTRiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3545\n')},45553:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25109);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n var current = _selection_on__WEBPACK_IMPORTED_MODULE_0__/* .event */ .B, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1NTMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFxQzs7QUFFckMsNkJBQWUsc0NBQVc7QUFDMUIsZ0JBQWdCLHlEQUFLO0FBQ3JCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzP2IzOTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtldmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY3VycmVudCA9IGV2ZW50LCBzb3VyY2U7XG4gIHdoaWxlIChzb3VyY2UgPSBjdXJyZW50LnNvdXJjZUV2ZW50KSBjdXJyZW50ID0gc291cmNlO1xuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45553\n')},24793:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45553);\n/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14103);\n\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = (0,_sourceEvent__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return (0,_point__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(node, touch);\n }\n }\n\n return null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ3OTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0M7QUFDWjs7QUFFNUIsNkJBQWUsb0NBQVM7QUFDeEIsNERBQTRELGlFQUFXOztBQUV2RSwyREFBMkQsT0FBTztBQUNsRTtBQUNBLGFBQWEsMkRBQUs7QUFDbEI7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvdG91Y2guanM/NGU3NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc291cmNlRXZlbnQgZnJvbSBcIi4vc291cmNlRXZlbnRcIjtcbmltcG9ydCBwb2ludCBmcm9tIFwiLi9wb2ludFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCB0b3VjaGVzLCBpZGVudGlmaWVyKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgaWRlbnRpZmllciA9IHRvdWNoZXMsIHRvdWNoZXMgPSBzb3VyY2VFdmVudCgpLmNoYW5nZWRUb3VjaGVzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gdG91Y2hlcyA/IHRvdWNoZXMubGVuZ3RoIDogMCwgdG91Y2g7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKHRvdWNoID0gdG91Y2hlc1tpXSkuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIHRvdWNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24793\n')},85021:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwMjEuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQWUsb0NBQVM7QUFDeEI7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcz9hNjA3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///85021\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-shape.e768dc5d4b7c1861.bundle.js b/assets/demo/site/npm.d3-shape.e768dc5d4b7c1861.bundle.js
new file mode 100644
index 00000000..97c8c0d5
--- /dev/null
+++ b/assets/demo/site/npm.d3-shape.e768dc5d4b7c1861.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[6094],{30201:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Nb": () => (/* reexport */ arc),\n "SO": () => (/* reexport */ src_area),\n "am": () => (/* reexport */ areaRadial),\n "$0": () => (/* reexport */ basis),\n "Dt": () => (/* reexport */ basisClosed),\n "WQ": () => (/* reexport */ basisOpen),\n "tF": () => (/* reexport */ bundle),\n "YY": () => (/* reexport */ cardinal),\n "Ov": () => (/* reexport */ cardinalClosed),\n "dC": () => (/* reexport */ cardinalOpen),\n "zg": () => (/* reexport */ catmullRom),\n "fG": () => (/* reexport */ catmullRomClosed),\n "$m": () => (/* reexport */ catmullRomOpen),\n "c_": () => (/* reexport */ linear),\n "fx": () => (/* reexport */ linearClosed),\n "Fd": () => (/* reexport */ monotoneX),\n "ak": () => (/* reexport */ monotoneY),\n "Sx": () => (/* reexport */ natural),\n "eA": () => (/* reexport */ step),\n "js": () => (/* reexport */ stepAfter),\n "iJ": () => (/* reexport */ stepBefore),\n "jv": () => (/* reexport */ line),\n "XB": () => (/* reexport */ src_lineRadial),\n "h5": () => (/* reexport */ linkHorizontal),\n "M4": () => (/* reexport */ linkRadial),\n "rR": () => (/* reexport */ linkVertical),\n "ve": () => (/* reexport */ pie),\n "Hs": () => (/* reexport */ pointRadial),\n "N1": () => (/* reexport */ areaRadial),\n "aJ": () => (/* reexport */ src_lineRadial),\n "kn": () => (/* reexport */ stack),\n "W$": () => (/* reexport */ diverging),\n "pB": () => (/* reexport */ expand),\n "HL": () => (/* reexport */ none),\n "Ku": () => (/* reexport */ silhouette),\n "YG": () => (/* reexport */ wiggle),\n "mG": () => (/* reexport */ appearance),\n "$K": () => (/* reexport */ ascending),\n "IX": () => (/* reexport */ order_descending),\n "FP": () => (/* reexport */ insideOut),\n "Qx": () => (/* reexport */ order_none),\n "cY": () => (/* reexport */ reverse),\n "NA": () => (/* reexport */ symbol),\n "JF": () => (/* reexport */ circle),\n "tJ": () => (/* reexport */ cross),\n "rZ": () => (/* reexport */ diamond),\n "m_": () => (/* reexport */ square),\n "Hm": () => (/* reexport */ star),\n "P6": () => (/* reexport */ triangle),\n "n3": () => (/* reexport */ wye),\n "uH": () => (/* reexport */ symbols)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-path/src/path.js\nvar path = __webpack_require__(11108);\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/constant.js\n/* harmony default export */ function constant(x) {\n return function constant() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/math.js\nvar abs = Math.abs;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar max = Math.max;\nvar min = Math.min;\nvar sin = Math.sin;\nvar sqrt = Math.sqrt;\n\nvar epsilon = 1e-12;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar tau = 2 * pi;\n\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/arc.js\n\n\n\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\n/* harmony default export */ function arc() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = (0,path/* default */.Z)();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + "" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/linear.js\nfunction Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\n/* harmony default export */ function linear(context) {\n return new Linear(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/point.js\nfunction point_x(p) {\n return p[0];\n}\n\nfunction point_y(p) {\n return p[1];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/line.js\n\n\n\n\n\n/* harmony default export */ function line() {\n var x = point_x,\n y = point_y,\n defined = constant(true),\n context = null,\n curve = linear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = (0,path/* default */.Z)());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + "" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/area.js\n\n\n\n\n\n\n/* harmony default export */ function src_area() {\n var x0 = point_x,\n x1 = null,\n y0 = constant(0),\n y1 = point_y,\n defined = constant(true),\n context = null,\n curve = linear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = (0,path/* default */.Z)());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + "" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/descending.js\n/* harmony default export */ function descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/identity.js\n/* harmony default export */ function identity(d) {\n return d;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/pie.js\n\n\n\n\n\n/* harmony default export */ function pie() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data\'s order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/radial.js\n\n\nvar curveRadialLinear = curveRadial(linear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nfunction curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/lineRadial.js\n\n\n\nfunction lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\n/* harmony default export */ function src_lineRadial() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/areaRadial.js\n\n\n\n\n/* harmony default export */ function areaRadial() {\n var a = src_area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/pointRadial.js\n/* harmony default export */ function pointRadial(x, y) {\n return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/array.js\nvar slice = Array.prototype.slice;\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/link/index.js\n\n\n\n\n\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link_link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = point_x,\n y = point_y,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = (0,path/* default */.Z)();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + "" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction link_curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nfunction linkHorizontal() {\n return link_link(curveHorizontal);\n}\n\nfunction linkVertical() {\n return link_link(curveVertical);\n}\n\nfunction linkRadial() {\n var l = link_link(link_curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/circle.js\n\n\n/* harmony default export */ const circle = ({\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/cross.js\n/* harmony default export */ const cross = ({\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/diamond.js\nvar tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\n/* harmony default export */ const diamond = ({\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/star.js\n\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\n/* harmony default export */ const star = ({\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/square.js\n/* harmony default export */ const square = ({\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/triangle.js\nvar sqrt3 = Math.sqrt(3);\n\n/* harmony default export */ const triangle = ({\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol/wye.js\nvar c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\n/* harmony default export */ const wye = ({\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/symbol.js\n\n\n\n\n\n\n\n\n\n\nvar symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n/* harmony default export */ function symbol() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = (0,path/* default */.Z)();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + "" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === "function" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === "function" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/noop.js\n/* harmony default export */ function noop() {}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/basis.js\nfunction point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nfunction Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\n/* harmony default export */ function basis(context) {\n return new Basis(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/basisClosed.js\n\n\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\n/* harmony default export */ function basisClosed(context) {\n return new BasisClosed(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/basisOpen.js\n\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\n/* harmony default export */ function basisOpen(context) {\n return new BasisOpen(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/bundle.js\n\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n/* harmony default export */ const bundle = ((function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/cardinal.js\nfunction cardinal_point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nfunction Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: cardinal_point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: cardinal_point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const cardinal = ((function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/cardinalClosed.js\n\n\n\nfunction CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: cardinal_point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const cardinalClosed = ((function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/cardinalOpen.js\n\n\nfunction CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: cardinal_point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const cardinalOpen = ((function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/catmullRom.js\n\n\n\nfunction catmullRom_point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: catmullRom_point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const catmullRom = ((function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/catmullRomClosed.js\n\n\n\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: catmullRom_point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const catmullRomClosed = ((function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/catmullRomOpen.js\n\n\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: catmullRom_point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\n/* harmony default export */ const catmullRomOpen = ((function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5));\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/linearClosed.js\n\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\n/* harmony default export */ function linearClosed(context) {\n return new LinearClosed(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/monotone.js\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// "you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".\nfunction monotone_point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: monotone_point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; monotone_point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: monotone_point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nfunction monotoneX(context) {\n return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n return new MonotoneY(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/natural.js\nfunction Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\n/* harmony default export */ function natural(context) {\n return new Natural(context);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/step.js\nfunction Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\n/* harmony default export */ function step(context) {\n return new Step(context, 0.5);\n}\n\nfunction stepBefore(context) {\n return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n return new Step(context, 1);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/offset/none.js\n/* harmony default export */ function none(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/order/none.js\n/* harmony default export */ function order_none(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/stack.js\n\n\n\n\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\n/* harmony default export */ function stack() {\n var keys = constant([]),\n order = order_none,\n offset = none,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === "function" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? order_none : typeof _ === "function" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? none : _, stack) : offset;\n };\n\n return stack;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/offset/expand.js\n\n\n/* harmony default export */ function expand(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/offset/diverging.js\n/* harmony default export */ function diverging(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/offset/silhouette.js\n\n\n/* harmony default export */ function silhouette(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/offset/wiggle.js\n\n\n/* harmony default export */ function wiggle(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/order/appearance.js\n\n\n/* harmony default export */ function appearance(series) {\n var peaks = series.map(peak);\n return order_none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n return j;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/order/ascending.js\n\n\n/* harmony default export */ function ascending(series) {\n var sums = series.map(sum);\n return order_none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nfunction sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/order/descending.js\n\n\n/* harmony default export */ function order_descending(series) {\n return ascending(series).reverse();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/order/insideOut.js\n\n\n\n/* harmony default export */ function insideOut(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(sum),\n order = appearance(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/order/reverse.js\n\n\n/* harmony default export */ function reverse(series) {\n return order_none(series).reverse();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/index.js\n\n\n\n\n // Note: radialArea is deprecated!\n // Note: radialLine is deprecated!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0QsQ0FBQztBQUN0QjtBQUNpQjs7QUFFbEI7QUFDSTtBQUNGO0FBQ0k7QUFDRjtBQUNKO0FBQ1E7QUFDVjs7QUFFYztBQUNKO0FBQ1I7QUFDRTtBQUNnQjtBQUNKO0FBQ1I7QUFDZ0I7QUFDSjtBQUNSO0FBQ0k7QUFDWjtBQUNvQztBQUNsQztBQUNzRDs7QUFFckU7QUFDb0I7QUFDTTtBQUNWO0FBQ1k7QUFDUjtBQUNNO0FBQ0Y7QUFDRTtBQUNGO0FBQ1Y7QUFDTSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY29uc3RhbnQuanM/NTJhOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL21hdGguanM/ZDJmZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyYy5qcz8yZTRjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyLmpzP2JjNTEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcz84NWQ0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluZS5qcz8zZTI0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJlYS5qcz8zOTc0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvZGVzY2VuZGluZy5qcz85OGE4Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaWRlbnRpdHkuanM/YzNkNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcz85NTM1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvcmFkaWFsLmpzPzhiNTYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lUmFkaWFsLmpzPzY0MGQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhUmFkaWFsLmpzPzNlMDciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludFJhZGlhbC5qcz9jNDZjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJyYXkuanM/ZmE0MSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmsvaW5kZXguanM/ZTBlOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jaXJjbGUuanM/Zjg2ZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jcm9zcy5qcz9hNDA0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2RpYW1vbmQuanM/YmMyMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9zdGFyLmpzPzU0MDUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3F1YXJlLmpzPzE1OTQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUuanM/ZmZjZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC93eWUuanM/OWNmYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC5qcz8wN2I2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbm9vcC5qcz9jNDNkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanM/MWZlNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzQ2xvc2VkLmpzPzE2NjQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc09wZW4uanM/ZGE2ZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcz82ODg3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWwuanM/N2M1NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzPzMxMjciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanM/ZjU3ZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb20uanM/YzZlYyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanM/MjQyMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21PcGVuLmpzPzg5NDgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXJDbG9zZWQuanM/YzIyNSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL21vbm90b25lLmpzPzk0NWMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzP2M4ZTMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9zdGVwLmpzP2VkMzgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcz9kMWUyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvbm9uZS5qcz83OWI0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3RhY2suanM/MzNmZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9leHBhbmQuanM/NTgyNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9kaXZlcmdpbmcuanM/YWM5NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9zaWxob3VldHRlLmpzPzViNTQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvd2lnZ2xlLmpzP2QyMjQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hcHBlYXJhbmNlLmpzP2ExODIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vcmRlci9hc2NlbmRpbmcuanM/YTM1ZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2Rlc2NlbmRpbmcuanM/ZjQ3YiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2luc2lkZU91dC5qcz8xODMxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvcmV2ZXJzZS5qcz9iNmMxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaW5kZXguanM/ZDZjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTEyO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gMiAqIHBpO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNvcyh4KSB7XG4gIHJldHVybiB4ID4gMSA/IDAgOiB4IDwgLTEgPyBwaSA6IE1hdGguYWNvcyh4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzaW4oeCkge1xuICByZXR1cm4geCA+PSAxID8gaGFsZlBpIDogeCA8PSAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWJzLCBhY29zLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIG1heCwgbWluLCBwaSwgc2luLCBzcXJ0LCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcblxuZnVuY3Rpb24gYXJjSW5uZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5pbm5lclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjT3V0ZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5vdXRlclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjU3RhcnRBbmdsZShkKSB7XG4gIHJldHVybiBkLnN0YXJ0QW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY0VuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY1BhZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQgJiYgZC5wYWRBbmdsZTsgLy8gTm90ZTogb3B0aW9uYWwhXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHgxMCA9IHgxIC0geDAsIHkxMCA9IHkxIC0geTAsXG4gICAgICB4MzIgPSB4MyAtIHgyLCB5MzIgPSB5MyAtIHkyLFxuICAgICAgdCA9IHkzMiAqIHgxMCAtIHgzMiAqIHkxMDtcbiAgaWYgKHQgKiB0IDwgZXBzaWxvbikgcmV0dXJuO1xuICB0ID0gKHgzMiAqICh5MCAtIHkyKSAtIHkzMiAqICh4MCAtIHgyKSkgLyB0O1xuICByZXR1cm4gW3gwICsgdCAqIHgxMCwgeTAgKyB0ICogeTEwXTtcbn1cblxuLy8gQ29tcHV0ZSBwZXJwZW5kaWN1bGFyIG9mZnNldCBsaW5lIG9mIGxlbmd0aCByYy5cbi8vIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vQ2lyY2xlLUxpbmVJbnRlcnNlY3Rpb24uaHRtbFxuZnVuY3Rpb24gY29ybmVyVGFuZ2VudHMoeDAsIHkwLCB4MSwgeTEsIHIxLCByYywgY3cpIHtcbiAgdmFyIHgwMSA9IHgwIC0geDEsXG4gICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgbG8gPSAoY3cgPyByYyA6IC1yYykgLyBzcXJ0KHgwMSAqIHgwMSArIHkwMSAqIHkwMSksXG4gICAgICBveCA9IGxvICogeTAxLFxuICAgICAgb3kgPSAtbG8gKiB4MDEsXG4gICAgICB4MTEgPSB4MCArIG94LFxuICAgICAgeTExID0geTAgKyBveSxcbiAgICAgIHgxMCA9IHgxICsgb3gsXG4gICAgICB5MTAgPSB5MSArIG95LFxuICAgICAgeDAwID0gKHgxMSArIHgxMCkgLyAyLFxuICAgICAgeTAwID0gKHkxMSArIHkxMCkgLyAyLFxuICAgICAgZHggPSB4MTAgLSB4MTEsXG4gICAgICBkeSA9IHkxMCAtIHkxMSxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICByID0gcjEgLSByYyxcbiAgICAgIEQgPSB4MTEgKiB5MTAgLSB4MTAgKiB5MTEsXG4gICAgICBkID0gKGR5IDwgMCA/IC0xIDogMSkgKiBzcXJ0KG1heCgwLCByICogciAqIGQyIC0gRCAqIEQpKSxcbiAgICAgIGN4MCA9IChEICogZHkgLSBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTAgPSAoLUQgKiBkeCAtIGR5ICogZCkgLyBkMixcbiAgICAgIGN4MSA9IChEICogZHkgKyBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTEgPSAoLUQgKiBkeCArIGR5ICogZCkgLyBkMixcbiAgICAgIGR4MCA9IGN4MCAtIHgwMCxcbiAgICAgIGR5MCA9IGN5MCAtIHkwMCxcbiAgICAgIGR4MSA9IGN4MSAtIHgwMCxcbiAgICAgIGR5MSA9IGN5MSAtIHkwMDtcblxuICAvLyBQaWNrIHRoZSBjbG9zZXIgb2YgdGhlIHR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAvLyBUT0RPIElzIHRoZXJlIGEgZmFzdGVyIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggaW50ZXJzZWN0aW9uIHRvIHVzZT9cbiAgaWYgKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSkgY3gwID0gY3gxLCBjeTAgPSBjeTE7XG5cbiAgcmV0dXJuIHtcbiAgICBjeDogY3gwLFxuICAgIGN5OiBjeTAsXG4gICAgeDAxOiAtb3gsXG4gICAgeTAxOiAtb3ksXG4gICAgeDExOiBjeDAgKiAocjEgLyByIC0gMSksXG4gICAgeTExOiBjeTAgKiAocjEgLyByIC0gMSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpbm5lclJhZGl1cyA9IGFyY0lubmVyUmFkaXVzLFxuICAgICAgb3V0ZXJSYWRpdXMgPSBhcmNPdXRlclJhZGl1cyxcbiAgICAgIGNvcm5lclJhZGl1cyA9IGNvbnN0YW50KDApLFxuICAgICAgcGFkUmFkaXVzID0gbnVsbCxcbiAgICAgIHN0YXJ0QW5nbGUgPSBhcmNTdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUgPSBhcmNFbmRBbmdsZSxcbiAgICAgIHBhZEFuZ2xlID0gYXJjUGFkQW5nbGUsXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBhcmMoKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgcixcbiAgICAgICAgcjAgPSAraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcjEgPSArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgZGEgPSBhYnMoYTEgLSBhMCksXG4gICAgICAgIGN3ID0gYTEgPiBhMDtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdXRlciByYWRpdXMgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBpbm5lciByYWRpdXMuXG4gICAgaWYgKHIxIDwgcjApIHIgPSByMSwgcjEgPSByMCwgcjAgPSByO1xuXG4gICAgLy8gSXMgaXQgYSBwb2ludD9cbiAgICBpZiAoIShyMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbygwLCAwKTtcblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY2xlIG9yIGFubnVsdXM/XG4gICAgZWxzZSBpZiAoZGEgPiB0YXUgLSBlcHNpbG9uKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhyMSAqIGNvcyhhMCksIHIxICogc2luKGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAsIGExLCAhY3cpO1xuICAgICAgaWYgKHIwID4gZXBzaWxvbikge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhyMCAqIGNvcyhhMSksIHIwICogc2luKGExKSk7XG4gICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMSwgYTAsIGN3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmN1bGFyIG9yIGFubnVsYXIgc2VjdG9yP1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGEwMSA9IGEwLFxuICAgICAgICAgIGExMSA9IGExLFxuICAgICAgICAgIGEwMCA9IGEwLFxuICAgICAgICAgIGExMCA9IGExLFxuICAgICAgICAgIGRhMCA9IGRhLFxuICAgICAgICAgIGRhMSA9IGRhLFxuICAgICAgICAgIGFwID0gcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAvIDIsXG4gICAgICAgICAgcnAgPSAoYXAgPiBlcHNpbG9uKSAmJiAocGFkUmFkaXVzID8gK3BhZFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3FydChyMCAqIHIwICsgcjEgKiByMSkpLFxuICAgICAgICAgIHJjID0gbWluKGFicyhyMSAtIHIwKSAvIDIsICtjb3JuZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgICAgcmMwID0gcmMsXG4gICAgICAgICAgcmMxID0gcmMsXG4gICAgICAgICAgdDAsXG4gICAgICAgICAgdDE7XG5cbiAgICAgIC8vIEFwcGx5IHBhZGRpbmc/IE5vdGUgdGhhdCBzaW5jZSByMSDiiaUgcjAsIGRhMSDiiaUgZGEwLlxuICAgICAgaWYgKHJwID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgcDAgPSBhc2luKHJwIC8gcjAgKiBzaW4oYXApKSxcbiAgICAgICAgICAgIHAxID0gYXNpbihycCAvIHIxICogc2luKGFwKSk7XG4gICAgICAgIGlmICgoZGEwIC09IHAwICogMikgPiBlcHNpbG9uKSBwMCAqPSAoY3cgPyAxIDogLTEpLCBhMDAgKz0gcDAsIGExMCAtPSBwMDtcbiAgICAgICAgZWxzZSBkYTAgPSAwLCBhMDAgPSBhMTAgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgICBpZiAoKGRhMSAtPSBwMSAqIDIpID4gZXBzaWxvbikgcDEgKj0gKGN3ID8gMSA6IC0xKSwgYTAxICs9IHAxLCBhMTEgLT0gcDE7XG4gICAgICAgIGVsc2UgZGExID0gMCwgYTAxID0gYTExID0gKGEwICsgYTEpIC8gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHgwMSA9IHIxICogY29zKGEwMSksXG4gICAgICAgICAgeTAxID0gcjEgKiBzaW4oYTAxKSxcbiAgICAgICAgICB4MTAgPSByMCAqIGNvcyhhMTApLFxuICAgICAgICAgIHkxMCA9IHIwICogc2luKGExMCk7XG5cbiAgICAgIC8vIEFwcGx5IHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGlmIChyYyA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHgxMSA9IHIxICogY29zKGExMSksXG4gICAgICAgICAgICB5MTEgPSByMSAqIHNpbihhMTEpLFxuICAgICAgICAgICAgeDAwID0gcjAgKiBjb3MoYTAwKSxcbiAgICAgICAgICAgIHkwMCA9IHIwICogc2luKGEwMCksXG4gICAgICAgICAgICBvYztcblxuICAgICAgICAvLyBSZXN0cmljdCB0aGUgY29ybmVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNlY3RvciBhbmdsZS5cbiAgICAgICAgaWYgKGRhIDwgcGkgJiYgKG9jID0gaW50ZXJzZWN0KHgwMSwgeTAxLCB4MDAsIHkwMCwgeDExLCB5MTEsIHgxMCwgeTEwKSkpIHtcbiAgICAgICAgICB2YXIgYXggPSB4MDEgLSBvY1swXSxcbiAgICAgICAgICAgICAgYXkgPSB5MDEgLSBvY1sxXSxcbiAgICAgICAgICAgICAgYnggPSB4MTEgLSBvY1swXSxcbiAgICAgICAgICAgICAgYnkgPSB5MTEgLSBvY1sxXSxcbiAgICAgICAgICAgICAga2MgPSAxIC8gc2luKGFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChzcXJ0KGF4ICogYXggKyBheSAqIGF5KSAqIHNxcnQoYnggKiBieCArIGJ5ICogYnkpKSkgLyAyKSxcbiAgICAgICAgICAgICAgbGMgPSBzcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtcbiAgICAgICAgICByYzAgPSBtaW4ocmMsIChyMCAtIGxjKSAvIChrYyAtIDEpKTtcbiAgICAgICAgICByYzEgPSBtaW4ocmMsIChyMSAtIGxjKSAvIChrYyArIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJcyB0aGUgc2VjdG9yIGNvbGxhcHNlZCB0byBhIGxpbmU/XG4gICAgICBpZiAoIShkYTEgPiBlcHNpbG9uKSkgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIG91dGVyIHJpbmcgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzEgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDAwLCB5MDAsIHgwMSwgeTAxLCByMSwgcmMxLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDExLCB5MTEsIHgxMCwgeTEwLCByMSwgcmMxLCBjdyk7XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8odDAuY3ggKyB0MC54MDEsIHQwLmN5ICsgdDAueTAxKTtcblxuICAgICAgICAvLyBIYXZlIHRoZSBjb3JuZXJzIG1lcmdlZD9cbiAgICAgICAgaWYgKHJjMSA8IHJjKSBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMSwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkcmF3IHRoZSB0d28gY29ybmVycyBhbmQgdGhlIHJpbmcuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQwLnkxMSwgdDAueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYXRhbjIodDAuY3kgKyB0MC55MTEsIHQwLmN4ICsgdDAueDExKSwgYXRhbjIodDEuY3kgKyB0MS55MTEsIHQxLmN4ICsgdDEueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMSwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIG91dGVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpLCBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAxLCBhMTEsICFjdyk7XG5cbiAgICAgIC8vIElzIHRoZXJlIG5vIGlubmVyIHJpbmcsIGFuZCBpdOKAmXMgYSBjaXJjdWxhciBzZWN0b3I/XG4gICAgICAvLyBPciBwZXJoYXBzIGl04oCZcyBhbiBhbm51bGFyIHNlY3RvciBjb2xsYXBzZWQgZHVlIHRvIHBhZGRpbmc/XG4gICAgICBpZiAoIShyMCA+IGVwc2lsb24pIHx8ICEoZGEwID4gZXBzaWxvbikpIGNvbnRleHQubGluZVRvKHgxMCwgeTEwKTtcblxuICAgICAgLy8gRG9lcyB0aGUgc2VjdG9y4oCZcyBpbm5lciByaW5nIChvciBwb2ludCkgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDEwLCB5MTAsIHgxMSwgeTExLCByMCwgLXJjMCwgY3cpO1xuICAgICAgICB0MSA9IGNvcm5lclRhbmdlbnRzKHgwMSwgeTAxLCB4MDAsIHkwMCwgcjAsIC1yYzAsIGN3KTtcblxuICAgICAgICBjb250ZXh0LmxpbmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMwIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMwLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCBjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmModDEuY3gsIHQxLmN5LCByYzAsIGF0YW4yKHQxLnkxMSwgdDEueDExKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIGlzIHRoZSBpbm5lciByaW5nIGp1c3QgYSBjaXJjdWxhciBhcmM/XG4gICAgICBlbHNlIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMTAsIGEwMCwgY3cpO1xuICAgIH1cblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGFyYy5jZW50cm9pZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gKCtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMixcbiAgICAgICAgYSA9ICgrc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK2VuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMiAtIHBpIC8gMjtcbiAgICByZXR1cm4gW2NvcyhhKSAqIHIsIHNpbihhKSAqIHJdO1xuICB9O1xuXG4gIGFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogaW5uZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLm91dGVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG91dGVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBvdXRlclJhZGl1cztcbiAgfTtcblxuICBhcmMuY29ybmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvcm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogY29ybmVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5wYWRSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkUmFkaXVzID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgYXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBhcmMucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8pLCBhcmMpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gYXJjO1xufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgZGVmaW5lZCA9IGNvbnN0YW50KHRydWUpLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBjdXJ2ZSA9IGN1cnZlTGluZWFyLFxuICAgICAgb3V0cHV0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBsaW5lKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBkLFxuICAgICAgICBkZWZpbmVkMCA9IGZhbHNlLFxuICAgICAgICBidWZmZXI7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgIGVsc2Ugb3V0cHV0LmxpbmVFbmQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZpbmVkMCkgb3V0cHV0LnBvaW50KCt4KGQsIGksIGRhdGEpLCAreShkLCBpLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIG91dHB1dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGxpbmUueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeDtcbiAgfTtcblxuICBsaW5lLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHk7XG4gIH07XG5cbiAgbGluZS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGxpbmUpIDogZGVmaW5lZDtcbiAgfTtcblxuICBsaW5lLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGxpbmUpIDogY3VydmU7XG4gIH07XG5cbiAgbGluZS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBsaW5lKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmU7XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCBsaW5lIGZyb20gXCIuL2xpbmUuanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHgwID0gcG9pbnRYLFxuICAgICAgeDEgPSBudWxsLFxuICAgICAgeTAgPSBjb25zdGFudCgwKSxcbiAgICAgIHkxID0gcG9pbnRZLFxuICAgICAgZGVmaW5lZCA9IGNvbnN0YW50KHRydWUpLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBjdXJ2ZSA9IGN1cnZlTGluZWFyLFxuICAgICAgb3V0cHV0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBhcmVhKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgaixcbiAgICAgICAgayxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBkLFxuICAgICAgICBkZWZpbmVkMCA9IGZhbHNlLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIHgweiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgeTB6ID0gbmV3IEFycmF5KG4pO1xuXG4gICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgb3V0cHV0ID0gY3VydmUoYnVmZmVyID0gcGF0aCgpKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgKytpKSB7XG4gICAgICBpZiAoIShpIDwgbiAmJiBkZWZpbmVkKGQgPSBkYXRhW2ldLCBpLCBkYXRhKSkgPT09IGRlZmluZWQwKSB7XG4gICAgICAgIGlmIChkZWZpbmVkMCA9ICFkZWZpbmVkMCkge1xuICAgICAgICAgIGogPSBpO1xuICAgICAgICAgIG91dHB1dC5hcmVhU3RhcnQoKTtcbiAgICAgICAgICBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0LmxpbmVFbmQoKTtcbiAgICAgICAgICBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgICAgZm9yIChrID0gaSAtIDE7IGsgPj0gajsgLS1rKSB7XG4gICAgICAgICAgICBvdXRwdXQucG9pbnQoeDB6W2tdLCB5MHpba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5hcmVhRW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWZpbmVkMCkge1xuICAgICAgICB4MHpbaV0gPSAreDAoZCwgaSwgZGF0YSksIHkweltpXSA9ICt5MChkLCBpLCBkYXRhKTtcbiAgICAgICAgb3V0cHV0LnBvaW50KHgxID8gK3gxKGQsIGksIGRhdGEpIDogeDB6W2ldLCB5MSA/ICt5MShkLCBpLCBkYXRhKSA6IHkweltpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIG91dHB1dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZWFsaW5lKCkge1xuICAgIHJldHVybiBsaW5lKCkuZGVmaW5lZChkZWZpbmVkKS5jdXJ2ZShjdXJ2ZSkuY29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGFyZWEueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCB4MSA9IG51bGwsIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHgwO1xuICB9O1xuXG4gIGFyZWEueDEgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDEgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDE7XG4gIH07XG5cbiAgYXJlYS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHkxID0gbnVsbCwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeTA7XG4gIH07XG5cbiAgYXJlYS55MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MTtcbiAgfTtcblxuICBhcmVhLmxpbmVYMCA9XG4gIGFyZWEubGluZVkwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MCkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5saW5lWTEgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkxKTtcbiAgfTtcblxuICBhcmVhLmxpbmVYMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDEpLnkoeTApO1xuICB9O1xuXG4gIGFyZWEuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWZpbmVkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBhcmVhKSA6IGRlZmluZWQ7XG4gIH07XG5cbiAgYXJlYS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjdXJ2ZSA9IF8sIGNvbnRleHQgIT0gbnVsbCAmJiAob3V0cHV0ID0gY3VydmUoY29udGV4dCkpLCBhcmVhKSA6IGN1cnZlO1xuICB9O1xuXG4gIGFyZWEuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfID09IG51bGwgPyBjb250ZXh0ID0gb3V0cHV0ID0gbnVsbCA6IG91dHB1dCA9IGN1cnZlKGNvbnRleHQgPSBfKSwgYXJlYSkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmVhO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYiA8IGEgPyAtMSA6IGIgPiBhID8gMSA6IGIgPj0gYSA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIHJldHVybiBkO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgaixcbiAgICAgICAgayxcbiAgICAgICAgc3VtID0gMCxcbiAgICAgICAgaW5kZXggPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGFyY3MgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGEwID0gK3N0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgZGEgPSBNYXRoLm1pbih0YXUsIE1hdGgubWF4KC10YXUsIGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBhMCkpLFxuICAgICAgICBhMSxcbiAgICAgICAgcCA9IE1hdGgubWluKE1hdGguYWJzKGRhKSAvIG4sIHBhZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpLFxuICAgICAgICBwYSA9IHAgKiAoZGEgPCAwID8gLTEgOiAxKSxcbiAgICAgICAgdjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodiA9IGFyY3NbaW5kZXhbaV0gPSBpXSA9ICt2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKSkgPiAwKSB7XG4gICAgICAgIHN1bSArPSB2O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9wdGlvbmFsbHkgc29ydCB0aGUgYXJjcyBieSBwcmV2aW91c2x5LWNvbXB1dGVkIHZhbHVlcyBvciBieSBkYXRhLlxuICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gc29ydFZhbHVlcyhhcmNzW2ldLCBhcmNzW2pdKTsgfSk7XG4gICAgZWxzZSBpZiAoc29ydCAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnQoZGF0YVtpXSwgZGF0YVtqXSk7IH0pO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgYXJjcyEgVGhleSBhcmUgc3RvcmVkIGluIHRoZSBvcmlnaW5hbCBkYXRhJ3Mgb3JkZXIuXG4gICAgZm9yIChpID0gMCwgayA9IHN1bSA/IChkYSAtIG4gKiBwYSkgLyBzdW0gOiAwOyBpIDwgbjsgKytpLCBhMCA9IGExKSB7XG4gICAgICBqID0gaW5kZXhbaV0sIHYgPSBhcmNzW2pdLCBhMSA9IGEwICsgKHYgPiAwID8gdiAqIGsgOiAwKSArIHBhLCBhcmNzW2pdID0ge1xuICAgICAgICBkYXRhOiBkYXRhW2pdLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIHN0YXJ0QW5nbGU6IGEwLFxuICAgICAgICBlbmRBbmdsZTogYTEsXG4gICAgICAgIHBhZEFuZ2xlOiBwXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhcmNzO1xuICB9XG5cbiAgcGllLnZhbHVlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZhbHVlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiB2YWx1ZTtcbiAgfTtcblxuICBwaWUuc29ydFZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0VmFsdWVzID0gXywgc29ydCA9IG51bGwsIHBpZSkgOiBzb3J0VmFsdWVzO1xuICB9O1xuXG4gIHBpZS5zb3J0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnQgPSBfLCBzb3J0VmFsdWVzID0gbnVsbCwgcGllKSA6IHNvcnQ7XG4gIH07XG5cbiAgcGllLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBwaWUuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIHBpZS5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgcmV0dXJuIHBpZTtcbn1cbiIsImltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9saW5lYXIuanNcIjtcblxuZXhwb3J0IHZhciBjdXJ2ZVJhZGlhbExpbmVhciA9IGN1cnZlUmFkaWFsKGN1cnZlTGluZWFyKTtcblxuZnVuY3Rpb24gUmFkaWFsKGN1cnZlKSB7XG4gIHRoaXMuX2N1cnZlID0gY3VydmU7XG59XG5cblJhZGlhbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUuYXJlYVN0YXJ0KCk7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmFyZWFFbmQoKTtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKTtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUubGluZUVuZCgpO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oYSwgcikge1xuICAgIHRoaXMuX2N1cnZlLnBvaW50KHIgKiBNYXRoLnNpbihhKSwgciAqIC1NYXRoLmNvcyhhKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1cnZlUmFkaWFsKGN1cnZlKSB7XG5cbiAgZnVuY3Rpb24gcmFkaWFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IFJhZGlhbChjdXJ2ZShjb250ZXh0KSk7XG4gIH1cblxuICByYWRpYWwuX2N1cnZlID0gY3VydmU7XG5cbiAgcmV0dXJuIHJhZGlhbDtcbn1cbiIsImltcG9ydCBjdXJ2ZVJhZGlhbCwge2N1cnZlUmFkaWFsTGluZWFyfSBmcm9tIFwiLi9jdXJ2ZS9yYWRpYWwuanNcIjtcbmltcG9ydCBsaW5lIGZyb20gXCIuL2xpbmUuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVSYWRpYWwobCkge1xuICB2YXIgYyA9IGwuY3VydmU7XG5cbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG5cbiAgbC5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGMoY3VydmVSYWRpYWwoXykpIDogYygpLl9jdXJ2ZTtcbiAgfTtcblxuICByZXR1cm4gbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBsaW5lUmFkaWFsKGxpbmUoKS5jdXJ2ZShjdXJ2ZVJhZGlhbExpbmVhcikpO1xufVxuIiwiaW1wb3J0IGN1cnZlUmFkaWFsLCB7Y3VydmVSYWRpYWxMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL3JhZGlhbC5qc1wiO1xuaW1wb3J0IGFyZWEgZnJvbSBcIi4vYXJlYS5qc1wiO1xuaW1wb3J0IHtsaW5lUmFkaWFsfSBmcm9tIFwiLi9saW5lUmFkaWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgYSA9IGFyZWEoKS5jdXJ2ZShjdXJ2ZVJhZGlhbExpbmVhciksXG4gICAgICBjID0gYS5jdXJ2ZSxcbiAgICAgIHgwID0gYS5saW5lWDAsXG4gICAgICB4MSA9IGEubGluZVgxLFxuICAgICAgeTAgPSBhLmxpbmVZMCxcbiAgICAgIHkxID0gYS5saW5lWTE7XG5cbiAgYS5hbmdsZSA9IGEueCwgZGVsZXRlIGEueDtcbiAgYS5zdGFydEFuZ2xlID0gYS54MCwgZGVsZXRlIGEueDA7XG4gIGEuZW5kQW5nbGUgPSBhLngxLCBkZWxldGUgYS54MTtcbiAgYS5yYWRpdXMgPSBhLnksIGRlbGV0ZSBhLnk7XG4gIGEuaW5uZXJSYWRpdXMgPSBhLnkwLCBkZWxldGUgYS55MDtcbiAgYS5vdXRlclJhZGl1cyA9IGEueTEsIGRlbGV0ZSBhLnkxO1xuICBhLmxpbmVTdGFydEFuZ2xlID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHgwKCkpOyB9LCBkZWxldGUgYS5saW5lWDA7XG4gIGEubGluZUVuZEFuZ2xlID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHgxKCkpOyB9LCBkZWxldGUgYS5saW5lWDE7XG4gIGEubGluZUlubmVyUmFkaXVzID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHkwKCkpOyB9LCBkZWxldGUgYS5saW5lWTA7XG4gIGEubGluZU91dGVyUmFkaXVzID0gZnVuY3Rpb24oKSB7IHJldHVybiBsaW5lUmFkaWFsKHkxKCkpOyB9LCBkZWxldGUgYS5saW5lWTE7XG5cbiAgYS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGMoY3VydmVSYWRpYWwoXykpIDogYygpLl9jdXJ2ZTtcbiAgfTtcblxuICByZXR1cm4gYTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHkpIHtcbiAgcmV0dXJuIFsoeSA9ICt5KSAqIE1hdGguY29zKHggLT0gTWF0aC5QSSAvIDIpLCB5ICogTWF0aC5zaW4oeCldO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuLi9wb2ludC5qc1wiO1xuaW1wb3J0IHBvaW50UmFkaWFsIGZyb20gXCIuLi9wb2ludFJhZGlhbC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5rU291cmNlKGQpIHtcbiAgcmV0dXJuIGQuc291cmNlO1xufVxuXG5mdW5jdGlvbiBsaW5rVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIGQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBsaW5rKGN1cnZlKSB7XG4gIHZhciBzb3VyY2UgPSBsaW5rU291cmNlLFxuICAgICAgdGFyZ2V0ID0gbGlua1RhcmdldCxcbiAgICAgIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICB2YXIgYnVmZmVyLCBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBzID0gc291cmNlLmFwcGx5KHRoaXMsIGFyZ3YpLCB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICBjdXJ2ZShjb250ZXh0LCAreC5hcHBseSh0aGlzLCAoYXJndlswXSA9IHMsIGFyZ3YpKSwgK3kuYXBwbHkodGhpcywgYXJndiksICt4LmFwcGx5KHRoaXMsIChhcmd2WzBdID0gdCwgYXJndikpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5rLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCBsaW5rKSA6IHNvdXJjZTtcbiAgfTtcblxuICBsaW5rLnRhcmdldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXJnZXQgPSBfLCBsaW5rKSA6IHRhcmdldDtcbiAgfTtcblxuICBsaW5rLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5rKSA6IHg7XG4gIH07XG5cbiAgbGluay55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB5O1xuICB9O1xuXG4gIGxpbmsuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgbGluaykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUhvcml6b250YWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwID0gKHgwICsgeDEpIC8gMiwgeTAsIHgwLCB5MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gY3VydmVWZXJ0aWNhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICBjb250ZXh0LmJlemllckN1cnZlVG8oeDAsIHkwID0gKHkwICsgeTEpIC8gMiwgeDEsIHkwLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZVJhZGlhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcDAgPSBwb2ludFJhZGlhbCh4MCwgeTApLFxuICAgICAgcDEgPSBwb2ludFJhZGlhbCh4MCwgeTAgPSAoeTAgKyB5MSkgLyAyKSxcbiAgICAgIHAyID0gcG9pbnRSYWRpYWwoeDEsIHkwKSxcbiAgICAgIHAzID0gcG9pbnRSYWRpYWwoeDEsIHkxKTtcbiAgY29udGV4dC5tb3ZlVG8ocDBbMF0sIHAwWzFdKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAxWzBdLCBwMVsxXSwgcDJbMF0sIHAyWzFdLCBwM1swXSwgcDNbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0hvcml6b250YWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlSG9yaXpvbnRhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVmVydGljYWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlVmVydGljYWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1JhZGlhbCgpIHtcbiAgdmFyIGwgPSBsaW5rKGN1cnZlUmFkaWFsKTtcbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG4gIHJldHVybiBsO1xufVxuIiwiaW1wb3J0IHtwaSwgdGF1fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplIC8gcGkpO1xuICAgIGNvbnRleHQubW92ZVRvKHIsIDApO1xuICAgIGNvbnRleHQuYXJjKDAsIDAsIHIsIDAsIHRhdSk7XG4gIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplIC8gNSkgLyAyO1xuICAgIGNvbnRleHQubW92ZVRvKC0zICogciwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIC0zICogcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgLTMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oMyAqIHIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygzICogciwgcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCAzICogcik7XG4gICAgY29udGV4dC5saW5lVG8oLXIsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKC0zICogciwgcik7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsInZhciB0YW4zMCA9IE1hdGguc3FydCgxIC8gMyksXG4gICAgdGFuMzBfMiA9IHRhbjMwICogMjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHkgPSBNYXRoLnNxcnQoc2l6ZSAvIHRhbjMwXzIpLFxuICAgICAgICB4ID0geSAqIHRhbjMwO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIC15KTtcbiAgICBjb250ZXh0LmxpbmVUbyh4LCAwKTtcbiAgICBjb250ZXh0LmxpbmVUbygwLCB5KTtcbiAgICBjb250ZXh0LmxpbmVUbygteCwgMCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsImltcG9ydCB7cGksIHRhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcblxudmFyIGthID0gMC44OTA4MTMwOTE1MjkyODUyMjgxMCxcbiAgICBrciA9IE1hdGguc2luKHBpIC8gMTApIC8gTWF0aC5zaW4oNyAqIHBpIC8gMTApLFxuICAgIGt4ID0gTWF0aC5zaW4odGF1IC8gMTApICoga3IsXG4gICAga3kgPSAtTWF0aC5jb3ModGF1IC8gMTApICoga3I7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdzogZnVuY3Rpb24oY29udGV4dCwgc2l6ZSkge1xuICAgIHZhciByID0gTWF0aC5zcXJ0KHNpemUgKiBrYSksXG4gICAgICAgIHggPSBreCAqIHIsXG4gICAgICAgIHkgPSBreSAqIHI7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICB2YXIgYSA9IHRhdSAqIGkgLyA1LFxuICAgICAgICAgIGMgPSBNYXRoLmNvcyhhKSxcbiAgICAgICAgICBzID0gTWF0aC5zaW4oYSk7XG4gICAgICBjb250ZXh0LmxpbmVUbyhzICogciwgLWMgKiByKTtcbiAgICAgIGNvbnRleHQubGluZVRvKGMgKiB4IC0gcyAqIHksIHMgKiB4ICsgYyAqIHkpO1xuICAgIH1cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHcgPSBNYXRoLnNxcnQoc2l6ZSksXG4gICAgICAgIHggPSAtdyAvIDI7XG4gICAgY29udGV4dC5yZWN0KHgsIHgsIHcsIHcpO1xuICB9XG59O1xuIiwidmFyIHNxcnQzID0gTWF0aC5zcXJ0KDMpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgeSA9IC1NYXRoLnNxcnQoc2l6ZSAvIChzcXJ0MyAqIDMpKTtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCB5ICogMik7XG4gICAgY29udGV4dC5saW5lVG8oLXNxcnQzICogeSwgLXkpO1xuICAgIGNvbnRleHQubGluZVRvKHNxcnQzICogeSwgLXkpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJ2YXIgYyA9IC0wLjUsXG4gICAgcyA9IE1hdGguc3FydCgzKSAvIDIsXG4gICAgayA9IDEgLyBNYXRoLnNxcnQoMTIpLFxuICAgIGEgPSAoayAvIDIgKyAxKSAqIDM7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdzogZnVuY3Rpb24oY29udGV4dCwgc2l6ZSkge1xuICAgIHZhciByID0gTWF0aC5zcXJ0KHNpemUgLyBhKSxcbiAgICAgICAgeDAgPSByIC8gMixcbiAgICAgICAgeTAgPSByICogayxcbiAgICAgICAgeDEgPSB4MCxcbiAgICAgICAgeTEgPSByICogayArIHIsXG4gICAgICAgIHgyID0gLXgxLFxuICAgICAgICB5MiA9IHkxO1xuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MCAtIHMgKiB5MCwgcyAqIHgwICsgYyAqIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDEgLSBzICogeTEsIHMgKiB4MSArIGMgKiB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgyIC0gcyAqIHkyLCBzICogeDIgKyBjICogeTIpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MCArIHMgKiB5MCwgYyAqIHkwIC0gcyAqIHgwKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDEgKyBzICogeTEsIGMgKiB5MSAtIHMgKiB4MSk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgyICsgcyAqIHkyLCBjICogeTIgLSBzICogeDIpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY2lyY2xlIGZyb20gXCIuL3N5bWJvbC9jaXJjbGUuanNcIjtcbmltcG9ydCBjcm9zcyBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmltcG9ydCBkaWFtb25kIGZyb20gXCIuL3N5bWJvbC9kaWFtb25kLmpzXCI7XG5pbXBvcnQgc3RhciBmcm9tIFwiLi9zeW1ib2wvc3Rhci5qc1wiO1xuaW1wb3J0IHNxdWFyZSBmcm9tIFwiLi9zeW1ib2wvc3F1YXJlLmpzXCI7XG5pbXBvcnQgdHJpYW5nbGUgZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlLmpzXCI7XG5pbXBvcnQgd3llIGZyb20gXCIuL3N5bWJvbC93eWUuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5leHBvcnQgdmFyIHN5bWJvbHMgPSBbXG4gIGNpcmNsZSxcbiAgY3Jvc3MsXG4gIGRpYW1vbmQsXG4gIHNxdWFyZSxcbiAgc3RhcixcbiAgdHJpYW5nbGUsXG4gIHd5ZVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB0eXBlID0gY29uc3RhbnQoY2lyY2xlKSxcbiAgICAgIHNpemUgPSBjb25zdGFudCg2NCksXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBzeW1ib2woKSB7XG4gICAgdmFyIGJ1ZmZlcjtcbiAgICBpZiAoIWNvbnRleHQpIGNvbnRleHQgPSBidWZmZXIgPSBwYXRoKCk7XG4gICAgdHlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmRyYXcoY29udGV4dCwgK3NpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBzeW1ib2wudHlwZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0eXBlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgc3ltYm9sKSA6IHR5cGU7XG4gIH07XG5cbiAgc3ltYm9sLnNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2l6ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBzeW1ib2wpIDogc2l6ZTtcbiAgfTtcblxuICBzeW1ib2wuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8sIHN5bWJvbCkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBzeW1ib2w7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHt9XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgKDIgKiB0aGF0Ll94MCArIHRoYXQuX3gxKSAvIDMsXG4gICAgKDIgKiB0aGF0Ll95MCArIHRoYXQuX3kxKSAvIDMsXG4gICAgKHRoYXQuX3gwICsgMiAqIHRoYXQuX3gxKSAvIDMsXG4gICAgKHRoYXQuX3kwICsgMiAqIHRoYXQuX3kxKSAvIDMsXG4gICAgKHRoYXQuX3gwICsgNCAqIHRoYXQuX3gxICsgeCkgLyA2LFxuICAgICh0aGF0Ll95MCArIDQgKiB0aGF0Ll95MSArIHkpIC8gNlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFzaXMoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuQmFzaXMucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3gxLCB0aGlzLl95MSk7IC8vIHByb2NlZWRcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl9jb250ZXh0LmxpbmVUbygoNSAqIHRoaXMuX3gwICsgdGhpcy5feDEpIC8gNiwgKDUgKiB0aGlzLl95MCArIHRoaXMuX3kxKSAvIDYpOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCYXNpcyhjb250ZXh0KTtcbn1cbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuXG5mdW5jdGlvbiBCYXNpc0Nsb3NlZChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpc0Nsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MiArIDIgKiB0aGlzLl94MykgLyAzLCAodGhpcy5feTIgKyAyICogdGhpcy5feTMpIC8gMyk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MyArIDIgKiB0aGlzLl94MikgLyAzLCAodGhpcy5feTMgKyAyICogdGhpcy5feTIpIC8gMyk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDIsIHRoaXMuX3kyKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g0LCB0aGlzLl95NCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5feDIgPSB4LCB0aGlzLl95MiA9IHk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geTsgdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwICsgNCAqIHRoaXMuX3gxICsgeCkgLyA2LCAodGhpcy5feTAgKyA0ICogdGhpcy5feTEgKyB5KSAvIDYpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzQ2xvc2VkKGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQmFzaXNPcGVuKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHZhciB4MCA9ICh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgeTAgPSAodGhpcy5feTAgKyA0ICogdGhpcy5feTEgKyB5KSAvIDY7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4MCwgeTApIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeDAsIHkwKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXNPcGVuKGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IHtCYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQnVuZGxlKGNvbnRleHQsIGJldGEpIHtcbiAgdGhpcy5fYmFzaXMgPSBuZXcgQmFzaXMoY29udGV4dCk7XG4gIHRoaXMuX2JldGEgPSBiZXRhO1xufVxuXG5CdW5kbGUucHJvdG90eXBlID0ge1xuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3ggPSBbXTtcbiAgICB0aGlzLl95ID0gW107XG4gICAgdGhpcy5fYmFzaXMubGluZVN0YXJ0KCk7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gdGhpcy5feCxcbiAgICAgICAgeSA9IHRoaXMuX3ksXG4gICAgICAgIGogPSB4Lmxlbmd0aCAtIDE7XG5cbiAgICBpZiAoaiA+IDApIHtcbiAgICAgIHZhciB4MCA9IHhbMF0sXG4gICAgICAgICAgeTAgPSB5WzBdLFxuICAgICAgICAgIGR4ID0geFtqXSAtIHgwLFxuICAgICAgICAgIGR5ID0geVtqXSAtIHkwLFxuICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICB0O1xuXG4gICAgICB3aGlsZSAoKytpIDw9IGopIHtcbiAgICAgICAgdCA9IGkgLyBqO1xuICAgICAgICB0aGlzLl9iYXNpcy5wb2ludChcbiAgICAgICAgICB0aGlzLl9iZXRhICogeFtpXSArICgxIC0gdGhpcy5fYmV0YSkgKiAoeDAgKyB0ICogZHgpLFxuICAgICAgICAgIHRoaXMuX2JldGEgKiB5W2ldICsgKDEgLSB0aGlzLl9iZXRhKSAqICh5MCArIHQgKiBkeSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl94ID0gdGhpcy5feSA9IG51bGw7XG4gICAgdGhpcy5fYmFzaXMubGluZUVuZCgpO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuX3gucHVzaCgreCk7XG4gICAgdGhpcy5feS5wdXNoKCt5KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShiZXRhKSB7XG5cbiAgZnVuY3Rpb24gYnVuZGxlKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYmV0YSA9PT0gMSA/IG5ldyBCYXNpcyhjb250ZXh0KSA6IG5ldyBCdW5kbGUoY29udGV4dCwgYmV0YSk7XG4gIH1cblxuICBidW5kbGUuYmV0YSA9IGZ1bmN0aW9uKGJldGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCtiZXRhKTtcbiAgfTtcblxuICByZXR1cm4gYnVuZGxlO1xufSkoMC44NSk7XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgdGhhdC5feDEgKyB0aGF0Ll9rICogKHRoYXQuX3gyIC0gdGhhdC5feDApLFxuICAgIHRoYXQuX3kxICsgdGhhdC5fayAqICh0aGF0Ll95MiAtIHRoYXQuX3kwKSxcbiAgICB0aGF0Ll94MiArIHRoYXQuX2sgKiAodGhhdC5feDEgLSB4KSxcbiAgICB0aGF0Ll95MiArIHRoYXQuX2sgKiAodGhhdC5feTEgLSB5KSxcbiAgICB0aGF0Ll94MixcbiAgICB0aGF0Ll95MlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gxID0geCwgdGhpcy5feTEgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbENsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID0gdGhpcy5feDUgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IHRoaXMuX3kzID0gdGhpcy5feTQgPSB0aGlzLl95NSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NSwgdGhpcy5feTUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIiwiaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2FyZGluYWwuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsT3Blbihjb250ZXh0LCB0ZW5zaW9uKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9rID0gKDEgLSB0ZW5zaW9uKSAvIDY7XG59XG5cbkNhcmRpbmFsT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsIHRoaXMuX3kyKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWxPcGVuKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImltcG9ydCB7ZXBzaWxvbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7Q2FyZGluYWx9IGZyb20gXCIuL2NhcmRpbmFsLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCh0aGF0LCB4LCB5KSB7XG4gIHZhciB4MSA9IHRoYXQuX3gxLFxuICAgICAgeTEgPSB0aGF0Ll95MSxcbiAgICAgIHgyID0gdGhhdC5feDIsXG4gICAgICB5MiA9IHRoYXQuX3kyO1xuXG4gIGlmICh0aGF0Ll9sMDFfYSA+IGVwc2lsb24pIHtcbiAgICB2YXIgYSA9IDIgKiB0aGF0Ll9sMDFfMmEgKyAzICogdGhhdC5fbDAxX2EgKiB0aGF0Ll9sMTJfYSArIHRoYXQuX2wxMl8yYSxcbiAgICAgICAgbiA9IDMgKiB0aGF0Ll9sMDFfYSAqICh0aGF0Ll9sMDFfYSArIHRoYXQuX2wxMl9hKTtcbiAgICB4MSA9ICh4MSAqIGEgLSB0aGF0Ll94MCAqIHRoYXQuX2wxMl8yYSArIHRoYXQuX3gyICogdGhhdC5fbDAxXzJhKSAvIG47XG4gICAgeTEgPSAoeTEgKiBhIC0gdGhhdC5feTAgKiB0aGF0Ll9sMTJfMmEgKyB0aGF0Ll95MiAqIHRoYXQuX2wwMV8yYSkgLyBuO1xuICB9XG5cbiAgaWYgKHRoYXQuX2wyM19hID4gZXBzaWxvbikge1xuICAgIHZhciBiID0gMiAqIHRoYXQuX2wyM18yYSArIDMgKiB0aGF0Ll9sMjNfYSAqIHRoYXQuX2wxMl9hICsgdGhhdC5fbDEyXzJhLFxuICAgICAgICBtID0gMyAqIHRoYXQuX2wyM19hICogKHRoYXQuX2wyM19hICsgdGhhdC5fbDEyX2EpO1xuICAgIHgyID0gKHgyICogYiArIHRoYXQuX3gxICogdGhhdC5fbDIzXzJhIC0geCAqIHRoYXQuX2wxMl8yYSkgLyBtO1xuICAgIHkyID0gKHkyICogYiArIHRoYXQuX3kxICogdGhhdC5fbDIzXzJhIC0geSAqIHRoYXQuX2wxMl8yYSkgLyBtO1xuICB9XG5cbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCB0aGF0Ll94MiwgdGhhdC5feTIpO1xufVxuXG5mdW5jdGlvbiBDYXRtdWxsUm9tKGNvbnRleHQsIGFscGhhKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9hbHBoYSA9IGFscGhhO1xufVxuXG5DYXRtdWxsUm9tLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2EgPVxuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYSA9XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLnBvaW50KHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuXG4gICAgaWYgKHRoaXMuX3BvaW50KSB7XG4gICAgICB2YXIgeDIzID0gdGhpcy5feDIgLSB4LFxuICAgICAgICAgIHkyMyA9IHRoaXMuX3kyIC0geTtcbiAgICAgIHRoaXMuX2wyM19hID0gTWF0aC5zcXJ0KHRoaXMuX2wyM18yYSA9IE1hdGgucG93KHgyMyAqIHgyMyArIHkyMyAqIHkyMywgdGhpcy5fYWxwaGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbShjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWwoY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwiaW1wb3J0IHtDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY2FyZGluYWxDbG9zZWQuanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXRtdWxsUm9tLmpzXCI7XG5cbmZ1bmN0aW9uIENhdG11bGxSb21DbG9zZWQoY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21DbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g1LCB0aGlzLl95NSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbUNsb3NlZChjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwiaW1wb3J0IHtDYXJkaW5hbE9wZW59IGZyb20gXCIuL2NhcmRpbmFsT3Blbi5qc1wiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2F0bXVsbFJvbS5qc1wiO1xuXG5mdW5jdGlvbiBDYXRtdWxsUm9tT3Blbihjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbU9wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYSA9XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhID1cbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG5cbiAgICBpZiAodGhpcy5fcG9pbnQpIHtcbiAgICAgIHZhciB4MjMgPSB0aGlzLl94MiAtIHgsXG4gICAgICAgICAgeTIzID0gdGhpcy5feTIgLSB5O1xuICAgICAgdGhpcy5fbDIzX2EgPSBNYXRoLnNxcnQodGhpcy5fbDIzXzJhID0gTWF0aC5wb3coeDIzICogeDIzICsgeTIzICogeTIzLCB0aGlzLl9hbHBoYSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsIHRoaXMuX3kyKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbU9wZW4oY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsT3Blbihjb250ZXh0LCAwKTtcbiAgfVxuXG4gIGNhdG11bGxSb20uYWxwaGEgPSBmdW5jdGlvbihhbHBoYSkge1xuICAgIHJldHVybiBjdXN0b20oK2FscGhhKTtcbiAgfTtcblxuICByZXR1cm4gY2F0bXVsbFJvbTtcbn0pKDAuNSk7XG4iLCJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcC5qc1wiO1xuXG5mdW5jdGlvbiBMaW5lYXJDbG9zZWQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyQ2xvc2VkLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBub29wLFxuICBhcmVhRW5kOiBub29wLFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3BvaW50KSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIGlmICh0aGlzLl9wb2ludCkgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgZWxzZSB0aGlzLl9wb2ludCA9IDEsIHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyQ2xvc2VkKGNvbnRleHQpO1xufVxuIiwiZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiB4IDwgMCA/IC0xIDogMTtcbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBzbG9wZXMgb2YgdGhlIHRhbmdlbnRzIChIZXJtaXRlLXR5cGUgaW50ZXJwb2xhdGlvbikgYmFzZWQgb25cbi8vIHRoZSBmb2xsb3dpbmcgcGFwZXI6IFN0ZWZmZW4sIE0uIDE5OTAuIEEgU2ltcGxlIE1ldGhvZCBmb3IgTW9ub3RvbmljXG4vLyBJbnRlcnBvbGF0aW9uIGluIE9uZSBEaW1lbnNpb24uIEFzdHJvbm9teSBhbmQgQXN0cm9waHlzaWNzLCBWb2wuIDIzOSwgTk8uXG4vLyBOT1YoSUkpLCBQLiA0NDMsIDE5OTAuXG5mdW5jdGlvbiBzbG9wZTModGhhdCwgeDIsIHkyKSB7XG4gIHZhciBoMCA9IHRoYXQuX3gxIC0gdGhhdC5feDAsXG4gICAgICBoMSA9IHgyIC0gdGhhdC5feDEsXG4gICAgICBzMCA9ICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIChoMCB8fCBoMSA8IDAgJiYgLTApLFxuICAgICAgczEgPSAoeTIgLSB0aGF0Ll95MSkgLyAoaDEgfHwgaDAgPCAwICYmIC0wKSxcbiAgICAgIHAgPSAoczAgKiBoMSArIHMxICogaDApIC8gKGgwICsgaDEpO1xuICByZXR1cm4gKHNpZ24oczApICsgc2lnbihzMSkpICogTWF0aC5taW4oTWF0aC5hYnMoczApLCBNYXRoLmFicyhzMSksIDAuNSAqIE1hdGguYWJzKHApKSB8fCAwO1xufVxuXG4vLyBDYWxjdWxhdGUgYSBvbmUtc2lkZWQgc2xvcGUuXG5mdW5jdGlvbiBzbG9wZTIodGhhdCwgdCkge1xuICB2YXIgaCA9IHRoYXQuX3gxIC0gdGhhdC5feDA7XG4gIHJldHVybiBoID8gKDMgKiAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyBoIC0gdCkgLyAyIDogdDtcbn1cblxuLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1YmljX0hlcm1pdGVfc3BsaW5lI1JlcHJlc2VudGF0aW9uc1xuLy8gXCJ5b3UgY2FuIGV4cHJlc3MgY3ViaWMgSGVybWl0ZSBpbnRlcnBvbGF0aW9uIGluIHRlcm1zIG9mIGN1YmljIELDqXppZXIgY3VydmVzXG4vLyB3aXRoIHJlc3BlY3QgdG8gdGhlIGZvdXIgdmFsdWVzIHAwLCBwMCArIG0wIC8gMywgcDEgLSBtMSAvIDMsIHAxXCIuXG5mdW5jdGlvbiBwb2ludCh0aGF0LCB0MCwgdDEpIHtcbiAgdmFyIHgwID0gdGhhdC5feDAsXG4gICAgICB5MCA9IHRoYXQuX3kwLFxuICAgICAgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICBkeCA9ICh4MSAtIHgwKSAvIDM7XG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MCArIGR4LCB5MCArIGR4ICogdDAsIHgxIC0gZHgsIHkxIC0gZHggKiB0MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbk1vbm90b25lWC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9XG4gICAgdGhpcy5fdDAgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl90MCwgc2xvcGUyKHRoaXMsIHRoaXMuX3QwKSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciB0MSA9IE5hTjtcblxuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIGlmICh4ID09PSB0aGlzLl94MSAmJiB5ID09PSB0aGlzLl95MSkgcmV0dXJuOyAvLyBJZ25vcmUgY29pbmNpZGVudCBwb2ludHMuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyBwb2ludCh0aGlzLCBzbG9wZTIodGhpcywgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpLCB0MSk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgdGhpcy5fdDAsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgICB0aGlzLl90MCA9IHQxO1xuICB9XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWShjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBuZXcgUmVmbGVjdENvbnRleHQoY29udGV4dCk7XG59XG5cbihNb25vdG9uZVkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNb25vdG9uZVgucHJvdG90eXBlKSkucG9pbnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIE1vbm90b25lWC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLCB5LCB4KTtcbn07XG5cbmZ1bmN0aW9uIFJlZmxlY3RDb250ZXh0KGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblJlZmxlY3RDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubW92ZVRvKHksIHgpOyB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkgeyB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpOyB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5saW5lVG8oeSwgeCk7IH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7IHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh5MSwgeDEsIHkyLCB4MiwgeSwgeCk7IH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVgoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWChjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVZKGNvbnRleHQpO1xufVxuIiwiZnVuY3Rpb24gTmF0dXJhbChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5OYXR1cmFsLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94ID0gW107XG4gICAgdGhpcy5feSA9IFtdO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IHRoaXMuX3gsXG4gICAgICAgIHkgPSB0aGlzLl95LFxuICAgICAgICBuID0geC5sZW5ndGg7XG5cbiAgICBpZiAobikge1xuICAgICAgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHhbMF0sIHlbMF0pIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeFswXSwgeVswXSk7XG4gICAgICBpZiAobiA9PT0gMikge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh4WzFdLCB5WzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBweCA9IGNvbnRyb2xQb2ludHMoeCksXG4gICAgICAgICAgICBweSA9IGNvbnRyb2xQb2ludHMoeSk7XG4gICAgICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAxOyBpMSA8IG47ICsraTAsICsraTEpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8ocHhbMF1baTBdLCBweVswXVtpMF0sIHB4WzFdW2kwXSwgcHlbMV1baTBdLCB4W2kxXSwgeVtpMV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgbiA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICAgIHRoaXMuX3ggPSB0aGlzLl95ID0gbnVsbDtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl94LnB1c2goK3gpO1xuICAgIHRoaXMuX3kucHVzaCgreSk7XG4gIH1cbn07XG5cbi8vIFNlZSBodHRwczovL3d3dy5wYXJ0aWNsZWluY2VsbC5jb20vMjAxMi9iZXppZXItc3BsaW5lcy8gZm9yIGRlcml2YXRpb24uXG5mdW5jdGlvbiBjb250cm9sUG9pbnRzKHgpIHtcbiAgdmFyIGksXG4gICAgICBuID0geC5sZW5ndGggLSAxLFxuICAgICAgbSxcbiAgICAgIGEgPSBuZXcgQXJyYXkobiksXG4gICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgciA9IG5ldyBBcnJheShuKTtcbiAgYVswXSA9IDAsIGJbMF0gPSAyLCByWzBdID0geFswXSArIDIgKiB4WzFdO1xuICBmb3IgKGkgPSAxOyBpIDwgbiAtIDE7ICsraSkgYVtpXSA9IDEsIGJbaV0gPSA0LCByW2ldID0gNCAqIHhbaV0gKyAyICogeFtpICsgMV07XG4gIGFbbiAtIDFdID0gMiwgYltuIC0gMV0gPSA3LCByW24gLSAxXSA9IDggKiB4W24gLSAxXSArIHhbbl07XG4gIGZvciAoaSA9IDE7IGkgPCBuOyArK2kpIG0gPSBhW2ldIC8gYltpIC0gMV0sIGJbaV0gLT0gbSwgcltpXSAtPSBtICogcltpIC0gMV07XG4gIGFbbiAtIDFdID0gcltuIC0gMV0gLyBiW24gLSAxXTtcbiAgZm9yIChpID0gbiAtIDI7IGkgPj0gMDsgLS1pKSBhW2ldID0gKHJbaV0gLSBhW2kgKyAxXSkgLyBiW2ldO1xuICBiW24gLSAxXSA9ICh4W25dICsgYVtuIC0gMV0pIC8gMjtcbiAgZm9yIChpID0gMDsgaSA8IG4gLSAxOyArK2kpIGJbaV0gPSAyICogeFtpICsgMV0gLSBhW2kgKyAxXTtcbiAgcmV0dXJuIFthLCBiXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IE5hdHVyYWwoY29udGV4dCk7XG59XG4iLCJmdW5jdGlvbiBTdGVwKGNvbnRleHQsIHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX3QgPSB0O1xufVxuXG5TdGVwLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94ID0gdGhpcy5feSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICgwIDwgdGhpcy5fdCAmJiB0aGlzLl90IDwgMSAmJiB0aGlzLl9wb2ludCA9PT0gMikgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCwgdGhpcy5feSk7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIGlmICh0aGlzLl9saW5lID49IDApIHRoaXMuX3QgPSAxIC0gdGhpcy5fdCwgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAodGhpcy5fdCA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCwgeSk7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHgxID0gdGhpcy5feCAqICgxIC0gdGhpcy5fdCkgKyB4ICogdGhpcy5fdDtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh4MSwgdGhpcy5feSk7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeDEsIHkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl94ID0geCwgdGhpcy5feSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBTdGVwKGNvbnRleHQsIDAuNSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwQmVmb3JlKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBTdGVwKGNvbnRleHQsIDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEFmdGVyKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBTdGVwKGNvbnRleHQsIDEpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzLCBvcmRlcikge1xuICBpZiAoISgobiA9IHNlcmllcy5sZW5ndGgpID4gMSkpIHJldHVybjtcbiAgZm9yICh2YXIgaSA9IDEsIGosIHMwLCBzMSA9IHNlcmllc1tvcmRlclswXV0sIG4sIG0gPSBzMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBzMCA9IHMxLCBzMSA9IHNlcmllc1tvcmRlcltpXV07XG4gICAgZm9yIChqID0gMDsgaiA8IG07ICsraikge1xuICAgICAgczFbal1bMV0gKz0gczFbal1bMF0gPSBpc05hTihzMFtqXVsxXSkgPyBzMFtqXVswXSA6IHMwW2pdWzFdO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHZhciBuID0gc2VyaWVzLmxlbmd0aCwgbyA9IG5ldyBBcnJheShuKTtcbiAgd2hpbGUgKC0tbiA+PSAwKSBvW25dID0gbjtcbiAgcmV0dXJuIG87XG59XG4iLCJpbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgb2Zmc2V0Tm9uZSBmcm9tIFwiLi9vZmZzZXQvbm9uZS5qc1wiO1xuaW1wb3J0IG9yZGVyTm9uZSBmcm9tIFwiLi9vcmRlci9ub25lLmpzXCI7XG5cbmZ1bmN0aW9uIHN0YWNrVmFsdWUoZCwga2V5KSB7XG4gIHJldHVybiBkW2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IGNvbnN0YW50KFtdKSxcbiAgICAgIG9yZGVyID0gb3JkZXJOb25lLFxuICAgICAgb2Zmc2V0ID0gb2Zmc2V0Tm9uZSxcbiAgICAgIHZhbHVlID0gc3RhY2tWYWx1ZTtcblxuICBmdW5jdGlvbiBzdGFjayhkYXRhKSB7XG4gICAgdmFyIGt6ID0ga2V5cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBpLFxuICAgICAgICBtID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIG4gPSBrei5sZW5ndGgsXG4gICAgICAgIHN6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBvejtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGZvciAodmFyIGtpID0ga3pbaV0sIHNpID0gc3pbaV0gPSBuZXcgQXJyYXkobSksIGogPSAwLCBzaWo7IGogPCBtOyArK2opIHtcbiAgICAgICAgc2lbal0gPSBzaWogPSBbMCwgK3ZhbHVlKGRhdGFbal0sIGtpLCBqLCBkYXRhKV07XG4gICAgICAgIHNpai5kYXRhID0gZGF0YVtqXTtcbiAgICAgIH1cbiAgICAgIHNpLmtleSA9IGtpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIG96ID0gb3JkZXIoc3opOyBpIDwgbjsgKytpKSB7XG4gICAgICBzeltveltpXV0uaW5kZXggPSBpO1xuICAgIH1cblxuICAgIG9mZnNldChzeiwgb3opO1xuICAgIHJldHVybiBzejtcbiAgfVxuXG4gIHN0YWNrLmtleXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoc2xpY2UuY2FsbChfKSksIHN0YWNrKSA6IGtleXM7XG4gIH07XG5cbiAgc3RhY2sudmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmFsdWUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgc3RhY2spIDogdmFsdWU7XG4gIH07XG5cbiAgc3RhY2sub3JkZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3JkZXIgPSBfID09IG51bGwgPyBvcmRlck5vbmUgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KHNsaWNlLmNhbGwoXykpLCBzdGFjaykgOiBvcmRlcjtcbiAgfTtcblxuICBzdGFjay5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gXyA9PSBudWxsID8gb2Zmc2V0Tm9uZSA6IF8sIHN0YWNrKSA6IG9mZnNldDtcbiAgfTtcblxuICByZXR1cm4gc3RhY2s7XG59XG4iLCJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDApKSByZXR1cm47XG4gIGZvciAodmFyIGksIG4sIGogPSAwLCBtID0gc2VyaWVzWzBdLmxlbmd0aCwgeTsgaiA8IG07ICsraikge1xuICAgIGZvciAoeSA9IGkgPSAwOyBpIDwgbjsgKytpKSB5ICs9IHNlcmllc1tpXVtqXVsxXSB8fCAwO1xuICAgIGlmICh5KSBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBzZXJpZXNbaV1bal1bMV0gLz0geTtcbiAgfVxuICBub25lKHNlcmllcywgb3JkZXIpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzLCBvcmRlcikge1xuICBpZiAoISgobiA9IHNlcmllcy5sZW5ndGgpID4gMCkpIHJldHVybjtcbiAgZm9yICh2YXIgaSwgaiA9IDAsIGQsIGR5LCB5cCwgeW4sIG4sIG0gPSBzZXJpZXNbb3JkZXJbMF1dLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAoeXAgPSB5biA9IDAsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKGR5ID0gKGQgPSBzZXJpZXNbb3JkZXJbaV1dW2pdKVsxXSAtIGRbMF0pID4gMCkge1xuICAgICAgICBkWzBdID0geXAsIGRbMV0gPSB5cCArPSBkeTtcbiAgICAgIH0gZWxzZSBpZiAoZHkgPCAwKSB7XG4gICAgICAgIGRbMV0gPSB5biwgZFswXSA9IHluICs9IGR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZFswXSA9IDAsIGRbMV0gPSBkeTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBub25lIGZyb20gXCIuL25vbmUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzLCBvcmRlcikge1xuICBpZiAoISgobiA9IHNlcmllcy5sZW5ndGgpID4gMCkpIHJldHVybjtcbiAgZm9yICh2YXIgaiA9IDAsIHMwID0gc2VyaWVzW29yZGVyWzBdXSwgbiwgbSA9IHMwLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGkgPSAwLCB5ID0gMDsgaSA8IG47ICsraSkgeSArPSBzZXJpZXNbaV1bal1bMV0gfHwgMDtcbiAgICBzMFtqXVsxXSArPSBzMFtqXVswXSA9IC15IC8gMjtcbiAgfVxuICBub25lKHNlcmllcywgb3JkZXIpO1xufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAwKSB8fCAhKChtID0gKHMwID0gc2VyaWVzW29yZGVyWzBdXSkubGVuZ3RoKSA+IDApKSByZXR1cm47XG4gIGZvciAodmFyIHkgPSAwLCBqID0gMSwgczAsIG0sIG47IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBpID0gMCwgczEgPSAwLCBzMiA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBzaSA9IHNlcmllc1tvcmRlcltpXV0sXG4gICAgICAgICAgc2lqMCA9IHNpW2pdWzFdIHx8IDAsXG4gICAgICAgICAgc2lqMSA9IHNpW2ogLSAxXVsxXSB8fCAwLFxuICAgICAgICAgIHMzID0gKHNpajAgLSBzaWoxKSAvIDI7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGk7ICsraykge1xuICAgICAgICB2YXIgc2sgPSBzZXJpZXNbb3JkZXJba11dLFxuICAgICAgICAgICAgc2tqMCA9IHNrW2pdWzFdIHx8IDAsXG4gICAgICAgICAgICBza2oxID0gc2tbaiAtIDFdWzFdIHx8IDA7XG4gICAgICAgIHMzICs9IHNrajAgLSBza2oxO1xuICAgICAgfVxuICAgICAgczEgKz0gc2lqMCwgczIgKz0gczMgKiBzaWowO1xuICAgIH1cbiAgICBzMFtqIC0gMV1bMV0gKz0gczBbaiAtIDFdWzBdID0geTtcbiAgICBpZiAoczEpIHkgLT0gczIgLyBzMTtcbiAgfVxuICBzMFtqIC0gMV1bMV0gKz0gczBbaiAtIDFdWzBdID0geTtcbiAgbm9uZShzZXJpZXMsIG9yZGVyKTtcbn1cbiIsImltcG9ydCBub25lIGZyb20gXCIuL25vbmUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHZhciBwZWFrcyA9IHNlcmllcy5tYXAocGVhayk7XG4gIHJldHVybiBub25lKHNlcmllcykuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBwZWFrc1thXSAtIHBlYWtzW2JdOyB9KTtcbn1cblxuZnVuY3Rpb24gcGVhayhzZXJpZXMpIHtcbiAgdmFyIGkgPSAtMSwgaiA9IDAsIG4gPSBzZXJpZXMubGVuZ3RoLCB2aSwgdmogPSAtSW5maW5pdHk7XG4gIHdoaWxlICgrK2kgPCBuKSBpZiAoKHZpID0gK3Nlcmllc1tpXVsxXSkgPiB2aikgdmogPSB2aSwgaiA9IGk7XG4gIHJldHVybiBqO1xufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIHN1bXMgPSBzZXJpZXMubWFwKHN1bSk7XG4gIHJldHVybiBub25lKHNlcmllcykuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzdW1zW2FdIC0gc3Vtc1tiXTsgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW0oc2VyaWVzKSB7XG4gIHZhciBzID0gMCwgaSA9IC0xLCBuID0gc2VyaWVzLmxlbmd0aCwgdjtcbiAgd2hpbGUgKCsraSA8IG4pIGlmICh2ID0gK3Nlcmllc1tpXVsxXSkgcyArPSB2O1xuICByZXR1cm4gcztcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcykge1xuICByZXR1cm4gYXNjZW5kaW5nKHNlcmllcykucmV2ZXJzZSgpO1xufVxuIiwiaW1wb3J0IGFwcGVhcmFuY2UgZnJvbSBcIi4vYXBwZWFyYW5jZS5qc1wiO1xuaW1wb3J0IHtzdW19IGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIG4gPSBzZXJpZXMubGVuZ3RoLFxuICAgICAgaSxcbiAgICAgIGosXG4gICAgICBzdW1zID0gc2VyaWVzLm1hcChzdW0pLFxuICAgICAgb3JkZXIgPSBhcHBlYXJhbmNlKHNlcmllcyksXG4gICAgICB0b3AgPSAwLFxuICAgICAgYm90dG9tID0gMCxcbiAgICAgIHRvcHMgPSBbXSxcbiAgICAgIGJvdHRvbXMgPSBbXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgaiA9IG9yZGVyW2ldO1xuICAgIGlmICh0b3AgPCBib3R0b20pIHtcbiAgICAgIHRvcCArPSBzdW1zW2pdO1xuICAgICAgdG9wcy5wdXNoKGopO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3R0b20gKz0gc3Vtc1tqXTtcbiAgICAgIGJvdHRvbXMucHVzaChqKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm90dG9tcy5yZXZlcnNlKCkuY29uY2F0KHRvcHMpO1xufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgcmV0dXJuIG5vbmUoc2VyaWVzKS5yZXZlcnNlKCk7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgYXJjfSBmcm9tIFwiLi9hcmMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhcmVhfSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGluZX0gZnJvbSBcIi4vbGluZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZX0gZnJvbSBcIi4vcGllLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxBcmVhfSBmcm9tIFwiLi9hcmVhUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbEFyZWEgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsaW5lUmFkaWFsLCBkZWZhdWx0IGFzIHJhZGlhbExpbmV9IGZyb20gXCIuL2xpbmVSYWRpYWwuanNcIjsgLy8gTm90ZTogcmFkaWFsTGluZSBpcyBkZXByZWNhdGVkIVxuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50UmFkaWFsfSBmcm9tIFwiLi9wb2ludFJhZGlhbC5qc1wiO1xuZXhwb3J0IHtsaW5rSG9yaXpvbnRhbCwgbGlua1ZlcnRpY2FsLCBsaW5rUmFkaWFsfSBmcm9tIFwiLi9saW5rL2luZGV4LmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2wsIHN5bWJvbHN9IGZyb20gXCIuL3N5bWJvbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFN0YXJ9IGZyb20gXCIuL3N5bWJvbC9zdGFyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGV9IGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFd5ZX0gZnJvbSBcIi4vc3ltYm9sL3d5ZS5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vY3VydmUvYmFzaXNDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzT3Blbn0gZnJvbSBcIi4vY3VydmUvYmFzaXNPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc30gZnJvbSBcIi4vY3VydmUvYmFzaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJ1bmRsZX0gZnJvbSBcIi4vY3VydmUvYnVuZGxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21DbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21PcGVufSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbX0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTGluZWFyQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9saW5lYXJDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhcn0gZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5leHBvcnQge21vbm90b25lWCBhcyBjdXJ2ZU1vbm90b25lWCwgbW9ub3RvbmVZIGFzIGN1cnZlTW9ub3RvbmVZfSBmcm9tIFwiLi9jdXJ2ZS9tb25vdG9uZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTmF0dXJhbH0gZnJvbSBcIi4vY3VydmUvbmF0dXJhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlU3RlcCwgc3RlcEFmdGVyIGFzIGN1cnZlU3RlcEFmdGVyLCBzdGVwQmVmb3JlIGFzIGN1cnZlU3RlcEJlZm9yZX0gZnJvbSBcIi4vY3VydmUvc3RlcC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2t9IGZyb20gXCIuL3N0YWNrLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRFeHBhbmR9IGZyb20gXCIuL29mZnNldC9leHBhbmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldERpdmVyZ2luZ30gZnJvbSBcIi4vb2Zmc2V0L2RpdmVyZ2luZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0Tm9uZX0gZnJvbSBcIi4vb2Zmc2V0L25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldFNpbGhvdWV0dGV9IGZyb20gXCIuL29mZnNldC9zaWxob3VldHRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRXaWdnbGV9IGZyb20gXCIuL29mZnNldC93aWdnbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXBwZWFyYW5jZX0gZnJvbSBcIi4vb3JkZXIvYXBwZWFyYW5jZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJBc2NlbmRpbmd9IGZyb20gXCIuL29yZGVyL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJEZXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckluc2lkZU91dH0gZnJvbSBcIi4vb3JkZXIvaW5zaWRlT3V0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlck5vbmV9IGZyb20gXCIuL29yZGVyL25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyUmV2ZXJzZX0gZnJvbSBcIi4vb3JkZXIvcmV2ZXJzZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30201\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-time-format.a65ee5dd26cb2ba5.bundle.js b/assets/demo/site/npm.d3-time-format.a65ee5dd26cb2ba5.bundle.js
new file mode 100644
index 00000000..191b41ad
--- /dev/null
+++ b/assets/demo/site/npm.d3-time-format.a65ee5dd26cb2ba5.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4107],{90317:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z1": () => (/* binding */ timeParse),\n/* harmony export */ "ZP": () => (/* binding */ defaultLocale),\n/* harmony export */ "g0": () => (/* binding */ utcFormat),\n/* harmony export */ "i$": () => (/* binding */ timeFormat),\n/* harmony export */ "wp": () => (/* binding */ utcParse)\n/* harmony export */ });\n/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52661);\n\n\nvar locale;\nvar timeFormat;\nvar timeParse;\nvar utcFormat;\nvar utcParse;\n\ndefaultLocale({\n dateTime: "%x, %X",\n date: "%-m/%-d/%Y",\n time: "%-I:%M:%S %p",\n periods: ["AM", "PM"],\n days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],\n shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],\n months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],\n shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]\n});\n\nfunction defaultLocale(definition) {\n locale = (0,_locale_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTAzMTcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBdUM7O0FBRXZDO0FBQ087QUFDQTtBQUNBO0FBQ0E7O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFYztBQUNmLFdBQVcsK0RBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzPzE2M2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///90317\n')},48866:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "zh": () => (/* reexport */ isoFormat),\n "ji": () => (/* reexport */ isoParse),\n "i$": () => (/* reexport */ defaultLocale/* timeFormat */.i$),\n "Ds": () => (/* reexport */ defaultLocale/* default */.ZP),\n "Dq": () => (/* reexport */ locale/* default */.Z),\n "Z1": () => (/* reexport */ defaultLocale/* timeParse */.Z1),\n "g0": () => (/* reexport */ defaultLocale/* utcFormat */.g0),\n "wp": () => (/* reexport */ defaultLocale/* utcParse */.wp)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-time-format/src/defaultLocale.js\nvar defaultLocale = __webpack_require__(90317);\n// EXTERNAL MODULE: ./node_modules/d3-time-format/src/locale.js + 8 modules\nvar locale = __webpack_require__(52661);\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/isoFormat.js\n\n\nvar isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : (0,defaultLocale/* utcFormat */.g0)(isoSpecifier);\n\n/* harmony default export */ const isoFormat = (formatIso);\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/isoParse.js\n\n\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date("2000-01-01T00:00:00.000Z")\n ? parseIsoNative\n : (0,defaultLocale/* utcParse */.wp)(isoSpecifier);\n\n/* harmony default export */ const isoParse = (parseIso);\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/index.js\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg4NjYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTZDOztBQUV0Qzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sbUNBQVM7O0FBRWYsZ0RBQWUsU0FBUyxFQUFDOzs7QUNabUI7QUFDQTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sa0NBQVEsQ0FBQyxZQUFZOztBQUUzQiwrQ0FBZSxRQUFRLEVBQUM7OztBQ1owRjtBQUMxRDtBQUNKO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2lzb0Zvcm1hdC5qcz9iZjQyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvUGFyc2UuanM/N2M5MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2luZGV4LmpzPzJiZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1dGNGb3JtYXR9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcblxuZXhwb3J0IHZhciBpc29TcGVjaWZpZXIgPSBcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiO1xuXG5mdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG52YXIgZm9ybWF0SXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcbiAgICA/IGZvcm1hdElzb05hdGl2ZVxuICAgIDogdXRjRm9ybWF0KGlzb1NwZWNpZmllcik7XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdElzbztcbiIsImltcG9ydCB7aXNvU3BlY2lmaWVyfSBmcm9tIFwiLi9pc29Gb3JtYXQuanNcIjtcbmltcG9ydCB7dXRjUGFyc2V9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcblxuZnVuY3Rpb24gcGFyc2VJc29OYXRpdmUoc3RyaW5nKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoc3RyaW5nKTtcbiAgcmV0dXJuIGlzTmFOKGRhdGUpID8gbnVsbCA6IGRhdGU7XG59XG5cbnZhciBwYXJzZUlzbyA9ICtuZXcgRGF0ZShcIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWlwiKVxuICAgID8gcGFyc2VJc29OYXRpdmVcbiAgICA6IHV0Y1BhcnNlKGlzb1NwZWNpZmllcik7XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlSXNvO1xuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlLCB0aW1lRm9ybWF0LCB0aW1lUGFyc2UsIHV0Y0Zvcm1hdCwgdXRjUGFyc2V9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aW1lRm9ybWF0TG9jYWxlfSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpc29Gb3JtYXR9IGZyb20gXCIuL2lzb0Zvcm1hdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGlzb1BhcnNlfSBmcm9tIFwiLi9pc29QYXJzZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///48866\n')},52661:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": () => (/* binding */ formatLocale)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/interval.js\nvar t0 = new Date,\n t1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/duration.js\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/utcWeek.js\n\n\n\nfunction utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcSundays = utcSunday.range;\nvar utcMondays = utcMonday.range;\nvar utcTuesdays = utcTuesday.range;\nvar utcWednesdays = utcWednesday.range;\nvar utcThursdays = utcThursday.range;\nvar utcFridays = utcFriday.range;\nvar utcSaturdays = utcSaturday.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/utcDay.js\n\n\n\nvar utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\n/* harmony default export */ const src_utcDay = (utcDay);\nvar utcDays = utcDay.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/week.js\n\n\n\nfunction weekday(i) {\n return newInterval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar sundays = sunday.range;\nvar mondays = monday.range;\nvar tuesdays = tuesday.range;\nvar wednesdays = wednesday.range;\nvar thursdays = thursday.range;\nvar fridays = friday.range;\nvar saturdays = saturday.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/day.js\n\n\n\nvar day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\n/* harmony default export */ const src_day = (day);\nvar days = day.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/year.js\n\n\nvar year = newInterval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\n/* harmony default export */ const src_year = (year);\nvar years = year.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/node_modules/d3-time/src/utcYear.js\n\n\nvar utcYear = newInterval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\n/* harmony default export */ const src_utcYear = (utcYear);\nvar utcYears = utcYear.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/locale.js\n\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n "a": formatShortWeekday,\n "A": formatWeekday,\n "b": formatShortMonth,\n "B": formatMonth,\n "c": null,\n "d": formatDayOfMonth,\n "e": formatDayOfMonth,\n "f": formatMicroseconds,\n "g": formatYearISO,\n "G": formatFullYearISO,\n "H": formatHour24,\n "I": formatHour12,\n "j": formatDayOfYear,\n "L": formatMilliseconds,\n "m": formatMonthNumber,\n "M": formatMinutes,\n "p": formatPeriod,\n "q": formatQuarter,\n "Q": formatUnixTimestamp,\n "s": formatUnixTimestampSeconds,\n "S": formatSeconds,\n "u": formatWeekdayNumberMonday,\n "U": formatWeekNumberSunday,\n "V": formatWeekNumberISO,\n "w": formatWeekdayNumberSunday,\n "W": formatWeekNumberMonday,\n "x": null,\n "X": null,\n "y": formatYear,\n "Y": formatFullYear,\n "Z": formatZone,\n "%": formatLiteralPercent\n };\n\n var utcFormats = {\n "a": formatUTCShortWeekday,\n "A": formatUTCWeekday,\n "b": formatUTCShortMonth,\n "B": formatUTCMonth,\n "c": null,\n "d": formatUTCDayOfMonth,\n "e": formatUTCDayOfMonth,\n "f": formatUTCMicroseconds,\n "g": formatUTCYearISO,\n "G": formatUTCFullYearISO,\n "H": formatUTCHour24,\n "I": formatUTCHour12,\n "j": formatUTCDayOfYear,\n "L": formatUTCMilliseconds,\n "m": formatUTCMonthNumber,\n "M": formatUTCMinutes,\n "p": formatUTCPeriod,\n "q": formatUTCQuarter,\n "Q": formatUnixTimestamp,\n "s": formatUnixTimestampSeconds,\n "S": formatUTCSeconds,\n "u": formatUTCWeekdayNumberMonday,\n "U": formatUTCWeekNumberSunday,\n "V": formatUTCWeekNumberISO,\n "w": formatUTCWeekdayNumberSunday,\n "W": formatUTCWeekNumberMonday,\n "x": null,\n "X": null,\n "y": formatUTCYear,\n "Y": formatUTCFullYear,\n "Z": formatUTCZone,\n "%": formatLiteralPercent\n };\n\n var parses = {\n "a": parseShortWeekday,\n "A": parseWeekday,\n "b": parseShortMonth,\n "B": parseMonth,\n "c": parseLocaleDateTime,\n "d": parseDayOfMonth,\n "e": parseDayOfMonth,\n "f": parseMicroseconds,\n "g": parseYear,\n "G": parseFullYear,\n "H": parseHour24,\n "I": parseHour24,\n "j": parseDayOfYear,\n "L": parseMilliseconds,\n "m": parseMonthNumber,\n "M": parseMinutes,\n "p": parsePeriod,\n "q": parseQuarter,\n "Q": parseUnixTimestamp,\n "s": parseUnixTimestampSeconds,\n "S": parseSeconds,\n "u": parseWeekdayNumberMonday,\n "U": parseWeekNumberSunday,\n "V": parseWeekNumberISO,\n "w": parseWeekdayNumberSunday,\n "W": parseWeekNumberMonday,\n "x": parseLocaleDate,\n "X": parseLocaleTime,\n "y": parseYear,\n "Y": parseFullYear,\n "Z": parseZone,\n "%": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === "e" ? " " : "0";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join("");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += "", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if ("Q" in d) return new Date(d.Q);\n if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !("Z" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ("p" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = "q" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if ("V" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!("w" in d)) d.w = 1;\n if ("Z" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = src_utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? monday.ceil(week) : monday(week);\n week = src_day.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if ("W" in d || "U" in d) {\n if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;\n day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if ("Z" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += "", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += "", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += "", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += "", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {"-": "", "_": " ", "0": "0"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? "-" : "",\n string = (sign ? -value : value) + "",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, "\\\\$&");\n}\n\nfunction formatRe(names) {\n return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + src_day.count(src_year(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + "000";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(sunday.count(src_year(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(thursday.count(src_year(d), d) + (src_year(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(monday.count(src_year(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? "-" : (z *= -1, "+"))\n + pad(z / 60 | 0, "0", 2)\n + pad(z % 60, "0", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + src_utcDay.count(src_utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + "000";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(src_utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(src_utcYear(d), d) + (src_utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(src_utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return "+0000";\n}\n\nfunction formatLiteralPercent() {\n return "%";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxjQUFjLFNBQVMsU0FBUztBQUN4RSxpQkFBaUIsaUJBQWE7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0Esd0NBQXdDLFdBQWUsU0FBUyxNQUFVO0FBQzFFLGlCQUFpQixjQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsYUFBYSxDQUFDLFFBQVE7QUFDdkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsWUFBZ0IsQ0FBQyxRQUFRO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsUUFBWSxNQUFNLGFBQWlCO0FBQ3RFOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGNBQWtCLENBQUMsUUFBUSxXQUFXLFFBQVE7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxZQUFnQixDQUFDLFFBQVE7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLFFBQVksTUFBTSxhQUFpQjtBQUNuRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnQkFBWSxDQUFDLFdBQU87QUFDckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsZUFBZSxDQUFDLFdBQU87QUFDcEM7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxXQUFXLE1BQU0sZ0JBQWdCO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQixDQUFDLFdBQU8sV0FBVyxXQUFPO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsZUFBZSxDQUFDLFdBQU87QUFDcEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLFdBQVcsTUFBTSxnQkFBZ0I7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzP2JjZGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcz9lYTNlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjV2Vlay5qcz9mYmZiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzPzc1M2YiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzP2Y0ZWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanM/OTA1MiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanM/ODdmZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanM/ZTAwOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcz81YzFiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0MCA9IG5ldyBEYXRlLFxuICAgIHQxID0gbmV3IERhdGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5ld0ludGVydmFsKGZsb29yaSwgb2Zmc2V0aSwgY291bnQsIGZpZWxkKSB7XG5cbiAgZnVuY3Rpb24gaW50ZXJ2YWwoZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyBuZXcgRGF0ZSA6IG5ldyBEYXRlKCtkYXRlKSksIGRhdGU7XG4gIH1cblxuICBpbnRlcnZhbC5mbG9vciA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLmNlaWwgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoZGF0ZSAtIDEpKSwgb2Zmc2V0aShkYXRlLCAxKSwgZmxvb3JpKGRhdGUpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJvdW5kID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHZhciBkMCA9IGludGVydmFsKGRhdGUpLFxuICAgICAgICBkMSA9IGludGVydmFsLmNlaWwoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZSA/IGQwIDogZDE7XG4gIH07XG5cbiAgaW50ZXJ2YWwub2Zmc2V0ID0gZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIHJldHVybiBvZmZzZXRpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSksIHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgdmFyIHJhbmdlID0gW10sIHByZXZpb3VzO1xuICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XG4gICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgIGlmICghKHN0YXJ0IDwgc3RvcCkgfHwgIShzdGVwID4gMCkpIHJldHVybiByYW5nZTsgLy8gYWxzbyBoYW5kbGVzIEludmFsaWQgRGF0ZVxuICAgIGRvIHJhbmdlLnB1c2gocHJldmlvdXMgPSBuZXcgRGF0ZSgrc3RhcnQpKSwgb2Zmc2V0aShzdGFydCwgc3RlcCksIGZsb29yaShzdGFydCk7XG4gICAgd2hpbGUgKHByZXZpb3VzIDwgc3RhcnQgJiYgc3RhcnQgPCBzdG9wKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgaW50ZXJ2YWwuZmlsdGVyID0gZnVuY3Rpb24odGVzdCkge1xuICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB3aGlsZSAoZmxvb3JpKGRhdGUpLCAhdGVzdChkYXRlKSkgZGF0ZS5zZXRUaW1lKGRhdGUgLSAxKTtcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB7XG4gICAgICAgIGlmIChzdGVwIDwgMCkgd2hpbGUgKCsrc3RlcCA8PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9IGVsc2Ugd2hpbGUgKC0tc3RlcCA+PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgKzEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICB0MC5zZXRUaW1lKCtzdGFydCksIHQxLnNldFRpbWUoK2VuZCk7XG4gICAgICBmbG9vcmkodDApLCBmbG9vcmkodDEpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAsIHQxKSk7XG4gICAgfTtcblxuICAgIGludGVydmFsLmV2ZXJ5ID0gZnVuY3Rpb24oc3RlcCkge1xuICAgICAgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgICByZXR1cm4gIWlzRmluaXRlKHN0ZXApIHx8ICEoc3RlcCA+IDApID8gbnVsbFxuICAgICAgICAgIDogIShzdGVwID4gMSkgPyBpbnRlcnZhbFxuICAgICAgICAgIDogaW50ZXJ2YWwuZmlsdGVyKGZpZWxkXG4gICAgICAgICAgICAgID8gZnVuY3Rpb24oZCkgeyByZXR1cm4gZmllbGQoZCkgJSBzdGVwID09PSAwOyB9XG4gICAgICAgICAgICAgIDogZnVuY3Rpb24oZCkgeyByZXR1cm4gaW50ZXJ2YWwuY291bnQoMCwgZCkgJSBzdGVwID09PSAwOyB9KTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGludGVydmFsO1xufVxuIiwiZXhwb3J0IHZhciBkdXJhdGlvblNlY29uZCA9IDFlMztcbmV4cG9ydCB2YXIgZHVyYXRpb25NaW51dGUgPSA2ZTQ7XG5leHBvcnQgdmFyIGR1cmF0aW9uSG91ciA9IDM2ZTU7XG5leHBvcnQgdmFyIGR1cmF0aW9uRGF5ID0gODY0ZTU7XG5leHBvcnQgdmFyIGR1cmF0aW9uV2VlayA9IDYwNDhlNTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5cyA9IHV0Y01vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXl9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNEYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0RheTtcbmV4cG9ydCB2YXIgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XG5leHBvcnQgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG5leHBvcnQgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciBzdW5kYXlzID0gc3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0dWVzZGF5cyA9IHR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHdlZG5lc2RheXMgPSB3ZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBmcmlkYXlzID0gZnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBzYXR1cmRheXMgPSBzYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXk7XG5leHBvcnQgdmFyIGRheXMgPSBkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgdXRjWWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG51dGNZZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjWWVhcjtcbmV4cG9ydCB2YXIgdXRjWWVhcnMgPSB1dGNZZWFyLnJhbmdlO1xuIiwiaW1wb3J0IHtcbiAgdGltZURheSxcbiAgdGltZVN1bmRheSxcbiAgdGltZU1vbmRheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lWWVhcixcbiAgdXRjRGF5LFxuICB1dGNTdW5kYXksXG4gIHV0Y01vbmRheSxcbiAgdXRjVGh1cnNkYXksXG4gIHV0Y1llYXJcbn0gZnJvbSBcImQzLXRpbWVcIjtcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3RGF0ZSh5LCBtLCBkKSB7XG4gIHJldHVybiB7eTogeSwgbTogbSwgZDogZCwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdE1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogZm9ybWF0WWVhcklTTyxcbiAgICBcIkdcIjogZm9ybWF0RnVsbFllYXJJU08sXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcInFcIjogZm9ybWF0UXVhcnRlcixcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFVUQ1llYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdFVUQ0Z1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRVVENIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcbiAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRVVENNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRVVENQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFVUQ1F1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBwYXJzZU1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogcGFyc2VZZWFyLFxuICAgIFwiR1wiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcInFcIjogcGFyc2VRdWFydGVyLFxuICAgIFwiUVwiOiBwYXJzZVVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICBcInVcIjogcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IHBhcnNlV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBwYXJzZVdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IHBhcnNlTG9jYWxlRGF0ZSxcbiAgICBcIlhcIjogcGFyc2VMb2NhbGVUaW1lLFxuICAgIFwieVwiOiBwYXJzZVllYXIsXG4gICAgXCJZXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgXCJaXCI6IHBhcnNlWm9uZSxcbiAgICBcIiVcIjogcGFyc2VMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIC8vIFRoZXNlIHJlY3Vyc2l2ZSBkaXJlY3RpdmUgZGVmaW5pdGlvbnMgbXVzdCBiZSBkZWZlcnJlZC5cbiAgZm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgZm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIHV0Y0Zvcm1hdHMpO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIsIGZvcm1hdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgdmFyIHN0cmluZyA9IFtdLFxuICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICBqID0gMCxcbiAgICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgICBjLFxuICAgICAgICAgIHBhZCxcbiAgICAgICAgICBmb3JtYXQ7XG5cbiAgICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKTtcblxuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5jaGFyQ29kZUF0KGkpID09PSAzNykge1xuICAgICAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICAgICAgaWYgKChwYWQgPSBwYWRzW2MgPSBzcGVjaWZpZXIuY2hhckF0KCsraSldKSAhPSBudWxsKSBjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpO1xuICAgICAgICAgIGVsc2UgcGFkID0gYyA9PT0gXCJlXCIgPyBcIiBcIiA6IFwiMFwiO1xuICAgICAgICAgIGlmIChmb3JtYXQgPSBmb3JtYXRzW2NdKSBjID0gZm9ybWF0KGRhdGUsIHBhZCk7XG4gICAgICAgICAgc3RyaW5nLnB1c2goYyk7XG4gICAgICAgICAgaiA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICByZXR1cm4gc3RyaW5nLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5ld1BhcnNlKHNwZWNpZmllciwgWikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHZhciBkID0gbmV3RGF0ZSgxOTAwLCB1bmRlZmluZWQsIDEpLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKSxcbiAgICAgICAgICB3ZWVrLCBkYXk7XG4gICAgICBpZiAoaSAhPSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gSWYgYSBVTklYIHRpbWVzdGFtcCBpcyBzcGVjaWZpZWQsIHJldHVybiBpdC5cbiAgICAgIGlmIChcIlFcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5RKTtcbiAgICAgIGlmIChcInNcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5zICogMTAwMCArIChcIkxcIiBpbiBkID8gZC5MIDogMCkpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIHV0Y1BhcnNlLCBuZXZlciB1c2UgdGhlIGxvY2FsIHRpbWV6b25lLlxuICAgICAgaWYgKFogJiYgIShcIlpcIiBpbiBkKSkgZC5aID0gMDtcblxuICAgICAgLy8gVGhlIGFtLXBtIGZsYWcgaXMgMCBmb3IgQU0sIGFuZCAxIGZvciBQTS5cbiAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xuXG4gICAgICAvLyBJZiB0aGUgbW9udGggd2FzIG5vdCBzcGVjaWZpZWQsIGluaGVyaXQgZnJvbSB0aGUgcXVhcnRlci5cbiAgICAgIGlmIChkLm0gPT09IHVuZGVmaW5lZCkgZC5tID0gXCJxXCIgaW4gZCA/IGQucSA6IDA7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0RGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdGltZU1vbmRheS5jZWlsKHdlZWspIDogdGltZU1vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdGltZURheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0TW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldERhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXCJXXCIgaW4gZCB8fCBcIlVcIiBpbiBkKSB7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSBcInVcIiBpbiBkID8gZC51ICUgNyA6IFwiV1wiIGluIGQgPyAxIDogMDtcbiAgICAgICAgZGF5ID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXRVVENEYXkoKSA6IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldERheSgpO1xuICAgICAgICBkLm0gPSAwO1xuICAgICAgICBkLmQgPSBcIldcIiBpbiBkID8gKGQudyArIDYpICUgNyArIGQuVyAqIDcgLSAoZGF5ICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChkYXkgKyA2KSAlIDc7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGEgdGltZSB6b25lIGlzIHNwZWNpZmllZCwgYWxsIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRDIGFuZCB0aGVuXG4gICAgICAvLyBvZmZzZXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lLlxuICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgZC5IICs9IGQuWiAvIDEwMCB8IDA7XG4gICAgICAgIGQuTSArPSBkLlogJSAxMDA7XG4gICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGFsbCBmaWVsZHMgYXJlIGluIGxvY2FsIHRpbWUuXG4gICAgICByZXR1cm4gbG9jYWxEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRNb250aCgpIC8gMyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRVVENIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0VVRDTW9udGgoKSAvIDMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBmYWxzZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIHRydWUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHZhciBtYXAgPSB7fSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbWFwW25hbWVzW2ldLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWFydGVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuTCA9IE1hdGguZmxvb3IoblswXSAvIDEwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQuUSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLnMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVTdW5kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGRJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh0aW1lVGh1cnNkYXkuY291bnQodGltZVllYXIoZCksIGQpICsgKHRpbWVZZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXREYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZU1vbmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIFVUQ2RJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XG4gIHJldHVybiArZDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xuICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///52661\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-time.019fe9160241a16d.bundle.js b/assets/demo/site/npm.d3-time.019fe9160241a16d.bundle.js
new file mode 100644
index 00000000..0136a677
--- /dev/null
+++ b/assets/demo/site/npm.d3-time.019fe9160241a16d.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4361],{96199:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "AN": () => (/* binding */ utcDay),\n/* harmony export */ "KB": () => (/* binding */ unixDay),\n/* harmony export */ "rr": () => (/* binding */ timeDay)\n/* harmony export */ });\n/* unused harmony exports timeDays, utcDays, unixDays */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11262);\n\n\n\nconst timeDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationDay */ .UD,\n date => date.getDate() - 1\n);\n\nconst timeDays = timeDay.range;\n\nconst utcDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationDay */ .UD;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nconst utcDays = utcDay.range;\n\nconst unixDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationDay */ .UD;\n}, (date) => {\n return Math.floor(date / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationDay */ .UD);\n});\n\nconst unixDays = unixDay.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOTkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBMkM7QUFDZTs7QUFFbkQsZ0JBQWdCLG1FQUFZO0FBQ25DO0FBQ0E7QUFDQSx5RkFBeUYsa0VBQWMsSUFBSSwrREFBVztBQUN0SDtBQUNBOztBQUVPOztBQUVBLGVBQWUsbUVBQVk7QUFDbEM7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0QseUJBQXlCLCtEQUFXO0FBQ3BDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU07O0FBRUEsZ0JBQWdCLG1FQUFZO0FBQ25DO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNELHlCQUF5QiwrREFBVztBQUNwQyxDQUFDO0FBQ0QsMkJBQTJCLCtEQUFXO0FBQ3RDLENBQUM7O0FBRU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzP2Q0NWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXkgPSB0aW1lSW50ZXJ2YWwoXG4gIGRhdGUgPT4gZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSxcbiAgKGRhdGUsIHN0ZXApID0+IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApLFxuICAoc3RhcnQsIGVuZCkgPT4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheSxcbiAgZGF0ZSA9PiBkYXRlLmdldERhdGUoKSAtIDFcbik7XG5cbmV4cG9ydCBjb25zdCB0aW1lRGF5cyA9IHRpbWVEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5ID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25EYXkpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5cyA9IHVuaXhEYXkucmFuZ2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96199\n')},11262:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "UD": () => (/* binding */ durationDay),\n/* harmony export */ "Y2": () => (/* binding */ durationHour),\n/* harmony export */ "Ym": () => (/* binding */ durationSecond),\n/* harmony export */ "iM": () => (/* binding */ durationWeek),\n/* harmony export */ "jz": () => (/* binding */ durationMonth),\n/* harmony export */ "qz": () => (/* binding */ durationYear),\n/* harmony export */ "yB": () => (/* binding */ durationMinute)\n/* harmony export */ });\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEyNjIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanM/NDE4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZHVyYXRpb25TZWNvbmQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTWludXRlID0gZHVyYXRpb25TZWNvbmQgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uRGF5ID0gZHVyYXRpb25Ib3VyICogMjQ7XG5leHBvcnQgY29uc3QgZHVyYXRpb25XZWVrID0gZHVyYXRpb25EYXkgKiA3O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uWWVhciA9IGR1cmF0aW9uRGF5ICogMzY1O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11262\n')},66549:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "WQ": () => (/* binding */ timeHour),\n/* harmony export */ "lM": () => (/* binding */ utcHour)\n/* harmony export */ });\n/* unused harmony exports timeHours, utcHours */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11262);\n\n\n\nconst timeHour = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationSecond */ .Ym - date.getMinutes() * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationHour */ .Y2);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationHour */ .Y2;\n}, (date) => {\n return date.getHours();\n});\n\nconst timeHours = timeHour.range;\n\nconst utcHour = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationHour */ .Y2);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationHour */ .Y2;\n}, (date) => {\n return date.getUTCHours();\n});\n\nconst utcHours = utcHour.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY1NDkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyQztBQUNnQzs7QUFFcEUsaUJBQWlCLG1FQUFZO0FBQ3BDLG1FQUFtRSxrRUFBYyx1QkFBdUIsa0VBQWM7QUFDdEgsQ0FBQztBQUNELDhCQUE4QixnRUFBWTtBQUMxQyxDQUFDO0FBQ0QseUJBQXlCLGdFQUFZO0FBQ3JDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU07O0FBRUEsZ0JBQWdCLG1FQUFZO0FBQ25DO0FBQ0EsQ0FBQztBQUNELDhCQUE4QixnRUFBWTtBQUMxQyxDQUFDO0FBQ0QseUJBQXlCLGdFQUFZO0FBQ3JDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcz82YzI3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91cnMgPSB0aW1lSG91ci5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///66549\n')},52576:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "J": () => (/* binding */ timeInterval)\n/* harmony export */ });\nconst t0 = new Date, t1 = new Date;\n\nfunction timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTI1NzYuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0FBRU87O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQsVUFBVTtBQUNWLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcz9iNjk1Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHQwID0gbmV3IERhdGUsIHQxID0gbmV3IERhdGU7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lSW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gKGRhdGUpID0+IHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLmNlaWwgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IChkYXRlKSA9PiB7XG4gICAgY29uc3QgZDAgPSBpbnRlcnZhbChkYXRlKSwgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IChkYXRlLCBzdGVwKSA9PiB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gKHN0YXJ0LCBzdG9wLCBzdGVwKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPSBbXTtcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBsZXQgcHJldmlvdXM7XG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSAodGVzdCkgPT4ge1xuICAgIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB7XG4gICAgICAgIGlmIChzdGVwIDwgMCkgd2hpbGUgKCsrc3RlcCA8PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9IGVsc2Ugd2hpbGUgKC0tc3RlcCA+PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgKzEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IChzdGVwKSA9PiB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyAoZCkgPT4gZmllbGQoZCkgJSBzdGVwID09PSAwXG4gICAgICAgICAgICAgIDogKGQpID0+IGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///52576\n')},22828:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z_": () => (/* binding */ timeMinute),\n/* harmony export */ "rz": () => (/* binding */ utcMinute)\n/* harmony export */ });\n/* unused harmony exports timeMinutes, utcMinutes */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11262);\n\n\n\nconst timeMinute = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationSecond */ .Ym);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB;\n}, (date) => {\n return date.getMinutes();\n});\n\nconst timeMinutes = timeMinute.range;\n\nconst utcMinute = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nconst utcMinutes = utcMinute.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI4MjguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyQztBQUNrQjs7QUFFdEQsbUJBQW1CLG1FQUFZO0FBQ3RDLG1FQUFtRSxrRUFBYztBQUNqRixDQUFDO0FBQ0QsOEJBQThCLGtFQUFjO0FBQzVDLENBQUM7QUFDRCx5QkFBeUIsa0VBQWM7QUFDdkMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTTs7QUFFQSxrQkFBa0IsbUVBQVk7QUFDckM7QUFDQSxDQUFDO0FBQ0QsOEJBQThCLGtFQUFjO0FBQzVDLENBQUM7QUFDRCx5QkFBeUIsa0VBQWM7QUFDdkMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanM/MmQwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlcyA9IHRpbWVNaW51dGUucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNaW51dGUgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///22828\n')},36978:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "F0": () => (/* binding */ timeMonth),\n/* harmony export */ "me": () => (/* binding */ utcMonth)\n/* harmony export */ });\n/* unused harmony exports timeMonths, utcMonths */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n\n\nconst timeMonth = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nconst timeMonths = timeMonth.range;\n\nconst utcMonth = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nconst utcMonths = utcMonth.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5NzguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTJDOztBQUVwQyxrQkFBa0IsbUVBQVk7QUFDckM7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRU07O0FBRUEsaUJBQWlCLG1FQUFZO0FBQ3BDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzP2Q5Y2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lTW9udGggPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRocyA9IHRpbWVNb250aC5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y01vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZSgxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01vbnRocyA9IHV0Y01vbnRoLnJhbmdlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///36978\n')},26599:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "E": () => (/* binding */ second)\n/* harmony export */ });\n/* unused harmony export seconds */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11262);\n\n\n\nconst second = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationSecond */ .Ym);\n}, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationSecond */ .Ym;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nconst seconds = second.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OTkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTJDO0FBQ0U7O0FBRXRDLGVBQWUsbUVBQVk7QUFDbEM7QUFDQSxDQUFDO0FBQ0QsOEJBQThCLGtFQUFjO0FBQzVDLENBQUM7QUFDRCx5QkFBeUIsa0VBQWM7QUFDdkMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFTSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanM/NDBlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmQgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26599\n')},9981:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "_g": () => (/* binding */ timeTickInterval),\n "jK": () => (/* binding */ timeTicks),\n "jo": () => (/* binding */ utcTickInterval),\n "WG": () => (/* binding */ utcTicks)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-time/node_modules/d3-array/src/ascending.js\nfunction ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-time/node_modules/d3-array/src/descending.js\nfunction descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-time/node_modules/d3-array/src/bisector.js\n\n\n\nfunction bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-time/node_modules/d3-array/src/ticks.js\nconst e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nfunction ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nfunction tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-time/src/duration.js\nvar duration = __webpack_require__(11262);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/interval.js\nvar interval = __webpack_require__(52576);\n;// CONCATENATED MODULE: ./node_modules/d3-time/src/millisecond.js\n\n\nconst millisecond = (0,interval/* timeInterval */.J)(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return (0,interval/* timeInterval */.J)((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nconst milliseconds = millisecond.range;\n\n// EXTERNAL MODULE: ./node_modules/d3-time/src/second.js\nvar second = __webpack_require__(26599);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/minute.js\nvar minute = __webpack_require__(22828);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/hour.js\nvar hour = __webpack_require__(66549);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/day.js\nvar day = __webpack_require__(96199);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/week.js\nvar week = __webpack_require__(85235);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/month.js\nvar month = __webpack_require__(36978);\n// EXTERNAL MODULE: ./node_modules/d3-time/src/year.js\nvar year = __webpack_require__(38887);\n;// CONCATENATED MODULE: ./node_modules/d3-time/src/ticks.js\n\n\n\n\n\n\n\n\n\n\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second/* second */.E, 1, duration/* durationSecond */.Ym],\n [second/* second */.E, 5, 5 * duration/* durationSecond */.Ym],\n [second/* second */.E, 15, 15 * duration/* durationSecond */.Ym],\n [second/* second */.E, 30, 30 * duration/* durationSecond */.Ym],\n [minute, 1, duration/* durationMinute */.yB],\n [minute, 5, 5 * duration/* durationMinute */.yB],\n [minute, 15, 15 * duration/* durationMinute */.yB],\n [minute, 30, 30 * duration/* durationMinute */.yB],\n [ hour, 1, duration/* durationHour */.Y2 ],\n [ hour, 3, 3 * duration/* durationHour */.Y2 ],\n [ hour, 6, 6 * duration/* durationHour */.Y2 ],\n [ hour, 12, 12 * duration/* durationHour */.Y2 ],\n [ day, 1, duration/* durationDay */.UD ],\n [ day, 2, 2 * duration/* durationDay */.UD ],\n [ week, 1, duration/* durationWeek */.iM ],\n [ month, 1, duration/* durationMonth */.jz ],\n [ month, 3, 3 * duration/* durationMonth */.jz ],\n [ year, 1, duration/* durationYear */.qz ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / duration/* durationYear */.qz, stop / duration/* durationYear */.qz, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(year/* utcYear */.ol, month/* utcMonth */.me, week/* utcSunday */.pI, day/* unixDay */.KB, hour/* utcHour */.lM, minute/* utcMinute */.rz);\nconst [timeTicks, timeTickInterval] = ticker(year/* timeYear */.jB, month/* timeMonth */.F0, week/* timeSunday */.Zy, day/* timeDay */.rr, hour/* timeHour */.WQ, minute/* timeMinute */.Z_);\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk4MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBOzs7QUNGZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTnVDO0FBQ0U7O0FBRTFCO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCLHlCQUF5QixTQUFTO0FBQ2xDO0FBQ0EsSUFBSTtBQUNKLHFCQUFxQixTQUFTLFVBQVUsVUFBVTtBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBOzs7QUN2REE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLE9BQU87QUFDeEMseUJBQXlCLE9BQU87QUFDaEMsSUFBSTtBQUNKLGlDQUFpQyxPQUFPO0FBQ3hDLHlCQUF5QixPQUFPO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDdEQyQzs7QUFFcEMsb0JBQW9CLGdDQUFZO0FBQ3ZDO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQ0FBWTtBQUNyQjtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFTzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QnFDO0FBQ3VGO0FBQ3RGO0FBQ1Y7QUFDZTtBQUNOO0FBQ0Y7QUFDTTtBQUNEO0FBQ0g7O0FBRTVDOztBQUVBO0FBQ0EsS0FBSyxvQkFBTSxXQUFXLCtCQUFjO0FBQ3BDLEtBQUssb0JBQU0sV0FBVywrQkFBYztBQUNwQyxLQUFLLG9CQUFNLFdBQVcsK0JBQWM7QUFDcEMsS0FBSyxvQkFBTSxXQUFXLCtCQUFjO0FBQ3BDLHNCQUFzQiwrQkFBYztBQUNwQyxzQkFBc0IsK0JBQWM7QUFDcEMsc0JBQXNCLCtCQUFjO0FBQ3BDLHNCQUFzQiwrQkFBYztBQUNwQyxzQkFBc0IsNkJBQVk7QUFDbEMsc0JBQXNCLDZCQUFZO0FBQ2xDLHNCQUFzQiw2QkFBWTtBQUNsQyxzQkFBc0IsNkJBQVk7QUFDbEMsc0JBQXNCLDRCQUFXO0FBQ2pDLHNCQUFzQiw0QkFBVztBQUNqQyxzQkFBc0IsNkJBQVk7QUFDbEMsc0JBQXNCLDhCQUFhO0FBQ25DLHNCQUFzQiw4QkFBYTtBQUNuQyxzQkFBc0IsNkJBQVk7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLHNEQUFzRCxRQUFRLFNBQVMsNkJBQVksU0FBUyw2QkFBWTtBQUN4Ryx3QkFBd0IsaUJBQWlCLFVBQVUsUUFBUTtBQUMzRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkMsb0JBQU8sRUFBRSxzQkFBUSxFQUFFLHNCQUFTLEVBQUUsbUJBQU8sRUFBRSxvQkFBTyxFQUFFLHdCQUFTO0FBQ3BHLDZDQUE2QyxxQkFBUSxFQUFFLHVCQUFTLEVBQUUsdUJBQVUsRUFBRSxtQkFBTyxFQUFFLHFCQUFRLEVBQUUseUJBQVU7O0FBRTNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hc2NlbmRpbmcuanM/NzYyNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanM/MzVjOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzPzY1NGEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcz81MjhjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taWxsaXNlY29uZC5qcz9mZDJiIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy90aWNrcy5qcz8xZmM0Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU5cbiAgICA6IGIgPCBhID8gLTFcbiAgICA6IGIgPiBhID8gMVxuICAgIDogYiA+PSBhID8gMFxuICAgIDogTmFOO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBkZXNjZW5kaW5nIGZyb20gXCIuL2Rlc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmlzZWN0b3IoZikge1xuICBsZXQgY29tcGFyZTEsIGNvbXBhcmUyLCBkZWx0YTtcblxuICAvLyBJZiBhbiBhY2Nlc3NvciBpcyBzcGVjaWZpZWQsIHByb21vdGUgaXQgdG8gYSBjb21wYXJhdG9yLiBJbiB0aGlzIGNhc2Ugd2VcbiAgLy8gY2FuIHRlc3Qgd2hldGhlciB0aGUgc2VhcmNoIHZhbHVlIGlzIChzZWxmLSkgY29tcGFyYWJsZS4gV2UgY2Fu4oCZdCBkbyB0aGlzXG4gIC8vIGZvciBhIGNvbXBhcmF0b3IgKGV4Y2VwdCBmb3Igc3BlY2lmaWMsIGtub3duIGNvbXBhcmF0b3JzKSBiZWNhdXNlIHdlIGNhbuKAmXRcbiAgLy8gdGVsbCBpZiB0aGUgY29tcGFyYXRvciBpcyBzeW1tZXRyaWMsIGFuZCBhbiBhc3ltbWV0cmljIGNvbXBhcmF0b3IgY2Fu4oCZdCBiZVxuICAvLyB1c2VkIHRvIHRlc3Qgd2hldGhlciBhIHNpbmdsZSB2YWx1ZSBpcyBjb21wYXJhYmxlLlxuICBpZiAoZi5sZW5ndGggIT09IDIpIHtcbiAgICBjb21wYXJlMSA9IGFzY2VuZGluZztcbiAgICBjb21wYXJlMiA9IChkLCB4KSA9PiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgZGVsdGEgPSAoZCwgeCkgPT4gZihkKSAtIHg7XG4gIH0gZWxzZSB7XG4gICAgY29tcGFyZTEgPSBmID09PSBhc2NlbmRpbmcgfHwgZiA9PT0gZGVzY2VuZGluZyA/IGYgOiB6ZXJvO1xuICAgIGNvbXBhcmUyID0gZjtcbiAgICBkZWx0YSA9IGY7XG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiByaWdodChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPD0gMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIHplcm8oKSB7XG4gIHJldHVybiAwO1xufVxuIiwiY29uc3QgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICBlNSA9IE1hdGguc3FydCgxMCksXG4gICAgZTIgPSBNYXRoLnNxcnQoMik7XG5cbmZ1bmN0aW9uIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBjb25zdCBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChzdGVwKSksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpLFxuICAgICAgZmFjdG9yID0gZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxO1xuICBsZXQgaTEsIGkyLCBpbmM7XG4gIGlmIChwb3dlciA8IDApIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgLXBvd2VyKSAvIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgKiBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wICogaW5jKTtcbiAgICBpZiAoaTEgLyBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgLyBpbmMgPiBzdG9wKSAtLWkyO1xuICAgIGluYyA9IC1pbmM7XG4gIH0gZWxzZSB7XG4gICAgaW5jID0gTWF0aC5wb3coMTAsIHBvd2VyKSAqIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgLyBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wIC8gaW5jKTtcbiAgICBpZiAoaTEgKiBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgKiBpbmMgPiBzdG9wKSAtLWkyO1xuICB9XG4gIGlmIChpMiA8IGkxICYmIDAuNSA8PSBjb3VudCAmJiBjb3VudCA8IDIpIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQgKiAyKTtcbiAgcmV0dXJuIFtpMSwgaTIsIGluY107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKCEoY291bnQgPiAwKSkgcmV0dXJuIFtdO1xuICBpZiAoc3RhcnQgPT09IHN0b3ApIHJldHVybiBbc3RhcnRdO1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBbaTEsIGkyLCBpbmNdID0gcmV2ZXJzZSA/IHRpY2tTcGVjKHN0b3AsIHN0YXJ0LCBjb3VudCkgOiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpO1xuICBpZiAoIShpMiA+PSBpMSkpIHJldHVybiBbXTtcbiAgY29uc3QgbiA9IGkyIC0gaTEgKyAxLCB0aWNrcyA9IG5ldyBBcnJheShuKTtcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgKiBpbmM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluYyA8IDApIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpIC8gLWluYztcbiAgICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpICogaW5jO1xuICB9XG4gIHJldHVybiB0aWNrcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICByZXR1cm4gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KVsyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydCwgaW5jID0gcmV2ZXJzZSA/IHRpY2tJbmNyZW1lbnQoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgcmV0dXJuIChyZXZlcnNlID8gLTEgOiAxKSAqIChpbmMgPCAwID8gMSAvIC1pbmMgOiBpbmMpO1xufVxuIiwiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZCA9IHRpbWVJbnRlcnZhbCgoKSA9PiB7XG4gIC8vIG5vb3Bcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gKGspID0+IHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHttaWxsaXNlY29uZH0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCB7c2Vjb25kfSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcbmltcG9ydCB7dGltZU1pbnV0ZSwgdXRjTWludXRlfSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCB7dGltZUhvdXIsIHV0Y0hvdXJ9IGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCB7dGltZURheSwgdW5peERheX0gZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3RpbWVTdW5kYXksIHV0Y1N1bmRheX0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuaW1wb3J0IHt0aW1lTW9udGgsIHV0Y01vbnRofSBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHt0aW1lWWVhciwgdXRjWWVhcn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5mdW5jdGlvbiB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKSB7XG5cbiAgY29uc3QgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQ7XG4gICAgaWYgKHJldmVyc2UpIFtzdGFydCwgc3RvcF0gPSBbc3RvcCwgc3RhcnRdO1xuICAgIGNvbnN0IGludGVydmFsID0gY291bnQgJiYgdHlwZW9mIGNvdW50LnJhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBjb3VudCA6IHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIGNvbnN0IHRpY2tzID0gaW50ZXJ2YWwgPyBpbnRlcnZhbC5yYW5nZShzdGFydCwgK3N0b3AgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByZXZlcnNlID8gdGlja3MucmV2ZXJzZSgpIDogdGlja3M7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGNvdW50O1xuICAgIGNvbnN0IGkgPSBiaXNlY3RvcigoWywsIHN0ZXBdKSA9PiBzdGVwKS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkgcmV0dXJuIHllYXIuZXZlcnkodGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGNvdW50KSk7XG4gICAgaWYgKGkgPT09IDApIHJldHVybiBtaWxsaXNlY29uZC5ldmVyeShNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLCAxKSk7XG4gICAgY29uc3QgW3QsIHN0ZXBdID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgIHJldHVybiB0LmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIFt0aWNrcywgdGlja0ludGVydmFsXTtcbn1cblxuY29uc3QgW3V0Y1RpY2tzLCB1dGNUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNTdW5kYXksIHVuaXhEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSk7XG5jb25zdCBbdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsXSA9IHRpY2tlcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9981\n')},85235:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Ig": () => (/* binding */ timeThursday),\n/* harmony export */ "Ox": () => (/* binding */ timeMonday),\n/* harmony export */ "Zy": () => (/* binding */ timeSunday),\n/* harmony export */ "hB": () => (/* binding */ utcThursday),\n/* harmony export */ "l6": () => (/* binding */ utcMonday),\n/* harmony export */ "pI": () => (/* binding */ utcSunday)\n/* harmony export */ });\n/* unused harmony exports timeTuesday, timeWednesday, timeFriday, timeSaturday, timeSundays, timeMondays, timeTuesdays, timeWednesdays, timeThursdays, timeFridays, timeSaturdays, utcTuesday, utcWednesday, utcFriday, utcSaturday, utcSundays, utcMondays, utcTuesdays, utcWednesdays, utcThursdays, utcFridays, utcSaturdays */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11262);\n\n\n\nfunction timeWeekday(i) {\n return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationMinute */ .yB) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationWeek */ .iM;\n });\n}\n\nconst timeSunday = timeWeekday(0);\nconst timeMonday = timeWeekday(1);\nconst timeTuesday = timeWeekday(2);\nconst timeWednesday = timeWeekday(3);\nconst timeThursday = timeWeekday(4);\nconst timeFriday = timeWeekday(5);\nconst timeSaturday = timeWeekday(6);\n\nconst timeSundays = timeSunday.range;\nconst timeMondays = timeMonday.range;\nconst timeTuesdays = timeTuesday.range;\nconst timeWednesdays = timeWednesday.range;\nconst timeThursdays = timeThursday.range;\nconst timeFridays = timeFriday.range;\nconst timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__/* .durationWeek */ .iM;\n });\n}\n\nconst utcSunday = utcWeekday(0);\nconst utcMonday = utcWeekday(1);\nconst utcTuesday = utcWeekday(2);\nconst utcWednesday = utcWeekday(3);\nconst utcThursday = utcWeekday(4);\nconst utcFriday = utcWeekday(5);\nconst utcSaturday = utcWeekday(6);\n\nconst utcSundays = utcSunday.range;\nconst utcMondays = utcMonday.range;\nconst utcTuesdays = utcTuesday.range;\nconst utcWednesdays = utcWednesday.range;\nconst utcThursdays = utcThursday.range;\nconst utcFridays = utcFriday.range;\nconst utcSaturdays = utcSaturday.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUyMzUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBMkM7QUFDZ0I7O0FBRTNEO0FBQ0EsU0FBUyxtRUFBWTtBQUNyQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILGtGQUFrRixrRUFBYyxJQUFJLGdFQUFZO0FBQ2hILEdBQUc7QUFDSDs7QUFFTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFUDtBQUNBLFNBQVMsbUVBQVk7QUFDckI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCwyQkFBMkIsZ0VBQVk7QUFDdkMsR0FBRztBQUNIOztBQUVPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3dlZWsuanM/MzNiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gdGltZVdlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKGRhdGUuZ2V0RGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgdGltZVN1bmRheSA9IHRpbWVXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHRpbWVNb25kYXkgPSB0aW1lV2Vla2RheSgxKTtcbmV4cG9ydCBjb25zdCB0aW1lVHVlc2RheSA9IHRpbWVXZWVrZGF5KDIpO1xuZXhwb3J0IGNvbnN0IHRpbWVXZWRuZXNkYXkgPSB0aW1lV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB0aW1lVGh1cnNkYXkgPSB0aW1lV2Vla2RheSg0KTtcbmV4cG9ydCBjb25zdCB0aW1lRnJpZGF5ID0gdGltZVdlZWtkYXkoNSk7XG5leHBvcnQgY29uc3QgdGltZVNhdHVyZGF5ID0gdGltZVdlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5cyA9IHRpbWVTdW5kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheXMgPSB0aW1lTW9uZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5cyA9IHRpbWVUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVXZWRuZXNkYXlzID0gdGltZVdlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lVGh1cnNkYXlzID0gdGltZVRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXlzID0gdGltZUZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXlzID0gdGltZVNhdHVyZGF5LnJhbmdlO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIChzdGFydCwgZW5kKSA9PiB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcbmV4cG9ydCBjb25zdCB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHV0Y1R1ZXNkYXkgPSB1dGNXZWVrZGF5KDIpO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHV0Y0ZyaWRheSA9IHV0Y1dlZWtkYXkoNSk7XG5leHBvcnQgY29uc3QgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xuXG5leHBvcnQgY29uc3QgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNNb25kYXlzID0gdXRjTW9uZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1R1ZXNkYXlzID0gdXRjVHVlc2RheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1RodXJzZGF5cyA9IHV0Y1RodXJzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y0ZyaWRheXMgPSB1dGNGcmlkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///85235\n')},38887:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "jB": () => (/* binding */ timeYear),\n/* harmony export */ "ol": () => (/* binding */ utcYear)\n/* harmony export */ });\n/* unused harmony exports timeYears, utcYears */\n/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52576);\n\n\nconst timeYear = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nconst timeYears = timeYear.range;\n\nconst utcYear = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__/* .timeInterval */ .J)((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nconst utcYears = utcYear.range;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg4ODcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTJDOztBQUVwQyxpQkFBaUIsbUVBQVk7QUFDcEM7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDJEQUEyRCxtRUFBWTtBQUN2RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRU87O0FBRUEsZ0JBQWdCLG1FQUFZO0FBQ25DO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSwyREFBMkQsbUVBQVk7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanM/ODVjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudGltZVllYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFycyA9IHRpbWVZZWFyLnJhbmdlO1xuXG5leHBvcnQgY29uc3QgdXRjWWVhciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///38887\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-timer.baffcf33369c9e32.bundle.js b/assets/demo/site/npm.d3-timer.baffcf33369c9e32.bundle.js
new file mode 100644
index 00000000..1f54e958
--- /dev/null
+++ b/assets/demo/site/npm.d3-timer.baffcf33369c9e32.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[9308],{3581:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "FG": () => (/* reexport */ interval),\n "zO": () => (/* reexport */ timer/* now */.zO),\n "Vs": () => (/* reexport */ timeout/* default */.Z),\n "HT": () => (/* reexport */ timer/* timer */.HT),\n "R8": () => (/* reexport */ timer/* timerFlush */.R8)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-timer/src/timer.js\nvar timer = __webpack_require__(35374);\n// EXTERNAL MODULE: ./node_modules/d3-timer/src/timeout.js\nvar timeout = __webpack_require__(54042);\n;// CONCATENATED MODULE: ./node_modules/d3-timer/src/interval.js\n\n\n/* harmony default export */ function interval(callback, delay, time) {\n var t = new timer/* Timer */.B7, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? (0,timer/* now */.zO)() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-timer/src/index.js\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU4MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBc0M7O0FBRXRDLDZCQUFlLGtCQUFTO0FBQ3hCLGNBQWMsbUJBQUs7QUFDbkI7QUFDQSx3Q0FBd0MscUJBQUc7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FDUm9COztBQUlFOztBQUlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy9pbnRlcnZhbC5qcz82YjhkIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvaW5kZXguanM/OGRmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RpbWVyLCBub3d9IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lciwgdG90YWwgPSBkZWxheTtcbiAgaWYgKGRlbGF5ID09IG51bGwpIHJldHVybiB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSwgdDtcbiAgZGVsYXkgPSArZGVsYXksIHRpbWUgPSB0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lO1xuICB0LnJlc3RhcnQoZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgZWxhcHNlZCArPSB0b3RhbDtcbiAgICB0LnJlc3RhcnQodGljaywgdG90YWwgKz0gZGVsYXksIHRpbWUpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQpO1xuICB9LCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuIiwiZXhwb3J0IHtcbiAgbm93LFxuICB0aW1lcixcbiAgdGltZXJGbHVzaFxufSBmcm9tIFwiLi90aW1lci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVvdXRcbn0gZnJvbSBcIi4vdGltZW91dC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3581\n')},54042:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(35374);\n\n\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, delay, time) {\n var t = new _timer_js__WEBPACK_IMPORTED_MODULE_0__/* .Timer */ .B7;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQwNDIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFpQzs7QUFFakMsNkJBQWUsb0NBQVM7QUFDeEIsY0FBYyxzREFBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzP2JkMTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZnVuY3Rpb24oZWxhcHNlZCkge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///54042\n')},35374:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "B7": () => (/* binding */ Timer),\n/* harmony export */ "HT": () => (/* binding */ timer),\n/* harmony export */ "R8": () => (/* binding */ timerFlush),\n/* harmony export */ "zO": () => (/* binding */ now)\n/* harmony export */ });\nvar frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === "object" && performance.now ? performance : Date,\n setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== "function") throw new TypeError("callback is not a function");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nfunction timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUzNzQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzSUFBc0k7O0FBRS9IO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCxTQUFTO0FBQ1QsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcz9lMTI0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBmcmFtZSA9IDAsIC8vIGlzIGFuIGFuaW1hdGlvbiBmcmFtZSBwZW5kaW5nP1xuICAgIHRpbWVvdXQgPSAwLCAvLyBpcyBhIHRpbWVvdXQgcGVuZGluZz9cbiAgICBpbnRlcnZhbCA9IDAsIC8vIGFyZSBhbnkgdGltZXJzIGFjdGl2ZT9cbiAgICBwb2tlRGVsYXkgPSAxMDAwLCAvLyBob3cgZnJlcXVlbnRseSB3ZSBjaGVjayBmb3IgY2xvY2sgc2tld1xuICAgIHRhc2tIZWFkLFxuICAgIHRhc2tUYWlsLFxuICAgIGNsb2NrTGFzdCA9IDAsXG4gICAgY2xvY2tOb3cgPSAwLFxuICAgIGNsb2NrU2tldyA9IDAsXG4gICAgY2xvY2sgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwib2JqZWN0XCIgJiYgcGVyZm9ybWFuY2Uubm93ID8gcGVyZm9ybWFuY2UgOiBEYXRlLFxuICAgIHNldEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///35374\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-transition.330906dd6e8b5433.bundle.js b/assets/demo/site/npm.d3-transition.330906dd6e8b5433.bundle.js
new file mode 100644
index 00000000..bf502152
--- /dev/null
+++ b/assets/demo/site/npm.d3-transition.330906dd6e8b5433.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[7015],{86254:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "bB": () => (/* reexport */ active),\n "e1": () => (/* reexport */ interrupt),\n "eR": () => (/* reexport */ transition_transition)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/index.js + 31 modules\nvar selection = __webpack_require__(21334);\n// EXTERNAL MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar dispatch = __webpack_require__(92626);\n// EXTERNAL MODULE: ./node_modules/d3-timer/src/timer.js\nvar timer = __webpack_require__(35374);\n// EXTERNAL MODULE: ./node_modules/d3-timer/src/timeout.js\nvar timeout = __webpack_require__(54042);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/schedule.js\n\n\n\nvar emptyOn = (0,dispatch/* default */.Z)("start", "end", "cancel", "interrupt");\nvar emptyTween = [];\n\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n\n/* harmony default export */ function schedule(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nfunction init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error("too late; already scheduled");\n return schedule;\n}\n\nfunction set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error("too late; already running");\n return schedule;\n}\n\nfunction get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = (0,timer/* timer */.HT)(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return (0,timeout/* default */.Z)(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call("interrupt", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call("cancel", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n (0,timeout/* default */.Z)(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call("start", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call("end", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/interrupt.js\n\n\n/* harmony default export */ function interrupt(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + "";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/interrupt.js\n\n\n/* harmony default export */ function selection_interrupt(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/transform/index.js + 2 modules\nvar transform = __webpack_require__(55370);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/namespace.js\nvar namespace = __webpack_require__(73888);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/tween.js\n\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== "function") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\n/* harmony default export */ function tween(name, value) {\n var id = this._id;\n\n name += "";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nfunction tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-color/src/color.js\nvar color = __webpack_require__(16372);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/number.js\nvar number = __webpack_require__(73626);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/rgb.js\nvar rgb = __webpack_require__(93414);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/string.js\nvar string = __webpack_require__(59843);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/interpolate.js\n\n\n\n/* harmony default export */ function interpolate(a, b) {\n var c;\n return (typeof b === "number" ? number/* default */.Z\n : b instanceof color/* default */.ZP ? rgb/* default */.ZP\n : (c = (0,color/* default */.ZP)(b)) ? (b = c, rgb/* default */.ZP)\n : string/* default */.Z)(a, b);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attr.js\n\n\n\n\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + "";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + "";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\n/* harmony default export */ function attr(name, value) {\n var fullname = (0,namespace/* default */.Z)(name), i = fullname === "transform" ? transform/* interpolateTransformSvg */.w : interpolate;\n return this.attrTween(name, typeof value === "function"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, "attr." + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attrTween.js\n\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_attrTween(name, value) {\n var key = "attr." + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error;\n var fullname = (0,namespace/* default */.Z)(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/delay.js\n\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\n/* harmony default export */ function delay(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === "function"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/duration.js\n\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\n/* harmony default export */ function duration(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === "function"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/ease.js\n\n\nfunction easeConstant(id, value) {\n if (typeof value !== "function") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\n/* harmony default export */ function ease(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/matcher.js\nvar matcher = __webpack_require__(3083);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/filter.js\n\n\n\n/* harmony default export */ function filter(match) {\n if (typeof match !== "function") match = (0,matcher/* default */.Z)(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/merge.js\n\n\n/* harmony default export */ function merge(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/on.js\n\n\nfunction start(name) {\n return (name + "").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(".");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === "start";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function on(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/remove.js\nfunction removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\n/* harmony default export */ function remove() {\n return this.on("end.remove", removeFunction(this._id));\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selector.js\nvar selector = __webpack_require__(82634);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/select.js\n\n\n\n\n/* harmony default export */ function transition_select(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== "function") select = (0,selector/* default */.Z)(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if ("__data__" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selectorAll.js\nvar selectorAll = __webpack_require__(3545);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selectAll.js\n\n\n\n\n/* harmony default export */ function selectAll(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== "function") select = (0,selectorAll/* default */.Z)(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selection.js\n\n\nvar Selection = selection/* default.prototype.constructor */.ZP.prototype.constructor;\n\n/* harmony default export */ function transition_selection() {\n return new Selection(this._groups, this._parents);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/style.js\nvar style = __webpack_require__(49986);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/style.js\n\n\n\n\n\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = (0,style/* styleValue */.S)(this, name),\n string1 = (this.style.removeProperty(name), (0,style/* styleValue */.S)(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function() {\n var string0 = (0,style/* styleValue */.S)(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = (0,style/* styleValue */.S)(this, name),\n value1 = value(this),\n string1 = value1 + "";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), (0,style/* styleValue */.S)(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function transition_style(name, value, priority) {\n var i = (name += "") === "transform" ? transform/* interpolateTransformCss */.Y : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on("end.style." + name, styleRemove(name))\n : typeof value === "function" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, "style." + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on("end.style." + name, null);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/styleTween.js\nfunction styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_styleTween(name, value, priority) {\n var key = "style." + (name += "");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? "" : priority));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/text.js\n\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? "" : value1;\n };\n}\n\n/* harmony default export */ function transition_text(value) {\n return this.tween("text", typeof value === "function"\n ? textFunction(tweenValue(this, "text", value))\n : textConstant(value == null ? "" : value + ""));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/textTween.js\nfunction textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_textTween(value) {\n var key = "text";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error;\n return this.tween(key, textTween(value));\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/transition.js\n\n\n\n/* harmony default export */ function transition() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/end.js\n\n\n/* harmony default export */ function end() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar id = 0;\n\nfunction Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nfunction transition_transition(name) {\n return (0,selection/* default */.ZP)().transition(name);\n}\n\nfunction newId() {\n return ++id;\n}\n\nvar selection_prototype = selection/* default.prototype */.ZP.prototype;\n\nTransition.prototype = transition_transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: selectAll,\n filter: filter,\n merge: merge,\n selection: transition_selection,\n transition: transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: on,\n attr: attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: remove,\n tween: tween,\n delay: delay,\n duration: duration,\n ease: ease,\n end: end\n};\n\n// EXTERNAL MODULE: ./node_modules/d3-ease/src/cubic.js\nvar cubic = __webpack_require__(68716);\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/transition.js\n\n\n\n\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: cubic/* cubicInOut */.tw\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = (0,timer/* now */.zO)(), defaultTiming;\n }\n }\n return timing;\n}\n\n/* harmony default export */ function selection_transition(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = (0,timer/* now */.zO)(), name = name == null ? null : name + "";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/index.js\n\n\n\n\nselection/* default.prototype.interrupt */.ZP.prototype.interrupt = selection_interrupt;\nselection/* default.prototype.transition */.ZP.prototype.transition = selection_transition;\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/active.js\n\n\n\nvar root = [null];\n\n/* harmony default export */ function active(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + "";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/index.js\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanM/ZWJiMCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzPzAzZGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanM/MmE2ZSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcz80NWUzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ludGVycG9sYXRlLmpzPzFhNzEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcz8xMGJmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcz85OGE1Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzP2MwZjIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanM/MWViNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzPzgzNjgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzPzgzYzUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vbWVyZ2UuanM/M2EzNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcz83NjNlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcz9mNDA5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcz9lNDgwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcz8wZjNlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcz8wMzY0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzPzRjNDIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcz83MTdlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanM/ZDBlZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanM/NDQxYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzP2Q4YzciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZW5kLmpzPzczNmUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanM/ZDBlYSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanM/Mzk2NiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzPzEwYTgiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2FjdGl2ZS5qcz9iMjUzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcz8xNjhiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtTVEFSVElORywgRU5ESU5HLCBFTkRFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHNjaGVkdWxlLFxuICAgICAgYWN0aXZlLFxuICAgICAgZW1wdHkgPSB0cnVlLFxuICAgICAgaTtcblxuICBpZiAoIXNjaGVkdWxlcykgcmV0dXJuO1xuXG4gIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG5cbiAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLm5hbWUgIT09IG5hbWUpIHsgZW1wdHkgPSBmYWxzZTsgY29udGludWU7IH1cbiAgICBhY3RpdmUgPSBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HICYmIHNjaGVkdWxlLnN0YXRlIDwgRU5ESU5HO1xuICAgIHNjaGVkdWxlLnN0YXRlID0gRU5ERUQ7XG4gICAgc2NoZWR1bGUudGltZXIuc3RvcCgpO1xuICAgIHNjaGVkdWxlLm9uLmNhbGwoYWN0aXZlID8gXCJpbnRlcnJ1cHRcIiA6IFwiY2FuY2VsXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNjaGVkdWxlLmluZGV4LCBzY2hlZHVsZS5ncm91cCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgfVxuXG4gIGlmIChlbXB0eSkgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xufVxuIiwiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSZ2IsIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYztcbiAgcmV0dXJuICh0eXBlb2YgYiA9PT0gXCJudW1iZXJcIiA/IGludGVycG9sYXRlTnVtYmVyXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IGludGVycG9sYXRlUmdiXG4gICAgICA6IChjID0gY29sb3IoYikpID8gKGIgPSBjLCBpbnRlcnBvbGF0ZVJnYilcbiAgICAgIDogaW50ZXJwb2xhdGVTdHJpbmcpKGEsIGIpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSksIGkgPSBmdWxsbmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB0aGlzLmF0dHJUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbikoZnVsbG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJhdHRyLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgOiB2YWx1ZSA9PSBudWxsID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkoZnVsbG5hbWUpXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KShmdWxsbmFtZSwgaSwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge2dldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZGVsYXlGdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlbGF5Q29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZGVsYXlGdW5jdGlvblxuICAgICAgICAgIDogZGVsYXlDb25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZGVsYXk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkdXJhdGlvbkZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZHVyYXRpb25GdW5jdGlvblxuICAgICAgICAgIDogZHVyYXRpb25Db25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZHVyYXRpb247XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaS5jYWxsKHRoaXMsIHQpLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciB0LCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdCA9IChpMCA9IGkpICYmIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIiwiZnVuY3Rpb24gdGV4dEludGVycG9sYXRlKGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gaS5jYWxsKHRoaXMsIHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0VHdlZW4odmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiB0ZXh0SW50ZXJwb2xhdGUoaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcInRleHRcIjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHRleHRUd2Vlbih2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXkuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0VHdlZW4gZnJvbSBcIi4vdGV4dFR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lbmQgZnJvbSBcIi4vZW5kLmpzXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgdGV4dFR3ZWVuOiB0cmFuc2l0aW9uX3RleHRUd2VlbixcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kXG59O1xuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4uL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHtlYXNlQ3ViaWNJbk91dH0gZnJvbSBcImQzLWVhc2VcIjtcbmltcG9ydCB7bm93fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGRlZmF1bHRUaW1pbmcgPSB7XG4gIHRpbWU6IG51bGwsIC8vIFNldCBvbiB1c2UuXG4gIGRlbGF5OiAwLFxuICBkdXJhdGlvbjogMjUwLFxuICBlYXNlOiBlYXNlQ3ViaWNJbk91dFxufTtcblxuZnVuY3Rpb24gaW5oZXJpdChub2RlLCBpZCkge1xuICB2YXIgdGltaW5nO1xuICB3aGlsZSAoISh0aW1pbmcgPSBub2RlLl9fdHJhbnNpdGlvbikgfHwgISh0aW1pbmcgPSB0aW1pbmdbaWRdKSkge1xuICAgIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWluZy50aW1lID0gbm93KCksIGRlZmF1bHRUaW1pbmc7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aW1pbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGlkLFxuICAgICAgdGltaW5nO1xuXG4gIGlmIChuYW1lIGluc3RhbmNlb2YgVHJhbnNpdGlvbikge1xuICAgIGlkID0gbmFtZS5faWQsIG5hbWUgPSBuYW1lLl9uYW1lO1xuICB9IGVsc2Uge1xuICAgIGlkID0gbmV3SWQoKSwgKHRpbWluZyA9IGRlZmF1bHRUaW1pbmcpLnRpbWUgPSBub3coKSwgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkLCBpLCBncm91cCwgdGltaW5nIHx8IGluaGVyaXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHtTQ0hFRFVMRUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcblxudmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBpO1xuXG4gIGlmIChzY2hlZHVsZXMpIHtcbiAgICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLnN0YXRlID4gU0NIRURVTEVEICYmIHNjaGVkdWxlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKFtbbm9kZV1dLCByb290LCBuYW1lLCAraSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zaXRpb259IGZyb20gXCIuL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhY3RpdmV9IGZyb20gXCIuL2FjdGl2ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycnVwdH0gZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///86254\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-voronoi.1989ed91c68e52bd.bundle.js b/assets/demo/site/npm.d3-voronoi.1989ed91c68e52bd.bundle.js
new file mode 100644
index 00000000..336088a2
--- /dev/null
+++ b/assets/demo/site/npm.d3-voronoi.1989ed91c68e52bd.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[5678],{29067:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "R": () => (/* reexport */ voronoi)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/point.js\nfunction point_x(d) {\n return d[0];\n}\n\nfunction point_y(d) {\n return d[1];\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/RedBlackTree.js\nfunction RedBlackTree() {\n this._ = null; // root node\n}\n\nfunction RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\n/* harmony default export */ const src_RedBlackTree = (RedBlackTree);\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/Edge.js\n\n\nfunction createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nfunction createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nfunction setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nfunction clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/Cell.js\n\n\n\nfunction createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nfunction cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nfunction cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nfunction sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nfunction clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/Circle.js\n\n\n\nvar circlePool = [];\n\nvar firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nfunction attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nfunction detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/Beach.js\n\n\n\n\n\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nfunction removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/Diagram.js\n\n\n\n\n\n\nvar epsilon = 1e-6;\nvar epsilon2 = 1e-12;\nvar beaches;\nvar cells;\nvar circles;\nvar edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nfunction Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new src_RedBlackTree;\n circles = new src_RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/voronoi.js\n\n\n\n\n/* harmony default export */ function voronoi() {\n var x = point_x,\n y = point_y,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-voronoi/src/index.js\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Yi8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9jb25zdGFudC5qcz8wMDQzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9wb2ludC5qcz8yNjhhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9SZWRCbGFja1RyZWUuanM/MmVjNiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRWRnZS5qcz9lZDg0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DZWxsLmpzPzY1NmYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0NpcmNsZS5qcz82ZGZjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9CZWFjaC5qcz9mN2M5Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9EaWFncmFtLmpzPzhhZTMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL3Zvcm9ub2kuanM/Y2U3ZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvaW5kZXguanM/MDk0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG4iLCJmdW5jdGlvbiBSZWRCbGFja1RyZWUoKSB7XG4gIHRoaXMuXyA9IG51bGw7IC8vIHJvb3Qgbm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVkQmxhY2tOb2RlKG5vZGUpIHtcbiAgbm9kZS5VID0gLy8gcGFyZW50IG5vZGVcbiAgbm9kZS5DID0gLy8gY29sb3IgLSB0cnVlIGZvciByZWQsIGZhbHNlIGZvciBibGFja1xuICBub2RlLkwgPSAvLyBsZWZ0IG5vZGVcbiAgbm9kZS5SID0gLy8gcmlnaHQgbm9kZVxuICBub2RlLlAgPSAvLyBwcmV2aW91cyBub2RlXG4gIG5vZGUuTiA9IG51bGw7IC8vIG5leHQgbm9kZVxufVxuXG5SZWRCbGFja1RyZWUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUmVkQmxhY2tUcmVlLFxuXG4gIGluc2VydDogZnVuY3Rpb24oYWZ0ZXIsIG5vZGUpIHtcbiAgICB2YXIgcGFyZW50LCBncmFuZHBhLCB1bmNsZTtcblxuICAgIGlmIChhZnRlcikge1xuICAgICAgbm9kZS5QID0gYWZ0ZXI7XG4gICAgICBub2RlLk4gPSBhZnRlci5OO1xuICAgICAgaWYgKGFmdGVyLk4pIGFmdGVyLk4uUCA9IG5vZGU7XG4gICAgICBhZnRlci5OID0gbm9kZTtcbiAgICAgIGlmIChhZnRlci5SKSB7XG4gICAgICAgIGFmdGVyID0gYWZ0ZXIuUjtcbiAgICAgICAgd2hpbGUgKGFmdGVyLkwpIGFmdGVyID0gYWZ0ZXIuTDtcbiAgICAgICAgYWZ0ZXIuTCA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZnRlci5SID0gbm9kZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IGFmdGVyO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fKSB7XG4gICAgICBhZnRlciA9IFJlZEJsYWNrRmlyc3QodGhpcy5fKTtcbiAgICAgIG5vZGUuUCA9IG51bGw7XG4gICAgICBub2RlLk4gPSBhZnRlcjtcbiAgICAgIGFmdGVyLlAgPSBhZnRlci5MID0gbm9kZTtcbiAgICAgIHBhcmVudCA9IGFmdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLlAgPSBub2RlLk4gPSBudWxsO1xuICAgICAgdGhpcy5fID0gbm9kZTtcbiAgICAgIHBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIG5vZGUuTCA9IG5vZGUuUiA9IG51bGw7XG4gICAgbm9kZS5VID0gcGFyZW50O1xuICAgIG5vZGUuQyA9IHRydWU7XG5cbiAgICBhZnRlciA9IG5vZGU7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuQykge1xuICAgICAgZ3JhbmRwYSA9IHBhcmVudC5VO1xuICAgICAgaWYgKHBhcmVudCA9PT0gZ3JhbmRwYS5MKSB7XG4gICAgICAgIHVuY2xlID0gZ3JhbmRwYS5SO1xuICAgICAgICBpZiAodW5jbGUgJiYgdW5jbGUuQykge1xuICAgICAgICAgIHBhcmVudC5DID0gdW5jbGUuQyA9IGZhbHNlO1xuICAgICAgICAgIGdyYW5kcGEuQyA9IHRydWU7XG4gICAgICAgICAgYWZ0ZXIgPSBncmFuZHBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChhZnRlciA9PT0gcGFyZW50LlIpIHtcbiAgICAgICAgICAgIFJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgICAgYWZ0ZXIgPSBwYXJlbnQ7XG4gICAgICAgICAgICBwYXJlbnQgPSBhZnRlci5VO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnQuQyA9IGZhbHNlO1xuICAgICAgICAgIGdyYW5kcGEuQyA9IHRydWU7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBncmFuZHBhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5jbGUgPSBncmFuZHBhLkw7XG4gICAgICAgIGlmICh1bmNsZSAmJiB1bmNsZS5DKSB7XG4gICAgICAgICAgcGFyZW50LkMgPSB1bmNsZS5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlciA9IGdyYW5kcGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGFmdGVyID09PSBwYXJlbnQuTCkge1xuICAgICAgICAgICAgUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgICAgYWZ0ZXIgPSBwYXJlbnQ7XG4gICAgICAgICAgICBwYXJlbnQgPSBhZnRlci5VO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnQuQyA9IGZhbHNlO1xuICAgICAgICAgIGdyYW5kcGEuQyA9IHRydWU7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIGdyYW5kcGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBhZnRlci5VO1xuICAgIH1cbiAgICB0aGlzLl8uQyA9IGZhbHNlO1xuICB9LFxuXG4gIHJlbW92ZTogZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLk4pIG5vZGUuTi5QID0gbm9kZS5QO1xuICAgIGlmIChub2RlLlApIG5vZGUuUC5OID0gbm9kZS5OO1xuICAgIG5vZGUuTiA9IG5vZGUuUCA9IG51bGw7XG5cbiAgICB2YXIgcGFyZW50ID0gbm9kZS5VLFxuICAgICAgICBzaWJsaW5nLFxuICAgICAgICBsZWZ0ID0gbm9kZS5MLFxuICAgICAgICByaWdodCA9IG5vZGUuUixcbiAgICAgICAgbmV4dCxcbiAgICAgICAgcmVkO1xuXG4gICAgaWYgKCFsZWZ0KSBuZXh0ID0gcmlnaHQ7XG4gICAgZWxzZSBpZiAoIXJpZ2h0KSBuZXh0ID0gbGVmdDtcbiAgICBlbHNlIG5leHQgPSBSZWRCbGFja0ZpcnN0KHJpZ2h0KTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGlmIChwYXJlbnQuTCA9PT0gbm9kZSkgcGFyZW50LkwgPSBuZXh0O1xuICAgICAgZWxzZSBwYXJlbnQuUiA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuXyA9IG5leHQ7XG4gICAgfVxuXG4gICAgaWYgKGxlZnQgJiYgcmlnaHQpIHtcbiAgICAgIHJlZCA9IG5leHQuQztcbiAgICAgIG5leHQuQyA9IG5vZGUuQztcbiAgICAgIG5leHQuTCA9IGxlZnQ7XG4gICAgICBsZWZ0LlUgPSBuZXh0O1xuICAgICAgaWYgKG5leHQgIT09IHJpZ2h0KSB7XG4gICAgICAgIHBhcmVudCA9IG5leHQuVTtcbiAgICAgICAgbmV4dC5VID0gbm9kZS5VO1xuICAgICAgICBub2RlID0gbmV4dC5SO1xuICAgICAgICBwYXJlbnQuTCA9IG5vZGU7XG4gICAgICAgIG5leHQuUiA9IHJpZ2h0O1xuICAgICAgICByaWdodC5VID0gbmV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQuVSA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50ID0gbmV4dDtcbiAgICAgICAgbm9kZSA9IG5leHQuUjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVkID0gbm9kZS5DO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUpIG5vZGUuVSA9IHBhcmVudDtcbiAgICBpZiAocmVkKSByZXR1cm47XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5DKSB7IG5vZGUuQyA9IGZhbHNlOyByZXR1cm47IH1cblxuICAgIGRvIHtcbiAgICAgIGlmIChub2RlID09PSB0aGlzLl8pIGJyZWFrO1xuICAgICAgaWYgKG5vZGUgPT09IHBhcmVudC5MKSB7XG4gICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuUjtcbiAgICAgICAgaWYgKHNpYmxpbmcuQykge1xuICAgICAgICAgIHNpYmxpbmcuQyA9IGZhbHNlO1xuICAgICAgICAgIHBhcmVudC5DID0gdHJ1ZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICBzaWJsaW5nID0gcGFyZW50LlI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzaWJsaW5nLkwgJiYgc2libGluZy5MLkMpXG4gICAgICAgICAgICB8fCAoc2libGluZy5SICYmIHNpYmxpbmcuUi5DKSkge1xuICAgICAgICAgIGlmICghc2libGluZy5SIHx8ICFzaWJsaW5nLlIuQykge1xuICAgICAgICAgICAgc2libGluZy5MLkMgPSBmYWxzZTtcbiAgICAgICAgICAgIHNpYmxpbmcuQyA9IHRydWU7XG4gICAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHNpYmxpbmcpO1xuICAgICAgICAgICAgc2libGluZyA9IHBhcmVudC5SO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzaWJsaW5nLkMgPSBwYXJlbnQuQztcbiAgICAgICAgICBwYXJlbnQuQyA9IHNpYmxpbmcuUi5DID0gZmFsc2U7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgbm9kZSA9IHRoaXMuXztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2libGluZyA9IHBhcmVudC5MO1xuICAgICAgICBpZiAoc2libGluZy5DKSB7XG4gICAgICAgICAgc2libGluZy5DID0gZmFsc2U7XG4gICAgICAgICAgcGFyZW50LkMgPSB0cnVlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICBzaWJsaW5nID0gcGFyZW50Lkw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzaWJsaW5nLkwgJiYgc2libGluZy5MLkMpXG4gICAgICAgICAgfHwgKHNpYmxpbmcuUiAmJiBzaWJsaW5nLlIuQykpIHtcbiAgICAgICAgICBpZiAoIXNpYmxpbmcuTCB8fCAhc2libGluZy5MLkMpIHtcbiAgICAgICAgICAgIHNpYmxpbmcuUi5DID0gZmFsc2U7XG4gICAgICAgICAgICBzaWJsaW5nLkMgPSB0cnVlO1xuICAgICAgICAgICAgUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHNpYmxpbmcpO1xuICAgICAgICAgICAgc2libGluZyA9IHBhcmVudC5MO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzaWJsaW5nLkMgPSBwYXJlbnQuQztcbiAgICAgICAgICBwYXJlbnQuQyA9IHNpYmxpbmcuTC5DID0gZmFsc2U7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgIG5vZGUgPSB0aGlzLl87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNpYmxpbmcuQyA9IHRydWU7XG4gICAgICBub2RlID0gcGFyZW50O1xuICAgICAgcGFyZW50ID0gcGFyZW50LlU7XG4gICAgfSB3aGlsZSAoIW5vZGUuQyk7XG5cbiAgICBpZiAobm9kZSkgbm9kZS5DID0gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFJlZEJsYWNrUm90YXRlTGVmdCh0cmVlLCBub2RlKSB7XG4gIHZhciBwID0gbm9kZSxcbiAgICAgIHEgPSBub2RlLlIsXG4gICAgICBwYXJlbnQgPSBwLlU7XG5cbiAgaWYgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQuTCA9PT0gcCkgcGFyZW50LkwgPSBxO1xuICAgIGVsc2UgcGFyZW50LlIgPSBxO1xuICB9IGVsc2Uge1xuICAgIHRyZWUuXyA9IHE7XG4gIH1cblxuICBxLlUgPSBwYXJlbnQ7XG4gIHAuVSA9IHE7XG4gIHAuUiA9IHEuTDtcbiAgaWYgKHAuUikgcC5SLlUgPSBwO1xuICBxLkwgPSBwO1xufVxuXG5mdW5jdGlvbiBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRyZWUsIG5vZGUpIHtcbiAgdmFyIHAgPSBub2RlLFxuICAgICAgcSA9IG5vZGUuTCxcbiAgICAgIHBhcmVudCA9IHAuVTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5MID09PSBwKSBwYXJlbnQuTCA9IHE7XG4gICAgZWxzZSBwYXJlbnQuUiA9IHE7XG4gIH0gZWxzZSB7XG4gICAgdHJlZS5fID0gcTtcbiAgfVxuXG4gIHEuVSA9IHBhcmVudDtcbiAgcC5VID0gcTtcbiAgcC5MID0gcS5SO1xuICBpZiAocC5MKSBwLkwuVSA9IHA7XG4gIHEuUiA9IHA7XG59XG5cbmZ1bmN0aW9uIFJlZEJsYWNrRmlyc3Qobm9kZSkge1xuICB3aGlsZSAobm9kZS5MKSBub2RlID0gbm9kZS5MO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVkQmxhY2tUcmVlO1xuIiwiaW1wb3J0IHtjZWxscywgZWRnZXMsIGVwc2lsb259IGZyb20gXCIuL0RpYWdyYW1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkZ2UobGVmdCwgcmlnaHQsIHYwLCB2MSkge1xuICB2YXIgZWRnZSA9IFtudWxsLCBudWxsXSxcbiAgICAgIGluZGV4ID0gZWRnZXMucHVzaChlZGdlKSAtIDE7XG4gIGVkZ2UubGVmdCA9IGxlZnQ7XG4gIGVkZ2UucmlnaHQgPSByaWdodDtcbiAgaWYgKHYwKSBzZXRFZGdlRW5kKGVkZ2UsIGxlZnQsIHJpZ2h0LCB2MCk7XG4gIGlmICh2MSkgc2V0RWRnZUVuZChlZGdlLCByaWdodCwgbGVmdCwgdjEpO1xuICBjZWxsc1tsZWZ0LmluZGV4XS5oYWxmZWRnZXMucHVzaChpbmRleCk7XG4gIGNlbGxzW3JpZ2h0LmluZGV4XS5oYWxmZWRnZXMucHVzaChpbmRleCk7XG4gIHJldHVybiBlZGdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQm9yZGVyRWRnZShsZWZ0LCB2MCwgdjEpIHtcbiAgdmFyIGVkZ2UgPSBbdjAsIHYxXTtcbiAgZWRnZS5sZWZ0ID0gbGVmdDtcbiAgcmV0dXJuIGVkZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGdlRW5kKGVkZ2UsIGxlZnQsIHJpZ2h0LCB2ZXJ0ZXgpIHtcbiAgaWYgKCFlZGdlWzBdICYmICFlZGdlWzFdKSB7XG4gICAgZWRnZVswXSA9IHZlcnRleDtcbiAgICBlZGdlLmxlZnQgPSBsZWZ0O1xuICAgIGVkZ2UucmlnaHQgPSByaWdodDtcbiAgfSBlbHNlIGlmIChlZGdlLmxlZnQgPT09IHJpZ2h0KSB7XG4gICAgZWRnZVsxXSA9IHZlcnRleDtcbiAgfSBlbHNlIHtcbiAgICBlZGdlWzBdID0gdmVydGV4O1xuICB9XG59XG5cbi8vIExpYW5n4oCTQmFyc2t5IGxpbmUgY2xpcHBpbmcuXG5mdW5jdGlvbiBjbGlwRWRnZShlZGdlLCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgYSA9IGVkZ2VbMF0sXG4gICAgICBiID0gZWRnZVsxXSxcbiAgICAgIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIHQwID0gMCxcbiAgICAgIHQxID0gMSxcbiAgICAgIGR4ID0gYnggLSBheCxcbiAgICAgIGR5ID0gYnkgLSBheSxcbiAgICAgIHI7XG5cbiAgciA9IHgwIC0gYXg7XG4gIGlmICghZHggJiYgciA+IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfVxuXG4gIHIgPSB4MSAtIGF4O1xuICBpZiAoIWR4ICYmIHIgPCAwKSByZXR1cm47XG4gIHIgLz0gZHg7XG4gIGlmIChkeCA8IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9IGVsc2UgaWYgKGR4ID4gMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH1cblxuICByID0geTAgLSBheTtcbiAgaWYgKCFkeSAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHkxIC0gYXk7XG4gIGlmICghZHkgJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeTtcbiAgaWYgKGR5IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHkgPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIGlmICghKHQwID4gMCkgJiYgISh0MSA8IDEpKSByZXR1cm4gdHJ1ZTsgLy8gVE9ETyBCZXR0ZXIgY2hlY2s/XG5cbiAgaWYgKHQwID4gMCkgZWRnZVswXSA9IFtheCArIHQwICogZHgsIGF5ICsgdDAgKiBkeV07XG4gIGlmICh0MSA8IDEpIGVkZ2VbMV0gPSBbYXggKyB0MSAqIGR4LCBheSArIHQxICogZHldO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdEVkZ2UoZWRnZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIHYxID0gZWRnZVsxXTtcbiAgaWYgKHYxKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgdjAgPSBlZGdlWzBdLFxuICAgICAgbGVmdCA9IGVkZ2UubGVmdCxcbiAgICAgIHJpZ2h0ID0gZWRnZS5yaWdodCxcbiAgICAgIGx4ID0gbGVmdFswXSxcbiAgICAgIGx5ID0gbGVmdFsxXSxcbiAgICAgIHJ4ID0gcmlnaHRbMF0sXG4gICAgICByeSA9IHJpZ2h0WzFdLFxuICAgICAgZnggPSAobHggKyByeCkgLyAyLFxuICAgICAgZnkgPSAobHkgKyByeSkgLyAyLFxuICAgICAgZm0sXG4gICAgICBmYjtcblxuICBpZiAocnkgPT09IGx5KSB7XG4gICAgaWYgKGZ4IDwgeDAgfHwgZnggPj0geDEpIHJldHVybjtcbiAgICBpZiAobHggPiByeCkge1xuICAgICAgaWYgKCF2MCkgdjAgPSBbZngsIHkwXTtcbiAgICAgIGVsc2UgaWYgKHYwWzFdID49IHkxKSByZXR1cm47XG4gICAgICB2MSA9IFtmeCwgeTFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXYwKSB2MCA9IFtmeCwgeTFdO1xuICAgICAgZWxzZSBpZiAodjBbMV0gPCB5MCkgcmV0dXJuO1xuICAgICAgdjEgPSBbZngsIHkwXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm0gPSAobHggLSByeCkgLyAocnkgLSBseSk7XG4gICAgZmIgPSBmeSAtIGZtICogZng7XG4gICAgaWYgKGZtIDwgLTEgfHwgZm0gPiAxKSB7XG4gICAgICBpZiAobHggPiByeCkge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFsoeTAgLSBmYikgLyBmbSwgeTBdO1xuICAgICAgICBlbHNlIGlmICh2MFsxXSA+PSB5MSkgcmV0dXJuO1xuICAgICAgICB2MSA9IFsoeTEgLSBmYikgLyBmbSwgeTFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF2MCkgdjAgPSBbKHkxIC0gZmIpIC8gZm0sIHkxXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMV0gPCB5MCkgcmV0dXJuO1xuICAgICAgICB2MSA9IFsoeTAgLSBmYikgLyBmbSwgeTBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobHkgPCByeSkge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFt4MCwgZm0gKiB4MCArIGZiXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMF0gPj0geDEpIHJldHVybjtcbiAgICAgICAgdjEgPSBbeDEsIGZtICogeDEgKyBmYl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFt4MSwgZm0gKiB4MSArIGZiXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMF0gPCB4MCkgcmV0dXJuO1xuICAgICAgICB2MSA9IFt4MCwgZm0gKiB4MCArIGZiXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGdlWzBdID0gdjA7XG4gIGVkZ2VbMV0gPSB2MTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlwRWRnZXMoeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIGkgPSBlZGdlcy5sZW5ndGgsXG4gICAgICBlZGdlO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAoIWNvbm5lY3RFZGdlKGVkZ2UgPSBlZGdlc1tpXSwgeDAsIHkwLCB4MSwgeTEpXG4gICAgICAgIHx8ICFjbGlwRWRnZShlZGdlLCB4MCwgeTAsIHgxLCB5MSlcbiAgICAgICAgfHwgIShNYXRoLmFicyhlZGdlWzBdWzBdIC0gZWRnZVsxXVswXSkgPiBlcHNpbG9uXG4gICAgICAgICAgICB8fCBNYXRoLmFicyhlZGdlWzBdWzFdIC0gZWRnZVsxXVsxXSkgPiBlcHNpbG9uKSkge1xuICAgICAgZGVsZXRlIGVkZ2VzW2ldO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtjcmVhdGVCb3JkZXJFZGdlfSBmcm9tIFwiLi9FZGdlXCI7XG5pbXBvcnQge2NlbGxzLCBlZGdlcywgZXBzaWxvbn0gZnJvbSBcIi4vRGlhZ3JhbVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2VsbChzaXRlKSB7XG4gIHJldHVybiBjZWxsc1tzaXRlLmluZGV4XSA9IHtcbiAgICBzaXRlOiBzaXRlLFxuICAgIGhhbGZlZGdlczogW11cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2VsbEhhbGZlZGdlQW5nbGUoY2VsbCwgZWRnZSkge1xuICB2YXIgc2l0ZSA9IGNlbGwuc2l0ZSxcbiAgICAgIHZhID0gZWRnZS5sZWZ0LFxuICAgICAgdmIgPSBlZGdlLnJpZ2h0O1xuICBpZiAoc2l0ZSA9PT0gdmIpIHZiID0gdmEsIHZhID0gc2l0ZTtcbiAgaWYgKHZiKSByZXR1cm4gTWF0aC5hdGFuMih2YlsxXSAtIHZhWzFdLCB2YlswXSAtIHZhWzBdKTtcbiAgaWYgKHNpdGUgPT09IHZhKSB2YSA9IGVkZ2VbMV0sIHZiID0gZWRnZVswXTtcbiAgZWxzZSB2YSA9IGVkZ2VbMF0sIHZiID0gZWRnZVsxXTtcbiAgcmV0dXJuIE1hdGguYXRhbjIodmFbMF0gLSB2YlswXSwgdmJbMV0gLSB2YVsxXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZWxsSGFsZmVkZ2VTdGFydChjZWxsLCBlZGdlKSB7XG4gIHJldHVybiBlZGdlWysoZWRnZS5sZWZ0ICE9PSBjZWxsLnNpdGUpXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbGxIYWxmZWRnZUVuZChjZWxsLCBlZGdlKSB7XG4gIHJldHVybiBlZGdlWysoZWRnZS5sZWZ0ID09PSBjZWxsLnNpdGUpXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRDZWxsSGFsZmVkZ2VzKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGNlbGxzLmxlbmd0aCwgY2VsbCwgaGFsZmVkZ2VzLCBqLCBtOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjZWxsID0gY2VsbHNbaV0pICYmIChtID0gKGhhbGZlZGdlcyA9IGNlbGwuaGFsZmVkZ2VzKS5sZW5ndGgpKSB7XG4gICAgICB2YXIgaW5kZXggPSBuZXcgQXJyYXkobSksXG4gICAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXkobSk7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSBpbmRleFtqXSA9IGosIGFycmF5W2pdID0gY2VsbEhhbGZlZGdlQW5nbGUoY2VsbCwgZWRnZXNbaGFsZmVkZ2VzW2pdXSk7XG4gICAgICBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIGFycmF5W2pdIC0gYXJyYXlbaV07IH0pO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgYXJyYXlbal0gPSBoYWxmZWRnZXNbaW5kZXhbal1dO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgaGFsZmVkZ2VzW2pdID0gYXJyYXlbal07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlwQ2VsbHMoeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIG5DZWxscyA9IGNlbGxzLmxlbmd0aCxcbiAgICAgIGlDZWxsLFxuICAgICAgY2VsbCxcbiAgICAgIHNpdGUsXG4gICAgICBpSGFsZmVkZ2UsXG4gICAgICBoYWxmZWRnZXMsXG4gICAgICBuSGFsZmVkZ2VzLFxuICAgICAgc3RhcnQsXG4gICAgICBzdGFydFgsXG4gICAgICBzdGFydFksXG4gICAgICBlbmQsXG4gICAgICBlbmRYLFxuICAgICAgZW5kWSxcbiAgICAgIGNvdmVyID0gdHJ1ZTtcblxuICBmb3IgKGlDZWxsID0gMDsgaUNlbGwgPCBuQ2VsbHM7ICsraUNlbGwpIHtcbiAgICBpZiAoY2VsbCA9IGNlbGxzW2lDZWxsXSkge1xuICAgICAgc2l0ZSA9IGNlbGwuc2l0ZTtcbiAgICAgIGhhbGZlZGdlcyA9IGNlbGwuaGFsZmVkZ2VzO1xuICAgICAgaUhhbGZlZGdlID0gaGFsZmVkZ2VzLmxlbmd0aDtcblxuICAgICAgLy8gUmVtb3ZlIGFueSBkYW5nbGluZyBjbGlwcGVkIGVkZ2VzLlxuICAgICAgd2hpbGUgKGlIYWxmZWRnZS0tKSB7XG4gICAgICAgIGlmICghZWRnZXNbaGFsZmVkZ2VzW2lIYWxmZWRnZV1dKSB7XG4gICAgICAgICAgaGFsZmVkZ2VzLnNwbGljZShpSGFsZmVkZ2UsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluc2VydCBhbnkgYm9yZGVyIGVkZ2VzIGFzIG5lY2Vzc2FyeS5cbiAgICAgIGlIYWxmZWRnZSA9IDAsIG5IYWxmZWRnZXMgPSBoYWxmZWRnZXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGlIYWxmZWRnZSA8IG5IYWxmZWRnZXMpIHtcbiAgICAgICAgZW5kID0gY2VsbEhhbGZlZGdlRW5kKGNlbGwsIGVkZ2VzW2hhbGZlZGdlc1tpSGFsZmVkZ2VdXSksIGVuZFggPSBlbmRbMF0sIGVuZFkgPSBlbmRbMV07XG4gICAgICAgIHN0YXJ0ID0gY2VsbEhhbGZlZGdlU3RhcnQoY2VsbCwgZWRnZXNbaGFsZmVkZ2VzWysraUhhbGZlZGdlICUgbkhhbGZlZGdlc11dKSwgc3RhcnRYID0gc3RhcnRbMF0sIHN0YXJ0WSA9IHN0YXJ0WzFdO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZW5kWCAtIHN0YXJ0WCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKGVuZFkgLSBzdGFydFkpID4gZXBzaWxvbikge1xuICAgICAgICAgIGhhbGZlZGdlcy5zcGxpY2UoaUhhbGZlZGdlLCAwLCBlZGdlcy5wdXNoKGNyZWF0ZUJvcmRlckVkZ2Uoc2l0ZSwgZW5kLFxuICAgICAgICAgICAgICBNYXRoLmFicyhlbmRYIC0geDApIDwgZXBzaWxvbiAmJiB5MSAtIGVuZFkgPiBlcHNpbG9uID8gW3gwLCBNYXRoLmFicyhzdGFydFggLSB4MCkgPCBlcHNpbG9uID8gc3RhcnRZIDogeTFdXG4gICAgICAgICAgICAgIDogTWF0aC5hYnMoZW5kWSAtIHkxKSA8IGVwc2lsb24gJiYgeDEgLSBlbmRYID4gZXBzaWxvbiA/IFtNYXRoLmFicyhzdGFydFkgLSB5MSkgPCBlcHNpbG9uID8gc3RhcnRYIDogeDEsIHkxXVxuICAgICAgICAgICAgICA6IE1hdGguYWJzKGVuZFggLSB4MSkgPCBlcHNpbG9uICYmIGVuZFkgLSB5MCA+IGVwc2lsb24gPyBbeDEsIE1hdGguYWJzKHN0YXJ0WCAtIHgxKSA8IGVwc2lsb24gPyBzdGFydFkgOiB5MF1cbiAgICAgICAgICAgICAgOiBNYXRoLmFicyhlbmRZIC0geTApIDwgZXBzaWxvbiAmJiBlbmRYIC0geDAgPiBlcHNpbG9uID8gW01hdGguYWJzKHN0YXJ0WSAtIHkwKSA8IGVwc2lsb24gPyBzdGFydFggOiB4MCwgeTBdXG4gICAgICAgICAgICAgIDogbnVsbCkpIC0gMSk7XG4gICAgICAgICAgKytuSGFsZmVkZ2VzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuSGFsZmVkZ2VzKSBjb3ZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIHdlcmVu4oCZdCBhbnkgZWRnZXMsIGhhdmUgdGhlIGNsb3Nlc3Qgc2l0ZSBjb3ZlciB0aGUgZXh0ZW50LlxuICAvLyBJdCBkb2VzbuKAmXQgbWF0dGVyIHdoaWNoIGNvcm5lciBvZiB0aGUgZXh0ZW50IHdlIG1lYXN1cmUhXG4gIGlmIChjb3Zlcikge1xuICAgIHZhciBkeCwgZHksIGQyLCBkYyA9IEluZmluaXR5O1xuXG4gICAgZm9yIChpQ2VsbCA9IDAsIGNvdmVyID0gbnVsbDsgaUNlbGwgPCBuQ2VsbHM7ICsraUNlbGwpIHtcbiAgICAgIGlmIChjZWxsID0gY2VsbHNbaUNlbGxdKSB7XG4gICAgICAgIHNpdGUgPSBjZWxsLnNpdGU7XG4gICAgICAgIGR4ID0gc2l0ZVswXSAtIHgwO1xuICAgICAgICBkeSA9IHNpdGVbMV0gLSB5MDtcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgICAgaWYgKGQyIDwgZGMpIGRjID0gZDIsIGNvdmVyID0gY2VsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY292ZXIpIHtcbiAgICAgIHZhciB2MDAgPSBbeDAsIHkwXSwgdjAxID0gW3gwLCB5MV0sIHYxMSA9IFt4MSwgeTFdLCB2MTAgPSBbeDEsIHkwXTtcbiAgICAgIGNvdmVyLmhhbGZlZGdlcy5wdXNoKFxuICAgICAgICBlZGdlcy5wdXNoKGNyZWF0ZUJvcmRlckVkZ2Uoc2l0ZSA9IGNvdmVyLnNpdGUsIHYwMCwgdjAxKSkgLSAxLFxuICAgICAgICBlZGdlcy5wdXNoKGNyZWF0ZUJvcmRlckVkZ2Uoc2l0ZSwgdjAxLCB2MTEpKSAtIDEsXG4gICAgICAgIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlLCB2MTEsIHYxMCkpIC0gMSxcbiAgICAgICAgZWRnZXMucHVzaChjcmVhdGVCb3JkZXJFZGdlKHNpdGUsIHYxMCwgdjAwKSkgLSAxXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIExhc3RseSBkZWxldGUgYW55IGNlbGxzIHdpdGggbm8gZWRnZXM7IHRoZXNlIHdlcmUgZW50aXJlbHkgY2xpcHBlZC5cbiAgZm9yIChpQ2VsbCA9IDA7IGlDZWxsIDwgbkNlbGxzOyArK2lDZWxsKSB7XG4gICAgaWYgKGNlbGwgPSBjZWxsc1tpQ2VsbF0pIHtcbiAgICAgIGlmICghY2VsbC5oYWxmZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSBjZWxsc1tpQ2VsbF07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1JlZEJsYWNrTm9kZX0gZnJvbSBcIi4vUmVkQmxhY2tUcmVlXCI7XG5pbXBvcnQge2NpcmNsZXMsIGVwc2lsb24yfSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbnZhciBjaXJjbGVQb29sID0gW107XG5cbmV4cG9ydCB2YXIgZmlyc3RDaXJjbGU7XG5cbmZ1bmN0aW9uIENpcmNsZSgpIHtcbiAgUmVkQmxhY2tOb2RlKHRoaXMpO1xuICB0aGlzLnggPVxuICB0aGlzLnkgPVxuICB0aGlzLmFyYyA9XG4gIHRoaXMuc2l0ZSA9XG4gIHRoaXMuY3kgPSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoQ2lyY2xlKGFyYykge1xuICB2YXIgbEFyYyA9IGFyYy5QLFxuICAgICAgckFyYyA9IGFyYy5OO1xuXG4gIGlmICghbEFyYyB8fCAhckFyYykgcmV0dXJuO1xuXG4gIHZhciBsU2l0ZSA9IGxBcmMuc2l0ZSxcbiAgICAgIGNTaXRlID0gYXJjLnNpdGUsXG4gICAgICByU2l0ZSA9IHJBcmMuc2l0ZTtcblxuICBpZiAobFNpdGUgPT09IHJTaXRlKSByZXR1cm47XG5cbiAgdmFyIGJ4ID0gY1NpdGVbMF0sXG4gICAgICBieSA9IGNTaXRlWzFdLFxuICAgICAgYXggPSBsU2l0ZVswXSAtIGJ4LFxuICAgICAgYXkgPSBsU2l0ZVsxXSAtIGJ5LFxuICAgICAgY3ggPSByU2l0ZVswXSAtIGJ4LFxuICAgICAgY3kgPSByU2l0ZVsxXSAtIGJ5O1xuXG4gIHZhciBkID0gMiAqIChheCAqIGN5IC0gYXkgKiBjeCk7XG4gIGlmIChkID49IC1lcHNpbG9uMikgcmV0dXJuO1xuXG4gIHZhciBoYSA9IGF4ICogYXggKyBheSAqIGF5LFxuICAgICAgaGMgPSBjeCAqIGN4ICsgY3kgKiBjeSxcbiAgICAgIHggPSAoY3kgKiBoYSAtIGF5ICogaGMpIC8gZCxcbiAgICAgIHkgPSAoYXggKiBoYyAtIGN4ICogaGEpIC8gZDtcblxuICB2YXIgY2lyY2xlID0gY2lyY2xlUG9vbC5wb3AoKSB8fCBuZXcgQ2lyY2xlO1xuICBjaXJjbGUuYXJjID0gYXJjO1xuICBjaXJjbGUuc2l0ZSA9IGNTaXRlO1xuICBjaXJjbGUueCA9IHggKyBieDtcbiAgY2lyY2xlLnkgPSAoY2lyY2xlLmN5ID0geSArIGJ5KSArIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTsgLy8geSBib3R0b21cblxuICBhcmMuY2lyY2xlID0gY2lyY2xlO1xuXG4gIHZhciBiZWZvcmUgPSBudWxsLFxuICAgICAgbm9kZSA9IGNpcmNsZXMuXztcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChjaXJjbGUueSA8IG5vZGUueSB8fCAoY2lyY2xlLnkgPT09IG5vZGUueSAmJiBjaXJjbGUueCA8PSBub2RlLngpKSB7XG4gICAgICBpZiAobm9kZS5MKSBub2RlID0gbm9kZS5MO1xuICAgICAgZWxzZSB7IGJlZm9yZSA9IG5vZGUuUDsgYnJlYWs7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGUuUikgbm9kZSA9IG5vZGUuUjtcbiAgICAgIGVsc2UgeyBiZWZvcmUgPSBub2RlOyBicmVhazsgfVxuICAgIH1cbiAgfVxuXG4gIGNpcmNsZXMuaW5zZXJ0KGJlZm9yZSwgY2lyY2xlKTtcbiAgaWYgKCFiZWZvcmUpIGZpcnN0Q2lyY2xlID0gY2lyY2xlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGV0YWNoQ2lyY2xlKGFyYykge1xuICB2YXIgY2lyY2xlID0gYXJjLmNpcmNsZTtcbiAgaWYgKGNpcmNsZSkge1xuICAgIGlmICghY2lyY2xlLlApIGZpcnN0Q2lyY2xlID0gY2lyY2xlLk47XG4gICAgY2lyY2xlcy5yZW1vdmUoY2lyY2xlKTtcbiAgICBjaXJjbGVQb29sLnB1c2goY2lyY2xlKTtcbiAgICBSZWRCbGFja05vZGUoY2lyY2xlKTtcbiAgICBhcmMuY2lyY2xlID0gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHtSZWRCbGFja05vZGV9IGZyb20gXCIuL1JlZEJsYWNrVHJlZVwiO1xuaW1wb3J0IHtjcmVhdGVDZWxsfSBmcm9tIFwiLi9DZWxsXCI7XG5pbXBvcnQge2F0dGFjaENpcmNsZSwgZGV0YWNoQ2lyY2xlfSBmcm9tIFwiLi9DaXJjbGVcIjtcbmltcG9ydCB7Y3JlYXRlRWRnZSwgc2V0RWRnZUVuZH0gZnJvbSBcIi4vRWRnZVwiO1xuaW1wb3J0IHtiZWFjaGVzLCBlcHNpbG9ufSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbnZhciBiZWFjaFBvb2wgPSBbXTtcblxuZnVuY3Rpb24gQmVhY2goKSB7XG4gIFJlZEJsYWNrTm9kZSh0aGlzKTtcbiAgdGhpcy5lZGdlID1cbiAgdGhpcy5zaXRlID1cbiAgdGhpcy5jaXJjbGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCZWFjaChzaXRlKSB7XG4gIHZhciBiZWFjaCA9IGJlYWNoUG9vbC5wb3AoKSB8fCBuZXcgQmVhY2g7XG4gIGJlYWNoLnNpdGUgPSBzaXRlO1xuICByZXR1cm4gYmVhY2g7XG59XG5cbmZ1bmN0aW9uIGRldGFjaEJlYWNoKGJlYWNoKSB7XG4gIGRldGFjaENpcmNsZShiZWFjaCk7XG4gIGJlYWNoZXMucmVtb3ZlKGJlYWNoKTtcbiAgYmVhY2hQb29sLnB1c2goYmVhY2gpO1xuICBSZWRCbGFja05vZGUoYmVhY2gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQmVhY2goYmVhY2gpIHtcbiAgdmFyIGNpcmNsZSA9IGJlYWNoLmNpcmNsZSxcbiAgICAgIHggPSBjaXJjbGUueCxcbiAgICAgIHkgPSBjaXJjbGUuY3ksXG4gICAgICB2ZXJ0ZXggPSBbeCwgeV0sXG4gICAgICBwcmV2aW91cyA9IGJlYWNoLlAsXG4gICAgICBuZXh0ID0gYmVhY2guTixcbiAgICAgIGRpc2FwcGVhcmluZyA9IFtiZWFjaF07XG5cbiAgZGV0YWNoQmVhY2goYmVhY2gpO1xuXG4gIHZhciBsQXJjID0gcHJldmlvdXM7XG4gIHdoaWxlIChsQXJjLmNpcmNsZVxuICAgICAgJiYgTWF0aC5hYnMoeCAtIGxBcmMuY2lyY2xlLngpIDwgZXBzaWxvblxuICAgICAgJiYgTWF0aC5hYnMoeSAtIGxBcmMuY2lyY2xlLmN5KSA8IGVwc2lsb24pIHtcbiAgICBwcmV2aW91cyA9IGxBcmMuUDtcbiAgICBkaXNhcHBlYXJpbmcudW5zaGlmdChsQXJjKTtcbiAgICBkZXRhY2hCZWFjaChsQXJjKTtcbiAgICBsQXJjID0gcHJldmlvdXM7XG4gIH1cblxuICBkaXNhcHBlYXJpbmcudW5zaGlmdChsQXJjKTtcbiAgZGV0YWNoQ2lyY2xlKGxBcmMpO1xuXG4gIHZhciByQXJjID0gbmV4dDtcbiAgd2hpbGUgKHJBcmMuY2lyY2xlXG4gICAgICAmJiBNYXRoLmFicyh4IC0gckFyYy5jaXJjbGUueCkgPCBlcHNpbG9uXG4gICAgICAmJiBNYXRoLmFicyh5IC0gckFyYy5jaXJjbGUuY3kpIDwgZXBzaWxvbikge1xuICAgIG5leHQgPSByQXJjLk47XG4gICAgZGlzYXBwZWFyaW5nLnB1c2gockFyYyk7XG4gICAgZGV0YWNoQmVhY2gockFyYyk7XG4gICAgckFyYyA9IG5leHQ7XG4gIH1cblxuICBkaXNhcHBlYXJpbmcucHVzaChyQXJjKTtcbiAgZGV0YWNoQ2lyY2xlKHJBcmMpO1xuXG4gIHZhciBuQXJjcyA9IGRpc2FwcGVhcmluZy5sZW5ndGgsXG4gICAgICBpQXJjO1xuICBmb3IgKGlBcmMgPSAxOyBpQXJjIDwgbkFyY3M7ICsraUFyYykge1xuICAgIHJBcmMgPSBkaXNhcHBlYXJpbmdbaUFyY107XG4gICAgbEFyYyA9IGRpc2FwcGVhcmluZ1tpQXJjIC0gMV07XG4gICAgc2V0RWRnZUVuZChyQXJjLmVkZ2UsIGxBcmMuc2l0ZSwgckFyYy5zaXRlLCB2ZXJ0ZXgpO1xuICB9XG5cbiAgbEFyYyA9IGRpc2FwcGVhcmluZ1swXTtcbiAgckFyYyA9IGRpc2FwcGVhcmluZ1tuQXJjcyAtIDFdO1xuICByQXJjLmVkZ2UgPSBjcmVhdGVFZGdlKGxBcmMuc2l0ZSwgckFyYy5zaXRlLCBudWxsLCB2ZXJ0ZXgpO1xuXG4gIGF0dGFjaENpcmNsZShsQXJjKTtcbiAgYXR0YWNoQ2lyY2xlKHJBcmMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmVhY2goc2l0ZSkge1xuICB2YXIgeCA9IHNpdGVbMF0sXG4gICAgICBkaXJlY3RyaXggPSBzaXRlWzFdLFxuICAgICAgbEFyYyxcbiAgICAgIHJBcmMsXG4gICAgICBkeGwsXG4gICAgICBkeHIsXG4gICAgICBub2RlID0gYmVhY2hlcy5fO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgZHhsID0gbGVmdEJyZWFrUG9pbnQobm9kZSwgZGlyZWN0cml4KSAtIHg7XG4gICAgaWYgKGR4bCA+IGVwc2lsb24pIG5vZGUgPSBub2RlLkw7IGVsc2Uge1xuICAgICAgZHhyID0geCAtIHJpZ2h0QnJlYWtQb2ludChub2RlLCBkaXJlY3RyaXgpO1xuICAgICAgaWYgKGR4ciA+IGVwc2lsb24pIHtcbiAgICAgICAgaWYgKCFub2RlLlIpIHtcbiAgICAgICAgICBsQXJjID0gbm9kZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5SO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGR4bCA+IC1lcHNpbG9uKSB7XG4gICAgICAgICAgbEFyYyA9IG5vZGUuUDtcbiAgICAgICAgICByQXJjID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChkeHIgPiAtZXBzaWxvbikge1xuICAgICAgICAgIGxBcmMgPSBub2RlO1xuICAgICAgICAgIHJBcmMgPSBub2RlLk47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbEFyYyA9IHJBcmMgPSBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUNlbGwoc2l0ZSk7XG4gIHZhciBuZXdBcmMgPSBjcmVhdGVCZWFjaChzaXRlKTtcbiAgYmVhY2hlcy5pbnNlcnQobEFyYywgbmV3QXJjKTtcblxuICBpZiAoIWxBcmMgJiYgIXJBcmMpIHJldHVybjtcblxuICBpZiAobEFyYyA9PT0gckFyYykge1xuICAgIGRldGFjaENpcmNsZShsQXJjKTtcbiAgICByQXJjID0gY3JlYXRlQmVhY2gobEFyYy5zaXRlKTtcbiAgICBiZWFjaGVzLmluc2VydChuZXdBcmMsIHJBcmMpO1xuICAgIG5ld0FyYy5lZGdlID0gckFyYy5lZGdlID0gY3JlYXRlRWRnZShsQXJjLnNpdGUsIG5ld0FyYy5zaXRlKTtcbiAgICBhdHRhY2hDaXJjbGUobEFyYyk7XG4gICAgYXR0YWNoQ2lyY2xlKHJBcmMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghckFyYykgeyAvLyAmJiBsQXJjXG4gICAgbmV3QXJjLmVkZ2UgPSBjcmVhdGVFZGdlKGxBcmMuc2l0ZSwgbmV3QXJjLnNpdGUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVsc2UgbEFyYyAhPT0gckFyY1xuICBkZXRhY2hDaXJjbGUobEFyYyk7XG4gIGRldGFjaENpcmNsZShyQXJjKTtcblxuICB2YXIgbFNpdGUgPSBsQXJjLnNpdGUsXG4gICAgICBheCA9IGxTaXRlWzBdLFxuICAgICAgYXkgPSBsU2l0ZVsxXSxcbiAgICAgIGJ4ID0gc2l0ZVswXSAtIGF4LFxuICAgICAgYnkgPSBzaXRlWzFdIC0gYXksXG4gICAgICByU2l0ZSA9IHJBcmMuc2l0ZSxcbiAgICAgIGN4ID0gclNpdGVbMF0gLSBheCxcbiAgICAgIGN5ID0gclNpdGVbMV0gLSBheSxcbiAgICAgIGQgPSAyICogKGJ4ICogY3kgLSBieSAqIGN4KSxcbiAgICAgIGhiID0gYnggKiBieCArIGJ5ICogYnksXG4gICAgICBoYyA9IGN4ICogY3ggKyBjeSAqIGN5LFxuICAgICAgdmVydGV4ID0gWyhjeSAqIGhiIC0gYnkgKiBoYykgLyBkICsgYXgsIChieCAqIGhjIC0gY3ggKiBoYikgLyBkICsgYXldO1xuXG4gIHNldEVkZ2VFbmQockFyYy5lZGdlLCBsU2l0ZSwgclNpdGUsIHZlcnRleCk7XG4gIG5ld0FyYy5lZGdlID0gY3JlYXRlRWRnZShsU2l0ZSwgc2l0ZSwgbnVsbCwgdmVydGV4KTtcbiAgckFyYy5lZGdlID0gY3JlYXRlRWRnZShzaXRlLCByU2l0ZSwgbnVsbCwgdmVydGV4KTtcbiAgYXR0YWNoQ2lyY2xlKGxBcmMpO1xuICBhdHRhY2hDaXJjbGUockFyYyk7XG59XG5cbmZ1bmN0aW9uIGxlZnRCcmVha1BvaW50KGFyYywgZGlyZWN0cml4KSB7XG4gIHZhciBzaXRlID0gYXJjLnNpdGUsXG4gICAgICByZm9jeCA9IHNpdGVbMF0sXG4gICAgICByZm9jeSA9IHNpdGVbMV0sXG4gICAgICBwYnkyID0gcmZvY3kgLSBkaXJlY3RyaXg7XG5cbiAgaWYgKCFwYnkyKSByZXR1cm4gcmZvY3g7XG5cbiAgdmFyIGxBcmMgPSBhcmMuUDtcbiAgaWYgKCFsQXJjKSByZXR1cm4gLUluZmluaXR5O1xuXG4gIHNpdGUgPSBsQXJjLnNpdGU7XG4gIHZhciBsZm9jeCA9IHNpdGVbMF0sXG4gICAgICBsZm9jeSA9IHNpdGVbMV0sXG4gICAgICBwbGJ5MiA9IGxmb2N5IC0gZGlyZWN0cml4O1xuXG4gIGlmICghcGxieTIpIHJldHVybiBsZm9jeDtcblxuICB2YXIgaGwgPSBsZm9jeCAtIHJmb2N4LFxuICAgICAgYWJ5MiA9IDEgLyBwYnkyIC0gMSAvIHBsYnkyLFxuICAgICAgYiA9IGhsIC8gcGxieTI7XG5cbiAgaWYgKGFieTIpIHJldHVybiAoLWIgKyBNYXRoLnNxcnQoYiAqIGIgLSAyICogYWJ5MiAqIChobCAqIGhsIC8gKC0yICogcGxieTIpIC0gbGZvY3kgKyBwbGJ5MiAvIDIgKyByZm9jeSAtIHBieTIgLyAyKSkpIC8gYWJ5MiArIHJmb2N4O1xuXG4gIHJldHVybiAocmZvY3ggKyBsZm9jeCkgLyAyO1xufVxuXG5mdW5jdGlvbiByaWdodEJyZWFrUG9pbnQoYXJjLCBkaXJlY3RyaXgpIHtcbiAgdmFyIHJBcmMgPSBhcmMuTjtcbiAgaWYgKHJBcmMpIHJldHVybiBsZWZ0QnJlYWtQb2ludChyQXJjLCBkaXJlY3RyaXgpO1xuICB2YXIgc2l0ZSA9IGFyYy5zaXRlO1xuICByZXR1cm4gc2l0ZVsxXSA9PT0gZGlyZWN0cml4ID8gc2l0ZVswXSA6IEluZmluaXR5O1xufVxuIiwiaW1wb3J0IHthZGRCZWFjaCwgcmVtb3ZlQmVhY2h9IGZyb20gXCIuL0JlYWNoXCI7XG5pbXBvcnQge3NvcnRDZWxsSGFsZmVkZ2VzLCBjZWxsSGFsZmVkZ2VTdGFydCwgY2xpcENlbGxzfSBmcm9tIFwiLi9DZWxsXCI7XG5pbXBvcnQge2ZpcnN0Q2lyY2xlfSBmcm9tIFwiLi9DaXJjbGVcIjtcbmltcG9ydCB7Y2xpcEVkZ2VzfSBmcm9tIFwiLi9FZGdlXCI7XG5pbXBvcnQgUmVkQmxhY2tUcmVlIGZyb20gXCIuL1JlZEJsYWNrVHJlZVwiO1xuXG5leHBvcnQgdmFyIGVwc2lsb24gPSAxZS02O1xuZXhwb3J0IHZhciBlcHNpbG9uMiA9IDFlLTEyO1xuZXhwb3J0IHZhciBiZWFjaGVzO1xuZXhwb3J0IHZhciBjZWxscztcbmV4cG9ydCB2YXIgY2lyY2xlcztcbmV4cG9ydCB2YXIgZWRnZXM7XG5cbmZ1bmN0aW9uIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XG4gIHJldHVybiAoYVswXSAtIGNbMF0pICogKGJbMV0gLSBhWzFdKSAtIChhWzBdIC0gYlswXSkgKiAoY1sxXSAtIGFbMV0pO1xufVxuXG5mdW5jdGlvbiBsZXhpY29ncmFwaGljKGEsIGIpIHtcbiAgcmV0dXJuIGJbMV0gLSBhWzFdXG4gICAgICB8fCBiWzBdIC0gYVswXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlhZ3JhbShzaXRlcywgZXh0ZW50KSB7XG4gIHZhciBzaXRlID0gc2l0ZXMuc29ydChsZXhpY29ncmFwaGljKS5wb3AoKSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgY2lyY2xlO1xuXG4gIGVkZ2VzID0gW107XG4gIGNlbGxzID0gbmV3IEFycmF5KHNpdGVzLmxlbmd0aCk7XG4gIGJlYWNoZXMgPSBuZXcgUmVkQmxhY2tUcmVlO1xuICBjaXJjbGVzID0gbmV3IFJlZEJsYWNrVHJlZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNpcmNsZSA9IGZpcnN0Q2lyY2xlO1xuICAgIGlmIChzaXRlICYmICghY2lyY2xlIHx8IHNpdGVbMV0gPCBjaXJjbGUueSB8fCAoc2l0ZVsxXSA9PT0gY2lyY2xlLnkgJiYgc2l0ZVswXSA8IGNpcmNsZS54KSkpIHtcbiAgICAgIGlmIChzaXRlWzBdICE9PSB4IHx8IHNpdGVbMV0gIT09IHkpIHtcbiAgICAgICAgYWRkQmVhY2goc2l0ZSk7XG4gICAgICAgIHggPSBzaXRlWzBdLCB5ID0gc2l0ZVsxXTtcbiAgICAgIH1cbiAgICAgIHNpdGUgPSBzaXRlcy5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKGNpcmNsZSkge1xuICAgICAgcmVtb3ZlQmVhY2goY2lyY2xlLmFyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDZWxsSGFsZmVkZ2VzKCk7XG5cbiAgaWYgKGV4dGVudCkge1xuICAgIHZhciB4MCA9ICtleHRlbnRbMF1bMF0sXG4gICAgICAgIHkwID0gK2V4dGVudFswXVsxXSxcbiAgICAgICAgeDEgPSArZXh0ZW50WzFdWzBdLFxuICAgICAgICB5MSA9ICtleHRlbnRbMV1bMV07XG4gICAgY2xpcEVkZ2VzKHgwLCB5MCwgeDEsIHkxKTtcbiAgICBjbGlwQ2VsbHMoeDAsIHkwLCB4MSwgeTEpO1xuICB9XG5cbiAgdGhpcy5lZGdlcyA9IGVkZ2VzO1xuICB0aGlzLmNlbGxzID0gY2VsbHM7XG5cbiAgYmVhY2hlcyA9XG4gIGNpcmNsZXMgPVxuICBlZGdlcyA9XG4gIGNlbGxzID0gbnVsbDtcbn1cblxuRGlhZ3JhbS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaWFncmFtLFxuXG4gIHBvbHlnb25zOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWRnZXMgPSB0aGlzLmVkZ2VzO1xuXG4gICAgcmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKGNlbGwpIHtcbiAgICAgIHZhciBwb2x5Z29uID0gY2VsbC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGNlbGxIYWxmZWRnZVN0YXJ0KGNlbGwsIGVkZ2VzW2ldKTsgfSk7XG4gICAgICBwb2x5Z29uLmRhdGEgPSBjZWxsLnNpdGUuZGF0YTtcbiAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0pO1xuICB9LFxuXG4gIHRyaWFuZ2xlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRyaWFuZ2xlcyA9IFtdLFxuICAgICAgICBlZGdlcyA9IHRoaXMuZWRnZXM7XG5cbiAgICB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oY2VsbCwgaSkge1xuICAgICAgaWYgKCEobSA9IChoYWxmZWRnZXMgPSBjZWxsLmhhbGZlZGdlcykubGVuZ3RoKSkgcmV0dXJuO1xuICAgICAgdmFyIHNpdGUgPSBjZWxsLnNpdGUsXG4gICAgICAgICAgaGFsZmVkZ2VzLFxuICAgICAgICAgIGogPSAtMSxcbiAgICAgICAgICBtLFxuICAgICAgICAgIHMwLFxuICAgICAgICAgIGUxID0gZWRnZXNbaGFsZmVkZ2VzW20gLSAxXV0sXG4gICAgICAgICAgczEgPSBlMS5sZWZ0ID09PSBzaXRlID8gZTEucmlnaHQgOiBlMS5sZWZ0O1xuXG4gICAgICB3aGlsZSAoKytqIDwgbSkge1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBlMSA9IGVkZ2VzW2hhbGZlZGdlc1tqXV07XG4gICAgICAgIHMxID0gZTEubGVmdCA9PT0gc2l0ZSA/IGUxLnJpZ2h0IDogZTEubGVmdDtcbiAgICAgICAgaWYgKHMwICYmIHMxICYmIGkgPCBzMC5pbmRleCAmJiBpIDwgczEuaW5kZXggJiYgdHJpYW5nbGVBcmVhKHNpdGUsIHMwLCBzMSkgPCAwKSB7XG4gICAgICAgICAgdHJpYW5nbGVzLnB1c2goW3NpdGUuZGF0YSwgczAuZGF0YSwgczEuZGF0YV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJpYW5nbGVzO1xuICB9LFxuXG4gIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIGVkZ2UucmlnaHQ7XG4gICAgfSkubWFwKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogZWRnZS5sZWZ0LmRhdGEsXG4gICAgICAgIHRhcmdldDogZWRnZS5yaWdodC5kYXRhXG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGZpbmQ6IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICAgIHZhciB0aGF0ID0gdGhpcywgaTAsIGkxID0gdGhhdC5fZm91bmQgfHwgMCwgbiA9IHRoYXQuY2VsbHMubGVuZ3RoLCBjZWxsO1xuXG4gICAgLy8gVXNlIHRoZSBwcmV2aW91c2x5LWZvdW5kIGNlbGwsIG9yIHN0YXJ0IHdpdGggYW4gYXJiaXRyYXJ5IG9uZS5cbiAgICB3aGlsZSAoIShjZWxsID0gdGhhdC5jZWxsc1tpMV0pKSBpZiAoKytpMSA+PSBuKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZHggPSB4IC0gY2VsbC5zaXRlWzBdLCBkeSA9IHkgLSBjZWxsLnNpdGVbMV0sIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgaGFsZi1lZGdlcyB0byBmaW5kIGEgY2xvc2VyIGNlbGwsIGlmIGFueS5cbiAgICBkbyB7XG4gICAgICBjZWxsID0gdGhhdC5jZWxsc1tpMCA9IGkxXSwgaTEgPSBudWxsO1xuICAgICAgY2VsbC5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBlZGdlID0gdGhhdC5lZGdlc1tlXSwgdiA9IGVkZ2UubGVmdDtcbiAgICAgICAgaWYgKCh2ID09PSBjZWxsLnNpdGUgfHwgIXYpICYmICEodiA9IGVkZ2UucmlnaHQpKSByZXR1cm47XG4gICAgICAgIHZhciB2eCA9IHggLSB2WzBdLCB2eSA9IHkgLSB2WzFdLCB2MiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICAgICAgICBpZiAodjIgPCBkMikgZDIgPSB2MiwgaTEgPSB2LmluZGV4O1xuICAgICAgfSk7XG4gICAgfSB3aGlsZSAoaTEgIT09IG51bGwpO1xuXG4gICAgdGhhdC5fZm91bmQgPSBpMDtcblxuICAgIHJldHVybiByYWRpdXMgPT0gbnVsbCB8fCBkMiA8PSByYWRpdXMgKiByYWRpdXMgPyBjZWxsLnNpdGUgOiBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludFwiO1xuaW1wb3J0IERpYWdyYW0sIHtlcHNpbG9ufSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBleHRlbnQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHZvcm9ub2koZGF0YSkge1xuICAgIHJldHVybiBuZXcgRGlhZ3JhbShkYXRhLm1hcChmdW5jdGlvbihkLCBpKSB7XG4gICAgICB2YXIgcyA9IFtNYXRoLnJvdW5kKHgoZCwgaSwgZGF0YSkgLyBlcHNpbG9uKSAqIGVwc2lsb24sIE1hdGgucm91bmQoeShkLCBpLCBkYXRhKSAvIGVwc2lsb24pICogZXBzaWxvbl07XG4gICAgICBzLmluZGV4ID0gaTtcbiAgICAgIHMuZGF0YSA9IGQ7XG4gICAgICByZXR1cm4gcztcbiAgICB9KSwgZXh0ZW50KTtcbiAgfVxuXG4gIHZvcm9ub2kucG9seWdvbnMgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHZvcm9ub2koZGF0YSkucG9seWdvbnMoKTtcbiAgfTtcblxuICB2b3Jvbm9pLmxpbmtzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiB2b3Jvbm9pKGRhdGEpLmxpbmtzKCk7XG4gIH07XG5cbiAgdm9yb25vaS50cmlhbmdsZXMgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHZvcm9ub2koZGF0YSkudHJpYW5nbGVzKCk7XG4gIH07XG5cbiAgdm9yb25vaS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgdm9yb25vaSkgOiB4O1xuICB9O1xuXG4gIHZvcm9ub2kueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHZvcm9ub2kpIDogeTtcbiAgfTtcblxuICB2b3Jvbm9pLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSBfID09IG51bGwgPyBudWxsIDogW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0sIHZvcm9ub2kpIDogZXh0ZW50ICYmIFtbZXh0ZW50WzBdWzBdLCBleHRlbnRbMF1bMV1dLCBbZXh0ZW50WzFdWzBdLCBleHRlbnRbMV1bMV1dXTtcbiAgfTtcblxuICB2b3Jvbm9pLnNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gXyA9PSBudWxsID8gbnVsbCA6IFtbMCwgMF0sIFsrX1swXSwgK19bMV1dXSwgdm9yb25vaSkgOiBleHRlbnQgJiYgW2V4dGVudFsxXVswXSAtIGV4dGVudFswXVswXSwgZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdXTtcbiAgfTtcblxuICByZXR1cm4gdm9yb25vaTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyB2b3Jvbm9pfSBmcm9tIFwiLi92b3Jvbm9pXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29067\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3-zoom.58d395fe66252f93.bundle.js b/assets/demo/site/npm.d3-zoom.58d395fe66252f93.bundle.js
new file mode 100644
index 00000000..bced0798
--- /dev/null
+++ b/assets/demo/site/npm.d3-zoom.58d395fe66252f93.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4787],{52540:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "sP": () => (/* reexport */ zoom),\n "CR": () => (/* reexport */ identity),\n "P2": () => (/* reexport */ transform)\n});\n\n// EXTERNAL MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar dispatch = __webpack_require__(92626);\n// EXTERNAL MODULE: ./node_modules/d3-drag/src/nodrag.js\nvar nodrag = __webpack_require__(10072);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/zoom.js\nvar src_zoom = __webpack_require__(20588);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/selection/on.js\nvar on = __webpack_require__(25109);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/mouse.js\nvar mouse = __webpack_require__(43095);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/select.js\nvar src_select = __webpack_require__(94017);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/touch.js\nvar touch = __webpack_require__(24793);\n// EXTERNAL MODULE: ./node_modules/d3-transition/src/index.js + 27 modules\nvar src = __webpack_require__(86254);\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/event.js\nfunction ZoomEvent(target, type, transform) {\n this.target = target;\n this.type = type;\n this.transform = transform;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/transform.js\nfunction Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";\n }\n};\n\nvar identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nfunction transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/noevent.js\n\n\nfunction nopropagation() {\n on/* event.stopImmediatePropagation */.B.stopImmediatePropagation();\n}\n\n/* harmony default export */ function noevent() {\n on/* event.preventDefault */.B.preventDefault();\n on/* event.stopImmediatePropagation */.B.stopImmediatePropagation();\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/zoom.js\n\n\n\n\n\n\n\n\n\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !on/* event.ctrlKey */.B.ctrlKey && !on/* event.button */.B.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute("viewBox")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta() {\n return -on/* event.deltaY */.B.deltaY * (on/* event.deltaMode */.B.deltaMode === 1 ? 0.05 : on/* event.deltaMode */.B.deltaMode ? 1 : 0.002);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || ("ontouchstart" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\n/* harmony default export */ function zoom() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = src_zoom/* default */.Z,\n listeners = (0,dispatch/* default */.Z)("start", "zoom", "end"),\n touchstarting,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0;\n\n function zoom(selection) {\n selection\n .property("__zoom", defaultTransform)\n .on("wheel.zoom", wheeled)\n .on("mousedown.zoom", mousedowned)\n .on("dblclick.zoom", dblclicked)\n .filter(touchable)\n .on("touchstart.zoom", touchstarted)\n .on("touchmove.zoom", touchmoved)\n .on("touchend.zoom touchcancel.zoom", touchended)\n .style("touch-action", "none")\n .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n zoom.transform = function(collection, transform, point) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property("__zoom", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .start()\n .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === "function" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p);\n };\n\n zoom.scaleTo = function(selection, k, p) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === "function" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p);\n };\n\n zoom.translateBy = function(selection, x, y) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === "function" ? x.apply(this, arguments) : x,\n typeof y === "function" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n });\n };\n\n zoom.translateTo = function(selection, x, y, p) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === "function" ? -x.apply(this, arguments) : -x,\n typeof y === "function" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point) {\n transition\n .on("start.zoom", function() { gesture(this, arguments).start(); })\n .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })\n .tween("zoom", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === "function" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit("start");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit("zoom");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit("end");\n }\n return this;\n },\n emit: function(type) {\n (0,on/* customEvent */._H)(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function wheeled() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = (0,mouse/* default */.Z)(this);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n (0,src/* interrupt */.e1)(this);\n g.start();\n }\n\n noevent();\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var g = gesture(this, arguments, true),\n v = (0,src_select/* default */.Z)(on/* event.view */.B.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),\n p = (0,mouse/* default */.Z)(this),\n x0 = on/* event.clientX */.B.clientX,\n y0 = on/* event.clientY */.B.clientY;\n\n (0,nodrag/* default */.Z)(on/* event.view */.B.view);\n nopropagation();\n g.mouse = [p, this.__zoom.invert(p)];\n (0,src/* interrupt */.e1)(this);\n g.start();\n\n function mousemoved() {\n noevent();\n if (!g.moved) {\n var dx = on/* event.clientX */.B.clientX - x0, dy = on/* event.clientY */.B.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = (0,mouse/* default */.Z)(g.that), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped() {\n v.on("mousemove.zoom mouseup.zoom", null);\n (0,nodrag/* yesdrag */.D)(on/* event.view */.B.view, g.moved);\n noevent();\n g.end();\n }\n }\n\n function dblclicked() {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = (0,mouse/* default */.Z)(this),\n p1 = t0.invert(p0),\n k1 = t0.k * (on/* event.shiftKey */.B.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n noevent();\n if (duration > 0) (0,src_select/* default */.Z)(this).transition().duration(duration).call(schedule, t1, p0);\n else (0,src_select/* default */.Z)(this).call(zoom.transform, t1);\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = on/* event.touches */.B.touches,\n n = touches.length,\n g = gesture(this, arguments, on/* event.changedTouches.length */.B.changedTouches.length === n),\n started, i, t, p;\n\n nopropagation();\n for (i = 0; i < n; ++i) {\n t = touches[i], p = (0,touch/* default */.Z)(this, touches, t.identifier);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n (0,src/* interrupt */.e1)(this);\n g.start();\n }\n }\n\n function touchmoved() {\n if (!this.__zooming) return;\n var g = gesture(this, arguments),\n touches = on/* event.changedTouches */.B.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent();\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n g.taps = 0;\n for (i = 0; i < n; ++i) {\n t = touches[i], p = (0,touch/* default */.Z)(this, touches, t.identifier);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended() {\n if (!this.__zooming) return;\n var g = gesture(this, arguments),\n touches = on/* event.changedTouches */.B.changedTouches,\n n = touches.length, i, t;\n\n nopropagation();\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n var p = (0,src_select/* default */.Z)(this).on("dblclick.zoom");\n if (p) p.apply(this, arguments);\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === "function" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n return zoom;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/index.js\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Z0JBQWdCLE9BQU87QUFDdkIsMEJBQTBCLHdCQUFLO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDZDQUFvQjtBQUN0Qzs7QUFFQSxJQUFJLGFBQWE7QUFDakI7QUFDQSwwQ0FBMEMscUJBQXFCO0FBQy9ELGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZCQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEVBQTBFLFFBQVE7QUFDbEY7O0FBRUE7QUFDQSxzRUFBc0UsUUFBUTtBQUM5RTs7QUFFQTtBQUNBLHlFQUF5RSxRQUFRO0FBQ2pGOztBQUVBO0FBQ0Esc0VBQXNFLFFBQVE7QUFDOUU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FDbGEwQztBQUN3QyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9jb25zdGFudC5qcz85MDk2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9ldmVudC5qcz9hYzcwIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanM/ZjE0ZCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvbm9ldmVudC5qcz81MzgyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy96b29tLmpzP2Y0MzkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2luZGV4LmpzP2MyMWQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBab29tRXZlbnQodGFyZ2V0LCB0eXBlLCB0cmFuc2Zvcm0pIHtcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIFRyYW5zZm9ybShrLCB4LCB5KSB7XG4gIHRoaXMuayA9IGs7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sXG4gIHNjYWxlOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmsgKiBrLCB0aGlzLngsIHRoaXMueSk7XG4gIH0sXG4gIHRyYW5zbGF0ZTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID09PSAwICYgeSA9PT0gMCA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuaywgdGhpcy54ICsgdGhpcy5rICogeCwgdGhpcy55ICsgdGhpcy5rICogeSk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTtcbiAgfSxcbiAgYXBwbHlYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggKiB0aGlzLmsgKyB0aGlzLng7XG4gIH0sXG4gIGFwcGx5WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5ICogdGhpcy5rICsgdGhpcy55O1xuICB9LFxuICBpbnZlcnQ6IGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTtcbiAgfSxcbiAgaW52ZXJ0WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMueCkgLyB0aGlzLms7XG4gIH0sXG4gIGludmVydFk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLnkpIC8gdGhpcy5rO1xuICB9LFxuICByZXNjYWxlWDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpO1xuICB9LFxuICByZXNjYWxlWTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5LmNvcHkoKS5kb21haW4oeS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksIHRoaXMpLm1hcCh5LmludmVydCwgeSkpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIikgc2NhbGUoXCIgKyB0aGlzLmsgKyBcIilcIjtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IG5ldyBUcmFuc2Zvcm0oMSwgMCwgMCk7XG5cbnRyYW5zZm9ybS5wcm90b3R5cGUgPSBUcmFuc2Zvcm0ucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSkge1xuICB3aGlsZSAoIW5vZGUuX196b29tKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuIGlkZW50aXR5O1xuICByZXR1cm4gbm9kZS5fX3pvb207XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZVpvb219IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtldmVudCwgY3VzdG9tRXZlbnQsIHNlbGVjdCwgbW91c2UsIHRvdWNofSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IFpvb21FdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuaW1wb3J0IHtUcmFuc2Zvcm0sIGlkZW50aXR5fSBmcm9tIFwiLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoKSB7XG4gIHJldHVybiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RXh0ZW50KCkge1xuICB2YXIgZSA9IHRoaXM7XG4gIGlmIChlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuICAgIGUgPSBlLm93bmVyU1ZHRWxlbWVudCB8fCBlO1xuICAgIGlmIChlLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICAgIGUgPSBlLnZpZXdCb3guYmFzZVZhbDtcbiAgICAgIHJldHVybiBbW2UueCwgZS55XSwgW2UueCArIGUud2lkdGgsIGUueSArIGUuaGVpZ2h0XV07XG4gICAgfVxuICAgIHJldHVybiBbWzAsIDBdLCBbZS53aWR0aC5iYXNlVmFsLnZhbHVlLCBlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtlLmNsaWVudFdpZHRoLCBlLmNsaWVudEhlaWdodF1dO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNmb3JtKCkge1xuICByZXR1cm4gdGhpcy5fX3pvb20gfHwgaWRlbnRpdHk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXaGVlbERlbHRhKCkge1xuICByZXR1cm4gLWV2ZW50LmRlbHRhWSAqIChldmVudC5kZWx0YU1vZGUgPT09IDEgPyAwLjA1IDogZXZlbnQuZGVsdGFNb2RlID8gMSA6IDAuMDAyKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnN0cmFpbih0cmFuc2Zvcm0sIGV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSB7XG4gIHZhciBkeDAgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMF1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzBdWzBdLFxuICAgICAgZHgxID0gdHJhbnNmb3JtLmludmVydFgoZXh0ZW50WzFdWzBdKSAtIHRyYW5zbGF0ZUV4dGVudFsxXVswXSxcbiAgICAgIGR5MCA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFswXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMV0sXG4gICAgICBkeTEgPSB0cmFuc2Zvcm0uaW52ZXJ0WShleHRlbnRbMV1bMV0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzFdO1xuICByZXR1cm4gdHJhbnNmb3JtLnRyYW5zbGF0ZShcbiAgICBkeDEgPiBkeDAgPyAoZHgwICsgZHgxKSAvIDIgOiBNYXRoLm1pbigwLCBkeDApIHx8IE1hdGgubWF4KDAsIGR4MSksXG4gICAgZHkxID4gZHkwID8gKGR5MCArIGR5MSkgLyAyIDogTWF0aC5taW4oMCwgZHkwKSB8fCBNYXRoLm1heCgwLCBkeTEpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGV4dGVudCA9IGRlZmF1bHRFeHRlbnQsXG4gICAgICBjb25zdHJhaW4gPSBkZWZhdWx0Q29uc3RyYWluLFxuICAgICAgd2hlZWxEZWx0YSA9IGRlZmF1bHRXaGVlbERlbHRhLFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIHNjYWxlRXh0ZW50ID0gWzAsIEluZmluaXR5XSxcbiAgICAgIHRyYW5zbGF0ZUV4dGVudCA9IFtbLUluZmluaXR5LCAtSW5maW5pdHldLCBbSW5maW5pdHksIEluZmluaXR5XV0sXG4gICAgICBkdXJhdGlvbiA9IDI1MCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVab29tLFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcInpvb21cIiwgXCJlbmRcIiksXG4gICAgICB0b3VjaHN0YXJ0aW5nLFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICB0b3VjaERlbGF5ID0gNTAwLFxuICAgICAgd2hlZWxEZWxheSA9IDE1MCxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMDtcblxuICBmdW5jdGlvbiB6b29tKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvblxuICAgICAgICAucHJvcGVydHkoXCJfX3pvb21cIiwgZGVmYXVsdFRyYW5zZm9ybSlcbiAgICAgICAgLm9uKFwid2hlZWwuem9vbVwiLCB3aGVlbGVkKVxuICAgICAgICAub24oXCJtb3VzZWRvd24uem9vbVwiLCBtb3VzZWRvd25lZClcbiAgICAgICAgLm9uKFwiZGJsY2xpY2suem9vbVwiLCBkYmxjbGlja2VkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuem9vbVwiLCB0b3VjaHN0YXJ0ZWQpXG4gICAgICAgIC5vbihcInRvdWNobW92ZS56b29tXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbVwiLCB0b3VjaGVuZGVkKVxuICAgICAgICAuc3R5bGUoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICB6b29tLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gY29sbGVjdGlvbi5zZWxlY3Rpb24gPyBjb2xsZWN0aW9uLnNlbGVjdGlvbigpIDogY29sbGVjdGlvbjtcbiAgICBzZWxlY3Rpb24ucHJvcGVydHkoXCJfX3pvb21cIiwgZGVmYXVsdFRyYW5zZm9ybSk7XG4gICAgaWYgKGNvbGxlY3Rpb24gIT09IHNlbGVjdGlvbikge1xuICAgICAgc2NoZWR1bGUoY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGlvbi5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIC5zdGFydCgpXG4gICAgICAgICAgICAuem9vbShudWxsLCB0eXBlb2YgdHJhbnNmb3JtID09PSBcImZ1bmN0aW9uXCIgPyB0cmFuc2Zvcm0uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRyYW5zZm9ybSlcbiAgICAgICAgICAgIC5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB6b29tLnNjYWxlQnkgPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHApIHtcbiAgICB6b29tLnNjYWxlVG8oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrMCA9IHRoaXMuX196b29tLmssXG4gICAgICAgICAgazEgPSB0eXBlb2YgayA9PT0gXCJmdW5jdGlvblwiID8gay5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogaztcbiAgICAgIHJldHVybiBrMCAqIGsxO1xuICAgIH0sIHApO1xuICB9O1xuXG4gIHpvb20uc2NhbGVUbyA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgaywgcCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSA9IGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgIHQwID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwLFxuICAgICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgICBrMSA9IHR5cGVvZiBrID09PSBcImZ1bmN0aW9uXCIgPyBrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodDAsIGsxKSwgcDAsIHAxKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwKTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUJ5ID0gZnVuY3Rpb24oc2VsZWN0aW9uLCB4LCB5KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjb25zdHJhaW4odGhpcy5fX3pvb20udHJhbnNsYXRlKFxuICAgICAgICB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogeCxcbiAgICAgICAgdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IHkuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHlcbiAgICAgICksIGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0cmFuc2xhdGVFeHRlbnQpO1xuICAgIH0pO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIHgsIHksIHApIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbihpZGVudGl0eS50cmFuc2xhdGUocDBbMF0sIHAwWzFdKS5zY2FsZSh0LmspLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IC14LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteCxcbiAgICAgICAgdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IC15LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteVxuICAgICAgKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwKTtcbiAgfTtcblxuICBmdW5jdGlvbiBzY2FsZSh0cmFuc2Zvcm0sIGspIHtcbiAgICBrID0gTWF0aC5tYXgoc2NhbGVFeHRlbnRbMF0sIE1hdGgubWluKHNjYWxlRXh0ZW50WzFdLCBrKSk7XG4gICAgcmV0dXJuIGsgPT09IHRyYW5zZm9ybS5rID8gdHJhbnNmb3JtIDogbmV3IFRyYW5zZm9ybShrLCB0cmFuc2Zvcm0ueCwgdHJhbnNmb3JtLnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHRyYW5zZm9ybSwgcDAsIHAxKSB7XG4gICAgdmFyIHggPSBwMFswXSAtIHAxWzBdICogdHJhbnNmb3JtLmssIHkgPSBwMFsxXSAtIHAxWzFdICogdHJhbnNmb3JtLms7XG4gICAgcmV0dXJuIHggPT09IHRyYW5zZm9ybS54ICYmIHkgPT09IHRyYW5zZm9ybS55ID8gdHJhbnNmb3JtIDogbmV3IFRyYW5zZm9ybSh0cmFuc2Zvcm0uaywgeCwgeSk7XG4gIH1cblxuICBmdW5jdGlvbiBjZW50cm9pZChleHRlbnQpIHtcbiAgICByZXR1cm4gWygrZXh0ZW50WzBdWzBdICsgK2V4dGVudFsxXVswXSkgLyAyLCAoK2V4dGVudFswXVsxXSArICtleHRlbnRbMV1bMV0pIC8gMl07XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZSh0cmFuc2l0aW9uLCB0cmFuc2Zvcm0sIHBvaW50KSB7XG4gICAgdHJhbnNpdGlvblxuICAgICAgICAub24oXCJzdGFydC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuc3RhcnQoKTsgfSlcbiAgICAgICAgLm9uKFwiaW50ZXJydXB0Lnpvb20gZW5kLnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5lbmQoKTsgfSlcbiAgICAgICAgLnR3ZWVuKFwiem9vbVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgIGcgPSBnZXN0dXJlKHRoYXQsIGFyZ3MpLFxuICAgICAgICAgICAgICBlID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpLFxuICAgICAgICAgICAgICBwID0gcG9pbnQgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHBvaW50ID09PSBcImZ1bmN0aW9uXCIgPyBwb2ludC5hcHBseSh0aGF0LCBhcmdzKSA6IHBvaW50LFxuICAgICAgICAgICAgICB3ID0gTWF0aC5tYXgoZVsxXVswXSAtIGVbMF1bMF0sIGVbMV1bMV0gLSBlWzBdWzFdKSxcbiAgICAgICAgICAgICAgYSA9IHRoYXQuX196b29tLFxuICAgICAgICAgICAgICBiID0gdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoYXQsIGFyZ3MpIDogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoYS5pbnZlcnQocCkuY29uY2F0KHcgLyBhLmspLCBiLmludmVydChwKS5jb25jYXQodyAvIGIuaykpO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodCA9PT0gMSkgdCA9IGI7IC8vIEF2b2lkIHJvdW5kaW5nIGVycm9yIG9uIGVuZC5cbiAgICAgICAgICAgIGVsc2UgeyB2YXIgbCA9IGkodCksIGsgPSB3IC8gbFsyXTsgdCA9IG5ldyBUcmFuc2Zvcm0oaywgcFswXSAtIGxbMF0gKiBrLCBwWzFdIC0gbFsxXSAqIGspOyB9XG4gICAgICAgICAgICBnLnpvb20obnVsbCwgdCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXN0dXJlKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgcmV0dXJuICghY2xlYW4gJiYgdGhhdC5fX3pvb21pbmcpIHx8IG5ldyBHZXN0dXJlKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gR2VzdHVyZSh0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB0aGlzLnRhcHMgPSAwO1xuICB9XG5cbiAgR2VzdHVyZS5wcm90b3R5cGUgPSB7XG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHtcbiAgICAgICAgdGhpcy50aGF0Ll9fem9vbWluZyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB6b29tOiBmdW5jdGlvbihrZXksIHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHRoaXMubW91c2UgJiYga2V5ICE9PSBcIm1vdXNlXCIpIHRoaXMubW91c2VbMV0gPSB0cmFuc2Zvcm0uaW52ZXJ0KHRoaXMubW91c2VbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gwICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMFsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDBbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gxICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDFbMF0pO1xuICAgICAgdGhpcy50aGF0Ll9fem9vbSA9IHRyYW5zZm9ybTtcbiAgICAgIHRoaXMuZW1pdChcInpvb21cIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZztcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgWm9vbUV2ZW50KHpvb20sIHR5cGUsIHRoaXMudGhhdC5fX3pvb20pLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHdoZWVsZWQoKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIHQuayAqIE1hdGgucG93KDIsIHdoZWVsRGVsdGEuYXBwbHkodGhpcywgYXJndW1lbnRzKSkpKSxcbiAgICAgICAgcCA9IG1vdXNlKHRoaXMpO1xuXG4gICAgLy8gSWYgdGhlIG1vdXNlIGlzIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIGJlZm9yZSwgcmV1c2UgaXQuXG4gICAgLy8gSWYgdGhlcmUgd2VyZSByZWNlbnQgd2hlZWwgZXZlbnRzLCByZXNldCB0aGUgd2hlZWwgaWRsZSB0aW1lb3V0LlxuICAgIGlmIChnLndoZWVsKSB7XG4gICAgICBpZiAoZy5tb3VzZVswXVswXSAhPT0gcFswXSB8fCBnLm1vdXNlWzBdWzFdICE9PSBwWzFdKSB7XG4gICAgICAgIGcubW91c2VbMV0gPSB0LmludmVydChnLm1vdXNlWzBdID0gcCk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQoZy53aGVlbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyB3aGVlbCBldmVudCB3b27igJl0IHRyaWdnZXIgYSB0cmFuc2Zvcm0gY2hhbmdlLCBpZ25vcmUgaXQuXG4gICAgZWxzZSBpZiAodC5rID09PSBrKSByZXR1cm47XG5cbiAgICAvLyBPdGhlcndpc2UsIGNhcHR1cmUgdGhlIG1vdXNlIHBvaW50IGFuZCBsb2NhdGlvbiBhdCB0aGUgc3RhcnQuXG4gICAgZWxzZSB7XG4gICAgICBnLm1vdXNlID0gW3AsIHQuaW52ZXJ0KHApXTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBub2V2ZW50KCk7XG4gICAgZy53aGVlbCA9IHNldFRpbWVvdXQod2hlZWxpZGxlZCwgd2hlZWxEZWxheSk7XG4gICAgZy56b29tKFwibW91c2VcIiwgY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0LCBrKSwgZy5tb3VzZVswXSwgZy5tb3VzZVsxXSksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcblxuICAgIGZ1bmN0aW9uIHdoZWVsaWRsZWQoKSB7XG4gICAgICBnLndoZWVsID0gbnVsbDtcbiAgICAgIGcuZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Vkb3duZWQoKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMsIHRydWUpLFxuICAgICAgICB2ID0gc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLnpvb21cIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLnpvb21cIiwgbW91c2V1cHBlZCwgdHJ1ZSksXG4gICAgICAgIHAgPSBtb3VzZSh0aGlzKSxcbiAgICAgICAgeDAgPSBldmVudC5jbGllbnRYLFxuICAgICAgICB5MCA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBkcmFnRGlzYWJsZShldmVudC52aWV3KTtcbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgZy5tb3VzZSA9IFtwLCB0aGlzLl9fem9vbS5pbnZlcnQocCldO1xuICAgIGludGVycnVwdCh0aGlzKTtcbiAgICBnLnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKCkge1xuICAgICAgbm9ldmVudCgpO1xuICAgICAgaWYgKCFnLm1vdmVkKSB7XG4gICAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSB4MCwgZHkgPSBldmVudC5jbGllbnRZIC0geTA7XG4gICAgICAgIGcubW92ZWQgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgICAgfVxuICAgICAgZy56b29tKFwibW91c2VcIiwgY29uc3RyYWluKHRyYW5zbGF0ZShnLnRoYXQuX196b29tLCBnLm1vdXNlWzBdID0gbW91c2UoZy50aGF0KSwgZy5tb3VzZVsxXSksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VzZXVwcGVkKCkge1xuICAgICAgdi5vbihcIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbVwiLCBudWxsKTtcbiAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgZy5tb3ZlZCk7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBnLmVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRibGNsaWNrZWQoKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0MCA9IHRoaXMuX196b29tLFxuICAgICAgICBwMCA9IG1vdXNlKHRoaXMpLFxuICAgICAgICBwMSA9IHQwLmludmVydChwMCksXG4gICAgICAgIGsxID0gdDAuayAqIChldmVudC5zaGlmdEtleSA/IDAuNSA6IDIpLFxuICAgICAgICB0MSA9IGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodDAsIGsxKSwgcDAsIHAxKSwgZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRyYW5zbGF0ZUV4dGVudCk7XG5cbiAgICBub2V2ZW50KCk7XG4gICAgaWYgKGR1cmF0aW9uID4gMCkgc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkdXJhdGlvbikuY2FsbChzY2hlZHVsZSwgdDEsIHAwKTtcbiAgICBlbHNlIHNlbGVjdCh0aGlzKS5jYWxsKHpvb20udHJhbnNmb3JtLCB0MSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaHN0YXJ0ZWQoKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQudG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLFxuICAgICAgICBnID0gZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMsIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA9PT0gbiksXG4gICAgICAgIHN0YXJ0ZWQsIGksIHQsIHA7XG5cbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdCA9IHRvdWNoZXNbaV0sIHAgPSB0b3VjaCh0aGlzLCB0b3VjaGVzLCB0LmlkZW50aWZpZXIpO1xuICAgICAgcCA9IFtwLCB0aGlzLl9fem9vbS5pbnZlcnQocCksIHQuaWRlbnRpZmllcl07XG4gICAgICBpZiAoIWcudG91Y2gwKSBnLnRvdWNoMCA9IHAsIHN0YXJ0ZWQgPSB0cnVlLCBnLnRhcHMgPSAxICsgISF0b3VjaHN0YXJ0aW5nO1xuICAgICAgZWxzZSBpZiAoIWcudG91Y2gxICYmIGcudG91Y2gwWzJdICE9PSBwWzJdKSBnLnRvdWNoMSA9IHAsIGcudGFwcyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRvdWNoc3RhcnRpbmcpIHRvdWNoc3RhcnRpbmcgPSBjbGVhclRpbWVvdXQodG91Y2hzdGFydGluZyk7XG5cbiAgICBpZiAoc3RhcnRlZCkge1xuICAgICAgaWYgKGcudGFwcyA8IDIpIHRvdWNoc3RhcnRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaHN0YXJ0aW5nID0gbnVsbDsgfSwgdG91Y2hEZWxheSk7XG4gICAgICBpbnRlcnJ1cHQodGhpcyk7XG4gICAgICBnLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZCgpIHtcbiAgICBpZiAoIXRoaXMuX196b29taW5nKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0LCBwLCBsO1xuXG4gICAgbm9ldmVudCgpO1xuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuICAgIGcudGFwcyA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdCA9IHRvdWNoZXNbaV0sIHAgPSB0b3VjaCh0aGlzLCB0b3VjaGVzLCB0LmlkZW50aWZpZXIpO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gwWzBdID0gcDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gxWzBdID0gcDtcbiAgICB9XG4gICAgdCA9IGcudGhhdC5fX3pvb207XG4gICAgaWYgKGcudG91Y2gxKSB7XG4gICAgICB2YXIgcDAgPSBnLnRvdWNoMFswXSwgbDAgPSBnLnRvdWNoMFsxXSxcbiAgICAgICAgICBwMSA9IGcudG91Y2gxWzBdLCBsMSA9IGcudG91Y2gxWzFdLFxuICAgICAgICAgIGRwID0gKGRwID0gcDFbMF0gLSBwMFswXSkgKiBkcCArIChkcCA9IHAxWzFdIC0gcDBbMV0pICogZHAsXG4gICAgICAgICAgZGwgPSAoZGwgPSBsMVswXSAtIGwwWzBdKSAqIGRsICsgKGRsID0gbDFbMV0gLSBsMFsxXSkgKiBkbDtcbiAgICAgIHQgPSBzY2FsZSh0LCBNYXRoLnNxcnQoZHAgLyBkbCkpO1xuICAgICAgcCA9IFsocDBbMF0gKyBwMVswXSkgLyAyLCAocDBbMV0gKyBwMVsxXSkgLyAyXTtcbiAgICAgIGwgPSBbKGwwWzBdICsgbDFbMF0pIC8gMiwgKGwwWzFdICsgbDFbMV0pIC8gMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGcudG91Y2gwKSBwID0gZy50b3VjaDBbMF0sIGwgPSBnLnRvdWNoMFsxXTtcbiAgICBlbHNlIHJldHVybjtcbiAgICBnLnpvb20oXCJ0b3VjaFwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHQsIHAsIGwpLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKCkge1xuICAgIGlmICghdGhpcy5fX3pvb21pbmcpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIHQ7XG5cbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDE7XG4gICAgfVxuICAgIGlmIChnLnRvdWNoMSAmJiAhZy50b3VjaDApIGcudG91Y2gwID0gZy50b3VjaDEsIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICBpZiAoZy50b3VjaDApIGcudG91Y2gwWzFdID0gdGhpcy5fX3pvb20uaW52ZXJ0KGcudG91Y2gwWzBdKTtcbiAgICBlbHNlIHtcbiAgICAgIGcuZW5kKCk7XG4gICAgICAvLyBJZiB0aGlzIHdhcyBhIGRibHRhcCwgcmVyb3V0ZSB0byB0aGUgKG9wdGlvbmFsKSBkYmxjbGljay56b29tIGhhbmRsZXIuXG4gICAgICBpZiAoZy50YXBzID09PSAyKSB7XG4gICAgICAgIHZhciBwID0gc2VsZWN0KHRoaXMpLm9uKFwiZGJsY2xpY2suem9vbVwiKTtcbiAgICAgICAgaWYgKHApIHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB6b29tLndoZWVsRGVsdGEgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAod2hlZWxEZWx0YSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCB6b29tKSA6IHdoZWVsRGVsdGE7XG4gIH07XG5cbiAgem9vbS5maWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZmlsdGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCB6b29tKSA6IGZpbHRlcjtcbiAgfTtcblxuICB6b29tLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIHpvb20pIDogdG91Y2hhYmxlO1xuICB9O1xuXG4gIHpvb20uZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCB6b29tKSA6IGV4dGVudDtcbiAgfTtcblxuICB6b29tLnNjYWxlRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlRXh0ZW50WzBdID0gK19bMF0sIHNjYWxlRXh0ZW50WzFdID0gK19bMV0sIHpvb20pIDogW3NjYWxlRXh0ZW50WzBdLCBzY2FsZUV4dGVudFsxXV07XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodHJhbnNsYXRlRXh0ZW50WzBdWzBdID0gK19bMF1bMF0sIHRyYW5zbGF0ZUV4dGVudFsxXVswXSA9ICtfWzFdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMF1bMV0gPSArX1swXVsxXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzFdID0gK19bMV1bMV0sIHpvb20pIDogW1t0cmFuc2xhdGVFeHRlbnRbMF1bMF0sIHRyYW5zbGF0ZUV4dGVudFswXVsxXV0sIFt0cmFuc2xhdGVFeHRlbnRbMV1bMF0sIHRyYW5zbGF0ZUV4dGVudFsxXVsxXV1dO1xuICB9O1xuXG4gIHpvb20uY29uc3RyYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnN0cmFpbiA9IF8sIHpvb20pIDogY29uc3RyYWluO1xuICB9O1xuXG4gIHpvb20uZHVyYXRpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHVyYXRpb24gPSArXywgem9vbSkgOiBkdXJhdGlvbjtcbiAgfTtcblxuICB6b29tLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgem9vbSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICB6b29tLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IHpvb20gOiB2YWx1ZTtcbiAgfTtcblxuICB6b29tLmNsaWNrRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xpY2tEaXN0YW5jZTIgPSAoXyA9ICtfKSAqIF8sIHpvb20pIDogTWF0aC5zcXJ0KGNsaWNrRGlzdGFuY2UyKTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyB6b29tfSBmcm9tIFwiLi96b29tLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgem9vbVRyYW5zZm9ybSwgaWRlbnRpdHkgYXMgem9vbUlkZW50aXR5fSBmcm9tIFwiLi90cmFuc2Zvcm0uanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///52540\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.d3.ead11486fa646b83.bundle.js b/assets/demo/site/npm.d3.ead11486fa646b83.bundle.js
new file mode 100644
index 00000000..511410a4
--- /dev/null
+++ b/assets/demo/site/npm.d3.ead11486fa646b83.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[3449],{37790:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "FormatSpecifier": () => (/* reexport */ d3_format_src/* FormatSpecifier */.vr),\n "active": () => (/* reexport */ d3_transition_src/* active */.bB),\n "arc": () => (/* reexport */ d3_shape_src/* arc */.Nb),\n "area": () => (/* reexport */ d3_shape_src/* area */.SO),\n "areaRadial": () => (/* reexport */ d3_shape_src/* areaRadial */.am),\n "ascending": () => (/* reexport */ src/* ascending */.j2),\n "autoType": () => (/* reexport */ d3_dsv_src/* autoType */.rA),\n "axisBottom": () => (/* reexport */ d3_axis_src/* axisBottom */.LL),\n "axisLeft": () => (/* reexport */ d3_axis_src/* axisLeft */.y4),\n "axisRight": () => (/* reexport */ d3_axis_src/* axisRight */.Kh),\n "axisTop": () => (/* reexport */ d3_axis_src/* axisTop */.F5),\n "bisect": () => (/* reexport */ src/* bisect */.b4),\n "bisectLeft": () => (/* reexport */ src/* bisectLeft */.Nw),\n "bisectRight": () => (/* reexport */ src/* bisectRight */.ml),\n "bisector": () => (/* reexport */ src/* bisector */.YF),\n "blob": () => (/* reexport */ d3_fetch_src/* blob */.Ik),\n "brush": () => (/* reexport */ d3_brush_src/* brush */.Dm),\n "brushSelection": () => (/* reexport */ d3_brush_src/* brushSelection */.mN),\n "brushX": () => (/* reexport */ d3_brush_src/* brushX */.Yu),\n "brushY": () => (/* reexport */ d3_brush_src/* brushY */.L),\n "buffer": () => (/* reexport */ d3_fetch_src/* buffer */.f3),\n "chord": () => (/* reexport */ d3_chord_src/* chord */.f),\n "clientPoint": () => (/* reexport */ d3_selection_src/* clientPoint */.Eb),\n "cluster": () => (/* reexport */ d3_hierarchy_src/* cluster */.ki),\n "color": () => (/* reexport */ d3_color_src/* color */.$_),\n "contourDensity": () => (/* reexport */ d3_contour_src/* contourDensity */._),\n "contours": () => (/* reexport */ d3_contour_src/* contours */.V),\n "create": () => (/* reexport */ d3_selection_src/* create */.Ue),\n "creator": () => (/* reexport */ d3_selection_src/* creator */.Du),\n "cross": () => (/* reexport */ src/* cross */.kC),\n "csv": () => (/* reexport */ d3_fetch_src/* csv */.gy),\n "csvFormat": () => (/* reexport */ d3_dsv_src/* csvFormat */.Sf),\n "csvFormatBody": () => (/* reexport */ d3_dsv_src/* csvFormatBody */.S),\n "csvFormatRow": () => (/* reexport */ d3_dsv_src/* csvFormatRow */.fh),\n "csvFormatRows": () => (/* reexport */ d3_dsv_src/* csvFormatRows */.Jb),\n "csvFormatValue": () => (/* reexport */ d3_dsv_src/* csvFormatValue */.eX),\n "csvParse": () => (/* reexport */ d3_dsv_src/* csvParse */.ue),\n "csvParseRows": () => (/* reexport */ d3_dsv_src/* csvParseRows */.Bj),\n "cubehelix": () => (/* reexport */ d3_color_src/* cubehelix */.K),\n "curveBasis": () => (/* reexport */ d3_shape_src/* curveBasis */.$0),\n "curveBasisClosed": () => (/* reexport */ d3_shape_src/* curveBasisClosed */.Dt),\n "curveBasisOpen": () => (/* reexport */ d3_shape_src/* curveBasisOpen */.WQ),\n "curveBundle": () => (/* reexport */ d3_shape_src/* curveBundle */.tF),\n "curveCardinal": () => (/* reexport */ d3_shape_src/* curveCardinal */.YY),\n "curveCardinalClosed": () => (/* reexport */ d3_shape_src/* curveCardinalClosed */.Ov),\n "curveCardinalOpen": () => (/* reexport */ d3_shape_src/* curveCardinalOpen */.dC),\n "curveCatmullRom": () => (/* reexport */ d3_shape_src/* curveCatmullRom */.zg),\n "curveCatmullRomClosed": () => (/* reexport */ d3_shape_src/* curveCatmullRomClosed */.fG),\n "curveCatmullRomOpen": () => (/* reexport */ d3_shape_src/* curveCatmullRomOpen */.$m),\n "curveLinear": () => (/* reexport */ d3_shape_src/* curveLinear */.c_),\n "curveLinearClosed": () => (/* reexport */ d3_shape_src/* curveLinearClosed */.fx),\n "curveMonotoneX": () => (/* reexport */ d3_shape_src/* curveMonotoneX */.Fd),\n "curveMonotoneY": () => (/* reexport */ d3_shape_src/* curveMonotoneY */.ak),\n "curveNatural": () => (/* reexport */ d3_shape_src/* curveNatural */.Sx),\n "curveStep": () => (/* reexport */ d3_shape_src/* curveStep */.eA),\n "curveStepAfter": () => (/* reexport */ d3_shape_src/* curveStepAfter */.js),\n "curveStepBefore": () => (/* reexport */ d3_shape_src/* curveStepBefore */.iJ),\n "customEvent": () => (/* reexport */ d3_selection_src/* customEvent */._H),\n "descending": () => (/* reexport */ src/* descending */.$1),\n "deviation": () => (/* reexport */ src/* deviation */.P3),\n "dispatch": () => (/* reexport */ d3_dispatch_src/* dispatch */.W),\n "drag": () => (/* reexport */ d3_drag_src/* drag */.oh),\n "dragDisable": () => (/* reexport */ d3_drag_src/* dragDisable */.Kn),\n "dragEnable": () => (/* reexport */ d3_drag_src/* dragEnable */.eF),\n "dsv": () => (/* reexport */ d3_fetch_src/* dsv */.Ds),\n "dsvFormat": () => (/* reexport */ d3_dsv_src/* dsvFormat */.yv),\n "easeBack": () => (/* reexport */ d3_ease_src/* easeBack */.bW),\n "easeBackIn": () => (/* reexport */ d3_ease_src/* easeBackIn */.gp),\n "easeBackInOut": () => (/* reexport */ d3_ease_src/* easeBackInOut */.gI),\n "easeBackOut": () => (/* reexport */ d3_ease_src/* easeBackOut */.ZN),\n "easeBounce": () => (/* reexport */ d3_ease_src/* easeBounce */.sf),\n "easeBounceIn": () => (/* reexport */ d3_ease_src/* easeBounceIn */.RK),\n "easeBounceInOut": () => (/* reexport */ d3_ease_src/* easeBounceInOut */.hE),\n "easeBounceOut": () => (/* reexport */ d3_ease_src/* easeBounceOut */.qj),\n "easeCircle": () => (/* reexport */ d3_ease_src/* easeCircle */.Xe),\n "easeCircleIn": () => (/* reexport */ d3_ease_src/* easeCircleIn */.kO),\n "easeCircleInOut": () => (/* reexport */ d3_ease_src/* easeCircleInOut */.sq),\n "easeCircleOut": () => (/* reexport */ d3_ease_src/* easeCircleOut */.te),\n "easeCubic": () => (/* reexport */ d3_ease_src/* easeCubic */.LU),\n "easeCubicIn": () => (/* reexport */ d3_ease_src/* easeCubicIn */.HU),\n "easeCubicInOut": () => (/* reexport */ d3_ease_src/* easeCubicInOut */.cC),\n "easeCubicOut": () => (/* reexport */ d3_ease_src/* easeCubicOut */.oS),\n "easeElastic": () => (/* reexport */ d3_ease_src/* easeElastic */.Az),\n "easeElasticIn": () => (/* reexport */ d3_ease_src/* easeElasticIn */.aM),\n "easeElasticInOut": () => (/* reexport */ d3_ease_src/* easeElasticInOut */.H1),\n "easeElasticOut": () => (/* reexport */ d3_ease_src/* easeElasticOut */.Px),\n "easeExp": () => (/* reexport */ d3_ease_src/* easeExp */.Ll),\n "easeExpIn": () => (/* reexport */ d3_ease_src/* easeExpIn */.uY),\n "easeExpInOut": () => (/* reexport */ d3_ease_src/* easeExpInOut */.nm),\n "easeExpOut": () => (/* reexport */ d3_ease_src/* easeExpOut */.mf),\n "easeLinear": () => (/* reexport */ d3_ease_src/* easeLinear */.Ny),\n "easePoly": () => (/* reexport */ d3_ease_src/* easePoly */.m2),\n "easePolyIn": () => (/* reexport */ d3_ease_src/* easePolyIn */.Tf),\n "easePolyInOut": () => (/* reexport */ d3_ease_src/* easePolyInOut */.z5),\n "easePolyOut": () => (/* reexport */ d3_ease_src/* easePolyOut */.Ct),\n "easeQuad": () => (/* reexport */ d3_ease_src/* easeQuad */.uw),\n "easeQuadIn": () => (/* reexport */ d3_ease_src/* easeQuadIn */.V_),\n "easeQuadInOut": () => (/* reexport */ d3_ease_src/* easeQuadInOut */.Tu),\n "easeQuadOut": () => (/* reexport */ d3_ease_src/* easeQuadOut */.mm),\n "easeSin": () => (/* reexport */ d3_ease_src/* easeSin */.Tl),\n "easeSinIn": () => (/* reexport */ d3_ease_src/* easeSinIn */.tl),\n "easeSinInOut": () => (/* reexport */ d3_ease_src/* easeSinInOut */.v),\n "easeSinOut": () => (/* reexport */ d3_ease_src/* easeSinOut */.p4),\n "entries": () => (/* reexport */ d3_collection_src/* entries */.qh),\n "event": () => (/* reexport */ d3_selection_src/* event */.B),\n "extent": () => (/* reexport */ src/* extent */.We),\n "forceCenter": () => (/* reexport */ d3_force_src/* forceCenter */.wq),\n "forceCollide": () => (/* reexport */ d3_force_src/* forceCollide */.Hh),\n "forceLink": () => (/* reexport */ d3_force_src/* forceLink */.Fs),\n "forceManyBody": () => (/* reexport */ d3_force_src/* forceManyBody */.q5),\n "forceRadial": () => (/* reexport */ d3_force_src/* forceRadial */.DX),\n "forceSimulation": () => (/* reexport */ d3_force_src/* forceSimulation */.A4),\n "forceX": () => (/* reexport */ d3_force_src/* forceX */.RU),\n "forceY": () => (/* reexport */ d3_force_src/* forceY */.Mr),\n "format": () => (/* reexport */ d3_format_src/* format */.WU),\n "formatDefaultLocale": () => (/* reexport */ d3_format_src/* formatDefaultLocale */.Zq),\n "formatLocale": () => (/* reexport */ d3_format_src/* formatLocale */.FF),\n "formatPrefix": () => (/* reexport */ d3_format_src/* formatPrefix */.jH),\n "formatSpecifier": () => (/* reexport */ d3_format_src/* formatSpecifier */.YQ),\n "geoAlbers": () => (/* reexport */ d3_geo_src/* geoAlbers */.FW),\n "geoAlbersUsa": () => (/* reexport */ d3_geo_src/* geoAlbersUsa */.wk),\n "geoArea": () => (/* reexport */ d3_geo_src/* geoArea */.ID),\n "geoAzimuthalEqualArea": () => (/* reexport */ d3_geo_src/* geoAzimuthalEqualArea */.Rf),\n "geoAzimuthalEqualAreaRaw": () => (/* reexport */ d3_geo_src/* geoAzimuthalEqualAreaRaw */.fN),\n "geoAzimuthalEquidistant": () => (/* reexport */ d3_geo_src/* geoAzimuthalEquidistant */.aM),\n "geoAzimuthalEquidistantRaw": () => (/* reexport */ d3_geo_src/* geoAzimuthalEquidistantRaw */.dz),\n "geoBounds": () => (/* reexport */ d3_geo_src/* geoBounds */.qT),\n "geoCentroid": () => (/* reexport */ d3_geo_src/* geoCentroid */.cS),\n "geoCircle": () => (/* reexport */ d3_geo_src/* geoCircle */.ub),\n "geoClipAntimeridian": () => (/* reexport */ d3_geo_src/* geoClipAntimeridian */.o6),\n "geoClipCircle": () => (/* reexport */ d3_geo_src/* geoClipCircle */.Fh),\n "geoClipExtent": () => (/* reexport */ d3_geo_src/* geoClipExtent */.iM),\n "geoClipRectangle": () => (/* reexport */ d3_geo_src/* geoClipRectangle */.LF),\n "geoConicConformal": () => (/* reexport */ d3_geo_src/* geoConicConformal */.tJ),\n "geoConicConformalRaw": () => (/* reexport */ d3_geo_src/* geoConicConformalRaw */.W$),\n "geoConicEqualArea": () => (/* reexport */ d3_geo_src/* geoConicEqualArea */.ET),\n "geoConicEqualAreaRaw": () => (/* reexport */ d3_geo_src/* geoConicEqualAreaRaw */.SQ),\n "geoConicEquidistant": () => (/* reexport */ d3_geo_src/* geoConicEquidistant */.ah),\n "geoConicEquidistantRaw": () => (/* reexport */ d3_geo_src/* geoConicEquidistantRaw */.nh),\n "geoContains": () => (/* reexport */ d3_geo_src/* geoContains */.xk),\n "geoDistance": () => (/* reexport */ d3_geo_src/* geoDistance */.gD),\n "geoEqualEarth": () => (/* reexport */ d3_geo_src/* geoEqualEarth */.bf),\n "geoEqualEarthRaw": () => (/* reexport */ d3_geo_src/* geoEqualEarthRaw */.bw),\n "geoEquirectangular": () => (/* reexport */ d3_geo_src/* geoEquirectangular */.ES),\n "geoEquirectangularRaw": () => (/* reexport */ d3_geo_src/* geoEquirectangularRaw */.Hw),\n "geoGnomonic": () => (/* reexport */ d3_geo_src/* geoGnomonic */.Bq),\n "geoGnomonicRaw": () => (/* reexport */ d3_geo_src/* geoGnomonicRaw */.ot),\n "geoGraticule": () => (/* reexport */ d3_geo_src/* geoGraticule */.S),\n "geoGraticule10": () => (/* reexport */ d3_geo_src/* geoGraticule10 */.HV),\n "geoIdentity": () => (/* reexport */ d3_geo_src/* geoIdentity */.NL),\n "geoInterpolate": () => (/* reexport */ d3_geo_src/* geoInterpolate */.iG),\n "geoLength": () => (/* reexport */ d3_geo_src/* geoLength */.Jp),\n "geoMercator": () => (/* reexport */ d3_geo_src/* geoMercator */.mw),\n "geoMercatorRaw": () => (/* reexport */ d3_geo_src/* geoMercatorRaw */.z),\n "geoNaturalEarth1": () => (/* reexport */ d3_geo_src/* geoNaturalEarth1 */.li),\n "geoNaturalEarth1Raw": () => (/* reexport */ d3_geo_src/* geoNaturalEarth1Raw */.Bh),\n "geoOrthographic": () => (/* reexport */ d3_geo_src/* geoOrthographic */.Wv),\n "geoOrthographicRaw": () => (/* reexport */ d3_geo_src/* geoOrthographicRaw */.jx),\n "geoPath": () => (/* reexport */ d3_geo_src/* geoPath */.l4),\n "geoProjection": () => (/* reexport */ d3_geo_src/* geoProjection */.OA),\n "geoProjectionMutator": () => (/* reexport */ d3_geo_src/* geoProjectionMutator */.gv),\n "geoRotation": () => (/* reexport */ d3_geo_src/* geoRotation */.w7),\n "geoStereographic": () => (/* reexport */ d3_geo_src/* geoStereographic */.kn),\n "geoStereographicRaw": () => (/* reexport */ d3_geo_src/* geoStereographicRaw */.PA),\n "geoStream": () => (/* reexport */ d3_geo_src/* geoStream */.HZ),\n "geoTransform": () => (/* reexport */ d3_geo_src/* geoTransform */.jD),\n "geoTransverseMercator": () => (/* reexport */ d3_geo_src/* geoTransverseMercator */.Il),\n "geoTransverseMercatorRaw": () => (/* reexport */ d3_geo_src/* geoTransverseMercatorRaw */.GN),\n "gray": () => (/* reexport */ d3_color_src/* gray */.MA),\n "hcl": () => (/* reexport */ d3_color_src/* hcl */.Uc),\n "hierarchy": () => (/* reexport */ d3_hierarchy_src/* hierarchy */.bT),\n "histogram": () => (/* reexport */ src/* histogram */.KX),\n "hsl": () => (/* reexport */ d3_color_src/* hsl */.Ym),\n "html": () => (/* reexport */ d3_fetch_src/* html */.dy),\n "image": () => (/* reexport */ d3_fetch_src/* image */.BH),\n "interpolate": () => (/* reexport */ d3_interpolate_src/* interpolate */.sX),\n "interpolateArray": () => (/* reexport */ d3_interpolate_src/* interpolateArray */.Ck),\n "interpolateBasis": () => (/* reexport */ d3_interpolate_src/* interpolateBasis */.nH),\n "interpolateBasisClosed": () => (/* reexport */ d3_interpolate_src/* interpolateBasisClosed */.FO),\n "interpolateBlues": () => (/* reexport */ d3_scale_chromatic_src/* interpolateBlues */.sY),\n "interpolateBrBG": () => (/* reexport */ d3_scale_chromatic_src/* interpolateBrBG */.yl),\n "interpolateBuGn": () => (/* reexport */ d3_scale_chromatic_src/* interpolateBuGn */.pl),\n "interpolateBuPu": () => (/* reexport */ d3_scale_chromatic_src/* interpolateBuPu */.hb),\n "interpolateCividis": () => (/* reexport */ d3_scale_chromatic_src/* interpolateCividis */.r1),\n "interpolateCool": () => (/* reexport */ d3_scale_chromatic_src/* interpolateCool */.vc),\n "interpolateCubehelix": () => (/* reexport */ d3_interpolate_src/* interpolateCubehelix */.Ji),\n "interpolateCubehelixDefault": () => (/* reexport */ d3_scale_chromatic_src/* interpolateCubehelixDefault */.yB),\n "interpolateCubehelixLong": () => (/* reexport */ d3_interpolate_src/* interpolateCubehelixLong */.tR),\n "interpolateDate": () => (/* reexport */ d3_interpolate_src/* interpolateDate */.NW),\n "interpolateDiscrete": () => (/* reexport */ d3_interpolate_src/* interpolateDiscrete */.Tp),\n "interpolateGnBu": () => (/* reexport */ d3_scale_chromatic_src/* interpolateGnBu */.Xw),\n "interpolateGreens": () => (/* reexport */ d3_scale_chromatic_src/* interpolateGreens */.M),\n "interpolateGreys": () => (/* reexport */ d3_scale_chromatic_src/* interpolateGreys */.A_),\n "interpolateHcl": () => (/* reexport */ d3_interpolate_src/* interpolateHcl */.JH),\n "interpolateHclLong": () => (/* reexport */ d3_interpolate_src/* interpolateHclLong */.Yr),\n "interpolateHsl": () => (/* reexport */ d3_interpolate_src/* interpolateHsl */.US),\n "interpolateHslLong": () => (/* reexport */ d3_interpolate_src/* interpolateHslLong */.H),\n "interpolateHue": () => (/* reexport */ d3_interpolate_src/* interpolateHue */.EP),\n "interpolateInferno": () => (/* reexport */ d3_scale_chromatic_src/* interpolateInferno */.sN),\n "interpolateLab": () => (/* reexport */ d3_interpolate_src/* interpolateLab */.uU),\n "interpolateMagma": () => (/* reexport */ d3_scale_chromatic_src/* interpolateMagma */.Gi),\n "interpolateNumber": () => (/* reexport */ d3_interpolate_src/* interpolateNumber */.k4),\n "interpolateNumberArray": () => (/* reexport */ d3_interpolate_src/* interpolateNumberArray */.qN),\n "interpolateObject": () => (/* reexport */ d3_interpolate_src/* interpolateObject */.IW),\n "interpolateOrRd": () => (/* reexport */ d3_scale_chromatic_src/* interpolateOrRd */.RZ),\n "interpolateOranges": () => (/* reexport */ d3_scale_chromatic_src/* interpolateOranges */.n$),\n "interpolatePRGn": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePRGn */.nn),\n "interpolatePiYG": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePiYG */.qw),\n "interpolatePlasma": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePlasma */.iA),\n "interpolatePuBu": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePuBu */.GM),\n "interpolatePuBuGn": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePuBuGn */.S7),\n "interpolatePuOr": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePuOr */.xN),\n "interpolatePuRd": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePuRd */.cU),\n "interpolatePurples": () => (/* reexport */ d3_scale_chromatic_src/* interpolatePurples */.XW),\n "interpolateRainbow": () => (/* reexport */ d3_scale_chromatic_src/* interpolateRainbow */.IC),\n "interpolateRdBu": () => (/* reexport */ d3_scale_chromatic_src/* interpolateRdBu */.De),\n "interpolateRdGy": () => (/* reexport */ d3_scale_chromatic_src/* interpolateRdGy */.PL),\n "interpolateRdPu": () => (/* reexport */ d3_scale_chromatic_src/* interpolateRdPu */.A4),\n "interpolateRdYlBu": () => (/* reexport */ d3_scale_chromatic_src/* interpolateRdYlBu */.zJ),\n "interpolateRdYlGn": () => (/* reexport */ d3_scale_chromatic_src/* interpolateRdYlGn */.BT),\n "interpolateReds": () => (/* reexport */ d3_scale_chromatic_src/* interpolateReds */.bc),\n "interpolateRgb": () => (/* reexport */ d3_interpolate_src/* interpolateRgb */.LX),\n "interpolateRgbBasis": () => (/* reexport */ d3_interpolate_src/* interpolateRgbBasis */.u1),\n "interpolateRgbBasisClosed": () => (/* reexport */ d3_interpolate_src/* interpolateRgbBasisClosed */.F5),\n "interpolateRound": () => (/* reexport */ d3_interpolate_src/* interpolateRound */.uL),\n "interpolateSinebow": () => (/* reexport */ d3_scale_chromatic_src/* interpolateSinebow */.OO),\n "interpolateSpectral": () => (/* reexport */ d3_scale_chromatic_src/* interpolateSpectral */.T0),\n "interpolateString": () => (/* reexport */ d3_interpolate_src/* interpolateString */.IT),\n "interpolateTransformCss": () => (/* reexport */ d3_interpolate_src/* interpolateTransformCss */.Yb),\n "interpolateTransformSvg": () => (/* reexport */ d3_interpolate_src/* interpolateTransformSvg */.wL),\n "interpolateTurbo": () => (/* reexport */ d3_scale_chromatic_src/* interpolateTurbo */._B),\n "interpolateViridis": () => (/* reexport */ d3_scale_chromatic_src/* interpolateViridis */.V),\n "interpolateWarm": () => (/* reexport */ d3_scale_chromatic_src/* interpolateWarm */.AO),\n "interpolateYlGn": () => (/* reexport */ d3_scale_chromatic_src/* interpolateYlGn */.aE),\n "interpolateYlGnBu": () => (/* reexport */ d3_scale_chromatic_src/* interpolateYlGnBu */.Ht),\n "interpolateYlOrBr": () => (/* reexport */ d3_scale_chromatic_src/* interpolateYlOrBr */.Y_),\n "interpolateYlOrRd": () => (/* reexport */ d3_scale_chromatic_src/* interpolateYlOrRd */.cj),\n "interpolateZoom": () => (/* reexport */ d3_interpolate_src/* interpolateZoom */.JX),\n "interrupt": () => (/* reexport */ d3_transition_src/* interrupt */.e1),\n "interval": () => (/* reexport */ d3_timer_src/* interval */.FG),\n "isoFormat": () => (/* reexport */ d3_time_format_src/* isoFormat */.zh),\n "isoParse": () => (/* reexport */ d3_time_format_src/* isoParse */.ji),\n "json": () => (/* reexport */ d3_fetch_src/* json */.AV),\n "keys": () => (/* reexport */ d3_collection_src/* keys */.XP),\n "lab": () => (/* reexport */ d3_color_src/* lab */.Nn),\n "lch": () => (/* reexport */ d3_color_src/* lch */.tW),\n "line": () => (/* reexport */ d3_shape_src/* line */.jv),\n "lineRadial": () => (/* reexport */ d3_shape_src/* lineRadial */.XB),\n "linkHorizontal": () => (/* reexport */ d3_shape_src/* linkHorizontal */.h5),\n "linkRadial": () => (/* reexport */ d3_shape_src/* linkRadial */.M4),\n "linkVertical": () => (/* reexport */ d3_shape_src/* linkVertical */.rR),\n "local": () => (/* reexport */ d3_selection_src/* local */.I_),\n "map": () => (/* reexport */ d3_collection_src/* map */.UI),\n "matcher": () => (/* reexport */ d3_selection_src/* matcher */.C2),\n "max": () => (/* reexport */ src/* max */.Fp),\n "mean": () => (/* reexport */ src/* mean */.J6),\n "median": () => (/* reexport */ src/* median */.C2),\n "merge": () => (/* reexport */ src/* merge */.TS),\n "min": () => (/* reexport */ src/* min */.VV),\n "mouse": () => (/* reexport */ d3_selection_src/* mouse */.Jz),\n "namespace": () => (/* reexport */ d3_selection_src/* namespace */.uD),\n "namespaces": () => (/* reexport */ d3_selection_src/* namespaces */.aC),\n "nest": () => (/* reexport */ d3_collection_src/* nest */.b1),\n "now": () => (/* reexport */ d3_timer_src/* now */.zO),\n "pack": () => (/* reexport */ d3_hierarchy_src/* pack */.P2),\n "packEnclose": () => (/* reexport */ d3_hierarchy_src/* packEnclose */.O1),\n "packSiblings": () => (/* reexport */ d3_hierarchy_src/* packSiblings */.jA),\n "pairs": () => (/* reexport */ src/* pairs */.X),\n "partition": () => (/* reexport */ d3_hierarchy_src/* partition */.uK),\n "path": () => (/* reexport */ d3_path_src/* path */.E),\n "permute": () => (/* reexport */ src/* permute */.FO),\n "pie": () => (/* reexport */ d3_shape_src/* pie */.ve),\n "piecewise": () => (/* reexport */ d3_interpolate_src/* piecewise */.sO),\n "pointRadial": () => (/* reexport */ d3_shape_src/* pointRadial */.Hs),\n "polygonArea": () => (/* reexport */ d3_polygon_src/* polygonArea */.mI),\n "polygonCentroid": () => (/* reexport */ d3_polygon_src/* polygonCentroid */.tO),\n "polygonContains": () => (/* reexport */ d3_polygon_src/* polygonContains */.Q6),\n "polygonHull": () => (/* reexport */ d3_polygon_src/* polygonHull */.WF),\n "polygonLength": () => (/* reexport */ d3_polygon_src/* polygonLength */.NZ),\n "precisionFixed": () => (/* reexport */ d3_format_src/* precisionFixed */.zB),\n "precisionPrefix": () => (/* reexport */ d3_format_src/* precisionPrefix */.S5),\n "precisionRound": () => (/* reexport */ d3_format_src/* precisionRound */.F0),\n "quadtree": () => (/* reexport */ d3_quadtree_src/* quadtree */.T),\n "quantile": () => (/* reexport */ src/* quantile */.VR),\n "quantize": () => (/* reexport */ d3_interpolate_src/* quantize */.q$),\n "radialArea": () => (/* reexport */ d3_shape_src/* radialArea */.N1),\n "radialLine": () => (/* reexport */ d3_shape_src/* radialLine */.aJ),\n "randomBates": () => (/* reexport */ d3_random_src/* randomBates */.WL),\n "randomExponential": () => (/* reexport */ d3_random_src/* randomExponential */.pP),\n "randomIrwinHall": () => (/* reexport */ d3_random_src/* randomIrwinHall */.S_),\n "randomLogNormal": () => (/* reexport */ d3_random_src/* randomLogNormal */.bw),\n "randomNormal": () => (/* reexport */ d3_random_src/* randomNormal */.nG),\n "randomUniform": () => (/* reexport */ d3_random_src/* randomUniform */.LG),\n "range": () => (/* reexport */ src/* range */.w6),\n "rgb": () => (/* reexport */ d3_color_src/* rgb */.B8),\n "ribbon": () => (/* reexport */ d3_chord_src/* ribbon */.N),\n "scaleBand": () => (/* reexport */ band),\n "scaleDiverging": () => (/* reexport */ diverging),\n "scaleDivergingLog": () => (/* reexport */ divergingLog),\n "scaleDivergingPow": () => (/* reexport */ divergingPow),\n "scaleDivergingSqrt": () => (/* reexport */ divergingSqrt),\n "scaleDivergingSymlog": () => (/* reexport */ divergingSymlog),\n "scaleIdentity": () => (/* reexport */ identity_identity),\n "scaleImplicit": () => (/* reexport */ implicit),\n "scaleLinear": () => (/* reexport */ linear),\n "scaleLog": () => (/* reexport */ log),\n "scaleOrdinal": () => (/* reexport */ ordinal),\n "scalePoint": () => (/* reexport */ point),\n "scalePow": () => (/* reexport */ pow),\n "scaleQuantile": () => (/* reexport */ quantile),\n "scaleQuantize": () => (/* reexport */ quantize),\n "scaleSequential": () => (/* reexport */ sequential),\n "scaleSequentialLog": () => (/* reexport */ sequentialLog),\n "scaleSequentialPow": () => (/* reexport */ sequentialPow),\n "scaleSequentialQuantile": () => (/* reexport */ sequentialQuantile),\n "scaleSequentialSqrt": () => (/* reexport */ sequentialSqrt),\n "scaleSequentialSymlog": () => (/* reexport */ sequentialSymlog),\n "scaleSqrt": () => (/* reexport */ sqrt),\n "scaleSymlog": () => (/* reexport */ symlog),\n "scaleThreshold": () => (/* reexport */ threshold),\n "scaleTime": () => (/* reexport */ time),\n "scaleUtc": () => (/* reexport */ utcTime),\n "scan": () => (/* reexport */ src/* scan */.Rp),\n "schemeAccent": () => (/* reexport */ d3_scale_chromatic_src/* schemeAccent */.Mr),\n "schemeBlues": () => (/* reexport */ d3_scale_chromatic_src/* schemeBlues */.KH),\n "schemeBrBG": () => (/* reexport */ d3_scale_chromatic_src/* schemeBrBG */.QA),\n "schemeBuGn": () => (/* reexport */ d3_scale_chromatic_src/* schemeBuGn */.S1),\n "schemeBuPu": () => (/* reexport */ d3_scale_chromatic_src/* schemeBuPu */.DQ),\n "schemeCategory10": () => (/* reexport */ d3_scale_chromatic_src/* schemeCategory10 */.Cn),\n "schemeDark2": () => (/* reexport */ d3_scale_chromatic_src/* schemeDark2 */.Xg),\n "schemeGnBu": () => (/* reexport */ d3_scale_chromatic_src/* schemeGnBu */.AT),\n "schemeGreens": () => (/* reexport */ d3_scale_chromatic_src/* schemeGreens */.Yo),\n "schemeGreys": () => (/* reexport */ d3_scale_chromatic_src/* schemeGreys */.bU),\n "schemeOrRd": () => (/* reexport */ d3_scale_chromatic_src/* schemeOrRd */.MX),\n "schemeOranges": () => (/* reexport */ d3_scale_chromatic_src/* schemeOranges */.P0),\n "schemePRGn": () => (/* reexport */ d3_scale_chromatic_src/* schemePRGn */.Uh),\n "schemePaired": () => (/* reexport */ d3_scale_chromatic_src/* schemePaired */.xH),\n "schemePastel1": () => (/* reexport */ d3_scale_chromatic_src/* schemePastel1 */.rp),\n "schemePastel2": () => (/* reexport */ d3_scale_chromatic_src/* schemePastel2 */.i4),\n "schemePiYG": () => (/* reexport */ d3_scale_chromatic_src/* schemePiYG */.Lx),\n "schemePuBu": () => (/* reexport */ d3_scale_chromatic_src/* schemePuBu */.UV),\n "schemePuBuGn": () => (/* reexport */ d3_scale_chromatic_src/* schemePuBuGn */.g1),\n "schemePuOr": () => (/* reexport */ d3_scale_chromatic_src/* schemePuOr */.$K),\n "schemePuRd": () => (/* reexport */ d3_scale_chromatic_src/* schemePuRd */.F6),\n "schemePurples": () => (/* reexport */ d3_scale_chromatic_src/* schemePurples */.DR),\n "schemeRdBu": () => (/* reexport */ d3_scale_chromatic_src/* schemeRdBu */.HW),\n "schemeRdGy": () => (/* reexport */ d3_scale_chromatic_src/* schemeRdGy */.u_),\n "schemeRdPu": () => (/* reexport */ d3_scale_chromatic_src/* schemeRdPu */.zs),\n "schemeRdYlBu": () => (/* reexport */ d3_scale_chromatic_src/* schemeRdYlBu */.XX),\n "schemeRdYlGn": () => (/* reexport */ d3_scale_chromatic_src/* schemeRdYlGn */.Kr),\n "schemeReds": () => (/* reexport */ d3_scale_chromatic_src/* schemeReds */.zU),\n "schemeSet1": () => (/* reexport */ d3_scale_chromatic_src/* schemeSet1 */.yK),\n "schemeSet2": () => (/* reexport */ d3_scale_chromatic_src/* schemeSet2 */.W1),\n "schemeSet3": () => (/* reexport */ d3_scale_chromatic_src/* schemeSet3 */.UC),\n "schemeSpectral": () => (/* reexport */ d3_scale_chromatic_src/* schemeSpectral */.lq),\n "schemeTableau10": () => (/* reexport */ d3_scale_chromatic_src/* schemeTableau10 */.K2),\n "schemeYlGn": () => (/* reexport */ d3_scale_chromatic_src/* schemeYlGn */.GE),\n "schemeYlGnBu": () => (/* reexport */ d3_scale_chromatic_src/* schemeYlGnBu */.Yi),\n "schemeYlOrBr": () => (/* reexport */ d3_scale_chromatic_src/* schemeYlOrBr */.Gb),\n "schemeYlOrRd": () => (/* reexport */ d3_scale_chromatic_src/* schemeYlOrRd */.M7),\n "select": () => (/* reexport */ d3_selection_src/* select */.Ys),\n "selectAll": () => (/* reexport */ d3_selection_src/* selectAll */.td),\n "selection": () => (/* reexport */ d3_selection_src/* selection */.f_),\n "selector": () => (/* reexport */ d3_selection_src/* selector */.nZ),\n "selectorAll": () => (/* reexport */ d3_selection_src/* selectorAll */.UK),\n "set": () => (/* reexport */ d3_collection_src/* set */.t8),\n "shuffle": () => (/* reexport */ src/* shuffle */.TV),\n "stack": () => (/* reexport */ d3_shape_src/* stack */.kn),\n "stackOffsetDiverging": () => (/* reexport */ d3_shape_src/* stackOffsetDiverging */.W$),\n "stackOffsetExpand": () => (/* reexport */ d3_shape_src/* stackOffsetExpand */.pB),\n "stackOffsetNone": () => (/* reexport */ d3_shape_src/* stackOffsetNone */.HL),\n "stackOffsetSilhouette": () => (/* reexport */ d3_shape_src/* stackOffsetSilhouette */.Ku),\n "stackOffsetWiggle": () => (/* reexport */ d3_shape_src/* stackOffsetWiggle */.YG),\n "stackOrderAppearance": () => (/* reexport */ d3_shape_src/* stackOrderAppearance */.mG),\n "stackOrderAscending": () => (/* reexport */ d3_shape_src/* stackOrderAscending */.$K),\n "stackOrderDescending": () => (/* reexport */ d3_shape_src/* stackOrderDescending */.IX),\n "stackOrderInsideOut": () => (/* reexport */ d3_shape_src/* stackOrderInsideOut */.FP),\n "stackOrderNone": () => (/* reexport */ d3_shape_src/* stackOrderNone */.Qx),\n "stackOrderReverse": () => (/* reexport */ d3_shape_src/* stackOrderReverse */.cY),\n "stratify": () => (/* reexport */ d3_hierarchy_src/* stratify */.QP),\n "style": () => (/* reexport */ d3_selection_src/* style */.oB),\n "sum": () => (/* reexport */ src/* sum */.Sm),\n "svg": () => (/* reexport */ d3_fetch_src/* svg */.YP),\n "symbol": () => (/* reexport */ d3_shape_src/* symbol */.NA),\n "symbolCircle": () => (/* reexport */ d3_shape_src/* symbolCircle */.JF),\n "symbolCross": () => (/* reexport */ d3_shape_src/* symbolCross */.tJ),\n "symbolDiamond": () => (/* reexport */ d3_shape_src/* symbolDiamond */.rZ),\n "symbolSquare": () => (/* reexport */ d3_shape_src/* symbolSquare */.m_),\n "symbolStar": () => (/* reexport */ d3_shape_src/* symbolStar */.Hm),\n "symbolTriangle": () => (/* reexport */ d3_shape_src/* symbolTriangle */.P6),\n "symbolWye": () => (/* reexport */ d3_shape_src/* symbolWye */.n3),\n "symbols": () => (/* reexport */ d3_shape_src/* symbols */.uH),\n "text": () => (/* reexport */ d3_fetch_src/* text */.fL),\n "thresholdFreedmanDiaconis": () => (/* reexport */ src/* thresholdFreedmanDiaconis */.o6),\n "thresholdScott": () => (/* reexport */ src/* thresholdScott */.FA),\n "thresholdSturges": () => (/* reexport */ src/* thresholdSturges */._X),\n "tickFormat": () => (/* reexport */ tickFormat),\n "tickIncrement": () => (/* reexport */ src/* tickIncrement */.G9),\n "tickStep": () => (/* reexport */ src/* tickStep */.ly),\n "ticks": () => (/* reexport */ src/* ticks */.sd),\n "timeDay": () => (/* reexport */ src_day),\n "timeDays": () => (/* reexport */ days),\n "timeFormat": () => (/* reexport */ d3_time_format_src/* timeFormat */.i$),\n "timeFormatDefaultLocale": () => (/* reexport */ d3_time_format_src/* timeFormatDefaultLocale */.Ds),\n "timeFormatLocale": () => (/* reexport */ d3_time_format_src/* timeFormatLocale */.Dq),\n "timeFriday": () => (/* reexport */ friday),\n "timeFridays": () => (/* reexport */ fridays),\n "timeHour": () => (/* reexport */ src_hour),\n "timeHours": () => (/* reexport */ hours),\n "timeInterval": () => (/* reexport */ newInterval),\n "timeMillisecond": () => (/* reexport */ src_millisecond),\n "timeMilliseconds": () => (/* reexport */ milliseconds),\n "timeMinute": () => (/* reexport */ src_minute),\n "timeMinutes": () => (/* reexport */ minutes),\n "timeMonday": () => (/* reexport */ monday),\n "timeMondays": () => (/* reexport */ mondays),\n "timeMonth": () => (/* reexport */ src_month),\n "timeMonths": () => (/* reexport */ months),\n "timeParse": () => (/* reexport */ d3_time_format_src/* timeParse */.Z1),\n "timeSaturday": () => (/* reexport */ saturday),\n "timeSaturdays": () => (/* reexport */ saturdays),\n "timeSecond": () => (/* reexport */ src_second),\n "timeSeconds": () => (/* reexport */ seconds),\n "timeSunday": () => (/* reexport */ sunday),\n "timeSundays": () => (/* reexport */ sundays),\n "timeThursday": () => (/* reexport */ thursday),\n "timeThursdays": () => (/* reexport */ thursdays),\n "timeTuesday": () => (/* reexport */ tuesday),\n "timeTuesdays": () => (/* reexport */ tuesdays),\n "timeWednesday": () => (/* reexport */ wednesday),\n "timeWednesdays": () => (/* reexport */ wednesdays),\n "timeWeek": () => (/* reexport */ sunday),\n "timeWeeks": () => (/* reexport */ sundays),\n "timeYear": () => (/* reexport */ src_year),\n "timeYears": () => (/* reexport */ years),\n "timeout": () => (/* reexport */ d3_timer_src/* timeout */.Vs),\n "timer": () => (/* reexport */ d3_timer_src/* timer */.HT),\n "timerFlush": () => (/* reexport */ d3_timer_src/* timerFlush */.R8),\n "touch": () => (/* reexport */ d3_selection_src/* touch */.Fq),\n "touches": () => (/* reexport */ d3_selection_src/* touches */.W4),\n "transition": () => (/* reexport */ d3_transition_src/* transition */.eR),\n "transpose": () => (/* reexport */ src/* transpose */.p4),\n "tree": () => (/* reexport */ d3_hierarchy_src/* tree */.G_),\n "treemap": () => (/* reexport */ d3_hierarchy_src/* treemap */.pN),\n "treemapBinary": () => (/* reexport */ d3_hierarchy_src/* treemapBinary */.wL),\n "treemapDice": () => (/* reexport */ d3_hierarchy_src/* treemapDice */.LQ),\n "treemapResquarify": () => (/* reexport */ d3_hierarchy_src/* treemapResquarify */.eA),\n "treemapSlice": () => (/* reexport */ d3_hierarchy_src/* treemapSlice */.Km),\n "treemapSliceDice": () => (/* reexport */ d3_hierarchy_src/* treemapSliceDice */.E_),\n "treemapSquarify": () => (/* reexport */ d3_hierarchy_src/* treemapSquarify */.o$),\n "tsv": () => (/* reexport */ d3_fetch_src/* tsv */.pv),\n "tsvFormat": () => (/* reexport */ d3_dsv_src/* tsvFormat */.vP),\n "tsvFormatBody": () => (/* reexport */ d3_dsv_src/* tsvFormatBody */.uH),\n "tsvFormatRow": () => (/* reexport */ d3_dsv_src/* tsvFormatRow */.Hf),\n "tsvFormatRows": () => (/* reexport */ d3_dsv_src/* tsvFormatRows */.n5),\n "tsvFormatValue": () => (/* reexport */ d3_dsv_src/* tsvFormatValue */.sS),\n "tsvParse": () => (/* reexport */ d3_dsv_src/* tsvParse */.tJ),\n "tsvParseRows": () => (/* reexport */ d3_dsv_src/* tsvParseRows */.E0),\n "utcDay": () => (/* reexport */ src_utcDay),\n "utcDays": () => (/* reexport */ utcDays),\n "utcFormat": () => (/* reexport */ d3_time_format_src/* utcFormat */.g0),\n "utcFriday": () => (/* reexport */ utcFriday),\n "utcFridays": () => (/* reexport */ utcFridays),\n "utcHour": () => (/* reexport */ src_utcHour),\n "utcHours": () => (/* reexport */ utcHours),\n "utcMillisecond": () => (/* reexport */ src_millisecond),\n "utcMilliseconds": () => (/* reexport */ milliseconds),\n "utcMinute": () => (/* reexport */ src_utcMinute),\n "utcMinutes": () => (/* reexport */ utcMinutes),\n "utcMonday": () => (/* reexport */ utcMonday),\n "utcMondays": () => (/* reexport */ utcMondays),\n "utcMonth": () => (/* reexport */ src_utcMonth),\n "utcMonths": () => (/* reexport */ utcMonths),\n "utcParse": () => (/* reexport */ d3_time_format_src/* utcParse */.wp),\n "utcSaturday": () => (/* reexport */ utcSaturday),\n "utcSaturdays": () => (/* reexport */ utcSaturdays),\n "utcSecond": () => (/* reexport */ src_second),\n "utcSeconds": () => (/* reexport */ seconds),\n "utcSunday": () => (/* reexport */ utcSunday),\n "utcSundays": () => (/* reexport */ utcSundays),\n "utcThursday": () => (/* reexport */ utcThursday),\n "utcThursdays": () => (/* reexport */ utcThursdays),\n "utcTuesday": () => (/* reexport */ utcTuesday),\n "utcTuesdays": () => (/* reexport */ utcTuesdays),\n "utcWednesday": () => (/* reexport */ utcWednesday),\n "utcWednesdays": () => (/* reexport */ utcWednesdays),\n "utcWeek": () => (/* reexport */ utcSunday),\n "utcWeeks": () => (/* reexport */ utcSundays),\n "utcYear": () => (/* reexport */ src_utcYear),\n "utcYears": () => (/* reexport */ utcYears),\n "values": () => (/* reexport */ d3_collection_src/* values */.VO),\n "variance": () => (/* reexport */ src/* variance */.CA),\n "version": () => (/* reexport */ version),\n "voronoi": () => (/* reexport */ d3_voronoi_src/* voronoi */.R),\n "window": () => (/* reexport */ d3_selection_src/* window */.u9),\n "xml": () => (/* reexport */ d3_fetch_src/* xml */.Ls),\n "zip": () => (/* reexport */ src/* zip */.$R),\n "zoom": () => (/* reexport */ d3_zoom_src/* zoom */.sP),\n "zoomIdentity": () => (/* reexport */ d3_zoom_src/* zoomIdentity */.CR),\n "zoomTransform": () => (/* reexport */ d3_zoom_src/* zoomTransform */.P2)\n});\n\n;// CONCATENATED MODULE: ./node_modules/d3/dist/package.js\nvar package_name = "d3";\nvar version = "5.16.0";\nvar description = "Data-Driven Documents";\nvar keywords = (/* unused pure expression or super */ null && (["dom","visualization","svg","animation","canvas"]));\nvar homepage = "https://d3js.org";\nvar license = "BSD-3-Clause";\nvar author = {"name":"Mike Bostock","url":"https://bost.ocks.org/mike"};\nvar main = "dist/d3.node.js";\nvar unpkg = "dist/d3.min.js";\nvar jsdelivr = "dist/d3.min.js";\nvar package_module = "index.js";\nvar repository = {"type":"git","url":"https://github.com/d3/d3.git"};\nvar files = (/* unused pure expression or super */ null && (["dist/**/*.js","index.js"]));\nvar scripts = {"pretest":"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c","test":"tape \'test/**/*-test.js\'","prepublishOnly":"yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\"d3 ${npm_package_version}\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\"${npm_package_version}\\" && git tag -am \\"${npm_package_version}\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js"};\nvar devDependencies = {"json2module":"0.0","rimraf":"2","rollup":"1","rollup-plugin-ascii":"0.0","rollup-plugin-node-resolve":"3","rollup-plugin-terser":"5","tape":"4"};\nvar dependencies = {"d3-array":"1","d3-axis":"1","d3-brush":"1","d3-chord":"1","d3-collection":"1","d3-color":"1","d3-contour":"1","d3-dispatch":"1","d3-drag":"1","d3-dsv":"1","d3-ease":"1","d3-fetch":"1","d3-force":"1","d3-format":"1","d3-geo":"1","d3-hierarchy":"1","d3-interpolate":"1","d3-path":"1","d3-polygon":"1","d3-quadtree":"1","d3-random":"1","d3-scale":"2","d3-scale-chromatic":"1","d3-selection":"1","d3-shape":"1","d3-time":"1","d3-time-format":"2","d3-timer":"1","d3-transition":"1","d3-voronoi":"1","d3-zoom":"1"};\n\n// EXTERNAL MODULE: ./node_modules/d3-array/src/index.js + 31 modules\nvar src = __webpack_require__(33016);\n// EXTERNAL MODULE: ./node_modules/d3-axis/src/index.js + 3 modules\nvar d3_axis_src = __webpack_require__(85735);\n// EXTERNAL MODULE: ./node_modules/d3-brush/src/index.js + 4 modules\nvar d3_brush_src = __webpack_require__(13873);\n// EXTERNAL MODULE: ./node_modules/d3-chord/src/index.js + 5 modules\nvar d3_chord_src = __webpack_require__(87771);\n// EXTERNAL MODULE: ./node_modules/d3-collection/src/index.js + 6 modules\nvar d3_collection_src = __webpack_require__(73814);\n// EXTERNAL MODULE: ./node_modules/d3-color/src/index.js\nvar d3_color_src = __webpack_require__(46404);\n// EXTERNAL MODULE: ./node_modules/d3-contour/src/index.js + 9 modules\nvar d3_contour_src = __webpack_require__(95538);\n// EXTERNAL MODULE: ./node_modules/d3-dispatch/src/index.js\nvar d3_dispatch_src = __webpack_require__(88258);\n// EXTERNAL MODULE: ./node_modules/d3-drag/src/index.js + 3 modules\nvar d3_drag_src = __webpack_require__(96700);\n// EXTERNAL MODULE: ./node_modules/d3-dsv/src/index.js + 1 modules\nvar d3_dsv_src = __webpack_require__(86664);\n// EXTERNAL MODULE: ./node_modules/d3-ease/src/index.js + 10 modules\nvar d3_ease_src = __webpack_require__(7716);\n// EXTERNAL MODULE: ./node_modules/d3-fetch/src/index.js + 7 modules\nvar d3_fetch_src = __webpack_require__(58339);\n// EXTERNAL MODULE: ./node_modules/d3-force/src/index.js + 10 modules\nvar d3_force_src = __webpack_require__(31963);\n// EXTERNAL MODULE: ./node_modules/d3-format/src/index.js\nvar d3_format_src = __webpack_require__(65594);\n// EXTERNAL MODULE: ./node_modules/d3-geo/src/index.js + 58 modules\nvar d3_geo_src = __webpack_require__(59039);\n// EXTERNAL MODULE: ./node_modules/d3-hierarchy/src/index.js + 30 modules\nvar d3_hierarchy_src = __webpack_require__(75222);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/index.js + 7 modules\nvar d3_interpolate_src = __webpack_require__(94743);\n// EXTERNAL MODULE: ./node_modules/d3-path/src/index.js\nvar d3_path_src = __webpack_require__(40549);\n// EXTERNAL MODULE: ./node_modules/d3-polygon/src/index.js + 4 modules\nvar d3_polygon_src = __webpack_require__(15697);\n// EXTERNAL MODULE: ./node_modules/d3-quadtree/src/index.js\nvar d3_quadtree_src = __webpack_require__(71829);\n// EXTERNAL MODULE: ./node_modules/d3-random/src/index.js + 7 modules\nvar d3_random_src = __webpack_require__(72731);\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/init.js\nfunction initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/array.js\nvar array = Array.prototype;\n\nvar map = array.map;\nvar slice = array.slice;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/ordinal.js\n\n\n\n\nvar implicit = {name: "implicit"};\n\nfunction ordinal() {\n var index = (0,d3_collection_src/* map */.UI)(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + "", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = (0,d3_collection_src/* map */.UI)();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/band.js\n\n\n\n\nfunction band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = (0,src/* range */.w6)(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/value.js\nvar value = __webpack_require__(81265);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/number.js\nvar number = __webpack_require__(73626);\n// EXTERNAL MODULE: ./node_modules/d3-interpolate/src/round.js\nvar round = __webpack_require__(55720);\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/constant.js\n/* harmony default export */ function constant(x) {\n return function() {\n return x;\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/number.js\n/* harmony default export */ function src_number(x) {\n return +x;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/continuous.js\n\n\n\n\n\n\nvar unit = [0, 1];\n\nfunction identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = (0,src/* bisect */.b4)(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction transformer() {\n var domain = unit,\n range = unit,\n interpolate = value/* default */.Z,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), number/* default */.Z)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, src_number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = round/* default */.Z, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nfunction continuous(transform, untransform) {\n return transformer()(transform, untransform);\n}\n\n// EXTERNAL MODULE: ./node_modules/d3-format/src/formatSpecifier.js\nvar formatSpecifier = __webpack_require__(46196);\n// EXTERNAL MODULE: ./node_modules/d3-format/src/precisionPrefix.js\nvar precisionPrefix = __webpack_require__(53726);\n// EXTERNAL MODULE: ./node_modules/d3-format/src/defaultLocale.js\nvar defaultLocale = __webpack_require__(47539);\n// EXTERNAL MODULE: ./node_modules/d3-format/src/precisionRound.js\nvar precisionRound = __webpack_require__(37655);\n// EXTERNAL MODULE: ./node_modules/d3-format/src/precisionFixed.js\nvar precisionFixed = __webpack_require__(68195);\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/tickFormat.js\n\n\n\n/* harmony default export */ function tickFormat(start, stop, count, specifier) {\n var step = (0,src/* tickStep */.ly)(start, stop, count),\n precision;\n specifier = (0,formatSpecifier/* default */.Z)(specifier == null ? ",f" : specifier);\n switch (specifier.type) {\n case "s": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = (0,precisionPrefix/* default */.Z)(step, value))) specifier.precision = precision;\n return (0,defaultLocale/* formatPrefix */.jH)(specifier, value);\n }\n case "":\n case "e":\n case "g":\n case "p":\n case "r": {\n if (specifier.precision == null && !isNaN(precision = (0,precisionRound/* default */.Z)(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");\n break;\n }\n case "f":\n case "%": {\n if (specifier.precision == null && !isNaN(precision = (0,precisionFixed/* default */.Z)(step))) specifier.precision = precision - (specifier.type === "%") * 2;\n break;\n }\n }\n return (0,defaultLocale/* format */.WU)(specifier);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/linear.js\n\n\n\n\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return (0,src/* ticks */.sd)(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = (0,src/* tickIncrement */.G9)(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = (0,src/* tickIncrement */.G9)(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = (0,src/* tickIncrement */.G9)(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nfunction linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/identity.js\n\n\n\n\nfunction identity_identity(domain) {\n var unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, src_number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity_identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? map.call(domain, src_number) : [0, 1];\n\n return linearish(scale);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/nice.js\n/* harmony default export */ function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/log.js\n\n\n\n\n\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nfunction loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = (0,src/* ticks */.sd)(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? ".0e" : ",";\n if (typeof specifier !== "function") specifier = (0,defaultLocale/* format */.WU)(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : "";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nfunction log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/symlog.js\n\n\n\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nfunction symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nfunction symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/pow.js\n\n\n\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nfunction pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/quantile.js\n\n\n\n\nfunction quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = (0,src/* quantile */.VR)(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : range[(0,src/* bisect */.b4)(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(src/* ascending */.j2);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/quantize.js\n\n\n\n\n\nfunction quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x <= x ? range[(0,src/* bisect */.b4)(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/threshold.js\n\n\n\n\nfunction threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x <= x ? range[(0,src/* bisect */.b4)(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/interval.js\nvar t0 = new Date,\n t1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/year.js\n\n\nvar year = newInterval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\n/* harmony default export */ const src_year = (year);\nvar years = year.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/month.js\n\n\nvar month = newInterval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\n/* harmony default export */ const src_month = (month);\nvar months = month.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/duration.js\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/week.js\n\n\n\nfunction weekday(i) {\n return newInterval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar sundays = sunday.range;\nvar mondays = monday.range;\nvar tuesdays = tuesday.range;\nvar wednesdays = wednesday.range;\nvar thursdays = thursday.range;\nvar fridays = friday.range;\nvar saturdays = saturday.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/day.js\n\n\n\nvar day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\n/* harmony default export */ const src_day = (day);\nvar days = day.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/hour.js\n\n\n\nvar hour = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\n/* harmony default export */ const src_hour = (hour);\nvar hours = hour.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/minute.js\n\n\n\nvar minute = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\n/* harmony default export */ const src_minute = (minute);\nvar minutes = minute.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/second.js\n\n\n\nvar second = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\n/* harmony default export */ const src_second = (second);\nvar seconds = second.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/millisecond.js\n\n\nvar millisecond = newInterval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\n/* harmony default export */ const src_millisecond = (millisecond);\nvar milliseconds = millisecond.range;\n\n// EXTERNAL MODULE: ./node_modules/d3-time-format/src/defaultLocale.js\nvar src_defaultLocale = __webpack_require__(90317);\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/time.js\n\n\n\n\n\n\n\n\nvar time_durationSecond = 1000,\n time_durationMinute = time_durationSecond * 60,\n time_durationHour = time_durationMinute * 60,\n time_durationDay = time_durationHour * 24,\n time_durationWeek = time_durationDay * 7,\n durationMonth = time_durationDay * 30,\n durationYear = time_durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction time_number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(".%L"),\n formatSecond = format(":%S"),\n formatMinute = format("%I:%M"),\n formatHour = format("%I %p"),\n formatDay = format("%a %d"),\n formatWeek = format("%b %d"),\n formatMonth = format("%B"),\n formatYear = format("%Y");\n\n var tickIntervals = [\n [second, 1, time_durationSecond],\n [second, 5, 5 * time_durationSecond],\n [second, 15, 15 * time_durationSecond],\n [second, 30, 30 * time_durationSecond],\n [minute, 1, time_durationMinute],\n [minute, 5, 5 * time_durationMinute],\n [minute, 15, 15 * time_durationMinute],\n [minute, 30, 30 * time_durationMinute],\n [ hour, 1, time_durationHour ],\n [ hour, 3, 3 * time_durationHour ],\n [ hour, 6, 6 * time_durationHour ],\n [ hour, 12, 12 * time_durationHour ],\n [ day, 1, time_durationDay ],\n [ day, 2, 2 * time_durationDay ],\n [ week, 1, time_durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === "number") {\n var target = Math.abs(stop - start) / interval,\n i = (0,src/* bisector */.YF)(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = (0,src/* tickStep */.ly)(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max((0,src/* tickStep */.ly)(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, time_number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\n/* harmony default export */ function time() {\n return initRange.apply(calendar(src_year, src_month, sunday, src_day, src_hour, src_minute, src_second, src_millisecond, src_defaultLocale/* timeFormat */.i$).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/utcYear.js\n\n\nvar utcYear = newInterval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\n/* harmony default export */ const src_utcYear = (utcYear);\nvar utcYears = utcYear.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/utcMonth.js\n\n\nvar utcMonth = newInterval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\n/* harmony default export */ const src_utcMonth = (utcMonth);\nvar utcMonths = utcMonth.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/utcWeek.js\n\n\n\nfunction utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcSundays = utcSunday.range;\nvar utcMondays = utcMonday.range;\nvar utcTuesdays = utcTuesday.range;\nvar utcWednesdays = utcWednesday.range;\nvar utcThursdays = utcThursday.range;\nvar utcFridays = utcFriday.range;\nvar utcSaturdays = utcSaturday.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/utcDay.js\n\n\n\nvar utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\n/* harmony default export */ const src_utcDay = (utcDay);\nvar utcDays = utcDay.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/utcHour.js\n\n\n\nvar utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\n/* harmony default export */ const src_utcHour = (utcHour);\nvar utcHours = utcHour.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/utcMinute.js\n\n\n\nvar utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\n/* harmony default export */ const src_utcMinute = (utcMinute);\nvar utcMinutes = utcMinute.range;\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/utcTime.js\n\n\n\n\n\n/* harmony default export */ function utcTime() {\n return initRange.apply(calendar(src_utcYear, src_utcMonth, utcSunday, src_utcDay, src_utcHour, src_utcMinute, src_second, src_millisecond, src_defaultLocale/* utcFormat */.g0).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/sequential.js\n\n\n\n\n\n\n\nfunction sequential_transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction sequential_copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction sequential() {\n var scale = linearish(sequential_transformer()(identity));\n\n scale.copy = function() {\n return sequential_copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n var scale = loggish(sequential_transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return sequential_copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n var scale = symlogish(sequential_transformer());\n\n scale.copy = function() {\n return sequential_copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n var scale = powish(sequential_transformer());\n\n scale.copy = function() {\n return sequential_copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/sequentialQuantile.js\n\n\n\n\nfunction sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (!isNaN(x = +x)) return interpolator(((0,src/* bisect */.b4)(domain, x) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(src/* ascending */.j2);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/diverging.js\n\n\n\n\n\n\n\n\nfunction diverging_transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n return scale;\n };\n}\n\nfunction diverging() {\n var scale = linearish(diverging_transformer()(identity));\n\n scale.copy = function() {\n return sequential_copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n var scale = loggish(diverging_transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return sequential_copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n var scale = symlogish(diverging_transformer());\n\n scale.copy = function() {\n return sequential_copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n var scale = powish(diverging_transformer());\n\n scale.copy = function() {\n return sequential_copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-scale/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// EXTERNAL MODULE: ./node_modules/d3-scale-chromatic/src/index.js + 45 modules\nvar d3_scale_chromatic_src = __webpack_require__(17206);\n// EXTERNAL MODULE: ./node_modules/d3-selection/src/index.js + 4 modules\nvar d3_selection_src = __webpack_require__(14469);\n// EXTERNAL MODULE: ./node_modules/d3-shape/src/index.js + 51 modules\nvar d3_shape_src = __webpack_require__(30201);\n;// CONCATENATED MODULE: ./node_modules/d3/node_modules/d3-time/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// EXTERNAL MODULE: ./node_modules/d3-time-format/src/index.js + 2 modules\nvar d3_time_format_src = __webpack_require__(48866);\n// EXTERNAL MODULE: ./node_modules/d3-timer/src/index.js + 1 modules\nvar d3_timer_src = __webpack_require__(3581);\n// EXTERNAL MODULE: ./node_modules/d3-transition/src/index.js + 27 modules\nvar d3_transition_src = __webpack_require__(86254);\n// EXTERNAL MODULE: ./node_modules/d3-voronoi/src/index.js + 9 modules\nvar d3_voronoi_src = __webpack_require__(29067);\n// EXTERNAL MODULE: ./node_modules/d3-zoom/src/index.js + 5 modules\nvar d3_zoom_src = __webpack_require__(52540);\n;// CONCATENATED MODULE: ./node_modules/d3/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc3OTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLElBQUksWUFBSTtBQUNSO0FBQ0E7QUFDQSxlQUFlLGtHQUFrRDtBQUNqRTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLElBQUksY0FBTTtBQUNWLGtCQUFrQjtBQUNsQixZQUFZLDJFQUEyQjtBQUN2QyxlQUFlLCtXQUErVyxvQkFBb0Isc01BQXNNLG9CQUFvQixzQkFBc0Isb0JBQW9CLE1BQU0scUJBQXFCO0FBQ2pyQix1QkFBdUI7QUFDdkIsb0JBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNmcEI7QUFDUDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7OztBQ2hCQTs7QUFFTztBQUNBOzs7QUNIMkI7QUFDSjtBQUNHOztBQUUxQixnQkFBZ0I7O0FBRVI7QUFDZixjQUFjLGlDQUFHO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5QkFBeUIsaUNBQUc7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsVUFBVTtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEVBQUUsZUFBZTs7QUFFakI7QUFDQTs7O0FDNUMyQztBQUNWO0FBQ0Q7O0FBRWpCO0FBQ2YsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxQkFBUSxzQkFBc0IsMEJBQTBCO0FBQ3pFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsZUFBZTtBQUN4Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0E7Ozs7Ozs7OztBQ25HQSw2QkFBZSxrQkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7O0FDSkEsNkJBQWUsb0JBQVM7QUFDeEI7QUFDQTs7O0FDRmdDO0FBQ29FO0FBQ2pFO0FBQ0Q7QUFDSjs7QUFFOUI7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsUUFBUSxRQUFRO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxzQkFBTTtBQUNsQjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0ZBQXdGLHFCQUFpQjtBQUN6Rzs7QUFFQTtBQUNBLHdDQUF3QyxRQUFRLElBQUksVUFBTTtBQUMxRDs7QUFFQTtBQUNBLHVDQUF1QyxVQUFVO0FBQ2pEOztBQUVBO0FBQ0EsbUJBQW1CLFVBQVUsbUJBQW1CLG9CQUFnQjtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlO0FBQ2Y7QUFDQTs7Ozs7Ozs7Ozs7OztBQzNIa0M7QUFDK0U7O0FBRWpILDZCQUFlLG9CQUFTO0FBQ3hCLGFBQWEsd0JBQVE7QUFDckI7QUFDQSxjQUFjLGtDQUFlO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxrQ0FBZTtBQUMzRSxhQUFhLHNDQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxpQ0FBYztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxpQ0FBYztBQUMxRTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdDQUFNO0FBQ2Y7OztBQzVCOEM7QUFDVTtBQUN2QjtBQUNLOztBQUUvQjtBQUNQOztBQUVBO0FBQ0E7QUFDQSxXQUFXLHFCQUFLO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyw2QkFBYTs7QUFFeEI7QUFDQTtBQUNBO0FBQ0EsYUFBYSw2QkFBYTtBQUMxQixNQUFNO0FBQ047QUFDQTtBQUNBLGFBQWEsNkJBQWE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVlO0FBQ2YsY0FBYyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVE7O0FBRTNDO0FBQ0EsV0FBVyxJQUFJO0FBQ2Y7O0FBRUEsRUFBRSxlQUFlOztBQUVqQjtBQUNBOzs7QUN2RTRCO0FBQ087QUFDTDs7QUFFZixTQUFTLGlCQUFRO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHdDQUF3QyxRQUFRLElBQUksVUFBTTtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGlCQUFRO0FBQ25COztBQUVBLDhCQUE4QixRQUFRLFNBQVMsVUFBTTs7QUFFckQsU0FBUyxTQUFTO0FBQ2xCOzs7QUM1QkEsNkJBQWUsY0FBUztBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQitCO0FBQ0U7QUFDUDtBQUNxQjtBQUNkOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyw0QkFBNEI7QUFDM0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CLGlDQUFpQyxVQUFVO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFlBQVksT0FBTztBQUMzQix3Q0FBd0MsUUFBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sVUFBVSxxQkFBSztBQUNmOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFEQUFxRCxnQ0FBTTtBQUMzRDtBQUNBO0FBQ0EsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixJQUFJO0FBQ3RCLDJCQUEyQixtQ0FBbUM7QUFDOUQsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVlO0FBQ2Ysc0JBQXNCLFdBQVc7O0FBRWpDO0FBQ0EsV0FBVyxJQUFJO0FBQ2Y7O0FBRUEsRUFBRSxlQUFlOztBQUVqQjtBQUNBOzs7QUNoSm1DO0FBQ1k7QUFDZDs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsU0FBUztBQUNsQjs7QUFFZTtBQUNmLHdCQUF3QixXQUFXOztBQUVuQztBQUNBLFdBQVcsSUFBSTtBQUNmOztBQUVBLFNBQVMsZUFBZTtBQUN4Qjs7O0FDbENtQztBQUNzQjtBQUN4Qjs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPO0FBQ1Asd0JBQXdCLFFBQVEsRUFBRSxRQUFRO0FBQzFDOztBQUVBO0FBQ0Esc0NBQXNDLFFBQVEsRUFBRSxRQUFRO0FBQ3hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxTQUFTO0FBQ2xCOztBQUVlO0FBQ2YscUJBQXFCLFdBQVc7O0FBRWhDO0FBQ0EsV0FBVyxJQUFJO0FBQ2Y7O0FBRUEsRUFBRSxlQUFlOztBQUVqQjtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7O0FDakRrRTtBQUNwQztBQUNHOztBQUVsQjtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qyx3QkFBUztBQUNqRDtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLHNCQUFNO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDLGdCQUFnQixxQkFBUztBQUN6QjtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDLFVBQVU7QUFDakQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxlQUFlO0FBQ3hCOzs7QUN6RGdDO0FBQ0Y7QUFDSztBQUNGOztBQUVsQjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixzQkFBTTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDLFVBQVU7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxlQUFlLENBQUMsU0FBUztBQUNsQzs7O0FDeERnQztBQUNGO0FBQ0c7O0FBRWxCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsc0JBQU07QUFDaEM7O0FBRUE7QUFDQSx3Q0FBd0MsVUFBVTtBQUNsRDs7QUFFQTtBQUNBLHVDQUF1QyxVQUFVO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxlQUFlO0FBQ3hCOzs7QUN2Q0E7QUFDQTs7QUFFZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRCxVQUFVO0FBQ1Ysb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsOEJBQThCLDJDQUEyQztBQUN6RTtBQUNBOztBQUVBO0FBQ0E7OztBQ3JFcUM7O0FBRXJDLFdBQVcsV0FBUTtBQUNuQjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsMkRBQTJELFdBQVE7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBLCtDQUFlLElBQUksRUFBQztBQUNiOzs7QUN6QjhCOztBQUVyQyxZQUFZLFdBQVE7QUFDcEI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQsZ0RBQWUsS0FBSyxFQUFDO0FBQ2Q7OztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0o4QjtBQUNzQjs7QUFFM0Q7QUFDQSxTQUFTLFdBQVE7QUFDakI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxrRkFBa0YsY0FBYyxJQUFJLFlBQVk7QUFDaEgsR0FBRztBQUNIOztBQUVPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1QjhCO0FBQ3FCOztBQUUxRCxVQUFVLFdBQVE7QUFDbEI7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0QsZ0ZBQWdGLGNBQWMsSUFBSSxXQUFXO0FBQzdHLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQsOENBQWUsR0FBRyxFQUFDO0FBQ1o7OztBQ2Q4QjtBQUNzQzs7QUFFM0UsV0FBVyxXQUFRO0FBQ25CLG1FQUFtRSxjQUFjLHVCQUF1QixjQUFjO0FBQ3RILENBQUM7QUFDRCw4QkFBOEIsWUFBWTtBQUMxQyxDQUFDO0FBQ0QseUJBQXlCLFlBQVk7QUFDckMsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRCwrQ0FBZSxJQUFJLEVBQUM7QUFDYjs7O0FDZDhCO0FBQ3dCOztBQUU3RCxhQUFhLFdBQVE7QUFDckIsbUVBQW1FLGNBQWM7QUFDakYsQ0FBQztBQUNELDhCQUE4QixjQUFjO0FBQzVDLENBQUM7QUFDRCx5QkFBeUIsY0FBYztBQUN2QyxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVELGlEQUFlLE1BQU0sRUFBQztBQUNmOzs7QUNkOEI7QUFDUTs7QUFFN0MsYUFBYSxXQUFRO0FBQ3JCO0FBQ0EsQ0FBQztBQUNELDhCQUE4QixjQUFjO0FBQzVDLENBQUM7QUFDRCx5QkFBeUIsY0FBYztBQUN2QyxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVELGlEQUFlLE1BQU0sRUFBQztBQUNmOzs7QUNkOEI7O0FBRXJDLGtCQUFrQixXQUFRO0FBQzFCO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFRO0FBQ2pCO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBLHNEQUFlLFdBQVcsRUFBQztBQUNwQjs7Ozs7QUN6QnFDO0FBQ3NFO0FBQ3hFO0FBQ2Q7QUFDNEI7QUFDdkI7QUFDUDs7QUFFMUIsSUFBSSxtQkFBYztBQUNsQixJQUFJLG1CQUFjLEdBQUcsbUJBQWM7QUFDbkMsSUFBSSxpQkFBWSxHQUFHLG1CQUFjO0FBQ2pDLElBQUksZ0JBQVcsR0FBRyxpQkFBWTtBQUM5QixJQUFJLGlCQUFZLEdBQUcsZ0JBQVc7QUFDOUIsb0JBQW9CLGdCQUFXO0FBQy9CLG1CQUFtQixnQkFBVzs7QUFFOUI7QUFDQTtBQUNBOztBQUVBLFNBQVMsV0FBTTtBQUNmO0FBQ0E7O0FBRU87QUFDUCxjQUFjLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUTtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsbUJBQWM7QUFDcEMsc0JBQXNCLG1CQUFjO0FBQ3BDLHNCQUFzQixtQkFBYztBQUNwQyxzQkFBc0IsbUJBQWM7QUFDcEMsc0JBQXNCLG1CQUFjO0FBQ3BDLHNCQUFzQixtQkFBYztBQUNwQyxzQkFBc0IsbUJBQWM7QUFDcEMsc0JBQXNCLG1CQUFjO0FBQ3BDLHNCQUFzQixpQkFBWTtBQUNsQyxzQkFBc0IsaUJBQVk7QUFDbEMsc0JBQXNCLGlCQUFZO0FBQ2xDLHNCQUFzQixpQkFBWTtBQUNsQyxzQkFBc0IsZ0JBQVc7QUFDakMsc0JBQXNCLGdCQUFXO0FBQ2pDLHNCQUFzQixpQkFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyx3QkFBUSxlQUFlLGNBQWM7QUFDbkQ7QUFDQSxlQUFlLHdCQUFRO0FBQ3ZCO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUix3QkFBd0Isd0JBQVE7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLFFBQVEsSUFBSSxXQUFNO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLElBQUk7QUFDckI7QUFDQTs7QUFFQTtBQUNBLFdBQVcsSUFBSTtBQUNmOztBQUVBO0FBQ0E7O0FBRUEsNkJBQWUsZ0JBQVc7QUFDMUIsU0FBUyxlQUFlLFVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxvQ0FBVTtBQUN2STs7O0FDdElxQzs7QUFFckMsY0FBYyxXQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSwyREFBMkQsV0FBUTtBQUNuRTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsa0RBQWUsT0FBTyxFQUFDO0FBQ2hCOzs7QUN6QjhCOztBQUVyQyxlQUFlLFdBQVE7QUFDdkI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQsbURBQWUsUUFBUSxFQUFDO0FBQ2pCOzs7QUNkOEI7QUFDTTs7QUFFM0M7QUFDQSxTQUFTLFdBQVE7QUFDakI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCwyQkFBMkIsWUFBWTtBQUN2QyxHQUFHO0FBQ0g7O0FBRU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzVCOEI7QUFDSzs7QUFFMUMsYUFBYSxXQUFRO0FBQ3JCO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNELHlCQUF5QixXQUFXO0FBQ3BDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQsaURBQWUsTUFBTSxFQUFDO0FBQ2Y7OztBQ2Q4QjtBQUNNOztBQUUzQyxjQUFjLFdBQVE7QUFDdEI7QUFDQSxDQUFDO0FBQ0QsOEJBQThCLFlBQVk7QUFDMUMsQ0FBQztBQUNELHlCQUF5QixZQUFZO0FBQ3JDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQsa0RBQWUsT0FBTyxFQUFDO0FBQ2hCOzs7QUNkOEI7QUFDUTs7QUFFN0MsZ0JBQWdCLFdBQVE7QUFDeEI7QUFDQSxDQUFDO0FBQ0QsOEJBQThCLGNBQWM7QUFDNUMsQ0FBQztBQUNELHlCQUF5QixjQUFjO0FBQ3ZDLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQsb0RBQWUsU0FBUyxFQUFDO0FBQ2xCOzs7QUNkeUI7QUFDUztBQUNpRTtBQUN6RTs7QUFFakMsNkJBQWUsbUJBQVc7QUFDMUIsU0FBUyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQU8sRUFBRSxZQUFRLEVBQUUsU0FBTyxFQUFFLFVBQU0sRUFBRSxXQUFPLEVBQUUsYUFBUyxFQUFFLFVBQVMsRUFBRSxlQUFjLEVBQUUsbUNBQVM7QUFDOUg7OztBQ1BzQztBQUNFO0FBQ0w7QUFDTDtBQUNLO0FBQ047O0FBRTdCLFNBQVMsc0JBQVc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU8sU0FBUyxlQUFJO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmLGNBQWMsU0FBUyxDQUFDLHNCQUFXLEdBQUcsUUFBUTs7QUFFOUM7QUFDQSxXQUFXLGVBQUk7QUFDZjs7QUFFQSxTQUFTLHNCQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMsT0FBTyxDQUFDLHNCQUFXOztBQUVqQztBQUNBLFdBQVcsZUFBSTtBQUNmOztBQUVBLFNBQVMsc0JBQXNCO0FBQy9COztBQUVPO0FBQ1AsY0FBYyxTQUFTLENBQUMsc0JBQVc7O0FBRW5DO0FBQ0EsV0FBVyxlQUFJO0FBQ2Y7O0FBRUEsU0FBUyxzQkFBc0I7QUFDL0I7O0FBRU87QUFDUCxjQUFjLE1BQU0sQ0FBQyxzQkFBVzs7QUFFaEM7QUFDQSxXQUFXLGVBQUk7QUFDZjs7QUFFQSxTQUFTLHNCQUFzQjtBQUMvQjs7QUFFTztBQUNQO0FBQ0E7OztBQzlGMkM7QUFDTDtBQUNFOztBQUV6QjtBQUNmO0FBQ0EscUJBQXFCLFFBQVE7O0FBRTdCO0FBQ0EsNkNBQTZDLHNCQUFNO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDLGdCQUFnQixxQkFBUztBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxzQkFBc0I7QUFDL0I7OztBQzdCc0M7QUFDRTtBQUNMO0FBQ0w7QUFDSTtBQUNDO0FBQ047O0FBRTdCLFNBQVMscUJBQVc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixRQUFRO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZixjQUFjLFNBQVMsQ0FBQyxxQkFBVyxHQUFHLFFBQVE7O0FBRTlDO0FBQ0EsV0FBVyxlQUFJO0FBQ2Y7O0FBRUEsU0FBUyxzQkFBc0I7QUFDL0I7O0FBRU87QUFDUCxjQUFjLE9BQU8sQ0FBQyxxQkFBVzs7QUFFakM7QUFDQSxXQUFXLGVBQUk7QUFDZjs7QUFFQSxTQUFTLHNCQUFzQjtBQUMvQjs7QUFFTztBQUNQLGNBQWMsU0FBUyxDQUFDLHFCQUFXOztBQUVuQztBQUNBLFdBQVcsZUFBSTtBQUNmOztBQUVBLFNBQVMsc0JBQXNCO0FBQy9COztBQUVPO0FBQ1AsY0FBYyxNQUFNLENBQUMscUJBQVc7O0FBRWhDO0FBQ0EsV0FBVyxlQUFJO0FBQ2Y7O0FBRUEsU0FBUyxzQkFBc0I7QUFDL0I7O0FBRU87QUFDUDtBQUNBOzs7QUN2RmdCOztBQUlJOztBQUlGOztBQUlIOztBQUlHOztBQUtDOztBQUtKOztBQUlLOztBQUlBOztBQUlDOztBQUlMOztBQUlHOztBQVFHOztBQUlROztBQVFUOztBQUlDOzs7Ozs7Ozs7QUN2RUM7O0FBT0c7O0FBT0w7O0FBS0E7O0FBS0Y7O0FBS0Q7O0FBbUJDOztBQUtDOztBQUtEOztBQUtLOztBQUtGOztBQUtEOztBQW1CQzs7QUFLQzs7QUFLRDs7Ozs7Ozs7Ozs7OztBQ3hHb0I7QUFDakI7QUFDRDtBQUNDO0FBQ0E7QUFDSztBQUNMO0FBQ0U7QUFDQztBQUNKO0FBQ0Q7QUFDQztBQUNDO0FBQ0E7QUFDQztBQUNIO0FBQ007QUFDRTtBQUNQO0FBQ0c7QUFDQztBQUNGO0FBQ0Q7QUFDVTtBQUNOO0FBQ0o7QUFDRDtBQUNPO0FBQ047QUFDSztBQUNIO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvZGlzdC9wYWNrYWdlLmpzPzAzNjciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcz8yYzM0Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2FycmF5LmpzP2JlMWQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvb3JkaW5hbC5qcz80YTljIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanM/ZDcwMiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcz8zNTQzIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcz9mMjAxIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanM/MTMyZiIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aWNrRm9ybWF0LmpzPzI3MGYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzPzg0ZDUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaWRlbnRpdHkuanM/NDU2NyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9uaWNlLmpzP2YxMWMiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbG9nLmpzPzcyYWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc3ltbG9nLmpzPzk5NWEiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcG93LmpzPzJhYmQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvcXVhbnRpbGUuanM/ZTIxMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGl6ZS5qcz82YzhmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RocmVzaG9sZC5qcz8zMTZmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanM/OTUzOSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanM/ZDFkNCIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzPzcyMjkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcz9iM2U3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcz9kNTVlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzPzY1MWUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzP2E4Y2UiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanM/N2QzMSIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcz8wODA2Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanM/NDZmNyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aW1lLmpzPzZhMTciLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNZZWFyLmpzP2Y5NTQiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNNb250aC5qcz8zNTZlIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjV2Vlay5qcz85ZjdhIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzP2ExZmIiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzPzU1YzYiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNNaW51dGUuanM/MzBjMyIsIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy91dGNUaW1lLmpzPzY0ZDkiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbC5qcz9mMDNmIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWxRdWFudGlsZS5qcz85MDAyIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2RpdmVyZ2luZy5qcz85OWY3Iiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzP2Q2NTUiLCJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbmRleC5qcz8wZDRjIiwid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kMy9pbmRleC5qcz84NjQyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgbmFtZSA9IFwiZDNcIjtcbmV4cG9ydCB2YXIgdmVyc2lvbiA9IFwiNS4xNi4wXCI7XG5leHBvcnQgdmFyIGRlc2NyaXB0aW9uID0gXCJEYXRhLURyaXZlbiBEb2N1bWVudHNcIjtcbmV4cG9ydCB2YXIga2V5d29yZHMgPSBbXCJkb21cIixcInZpc3VhbGl6YXRpb25cIixcInN2Z1wiLFwiYW5pbWF0aW9uXCIsXCJjYW52YXNcIl07XG5leHBvcnQgdmFyIGhvbWVwYWdlID0gXCJodHRwczovL2QzanMub3JnXCI7XG5leHBvcnQgdmFyIGxpY2Vuc2UgPSBcIkJTRC0zLUNsYXVzZVwiO1xuZXhwb3J0IHZhciBhdXRob3IgPSB7XCJuYW1lXCI6XCJNaWtlIEJvc3RvY2tcIixcInVybFwiOlwiaHR0cHM6Ly9ib3N0Lm9ja3Mub3JnL21pa2VcIn07XG5leHBvcnQgdmFyIG1haW4gPSBcImRpc3QvZDMubm9kZS5qc1wiO1xuZXhwb3J0IHZhciB1bnBrZyA9IFwiZGlzdC9kMy5taW4uanNcIjtcbmV4cG9ydCB2YXIganNkZWxpdnIgPSBcImRpc3QvZDMubWluLmpzXCI7XG5leHBvcnQgdmFyIG1vZHVsZSA9IFwiaW5kZXguanNcIjtcbmV4cG9ydCB2YXIgcmVwb3NpdG9yeSA9IHtcInR5cGVcIjpcImdpdFwiLFwidXJsXCI6XCJodHRwczovL2dpdGh1Yi5jb20vZDMvZDMuZ2l0XCJ9O1xuZXhwb3J0IHZhciBmaWxlcyA9IFtcImRpc3QvKiovKi5qc1wiLFwiaW5kZXguanNcIl07XG5leHBvcnQgdmFyIHNjcmlwdHMgPSB7XCJwcmV0ZXN0XCI6XCJyaW1yYWYgZGlzdCAmJiBta2RpciBkaXN0ICYmIGpzb24ybW9kdWxlIHBhY2thZ2UuanNvbiA+IGRpc3QvcGFja2FnZS5qcyAmJiByb2xsdXAgLWNcIixcInRlc3RcIjpcInRhcGUgJ3Rlc3QvKiovKi10ZXN0LmpzJ1wiLFwicHJlcHVibGlzaE9ubHlcIjpcInlhcm4gdGVzdFwiLFwicG9zdHB1Ymxpc2hcIjpcImdpdCBwdXNoICYmIGdpdCBwdXNoIC0tdGFncyAmJiBjZCAuLi9kMy5naXRodWIuY29tICYmIGdpdCBwdWxsICYmIGNwIC4uL2QzL2Rpc3QvZDMuanMgZDMudjUuanMgJiYgY3AgLi4vZDMvZGlzdC9kMy5taW4uanMgZDMudjUubWluLmpzICYmIGdpdCBhZGQgZDMudjUuanMgZDMudjUubWluLmpzICYmIGdpdCBjb21taXQgLW0gXFxcImQzICR7bnBtX3BhY2thZ2VfdmVyc2lvbn1cXFwiICYmIGdpdCBwdXNoICYmIGNkIC0gJiYgY2QgLi4vZDMtYm93ZXIgJiYgZ2l0IHB1bGwgJiYgY3AgLi4vZDMvTElDRU5TRSAuLi9kMy9SRUFETUUubWQgLi4vZDMvZGlzdC9kMy5qcyAuLi9kMy9kaXN0L2QzLm1pbi5qcyAuICYmIGdpdCBhZGQgLS0gTElDRU5TRSBSRUFETUUubWQgZDMuanMgZDMubWluLmpzICYmIGdpdCBjb21taXQgLW0gXFxcIiR7bnBtX3BhY2thZ2VfdmVyc2lvbn1cXFwiICYmIGdpdCB0YWcgLWFtIFxcXCIke25wbV9wYWNrYWdlX3ZlcnNpb259XFxcIiB2JHtucG1fcGFja2FnZV92ZXJzaW9ufSAmJiBnaXQgcHVzaCAmJiBnaXQgcHVzaCAtLXRhZ3MgJiYgY2QgLSAmJiB6aXAgLWogZGlzdC9kMy56aXAgLS0gTElDRU5TRSBSRUFETUUubWQgQVBJLm1kIENIQU5HRVMubWQgZGlzdC9kMy5qcyBkaXN0L2QzLm1pbi5qc1wifTtcbmV4cG9ydCB2YXIgZGV2RGVwZW5kZW5jaWVzID0ge1wianNvbjJtb2R1bGVcIjpcIjAuMFwiLFwicmltcmFmXCI6XCIyXCIsXCJyb2xsdXBcIjpcIjFcIixcInJvbGx1cC1wbHVnaW4tYXNjaWlcIjpcIjAuMFwiLFwicm9sbHVwLXBsdWdpbi1ub2RlLXJlc29sdmVcIjpcIjNcIixcInJvbGx1cC1wbHVnaW4tdGVyc2VyXCI6XCI1XCIsXCJ0YXBlXCI6XCI0XCJ9O1xuZXhwb3J0IHZhciBkZXBlbmRlbmNpZXMgPSB7XCJkMy1hcnJheVwiOlwiMVwiLFwiZDMtYXhpc1wiOlwiMVwiLFwiZDMtYnJ1c2hcIjpcIjFcIixcImQzLWNob3JkXCI6XCIxXCIsXCJkMy1jb2xsZWN0aW9uXCI6XCIxXCIsXCJkMy1jb2xvclwiOlwiMVwiLFwiZDMtY29udG91clwiOlwiMVwiLFwiZDMtZGlzcGF0Y2hcIjpcIjFcIixcImQzLWRyYWdcIjpcIjFcIixcImQzLWRzdlwiOlwiMVwiLFwiZDMtZWFzZVwiOlwiMVwiLFwiZDMtZmV0Y2hcIjpcIjFcIixcImQzLWZvcmNlXCI6XCIxXCIsXCJkMy1mb3JtYXRcIjpcIjFcIixcImQzLWdlb1wiOlwiMVwiLFwiZDMtaGllcmFyY2h5XCI6XCIxXCIsXCJkMy1pbnRlcnBvbGF0ZVwiOlwiMVwiLFwiZDMtcGF0aFwiOlwiMVwiLFwiZDMtcG9seWdvblwiOlwiMVwiLFwiZDMtcXVhZHRyZWVcIjpcIjFcIixcImQzLXJhbmRvbVwiOlwiMVwiLFwiZDMtc2NhbGVcIjpcIjJcIixcImQzLXNjYWxlLWNocm9tYXRpY1wiOlwiMVwiLFwiZDMtc2VsZWN0aW9uXCI6XCIxXCIsXCJkMy1zaGFwZVwiOlwiMVwiLFwiZDMtdGltZVwiOlwiMVwiLFwiZDMtdGltZS1mb3JtYXRcIjpcIjJcIixcImQzLXRpbWVyXCI6XCIxXCIsXCJkMy10cmFuc2l0aW9uXCI6XCIxXCIsXCJkMy12b3Jvbm9pXCI6XCIxXCIsXCJkMy16b29tXCI6XCIxXCJ9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRJbnRlcnBvbGF0b3IoZG9tYWluLCBpbnRlcnBvbGF0b3IpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMuaW50ZXJwb2xhdG9yKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMuaW50ZXJwb2xhdG9yKGludGVycG9sYXRvcikuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwidmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG5leHBvcnQgdmFyIG1hcCA9IGFycmF5Lm1hcDtcbmV4cG9ydCB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbiIsImltcG9ydCB7bWFwfSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmV4cG9ydCB2YXIgaW1wbGljaXQgPSB7bmFtZTogXCJpbXBsaWNpdFwifTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbCgpIHtcbiAgdmFyIGluZGV4ID0gbWFwKCksXG4gICAgICBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB1bmtub3duID0gaW1wbGljaXQ7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIHZhciBrZXkgPSBkICsgXCJcIiwgaSA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaSkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChrZXksIGkgPSBkb21haW4ucHVzaChkKSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVsoaSAtIDEpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBtYXAoKTtcbiAgICB2YXIgaSA9IC0xLCBuID0gXy5sZW5ndGgsIGQsIGtleTtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbChkb21haW4sIHJhbmdlKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG4iLCJpbXBvcnQge3JhbmdlIGFzIHNlcXVlbmNlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQgb3JkaW5hbCBmcm9tIFwiLi9vcmRpbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhbmQoKSB7XG4gIHZhciBzY2FsZSA9IG9yZGluYWwoKS51bmtub3duKHVuZGVmaW5lZCksXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW4sXG4gICAgICBvcmRpbmFsUmFuZ2UgPSBzY2FsZS5yYW5nZSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgc3RlcCxcbiAgICAgIGJhbmR3aWR0aCxcbiAgICAgIHJvdW5kID0gZmFsc2UsXG4gICAgICBwYWRkaW5nSW5uZXIgPSAwLFxuICAgICAgcGFkZGluZ091dGVyID0gMCxcbiAgICAgIGFsaWduID0gMC41O1xuXG4gIGRlbGV0ZSBzY2FsZS51bmtub3duO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBkb21haW4oKS5sZW5ndGgsXG4gICAgICAgIHJldmVyc2UgPSByYW5nZVsxXSA8IHJhbmdlWzBdLFxuICAgICAgICBzdGFydCA9IHJhbmdlW3JldmVyc2UgLSAwXSxcbiAgICAgICAgc3RvcCA9IHJhbmdlWzEgLSByZXZlcnNlXTtcbiAgICBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgxLCBuIC0gcGFkZGluZ0lubmVyICsgcGFkZGluZ091dGVyICogMik7XG4gICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICBzdGFydCArPSAoc3RvcCAtIHN0YXJ0IC0gc3RlcCAqIChuIC0gcGFkZGluZ0lubmVyKSkgKiBhbGlnbjtcbiAgICBiYW5kd2lkdGggPSBzdGVwICogKDEgLSBwYWRkaW5nSW5uZXIpO1xuICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgIHZhciB2YWx1ZXMgPSBzZXF1ZW5jZShuKS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gc3RhcnQgKyBzdGVwICogaTsgfSk7XG4gICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuYmFuZHdpZHRoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgfTtcblxuICBzY2FsZS5zdGVwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHN0ZXA7XG4gIH07XG5cbiAgc2NhbGUucm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWluKDEsIHBhZGRpbmdPdXRlciA9ICtfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgXyksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ091dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdPdXRlciA9ICtfLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKGRvbWFpbigpLCByYW5nZSlcbiAgICAgICAgLnJvdW5kKHJvdW5kKVxuICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgLnBhZGRpbmdPdXRlcihwYWRkaW5nT3V0ZXIpXG4gICAgICAgIC5hbGlnbihhbGlnbik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShyZXNjYWxlKCksIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50aXNoKHNjYWxlKSB7XG4gIHZhciBjb3B5ID0gc2NhbGUuY29weTtcblxuICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ0lubmVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ091dGVyO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goY29weSgpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCgpIHtcbiAgcmV0dXJuIHBvaW50aXNoKGJhbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAreDtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGUgYXMgaW50ZXJwb2xhdGVWYWx1ZSwgaW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhLCBiKSB7XG4gIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cbiAgICAgIDogY29uc3RhbnQoaXNOYU4oYikgPyBOYU4gOiAwLjUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGVyKGRvbWFpbikge1xuICB2YXIgYSA9IGRvbWFpblswXSwgYiA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sIHQ7XG4gIGlmIChhID4gYikgdCA9IGEsIGEgPSBiLCBiID0gdDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHgpKTsgfTtcbn1cblxuLy8gbm9ybWFsaXplKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4vLyBpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJhbmdlIHZhbHVlIHggaW4gW2EsYl0uXG5mdW5jdGlvbiBiaW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICBpZiAoZDEgPCBkMCkgZDAgPSBub3JtYWxpemUoZDEsIGQwKSwgcjAgPSBpbnRlcnBvbGF0ZShyMSwgcjApO1xuICBlbHNlIGQwID0gbm9ybWFsaXplKGQwLCBkMSksIHIwID0gaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbn1cblxuZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IG5vcm1hbGl6ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xuICAgIHJbaV0gPSBpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxuICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIGRvbWFpbiA9IHVuaXQsXG4gICAgICByYW5nZSA9IHVuaXQsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlVmFsdWUsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICB1bnRyYW5zZm9ybSxcbiAgICAgIHVua25vd24sXG4gICAgICBjbGFtcCA9IGlkZW50aXR5LFxuICAgICAgcGllY2V3aXNlLFxuICAgICAgb3V0cHV0LFxuICAgICAgaW5wdXQ7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAuY2FsbChfLCBudW1iZXIpLCBjbGFtcCA9PT0gaWRlbnRpdHkgfHwgKGNsYW1wID0gY2xhbXBlcihkb21haW4pKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9IF8gPyBjbGFtcGVyKGRvbWFpbikgOiBpZGVudGl0eSwgc2NhbGUpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyh0cmFuc2Zvcm0sIHVudHJhbnNmb3JtKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKHRyYW5zZm9ybSwgdW50cmFuc2Zvcm0pO1xufVxuIiwiaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdCwgZm9ybWF0UHJlZml4LCBmb3JtYXRTcGVjaWZpZXIsIHByZWNpc2lvbkZpeGVkLCBwcmVjaXNpb25QcmVmaXgsIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiZDMtZm9ybWF0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5LCBpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tGb3JtYXQoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIGkwID0gMCxcbiAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXG4gICAgICAgIHN0YXJ0ID0gZFtpMF0sXG4gICAgICAgIHN0b3AgPSBkW2kxXSxcbiAgICAgICAgc3RlcDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cblxuICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIGRbaTFdID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgZFtpMF0gPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIGRvbWFpbihkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoaWRlbnRpdHksIGlkZW50aXR5KTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGxpbmVhcigpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlkZW50aXR5KGRvbWFpbikge1xuICB2YXIgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogeDtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IHNjYWxlO1xuXG4gIHNjYWxlLmRvbWFpbiA9IHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IG1hcC5jYWxsKF8sIG51bWJlciksIHNjYWxlKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpZGVudGl0eShkb21haW4pLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgZG9tYWluID0gYXJndW1lbnRzLmxlbmd0aCA/IG1hcC5jYWxsKGRvbWFpbiwgbnVtYmVyKSA6IFswLCAxXTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRvbWFpbiwgaW50ZXJ2YWwpIHtcbiAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgdmFyIGkwID0gMCxcbiAgICAgIGkxID0gZG9tYWluLmxlbmd0aCAtIDEsXG4gICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICB4MSA9IGRvbWFpbltpMV0sXG4gICAgICB0O1xuXG4gIGlmICh4MSA8IHgwKSB7XG4gICAgdCA9IGkwLCBpMCA9IGkxLCBpMSA9IHQ7XG4gICAgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7XG4gIH1cblxuICBkb21haW5baTBdID0gaW50ZXJ2YWwuZmxvb3IoeDApO1xuICBkb21haW5baTFdID0gaW50ZXJ2YWwuY2VpbCh4MSk7XG4gIHJldHVybiBkb21haW47XG59XG4iLCJpbXBvcnQge3RpY2tzfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0fSBmcm9tIFwiZDMtZm9ybWF0XCI7XG5pbXBvcnQgbmljZSBmcm9tIFwiLi9uaWNlXCI7XG5pbXBvcnQge2NvcHksIHRyYW5zZm9ybWVyfSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Mb2coeCkge1xuICByZXR1cm4gTWF0aC5sb2coeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUV4cCh4KSB7XG4gIHJldHVybiBNYXRoLmV4cCh4KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTG9nbih4KSB7XG4gIHJldHVybiAtTWF0aC5sb2coLXgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1FeHBuKHgpIHtcbiAgcmV0dXJuIC1NYXRoLmV4cCgteCk7XG59XG5cbmZ1bmN0aW9uIHBvdzEwKHgpIHtcbiAgcmV0dXJuIGlzRmluaXRlKHgpID8gKyhcIjFlXCIgKyB4KSA6IHggPCAwID8gMCA6IHg7XG59XG5cbmZ1bmN0aW9uIHBvd3AoYmFzZSkge1xuICByZXR1cm4gYmFzZSA9PT0gMTAgPyBwb3cxMFxuICAgICAgOiBiYXNlID09PSBNYXRoLkUgPyBNYXRoLmV4cFxuICAgICAgOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnBvdyhiYXNlLCB4KTsgfTtcbn1cblxuZnVuY3Rpb24gbG9ncChiYXNlKSB7XG4gIHJldHVybiBiYXNlID09PSBNYXRoLkUgPyBNYXRoLmxvZ1xuICAgICAgOiBiYXNlID09PSAxMCAmJiBNYXRoLmxvZzEwXG4gICAgICB8fCBiYXNlID09PSAyICYmIE1hdGgubG9nMlxuICAgICAgfHwgKGJhc2UgPSBNYXRoLmxvZyhiYXNlKSwgZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5sb2coeCkgLyBiYXNlOyB9KTtcbn1cblxuZnVuY3Rpb24gcmVmbGVjdChmKSB7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIC1mKC14KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2dpc2godHJhbnNmb3JtKSB7XG4gIHZhciBzY2FsZSA9IHRyYW5zZm9ybSh0cmFuc2Zvcm1Mb2csIHRyYW5zZm9ybUV4cCksXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW4sXG4gICAgICBiYXNlID0gMTAsXG4gICAgICBsb2dzLFxuICAgICAgcG93cztcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIGxvZ3MgPSBsb2dwKGJhc2UpLCBwb3dzID0gcG93cChiYXNlKTtcbiAgICBpZiAoZG9tYWluKClbMF0gPCAwKSB7XG4gICAgICBsb2dzID0gcmVmbGVjdChsb2dzKSwgcG93cyA9IHJlZmxlY3QocG93cyk7XG4gICAgICB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nbiwgdHJhbnNmb3JtRXhwbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm1Mb2csIHRyYW5zZm9ybUV4cCk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHNjYWxlLmJhc2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYmFzZSA9ICtfLCByZXNjYWxlKCkpIDogYmFzZTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIHUgPSBkWzBdLFxuICAgICAgICB2ID0gZFtkLmxlbmd0aCAtIDFdLFxuICAgICAgICByO1xuXG4gICAgaWYgKHIgPSB2IDwgdSkgaSA9IHUsIHUgPSB2LCB2ID0gaTtcblxuICAgIHZhciBpID0gbG9ncyh1KSxcbiAgICAgICAgaiA9IGxvZ3ModiksXG4gICAgICAgIHAsXG4gICAgICAgIGssXG4gICAgICAgIHQsXG4gICAgICAgIG4gPSBjb3VudCA9PSBudWxsID8gMTAgOiArY291bnQsXG4gICAgICAgIHogPSBbXTtcblxuICAgIGlmICghKGJhc2UgJSAxKSAmJiBqIC0gaSA8IG4pIHtcbiAgICAgIGkgPSBNYXRoLnJvdW5kKGkpIC0gMSwgaiA9IE1hdGgucm91bmQoaikgKyAxO1xuICAgICAgaWYgKHUgPiAwKSBmb3IgKDsgaSA8IGo7ICsraSkge1xuICAgICAgICBmb3IgKGsgPSAxLCBwID0gcG93cyhpKTsgayA8IGJhc2U7ICsraykge1xuICAgICAgICAgIHQgPSBwICogaztcbiAgICAgICAgICBpZiAodCA8IHUpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICh0ID4gdikgYnJlYWs7XG4gICAgICAgICAgei5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgZm9yICg7IGkgPCBqOyArK2kpIHtcbiAgICAgICAgZm9yIChrID0gYmFzZSAtIDEsIHAgPSBwb3dzKGkpOyBrID49IDE7IC0taykge1xuICAgICAgICAgIHQgPSBwICogaztcbiAgICAgICAgICBpZiAodCA8IHUpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICh0ID4gdikgYnJlYWs7XG4gICAgICAgICAgei5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHogPSB0aWNrcyhpLCBqLCBNYXRoLm1pbihqIC0gaSwgbikpLm1hcChwb3dzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gciA/IHoucmV2ZXJzZSgpIDogejtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIGlmIChzcGVjaWZpZXIgPT0gbnVsbCkgc3BlY2lmaWVyID0gYmFzZSA9PT0gMTAgPyBcIi4wZVwiIDogXCIsXCI7XG4gICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09IFwiZnVuY3Rpb25cIikgc3BlY2lmaWVyID0gZm9ybWF0KHNwZWNpZmllcik7XG4gICAgaWYgKGNvdW50ID09PSBJbmZpbml0eSkgcmV0dXJuIHNwZWNpZmllcjtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcbiAgICB2YXIgayA9IE1hdGgubWF4KDEsIGJhc2UgKiBjb3VudCAvIHNjYWxlLnRpY2tzKCkubGVuZ3RoKTsgLy8gVE9ETyBmYXN0IGVzdGltYXRlP1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICB2YXIgaSA9IGQgLyBwb3dzKE1hdGgucm91bmQobG9ncyhkKSkpO1xuICAgICAgaWYgKGkgKiBiYXNlIDwgYmFzZSAtIDAuNSkgaSAqPSBiYXNlO1xuICAgICAgcmV0dXJuIGkgPD0gayA/IHNwZWNpZmllcihkKSA6IFwiXCI7XG4gICAgfTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvbWFpbihuaWNlKGRvbWFpbigpLCB7XG4gICAgICBmbG9vcjogZnVuY3Rpb24oeCkgeyByZXR1cm4gcG93cyhNYXRoLmZsb29yKGxvZ3MoeCkpKTsgfSxcbiAgICAgIGNlaWw6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5jZWlsKGxvZ3MoeCkpKTsgfVxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIHNjYWxlID0gbG9nZ2lzaCh0cmFuc2Zvcm1lcigpKS5kb21haW4oWzEsIDEwXSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG4iLCJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQge2NvcHksIHRyYW5zZm9ybWVyfSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TeW1sb2coYykge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBNYXRoLnNpZ24oeCkgKiBNYXRoLmxvZzFwKE1hdGguYWJzKHggLyBjKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVN5bWV4cChjKSB7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIE1hdGguc2lnbih4KSAqIE1hdGguZXhwbTEoTWF0aC5hYnMoeCkpICogYztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bWxvZ2lzaCh0cmFuc2Zvcm0pIHtcbiAgdmFyIGMgPSAxLCBzY2FsZSA9IHRyYW5zZm9ybSh0cmFuc2Zvcm1TeW1sb2coYyksIHRyYW5zZm9ybVN5bWV4cChjKSk7XG5cbiAgc2NhbGUuY29uc3RhbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0cmFuc2Zvcm0odHJhbnNmb3JtU3ltbG9nKGMgPSArXyksIHRyYW5zZm9ybVN5bWV4cChjKSkgOiBjO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzeW1sb2coKSB7XG4gIHZhciBzY2FsZSA9IHN5bWxvZ2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuIiwiaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhclwiO1xuaW1wb3J0IHtjb3B5LCBpZGVudGl0eSwgdHJhbnNmb3JtZXJ9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBvdyhleHBvbmVudCkge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4IDwgMCA/IC1NYXRoLnBvdygteCwgZXhwb25lbnQpIDogTWF0aC5wb3coeCwgZXhwb25lbnQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TcXJ0KHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLU1hdGguc3FydCgteCkgOiBNYXRoLnNxcnQoeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNxdWFyZSh4KSB7XG4gIHJldHVybiB4IDwgMCA/IC14ICogeCA6IHggKiB4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG93aXNoKHRyYW5zZm9ybSkge1xuICB2YXIgc2NhbGUgPSB0cmFuc2Zvcm0oaWRlbnRpdHksIGlkZW50aXR5KSxcbiAgICAgIGV4cG9uZW50ID0gMTtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHJldHVybiBleHBvbmVudCA9PT0gMSA/IHRyYW5zZm9ybShpZGVudGl0eSwgaWRlbnRpdHkpXG4gICAgICAgIDogZXhwb25lbnQgPT09IDAuNSA/IHRyYW5zZm9ybSh0cmFuc2Zvcm1TcXJ0LCB0cmFuc2Zvcm1TcXVhcmUpXG4gICAgICAgIDogdHJhbnNmb3JtKHRyYW5zZm9ybVBvdyhleHBvbmVudCksIHRyYW5zZm9ybVBvdygxIC8gZXhwb25lbnQpKTtcbiAgfVxuXG4gIHNjYWxlLmV4cG9uZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4cG9uZW50ID0gK18sIHJlc2NhbGUoKSkgOiBleHBvbmVudDtcbiAgfTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcG93KCkge1xuICB2YXIgc2NhbGUgPSBwb3dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBwb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNxcnQoKSB7XG4gIHJldHVybiBwb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiaW1wb3J0IHthc2NlbmRpbmcsIGJpc2VjdCwgcXVhbnRpbGUgYXMgdGhyZXNob2xkfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFudGlsZSgpIHtcbiAgdmFyIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgaSA9IDAsIG4gPSBNYXRoLm1heCgxLCByYW5nZS5sZW5ndGgpO1xuICAgIHRocmVzaG9sZHMgPSBuZXcgQXJyYXkobiAtIDEpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aHJlc2hvbGRzW2kgLSAxXSA9IHRocmVzaG9sZChkb21haW4sIGkgLyBuKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogcmFuZ2VbYmlzZWN0KHRocmVzaG9sZHMsIHgpXTtcbiAgfVxuXG4gIHNjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpIHtcbiAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgcmV0dXJuIGkgPCAwID8gW05hTiwgTmFOXSA6IFtcbiAgICAgIGkgPiAwID8gdGhyZXNob2xkc1tpIC0gMV0gOiBkb21haW5bMF0sXG4gICAgICBpIDwgdGhyZXNob2xkcy5sZW5ndGggPyB0aHJlc2hvbGRzW2ldIDogZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXVxuICAgIF07XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gXy5sZW5ndGgsIGQ7IGkgPCBuOyArK2kpIGlmIChkID0gX1tpXSwgZCAhPSBudWxsICYmICFpc05hTihkID0gK2QpKSBkb21haW4ucHVzaChkKTtcbiAgICBkb21haW4uc29ydChhc2NlbmRpbmcpO1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLnF1YW50aWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aHJlc2hvbGRzLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBxdWFudGlsZSgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhclwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpemUoKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB4MSA9IDEsXG4gICAgICBuID0gMSxcbiAgICAgIGRvbWFpbiA9IFswLjVdLFxuICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4geCA8PSB4ID8gcmFuZ2VbYmlzZWN0KGRvbWFpbiwgeCwgMCwgbildIDogdW5rbm93bjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIGkgPSAtMTtcbiAgICBkb21haW4gPSBuZXcgQXJyYXkobik7XG4gICAgd2hpbGUgKCsraSA8IG4pIGRvbWFpbltpXSA9ICgoaSArIDEpICogeDEgLSAoaSAtIG4pICogeDApIC8gKG4gKyAxKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXSwgeDEgPSArX1sxXSwgcmVzY2FsZSgpKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG4gPSAocmFuZ2UgPSBzbGljZS5jYWxsKF8pKS5sZW5ndGggLSAxLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl1cbiAgICAgICAgOiBpIDwgMSA/IFt4MCwgZG9tYWluWzBdXVxuICAgICAgICA6IGkgPj0gbiA/IFtkb21haW5bbiAtIDFdLCB4MV1cbiAgICAgICAgOiBbZG9tYWluW2kgLSAxXSwgZG9tYWluW2ldXTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS50aHJlc2hvbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcXVhbnRpemUoKVxuICAgICAgICAuZG9tYWluKFt4MCwgeDFdKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkobGluZWFyaXNoKHNjYWxlKSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJlc2hvbGQoKSB7XG4gIHZhciBkb21haW4gPSBbMC41XSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgdW5rbm93bixcbiAgICAgIG4gPSAxO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4geCA8PSB4ID8gcmFuZ2VbYmlzZWN0KGRvbWFpbiwgeCwgMCwgbildIDogdW5rbm93bjtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBzbGljZS5jYWxsKF8pLCBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoIC0gMSksIHNjYWxlKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpIHtcbiAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgcmV0dXJuIFtkb21haW5baSAtIDFdLCBkb21haW5baV1dO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aHJlc2hvbGQoKVxuICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuIiwidmFyIHQwID0gbmV3IERhdGUsXG4gICAgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmV3SW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZShkYXRlIC0gMSkpLCBvZmZzZXRpKGRhdGUsIDEpLCBmbG9vcmkoZGF0ZSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucm91bmQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIGQwID0gaW50ZXJ2YWwoZGF0ZSksXG4gICAgICAgIGQxID0gaW50ZXJ2YWwuY2VpbChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTtcbiAgfTtcblxuICBpbnRlcnZhbC5vZmZzZXQgPSBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICB2YXIgcmFuZ2UgPSBbXSwgcHJldmlvdXM7XG4gICAgc3RhcnQgPSBpbnRlcnZhbC5jZWlsKHN0YXJ0KTtcbiAgICBzdGVwID0gc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgaWYgKCEoc3RhcnQgPCBzdG9wKSB8fCAhKHN0ZXAgPiAwKSkgcmV0dXJuIHJhbmdlOyAvLyBhbHNvIGhhbmRsZXMgSW52YWxpZCBEYXRlXG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSBmdW5jdGlvbih0ZXN0KSB7XG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoY291bnQpIHtcbiAgICBpbnRlcnZhbC5jb3VudCA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHQwLnNldFRpbWUoK3N0YXJ0KSwgdDEuc2V0VGltZSgrZW5kKTtcbiAgICAgIGZsb29yaSh0MCksIGZsb29yaSh0MSk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihjb3VudCh0MCwgdDEpKTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwuZXZlcnkgPSBmdW5jdGlvbihzdGVwKSB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyBmdW5jdGlvbihkKSB7IHJldHVybiBmaWVsZChkKSAlIHN0ZXAgPT09IDA7IH1cbiAgICAgICAgICAgICAgOiBmdW5jdGlvbihkKSB7IHJldHVybiBpbnRlcnZhbC5jb3VudCgwLCBkKSAlIHN0ZXAgPT09IDA7IH0pO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gaW50ZXJ2YWw7XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgbW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRNb250aCgpIC0gc3RhcnQuZ2V0TW9udGgoKSArIChlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbW9udGg7XG5leHBvcnQgdmFyIG1vbnRocyA9IG1vbnRoLnJhbmdlO1xuIiwiZXhwb3J0IHZhciBkdXJhdGlvblNlY29uZCA9IDFlMztcbmV4cG9ydCB2YXIgZHVyYXRpb25NaW51dGUgPSA2ZTQ7XG5leHBvcnQgdmFyIGR1cmF0aW9uSG91ciA9IDM2ZTU7XG5leHBvcnQgdmFyIGR1cmF0aW9uRGF5ID0gODY0ZTU7XG5leHBvcnQgdmFyIGR1cmF0aW9uV2VlayA9IDYwNDhlNTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XG5leHBvcnQgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG5leHBvcnQgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciBzdW5kYXlzID0gc3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0dWVzZGF5cyA9IHR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHdlZG5lc2RheXMgPSB3ZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBmcmlkYXlzID0gZnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBzYXR1cmRheXMgPSBzYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXk7XG5leHBvcnQgdmFyIGRheXMgPSBkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBob3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kIC0gZGF0ZS5nZXRNaW51dGVzKCkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob3VyO1xuZXhwb3J0IHZhciBob3VycyA9IGhvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1pbnV0ZTtcbmV4cG9ydCB2YXIgbWludXRlcyA9IG1pbnV0ZS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHNlY29uZCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvblNlY29uZDtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNlY29uZDtcbmV4cG9ydCB2YXIgc2Vjb25kcyA9IHNlY29uZC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImltcG9ydCB7YmlzZWN0b3IsIHRpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7dGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lTWlsbGlzZWNvbmR9IGZyb20gXCJkMy10aW1lXCI7XG5pbXBvcnQge3RpbWVGb3JtYXR9IGZyb20gXCJkMy10aW1lLWZvcm1hdFwiO1xuaW1wb3J0IHttYXB9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHksIGlkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZVwiO1xuXG52YXIgZHVyYXRpb25TZWNvbmQgPSAxMDAwLFxuICAgIGR1cmF0aW9uTWludXRlID0gZHVyYXRpb25TZWNvbmQgKiA2MCxcbiAgICBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwLFxuICAgIGR1cmF0aW9uRGF5ID0gZHVyYXRpb25Ib3VyICogMjQsXG4gICAgZHVyYXRpb25XZWVrID0gZHVyYXRpb25EYXkgKiA3LFxuICAgIGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwLFxuICAgIGR1cmF0aW9uWWVhciA9IGR1cmF0aW9uRGF5ICogMzY1O1xuXG5mdW5jdGlvbiBkYXRlKHQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHQpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhcih5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsIGZvcm1hdCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGlkZW50aXR5LCBpZGVudGl0eSksXG4gICAgICBpbnZlcnQgPSBzY2FsZS5pbnZlcnQsXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgdmFyIGZvcm1hdE1pbGxpc2Vjb25kID0gZm9ybWF0KFwiLiVMXCIpLFxuICAgICAgZm9ybWF0U2Vjb25kID0gZm9ybWF0KFwiOiVTXCIpLFxuICAgICAgZm9ybWF0TWludXRlID0gZm9ybWF0KFwiJUk6JU1cIiksXG4gICAgICBmb3JtYXRIb3VyID0gZm9ybWF0KFwiJUkgJXBcIiksXG4gICAgICBmb3JtYXREYXkgPSBmb3JtYXQoXCIlYSAlZFwiKSxcbiAgICAgIGZvcm1hdFdlZWsgPSBmb3JtYXQoXCIlYiAlZFwiKSxcbiAgICAgIGZvcm1hdE1vbnRoID0gZm9ybWF0KFwiJUJcIiksXG4gICAgICBmb3JtYXRZZWFyID0gZm9ybWF0KFwiJVlcIik7XG5cbiAgdmFyIHRpY2tJbnRlcnZhbHMgPSBbXG4gICAgW3NlY29uZCwgIDEsICAgICAgZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsICA1LCAgNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAxNSwgMTUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMzAsIDMwICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFttaW51dGUsICAxLCAgICAgIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAgNSwgIDUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMTUsIDE1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDMwLCAzMCAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbICBob3VyLCAgMSwgICAgICBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDMsICAzICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICA2LCAgNiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAxMiwgMTIgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgIGRheSwgIDEsICAgICAgZHVyYXRpb25EYXkgICBdLFxuICAgIFsgICBkYXksICAyLCAgMiAqIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICB3ZWVrLCAgMSwgICAgICBkdXJhdGlvbldlZWsgIF0sXG4gICAgWyBtb250aCwgIDEsICAgICAgZHVyYXRpb25Nb250aCBdLFxuICAgIFsgbW9udGgsICAzLCAgMyAqIGR1cmF0aW9uTW9udGggXSxcbiAgICBbICB5ZWFyLCAgMSwgICAgICBkdXJhdGlvblllYXIgIF1cbiAgXTtcblxuICBmdW5jdGlvbiB0aWNrRm9ybWF0KGRhdGUpIHtcbiAgICByZXR1cm4gKHNlY29uZChkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaWxsaXNlY29uZFxuICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgOiBob3VyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbnV0ZVxuICAgICAgICA6IGRheShkYXRlKSA8IGRhdGUgPyBmb3JtYXRIb3VyXG4gICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgOiB5ZWFyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1vbnRoXG4gICAgICAgIDogZm9ybWF0WWVhcikoZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKGludGVydmFsID09IG51bGwpIGludGVydmFsID0gMTA7XG5cbiAgICAvLyBJZiBhIGRlc2lyZWQgdGljayBjb3VudCBpcyBzcGVjaWZpZWQsIHBpY2sgYSByZWFzb25hYmxlIHRpY2sgaW50ZXJ2YWxcbiAgICAvLyBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHRoZSBkb21haW4gYW5kIGEgcm91Z2ggZXN0aW1hdGUgb2YgdGljayBzaXplLlxuICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIGludGVydmFsIGlzIGFscmVhZHkgYSB0aW1lIGludGVydmFsIGFuZCB1c2UgaXQuXG4gICAgaWYgKHR5cGVvZiBpbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdmFyIHRhcmdldCA9IE1hdGguYWJzKHN0b3AgLSBzdGFydCkgLyBpbnRlcnZhbCxcbiAgICAgICAgICBpID0gYmlzZWN0b3IoZnVuY3Rpb24oaSkgeyByZXR1cm4gaVsyXTsgfSkucmlnaHQodGlja0ludGVydmFscywgdGFyZ2V0KTtcbiAgICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkge1xuICAgICAgICBzdGVwID0gdGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGludGVydmFsKTtcbiAgICAgICAgaW50ZXJ2YWwgPSB5ZWFyO1xuICAgICAgfSBlbHNlIGlmIChpKSB7XG4gICAgICAgIGkgPSB0aWNrSW50ZXJ2YWxzW3RhcmdldCAvIHRpY2tJbnRlcnZhbHNbaSAtIDFdWzJdIDwgdGlja0ludGVydmFsc1tpXVsyXSAvIHRhcmdldCA/IGkgLSAxIDogaV07XG4gICAgICAgIHN0ZXAgPSBpWzFdO1xuICAgICAgICBpbnRlcnZhbCA9IGlbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwID0gTWF0aC5tYXgodGlja1N0ZXAoc3RhcnQsIHN0b3AsIGludGVydmFsKSwgMSk7XG4gICAgICAgIGludGVydmFsID0gbWlsbGlzZWNvbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXAgPT0gbnVsbCA/IGludGVydmFsIDogaW50ZXJ2YWwuZXZlcnkoc3RlcCk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGludmVydCh5KSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZG9tYWluKG1hcC5jYWxsKF8sIG51bWJlcikpIDogZG9tYWluKCkubWFwKGRhdGUpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oaW50ZXJ2YWwsIHN0ZXApIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICB0MCA9IGRbMF0sXG4gICAgICAgIHQxID0gZFtkLmxlbmd0aCAtIDFdLFxuICAgICAgICByID0gdDEgPCB0MCxcbiAgICAgICAgdDtcbiAgICBpZiAocikgdCA9IHQwLCB0MCA9IHQxLCB0MSA9IHQ7XG4gICAgdCA9IHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgdDAsIHQxLCBzdGVwKTtcbiAgICB0ID0gdCA/IHQucmFuZ2UodDAsIHQxICsgMSkgOiBbXTsgLy8gaW5jbHVzaXZlIHN0b3BcbiAgICByZXR1cm4gciA/IHQucmV2ZXJzZSgpIDogdDtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiBzcGVjaWZpZXIgPT0gbnVsbCA/IHRpY2tGb3JtYXQgOiBmb3JtYXQoc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oaW50ZXJ2YWwsIHN0ZXApIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiAoaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgc3RlcCkpXG4gICAgICAgID8gZG9tYWluKG5pY2UoZCwgaW50ZXJ2YWwpKVxuICAgICAgICA6IHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgY2FsZW5kYXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCBmb3JtYXQpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGNhbGVuZGFyKHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZU1pbGxpc2Vjb25kLCB0aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pLCBhcmd1bWVudHMpO1xufVxuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5cyA9IHV0Y01vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXl9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNEYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0RheTtcbmV4cG9ydCB2YXIgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXJ9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNIb3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDSG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNIb3VyO1xuZXhwb3J0IHZhciB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNNaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDU2Vjb25kcygwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDTWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01pbnV0ZTtcbmV4cG9ydCB2YXIgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcbiIsImltcG9ydCB7Y2FsZW5kYXJ9IGZyb20gXCIuL3RpbWVcIjtcbmltcG9ydCB7dXRjRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7dXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y01pbGxpc2Vjb25kfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y01pbGxpc2Vjb25kLCB1dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMjAwMCwgMCwgMSksIERhdGUuVVRDKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIGsxMCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5LFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IGludGVycG9sYXRvcihrMTAgPT09IDAgPyAwLjUgOiAoeCA9ICh0cmFuc2Zvcm0oeCkgLSB0MCkgKiBrMTAsIGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeCkpIDogeCkpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHQwID0gdHJhbnNmb3JtKHgwID0gK19bMF0pLCB0MSA9IHRyYW5zZm9ybSh4MSA9ICtfWzFdKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLmludGVycG9sYXRvcihzb3VyY2UuaW50ZXJwb2xhdG9yKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbCgpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWwoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc2VxdWVudGlhbFN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsU3FydCgpIHtcbiAgcmV0dXJuIHNlcXVlbnRpYWxQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiaW1wb3J0IHthc2NlbmRpbmcsIGJpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbFF1YW50aWxlKCkge1xuICB2YXIgZG9tYWluID0gW10sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgaWYgKCFpc05hTih4ID0gK3gpKSByZXR1cm4gaW50ZXJwb2xhdG9yKChiaXNlY3QoZG9tYWluLCB4KSAtIDEpIC8gKGRvbWFpbi5sZW5ndGggLSAxKSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBfLmxlbmd0aCwgZDsgaSA8IG47ICsraSkgaWYgKGQgPSBfW2ldLCBkICE9IG51bGwgJiYgIWlzTmFOKGQgPSArZCkpIGRvbWFpbi5wdXNoKGQpO1xuICAgIGRvbWFpbi5zb3J0KGFzY2VuZGluZyk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXF1ZW50aWFsUXVhbnRpbGUoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7aWRlbnRpdHl9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdEludGVycG9sYXRvcn0gZnJvbSBcIi4vaW5pdFwiO1xuaW1wb3J0IHtsaW5lYXJpc2h9IGZyb20gXCIuL2xpbmVhclwiO1xuaW1wb3J0IHtsb2dnaXNofSBmcm9tIFwiLi9sb2dcIjtcbmltcG9ydCB7Y29weX0gZnJvbSBcIi4vc2VxdWVudGlhbFwiO1xuaW1wb3J0IHtzeW1sb2dpc2h9IGZyb20gXCIuL3N5bWxvZ1wiO1xuaW1wb3J0IHtwb3dpc2h9IGZyb20gXCIuL3Bvd1wiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIHgwID0gMCxcbiAgICAgIHgxID0gMC41LFxuICAgICAgeDIgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIHQyLFxuICAgICAgazEwLFxuICAgICAgazIxLFxuICAgICAgaW50ZXJwb2xhdG9yID0gaWRlbnRpdHksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBjbGFtcCA9IGZhbHNlLFxuICAgICAgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogKHggPSAwLjUgKyAoKHggPSArdHJhbnNmb3JtKHgpKSAtIHQxKSAqICh4IDwgdDEgPyBrMTAgOiBrMjEpLCBpbnRlcnBvbGF0b3IoY2xhbXAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB4KSkgOiB4KSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodDAgPSB0cmFuc2Zvcm0oeDAgPSArX1swXSksIHQxID0gdHJhbnNmb3JtKHgxID0gK19bMV0pLCB0MiA9IHRyYW5zZm9ybSh4MiA9ICtfWzJdKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDAuNSAvICh0MSAtIHQwKSwgazIxID0gdDEgPT09IHQyID8gMCA6IDAuNSAvICh0MiAtIHQxKSwgc2NhbGUpIDogW3gwLCB4MSwgeDJdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCB0MiA9IHQoeDIpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMC41IC8gKHQxIC0gdDApLCBrMjEgPSB0MSA9PT0gdDIgPyAwIDogMC41IC8gKHQyIC0gdDEpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGl2ZXJnaW5nKCkge1xuICB2YXIgc2NhbGUgPSBsaW5lYXJpc2godHJhbnNmb3JtZXIoKShpZGVudGl0eSkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMC4xLCAxLCAxMF0pO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nTG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ1N5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgZGl2ZXJnaW5nU3ltbG9nKCkpLmNvbnN0YW50KHNjYWxlLmNvbnN0YW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nUG93KCkge1xuICB2YXIgc2NhbGUgPSBwb3dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdTcXJ0KCkge1xuICByZXR1cm4gZGl2ZXJnaW5nUG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmRcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5XCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWxcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93XCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGRcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbFwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmdcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZUludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZU1pbGxpc2Vjb25kLFxuICBtaWxsaXNlY29uZHMgYXMgdGltZU1pbGxpc2Vjb25kcyxcbiAgZGVmYXVsdCBhcyB1dGNNaWxsaXNlY29uZCxcbiAgbWlsbGlzZWNvbmRzIGFzIHV0Y01pbGxpc2Vjb25kc1xufSBmcm9tIFwiLi9taWxsaXNlY29uZC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVTZWNvbmQsXG4gIHNlY29uZHMgYXMgdGltZVNlY29uZHMsXG4gIGRlZmF1bHQgYXMgdXRjU2Vjb25kLFxuICBzZWNvbmRzIGFzIHV0Y1NlY29uZHNcbn0gZnJvbSBcIi4vc2Vjb25kLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZU1pbnV0ZSxcbiAgbWludXRlcyBhcyB0aW1lTWludXRlc1xufSBmcm9tIFwiLi9taW51dGUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lSG91cixcbiAgaG91cnMgYXMgdGltZUhvdXJzXG59IGZyb20gXCIuL2hvdXIuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lRGF5LFxuICBkYXlzIGFzIHRpbWVEYXlzXG59IGZyb20gXCIuL2RheS5qc1wiO1xuXG5leHBvcnQge1xuICBzdW5kYXkgYXMgdGltZVdlZWssXG4gIHN1bmRheXMgYXMgdGltZVdlZWtzLFxuICBzdW5kYXkgYXMgdGltZVN1bmRheSxcbiAgc3VuZGF5cyBhcyB0aW1lU3VuZGF5cyxcbiAgbW9uZGF5IGFzIHRpbWVNb25kYXksXG4gIG1vbmRheXMgYXMgdGltZU1vbmRheXMsXG4gIHR1ZXNkYXkgYXMgdGltZVR1ZXNkYXksXG4gIHR1ZXNkYXlzIGFzIHRpbWVUdWVzZGF5cyxcbiAgd2VkbmVzZGF5IGFzIHRpbWVXZWRuZXNkYXksXG4gIHdlZG5lc2RheXMgYXMgdGltZVdlZG5lc2RheXMsXG4gIHRodXJzZGF5IGFzIHRpbWVUaHVyc2RheSxcbiAgdGh1cnNkYXlzIGFzIHRpbWVUaHVyc2RheXMsXG4gIGZyaWRheSBhcyB0aW1lRnJpZGF5LFxuICBmcmlkYXlzIGFzIHRpbWVGcmlkYXlzLFxuICBzYXR1cmRheSBhcyB0aW1lU2F0dXJkYXksXG4gIHNhdHVyZGF5cyBhcyB0aW1lU2F0dXJkYXlzXG59IGZyb20gXCIuL3dlZWsuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lTW9udGgsXG4gIG1vbnRocyBhcyB0aW1lTW9udGhzXG59IGZyb20gXCIuL21vbnRoLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZVllYXIsXG4gIHllYXJzIGFzIHRpbWVZZWFyc1xufSBmcm9tIFwiLi95ZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjTWludXRlLFxuICB1dGNNaW51dGVzIGFzIHV0Y01pbnV0ZXNcbn0gZnJvbSBcIi4vdXRjTWludXRlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjSG91cixcbiAgdXRjSG91cnMgYXMgdXRjSG91cnNcbn0gZnJvbSBcIi4vdXRjSG91ci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y0RheSxcbiAgdXRjRGF5cyBhcyB1dGNEYXlzXG59IGZyb20gXCIuL3V0Y0RheS5qc1wiO1xuXG5leHBvcnQge1xuICB1dGNTdW5kYXkgYXMgdXRjV2VlayxcbiAgdXRjU3VuZGF5cyBhcyB1dGNXZWVrcyxcbiAgdXRjU3VuZGF5IGFzIHV0Y1N1bmRheSxcbiAgdXRjU3VuZGF5cyBhcyB1dGNTdW5kYXlzLFxuICB1dGNNb25kYXkgYXMgdXRjTW9uZGF5LFxuICB1dGNNb25kYXlzIGFzIHV0Y01vbmRheXMsXG4gIHV0Y1R1ZXNkYXkgYXMgdXRjVHVlc2RheSxcbiAgdXRjVHVlc2RheXMgYXMgdXRjVHVlc2RheXMsXG4gIHV0Y1dlZG5lc2RheSBhcyB1dGNXZWRuZXNkYXksXG4gIHV0Y1dlZG5lc2RheXMgYXMgdXRjV2VkbmVzZGF5cyxcbiAgdXRjVGh1cnNkYXkgYXMgdXRjVGh1cnNkYXksXG4gIHV0Y1RodXJzZGF5cyBhcyB1dGNUaHVyc2RheXMsXG4gIHV0Y0ZyaWRheSBhcyB1dGNGcmlkYXksXG4gIHV0Y0ZyaWRheXMgYXMgdXRjRnJpZGF5cyxcbiAgdXRjU2F0dXJkYXkgYXMgdXRjU2F0dXJkYXksXG4gIHV0Y1NhdHVyZGF5cyBhcyB1dGNTYXR1cmRheXNcbn0gZnJvbSBcIi4vdXRjV2Vlay5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHV0Y01vbnRoLFxuICB1dGNNb250aHMgYXMgdXRjTW9udGhzXG59IGZyb20gXCIuL3V0Y01vbnRoLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjWWVhcixcbiAgdXRjWWVhcnMgYXMgdXRjWWVhcnNcbn0gZnJvbSBcIi4vdXRjWWVhci5qc1wiO1xuIiwiZXhwb3J0IHt2ZXJzaW9ufSBmcm9tIFwiLi9kaXN0L3BhY2thZ2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1hcnJheVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWF4aXNcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1icnVzaFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNob3JkXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29udG91clwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZHJhZ1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRzdlwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWVhc2VcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mZXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZvcmNlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZm9ybWF0XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZ2VvXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtaGllcmFyY2h5XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1wYXRoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcG9seWdvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcmFuZG9tXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtc2NhbGVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zY2FsZS1jaHJvbWF0aWNcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zaGFwZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10aW1lLWZvcm1hdFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWVyXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXZvcm9ub2lcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy16b29tXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37790\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.dagre.cd1dde4c5f7b3798.bundle.js b/assets/demo/site/npm.dagre.cd1dde4c5f7b3798.bundle.js
new file mode 100644
index 00000000..297b4b47
--- /dev/null
+++ b/assets/demo/site/npm.dagre.cd1dde4c5f7b3798.bundle.js
@@ -0,0 +1 @@
+(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[7217],{70681:(module,__unused_webpack_exports,__webpack_require__)=>{eval('/*\nCopyright (c) 2012-2014 Chris Pettitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nmodule.exports = {\n graphlib: __webpack_require__(70574),\n\n layout: __webpack_require__(98123),\n debug: __webpack_require__(27570),\n util: {\n time: (__webpack_require__(11138).time),\n notime: (__webpack_require__(11138).notime)\n },\n version: __webpack_require__(88177)\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA2ODEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLEtBQWdCOztBQUVwQyxVQUFVLG1CQUFPLENBQUMsS0FBYztBQUNoQyxTQUFTLG1CQUFPLENBQUMsS0FBYTtBQUM5QjtBQUNBLFVBQVUsaUNBQTBCO0FBQ3BDLFlBQVksbUNBQTRCO0FBQ3hDLEdBQUc7QUFDSCxXQUFXLG1CQUFPLENBQUMsS0FBZTtBQUNsQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9pbmRleC5qcz8zOWE2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTItMjAxNCBDaHJpcyBQZXR0aXR0XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cbiovXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBncmFwaGxpYjogcmVxdWlyZShcIi4vbGliL2dyYXBobGliXCIpLFxuXG4gIGxheW91dDogcmVxdWlyZShcIi4vbGliL2xheW91dFwiKSxcbiAgZGVidWc6IHJlcXVpcmUoXCIuL2xpYi9kZWJ1Z1wiKSxcbiAgdXRpbDoge1xuICAgIHRpbWU6IHJlcXVpcmUoXCIuL2xpYi91dGlsXCIpLnRpbWUsXG4gICAgbm90aW1lOiByZXF1aXJlKFwiLi9saWIvdXRpbFwiKS5ub3RpbWVcbiAgfSxcbiAgdmVyc2lvbjogcmVxdWlyZShcIi4vbGliL3ZlcnNpb25cIilcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70681\n')},92188:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n greedyFAS = __webpack_require__(74079);\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\nfunction run(g) {\n var fas = (g.graph().acyclicer === "greedy"\n ? greedyFAS(g, weightFn(g))\n : dfsFAS(g));\n _.forEach(fas, function(e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId("rev"));\n });\n\n function weightFn(g) {\n return function(e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [],\n stack = {},\n visited = {};\n\n function dfs(v) {\n if (_.has(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function(e) {\n if (_.has(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function(e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTIxODguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsZ0JBQWdCLG1CQUFPLENBQUMsS0FBYzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvYWN5Y2xpYy5qcz9iZjRlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgXyA9IHJlcXVpcmUoXCIuL2xvZGFzaFwiKSxcbiAgICBncmVlZHlGQVMgPSByZXF1aXJlKFwiLi9ncmVlZHktZmFzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcnVuOiBydW4sXG4gIHVuZG86IHVuZG9cbn07XG5cbmZ1bmN0aW9uIHJ1bihnKSB7XG4gIHZhciBmYXMgPSAoZy5ncmFwaCgpLmFjeWNsaWNlciA9PT0gXCJncmVlZHlcIlxuICAgICAgICAgICAgICAgID8gZ3JlZWR5RkFTKGcsIHdlaWdodEZuKGcpKVxuICAgICAgICAgICAgICAgIDogZGZzRkFTKGcpKTtcbiAgXy5mb3JFYWNoKGZhcywgZnVuY3Rpb24oZSkge1xuICAgIHZhciBsYWJlbCA9IGcuZWRnZShlKTtcbiAgICBnLnJlbW92ZUVkZ2UoZSk7XG4gICAgbGFiZWwuZm9yd2FyZE5hbWUgPSBlLm5hbWU7XG4gICAgbGFiZWwucmV2ZXJzZWQgPSB0cnVlO1xuICAgIGcuc2V0RWRnZShlLncsIGUudiwgbGFiZWwsIF8udW5pcXVlSWQoXCJyZXZcIikpO1xuICB9KTtcblxuICBmdW5jdGlvbiB3ZWlnaHRGbihnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBnLmVkZ2UoZSkud2VpZ2h0O1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGZzRkFTKGcpIHtcbiAgdmFyIGZhcyA9IFtdLFxuICAgICAgc3RhY2sgPSB7fSxcbiAgICAgIHZpc2l0ZWQgPSB7fTtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2aXNpdGVkW3ZdID0gdHJ1ZTtcbiAgICBzdGFja1t2XSA9IHRydWU7XG4gICAgXy5mb3JFYWNoKGcub3V0RWRnZXModiksIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChfLmhhcyhzdGFjaywgZS53KSkge1xuICAgICAgICBmYXMucHVzaChlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRmcyhlLncpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRlbGV0ZSBzdGFja1t2XTtcbiAgfVxuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGRmcyk7XG4gIHJldHVybiBmYXM7XG59XG5cbmZ1bmN0aW9uIHVuZG8oZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGlmIChsYWJlbC5yZXZlcnNlZCkge1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuXG4gICAgICB2YXIgZm9yd2FyZE5hbWUgPSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGRlbGV0ZSBsYWJlbC5yZXZlcnNlZDtcbiAgICAgIGRlbGV0ZSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGcuc2V0RWRnZShlLncsIGUudiwgbGFiZWwsIGZvcndhcmROYW1lKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///92188\n')},61133:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n util = __webpack_require__(11138);\n\nmodule.exports = addBorderSegments;\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v),\n node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (_.has(node, "minRank")) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1;\n rank < maxRank;\n ++rank) {\n addBorderNode(g, "borderLeft", "_bl", v, node, rank);\n addBorderNode(g, "borderRight", "_br", v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop },\n prev = sgNode[prop][rank - 1],\n curr = util.addDummyNode(g, "border", label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjExMzMuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEtBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixtREFBbUQ7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixXQUFXO0FBQ3ZDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL2FkZC1ib3JkZXItc2VnbWVudHMuanM/ZmNjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgXyA9IHJlcXVpcmUoXCIuL2xvZGFzaFwiKSxcbiAgICB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBhZGRCb3JkZXJTZWdtZW50cztcblxuZnVuY3Rpb24gYWRkQm9yZGVyU2VnbWVudHMoZykge1xuICBmdW5jdGlvbiBkZnModikge1xuICAgIHZhciBjaGlsZHJlbiA9IGcuY2hpbGRyZW4odiksXG4gICAgICAgIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgXy5mb3JFYWNoKGNoaWxkcmVuLCBkZnMpO1xuICAgIH1cblxuICAgIGlmIChfLmhhcyhub2RlLCBcIm1pblJhbmtcIikpIHtcbiAgICAgIG5vZGUuYm9yZGVyTGVmdCA9IFtdO1xuICAgICAgbm9kZS5ib3JkZXJSaWdodCA9IFtdO1xuICAgICAgZm9yICh2YXIgcmFuayA9IG5vZGUubWluUmFuaywgbWF4UmFuayA9IG5vZGUubWF4UmFuayArIDE7XG4gICAgICAgICAgIHJhbmsgPCBtYXhSYW5rO1xuICAgICAgICAgICArK3JhbmspIHtcbiAgICAgICAgYWRkQm9yZGVyTm9kZShnLCBcImJvcmRlckxlZnRcIiwgXCJfYmxcIiwgdiwgbm9kZSwgcmFuayk7XG4gICAgICAgIGFkZEJvcmRlck5vZGUoZywgXCJib3JkZXJSaWdodFwiLCBcIl9iclwiLCB2LCBub2RlLCByYW5rKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBkZnMpO1xufVxuXG5mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcsIHByb3AsIHByZWZpeCwgc2csIHNnTm9kZSwgcmFuaykge1xuICB2YXIgbGFiZWwgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHJhbms6IHJhbmssIGJvcmRlclR5cGU6IHByb3AgfSxcbiAgICAgIHByZXYgPSBzZ05vZGVbcHJvcF1bcmFuayAtIDFdLFxuICAgICAgY3VyciA9IHV0aWwuYWRkRHVtbXlOb2RlKGcsIFwiYm9yZGVyXCIsIGxhYmVsLCBwcmVmaXgpO1xuICBzZ05vZGVbcHJvcF1bcmFua10gPSBjdXJyO1xuICBnLnNldFBhcmVudChjdXJyLCBzZyk7XG4gIGlmIChwcmV2KSB7XG4gICAgZy5zZXRFZGdlKHByZXYsIGN1cnIsIHsgd2VpZ2h0OiAxIH0pO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61133\n')},53258:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436);\n\nmodule.exports = {\n adjust: adjust,\n undo: undo\n};\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === "lr" || rankDir === "rl") {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === "bt" || rankDir === "rl") {\n reverseY(g);\n }\n\n if (rankDir === "lr" || rankDir === "rl") {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function(v) { swapWidthHeightOne(g.node(v)); });\n _.forEach(g.edges(), function(e) { swapWidthHeightOne(g.edge(e)); });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function(v) { reverseYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (_.has(edge, "y")) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function(v) { swapXYOne(g.node(v)); });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (_.has(edge, "x")) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyNTguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVU7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsZ0NBQWdDO0FBQ3JFLHFDQUFxQyxnQ0FBZ0M7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQyx5QkFBeUI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsdUJBQXVCOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvY29vcmRpbmF0ZS1zeXN0ZW0uanM/YzFkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF8gPSByZXF1aXJlKFwiLi9sb2Rhc2hcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGp1c3Q6IGFkanVzdCxcbiAgdW5kbzogdW5kb1xufTtcblxuZnVuY3Rpb24gYWRqdXN0KGcpIHtcbiAgdmFyIHJhbmtEaXIgPSBnLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmFua0RpciA9PT0gXCJsclwiIHx8IHJhbmtEaXIgPT09IFwicmxcIikge1xuICAgIHN3YXBXaWR0aEhlaWdodChnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmRvKGcpIHtcbiAgdmFyIHJhbmtEaXIgPSBnLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmFua0RpciA9PT0gXCJidFwiIHx8IHJhbmtEaXIgPT09IFwicmxcIikge1xuICAgIHJldmVyc2VZKGcpO1xuICB9XG5cbiAgaWYgKHJhbmtEaXIgPT09IFwibHJcIiB8fCByYW5rRGlyID09PSBcInJsXCIpIHtcbiAgICBzd2FwWFkoZyk7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN3YXBXaWR0aEhlaWdodChnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHsgc3dhcFdpZHRoSGVpZ2h0T25lKGcubm9kZSh2KSk7IH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7IHN3YXBXaWR0aEhlaWdodE9uZShnLmVkZ2UoZSkpOyB9KTtcbn1cblxuZnVuY3Rpb24gc3dhcFdpZHRoSGVpZ2h0T25lKGF0dHJzKSB7XG4gIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gIGF0dHJzLndpZHRoID0gYXR0cnMuaGVpZ2h0O1xuICBhdHRycy5oZWlnaHQgPSB3O1xufVxuXG5mdW5jdGlvbiByZXZlcnNlWShnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHsgcmV2ZXJzZVlPbmUoZy5ub2RlKHYpKTsgfSk7XG5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIF8uZm9yRWFjaChlZGdlLnBvaW50cywgcmV2ZXJzZVlPbmUpO1xuICAgIGlmIChfLmhhcyhlZGdlLCBcInlcIikpIHtcbiAgICAgIHJldmVyc2VZT25lKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJldmVyc2VZT25lKGF0dHJzKSB7XG4gIGF0dHJzLnkgPSAtYXR0cnMueTtcbn1cblxuZnVuY3Rpb24gc3dhcFhZKGcpIHtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24odikgeyBzd2FwWFlPbmUoZy5ub2RlKHYpKTsgfSk7XG5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIF8uZm9yRWFjaChlZGdlLnBvaW50cywgc3dhcFhZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgXCJ4XCIpKSB7XG4gICAgICBzd2FwWFlPbmUoZWRnZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dhcFhZT25lKGF0dHJzKSB7XG4gIHZhciB4ID0gYXR0cnMueDtcbiAgYXR0cnMueCA9IGF0dHJzLnk7XG4gIGF0dHJzLnkgPSB4O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53258\n')},77822:module=>{eval('/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * "Introduction to Algorithms".\n */\n\nmodule.exports = List;\n\nfunction List() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n}\n\nList.prototype.dequeue = function() {\n var sentinel = this._sentinel,\n entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n};\n\nList.prototype.enqueue = function(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n};\n\nList.prototype.toString = function() {\n var strs = [],\n sentinel = this._sentinel,\n curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return "[" + strs.join(", ") + "]";\n};\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== "_next" && k !== "_prev") {\n return v;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc4MjIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9kYXRhL2xpc3QuanM/NTdiYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiBkZXJpdmVkIGZyb20gQ29ybWVuLCBldCBhbC4sXG4gKiBcIkludHJvZHVjdGlvbiB0byBBbGdvcml0aG1zXCIuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0O1xuXG5mdW5jdGlvbiBMaXN0KCkge1xuICB2YXIgc2VudGluZWwgPSB7fTtcbiAgc2VudGluZWwuX25leHQgPSBzZW50aW5lbC5fcHJldiA9IHNlbnRpbmVsO1xuICB0aGlzLl9zZW50aW5lbCA9IHNlbnRpbmVsO1xufVxuXG5MaXN0LnByb3RvdHlwZS5kZXF1ZXVlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZW50aW5lbCA9IHRoaXMuX3NlbnRpbmVsLFxuICAgICAgZW50cnkgPSBzZW50aW5lbC5fcHJldjtcbiAgaWYgKGVudHJ5ICE9PSBzZW50aW5lbCkge1xuICAgIHVubGluayhlbnRyeSk7XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5MaXN0LnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24oZW50cnkpIHtcbiAgdmFyIHNlbnRpbmVsID0gdGhpcy5fc2VudGluZWw7XG4gIGlmIChlbnRyeS5fcHJldiAmJiBlbnRyeS5fbmV4dCkge1xuICAgIHVubGluayhlbnRyeSk7XG4gIH1cbiAgZW50cnkuX25leHQgPSBzZW50aW5lbC5fbmV4dDtcbiAgc2VudGluZWwuX25leHQuX3ByZXYgPSBlbnRyeTtcbiAgc2VudGluZWwuX25leHQgPSBlbnRyeTtcbiAgZW50cnkuX3ByZXYgPSBzZW50aW5lbDtcbn07XG5cbkxpc3QucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJzID0gW10sXG4gICAgICBzZW50aW5lbCA9IHRoaXMuX3NlbnRpbmVsLFxuICAgICAgY3VyciA9IHNlbnRpbmVsLl9wcmV2O1xuICB3aGlsZSAoY3VyciAhPT0gc2VudGluZWwpIHtcbiAgICBzdHJzLnB1c2goSlNPTi5zdHJpbmdpZnkoY3VyciwgZmlsdGVyT3V0TGlua3MpKTtcbiAgICBjdXJyID0gY3Vyci5fcHJldjtcbiAgfVxuICByZXR1cm4gXCJbXCIgKyBzdHJzLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xufTtcblxuZnVuY3Rpb24gdW5saW5rKGVudHJ5KSB7XG4gIGVudHJ5Ll9wcmV2Ll9uZXh0ID0gZW50cnkuX25leHQ7XG4gIGVudHJ5Ll9uZXh0Ll9wcmV2ID0gZW50cnkuX3ByZXY7XG4gIGRlbGV0ZSBlbnRyeS5fbmV4dDtcbiAgZGVsZXRlIGVudHJ5Ll9wcmV2O1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPdXRMaW5rcyhrLCB2KSB7XG4gIGlmIChrICE9PSBcIl9uZXh0XCIgJiYgayAhPT0gXCJfcHJldlwiKSB7XG4gICAgcmV0dXJuIHY7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77822\n')},27570:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n util = __webpack_require__(11138),\n Graph = (__webpack_require__(70574).Graph);\n\nmodule.exports = {\n debugOrdering: debugOrdering\n};\n\n/* istanbul ignore next */\nfunction debugOrdering(g) {\n var layerMatrix = util.buildLayerMatrix(g);\n\n var h = new Graph({ compound: true, multigraph: true }).setGraph({});\n\n _.forEach(g.nodes(), function(v) {\n h.setNode(v, { label: v });\n h.setParent(v, "layer" + g.node(v).rank);\n });\n\n _.forEach(g.edges(), function(e) {\n h.setEdge(e.v, e.w, {}, e.name);\n });\n\n _.forEach(layerMatrix, function(layer, i) {\n var layerV = "layer" + i;\n h.setNode(layerV, { rank: "same" });\n _.reduce(layer, function(u, v) {\n h.setEdge(u, v, { style: "invis" });\n return v;\n });\n });\n\n return h;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1NzAuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEtBQVE7QUFDM0IsWUFBWSxrQ0FBMkI7O0FBRXZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGtDQUFrQyxhQUFhOztBQUVyRTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLDBCQUEwQjtBQUMxQixHQUFHOztBQUVIO0FBQ0E7QUFDQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9kZWJ1Zy5qcz9mN2Y4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfID0gcmVxdWlyZShcIi4vbG9kYXNoXCIpLFxuICAgIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpLFxuICAgIEdyYXBoID0gcmVxdWlyZShcIi4vZ3JhcGhsaWJcIikuR3JhcGg7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkZWJ1Z09yZGVyaW5nOiBkZWJ1Z09yZGVyaW5nXG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gZGVidWdPcmRlcmluZyhnKSB7XG4gIHZhciBsYXllck1hdHJpeCA9IHV0aWwuYnVpbGRMYXllck1hdHJpeChnKTtcblxuICB2YXIgaCA9IG5ldyBHcmFwaCh7IGNvbXBvdW5kOiB0cnVlLCBtdWx0aWdyYXBoOiB0cnVlIH0pLnNldEdyYXBoKHt9KTtcblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgaC5zZXROb2RlKHYsIHsgbGFiZWw6IHYgfSk7XG4gICAgaC5zZXRQYXJlbnQodiwgXCJsYXllclwiICsgZy5ub2RlKHYpLnJhbmspO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgaC5zZXRFZGdlKGUudiwgZS53LCB7fSwgZS5uYW1lKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGxheWVyTWF0cml4LCBmdW5jdGlvbihsYXllciwgaSkge1xuICAgIHZhciBsYXllclYgPSBcImxheWVyXCIgKyBpO1xuICAgIGguc2V0Tm9kZShsYXllclYsIHsgcmFuazogXCJzYW1lXCIgfSk7XG4gICAgXy5yZWR1Y2UobGF5ZXIsIGZ1bmN0aW9uKHUsIHYpIHtcbiAgICAgIGguc2V0RWRnZSh1LCB2LCB7IHN0eWxlOiBcImludmlzXCIgfSk7XG4gICAgICByZXR1cm4gdjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGg7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27570\n')},70574:(module,__unused_webpack_exports,__webpack_require__)=>{eval("/* global window */\n\nvar graphlib;\n\nif (true) {\n try {\n graphlib = __webpack_require__(28282);\n } catch (e) {}\n}\n\nif (!graphlib) {\n graphlib = window.graphlib;\n}\n\nmodule.exports = graphlib;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA1NzQuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUEsSUFBSSxJQUE2QjtBQUNqQztBQUNBLGVBQWUsbUJBQU8sQ0FBQyxLQUFVO0FBQ2pDLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL2dyYXBobGliLmpzPzhlMzMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuXG52YXIgZ3JhcGhsaWI7XG5cbmlmICh0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gIHRyeSB7XG4gICAgZ3JhcGhsaWIgPSByZXF1aXJlKFwiZ3JhcGhsaWJcIik7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cbmlmICghZ3JhcGhsaWIpIHtcbiAgZ3JhcGhsaWIgPSB3aW5kb3cuZ3JhcGhsaWI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ3JhcGhsaWI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70574\n")},74079:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n Graph = (__webpack_require__(70574).Graph),\n List = __webpack_require__(77822);\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and\n * effective heuristic for the feedback arc set problem." This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nmodule.exports = greedyFAS;\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(_.map(results, function(e) {\n return g.outEdges(e.v, e.w);\n }), true);\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [],\n sources = buckets[buckets.length - 1],\n sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n while ((entry = sources.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function(edge) {\n var weight = g.edge(edge),\n uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function(edge) {\n var weight = g.edge(edge),\n w = edge.w,\n wEntry = g.node(w);\n wEntry["in"] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph(),\n maxIn = 0,\n maxOut = 0;\n\n _.forEach(g.nodes(), function(v) {\n fasGraph.setNode(v, { v: v, "in": 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function(e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0,\n weight = weightFn(e),\n edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);\n maxIn = Math.max(maxIn, fasGraph.node(e.w)["in"] += weight);\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function() { return new List(); });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function(v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry["in"]) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry["in"] + zeroIdx].enqueue(entry);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQwNzkuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsWUFBWSxrQ0FBMkI7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEtBQWE7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLDBDQUEwQztBQUMxQztBQUNBLHVDQUF1QyxPQUFPO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLHVCQUF1QjtBQUNqRCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsNkRBQTZELG9CQUFvQjtBQUNqRjs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvZ3JlZWR5LWZhcy5qcz81YzE1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfID0gcmVxdWlyZShcIi4vbG9kYXNoXCIpLFxuICAgIEdyYXBoID0gcmVxdWlyZShcIi4vZ3JhcGhsaWJcIikuR3JhcGgsXG4gICAgTGlzdCA9IHJlcXVpcmUoXCIuL2RhdGEvbGlzdFwiKTtcblxuLypcbiAqIEEgZ3JlZWR5IGhldXJpc3RpYyBmb3IgZmluZGluZyBhIGZlZWRiYWNrIGFyYyBzZXQgZm9yIGEgZ3JhcGguIEEgZmVlZGJhY2tcbiAqIGFyYyBzZXQgaXMgYSBzZXQgb2YgZWRnZXMgdGhhdCBjYW4gYmUgcmVtb3ZlZCB0byBtYWtlIGEgZ3JhcGggYWN5Y2xpYy5cbiAqIFRoZSBhbGdvcml0aG0gY29tZXMgZnJvbTogUC4gRWFkZXMsIFguIExpbiwgYW5kIFcuIEYuIFNteXRoLCBcIkEgZmFzdCBhbmRcbiAqIGVmZmVjdGl2ZSBoZXVyaXN0aWMgZm9yIHRoZSBmZWVkYmFjayBhcmMgc2V0IHByb2JsZW0uXCIgVGhpcyBpbXBsZW1lbnRhdGlvblxuICogYWRqdXN0cyB0aGF0IGZyb20gdGhlIHBhcGVyIHRvIGFsbG93IGZvciB3ZWlnaHRlZCBlZGdlcy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBncmVlZHlGQVM7XG5cbnZhciBERUZBVUxUX1dFSUdIVF9GTiA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGdyZWVkeUZBUyhnLCB3ZWlnaHRGbikge1xuICBpZiAoZy5ub2RlQ291bnQoKSA8PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciBzdGF0ZSA9IGJ1aWxkU3RhdGUoZywgd2VpZ2h0Rm4gfHwgREVGQVVMVF9XRUlHSFRfRk4pO1xuICB2YXIgcmVzdWx0cyA9IGRvR3JlZWR5RkFTKHN0YXRlLmdyYXBoLCBzdGF0ZS5idWNrZXRzLCBzdGF0ZS56ZXJvSWR4KTtcblxuICAvLyBFeHBhbmQgbXVsdGktZWRnZXNcbiAgcmV0dXJuIF8uZmxhdHRlbihfLm1hcChyZXN1bHRzLCBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGcub3V0RWRnZXMoZS52LCBlLncpO1xuICB9KSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGRvR3JlZWR5RkFTKGcsIGJ1Y2tldHMsIHplcm9JZHgpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXSxcbiAgICAgIHNvdXJjZXMgPSBidWNrZXRzW2J1Y2tldHMubGVuZ3RoIC0gMV0sXG4gICAgICBzaW5rcyA9IGJ1Y2tldHNbMF07XG5cbiAgdmFyIGVudHJ5O1xuICB3aGlsZSAoZy5ub2RlQ291bnQoKSkge1xuICAgIHdoaWxlICgoZW50cnkgPSBzaW5rcy5kZXF1ZXVlKCkpKSAgIHsgcmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSk7IH1cbiAgICB3aGlsZSAoKGVudHJ5ID0gc291cmNlcy5kZXF1ZXVlKCkpKSB7IHJlbW92ZU5vZGUoZywgYnVja2V0cywgemVyb0lkeCwgZW50cnkpOyB9XG4gICAgaWYgKGcubm9kZUNvdW50KCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSBidWNrZXRzLmxlbmd0aCAtIDI7IGkgPiAwOyAtLWkpIHtcbiAgICAgICAgZW50cnkgPSBidWNrZXRzW2ldLmRlcXVldWUoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KHJlbW92ZU5vZGUoZywgYnVja2V0cywgemVyb0lkeCwgZW50cnksIHRydWUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOb2RlKGcsIGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5LCBjb2xsZWN0UHJlZGVjZXNzb3JzKSB7XG4gIHZhciByZXN1bHRzID0gY29sbGVjdFByZWRlY2Vzc29ycyA/IFtdIDogdW5kZWZpbmVkO1xuXG4gIF8uZm9yRWFjaChnLmluRWRnZXMoZW50cnkudiksIGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICB2YXIgd2VpZ2h0ID0gZy5lZGdlKGVkZ2UpLFxuICAgICAgICB1RW50cnkgPSBnLm5vZGUoZWRnZS52KTtcblxuICAgIGlmIChjb2xsZWN0UHJlZGVjZXNzb3JzKSB7XG4gICAgICByZXN1bHRzLnB1c2goeyB2OiBlZGdlLnYsIHc6IGVkZ2UudyB9KTtcbiAgICB9XG5cbiAgICB1RW50cnkub3V0IC09IHdlaWdodDtcbiAgICBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgdUVudHJ5KTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcub3V0RWRnZXMoZW50cnkudiksIGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICB2YXIgd2VpZ2h0ID0gZy5lZGdlKGVkZ2UpLFxuICAgICAgICB3ID0gZWRnZS53LFxuICAgICAgICB3RW50cnkgPSBnLm5vZGUodyk7XG4gICAgd0VudHJ5W1wiaW5cIl0gLT0gd2VpZ2h0O1xuICAgIGFzc2lnbkJ1Y2tldChidWNrZXRzLCB6ZXJvSWR4LCB3RW50cnkpO1xuICB9KTtcblxuICBnLnJlbW92ZU5vZGUoZW50cnkudik7XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3RhdGUoZywgd2VpZ2h0Rm4pIHtcbiAgdmFyIGZhc0dyYXBoID0gbmV3IEdyYXBoKCksXG4gICAgICBtYXhJbiA9IDAsXG4gICAgICBtYXhPdXQgPSAwO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICBmYXNHcmFwaC5zZXROb2RlKHYsIHsgdjogdiwgXCJpblwiOiAwLCBvdXQ6IDAgfSk7XG4gIH0pO1xuXG4gIC8vIEFnZ3JlZ2F0ZSB3ZWlnaHRzIG9uIG5vZGVzLCBidXQgYWxzbyBzdW0gdGhlIHdlaWdodHMgYWNyb3NzIG11bHRpLWVkZ2VzXG4gIC8vIGludG8gYSBzaW5nbGUgZWRnZSBmb3IgdGhlIGZhc0dyYXBoLlxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHByZXZXZWlnaHQgPSBmYXNHcmFwaC5lZGdlKGUudiwgZS53KSB8fCAwLFxuICAgICAgICB3ZWlnaHQgPSB3ZWlnaHRGbihlKSxcbiAgICAgICAgZWRnZVdlaWdodCA9IHByZXZXZWlnaHQgKyB3ZWlnaHQ7XG4gICAgZmFzR3JhcGguc2V0RWRnZShlLnYsIGUudywgZWRnZVdlaWdodCk7XG4gICAgbWF4T3V0ID0gTWF0aC5tYXgobWF4T3V0LCBmYXNHcmFwaC5ub2RlKGUudikub3V0ICs9IHdlaWdodCk7XG4gICAgbWF4SW4gID0gTWF0aC5tYXgobWF4SW4sICBmYXNHcmFwaC5ub2RlKGUudylbXCJpblwiXSAgKz0gd2VpZ2h0KTtcbiAgfSk7XG5cbiAgdmFyIGJ1Y2tldHMgPSBfLnJhbmdlKG1heE91dCArIG1heEluICsgMykubWFwKGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IExpc3QoKTsgfSk7XG4gIHZhciB6ZXJvSWR4ID0gbWF4SW4gKyAxO1xuXG4gIF8uZm9yRWFjaChmYXNHcmFwaC5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgYXNzaWduQnVja2V0KGJ1Y2tldHMsIHplcm9JZHgsIGZhc0dyYXBoLm5vZGUodikpO1xuICB9KTtcblxuICByZXR1cm4geyBncmFwaDogZmFzR3JhcGgsIGJ1Y2tldHM6IGJ1Y2tldHMsIHplcm9JZHg6IHplcm9JZHggfTtcbn1cblxuZnVuY3Rpb24gYXNzaWduQnVja2V0KGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5KSB7XG4gIGlmICghZW50cnkub3V0KSB7XG4gICAgYnVja2V0c1swXS5lbnF1ZXVlKGVudHJ5KTtcbiAgfSBlbHNlIGlmICghZW50cnlbXCJpblwiXSkge1xuICAgIGJ1Y2tldHNbYnVja2V0cy5sZW5ndGggLSAxXS5lbnF1ZXVlKGVudHJ5KTtcbiAgfSBlbHNlIHtcbiAgICBidWNrZXRzW2VudHJ5Lm91dCAtIGVudHJ5W1wiaW5cIl0gKyB6ZXJvSWR4XS5lbnF1ZXVlKGVudHJ5KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74079\n')},98123:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n acyclic = __webpack_require__(92188),\n normalize = __webpack_require__(45995),\n rank = __webpack_require__(78093),\n normalizeRanks = (__webpack_require__(11138).normalizeRanks),\n parentDummyChains = __webpack_require__(24219),\n removeEmptyRanks = (__webpack_require__(11138).removeEmptyRanks),\n nestingGraph = __webpack_require__(72981),\n addBorderSegments = __webpack_require__(61133),\n coordinateSystem = __webpack_require__(53258),\n order = __webpack_require__(53408),\n position = __webpack_require__(17873),\n util = __webpack_require__(11138),\n Graph = (__webpack_require__(70574).Graph);\n\nmodule.exports = layout;\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time("layout", function() {\n var layoutGraph = time(" buildLayoutGraph",\n function() { return buildLayoutGraph(g); });\n time(" runLayout", function() { runLayout(layoutGraph, time); });\n time(" updateInputGraph", function() { updateInputGraph(g, layoutGraph); });\n });\n}\n\nfunction runLayout(g, time) {\n time(" makeSpaceForEdgeLabels", function() { makeSpaceForEdgeLabels(g); });\n time(" removeSelfEdges", function() { removeSelfEdges(g); });\n time(" acyclic", function() { acyclic.run(g); });\n time(" nestingGraph.run", function() { nestingGraph.run(g); });\n time(" rank", function() { rank(util.asNonCompoundGraph(g)); });\n time(" injectEdgeLabelProxies", function() { injectEdgeLabelProxies(g); });\n time(" removeEmptyRanks", function() { removeEmptyRanks(g); });\n time(" nestingGraph.cleanup", function() { nestingGraph.cleanup(g); });\n time(" normalizeRanks", function() { normalizeRanks(g); });\n time(" assignRankMinMax", function() { assignRankMinMax(g); });\n time(" removeEdgeLabelProxies", function() { removeEdgeLabelProxies(g); });\n time(" normalize.run", function() { normalize.run(g); });\n time(" parentDummyChains", function() { parentDummyChains(g); });\n time(" addBorderSegments", function() { addBorderSegments(g); });\n time(" order", function() { order(g); });\n time(" insertSelfEdges", function() { insertSelfEdges(g); });\n time(" adjustCoordinateSystem", function() { coordinateSystem.adjust(g); });\n time(" position", function() { position(g); });\n time(" positionSelfEdges", function() { positionSelfEdges(g); });\n time(" removeBorderNodes", function() { removeBorderNodes(g); });\n time(" normalize.undo", function() { normalize.undo(g); });\n time(" fixupEdgeLabelCoords", function() { fixupEdgeLabelCoords(g); });\n time(" undoCoordinateSystem", function() { coordinateSystem.undo(g); });\n time(" translateGraph", function() { translateGraph(g); });\n time(" assignNodeIntersects", function() { assignNodeIntersects(g); });\n time(" reversePoints", function() { reversePointsForReversedEdges(g); });\n time(" acyclic.undo", function() { acyclic.undo(g); });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function(v) {\n var inputLabel = inputGraph.node(v),\n layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var inputLabel = inputGraph.edge(e),\n layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (_.has(layoutLabel, "x")) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"],\n graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" },\n graphAttrs = ["acyclicer", "ranker", "rankdir", "align"],\n nodeNumAttrs = ["width", "height"],\n nodeDefaults = { width: 0, height: 0 },\n edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"],\n edgeDefaults = {\n minlen: 1, weight: 1, width: 0, height: 0,\n labeloffset: 10, labelpos: "r"\n },\n edgeAttrs = ["labelpos"];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true }),\n graph = canonicalize(inputGraph.graph());\n\n g.setGraph(_.merge({},\n graphDefaults,\n selectNumberAttrs(graph, graphNumAttrs),\n _.pick(graph, graphAttrs)));\n\n _.forEach(inputGraph.nodes(), function(v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function(e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(e, _.merge({},\n edgeDefaults,\n selectNumberAttrs(edge, edgeNumAttrs),\n _.pick(edge, edgeAttrs)));\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== "c") {\n if (graph.rankdir === "TB" || graph.rankdir === "BT") {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge\'s\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label\'s position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v),\n w = g.node(e.w),\n label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, "edge-proxy", label, "_ep");\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === "edge-proxy") {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY,\n maxX = 0,\n minY = Number.POSITIVE_INFINITY,\n maxY = 0,\n graphLabel = g.graph(),\n marginX = graphLabel.marginx || 0,\n marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x,\n y = attrs.y,\n w = attrs.width,\n h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function(v) { getExtremes(g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, "x")) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function(p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (_.has(edge, "x")) { edge.x -= minX; }\n if (_.has(edge, "y")) { edge.y -= minY; }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e),\n nodeV = g.node(e.v),\n nodeW = g.node(e.w),\n p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (_.has(edge, "x")) {\n if (edge.labelpos === "l" || edge.labelpos === "r") {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case "l": edge.x -= edge.width / 2 + edge.labeloffset; break;\n case "r": edge.x += edge.width / 2 + edge.labeloffset; break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function(v) {\n if (g.children(v).length) {\n var node = g.node(v),\n t = g.node(node.borderTop),\n b = g.node(node.borderBottom),\n l = g.node(_.last(node.borderLeft)),\n r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function(v) {\n if (g.node(v).dummy === "border") {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function(e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function(layer) {\n var orderShift = 0;\n _.forEach(layer, function(v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function(selfEdge) {\n util.addDummyNode(g, "selfedge", {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + (++orderShift),\n e: selfEdge.e,\n label: selfEdge.label\n }, "_se");\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (node.dummy === "selfedge") {\n var selfNode = g.node(node.e.v),\n x = selfNode.x + selfNode.width / 2,\n y = selfNode.y,\n dx = node.x - x,\n dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + 2 * dx / 3, y: y - dy },\n { x: x + 5 * dx / 6, y: y - dy },\n { x: x + dx , y: y },\n { x: x + 5 * dx / 6, y: y + dy },\n { x: x + 2 * dx / 3, y: y + dy }\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function(v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOEJBQThCO0FBQ3hDLFVBQVUsOEJBQThCO0FBQ3hDLFVBQVUseUJBQXlCO0FBQ25DLFVBQVUsOEJBQThCO0FBQ3hDLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvbGF5b3V0LmpzPzc5YzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfID0gcmVxdWlyZShcIi4vbG9kYXNoXCIpLFxuICAgIGFjeWNsaWMgPSByZXF1aXJlKFwiLi9hY3ljbGljXCIpLFxuICAgIG5vcm1hbGl6ZSA9IHJlcXVpcmUoXCIuL25vcm1hbGl6ZVwiKSxcbiAgICByYW5rID0gcmVxdWlyZShcIi4vcmFua1wiKSxcbiAgICBub3JtYWxpemVSYW5rcyA9IHJlcXVpcmUoXCIuL3V0aWxcIikubm9ybWFsaXplUmFua3MsXG4gICAgcGFyZW50RHVtbXlDaGFpbnMgPSByZXF1aXJlKFwiLi9wYXJlbnQtZHVtbXktY2hhaW5zXCIpLFxuICAgIHJlbW92ZUVtcHR5UmFua3MgPSByZXF1aXJlKFwiLi91dGlsXCIpLnJlbW92ZUVtcHR5UmFua3MsXG4gICAgbmVzdGluZ0dyYXBoID0gcmVxdWlyZShcIi4vbmVzdGluZy1ncmFwaFwiKSxcbiAgICBhZGRCb3JkZXJTZWdtZW50cyA9IHJlcXVpcmUoXCIuL2FkZC1ib3JkZXItc2VnbWVudHNcIiksXG4gICAgY29vcmRpbmF0ZVN5c3RlbSA9IHJlcXVpcmUoXCIuL2Nvb3JkaW5hdGUtc3lzdGVtXCIpLFxuICAgIG9yZGVyID0gcmVxdWlyZShcIi4vb3JkZXJcIiksXG4gICAgcG9zaXRpb24gPSByZXF1aXJlKFwiLi9wb3NpdGlvblwiKSxcbiAgICB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKSxcbiAgICBHcmFwaCA9IHJlcXVpcmUoXCIuL2dyYXBobGliXCIpLkdyYXBoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxheW91dDtcblxuZnVuY3Rpb24gbGF5b3V0KGcsIG9wdHMpIHtcbiAgdmFyIHRpbWUgPSBvcHRzICYmIG9wdHMuZGVidWdUaW1pbmcgPyB1dGlsLnRpbWUgOiB1dGlsLm5vdGltZTtcbiAgdGltZShcImxheW91dFwiLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGF5b3V0R3JhcGggPSB0aW1lKFwiICBidWlsZExheW91dEdyYXBoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBidWlsZExheW91dEdyYXBoKGcpOyB9KTtcbiAgICB0aW1lKFwiICBydW5MYXlvdXRcIiwgICAgICAgIGZ1bmN0aW9uKCkgeyBydW5MYXlvdXQobGF5b3V0R3JhcGgsIHRpbWUpOyB9KTtcbiAgICB0aW1lKFwiICB1cGRhdGVJbnB1dEdyYXBoXCIsIGZ1bmN0aW9uKCkgeyB1cGRhdGVJbnB1dEdyYXBoKGcsIGxheW91dEdyYXBoKTsgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5MYXlvdXQoZywgdGltZSkge1xuICB0aW1lKFwiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHNcIiwgZnVuY3Rpb24oKSB7IG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZyk7IH0pO1xuICB0aW1lKFwiICAgIHJlbW92ZVNlbGZFZGdlc1wiLCAgICAgICAgZnVuY3Rpb24oKSB7IHJlbW92ZVNlbGZFZGdlcyhnKTsgfSk7XG4gIHRpbWUoXCIgICAgYWN5Y2xpY1wiLCAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgYWN5Y2xpYy5ydW4oZyk7IH0pO1xuICB0aW1lKFwiICAgIG5lc3RpbmdHcmFwaC5ydW5cIiwgICAgICAgZnVuY3Rpb24oKSB7IG5lc3RpbmdHcmFwaC5ydW4oZyk7IH0pO1xuICB0aW1lKFwiICAgIHJhbmtcIiwgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJhbmsodXRpbC5hc05vbkNvbXBvdW5kR3JhcGgoZykpOyB9KTtcbiAgdGltZShcIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzXCIsIGZ1bmN0aW9uKCkgeyBpbmplY3RFZGdlTGFiZWxQcm94aWVzKGcpOyB9KTtcbiAgdGltZShcIiAgICByZW1vdmVFbXB0eVJhbmtzXCIsICAgICAgIGZ1bmN0aW9uKCkgeyByZW1vdmVFbXB0eVJhbmtzKGcpOyB9KTtcbiAgdGltZShcIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cFwiLCAgIGZ1bmN0aW9uKCkgeyBuZXN0aW5nR3JhcGguY2xlYW51cChnKTsgfSk7XG4gIHRpbWUoXCIgICAgbm9ybWFsaXplUmFua3NcIiwgICAgICAgICBmdW5jdGlvbigpIHsgbm9ybWFsaXplUmFua3MoZyk7IH0pO1xuICB0aW1lKFwiICAgIGFzc2lnblJhbmtNaW5NYXhcIiwgICAgICAgZnVuY3Rpb24oKSB7IGFzc2lnblJhbmtNaW5NYXgoZyk7IH0pO1xuICB0aW1lKFwiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXNcIiwgZnVuY3Rpb24oKSB7IHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMoZyk7IH0pO1xuICB0aW1lKFwiICAgIG5vcm1hbGl6ZS5ydW5cIiwgICAgICAgICAgZnVuY3Rpb24oKSB7IG5vcm1hbGl6ZS5ydW4oZyk7IH0pO1xuICB0aW1lKFwiICAgIHBhcmVudER1bW15Q2hhaW5zXCIsICAgICAgZnVuY3Rpb24oKSB7IHBhcmVudER1bW15Q2hhaW5zKGcpOyB9KTtcbiAgdGltZShcIiAgICBhZGRCb3JkZXJTZWdtZW50c1wiLCAgICAgIGZ1bmN0aW9uKCkgeyBhZGRCb3JkZXJTZWdtZW50cyhnKTsgfSk7XG4gIHRpbWUoXCIgICAgb3JkZXJcIiwgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgb3JkZXIoZyk7IH0pO1xuICB0aW1lKFwiICAgIGluc2VydFNlbGZFZGdlc1wiLCAgICAgICAgZnVuY3Rpb24oKSB7IGluc2VydFNlbGZFZGdlcyhnKTsgfSk7XG4gIHRpbWUoXCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbVwiLCBmdW5jdGlvbigpIHsgY29vcmRpbmF0ZVN5c3RlbS5hZGp1c3QoZyk7IH0pO1xuICB0aW1lKFwiICAgIHBvc2l0aW9uXCIsICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHBvc2l0aW9uKGcpOyB9KTtcbiAgdGltZShcIiAgICBwb3NpdGlvblNlbGZFZGdlc1wiLCAgICAgIGZ1bmN0aW9uKCkgeyBwb3NpdGlvblNlbGZFZGdlcyhnKTsgfSk7XG4gIHRpbWUoXCIgICAgcmVtb3ZlQm9yZGVyTm9kZXNcIiwgICAgICBmdW5jdGlvbigpIHsgcmVtb3ZlQm9yZGVyTm9kZXMoZyk7IH0pO1xuICB0aW1lKFwiICAgIG5vcm1hbGl6ZS51bmRvXCIsICAgICAgICAgZnVuY3Rpb24oKSB7IG5vcm1hbGl6ZS51bmRvKGcpOyB9KTtcbiAgdGltZShcIiAgICBmaXh1cEVkZ2VMYWJlbENvb3Jkc1wiLCAgIGZ1bmN0aW9uKCkgeyBmaXh1cEVkZ2VMYWJlbENvb3JkcyhnKTsgfSk7XG4gIHRpbWUoXCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW1cIiwgICBmdW5jdGlvbigpIHsgY29vcmRpbmF0ZVN5c3RlbS51bmRvKGcpOyB9KTtcbiAgdGltZShcIiAgICB0cmFuc2xhdGVHcmFwaFwiLCAgICAgICAgIGZ1bmN0aW9uKCkgeyB0cmFuc2xhdGVHcmFwaChnKTsgfSk7XG4gIHRpbWUoXCIgICAgYXNzaWduTm9kZUludGVyc2VjdHNcIiwgICBmdW5jdGlvbigpIHsgYXNzaWduTm9kZUludGVyc2VjdHMoZyk7IH0pO1xuICB0aW1lKFwiICAgIHJldmVyc2VQb2ludHNcIiwgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldmVyc2VQb2ludHNGb3JSZXZlcnNlZEVkZ2VzKGcpOyB9KTtcbiAgdGltZShcIiAgICBhY3ljbGljLnVuZG9cIiwgICAgICAgICAgIGZ1bmN0aW9uKCkgeyBhY3ljbGljLnVuZG8oZyk7IH0pO1xufVxuXG4vKlxuICogQ29waWVzIGZpbmFsIGxheW91dCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsYXlvdXQgZ3JhcGggYmFjayB0byB0aGUgaW5wdXRcbiAqIGdyYXBoLiBUaGlzIHByb2Nlc3Mgb25seSBjb3BpZXMgd2hpdGVsaXN0ZWQgYXR0cmlidXRlcyBmcm9tIHRoZSBsYXlvdXQgZ3JhcGhcbiAqIHRvIHRoZSBpbnB1dCBncmFwaCwgc28gaXQgc2VydmVzIGFzIGEgZ29vZCBwbGFjZSB0byBkZXRlcm1pbmUgd2hhdFxuICogYXR0cmlidXRlcyBjYW4gaW5mbHVlbmNlIGxheW91dC5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlSW5wdXRHcmFwaChpbnB1dEdyYXBoLCBsYXlvdXRHcmFwaCkge1xuICBfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgdmFyIGlucHV0TGFiZWwgPSBpbnB1dEdyYXBoLm5vZGUodiksXG4gICAgICAgIGxheW91dExhYmVsID0gbGF5b3V0R3JhcGgubm9kZSh2KTtcblxuICAgIGlmIChpbnB1dExhYmVsKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcblxuICAgICAgaWYgKGxheW91dEdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgICBpbnB1dExhYmVsLndpZHRoID0gbGF5b3V0TGFiZWwud2lkdGg7XG4gICAgICAgIGlucHV0TGFiZWwuaGVpZ2h0ID0gbGF5b3V0TGFiZWwuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBpbnB1dExhYmVsID0gaW5wdXRHcmFwaC5lZGdlKGUpLFxuICAgICAgICBsYXlvdXRMYWJlbCA9IGxheW91dEdyYXBoLmVkZ2UoZSk7XG5cbiAgICBpbnB1dExhYmVsLnBvaW50cyA9IGxheW91dExhYmVsLnBvaW50cztcbiAgICBpZiAoXy5oYXMobGF5b3V0TGFiZWwsIFwieFwiKSkge1xuICAgICAgaW5wdXRMYWJlbC54ID0gbGF5b3V0TGFiZWwueDtcbiAgICAgIGlucHV0TGFiZWwueSA9IGxheW91dExhYmVsLnk7XG4gICAgfVxuICB9KTtcblxuICBpbnB1dEdyYXBoLmdyYXBoKCkud2lkdGggPSBsYXlvdXRHcmFwaC5ncmFwaCgpLndpZHRoO1xuICBpbnB1dEdyYXBoLmdyYXBoKCkuaGVpZ2h0ID0gbGF5b3V0R3JhcGguZ3JhcGgoKS5oZWlnaHQ7XG59XG5cbnZhciBncmFwaE51bUF0dHJzID0gW1wibm9kZXNlcFwiLCBcImVkZ2VzZXBcIiwgXCJyYW5rc2VwXCIsIFwibWFyZ2lueFwiLCBcIm1hcmdpbnlcIl0sXG4gICAgZ3JhcGhEZWZhdWx0cyA9IHsgcmFua3NlcDogNTAsIGVkZ2VzZXA6IDIwLCBub2Rlc2VwOiA1MCwgcmFua2RpcjogXCJ0YlwiIH0sXG4gICAgZ3JhcGhBdHRycyA9IFtcImFjeWNsaWNlclwiLCBcInJhbmtlclwiLCBcInJhbmtkaXJcIiwgXCJhbGlnblwiXSxcbiAgICBub2RlTnVtQXR0cnMgPSBbXCJ3aWR0aFwiLCBcImhlaWdodFwiXSxcbiAgICBub2RlRGVmYXVsdHMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcbiAgICBlZGdlTnVtQXR0cnMgPSBbXCJtaW5sZW5cIiwgXCJ3ZWlnaHRcIiwgXCJ3aWR0aFwiLCBcImhlaWdodFwiLCBcImxhYmVsb2Zmc2V0XCJdLFxuICAgIGVkZ2VEZWZhdWx0cyA9IHtcbiAgICAgIG1pbmxlbjogMSwgd2VpZ2h0OiAxLCB3aWR0aDogMCwgaGVpZ2h0OiAwLFxuICAgICAgbGFiZWxvZmZzZXQ6IDEwLCBsYWJlbHBvczogXCJyXCJcbiAgICB9LFxuICAgIGVkZ2VBdHRycyA9IFtcImxhYmVscG9zXCJdO1xuXG4vKlxuICogQ29uc3RydWN0cyBhIG5ldyBncmFwaCBmcm9tIHRoZSBpbnB1dCBncmFwaCwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGxheW91dC5cbiAqIFRoaXMgcHJvY2VzcyBjb3BpZXMgb25seSB3aGl0ZWxpc3RlZCBhdHRyaWJ1dGVzIGZyb20gdGhlIGlucHV0IGdyYXBoIHRvIHRoZVxuICogbGF5b3V0IGdyYXBoLiBUaHVzIHRoaXMgZnVuY3Rpb24gc2VydmVzIGFzIGEgZ29vZCBwbGFjZSB0byBkZXRlcm1pbmUgd2hhdFxuICogYXR0cmlidXRlcyBjYW4gaW5mbHVlbmNlIGxheW91dC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRMYXlvdXRHcmFwaChpbnB1dEdyYXBoKSB7XG4gIHZhciBnID0gbmV3IEdyYXBoKHsgbXVsdGlncmFwaDogdHJ1ZSwgY29tcG91bmQ6IHRydWUgfSksXG4gICAgICBncmFwaCA9IGNhbm9uaWNhbGl6ZShpbnB1dEdyYXBoLmdyYXBoKCkpO1xuXG4gIGcuc2V0R3JhcGgoXy5tZXJnZSh7fSxcbiAgICBncmFwaERlZmF1bHRzLFxuICAgIHNlbGVjdE51bWJlckF0dHJzKGdyYXBoLCBncmFwaE51bUF0dHJzKSxcbiAgICBfLnBpY2soZ3JhcGgsIGdyYXBoQXR0cnMpKSk7XG5cbiAgXy5mb3JFYWNoKGlucHV0R3JhcGgubm9kZXMoKSwgZnVuY3Rpb24odikge1xuICAgIHZhciBub2RlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGgubm9kZSh2KSk7XG4gICAgZy5zZXROb2RlKHYsIF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSwgbm9kZU51bUF0dHJzKSwgbm9kZURlZmF1bHRzKSk7XG4gICAgZy5zZXRQYXJlbnQodiwgaW5wdXRHcmFwaC5wYXJlbnQodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVkZ2UgPSBjYW5vbmljYWxpemUoaW5wdXRHcmFwaC5lZGdlKGUpKTtcbiAgICBnLnNldEVkZ2UoZSwgXy5tZXJnZSh7fSxcbiAgICAgIGVkZ2VEZWZhdWx0cyxcbiAgICAgIHNlbGVjdE51bWJlckF0dHJzKGVkZ2UsIGVkZ2VOdW1BdHRycyksXG4gICAgICBfLnBpY2soZWRnZSwgZWRnZUF0dHJzKSkpO1xuICB9KTtcblxuICByZXR1cm4gZztcbn1cblxuLypcbiAqIFRoaXMgaWRlYSBjb21lcyBmcm9tIHRoZSBHYW5zbmVyIHBhcGVyOiB0byBhY2NvdW50IGZvciBlZGdlIGxhYmVscyBpbiBvdXJcbiAqIGxheW91dCB3ZSBzcGxpdCBlYWNoIHJhbmsgaW4gaGFsZiBieSBkb3VibGluZyBtaW5sZW4gYW5kIGhhbHZpbmcgcmFua3NlcC5cbiAqIFRoZW4gd2UgY2FuIHBsYWNlIGxhYmVscyBhdCB0aGVzZSBtaWQtcG9pbnRzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogV2UgYWxzbyBhZGQgc29tZSBtaW5pbWFsIHBhZGRpbmcgdG8gdGhlIHdpZHRoIHRvIHB1c2ggdGhlIGxhYmVsIGZvciB0aGUgZWRnZVxuICogYXdheSBmcm9tIHRoZSBlZGdlIGl0c2VsZiBhIGJpdC5cbiAqL1xuZnVuY3Rpb24gbWFrZVNwYWNlRm9yRWRnZUxhYmVscyhnKSB7XG4gIHZhciBncmFwaCA9IGcuZ3JhcGgoKTtcbiAgZ3JhcGgucmFua3NlcCAvPSAyO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgZWRnZS5taW5sZW4gKj0gMjtcbiAgICBpZiAoZWRnZS5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpICE9PSBcImNcIikge1xuICAgICAgaWYgKGdyYXBoLnJhbmtkaXIgPT09IFwiVEJcIiB8fCBncmFwaC5yYW5rZGlyID09PSBcIkJUXCIpIHtcbiAgICAgICAgZWRnZS53aWR0aCArPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRnZS5oZWlnaHQgKz0gZWRnZS5sYWJlbG9mZnNldDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKlxuICogQ3JlYXRlcyB0ZW1wb3JhcnkgZHVtbXkgbm9kZXMgdGhhdCBjYXB0dXJlIHRoZSByYW5rIGluIHdoaWNoIGVhY2ggZWRnZSdzXG4gKiBsYWJlbCBpcyBnb2luZyB0bywgaWYgaXQgaGFzIG9uZSBvZiBub24temVybyB3aWR0aCBhbmQgaGVpZ2h0LiBXZSBkbyB0aGlzXG4gKiBzbyB0aGF0IHdlIGNhbiBzYWZlbHkgcmVtb3ZlIGVtcHR5IHJhbmtzIHdoaWxlIHByZXNlcnZpbmcgYmFsYW5jZSBmb3IgdGhlXG4gKiBsYWJlbCdzIHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiBpbmplY3RFZGdlTGFiZWxQcm94aWVzKGcpIHtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLndpZHRoICYmIGVkZ2UuaGVpZ2h0KSB7XG4gICAgICB2YXIgdiA9IGcubm9kZShlLnYpLFxuICAgICAgICAgIHcgPSBnLm5vZGUoZS53KSxcbiAgICAgICAgICBsYWJlbCA9IHsgcmFuazogKHcucmFuayAtIHYucmFuaykgLyAyICsgdi5yYW5rLCBlOiBlIH07XG4gICAgICB1dGlsLmFkZER1bW15Tm9kZShnLCBcImVkZ2UtcHJveHlcIiwgbGFiZWwsIFwiX2VwXCIpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2lnblJhbmtNaW5NYXgoZykge1xuICB2YXIgbWF4UmFuayA9IDA7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAobm9kZS5ib3JkZXJUb3ApIHtcbiAgICAgIG5vZGUubWluUmFuayA9IGcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztcbiAgICAgIG5vZGUubWF4UmFuayA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSkucmFuaztcbiAgICAgIG1heFJhbmsgPSBfLm1heChtYXhSYW5rLCBub2RlLm1heFJhbmspO1xuICAgIH1cbiAgfSk7XG4gIGcuZ3JhcGgoKS5tYXhSYW5rID0gbWF4UmFuaztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAobm9kZS5kdW1teSA9PT0gXCJlZGdlLXByb3h5XCIpIHtcbiAgICAgIGcuZWRnZShub2RlLmUpLmxhYmVsUmFuayA9IG5vZGUucmFuaztcbiAgICAgIGcucmVtb3ZlTm9kZSh2KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVHcmFwaChnKSB7XG4gIHZhciBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgbWF4WCA9IDAsXG4gICAgICBtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgbWF4WSA9IDAsXG4gICAgICBncmFwaExhYmVsID0gZy5ncmFwaCgpLFxuICAgICAgbWFyZ2luWCA9IGdyYXBoTGFiZWwubWFyZ2lueCB8fCAwLFxuICAgICAgbWFyZ2luWSA9IGdyYXBoTGFiZWwubWFyZ2lueSB8fCAwO1xuXG4gIGZ1bmN0aW9uIGdldEV4dHJlbWVzKGF0dHJzKSB7XG4gICAgdmFyIHggPSBhdHRycy54LFxuICAgICAgICB5ID0gYXR0cnMueSxcbiAgICAgICAgdyA9IGF0dHJzLndpZHRoLFxuICAgICAgICBoID0gYXR0cnMuaGVpZ2h0O1xuICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB4IC0gdyAvIDIpO1xuICAgIG1heFggPSBNYXRoLm1heChtYXhYLCB4ICsgdyAvIDIpO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5IC0gaCAvIDIpO1xuICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCB5ICsgaCAvIDIpO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24odikgeyBnZXRFeHRyZW1lcyhnLm5vZGUodikpOyB9KTtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChfLmhhcyhlZGdlLCBcInhcIikpIHtcbiAgICAgIGdldEV4dHJlbWVzKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgbWluWCAtPSBtYXJnaW5YO1xuICBtaW5ZIC09IG1hcmdpblk7XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24odikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIG5vZGUueCAtPSBtaW5YO1xuICAgIG5vZGUueSAtPSBtaW5ZO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgXy5mb3JFYWNoKGVkZ2UucG9pbnRzLCBmdW5jdGlvbihwKSB7XG4gICAgICBwLnggLT0gbWluWDtcbiAgICAgIHAueSAtPSBtaW5ZO1xuICAgIH0pO1xuICAgIGlmIChfLmhhcyhlZGdlLCBcInhcIikpIHsgZWRnZS54IC09IG1pblg7IH1cbiAgICBpZiAoXy5oYXMoZWRnZSwgXCJ5XCIpKSB7IGVkZ2UueSAtPSBtaW5ZOyB9XG4gIH0pO1xuXG4gIGdyYXBoTGFiZWwud2lkdGggPSBtYXhYIC0gbWluWCArIG1hcmdpblg7XG4gIGdyYXBoTGFiZWwuaGVpZ2h0ID0gbWF4WSAtIG1pblkgKyBtYXJnaW5ZO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Ob2RlSW50ZXJzZWN0cyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKSxcbiAgICAgICAgbm9kZVYgPSBnLm5vZGUoZS52KSxcbiAgICAgICAgbm9kZVcgPSBnLm5vZGUoZS53KSxcbiAgICAgICAgcDEsIHAyO1xuICAgIGlmICghZWRnZS5wb2ludHMpIHtcbiAgICAgIGVkZ2UucG9pbnRzID0gW107XG4gICAgICBwMSA9IG5vZGVXO1xuICAgICAgcDIgPSBub2RlVjtcbiAgICB9IGVsc2Uge1xuICAgICAgcDEgPSBlZGdlLnBvaW50c1swXTtcbiAgICAgIHAyID0gZWRnZS5wb2ludHNbZWRnZS5wb2ludHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGVkZ2UucG9pbnRzLnVuc2hpZnQodXRpbC5pbnRlcnNlY3RSZWN0KG5vZGVWLCBwMSkpO1xuICAgIGVkZ2UucG9pbnRzLnB1c2godXRpbC5pbnRlcnNlY3RSZWN0KG5vZGVXLCBwMikpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZml4dXBFZGdlTGFiZWxDb29yZHMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgaWYgKF8uaGFzKGVkZ2UsIFwieFwiKSkge1xuICAgICAgaWYgKGVkZ2UubGFiZWxwb3MgPT09IFwibFwiIHx8IGVkZ2UubGFiZWxwb3MgPT09IFwiclwiKSB7XG4gICAgICAgIGVkZ2Uud2lkdGggLT0gZWRnZS5sYWJlbG9mZnNldDtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZWRnZS5sYWJlbHBvcykge1xuICAgICAgICBjYXNlIFwibFwiOiBlZGdlLnggLT0gZWRnZS53aWR0aCAvIDIgKyBlZGdlLmxhYmVsb2Zmc2V0OyBicmVhaztcbiAgICAgICAgY2FzZSBcInJcIjogZWRnZS54ICs9IGVkZ2Uud2lkdGggLyAyICsgZWRnZS5sYWJlbG9mZnNldDsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgaWYgKGVkZ2UucmV2ZXJzZWQpIHtcbiAgICAgIGVkZ2UucG9pbnRzLnJldmVyc2UoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVCb3JkZXJOb2RlcyhnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAoZy5jaGlsZHJlbih2KS5sZW5ndGgpIHtcbiAgICAgIHZhciBub2RlID0gZy5ub2RlKHYpLFxuICAgICAgICAgIHQgPSBnLm5vZGUobm9kZS5ib3JkZXJUb3ApLFxuICAgICAgICAgIGIgPSBnLm5vZGUobm9kZS5ib3JkZXJCb3R0b20pLFxuICAgICAgICAgIGwgPSBnLm5vZGUoXy5sYXN0KG5vZGUuYm9yZGVyTGVmdCkpLFxuICAgICAgICAgIHIgPSBnLm5vZGUoXy5sYXN0KG5vZGUuYm9yZGVyUmlnaHQpKTtcblxuICAgICAgbm9kZS53aWR0aCA9IE1hdGguYWJzKHIueCAtIGwueCk7XG4gICAgICBub2RlLmhlaWdodCA9IE1hdGguYWJzKGIueSAtIHQueSk7XG4gICAgICBub2RlLnggPSBsLnggKyBub2RlLndpZHRoIC8gMjtcbiAgICAgIG5vZGUueSA9IHQueSArIG5vZGUuaGVpZ2h0IC8gMjtcbiAgICB9XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSBcImJvcmRlclwiKSB7XG4gICAgICBnLnJlbW92ZU5vZGUodik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2VsZkVkZ2VzKGcpIHtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIGlmIChlLnYgPT09IGUudykge1xuICAgICAgdmFyIG5vZGUgPSBnLm5vZGUoZS52KTtcbiAgICAgIGlmICghbm9kZS5zZWxmRWRnZXMpIHtcbiAgICAgICAgbm9kZS5zZWxmRWRnZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIG5vZGUuc2VsZkVkZ2VzLnB1c2goeyBlOiBlLCBsYWJlbDogZy5lZGdlKGUpIH0pO1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydFNlbGZFZGdlcyhnKSB7XG4gIHZhciBsYXllcnMgPSB1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7XG4gIF8uZm9yRWFjaChsYXllcnMsIGZ1bmN0aW9uKGxheWVyKSB7XG4gICAgdmFyIG9yZGVyU2hpZnQgPSAwO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24odiwgaSkge1xuICAgICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgICBub2RlLm9yZGVyID0gaSArIG9yZGVyU2hpZnQ7XG4gICAgICBfLmZvckVhY2gobm9kZS5zZWxmRWRnZXMsIGZ1bmN0aW9uKHNlbGZFZGdlKSB7XG4gICAgICAgIHV0aWwuYWRkRHVtbXlOb2RlKGcsIFwic2VsZmVkZ2VcIiwge1xuICAgICAgICAgIHdpZHRoOiBzZWxmRWRnZS5sYWJlbC53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHNlbGZFZGdlLmxhYmVsLmhlaWdodCxcbiAgICAgICAgICByYW5rOiBub2RlLnJhbmssXG4gICAgICAgICAgb3JkZXI6IGkgKyAoKytvcmRlclNoaWZ0KSxcbiAgICAgICAgICBlOiBzZWxmRWRnZS5lLFxuICAgICAgICAgIGxhYmVsOiBzZWxmRWRnZS5sYWJlbFxuICAgICAgICB9LCBcIl9zZVwiKTtcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIG5vZGUuc2VsZkVkZ2VzO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKG5vZGUuZHVtbXkgPT09IFwic2VsZmVkZ2VcIikge1xuICAgICAgdmFyIHNlbGZOb2RlID0gZy5ub2RlKG5vZGUuZS52KSxcbiAgICAgICAgICB4ID0gc2VsZk5vZGUueCArIHNlbGZOb2RlLndpZHRoIC8gMixcbiAgICAgICAgICB5ID0gc2VsZk5vZGUueSxcbiAgICAgICAgICBkeCA9IG5vZGUueCAtIHgsXG4gICAgICAgICAgZHkgPSBzZWxmTm9kZS5oZWlnaHQgLyAyO1xuICAgICAgZy5zZXRFZGdlKG5vZGUuZSwgbm9kZS5sYWJlbCk7XG4gICAgICBnLnJlbW92ZU5vZGUodik7XG4gICAgICBub2RlLmxhYmVsLnBvaW50cyA9IFtcbiAgICAgICAgeyB4OiB4ICsgMiAqIGR4IC8gMywgeTogeSAtIGR5IH0sXG4gICAgICAgIHsgeDogeCArIDUgKiBkeCAvIDYsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyAgICAgZHggICAgLCB5OiB5IH0sXG4gICAgICAgIHsgeDogeCArIDUgKiBkeCAvIDYsIHk6IHkgKyBkeSB9LFxuICAgICAgICB7IHg6IHggKyAyICogZHggLyAzLCB5OiB5ICsgZHkgfVxuICAgICAgXTtcbiAgICAgIG5vZGUubGFiZWwueCA9IG5vZGUueDtcbiAgICAgIG5vZGUubGFiZWwueSA9IG5vZGUueTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosIGF0dHJzKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyhfLnBpY2sob2JqLCBhdHRycyksIE51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhdHRycykge1xuICB2YXIgbmV3QXR0cnMgPSB7fTtcbiAgXy5mb3JFYWNoKGF0dHJzLCBmdW5jdGlvbih2LCBrKSB7XG4gICAgbmV3QXR0cnNbay50b0xvd2VyQ2FzZSgpXSA9IHY7XG4gIH0pO1xuICByZXR1cm4gbmV3QXR0cnM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98123\n')},38436:(module,__unused_webpack_exports,__webpack_require__)=>{eval("/* global window */\n\nvar lodash;\n\nif (true) {\n try {\n lodash = __webpack_require__(96486);\n } catch (e) {}\n}\n\nif (!lodash) {\n lodash = window._;\n}\n\nmodule.exports = lodash;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg0MzYuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUEsSUFBSSxJQUE2QjtBQUNqQztBQUNBLGFBQWEsbUJBQU8sQ0FBQyxLQUFRO0FBQzdCLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL2xvZGFzaC5qcz81MWNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCB3aW5kb3cgKi9cblxudmFyIGxvZGFzaDtcblxuaWYgKHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgdHJ5IHtcbiAgICBsb2Rhc2ggPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG5pZiAoIWxvZGFzaCkge1xuICBsb2Rhc2ggPSB3aW5kb3cuXztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38436\n")},72981:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n util = __webpack_require__(11138);\n\nmodule.exports = {\n run: run,\n cleanup: cleanup\n};\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, "Layout of Compound Directed\n * Graphs."\n */\nfunction run(g) {\n var root = util.addDummyNode(g, "root", {}, "_root");\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function(e) { g.edge(e).minlen *= nodeSep; });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, "_bt"),\n bottom = util.addBorderNode(g, "_bb"),\n label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function(child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child),\n childTop = childNode.borderTop ? childNode.borderTop : child,\n childBottom = childNode.borderBottom ? childNode.borderBottom : child,\n thisWeight = childNode.borderTop ? weight : 2 * weight,\n minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function(child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function(v) { dfs(v, 1); });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(g.edges(), function(acc, e) {\n return acc + g.edge(e).weight;\n }, 0);\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function(e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI5ODEuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEtBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBLDRDQUE0QztBQUM1Qzs7QUFFQTs7QUFFQTtBQUNBLHFDQUFxQyw4QkFBOEI7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQSwyQkFBMkIsdUNBQXVDO0FBQ2xFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFlBQVk7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9uZXN0aW5nLWdyYXBoLmpzPzA5NjAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF8gPSByZXF1aXJlKFwiLi9sb2Rhc2hcIiksXG4gICAgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBydW46IHJ1bixcbiAgY2xlYW51cDogY2xlYW51cFxufTtcblxuLypcbiAqIEEgbmVzdGluZyBncmFwaCBjcmVhdGVzIGR1bW15IG5vZGVzIGZvciB0aGUgdG9wcyBhbmQgYm90dG9tcyBvZiBzdWJncmFwaHMsXG4gKiBhZGRzIGFwcHJvcHJpYXRlIGVkZ2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBjbHVzdGVyIG5vZGVzIGFyZSBwbGFjZWQgYmV0d2VlblxuICogdGhlc2UgYm91bmRyaWVzLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBncmFwaCBpcyBjb25uZWN0ZWQuXG4gKlxuICogSW4gYWRkaXRpb24gd2UgZW5zdXJlLCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIG1pbmxlbiBwcm9wZXJ0eSwgdGhhdCBub2Rlc1xuICogYW5kIHN1YmdyYXBoIGJvcmRlciBub2RlcyB0byBub3QgZW5kIHVwIG9uIHRoZSBzYW1lIHJhbmsuXG4gKlxuICogUHJlY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBpcyBhIERBR1xuICogICAgMi4gTm9kZXMgaW4gdGhlIGlucHV0IGdyYXBoIGhhcyBhIG1pbmxlbiBhdHRyaWJ1dGVcbiAqXG4gKiBQb3N0Y29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBpcyBjb25uZWN0ZWQuXG4gKiAgICAyLiBEdW1teSBub2RlcyBhcmUgYWRkZWQgZm9yIHRoZSB0b3BzIGFuZCBib3R0b21zIG9mIHN1YmdyYXBocy5cbiAqICAgIDMuIFRoZSBtaW5sZW4gYXR0cmlidXRlIGZvciBub2RlcyBpcyBhZGp1c3RlZCB0byBlbnN1cmUgbm9kZXMgZG8gbm90XG4gKiAgICAgICBnZXQgcGxhY2VkIG9uIHRoZSBzYW1lIHJhbmsgYXMgc3ViZ3JhcGggYm9yZGVyIG5vZGVzLlxuICpcbiAqIFRoZSBuZXN0aW5nIGdyYXBoIGlkZWEgY29tZXMgZnJvbSBTYW5kZXIsIFwiTGF5b3V0IG9mIENvbXBvdW5kIERpcmVjdGVkXG4gKiBHcmFwaHMuXCJcbiAqL1xuZnVuY3Rpb24gcnVuKGcpIHtcbiAgdmFyIHJvb3QgPSB1dGlsLmFkZER1bW15Tm9kZShnLCBcInJvb3RcIiwge30sIFwiX3Jvb3RcIik7XG4gIHZhciBkZXB0aHMgPSB0cmVlRGVwdGhzKGcpO1xuICB2YXIgaGVpZ2h0ID0gXy5tYXgoXy52YWx1ZXMoZGVwdGhzKSkgLSAxOyAvLyBOb3RlOiBkZXB0aHMgaXMgYW4gT2JqZWN0IG5vdCBhbiBhcnJheVxuICB2YXIgbm9kZVNlcCA9IDIgKiBoZWlnaHQgKyAxO1xuXG4gIGcuZ3JhcGgoKS5uZXN0aW5nUm9vdCA9IHJvb3Q7XG5cbiAgLy8gTXVsdGlwbHkgbWlubGVuIGJ5IG5vZGVTZXAgdG8gYWxpZ24gbm9kZXMgb24gbm9uLWJvcmRlciByYW5rcy5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkgeyBnLmVkZ2UoZSkubWlubGVuICo9IG5vZGVTZXA7IH0pO1xuXG4gIC8vIENhbGN1bGF0ZSBhIHdlaWdodCB0aGF0IGlzIHN1ZmZpY2llbnQgdG8ga2VlcCBzdWJncmFwaHMgdmVydGljYWxseSBjb21wYWN0XG4gIHZhciB3ZWlnaHQgPSBzdW1XZWlnaHRzKGcpICsgMTtcblxuICAvLyBDcmVhdGUgYm9yZGVyIG5vZGVzIGFuZCBsaW5rIHRoZW0gdXBcbiAgXy5mb3JFYWNoKGcuY2hpbGRyZW4oKSwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBkZnMoZywgcm9vdCwgbm9kZVNlcCwgd2VpZ2h0LCBoZWlnaHQsIGRlcHRocywgY2hpbGQpO1xuICB9KTtcblxuICAvLyBTYXZlIHRoZSBtdWx0aXBsaWVyIGZvciBub2RlIGxheWVycyBmb3IgbGF0ZXIgcmVtb3ZhbCBvZiBlbXB0eSBib3JkZXJcbiAgLy8gbGF5ZXJzLlxuICBnLmdyYXBoKCkubm9kZVJhbmtGYWN0b3IgPSBub2RlU2VwO1xufVxuXG5mdW5jdGlvbiBkZnMoZywgcm9vdCwgbm9kZVNlcCwgd2VpZ2h0LCBoZWlnaHQsIGRlcHRocywgdikge1xuICB2YXIgY2hpbGRyZW4gPSBnLmNoaWxkcmVuKHYpO1xuICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGlmICh2ICE9PSByb290KSB7XG4gICAgICBnLnNldEVkZ2Uocm9vdCwgdiwgeyB3ZWlnaHQ6IDAsIG1pbmxlbjogbm9kZVNlcCB9KTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRvcCA9IHV0aWwuYWRkQm9yZGVyTm9kZShnLCBcIl9idFwiKSxcbiAgICAgIGJvdHRvbSA9IHV0aWwuYWRkQm9yZGVyTm9kZShnLCBcIl9iYlwiKSxcbiAgICAgIGxhYmVsID0gZy5ub2RlKHYpO1xuXG4gIGcuc2V0UGFyZW50KHRvcCwgdik7XG4gIGxhYmVsLmJvcmRlclRvcCA9IHRvcDtcbiAgZy5zZXRQYXJlbnQoYm90dG9tLCB2KTtcbiAgbGFiZWwuYm9yZGVyQm90dG9tID0gYm90dG9tO1xuXG4gIF8uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBkZnMoZywgcm9vdCwgbm9kZVNlcCwgd2VpZ2h0LCBoZWlnaHQsIGRlcHRocywgY2hpbGQpO1xuXG4gICAgdmFyIGNoaWxkTm9kZSA9IGcubm9kZShjaGlsZCksXG4gICAgICAgIGNoaWxkVG9wID0gY2hpbGROb2RlLmJvcmRlclRvcCA/IGNoaWxkTm9kZS5ib3JkZXJUb3AgOiBjaGlsZCxcbiAgICAgICAgY2hpbGRCb3R0b20gPSBjaGlsZE5vZGUuYm9yZGVyQm90dG9tID8gY2hpbGROb2RlLmJvcmRlckJvdHRvbSA6IGNoaWxkLFxuICAgICAgICB0aGlzV2VpZ2h0ID0gY2hpbGROb2RlLmJvcmRlclRvcCA/IHdlaWdodCA6IDIgKiB3ZWlnaHQsXG4gICAgICAgIG1pbmxlbiA9IGNoaWxkVG9wICE9PSBjaGlsZEJvdHRvbSA/IDEgOiBoZWlnaHQgLSBkZXB0aHNbdl0gKyAxO1xuXG4gICAgZy5zZXRFZGdlKHRvcCwgY2hpbGRUb3AsIHtcbiAgICAgIHdlaWdodDogdGhpc1dlaWdodCxcbiAgICAgIG1pbmxlbjogbWlubGVuLFxuICAgICAgbmVzdGluZ0VkZ2U6IHRydWVcbiAgICB9KTtcblxuICAgIGcuc2V0RWRnZShjaGlsZEJvdHRvbSwgYm90dG9tLCB7XG4gICAgICB3ZWlnaHQ6IHRoaXNXZWlnaHQsXG4gICAgICBtaW5sZW46IG1pbmxlbixcbiAgICAgIG5lc3RpbmdFZGdlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmICghZy5wYXJlbnQodikpIHtcbiAgICBnLnNldEVkZ2Uocm9vdCwgdG9wLCB7IHdlaWdodDogMCwgbWlubGVuOiBoZWlnaHQgKyBkZXB0aHNbdl0gfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJlZURlcHRocyhnKSB7XG4gIHZhciBkZXB0aHMgPSB7fTtcbiAgZnVuY3Rpb24gZGZzKHYsIGRlcHRoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZy5jaGlsZHJlbih2KTtcbiAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBfLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIGRmcyhjaGlsZCwgZGVwdGggKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBkZXB0aHNbdl0gPSBkZXB0aDtcbiAgfVxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBmdW5jdGlvbih2KSB7IGRmcyh2LCAxKTsgfSk7XG4gIHJldHVybiBkZXB0aHM7XG59XG5cbmZ1bmN0aW9uIHN1bVdlaWdodHMoZykge1xuICByZXR1cm4gXy5yZWR1Y2UoZy5lZGdlcygpLCBmdW5jdGlvbihhY2MsIGUpIHtcbiAgICByZXR1cm4gYWNjICsgZy5lZGdlKGUpLndlaWdodDtcbiAgfSwgMCk7XG59XG5cbmZ1bmN0aW9uIGNsZWFudXAoZykge1xuICB2YXIgZ3JhcGhMYWJlbCA9IGcuZ3JhcGgoKTtcbiAgZy5yZW1vdmVOb2RlKGdyYXBoTGFiZWwubmVzdGluZ1Jvb3QpO1xuICBkZWxldGUgZ3JhcGhMYWJlbC5uZXN0aW5nUm9vdDtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLm5lc3RpbmdFZGdlKSB7XG4gICAgICBnLnJlbW92ZUVkZ2UoZSk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///72981\n')},45995:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n util = __webpack_require__(11138);\n\nmodule.exports = {\n run: run,\n undo: undo\n};\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a "rank" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a "dummyChains" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function(edge) { normalizeEdge(g, edge); });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v,\n vRank = g.node(v).rank,\n w = e.w,\n wRank = g.node(w).rank,\n name = e.name,\n edgeLabel = g.edge(e),\n labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0, height: 0,\n edgeLabel: edgeLabel, edgeObj: e,\n rank: vRank\n };\n dummy = util.addDummyNode(g, "edge", attrs, "_d");\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n attrs.dummy = "edge-label";\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v),\n origLabel = node.edgeLabel,\n w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === "edge-label") {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU5OTUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEtBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qyx5QkFBeUI7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLHVCQUF1QixlQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDBCQUEwQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiwwQkFBMEI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHNCQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL25vcm1hbGl6ZS5qcz82MGJkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgXyA9IHJlcXVpcmUoXCIuL2xvZGFzaFwiKSxcbiAgICB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJ1bjogcnVuLFxuICB1bmRvOiB1bmRvXG59O1xuXG4vKlxuICogQnJlYWtzIGFueSBsb25nIGVkZ2VzIGluIHRoZSBncmFwaCBpbnRvIHNob3J0IHNlZ21lbnRzIHRoYXQgc3BhbiAxIGxheWVyXG4gKiBlYWNoLiBUaGlzIG9wZXJhdGlvbiBpcyB1bmRvYWJsZSB3aXRoIHRoZSBkZW5vcm1hbGl6ZSBmdW5jdGlvbi5cbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBUaGUgaW5wdXQgZ3JhcGggaXMgYSBEQUcuXG4gKiAgICAyLiBFYWNoIG5vZGUgaW4gdGhlIGdyYXBoIGhhcyBhIFwicmFua1wiIHByb3BlcnR5LlxuICpcbiAqIFBvc3QtY29uZGl0aW9uOlxuICpcbiAqICAgIDEuIEFsbCBlZGdlcyBpbiB0aGUgZ3JhcGggaGF2ZSBhIGxlbmd0aCBvZiAxLlxuICogICAgMi4gRHVtbXkgbm9kZXMgYXJlIGFkZGVkIHdoZXJlIGVkZ2VzIGhhdmUgYmVlbiBzcGxpdCBpbnRvIHNlZ21lbnRzLlxuICogICAgMy4gVGhlIGdyYXBoIGlzIGF1Z21lbnRlZCB3aXRoIGEgXCJkdW1teUNoYWluc1wiIGF0dHJpYnV0ZSB3aGljaCBjb250YWluc1xuICogICAgICAgdGhlIGZpcnN0IGR1bW15IGluIGVhY2ggY2hhaW4gb2YgZHVtbXkgbm9kZXMgcHJvZHVjZWQuXG4gKi9cbmZ1bmN0aW9uIHJ1bihnKSB7XG4gIGcuZ3JhcGgoKS5kdW1teUNoYWlucyA9IFtdO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlZGdlKSB7IG5vcm1hbGl6ZUVkZ2UoZywgZWRnZSk7IH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVFZGdlKGcsIGUpIHtcbiAgdmFyIHYgPSBlLnYsXG4gICAgICB2UmFuayA9IGcubm9kZSh2KS5yYW5rLFxuICAgICAgdyA9IGUudyxcbiAgICAgIHdSYW5rID0gZy5ub2RlKHcpLnJhbmssXG4gICAgICBuYW1lID0gZS5uYW1lLFxuICAgICAgZWRnZUxhYmVsID0gZy5lZGdlKGUpLFxuICAgICAgbGFiZWxSYW5rID0gZWRnZUxhYmVsLmxhYmVsUmFuaztcblxuICBpZiAod1JhbmsgPT09IHZSYW5rICsgMSkgcmV0dXJuO1xuXG4gIGcucmVtb3ZlRWRnZShlKTtcblxuICB2YXIgZHVtbXksIGF0dHJzLCBpO1xuICBmb3IgKGkgPSAwLCArK3ZSYW5rOyB2UmFuayA8IHdSYW5rOyArK2ksICsrdlJhbmspIHtcbiAgICBlZGdlTGFiZWwucG9pbnRzID0gW107XG4gICAgYXR0cnMgPSB7XG4gICAgICB3aWR0aDogMCwgaGVpZ2h0OiAwLFxuICAgICAgZWRnZUxhYmVsOiBlZGdlTGFiZWwsIGVkZ2VPYmo6IGUsXG4gICAgICByYW5rOiB2UmFua1xuICAgIH07XG4gICAgZHVtbXkgPSB1dGlsLmFkZER1bW15Tm9kZShnLCBcImVkZ2VcIiwgYXR0cnMsIFwiX2RcIik7XG4gICAgaWYgKHZSYW5rID09PSBsYWJlbFJhbmspIHtcbiAgICAgIGF0dHJzLndpZHRoID0gZWRnZUxhYmVsLndpZHRoO1xuICAgICAgYXR0cnMuaGVpZ2h0ID0gZWRnZUxhYmVsLmhlaWdodDtcbiAgICAgIGF0dHJzLmR1bW15ID0gXCJlZGdlLWxhYmVsXCI7XG4gICAgICBhdHRycy5sYWJlbHBvcyA9IGVkZ2VMYWJlbC5sYWJlbHBvcztcbiAgICB9XG4gICAgZy5zZXRFZGdlKHYsIGR1bW15LCB7IHdlaWdodDogZWRnZUxhYmVsLndlaWdodCB9LCBuYW1lKTtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgZy5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goZHVtbXkpO1xuICAgIH1cbiAgICB2ID0gZHVtbXk7XG4gIH1cblxuICBnLnNldEVkZ2UodiwgdywgeyB3ZWlnaHQ6IGVkZ2VMYWJlbC53ZWlnaHQgfSwgbmFtZSk7XG59XG5cbmZ1bmN0aW9uIHVuZG8oZykge1xuICBfLmZvckVhY2goZy5ncmFwaCgpLmR1bW15Q2hhaW5zLCBmdW5jdGlvbih2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodiksXG4gICAgICAgIG9yaWdMYWJlbCA9IG5vZGUuZWRnZUxhYmVsLFxuICAgICAgICB3O1xuICAgIGcuc2V0RWRnZShub2RlLmVkZ2VPYmosIG9yaWdMYWJlbCk7XG4gICAgd2hpbGUgKG5vZGUuZHVtbXkpIHtcbiAgICAgIHcgPSBnLnN1Y2Nlc3NvcnModilbMF07XG4gICAgICBnLnJlbW92ZU5vZGUodik7XG4gICAgICBvcmlnTGFiZWwucG9pbnRzLnB1c2goeyB4OiBub2RlLngsIHk6IG5vZGUueSB9KTtcbiAgICAgIGlmIChub2RlLmR1bW15ID09PSBcImVkZ2UtbGFiZWxcIikge1xuICAgICAgICBvcmlnTGFiZWwueCA9IG5vZGUueDtcbiAgICAgICAgb3JpZ0xhYmVsLnkgPSBub2RlLnk7XG4gICAgICAgIG9yaWdMYWJlbC53aWR0aCA9IG5vZGUud2lkdGg7XG4gICAgICAgIG9yaWdMYWJlbC5oZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICAgIH1cbiAgICAgIHYgPSB3O1xuICAgICAgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///45995\n')},55093:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436);\n\nmodule.exports = addSubgraphConstraints;\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function(v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUwOTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVc7O0FBRTNCOztBQUVBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwyQkFBMkI7QUFDdEQ7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL29yZGVyL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cy5qcz8yNGZlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfID0gcmVxdWlyZShcIi4uL2xvZGFzaFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBhZGRTdWJncmFwaENvbnN0cmFpbnRzO1xuXG5mdW5jdGlvbiBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGcsIGNnLCB2cykge1xuICB2YXIgcHJldiA9IHt9LFxuICAgICAgcm9vdFByZXY7XG5cbiAgXy5mb3JFYWNoKHZzLCBmdW5jdGlvbih2KSB7XG4gICAgdmFyIGNoaWxkID0gZy5wYXJlbnQodiksXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgcHJldkNoaWxkO1xuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgcGFyZW50ID0gZy5wYXJlbnQoY2hpbGQpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwcmV2Q2hpbGQgPSBwcmV2W3BhcmVudF07XG4gICAgICAgIHByZXZbcGFyZW50XSA9IGNoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldkNoaWxkID0gcm9vdFByZXY7XG4gICAgICAgIHJvb3RQcmV2ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgICBpZiAocHJldkNoaWxkICYmIHByZXZDaGlsZCAhPT0gY2hpbGQpIHtcbiAgICAgICAgY2cuc2V0RWRnZShwcmV2Q2hpbGQsIGNoaWxkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2hpbGQgPSBwYXJlbnQ7XG4gICAgfVxuICB9KTtcblxuICAvKlxuICBmdW5jdGlvbiBkZnModikge1xuICAgIHZhciBjaGlsZHJlbiA9IHYgPyBnLmNoaWxkcmVuKHYpIDogZy5jaGlsZHJlbigpO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHZhciBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICAgICAgc3ViZ3JhcGhzID0gW107XG4gICAgICBfLmVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHZhciBjaGlsZE1pbiA9IGRmcyhjaGlsZCk7XG4gICAgICAgIGlmIChnLmNoaWxkcmVuKGNoaWxkKS5sZW5ndGgpIHtcbiAgICAgICAgICBzdWJncmFwaHMucHVzaCh7IHY6IGNoaWxkLCBvcmRlcjogY2hpbGRNaW4gfSk7XG4gICAgICAgIH1cbiAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBjaGlsZE1pbik7XG4gICAgICB9KTtcbiAgICAgIF8ucmVkdWNlKF8uc29ydEJ5KHN1YmdyYXBocywgXCJvcmRlclwiKSwgZnVuY3Rpb24ocHJldiwgY3Vycikge1xuICAgICAgICBjZy5zZXRFZGdlKHByZXYudiwgY3Vyci52KTtcbiAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIHJldHVybiBnLm5vZGUodikub3JkZXI7XG4gIH1cbiAgZGZzKHVuZGVmaW5lZCk7XG4gICovXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///55093\n')},35439:(module,__unused_webpack_exports,__webpack_require__)=>{eval("var _ = __webpack_require__(38436);\n\nmodule.exports = barycenter;\n\nfunction barycenter(g, movable) {\n return _.map(movable, function(v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(inV, function(acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + (edge.weight * nodeU.order),\n weight: acc.weight + edge.weight\n };\n }, { sum: 0, weight: 0 });\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight\n };\n }\n });\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU0MzkuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVc7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBSSxtQkFBbUI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvb3JkZXIvYmFyeWNlbnRlci5qcz85NmJmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfID0gcmVxdWlyZShcIi4uL2xvZGFzaFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXJ5Y2VudGVyO1xuXG5mdW5jdGlvbiBiYXJ5Y2VudGVyKGcsIG1vdmFibGUpIHtcbiAgcmV0dXJuIF8ubWFwKG1vdmFibGUsIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgaW5WID0gZy5pbkVkZ2VzKHYpO1xuICAgIGlmICghaW5WLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHsgdjogdiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gXy5yZWR1Y2UoaW5WLCBmdW5jdGlvbihhY2MsIGUpIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSksXG4gICAgICAgICAgICBub2RlVSA9IGcubm9kZShlLnYpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1bTogYWNjLnN1bSArIChlZGdlLndlaWdodCAqIG5vZGVVLm9yZGVyKSxcbiAgICAgICAgICB3ZWlnaHQ6IGFjYy53ZWlnaHQgKyBlZGdlLndlaWdodFxuICAgICAgICB9O1xuICAgICAgfSwgeyBzdW06IDAsIHdlaWdodDogMCB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdjogdixcbiAgICAgICAgYmFyeWNlbnRlcjogcmVzdWx0LnN1bSAvIHJlc3VsdC53ZWlnaHQsXG4gICAgICAgIHdlaWdodDogcmVzdWx0LndlaWdodFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///35439\n")},23128:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n Graph = (__webpack_require__(70574).Graph);\n\nmodule.exports = buildLayerGraph;\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the "relationship" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true }).setGraph({ root: root })\n .setDefaultNodeLabel(function(v) { return g.node(v); });\n\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || node.minRank <= rank && rank <= node.maxRank) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function(e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (_.has(node, "minRank")) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank]\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId("_root"))));\n return v;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMxMjguanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsWUFBWSxrQ0FBNEI7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsZ0JBQWdCLGFBQWEsWUFBWTtBQUNwRSxxREFBcUQsbUJBQW1COztBQUV4RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsbUNBQW1DO0FBQ2xFLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9vcmRlci9idWlsZC1sYXllci1ncmFwaC5qcz9iZWE1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBfID0gcmVxdWlyZShcIi4uL2xvZGFzaFwiKSxcbiAgICBHcmFwaCA9IHJlcXVpcmUoXCIuLi9ncmFwaGxpYlwiKS5HcmFwaDtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExheWVyR3JhcGg7XG5cbi8qXG4gKiBDb25zdHJ1Y3RzIGEgZ3JhcGggdGhhdCBjYW4gYmUgdXNlZCB0byBzb3J0IGEgbGF5ZXIgb2Ygbm9kZXMuIFRoZSBncmFwaCB3aWxsXG4gKiBjb250YWluIGFsbCBiYXNlIGFuZCBzdWJncmFwaCBub2RlcyBmcm9tIHRoZSByZXF1ZXN0IGxheWVyIGluIHRoZWlyIG9yaWdpbmFsXG4gKiBoaWVyYXJjaHkgYW5kIGFueSBlZGdlcyB0aGF0IGFyZSBpbmNpZGVudCBvbiB0aGVzZSBub2RlcyBhbmQgYXJlIG9mIHRoZSB0eXBlXG4gKiByZXF1ZXN0ZWQgYnkgdGhlIFwicmVsYXRpb25zaGlwXCIgcGFyYW1ldGVyLlxuICpcbiAqIE5vZGVzIGZyb20gdGhlIHJlcXVlc3RlZCByYW5rIHRoYXQgZG8gbm90IGhhdmUgcGFyZW50cyBhcmUgYXNzaWduZWQgYSByb290XG4gKiBub2RlIGluIHRoZSBvdXRwdXQgZ3JhcGgsIHdoaWNoIGlzIHNldCBpbiB0aGUgcm9vdCBncmFwaCBhdHRyaWJ1dGUuIFRoaXNcbiAqIG1ha2VzIGl0IGVhc3kgdG8gd2FsayB0aGUgaGllcmFyY2h5IG9mIG1vdmFibGUgbm9kZXMgZHVyaW5nIG9yZGVyaW5nLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHXG4gKiAgICAyLiBCYXNlIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXZlIGEgcmFuayBhdHRyaWJ1dGVcbiAqICAgIDMuIFN1YmdyYXBoIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXMgbWluUmFuayBhbmQgbWF4UmFuayBhdHRyaWJ1dGVzXG4gKiAgICA0LiBFZGdlcyBoYXZlIGFuIGFzc2lnbmVkIHdlaWdodFxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBPdXRwdXQgZ3JhcGggaGFzIGFsbCBub2RlcyBpbiB0aGUgbW92YWJsZSByYW5rIHdpdGggcHJlc2VydmVkXG4gKiAgICAgICBoaWVyYXJjaHkuXG4gKiAgICAyLiBSb290IG5vZGVzIGluIHRoZSBtb3ZhYmxlIGxheWVyIGFyZSBtYWRlIGNoaWxkcmVuIG9mIHRoZSBub2RlXG4gKiAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJvb3QgYXR0cmlidXRlIG9mIHRoZSBncmFwaC5cbiAqICAgIDMuIE5vbi1tb3ZhYmxlIG5vZGVzIGluY2lkZW50IG9uIG1vdmFibGUgbm9kZXMsIHNlbGVjdGVkIGJ5IHRoZVxuICogICAgICAgcmVsYXRpb25zaGlwIHBhcmFtZXRlciwgYXJlIGluY2x1ZGVkIGluIHRoZSBncmFwaCAod2l0aG91dCBoaWVyYXJjaHkpLlxuICogICAgNC4gRWRnZXMgaW5jaWRlbnQgb24gbW92YWJsZSBub2Rlcywgc2VsZWN0ZWQgYnkgdGhlIHJlbGF0aW9uc2hpcFxuICogICAgICAgcGFyYW1ldGVyLCBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dCBncmFwaC5cbiAqICAgIDUuIFRoZSB3ZWlnaHRzIGZvciBjb3BpZWQgZWRnZXMgYXJlIGFnZ3JlZ2F0ZWQgYXMgbmVlZCwgc2luY2UgdGhlIG91dHB1dFxuICogICAgICAgZ3JhcGggaXMgbm90IGEgbXVsdGktZ3JhcGguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaChnLCByYW5rLCByZWxhdGlvbnNoaXApIHtcbiAgdmFyIHJvb3QgPSBjcmVhdGVSb290Tm9kZShnKSxcbiAgICAgIHJlc3VsdCA9IG5ldyBHcmFwaCh7IGNvbXBvdW5kOiB0cnVlIH0pLnNldEdyYXBoKHsgcm9vdDogcm9vdCB9KVxuICAgICAgICAgICAgICAgICAgLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24odikgeyByZXR1cm4gZy5ub2RlKHYpOyB9KTtcblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodiksXG4gICAgICAgIHBhcmVudCA9IGcucGFyZW50KHYpO1xuXG4gICAgaWYgKG5vZGUucmFuayA9PT0gcmFuayB8fCBub2RlLm1pblJhbmsgPD0gcmFuayAmJiByYW5rIDw9IG5vZGUubWF4UmFuaykge1xuICAgICAgcmVzdWx0LnNldE5vZGUodik7XG4gICAgICByZXN1bHQuc2V0UGFyZW50KHYsIHBhcmVudCB8fCByb290KTtcblxuICAgICAgLy8gVGhpcyBhc3N1bWVzIHdlIGhhdmUgb25seSBzaG9ydCBlZGdlcyFcbiAgICAgIF8uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHUgPSBlLnYgPT09IHYgPyBlLncgOiBlLnYsXG4gICAgICAgICAgICBlZGdlID0gcmVzdWx0LmVkZ2UodSwgdiksXG4gICAgICAgICAgICB3ZWlnaHQgPSAhXy5pc1VuZGVmaW5lZChlZGdlKSA/IGVkZ2Uud2VpZ2h0IDogMDtcbiAgICAgICAgcmVzdWx0LnNldEVkZ2UodSwgdiwgeyB3ZWlnaHQ6IGcuZWRnZShlKS53ZWlnaHQgKyB3ZWlnaHQgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF8uaGFzKG5vZGUsIFwibWluUmFua1wiKSkge1xuICAgICAgICByZXN1bHQuc2V0Tm9kZSh2LCB7XG4gICAgICAgICAgYm9yZGVyTGVmdDogbm9kZS5ib3JkZXJMZWZ0W3JhbmtdLFxuICAgICAgICAgIGJvcmRlclJpZ2h0OiBub2RlLmJvcmRlclJpZ2h0W3JhbmtdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUm9vdE5vZGUoZykge1xuICB2YXIgdjtcbiAgd2hpbGUgKGcuaGFzTm9kZSgodiA9IF8udW5pcXVlSWQoXCJfcm9vdFwiKSkpKTtcbiAgcmV0dXJuIHY7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23128\n')},56630:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436);\n\nmodule.exports = crossCount;\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., "Bilayer Cross Counting."\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i-1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(southLayer,\n _.map(southLayer, function (v, i) { return i; }));\n var southEntries = _.flatten(_.map(northLayer, function(v) {\n return _.chain(g.outEdges(v))\n .map(function(e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n })\n .sortBy("pos")\n .value();\n }), true);\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function() { return 0; });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(southEntries.forEach(function(entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n while (index > 0) {\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n }));\n\n return cc;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY2MzAuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSxXQUFXO0FBQzVFO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QixhQUFhO0FBQ2I7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxXQUFXOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9vcmRlci9jcm9zcy1jb3VudC5qcz82YWZlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgXyA9IHJlcXVpcmUoXCIuLi9sb2Rhc2hcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY3Jvc3NDb3VudDtcblxuLypcbiAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGxheWVyaW5nIChhbiBhcnJheSBvZiBsYXllcnMsIGVhY2ggd2l0aCBhbiBhcnJheSBvZlxuICogb3JkZXJlcmQgbm9kZXMpIGFuZCBhIGdyYXBoIGFuZCByZXR1cm5zIGEgd2VpZ2h0ZWQgY3Jvc3NpbmcgY291bnQuXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gSW5wdXQgZ3JhcGggbXVzdCBiZSBzaW1wbGUgKG5vdCBhIG11bHRpZ3JhcGgpLCBkaXJlY3RlZCwgYW5kIGluY2x1ZGVcbiAqICAgICAgIG9ubHkgc2ltcGxlIGVkZ2VzLlxuICogICAgMi4gRWRnZXMgaW4gdGhlIGlucHV0IGdyYXBoIG11c3QgaGF2ZSBhc3NpZ25lZCB3ZWlnaHRzLlxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBUaGUgZ3JhcGggYW5kIGxheWVyaW5nIG1hdHJpeCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gaXMgZGVyaXZlZCBmcm9tIEJhcnRoLCBldCBhbC4sIFwiQmlsYXllciBDcm9zcyBDb3VudGluZy5cIlxuICovXG5mdW5jdGlvbiBjcm9zc0NvdW50KGcsIGxheWVyaW5nKSB7XG4gIHZhciBjYyA9IDA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGF5ZXJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICBjYyArPSB0d29MYXllckNyb3NzQ291bnQoZywgbGF5ZXJpbmdbaS0xXSwgbGF5ZXJpbmdbaV0pO1xuICB9XG4gIHJldHVybiBjYztcbn1cblxuZnVuY3Rpb24gdHdvTGF5ZXJDcm9zc0NvdW50KGcsIG5vcnRoTGF5ZXIsIHNvdXRoTGF5ZXIpIHtcbiAgLy8gU29ydCBhbGwgb2YgdGhlIGVkZ2VzIGJldHdlZW4gdGhlIG5vcnRoIGFuZCBzb3V0aCBsYXllcnMgYnkgdGhlaXIgcG9zaXRpb25cbiAgLy8gaW4gdGhlIG5vcnRoIGxheWVyIGFuZCB0aGVuIHRoZSBzb3V0aC4gTWFwIHRoZXNlIGVkZ2VzIHRvIHRoZSBwb3NpdGlvbiBvZlxuICAvLyB0aGVpciBoZWFkIGluIHRoZSBzb3V0aCBsYXllci5cbiAgdmFyIHNvdXRoUG9zID0gXy56aXBPYmplY3Qoc291dGhMYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5tYXAoc291dGhMYXllciwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pKTtcbiAgdmFyIHNvdXRoRW50cmllcyA9IF8uZmxhdHRlbihfLm1hcChub3J0aExheWVyLCBmdW5jdGlvbih2KSB7XG4gICAgcmV0dXJuIF8uY2hhaW4oZy5vdXRFZGdlcyh2KSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBwb3M6IHNvdXRoUG9zW2Uud10sIHdlaWdodDogZy5lZGdlKGUpLndlaWdodCB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0QnkoXCJwb3NcIilcbiAgICAgICAgICAgIC52YWx1ZSgpO1xuICB9KSwgdHJ1ZSk7XG5cbiAgLy8gQnVpbGQgdGhlIGFjY3VtdWxhdG9yIHRyZWVcbiAgdmFyIGZpcnN0SW5kZXggPSAxO1xuICB3aGlsZSAoZmlyc3RJbmRleCA8IHNvdXRoTGF5ZXIubGVuZ3RoKSBmaXJzdEluZGV4IDw8PSAxO1xuICB2YXIgdHJlZVNpemUgPSAyICogZmlyc3RJbmRleCAtIDE7XG4gIGZpcnN0SW5kZXggLT0gMTtcbiAgdmFyIHRyZWUgPSBfLm1hcChuZXcgQXJyYXkodHJlZVNpemUpLCBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0pO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgd2VpZ2h0ZWQgY3Jvc3NpbmdzXG4gIHZhciBjYyA9IDA7XG4gIF8uZm9yRWFjaChzb3V0aEVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlbnRyeSkge1xuICAgIHZhciBpbmRleCA9IGVudHJ5LnBvcyArIGZpcnN0SW5kZXg7XG4gICAgdHJlZVtpbmRleF0gKz0gZW50cnkud2VpZ2h0O1xuICAgIHZhciB3ZWlnaHRTdW0gPSAwO1xuICAgIHdoaWxlIChpbmRleCA+IDApIHtcbiAgICAgIGlmIChpbmRleCAlIDIpIHtcbiAgICAgICAgd2VpZ2h0U3VtICs9IHRyZWVbaW5kZXggKyAxXTtcbiAgICAgIH1cbiAgICAgIGluZGV4ID0gKGluZGV4IC0gMSkgPj4gMTtcbiAgICAgIHRyZWVbaW5kZXhdICs9IGVudHJ5LndlaWdodDtcbiAgICB9XG4gICAgY2MgKz0gZW50cnkud2VpZ2h0ICogd2VpZ2h0U3VtO1xuICB9KSk7XG5cbiAgcmV0dXJuIGNjO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56630\n')},53408:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n initOrder = __webpack_require__(2588),\n crossCount = __webpack_require__(56630),\n sortSubgraph = __webpack_require__(61026),\n buildLayerGraph = __webpack_require__(23128),\n addSubgraphConstraints = __webpack_require__(55093),\n Graph = (__webpack_require__(70574).Graph),\n util = __webpack_require__(11138);\n\nmodule.exports = order;\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a "rank" attribute\n * 3. Graph edges must have the "weight" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an "order" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), "inEdges"),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), "outEdges");\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function(rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function(lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function(v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, i) {\n g.node(v).order = i;\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTM0MDguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYztBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQyxLQUFlO0FBQ3hDLG1CQUFtQixtQkFBTyxDQUFDLEtBQWlCO0FBQzVDLHNCQUFzQixtQkFBTyxDQUFDLEtBQXFCO0FBQ25ELDZCQUE2QixtQkFBTyxDQUFDLEtBQTRCO0FBQ2pFLFlBQVksa0NBQTRCO0FBQ3hDLFdBQVcsbUJBQU8sQ0FBQyxLQUFTOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0NBQWdDLGNBQWM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL29yZGVyL2luZGV4LmpzP2Q5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfID0gcmVxdWlyZShcIi4uL2xvZGFzaFwiKSxcbiAgICBpbml0T3JkZXIgPSByZXF1aXJlKFwiLi9pbml0LW9yZGVyXCIpLFxuICAgIGNyb3NzQ291bnQgPSByZXF1aXJlKFwiLi9jcm9zcy1jb3VudFwiKSxcbiAgICBzb3J0U3ViZ3JhcGggPSByZXF1aXJlKFwiLi9zb3J0LXN1YmdyYXBoXCIpLFxuICAgIGJ1aWxkTGF5ZXJHcmFwaCA9IHJlcXVpcmUoXCIuL2J1aWxkLWxheWVyLWdyYXBoXCIpLFxuICAgIGFkZFN1YmdyYXBoQ29uc3RyYWludHMgPSByZXF1aXJlKFwiLi9hZGQtc3ViZ3JhcGgtY29uc3RyYWludHNcIiksXG4gICAgR3JhcGggPSByZXF1aXJlKFwiLi4vZ3JhcGhsaWJcIikuR3JhcGgsXG4gICAgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9yZGVyO1xuXG4vKlxuICogQXBwbGllcyBoZXVyaXN0aWNzIHRvIG1pbmltaXplIGVkZ2UgY3Jvc3NpbmdzIGluIHRoZSBncmFwaCBhbmQgc2V0cyB0aGUgYmVzdFxuICogb3JkZXIgc29sdXRpb24gYXMgYW4gb3JkZXIgYXR0cmlidXRlIG9uIGVhY2ggbm9kZS5cbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBtdXN0IGJlIERBR1xuICogICAgMi4gR3JhcGggbm9kZXMgbXVzdCBiZSBvYmplY3RzIHdpdGggYSBcInJhbmtcIiBhdHRyaWJ1dGVcbiAqICAgIDMuIEdyYXBoIGVkZ2VzIG11c3QgaGF2ZSB0aGUgXCJ3ZWlnaHRcIiBhdHRyaWJ1dGVcbiAqXG4gKiBQb3N0LWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gR3JhcGggbm9kZXMgd2lsbCBoYXZlIGFuIFwib3JkZXJcIiBhdHRyaWJ1dGUgYmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgdGhlXG4gKiAgICAgICBhbGdvcml0aG0uXG4gKi9cbmZ1bmN0aW9uIG9yZGVyKGcpIHtcbiAgdmFyIG1heFJhbmsgPSB1dGlsLm1heFJhbmsoZyksXG4gICAgICBkb3duTGF5ZXJHcmFwaHMgPSBidWlsZExheWVyR3JhcGhzKGcsIF8ucmFuZ2UoMSwgbWF4UmFuayArIDEpLCBcImluRWRnZXNcIiksXG4gICAgICB1cExheWVyR3JhcGhzID0gYnVpbGRMYXllckdyYXBocyhnLCBfLnJhbmdlKG1heFJhbmsgLSAxLCAtMSwgLTEpLCBcIm91dEVkZ2VzXCIpO1xuXG4gIHZhciBsYXllcmluZyA9IGluaXRPcmRlcihnKTtcbiAgYXNzaWduT3JkZXIoZywgbGF5ZXJpbmcpO1xuXG4gIHZhciBiZXN0Q0MgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICBiZXN0O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsYXN0QmVzdCA9IDA7IGxhc3RCZXN0IDwgNDsgKytpLCArK2xhc3RCZXN0KSB7XG4gICAgc3dlZXBMYXllckdyYXBocyhpICUgMiA/IGRvd25MYXllckdyYXBocyA6IHVwTGF5ZXJHcmFwaHMsIGkgJSA0ID49IDIpO1xuXG4gICAgbGF5ZXJpbmcgPSB1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7XG4gICAgdmFyIGNjID0gY3Jvc3NDb3VudChnLCBsYXllcmluZyk7XG4gICAgaWYgKGNjIDwgYmVzdENDKSB7XG4gICAgICBsYXN0QmVzdCA9IDA7XG4gICAgICBiZXN0ID0gXy5jbG9uZURlZXAobGF5ZXJpbmcpO1xuICAgICAgYmVzdENDID0gY2M7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduT3JkZXIoZywgYmVzdCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaHMoZywgcmFua3MsIHJlbGF0aW9uc2hpcCkge1xuICByZXR1cm4gXy5tYXAocmFua3MsIGZ1bmN0aW9uKHJhbmspIHtcbiAgICByZXR1cm4gYnVpbGRMYXllckdyYXBoKGcsIHJhbmssIHJlbGF0aW9uc2hpcCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzd2VlcExheWVyR3JhcGhzKGxheWVyR3JhcGhzLCBiaWFzUmlnaHQpIHtcbiAgdmFyIGNnID0gbmV3IEdyYXBoKCk7XG4gIF8uZm9yRWFjaChsYXllckdyYXBocywgZnVuY3Rpb24obGcpIHtcbiAgICB2YXIgcm9vdCA9IGxnLmdyYXBoKCkucm9vdDtcbiAgICB2YXIgc29ydGVkID0gc29ydFN1YmdyYXBoKGxnLCByb290LCBjZywgYmlhc1JpZ2h0KTtcbiAgICBfLmZvckVhY2goc29ydGVkLnZzLCBmdW5jdGlvbih2LCBpKSB7XG4gICAgICBsZy5ub2RlKHYpLm9yZGVyID0gaTtcbiAgICB9KTtcbiAgICBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGxnLCBjZywgc29ydGVkLnZzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbk9yZGVyKGcsIGxheWVyaW5nKSB7XG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24obGF5ZXIpIHtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uKHYsIGkpIHtcbiAgICAgIGcubm9kZSh2KS5vcmRlciA9IGk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53408\n')},2588:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436);\n\nmodule.exports = initOrder;\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., "A Technique for Drawing Directed\n * Graphs."\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {},\n simpleNodes = _.filter(g.nodes(), function(v) {\n return !g.children(v).length;\n }),\n maxRank = _.max(_.map(simpleNodes, function(v) { return g.node(v).rank; })),\n layers = _.map(_.range(maxRank + 1), function() { return []; });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function(v) { return g.node(v).rank; });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjU4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixRQUFRLG1CQUFPLENBQUMsS0FBVzs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsdURBQXVELHdCQUF3QjtBQUMvRSx3REFBd0QsWUFBWTs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0RBQXNELHdCQUF3QjtBQUM5RTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9vcmRlci9pbml0LW9yZGVyLmpzP2NmNjciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfID0gcmVxdWlyZShcIi4uL2xvZGFzaFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbml0T3JkZXI7XG5cbi8qXG4gKiBBc3NpZ25zIGFuIGluaXRpYWwgb3JkZXIgdmFsdWUgZm9yIGVhY2ggbm9kZSBieSBwZXJmb3JtaW5nIGEgREZTIHNlYXJjaFxuICogc3RhcnRpbmcgZnJvbSBub2RlcyBpbiB0aGUgZmlyc3QgcmFuay4gTm9kZXMgYXJlIGFzc2lnbmVkIGFuIG9yZGVyIGluIHRoZWlyXG4gKiByYW5rIGFzIHRoZXkgYXJlIGZpcnN0IHZpc2l0ZWQuXG4gKlxuICogVGhpcyBhcHByb2FjaCBjb21lcyBmcm9tIEdhbnNuZXIsIGV0IGFsLiwgXCJBIFRlY2huaXF1ZSBmb3IgRHJhd2luZyBEaXJlY3RlZFxuICogR3JhcGhzLlwiXG4gKlxuICogUmV0dXJucyBhIGxheWVyaW5nIG1hdHJpeCB3aXRoIGFuIGFycmF5IHBlciBsYXllciBhbmQgZWFjaCBsYXllciBzb3J0ZWQgYnlcbiAqIHRoZSBvcmRlciBvZiBpdHMgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGluaXRPcmRlcihnKSB7XG4gIHZhciB2aXNpdGVkID0ge30sXG4gICAgICBzaW1wbGVOb2RlcyA9IF8uZmlsdGVyKGcubm9kZXMoKSwgZnVuY3Rpb24odikge1xuICAgICAgICByZXR1cm4gIWcuY2hpbGRyZW4odikubGVuZ3RoO1xuICAgICAgfSksXG4gICAgICBtYXhSYW5rID0gXy5tYXgoXy5tYXAoc2ltcGxlTm9kZXMsIGZ1bmN0aW9uKHYpIHsgcmV0dXJuIGcubm9kZSh2KS5yYW5rOyB9KSksXG4gICAgICBsYXllcnMgPSBfLm1hcChfLnJhbmdlKG1heFJhbmsgKyAxKSwgZnVuY3Rpb24oKSB7IHJldHVybiBbXTsgfSk7XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICBpZiAoXy5oYXModmlzaXRlZCwgdikpIHJldHVybjtcbiAgICB2aXNpdGVkW3ZdID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBsYXllcnNbbm9kZS5yYW5rXS5wdXNoKHYpO1xuICAgIF8uZm9yRWFjaChnLnN1Y2Nlc3NvcnModiksIGRmcyk7XG4gIH1cblxuICB2YXIgb3JkZXJlZFZzID0gXy5zb3J0Qnkoc2ltcGxlTm9kZXMsIGZ1bmN0aW9uKHYpIHsgcmV0dXJuIGcubm9kZSh2KS5yYW5rOyB9KTtcbiAgXy5mb3JFYWNoKG9yZGVyZWRWcywgZGZzKTtcblxuICByZXR1cm4gbGF5ZXJzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2588\n')},83678:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436);\n\nmodule.exports = resolveConflicts;\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, "A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function(entry, i) {\n var tmp = mappedEntries[entry.v] = {\n indegree: 0,\n "in": [],\n out: [],\n vs: [entry.v],\n i: i\n };\n if (!_.isUndefined(entry.barycenter)) {\n tmp.barycenter = entry.barycenter;\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function(e) {\n var entryV = mappedEntries[e.v],\n entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function(entry) {\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function(uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (_.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function(wEntry) {\n wEntry["in"].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry["in"].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.chain(entries)\n .filter(function(entry) { return !entry.merged; })\n .map(function(entry) {\n return _.pick(entry, ["vs", "i", "barycenter", "weight"]);\n })\n .value();\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0,\n weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM2NzguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7O0FBRTNCOztBQUVBO0FBQ0Esd0NBQXdDLHVCQUF1QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msc0JBQXNCO0FBQ3hELDhCQUE4QixFQUFFO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QywwQkFBMEI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLHVCQUF1QjtBQUMzRDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvb3JkZXIvcmVzb2x2ZS1jb25mbGljdHMuanM/OGJmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF8gPSByZXF1aXJlKFwiLi4vbG9kYXNoXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmVDb25mbGljdHM7XG5cbi8qXG4gKiBHaXZlbiBhIGxpc3Qgb2YgZW50cmllcyBvZiB0aGUgZm9ybSB7diwgYmFyeWNlbnRlciwgd2VpZ2h0fSBhbmQgYVxuICogY29uc3RyYWludCBncmFwaCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmVzb2x2ZSBhbnkgY29uZmxpY3RzIGJldHdlZW4gdGhlXG4gKiBjb25zdHJhaW50IGdyYXBoIGFuZCB0aGUgYmFyeWNlbnRlcnMgZm9yIHRoZSBlbnRyaWVzLiBJZiB0aGUgYmFyeWNlbnRlcnMgZm9yXG4gKiBhbiBlbnRyeSB3b3VsZCB2aW9sYXRlIGEgY29uc3RyYWludCBpbiB0aGUgY29uc3RyYWludCBncmFwaCB0aGVuIHdlIGNvYWxlc2NlXG4gKiB0aGUgbm9kZXMgaW4gdGhlIGNvbmZsaWN0IGludG8gYSBuZXcgbm9kZSB0aGF0IHJlc3BlY3RzIHRoZSBjb250cmFpbnQgYW5kXG4gKiBhZ2dyZWdhdGVzIGJhcnljZW50ZXIgYW5kIHdlaWdodCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiBpbiBGb3JzdGVyLCBcIkEgRmFzdCBhbmRcbiAqIFNpbXBsZSBIdWVyaXN0aWMgZm9yIENvbnN0cmFpbmVkIFR3by1MZXZlbCBDcm9zc2luZyBSZWR1Y3Rpb24sXCIgdGhvdWdodCBpdFxuICogZGlmZmVycyBpbiBzb21lIHNwZWNpZmljIGRldGFpbHMuXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gRWFjaCBlbnRyeSBoYXMgdGhlIGZvcm0ge3YsIGJhcnljZW50ZXIsIHdlaWdodH0sIG9yIGlmIHRoZSBub2RlIGhhc1xuICogICAgICAgbm8gYmFyeWNlbnRlciwgdGhlbiB7dn0uXG4gKlxuICogUmV0dXJuczpcbiAqXG4gKiAgICBBIG5ldyBsaXN0IG9mIGVudHJpZXMgb2YgdGhlIGZvcm0ge3ZzLCBpLCBiYXJ5Y2VudGVyLCB3ZWlnaHR9LiBUaGUgbGlzdFxuICogICAgYHZzYCBtYXkgZWl0aGVyIGJlIGEgc2luZ2xldG9uIG9yIGl0IG1heSBiZSBhbiBhZ2dyZWdhdGlvbiBvZiBub2Rlc1xuICogICAgb3JkZXJlZCBzdWNoIHRoYXQgdGhleSBkbyBub3QgdmlvbGF0ZSBjb25zdHJhaW50cyBmcm9tIHRoZSBjb25zdHJhaW50XG4gKiAgICBncmFwaC4gVGhlIHByb3BlcnR5IGBpYCBpcyB0aGUgbG93ZXN0IG9yaWdpbmFsIGluZGV4IG9mIGFueSBvZiB0aGVcbiAqICAgIGVsZW1lbnRzIGluIGB2c2AuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVDb25mbGljdHMoZW50cmllcywgY2cpIHtcbiAgdmFyIG1hcHBlZEVudHJpZXMgPSB7fTtcbiAgXy5mb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5LCBpKSB7XG4gICAgdmFyIHRtcCA9IG1hcHBlZEVudHJpZXNbZW50cnkudl0gPSB7XG4gICAgICBpbmRlZ3JlZTogMCxcbiAgICAgIFwiaW5cIjogW10sXG4gICAgICBvdXQ6IFtdLFxuICAgICAgdnM6IFtlbnRyeS52XSxcbiAgICAgIGk6IGlcbiAgICB9O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlbnRyeS5iYXJ5Y2VudGVyKSkge1xuICAgICAgdG1wLmJhcnljZW50ZXIgPSBlbnRyeS5iYXJ5Y2VudGVyO1xuICAgICAgdG1wLndlaWdodCA9IGVudHJ5LndlaWdodDtcbiAgICB9XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChjZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGVudHJ5ViA9IG1hcHBlZEVudHJpZXNbZS52XSxcbiAgICAgICAgZW50cnlXID0gbWFwcGVkRW50cmllc1tlLnddO1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlbnRyeVYpICYmICFfLmlzVW5kZWZpbmVkKGVudHJ5VykpIHtcbiAgICAgIGVudHJ5Vy5pbmRlZ3JlZSsrO1xuICAgICAgZW50cnlWLm91dC5wdXNoKG1hcHBlZEVudHJpZXNbZS53XSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgc291cmNlU2V0ID0gXy5maWx0ZXIobWFwcGVkRW50cmllcywgZnVuY3Rpb24oZW50cnkpIHtcbiAgICByZXR1cm4gIWVudHJ5LmluZGVncmVlO1xuICB9KTtcblxuICByZXR1cm4gZG9SZXNvbHZlQ29uZmxpY3RzKHNvdXJjZVNldCk7XG59XG5cbmZ1bmN0aW9uIGRvUmVzb2x2ZUNvbmZsaWN0cyhzb3VyY2VTZXQpIHtcbiAgdmFyIGVudHJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBoYW5kbGVJbih2RW50cnkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odUVudHJ5KSB7XG4gICAgICBpZiAodUVudHJ5Lm1lcmdlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZCh1RW50cnkuYmFyeWNlbnRlcikgfHxcbiAgICAgICAgICBfLmlzVW5kZWZpbmVkKHZFbnRyeS5iYXJ5Y2VudGVyKSB8fFxuICAgICAgICAgIHVFbnRyeS5iYXJ5Y2VudGVyID49IHZFbnRyeS5iYXJ5Y2VudGVyKSB7XG4gICAgICAgIG1lcmdlRW50cmllcyh2RW50cnksIHVFbnRyeSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU91dCh2RW50cnkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24od0VudHJ5KSB7XG4gICAgICB3RW50cnlbXCJpblwiXS5wdXNoKHZFbnRyeSk7XG4gICAgICBpZiAoLS13RW50cnkuaW5kZWdyZWUgPT09IDApIHtcbiAgICAgICAgc291cmNlU2V0LnB1c2god0VudHJ5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgd2hpbGUgKHNvdXJjZVNldC5sZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBzb3VyY2VTZXQucG9wKCk7XG4gICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBfLmZvckVhY2goZW50cnlbXCJpblwiXS5yZXZlcnNlKCksIGhhbmRsZUluKGVudHJ5KSk7XG4gICAgXy5mb3JFYWNoKGVudHJ5Lm91dCwgaGFuZGxlT3V0KGVudHJ5KSk7XG4gIH1cblxuICByZXR1cm4gXy5jaGFpbihlbnRyaWVzKVxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oZW50cnkpIHsgcmV0dXJuICFlbnRyeS5tZXJnZWQ7IH0pXG4gICAgICAgICAgLm1hcChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIF8ucGljayhlbnRyeSwgW1widnNcIiwgXCJpXCIsIFwiYmFyeWNlbnRlclwiLCBcIndlaWdodFwiXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudmFsdWUoKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VFbnRyaWVzKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgd2VpZ2h0ID0gMDtcblxuICBpZiAodGFyZ2V0LndlaWdodCkge1xuICAgIHN1bSArPSB0YXJnZXQuYmFyeWNlbnRlciAqIHRhcmdldC53ZWlnaHQ7XG4gICAgd2VpZ2h0ICs9IHRhcmdldC53ZWlnaHQ7XG4gIH1cblxuICBpZiAoc291cmNlLndlaWdodCkge1xuICAgIHN1bSArPSBzb3VyY2UuYmFyeWNlbnRlciAqIHNvdXJjZS53ZWlnaHQ7XG4gICAgd2VpZ2h0ICs9IHNvdXJjZS53ZWlnaHQ7XG4gIH1cblxuICB0YXJnZXQudnMgPSBzb3VyY2UudnMuY29uY2F0KHRhcmdldC52cyk7XG4gIHRhcmdldC5iYXJ5Y2VudGVyID0gc3VtIC8gd2VpZ2h0O1xuICB0YXJnZXQud2VpZ2h0ID0gd2VpZ2h0O1xuICB0YXJnZXQuaSA9IE1hdGgubWluKHNvdXJjZS5pLCB0YXJnZXQuaSk7XG4gIHNvdXJjZS5tZXJnZWQgPSB0cnVlO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///83678\n')},61026:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n barycenter = __webpack_require__(35439),\n resolveConflicts = __webpack_require__(83678),\n sort = __webpack_require__(87304);\n\nmodule.exports = sortSubgraph;\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v),\n node = g.node(v),\n bl = node ? node.borderLeft : undefined,\n br = node ? node.borderRight: undefined,\n subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function(w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function(entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (_.has(subgraphResult, "barycenter")) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br], true);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!_.has(result, "barycenter")) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter = (result.barycenter * result.weight +\n blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function(entry) {\n entry.vs = _.flatten(entry.vs.map(function(v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n }), true);\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter = (target.barycenter * target.weight +\n other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjEwMjYuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsaUJBQWlCLG1CQUFPLENBQUMsS0FBYztBQUN2Qyx1QkFBdUIsbUJBQU8sQ0FBQyxLQUFxQjtBQUNwRCxXQUFXLG1CQUFPLENBQUMsS0FBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL29yZGVyL3NvcnQtc3ViZ3JhcGguanM/ODhhMyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgXyA9IHJlcXVpcmUoXCIuLi9sb2Rhc2hcIiksXG4gICAgYmFyeWNlbnRlciA9IHJlcXVpcmUoXCIuL2JhcnljZW50ZXJcIiksXG4gICAgcmVzb2x2ZUNvbmZsaWN0cyA9IHJlcXVpcmUoXCIuL3Jlc29sdmUtY29uZmxpY3RzXCIpLFxuICAgIHNvcnQgPSByZXF1aXJlKFwiLi9zb3J0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRTdWJncmFwaDtcblxuZnVuY3Rpb24gc29ydFN1YmdyYXBoKGcsIHYsIGNnLCBiaWFzUmlnaHQpIHtcbiAgdmFyIG1vdmFibGUgPSBnLmNoaWxkcmVuKHYpLFxuICAgICAgbm9kZSA9IGcubm9kZSh2KSxcbiAgICAgIGJsID0gbm9kZSA/IG5vZGUuYm9yZGVyTGVmdCA6IHVuZGVmaW5lZCxcbiAgICAgIGJyID0gbm9kZSA/IG5vZGUuYm9yZGVyUmlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgIHN1YmdyYXBocyA9IHt9O1xuXG4gIGlmIChibCkge1xuICAgIG1vdmFibGUgPSBfLmZpbHRlcihtb3ZhYmxlLCBmdW5jdGlvbih3KSB7XG4gICAgICByZXR1cm4gdyAhPT0gYmwgJiYgdyAhPT0gYnI7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgYmFyeWNlbnRlcnMgPSBiYXJ5Y2VudGVyKGcsIG1vdmFibGUpO1xuICBfLmZvckVhY2goYmFyeWNlbnRlcnMsIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgaWYgKGcuY2hpbGRyZW4oZW50cnkudikubGVuZ3RoKSB7XG4gICAgICB2YXIgc3ViZ3JhcGhSZXN1bHQgPSBzb3J0U3ViZ3JhcGgoZywgZW50cnkudiwgY2csIGJpYXNSaWdodCk7XG4gICAgICBzdWJncmFwaHNbZW50cnkudl0gPSBzdWJncmFwaFJlc3VsdDtcbiAgICAgIGlmIChfLmhhcyhzdWJncmFwaFJlc3VsdCwgXCJiYXJ5Y2VudGVyXCIpKSB7XG4gICAgICAgIG1lcmdlQmFyeWNlbnRlcnMoZW50cnksIHN1YmdyYXBoUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciBlbnRyaWVzID0gcmVzb2x2ZUNvbmZsaWN0cyhiYXJ5Y2VudGVycywgY2cpO1xuICBleHBhbmRTdWJncmFwaHMoZW50cmllcywgc3ViZ3JhcGhzKTtcblxuICB2YXIgcmVzdWx0ID0gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpO1xuXG4gIGlmIChibCkge1xuICAgIHJlc3VsdC52cyA9IF8uZmxhdHRlbihbYmwsIHJlc3VsdC52cywgYnJdLCB0cnVlKTtcbiAgICBpZiAoZy5wcmVkZWNlc3NvcnMoYmwpLmxlbmd0aCkge1xuICAgICAgdmFyIGJsUHJlZCA9IGcubm9kZShnLnByZWRlY2Vzc29ycyhibClbMF0pLFxuICAgICAgICAgIGJyUHJlZCA9IGcubm9kZShnLnByZWRlY2Vzc29ycyhicilbMF0pO1xuICAgICAgaWYgKCFfLmhhcyhyZXN1bHQsIFwiYmFyeWNlbnRlclwiKSkge1xuICAgICAgICByZXN1bHQuYmFyeWNlbnRlciA9IDA7XG4gICAgICAgIHJlc3VsdC53ZWlnaHQgPSAwO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmJhcnljZW50ZXIgPSAocmVzdWx0LmJhcnljZW50ZXIgKiByZXN1bHQud2VpZ2h0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsUHJlZC5vcmRlciArIGJyUHJlZC5vcmRlcikgLyAocmVzdWx0LndlaWdodCArIDIpO1xuICAgICAgcmVzdWx0LndlaWdodCArPSAyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFN1YmdyYXBocyhlbnRyaWVzLCBzdWJncmFwaHMpIHtcbiAgXy5mb3JFYWNoKGVudHJpZXMsIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgZW50cnkudnMgPSBfLmZsYXR0ZW4oZW50cnkudnMubWFwKGZ1bmN0aW9uKHYpIHtcbiAgICAgIGlmIChzdWJncmFwaHNbdl0pIHtcbiAgICAgICAgcmV0dXJuIHN1YmdyYXBoc1t2XS52cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2O1xuICAgIH0pLCB0cnVlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQmFyeWNlbnRlcnModGFyZ2V0LCBvdGhlcikge1xuICBpZiAoIV8uaXNVbmRlZmluZWQodGFyZ2V0LmJhcnljZW50ZXIpKSB7XG4gICAgdGFyZ2V0LmJhcnljZW50ZXIgPSAodGFyZ2V0LmJhcnljZW50ZXIgKiB0YXJnZXQud2VpZ2h0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5iYXJ5Y2VudGVyICogb3RoZXIud2VpZ2h0KSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0LndlaWdodCArIG90aGVyLndlaWdodCk7XG4gICAgdGFyZ2V0LndlaWdodCArPSBvdGhlci53ZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0LmJhcnljZW50ZXIgPSBvdGhlci5iYXJ5Y2VudGVyO1xuICAgIHRhcmdldC53ZWlnaHQgPSBvdGhlci53ZWlnaHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61026\n')},87304:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var _ = __webpack_require__(38436),\n util = __webpack_require__(11138);\n\nmodule.exports = sort;\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function(entry) {\n return _.has(entry, "barycenter");\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function(entry) { return -entry.i; }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs, true) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function(entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODczMDQuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsV0FBVyxtQkFBTyxDQUFDLEtBQVM7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHlEQUF5RCxrQkFBa0I7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvb3JkZXIvc29ydC5qcz80OWJmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfID0gcmVxdWlyZShcIi4uL2xvZGFzaFwiKSxcbiAgICB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gc29ydDtcblxuZnVuY3Rpb24gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpIHtcbiAgdmFyIHBhcnRzID0gdXRpbC5wYXJ0aXRpb24oZW50cmllcywgZnVuY3Rpb24oZW50cnkpIHtcbiAgICByZXR1cm4gXy5oYXMoZW50cnksIFwiYmFyeWNlbnRlclwiKTtcbiAgfSk7XG4gIHZhciBzb3J0YWJsZSA9IHBhcnRzLmxocyxcbiAgICAgIHVuc29ydGFibGUgPSBfLnNvcnRCeShwYXJ0cy5yaHMsIGZ1bmN0aW9uKGVudHJ5KSB7IHJldHVybiAtZW50cnkuaTsgfSksXG4gICAgICB2cyA9IFtdLFxuICAgICAgc3VtID0gMCxcbiAgICAgIHdlaWdodCA9IDAsXG4gICAgICB2c0luZGV4ID0gMDtcblxuICBzb3J0YWJsZS5zb3J0KGNvbXBhcmVXaXRoQmlhcyghIWJpYXNSaWdodCkpO1xuXG4gIHZzSW5kZXggPSBjb25zdW1lVW5zb3J0YWJsZSh2cywgdW5zb3J0YWJsZSwgdnNJbmRleCk7XG5cbiAgXy5mb3JFYWNoKHNvcnRhYmxlLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2c0luZGV4ICs9IGVudHJ5LnZzLmxlbmd0aDtcbiAgICB2cy5wdXNoKGVudHJ5LnZzKTtcbiAgICBzdW0gKz0gZW50cnkuYmFyeWNlbnRlciAqIGVudHJ5LndlaWdodDtcbiAgICB3ZWlnaHQgKz0gZW50cnkud2VpZ2h0O1xuICAgIHZzSW5kZXggPSBjb25zdW1lVW5zb3J0YWJsZSh2cywgdW5zb3J0YWJsZSwgdnNJbmRleCk7XG4gIH0pO1xuXG4gIHZhciByZXN1bHQgPSB7IHZzOiBfLmZsYXR0ZW4odnMsIHRydWUpIH07XG4gIGlmICh3ZWlnaHQpIHtcbiAgICByZXN1bHQuYmFyeWNlbnRlciA9IHN1bSAvIHdlaWdodDtcbiAgICByZXN1bHQud2VpZ2h0ID0gd2VpZ2h0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCBpbmRleCkge1xuICB2YXIgbGFzdDtcbiAgd2hpbGUgKHVuc29ydGFibGUubGVuZ3RoICYmIChsYXN0ID0gXy5sYXN0KHVuc29ydGFibGUpKS5pIDw9IGluZGV4KSB7XG4gICAgdW5zb3J0YWJsZS5wb3AoKTtcbiAgICB2cy5wdXNoKGxhc3QudnMpO1xuICAgIGluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlV2l0aEJpYXMoYmlhcykge1xuICByZXR1cm4gZnVuY3Rpb24oZW50cnlWLCBlbnRyeVcpIHtcbiAgICBpZiAoZW50cnlWLmJhcnljZW50ZXIgPCBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoZW50cnlWLmJhcnljZW50ZXIgPiBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuICFiaWFzID8gZW50cnlWLmkgLSBlbnRyeVcuaSA6IGVudHJ5Vy5pIC0gZW50cnlWLmk7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87304\n')},24219:(module,__unused_webpack_exports,__webpack_require__)=>{eval("var _ = __webpack_require__(38436);\n\nmodule.exports = parentDummyChains;\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function(v) {\n var node = g.node(v),\n edgeObj = node.edgeObj,\n pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w),\n path = pathData.path,\n lca = pathData.lca,\n pathIdx = 0,\n pathV = path[pathIdx],\n ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca &&\n g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (pathIdx < path.length - 1 &&\n g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [],\n wPath = [],\n low = Math.min(postorderNums[v].low, postorderNums[w].low),\n lim = Math.max(postorderNums[v].lim, postorderNums[w].lim),\n parent,\n lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent &&\n (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {},\n lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQyMTkuanMiLCJtYXBwaW5ncyI6IkFBQUEsUUFBUSxtQkFBTyxDQUFDLEtBQVU7O0FBRTFCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9wYXJlbnQtZHVtbXktY2hhaW5zLmpzPzMzNWYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF8gPSByZXF1aXJlKFwiLi9sb2Rhc2hcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50RHVtbXlDaGFpbnM7XG5cbmZ1bmN0aW9uIHBhcmVudER1bW15Q2hhaW5zKGcpIHtcbiAgdmFyIHBvc3RvcmRlck51bXMgPSBwb3N0b3JkZXIoZyk7XG5cbiAgXy5mb3JFYWNoKGcuZ3JhcGgoKS5kdW1teUNoYWlucywgZnVuY3Rpb24odikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpLFxuICAgICAgICBlZGdlT2JqID0gbm9kZS5lZGdlT2JqLFxuICAgICAgICBwYXRoRGF0YSA9IGZpbmRQYXRoKGcsIHBvc3RvcmRlck51bXMsIGVkZ2VPYmoudiwgZWRnZU9iai53KSxcbiAgICAgICAgcGF0aCA9IHBhdGhEYXRhLnBhdGgsXG4gICAgICAgIGxjYSA9IHBhdGhEYXRhLmxjYSxcbiAgICAgICAgcGF0aElkeCA9IDAsXG4gICAgICAgIHBhdGhWID0gcGF0aFtwYXRoSWR4XSxcbiAgICAgICAgYXNjZW5kaW5nID0gdHJ1ZTtcblxuICAgIHdoaWxlICh2ICE9PSBlZGdlT2JqLncpIHtcbiAgICAgIG5vZGUgPSBnLm5vZGUodik7XG5cbiAgICAgIGlmIChhc2NlbmRpbmcpIHtcbiAgICAgICAgd2hpbGUgKChwYXRoViA9IHBhdGhbcGF0aElkeF0pICE9PSBsY2EgJiZcbiAgICAgICAgICAgICAgIGcubm9kZShwYXRoVikubWF4UmFuayA8IG5vZGUucmFuaykge1xuICAgICAgICAgIHBhdGhJZHgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoViA9PT0gbGNhKSB7XG4gICAgICAgICAgYXNjZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhc2NlbmRpbmcpIHtcbiAgICAgICAgd2hpbGUgKHBhdGhJZHggPCBwYXRoLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgIGcubm9kZShwYXRoViA9IHBhdGhbcGF0aElkeCArIDFdKS5taW5SYW5rIDw9IG5vZGUucmFuaykge1xuICAgICAgICAgIHBhdGhJZHgrKztcbiAgICAgICAgfVxuICAgICAgICBwYXRoViA9IHBhdGhbcGF0aElkeF07XG4gICAgICB9XG5cbiAgICAgIGcuc2V0UGFyZW50KHYsIHBhdGhWKTtcbiAgICAgIHYgPSBnLnN1Y2Nlc3NvcnModilbMF07XG4gICAgfVxuICB9KTtcbn1cblxuLy8gRmluZCBhIHBhdGggZnJvbSB2IHRvIHcgdGhyb3VnaCB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciAoTENBKS4gUmV0dXJuIHRoZVxuLy8gZnVsbCBwYXRoIGFuZCB0aGUgTENBLlxuZnVuY3Rpb24gZmluZFBhdGgoZywgcG9zdG9yZGVyTnVtcywgdiwgdykge1xuICB2YXIgdlBhdGggPSBbXSxcbiAgICAgIHdQYXRoID0gW10sXG4gICAgICBsb3cgPSBNYXRoLm1pbihwb3N0b3JkZXJOdW1zW3ZdLmxvdywgcG9zdG9yZGVyTnVtc1t3XS5sb3cpLFxuICAgICAgbGltID0gTWF0aC5tYXgocG9zdG9yZGVyTnVtc1t2XS5saW0sIHBvc3RvcmRlck51bXNbd10ubGltKSxcbiAgICAgIHBhcmVudCxcbiAgICAgIGxjYTtcblxuICAvLyBUcmF2ZXJzZSB1cCBmcm9tIHYgdG8gZmluZCB0aGUgTENBXG4gIHBhcmVudCA9IHY7XG4gIGRvIHtcbiAgICBwYXJlbnQgPSBnLnBhcmVudChwYXJlbnQpO1xuICAgIHZQYXRoLnB1c2gocGFyZW50KTtcbiAgfSB3aGlsZSAocGFyZW50ICYmXG4gICAgICAgICAgIChwb3N0b3JkZXJOdW1zW3BhcmVudF0ubG93ID4gbG93IHx8IGxpbSA+IHBvc3RvcmRlck51bXNbcGFyZW50XS5saW0pKTtcbiAgbGNhID0gcGFyZW50O1xuXG4gIC8vIFRyYXZlcnNlIGZyb20gdyB0byBMQ0FcbiAgcGFyZW50ID0gdztcbiAgd2hpbGUgKChwYXJlbnQgPSBnLnBhcmVudChwYXJlbnQpKSAhPT0gbGNhKSB7XG4gICAgd1BhdGgucHVzaChwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aDogdlBhdGguY29uY2F0KHdQYXRoLnJldmVyc2UoKSksIGxjYTogbGNhIH07XG59XG5cbmZ1bmN0aW9uIHBvc3RvcmRlcihnKSB7XG4gIHZhciByZXN1bHQgPSB7fSxcbiAgICAgIGxpbSA9IDA7XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgbG93ID0gbGltO1xuICAgIF8uZm9yRWFjaChnLmNoaWxkcmVuKHYpLCBkZnMpO1xuICAgIHJlc3VsdFt2XSA9IHsgbG93OiBsb3csIGxpbTogbGltKysgfTtcbiAgfVxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBkZnMpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///24219\n")},3573:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n Graph = (__webpack_require__(70574).Graph),\n util = __webpack_require__(11138);\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, "Fast\n * and Simple Horizontal Coordinate Assignment."\n */\n\nmodule.exports = {\n positionX: positionX,\n findType1Conflicts: findType1Conflicts,\n findType2Conflicts: findType2Conflicts,\n addConflict: addConflict,\n hasConflict: hasConflict,\n verticalAlignment: verticalAlignment,\n horizontalCompaction: horizontalCompaction,\n alignCoordinates: alignCoordinates,\n findSmallestWidthAlignment: findSmallestWidthAlignment,\n balance: balance\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the "type1Conflict"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the "dummy" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var\n // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function(v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i +1), function(scanNode) {\n _.forEach(g.predecessors(scanNode), function(u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) &&\n !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function(i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function(u) {\n var uNode = g.node(u);\n if (uNode.dummy &&\n (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function(v, southLookahead) {\n if (g.node(v).dummy === "border") {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function(u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical "blocks" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we\'re trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function(layer) {\n _.forEach(layer, function(v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function(layer) {\n var prevIdx = -1;\n _.forEach(layer, function(v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function(w) { return pos[w]; });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v &&\n prevIdx < pos[w] &&\n !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? "borderLeft" : "borderRight";\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function(acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, _.bind(blockG.predecessors, blockG));\n iterate(pass2, _.bind(blockG.successors, blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function(v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function(layer) {\n var u;\n _.forEach(layer, function(v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach(["u", "d"], function(vert) {\n _.forEach(["l", "r"], function(horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === "l" ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function(x) { return x + delta; });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function(ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g),\n conflicts = _.merge(findType1Conflicts(g, layering),\n findType2Conflicts(g, layering));\n\n var xss = {},\n adjustedLayering;\n _.forEach(["u", "d"], function(vert) {\n adjustedLayering = vert === "u" ? layering : _.values(layering).reverse();\n _.forEach(["l", "r"], function(horiz) {\n if (horiz === "r") {\n adjustedLayering = _.map(adjustedLayering, function(inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = _.bind(vert === "u" ? g.predecessors : g.successors, g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering,\n align.root, align.align,\n horiz === "r");\n if (horiz === "r") {\n xs = _.mapValues(xs, function(x) { return -x; });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function(g, v, w) {\n var vLabel = g.node(v),\n wLabel = g.node(w),\n sum = 0,\n delta;\n\n sum += vLabel.width / 2;\n if (_.has(vLabel, "labelpos")) {\n switch (vLabel.labelpos.toLowerCase()) {\n case "l": delta = -vLabel.width / 2; break;\n case "r": delta = vLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (_.has(wLabel, "labelpos")) {\n switch (wLabel.labelpos.toLowerCase()) {\n case "l": delta = wLabel.width / 2; break;\n case "r": delta = -wLabel.width / 2; break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsWUFBWTtBQUN2RDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3Qyw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvcG9zaXRpb24vYmsuanM/ODU5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF8gPSByZXF1aXJlKFwiLi4vbG9kYXNoXCIpLFxuICAgIEdyYXBoID0gcmVxdWlyZShcIi4uL2dyYXBobGliXCIpLkdyYXBoLFxuICAgIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcblxuLypcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvb3JkaW5hdGUgYXNzaWdubWVudCBiYXNlZCBvbiBCcmFuZGVzIGFuZCBLw7ZwZiwgXCJGYXN0XG4gKiBhbmQgU2ltcGxlIEhvcml6b250YWwgQ29vcmRpbmF0ZSBBc3NpZ25tZW50LlwiXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBvc2l0aW9uWDogcG9zaXRpb25YLFxuICBmaW5kVHlwZTFDb25mbGljdHM6IGZpbmRUeXBlMUNvbmZsaWN0cyxcbiAgZmluZFR5cGUyQ29uZmxpY3RzOiBmaW5kVHlwZTJDb25mbGljdHMsXG4gIGFkZENvbmZsaWN0OiBhZGRDb25mbGljdCxcbiAgaGFzQ29uZmxpY3Q6IGhhc0NvbmZsaWN0LFxuICB2ZXJ0aWNhbEFsaWdubWVudDogdmVydGljYWxBbGlnbm1lbnQsXG4gIGhvcml6b250YWxDb21wYWN0aW9uOiBob3Jpem9udGFsQ29tcGFjdGlvbixcbiAgYWxpZ25Db29yZGluYXRlczogYWxpZ25Db29yZGluYXRlcyxcbiAgZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6IGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50LFxuICBiYWxhbmNlOiBiYWxhbmNlXG59O1xuXG4vKlxuICogTWFya3MgYWxsIGVkZ2VzIGluIHRoZSBncmFwaCB3aXRoIGEgdHlwZS0xIGNvbmZsaWN0IHdpdGggdGhlIFwidHlwZTFDb25mbGljdFwiXG4gKiBwcm9wZXJ0eS4gQSB0eXBlLTEgY29uZmxpY3QgaXMgb25lIHdoZXJlIGEgbm9uLWlubmVyIHNlZ21lbnQgY3Jvc3NlcyBhblxuICogaW5uZXIgc2VnbWVudC4gQW4gaW5uZXIgc2VnbWVudCBpcyBhbiBlZGdlIHdpdGggYm90aCBpbmNpZGVudCBub2RlcyBtYXJrZWRcbiAqIHdpdGggdGhlIFwiZHVtbXlcIiBwcm9wZXJ0eS5cbiAqXG4gKiBUaGlzIGFsZ29yaXRobSBzY2FucyBsYXllciBieSBsYXllciwgc3RhcnRpbmcgd2l0aCB0aGUgc2Vjb25kLCBmb3IgdHlwZS0xXG4gKiBjb25mbGljdHMgYmV0d2VlbiB0aGUgY3VycmVudCBsYXllciBhbmQgdGhlIHByZXZpb3VzIGxheWVyLiBGb3IgZWFjaCBsYXllclxuICogaXQgc2NhbnMgdGhlIG5vZGVzIGZyb20gbGVmdCB0byByaWdodCB1bnRpbCBpdCByZWFjaGVzIG9uZSB0aGF0IGlzIGluY2lkZW50XG4gKiBvbiBhbiBpbm5lciBzZWdtZW50LiBJdCB0aGVuIHNjYW5zIHByZWRlY2Vzc29ycyB0byBkZXRlcm1pbmUgaWYgdGhleSBoYXZlXG4gKiBlZGdlcyB0aGF0IGNyb3NzIHRoYXQgaW5uZXIgc2VnbWVudC4gQXQgdGhlIGVuZCBhIGZpbmFsIHNjYW4gaXMgZG9uZSBmb3IgYWxsXG4gKiBub2RlcyBvbiB0aGUgY3VycmVudCByYW5rIHRvIHNlZSBpZiB0aGV5IGNyb3NzIHRoZSBsYXN0IHZpc2l0ZWQgaW5uZXJcbiAqIHNlZ21lbnQuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gKHNhZmVseSkgYXNzdW1lcyB0aGF0IGEgZHVtbXkgbm9kZSB3aWxsIG9ubHkgYmUgaW5jaWRlbnQgb24gYVxuICogc2luZ2xlIG5vZGUgaW4gdGhlIGxheWVycyBiZWluZyBzY2FubmVkLlxuICovXG5mdW5jdGlvbiBmaW5kVHlwZTFDb25mbGljdHMoZywgbGF5ZXJpbmcpIHtcbiAgdmFyIGNvbmZsaWN0cyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHZpc2l0TGF5ZXIocHJldkxheWVyLCBsYXllcikge1xuICAgIHZhclxuICAgICAgLy8gbGFzdCB2aXNpdGVkIG5vZGUgaW4gdGhlIHByZXZpb3VzIGxheWVyIHRoYXQgaXMgaW5jaWRlbnQgb24gYW4gaW5uZXJcbiAgICAgIC8vIHNlZ21lbnQuXG4gICAgICBrMCA9IDAsXG4gICAgICAvLyBUcmFja3MgdGhlIGxhc3Qgbm9kZSBpbiB0aGlzIGxheWVyIHNjYW5uZWQgZm9yIGNyb3NzaW5ncyB3aXRoIGEgdHlwZS0xXG4gICAgICAvLyBzZWdtZW50LlxuICAgICAgc2NhblBvcyA9IDAsXG4gICAgICBwcmV2TGF5ZXJMZW5ndGggPSBwcmV2TGF5ZXIubGVuZ3RoLFxuICAgICAgbGFzdE5vZGUgPSBfLmxhc3QobGF5ZXIpO1xuXG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbih2LCBpKSB7XG4gICAgICB2YXIgdyA9IGZpbmRPdGhlcklubmVyU2VnbWVudE5vZGUoZywgdiksXG4gICAgICAgICAgazEgPSB3ID8gZy5ub2RlKHcpLm9yZGVyIDogcHJldkxheWVyTGVuZ3RoO1xuXG4gICAgICBpZiAodyB8fCB2ID09PSBsYXN0Tm9kZSkge1xuICAgICAgICBfLmZvckVhY2gobGF5ZXIuc2xpY2Uoc2NhblBvcywgaSArMSksIGZ1bmN0aW9uKHNjYW5Ob2RlKSB7XG4gICAgICAgICAgXy5mb3JFYWNoKGcucHJlZGVjZXNzb3JzKHNjYW5Ob2RlKSwgZnVuY3Rpb24odSkge1xuICAgICAgICAgICAgdmFyIHVMYWJlbCA9IGcubm9kZSh1KSxcbiAgICAgICAgICAgICAgICB1UG9zID0gdUxhYmVsLm9yZGVyO1xuICAgICAgICAgICAgaWYgKCh1UG9zIDwgazAgfHwgazEgPCB1UG9zKSAmJlxuICAgICAgICAgICAgICAgICEodUxhYmVsLmR1bW15ICYmIGcubm9kZShzY2FuTm9kZSkuZHVtbXkpKSB7XG4gICAgICAgICAgICAgIGFkZENvbmZsaWN0KGNvbmZsaWN0cywgdSwgc2Nhbk5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc2NhblBvcyA9IGkgKyAxO1xuICAgICAgICBrMCA9IGsxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgXy5yZWR1Y2UobGF5ZXJpbmcsIHZpc2l0TGF5ZXIpO1xuICByZXR1cm4gY29uZmxpY3RzO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZTJDb25mbGljdHMoZywgbGF5ZXJpbmcpIHtcbiAgdmFyIGNvbmZsaWN0cyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHNjYW4oc291dGgsIHNvdXRoUG9zLCBzb3V0aEVuZCwgcHJldk5vcnRoQm9yZGVyLCBuZXh0Tm9ydGhCb3JkZXIpIHtcbiAgICB2YXIgdjtcbiAgICBfLmZvckVhY2goXy5yYW5nZShzb3V0aFBvcywgc291dGhFbmQpLCBmdW5jdGlvbihpKSB7XG4gICAgICB2ID0gc291dGhbaV07XG4gICAgICBpZiAoZy5ub2RlKHYpLmR1bW15KSB7XG4gICAgICAgIF8uZm9yRWFjaChnLnByZWRlY2Vzc29ycyh2KSwgZnVuY3Rpb24odSkge1xuICAgICAgICAgIHZhciB1Tm9kZSA9IGcubm9kZSh1KTtcbiAgICAgICAgICBpZiAodU5vZGUuZHVtbXkgJiZcbiAgICAgICAgICAgICAgKHVOb2RlLm9yZGVyIDwgcHJldk5vcnRoQm9yZGVyIHx8IHVOb2RlLm9yZGVyID4gbmV4dE5vcnRoQm9yZGVyKSkge1xuICAgICAgICAgICAgYWRkQ29uZmxpY3QoY29uZmxpY3RzLCB1LCB2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBmdW5jdGlvbiB2aXNpdExheWVyKG5vcnRoLCBzb3V0aCkge1xuICAgIHZhciBwcmV2Tm9ydGhQb3MgPSAtMSxcbiAgICAgICAgbmV4dE5vcnRoUG9zLFxuICAgICAgICBzb3V0aFBvcyA9IDA7XG5cbiAgICBfLmZvckVhY2goc291dGgsIGZ1bmN0aW9uKHYsIHNvdXRoTG9va2FoZWFkKSB7XG4gICAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSBcImJvcmRlclwiKSB7XG4gICAgICAgIHZhciBwcmVkZWNlc3NvcnMgPSBnLnByZWRlY2Vzc29ycyh2KTtcbiAgICAgICAgaWYgKHByZWRlY2Vzc29ycy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0Tm9ydGhQb3MgPSBnLm5vZGUocHJlZGVjZXNzb3JzWzBdKS5vcmRlcjtcbiAgICAgICAgICBzY2FuKHNvdXRoLCBzb3V0aFBvcywgc291dGhMb29rYWhlYWQsIHByZXZOb3J0aFBvcywgbmV4dE5vcnRoUG9zKTtcbiAgICAgICAgICBzb3V0aFBvcyA9IHNvdXRoTG9va2FoZWFkO1xuICAgICAgICAgIHByZXZOb3J0aFBvcyA9IG5leHROb3J0aFBvcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2Nhbihzb3V0aCwgc291dGhQb3MsIHNvdXRoLmxlbmd0aCwgbmV4dE5vcnRoUG9zLCBub3J0aC5sZW5ndGgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNvdXRoO1xuICB9XG5cbiAgXy5yZWR1Y2UobGF5ZXJpbmcsIHZpc2l0TGF5ZXIpO1xuICByZXR1cm4gY29uZmxpY3RzO1xufVxuXG5mdW5jdGlvbiBmaW5kT3RoZXJJbm5lclNlZ21lbnROb2RlKGcsIHYpIHtcbiAgaWYgKGcubm9kZSh2KS5kdW1teSkge1xuICAgIHJldHVybiBfLmZpbmQoZy5wcmVkZWNlc3NvcnModiksIGZ1bmN0aW9uKHUpIHtcbiAgICAgIHJldHVybiBnLm5vZGUodSkuZHVtbXk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ29uZmxpY3QoY29uZmxpY3RzLCB2LCB3KSB7XG4gIGlmICh2ID4gdykge1xuICAgIHZhciB0bXAgPSB2O1xuICAgIHYgPSB3O1xuICAgIHcgPSB0bXA7XG4gIH1cblxuICB2YXIgY29uZmxpY3RzViA9IGNvbmZsaWN0c1t2XTtcbiAgaWYgKCFjb25mbGljdHNWKSB7XG4gICAgY29uZmxpY3RzW3ZdID0gY29uZmxpY3RzViA9IHt9O1xuICB9XG4gIGNvbmZsaWN0c1Zbd10gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNDb25mbGljdChjb25mbGljdHMsIHYsIHcpIHtcbiAgaWYgKHYgPiB3KSB7XG4gICAgdmFyIHRtcCA9IHY7XG4gICAgdiA9IHc7XG4gICAgdyA9IHRtcDtcbiAgfVxuICByZXR1cm4gXy5oYXMoY29uZmxpY3RzW3ZdLCB3KTtcbn1cblxuLypcbiAqIFRyeSB0byBhbGlnbiBub2RlcyBpbnRvIHZlcnRpY2FsIFwiYmxvY2tzXCIgd2hlcmUgcG9zc2libGUuIFRoaXMgYWxnb3JpdGhtXG4gKiBhdHRlbXB0cyB0byBhbGlnbiBhIG5vZGUgd2l0aCBvbmUgb2YgaXRzIG1lZGlhbiBuZWlnaGJvcnMuIElmIHRoZSBlZGdlXG4gKiBjb25uZWN0aW5nIGEgbmVpZ2hib3IgaXMgYSB0eXBlLTEgY29uZmxpY3QgdGhlbiB3ZSBpZ25vcmUgdGhhdCBwb3NzaWJpbGl0eS5cbiAqIElmIGEgcHJldmlvdXMgbm9kZSBoYXMgYWxyZWFkeSBmb3JtZWQgYSBibG9jayB3aXRoIGEgbm9kZSBhZnRlciB0aGUgbm9kZVxuICogd2UncmUgdHJ5aW5nIHRvIGZvcm0gYSBibG9jayB3aXRoLCB3ZSBhbHNvIGlnbm9yZSB0aGF0IHBvc3NpYmlsaXR5IC0gb3VyXG4gKiBibG9ja3Mgd291bGQgYmUgc3BsaXQgaW4gdGhhdCBzY2VuYXJpby5cbiAqL1xuZnVuY3Rpb24gdmVydGljYWxBbGlnbm1lbnQoZywgbGF5ZXJpbmcsIGNvbmZsaWN0cywgbmVpZ2hib3JGbikge1xuICB2YXIgcm9vdCA9IHt9LFxuICAgICAgYWxpZ24gPSB7fSxcbiAgICAgIHBvcyA9IHt9O1xuXG4gIC8vIFdlIGNhY2hlIHRoZSBwb3NpdGlvbiBoZXJlIGJhc2VkIG9uIHRoZSBsYXllcmluZyBiZWNhdXNlIHRoZSBncmFwaCBhbmRcbiAgLy8gbGF5ZXJpbmcgbWF5IGJlIG91dCBvZiBzeW5jLiBUaGUgbGF5ZXJpbmcgbWF0cml4IGlzIG1hbmlwdWxhdGVkIHRvXG4gIC8vIGdlbmVyYXRlIGRpZmZlcmVudCBleHRyZW1lIGFsaWdubWVudHMuXG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24obGF5ZXIpIHtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uKHYsIG9yZGVyKSB7XG4gICAgICByb290W3ZdID0gdjtcbiAgICAgIGFsaWduW3ZdID0gdjtcbiAgICAgIHBvc1t2XSA9IG9yZGVyO1xuICAgIH0pO1xuICB9KTtcblxuICBfLmZvckVhY2gobGF5ZXJpbmcsIGZ1bmN0aW9uKGxheWVyKSB7XG4gICAgdmFyIHByZXZJZHggPSAtMTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uKHYpIHtcbiAgICAgIHZhciB3cyA9IG5laWdoYm9yRm4odik7XG4gICAgICBpZiAod3MubGVuZ3RoKSB7XG4gICAgICAgIHdzID0gXy5zb3J0Qnkod3MsIGZ1bmN0aW9uKHcpIHsgcmV0dXJuIHBvc1t3XTsgfSk7XG4gICAgICAgIHZhciBtcCA9ICh3cy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKG1wKSwgaWwgPSBNYXRoLmNlaWwobXApOyBpIDw9IGlsOyArK2kpIHtcbiAgICAgICAgICB2YXIgdyA9IHdzW2ldO1xuICAgICAgICAgIGlmIChhbGlnblt2XSA9PT0gdiAmJlxuICAgICAgICAgICAgICBwcmV2SWR4IDwgcG9zW3ddICYmXG4gICAgICAgICAgICAgICFoYXNDb25mbGljdChjb25mbGljdHMsIHYsIHcpKSB7XG4gICAgICAgICAgICBhbGlnblt3XSA9IHY7XG4gICAgICAgICAgICBhbGlnblt2XSA9IHJvb3Rbdl0gPSByb290W3ddO1xuICAgICAgICAgICAgcHJldklkeCA9IHBvc1t3XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgcm9vdDogcm9vdCwgYWxpZ246IGFsaWduIH07XG59XG5cbmZ1bmN0aW9uIGhvcml6b250YWxDb21wYWN0aW9uKGcsIGxheWVyaW5nLCByb290LCBhbGlnbiwgcmV2ZXJzZVNlcCkge1xuICAvLyBUaGlzIHBvcnRpb24gb2YgdGhlIGFsZ29yaXRobSBkaWZmZXJzIGZyb20gQksgZHVlIHRvIGEgbnVtYmVyIG9mIHByb2JsZW1zLlxuICAvLyBJbnN0ZWFkIG9mIHRoZWlyIGFsZ29yaXRobSB3ZSBjb25zdHJ1Y3QgYSBuZXcgYmxvY2sgZ3JhcGggYW5kIGRvIHR3b1xuICAvLyBzd2VlcHMuIFRoZSBmaXJzdCBzd2VlcCBwbGFjZXMgYmxvY2tzIHdpdGggdGhlIHNtYWxsZXN0IHBvc3NpYmxlXG4gIC8vIGNvb3JkaW5hdGVzLiBUaGUgc2Vjb25kIHN3ZWVwIHJlbW92ZXMgdW51c2VkIHNwYWNlIGJ5IG1vdmluZyBibG9ja3MgdG8gdGhlXG4gIC8vIGdyZWF0ZXN0IGNvb3JkaW5hdGVzIHdpdGhvdXQgdmlvbGF0aW5nIHNlcGFyYXRpb24uXG4gIHZhciB4cyA9IHt9LFxuICAgICAgYmxvY2tHID0gYnVpbGRCbG9ja0dyYXBoKGcsIGxheWVyaW5nLCByb290LCByZXZlcnNlU2VwKSxcbiAgICAgIGJvcmRlclR5cGUgPSByZXZlcnNlU2VwID8gXCJib3JkZXJMZWZ0XCIgOiBcImJvcmRlclJpZ2h0XCI7XG5cbiAgZnVuY3Rpb24gaXRlcmF0ZShzZXRYc0Z1bmMsIG5leHROb2Rlc0Z1bmMpIHtcbiAgICB2YXIgc3RhY2sgPSBibG9ja0cubm9kZXMoKTtcbiAgICB2YXIgZWxlbSA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgd2hpbGUgKGVsZW0pIHtcbiAgICAgIGlmICh2aXNpdGVkW2VsZW1dKSB7XG4gICAgICAgIHNldFhzRnVuYyhlbGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpc2l0ZWRbZWxlbV0gPSB0cnVlO1xuICAgICAgICBzdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICBzdGFjayA9IHN0YWNrLmNvbmNhdChuZXh0Tm9kZXNGdW5jKGVsZW0pKTtcbiAgICAgIH1cblxuICAgICAgZWxlbSA9IHN0YWNrLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpcnN0IHBhc3MsIGFzc2lnbiBzbWFsbGVzdCBjb29yZGluYXRlc1xuICBmdW5jdGlvbiBwYXNzMShlbGVtKSB7XG4gICAgeHNbZWxlbV0gPSBibG9ja0cuaW5FZGdlcyhlbGVtKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBlKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoYWNjLCB4c1tlLnZdICsgYmxvY2tHLmVkZ2UoZSkpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gU2Vjb25kIHBhc3MsIGFzc2lnbiBncmVhdGVzdCBjb29yZGluYXRlc1xuICBmdW5jdGlvbiBwYXNzMihlbGVtKSB7XG4gICAgdmFyIG1pbiA9IGJsb2NrRy5vdXRFZGdlcyhlbGVtKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBlKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oYWNjLCB4c1tlLnddIC0gYmxvY2tHLmVkZ2UoZSkpO1xuICAgIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG5cbiAgICB2YXIgbm9kZSA9IGcubm9kZShlbGVtKTtcbiAgICBpZiAobWluICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgbm9kZS5ib3JkZXJUeXBlICE9PSBib3JkZXJUeXBlKSB7XG4gICAgICB4c1tlbGVtXSA9IE1hdGgubWF4KHhzW2VsZW1dLCBtaW4pO1xuICAgIH1cbiAgfVxuXG4gIGl0ZXJhdGUocGFzczEsIF8uYmluZChibG9ja0cucHJlZGVjZXNzb3JzLCBibG9ja0cpKTtcbiAgaXRlcmF0ZShwYXNzMiwgXy5iaW5kKGJsb2NrRy5zdWNjZXNzb3JzLCBibG9ja0cpKTtcblxuICAvLyBBc3NpZ24geCBjb29yZGluYXRlcyB0byBhbGwgbm9kZXNcbiAgXy5mb3JFYWNoKGFsaWduLCBmdW5jdGlvbih2KSB7XG4gICAgeHNbdl0gPSB4c1tyb290W3ZdXTtcbiAgfSk7XG5cbiAgcmV0dXJuIHhzO1xufVxuXG5cbmZ1bmN0aW9uIGJ1aWxkQmxvY2tHcmFwaChnLCBsYXllcmluZywgcm9vdCwgcmV2ZXJzZVNlcCkge1xuICB2YXIgYmxvY2tHcmFwaCA9IG5ldyBHcmFwaCgpLFxuICAgICAgZ3JhcGhMYWJlbCA9IGcuZ3JhcGgoKSxcbiAgICAgIHNlcEZuID0gc2VwKGdyYXBoTGFiZWwubm9kZXNlcCwgZ3JhcGhMYWJlbC5lZGdlc2VwLCByZXZlcnNlU2VwKTtcblxuICBfLmZvckVhY2gobGF5ZXJpbmcsIGZ1bmN0aW9uKGxheWVyKSB7XG4gICAgdmFyIHU7XG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbih2KSB7XG4gICAgICB2YXIgdlJvb3QgPSByb290W3ZdO1xuICAgICAgYmxvY2tHcmFwaC5zZXROb2RlKHZSb290KTtcbiAgICAgIGlmICh1KSB7XG4gICAgICAgIHZhciB1Um9vdCA9IHJvb3RbdV0sXG4gICAgICAgICAgICBwcmV2TWF4ID0gYmxvY2tHcmFwaC5lZGdlKHVSb290LCB2Um9vdCk7XG4gICAgICAgIGJsb2NrR3JhcGguc2V0RWRnZSh1Um9vdCwgdlJvb3QsIE1hdGgubWF4KHNlcEZuKGcsIHYsIHUpLCBwcmV2TWF4IHx8IDApKTtcbiAgICAgIH1cbiAgICAgIHUgPSB2O1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gYmxvY2tHcmFwaDtcbn1cblxuLypcbiAqIFJldHVybnMgdGhlIGFsaWdubWVudCB0aGF0IGhhcyB0aGUgc21hbGxlc3Qgd2lkdGggb2YgdGhlIGdpdmVuIGFsaWdubWVudHMuXG4gKi9cbmZ1bmN0aW9uIGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50KGcsIHhzcykge1xuICByZXR1cm4gXy5taW5CeShfLnZhbHVlcyh4c3MpLCBmdW5jdGlvbiAoeHMpIHtcbiAgICB2YXIgbWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgIHZhciBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cbiAgICBfLmZvckluKHhzLCBmdW5jdGlvbiAoeCwgdikge1xuICAgICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoKGcsIHYpIC8gMjtcblxuICAgICAgbWF4ID0gTWF0aC5tYXgoeCArIGhhbGZXaWR0aCwgbWF4KTtcbiAgICAgIG1pbiA9IE1hdGgubWluKHggLSBoYWxmV2lkdGgsIG1pbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF4IC0gbWluO1xuICB9KTtcbn1cblxuLypcbiAqIEFsaWduIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIG9mIHRoZSBsYXlvdXQgYWxpZ25tZW50cyBzdWNoIHRoYXRcbiAqIGxlZnQtYmlhc2VkIGFsaWdubWVudHMgaGF2ZSB0aGVpciBtaW5pbXVtIGNvb3JkaW5hdGUgYXQgdGhlIHNhbWUgcG9pbnQgYXNcbiAqIHRoZSBtaW5pbXVtIGNvb3JkaW5hdGUgb2YgdGhlIHNtYWxsZXN0IHdpZHRoIGFsaWdubWVudCBhbmQgcmlnaHQtYmlhc2VkXG4gKiBhbGlnbm1lbnRzIGhhdmUgdGhlaXIgbWF4aW11bSBjb29yZGluYXRlIGF0IHRoZSBzYW1lIHBvaW50IGFzIHRoZSBtYXhpbXVtXG4gKiBjb29yZGluYXRlIG9mIHRoZSBzbWFsbGVzdCB3aWR0aCBhbGlnbm1lbnQuXG4gKi9cbmZ1bmN0aW9uIGFsaWduQ29vcmRpbmF0ZXMoeHNzLCBhbGlnblRvKSB7XG4gIHZhciBhbGlnblRvVmFscyA9IF8udmFsdWVzKGFsaWduVG8pLFxuICAgICAgYWxpZ25Ub01pbiA9IF8ubWluKGFsaWduVG9WYWxzKSxcbiAgICAgIGFsaWduVG9NYXggPSBfLm1heChhbGlnblRvVmFscyk7XG5cbiAgXy5mb3JFYWNoKFtcInVcIiwgXCJkXCJdLCBmdW5jdGlvbih2ZXJ0KSB7XG4gICAgXy5mb3JFYWNoKFtcImxcIiwgXCJyXCJdLCBmdW5jdGlvbihob3Jpeikge1xuICAgICAgdmFyIGFsaWdubWVudCA9IHZlcnQgKyBob3JpeixcbiAgICAgICAgICB4cyA9IHhzc1thbGlnbm1lbnRdLFxuICAgICAgICAgIGRlbHRhO1xuICAgICAgaWYgKHhzID09PSBhbGlnblRvKSByZXR1cm47XG5cbiAgICAgIHZhciB4c1ZhbHMgPSBfLnZhbHVlcyh4cyk7XG4gICAgICBkZWx0YSA9IGhvcml6ID09PSBcImxcIiA/IGFsaWduVG9NaW4gLSBfLm1pbih4c1ZhbHMpIDogYWxpZ25Ub01heCAtIF8ubWF4KHhzVmFscyk7XG5cbiAgICAgIGlmIChkZWx0YSkge1xuICAgICAgICB4c3NbYWxpZ25tZW50XSA9IF8ubWFwVmFsdWVzKHhzLCBmdW5jdGlvbih4KSB7IHJldHVybiB4ICsgZGVsdGE7IH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYmFsYW5jZSh4c3MsIGFsaWduKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyh4c3MudWwsIGZ1bmN0aW9uKGlnbm9yZSwgdikge1xuICAgIGlmIChhbGlnbikge1xuICAgICAgcmV0dXJuIHhzc1thbGlnbi50b0xvd2VyQ2FzZSgpXVt2XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHhzID0gXy5zb3J0QnkoXy5tYXAoeHNzLCB2KSk7XG4gICAgICByZXR1cm4gKHhzWzFdICsgeHNbMl0pIC8gMjtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwb3NpdGlvblgoZykge1xuICB2YXIgbGF5ZXJpbmcgPSB1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyksXG4gICAgICBjb25mbGljdHMgPSBfLm1lcmdlKGZpbmRUeXBlMUNvbmZsaWN0cyhnLCBsYXllcmluZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRUeXBlMkNvbmZsaWN0cyhnLCBsYXllcmluZykpO1xuXG4gIHZhciB4c3MgPSB7fSxcbiAgICAgIGFkanVzdGVkTGF5ZXJpbmc7XG4gIF8uZm9yRWFjaChbXCJ1XCIsIFwiZFwiXSwgZnVuY3Rpb24odmVydCkge1xuICAgIGFkanVzdGVkTGF5ZXJpbmcgPSB2ZXJ0ID09PSBcInVcIiA/IGxheWVyaW5nIDogXy52YWx1ZXMobGF5ZXJpbmcpLnJldmVyc2UoKTtcbiAgICBfLmZvckVhY2goW1wibFwiLCBcInJcIl0sIGZ1bmN0aW9uKGhvcml6KSB7XG4gICAgICBpZiAoaG9yaXogPT09IFwiclwiKSB7XG4gICAgICAgIGFkanVzdGVkTGF5ZXJpbmcgPSBfLm1hcChhZGp1c3RlZExheWVyaW5nLCBmdW5jdGlvbihpbm5lcikge1xuICAgICAgICAgIHJldHVybiBfLnZhbHVlcyhpbm5lcikucmV2ZXJzZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5laWdoYm9yRm4gPSBfLmJpbmQodmVydCA9PT0gXCJ1XCIgPyBnLnByZWRlY2Vzc29ycyA6IGcuc3VjY2Vzc29ycywgZyk7XG4gICAgICB2YXIgYWxpZ24gPSB2ZXJ0aWNhbEFsaWdubWVudChnLCBhZGp1c3RlZExheWVyaW5nLCBjb25mbGljdHMsIG5laWdoYm9yRm4pO1xuICAgICAgdmFyIHhzID0gaG9yaXpvbnRhbENvbXBhY3Rpb24oZywgYWRqdXN0ZWRMYXllcmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLnJvb3QsIGFsaWduLmFsaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXogPT09IFwiclwiKTtcbiAgICAgIGlmIChob3JpeiA9PT0gXCJyXCIpIHtcbiAgICAgICAgeHMgPSBfLm1hcFZhbHVlcyh4cywgZnVuY3Rpb24oeCkgeyByZXR1cm4gLXg7IH0pO1xuICAgICAgfVxuICAgICAgeHNzW3ZlcnQgKyBob3Jpel0gPSB4cztcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFyIHNtYWxsZXN0V2lkdGggPSBmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudChnLCB4c3MpO1xuICBhbGlnbkNvb3JkaW5hdGVzKHhzcywgc21hbGxlc3RXaWR0aCk7XG4gIHJldHVybiBiYWxhbmNlKHhzcywgZy5ncmFwaCgpLmFsaWduKTtcbn1cblxuZnVuY3Rpb24gc2VwKG5vZGVTZXAsIGVkZ2VTZXAsIHJldmVyc2VTZXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGcsIHYsIHcpIHtcbiAgICB2YXIgdkxhYmVsID0gZy5ub2RlKHYpLFxuICAgICAgICB3TGFiZWwgPSBnLm5vZGUodyksXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGRlbHRhO1xuXG4gICAgc3VtICs9IHZMYWJlbC53aWR0aCAvIDI7XG4gICAgaWYgKF8uaGFzKHZMYWJlbCwgXCJsYWJlbHBvc1wiKSkge1xuICAgICAgc3dpdGNoICh2TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwibFwiOiBkZWx0YSA9IC12TGFiZWwud2lkdGggLyAyOyBicmVhaztcbiAgICAgICAgY2FzZSBcInJcIjogZGVsdGEgPSB2TGFiZWwud2lkdGggLyAyOyBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBzdW0gKz0gcmV2ZXJzZVNlcCA/IGRlbHRhIDogLWRlbHRhO1xuICAgIH1cbiAgICBkZWx0YSA9IDA7XG5cbiAgICBzdW0gKz0gKHZMYWJlbC5kdW1teSA/IGVkZ2VTZXAgOiBub2RlU2VwKSAvIDI7XG4gICAgc3VtICs9ICh3TGFiZWwuZHVtbXkgPyBlZGdlU2VwIDogbm9kZVNlcCkgLyAyO1xuXG4gICAgc3VtICs9IHdMYWJlbC53aWR0aCAvIDI7XG4gICAgaWYgKF8uaGFzKHdMYWJlbCwgXCJsYWJlbHBvc1wiKSkge1xuICAgICAgc3dpdGNoICh3TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwibFwiOiBkZWx0YSA9IHdMYWJlbC53aWR0aCAvIDI7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiclwiOiBkZWx0YSA9IC13TGFiZWwud2lkdGggLyAyOyBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBzdW0gKz0gcmV2ZXJzZVNlcCA/IGRlbHRhIDogLWRlbHRhO1xuICAgIH1cbiAgICBkZWx0YSA9IDA7XG5cbiAgICByZXR1cm4gc3VtO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3aWR0aChnLCB2KSB7XG4gIHJldHVybiBnLm5vZGUodikud2lkdGg7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3573\n')},17873:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar _ = __webpack_require__(38436),\n util = __webpack_require__(11138),\n positionX = (__webpack_require__(3573).positionX);\n\nmodule.exports = position;\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forEach(positionX(g), function(x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g),\n rankSep = g.graph().ranksep,\n prevY = 0;\n _.forEach(layering, function(layer) {\n var maxHeight = _.max(_.map(layer, function(v) { return g.node(v).height; }));\n _.forEach(layer, function(v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4NzMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsV0FBVyxtQkFBTyxDQUFDLEtBQVM7QUFDNUIsZ0JBQWdCLHFDQUF5Qjs7QUFFekM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCwwQkFBMEI7QUFDL0U7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvcG9zaXRpb24vaW5kZXguanM/ZmFhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF8gPSByZXF1aXJlKFwiLi4vbG9kYXNoXCIpLFxuICAgIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbFwiKSxcbiAgICBwb3NpdGlvblggPSByZXF1aXJlKFwiLi9ia1wiKS5wb3NpdGlvblg7XG5cbm1vZHVsZS5leHBvcnRzID0gcG9zaXRpb247XG5cbmZ1bmN0aW9uIHBvc2l0aW9uKGcpIHtcbiAgZyA9IHV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpO1xuXG4gIHBvc2l0aW9uWShnKTtcbiAgXy5mb3JFYWNoKHBvc2l0aW9uWChnKSwgZnVuY3Rpb24oeCwgdikge1xuICAgIGcubm9kZSh2KS54ID0geDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBvc2l0aW9uWShnKSB7XG4gIHZhciBsYXllcmluZyA9IHV0aWwuYnVpbGRMYXllck1hdHJpeChnKSxcbiAgICAgIHJhbmtTZXAgPSBnLmdyYXBoKCkucmFua3NlcCxcbiAgICAgIHByZXZZID0gMDtcbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbihsYXllcikge1xuICAgIHZhciBtYXhIZWlnaHQgPSBfLm1heChfLm1hcChsYXllciwgZnVuY3Rpb24odikgeyByZXR1cm4gZy5ub2RlKHYpLmhlaWdodDsgfSkpO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24odikge1xuICAgICAgZy5ub2RlKHYpLnkgPSBwcmV2WSArIG1heEhlaWdodCAvIDI7XG4gICAgfSk7XG4gICAgcHJldlkgKz0gbWF4SGVpZ2h0ICsgcmFua1NlcDtcbiAgfSk7XG59XG5cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17873\n")},20300:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n Graph = (__webpack_require__(70574).Graph),\n slack = (__webpack_require__(76681).slack);\n\nmodule.exports = feasibleTree;\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node\'s\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its "minlen" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., "A\n * Technique for Drawing Directed Graphs."\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a "rank" property that\n * respects the "minlen" property of incident edges.\n * 6. Graph edges must have a "minlen" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only "tight"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0],\n size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function(e) {\n var edgeV = e.v,\n w = (v === edgeV) ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function(e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function(v) {\n g.node(v).rank += delta;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAzMDAuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsWUFBWSxrQ0FBNEI7QUFDeEMsWUFBWSxrQ0FBdUI7O0FBRW5DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCOztBQUV2QztBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9yYW5rL2ZlYXNpYmxlLXRyZWUuanM/MjIwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF8gPSByZXF1aXJlKFwiLi4vbG9kYXNoXCIpLFxuICAgIEdyYXBoID0gcmVxdWlyZShcIi4uL2dyYXBobGliXCIpLkdyYXBoLFxuICAgIHNsYWNrID0gcmVxdWlyZShcIi4vdXRpbFwiKS5zbGFjaztcblxubW9kdWxlLmV4cG9ydHMgPSBmZWFzaWJsZVRyZWU7XG5cbi8qXG4gKiBDb25zdHJ1Y3RzIGEgc3Bhbm5pbmcgdHJlZSB3aXRoIHRpZ2h0IGVkZ2VzIGFuZCBhZGp1c3RlZCB0aGUgaW5wdXQgbm9kZSdzXG4gKiByYW5rcyB0byBhY2hpZXZlIHRoaXMuIEEgdGlnaHQgZWRnZSBpcyBvbmUgdGhhdCBpcyBoYXMgYSBsZW5ndGggdGhhdCBtYXRjaGVzXG4gKiBpdHMgXCJtaW5sZW5cIiBhdHRyaWJ1dGUuXG4gKlxuICogVGhlIGJhc2ljIHN0cnVjdHVyZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gR2Fuc25lciwgZXQgYWwuLCBcIkFcbiAqIFRlY2huaXF1ZSBmb3IgRHJhd2luZyBEaXJlY3RlZCBHcmFwaHMuXCJcbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBtdXN0IGJlIGEgREFHLlxuICogICAgMi4gR3JhcGggbXVzdCBiZSBjb25uZWN0ZWQuXG4gKiAgICAzLiBHcmFwaCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG5vZGUuXG4gKiAgICA1LiBHcmFwaCBub2RlcyBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGFzc2lnbmVkIGEgXCJyYW5rXCIgcHJvcGVydHkgdGhhdFxuICogICAgICAgcmVzcGVjdHMgdGhlIFwibWlubGVuXCIgcHJvcGVydHkgb2YgaW5jaWRlbnQgZWRnZXMuXG4gKiAgICA2LiBHcmFwaCBlZGdlcyBtdXN0IGhhdmUgYSBcIm1pbmxlblwiIHByb3BlcnR5LlxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAtIEdyYXBoIG5vZGVzIHdpbGwgaGF2ZSB0aGVpciByYW5rIGFkanVzdGVkIHRvIGVuc3VyZSB0aGF0IGFsbCBlZGdlcyBhcmVcbiAqICAgICAgdGlnaHQuXG4gKlxuICogUmV0dXJucyBhIHRyZWUgKHVuZGlyZWN0ZWQgZ3JhcGgpIHRoYXQgaXMgY29uc3RydWN0ZWQgdXNpbmcgb25seSBcInRpZ2h0XCJcbiAqIGVkZ2VzLlxuICovXG5mdW5jdGlvbiBmZWFzaWJsZVRyZWUoZykge1xuICB2YXIgdCA9IG5ldyBHcmFwaCh7IGRpcmVjdGVkOiBmYWxzZSB9KTtcblxuICAvLyBDaG9vc2UgYXJiaXRyYXJ5IG5vZGUgZnJvbSB3aGljaCB0byBzdGFydCBvdXIgdHJlZVxuICB2YXIgc3RhcnQgPSBnLm5vZGVzKClbMF0sXG4gICAgICBzaXplID0gZy5ub2RlQ291bnQoKTtcbiAgdC5zZXROb2RlKHN0YXJ0LCB7fSk7XG5cbiAgdmFyIGVkZ2UsIGRlbHRhO1xuICB3aGlsZSAodGlnaHRUcmVlKHQsIGcpIDwgc2l6ZSkge1xuICAgIGVkZ2UgPSBmaW5kTWluU2xhY2tFZGdlKHQsIGcpO1xuICAgIGRlbHRhID0gdC5oYXNOb2RlKGVkZ2UudikgPyBzbGFjayhnLCBlZGdlKSA6IC1zbGFjayhnLCBlZGdlKTtcbiAgICBzaGlmdFJhbmtzKHQsIGcsIGRlbHRhKTtcbiAgfVxuXG4gIHJldHVybiB0O1xufVxuXG4vKlxuICogRmluZHMgYSBtYXhpbWFsIHRyZWUgb2YgdGlnaHQgZWRnZXMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGVcbiAqIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRpZ2h0VHJlZSh0LCBnKSB7XG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgXy5mb3JFYWNoKGcubm9kZUVkZ2VzKHYpLCBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgZWRnZVYgPSBlLnYsXG4gICAgICAgICAgdyA9ICh2ID09PSBlZGdlVikgPyBlLncgOiBlZGdlVjtcbiAgICAgIGlmICghdC5oYXNOb2RlKHcpICYmICFzbGFjayhnLCBlKSkge1xuICAgICAgICB0LnNldE5vZGUodywge30pO1xuICAgICAgICB0LnNldEVkZ2Uodiwgdywge30pO1xuICAgICAgICBkZnModyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfLmZvckVhY2godC5ub2RlcygpLCBkZnMpO1xuICByZXR1cm4gdC5ub2RlQ291bnQoKTtcbn1cblxuLypcbiAqIEZpbmRzIHRoZSBlZGdlIHdpdGggdGhlIHNtYWxsZXN0IHNsYWNrIHRoYXQgaXMgaW5jaWRlbnQgb24gdHJlZSBhbmQgcmV0dXJuc1xuICogaXQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRNaW5TbGFja0VkZ2UodCwgZykge1xuICByZXR1cm4gXy5taW5CeShnLmVkZ2VzKCksIGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAodC5oYXNOb2RlKGUudikgIT09IHQuaGFzTm9kZShlLncpKSB7XG4gICAgICByZXR1cm4gc2xhY2soZywgZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hpZnRSYW5rcyh0LCBnLCBkZWx0YSkge1xuICBfLmZvckVhY2godC5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgZy5ub2RlKHYpLnJhbmsgKz0gZGVsdGE7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20300\n')},78093:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar rankUtil = __webpack_require__(76681),\n longestPath = rankUtil.longestPath,\n feasibleTree = __webpack_require__(20300),\n networkSimplex = __webpack_require__(42472);\n\nmodule.exports = rank;\n\n/*\n * Assigns a rank to each node in the input graph that respects the "minlen"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., "A Technique for\n * Drawing Directed Graphs."\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have "weight" and "minlen" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a "rank" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we\'ll\n * fix them up later.\n */\nfunction rank(g) {\n switch(g.graph().ranker) {\n case "network-simplex": networkSimplexRanker(g); break;\n case "tight-tree": tightTreeRanker(g); break;\n case "longest-path": longestPathRanker(g); break;\n default: networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzgwOTMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEtBQVE7QUFDL0I7QUFDQSxtQkFBbUIsbUJBQU8sQ0FBQyxLQUFpQjtBQUM1QyxxQkFBcUIsbUJBQU8sQ0FBQyxLQUFtQjs7QUFFaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELDJDQUEyQztBQUMzQywrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RhZ3JlL2xpYi9yYW5rL2luZGV4LmpzP2NiN2IiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciByYW5rVXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIiksXG4gICAgbG9uZ2VzdFBhdGggPSByYW5rVXRpbC5sb25nZXN0UGF0aCxcbiAgICBmZWFzaWJsZVRyZWUgPSByZXF1aXJlKFwiLi9mZWFzaWJsZS10cmVlXCIpLFxuICAgIG5ldHdvcmtTaW1wbGV4ID0gcmVxdWlyZShcIi4vbmV0d29yay1zaW1wbGV4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJhbms7XG5cbi8qXG4gKiBBc3NpZ25zIGEgcmFuayB0byBlYWNoIG5vZGUgaW4gdGhlIGlucHV0IGdyYXBoIHRoYXQgcmVzcGVjdHMgdGhlIFwibWlubGVuXCJcbiAqIGNvbnN0cmFpbnQgc3BlY2lmaWVkIG9uIGVkZ2VzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogVGhpcyBiYXNpYyBzdHJ1Y3R1cmUgaXMgZGVyaXZlZCBmcm9tIEdhbnNuZXIsIGV0IGFsLiwgXCJBIFRlY2huaXF1ZSBmb3JcbiAqIERyYXdpbmcgRGlyZWN0ZWQgR3JhcGhzLlwiXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gR3JhcGggbXVzdCBiZSBhIGNvbm5lY3RlZCBEQUdcbiAqICAgIDIuIEdyYXBoIG5vZGVzIG11c3QgYmUgb2JqZWN0c1xuICogICAgMy4gR3JhcGggZWRnZXMgbXVzdCBoYXZlIFwid2VpZ2h0XCIgYW5kIFwibWlubGVuXCIgYXR0cmlidXRlc1xuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBub2RlcyB3aWxsIGhhdmUgYSBcInJhbmtcIiBhdHRyaWJ1dGUgYmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgdGhlXG4gKiAgICAgICBhbGdvcml0aG0uIFJhbmtzIGNhbiBzdGFydCBhdCBhbnkgaW5kZXggKGluY2x1ZGluZyBuZWdhdGl2ZSksIHdlJ2xsXG4gKiAgICAgICBmaXggdGhlbSB1cCBsYXRlci5cbiAqL1xuZnVuY3Rpb24gcmFuayhnKSB7XG4gIHN3aXRjaChnLmdyYXBoKCkucmFua2VyKSB7XG4gICAgY2FzZSBcIm5ldHdvcmstc2ltcGxleFwiOiBuZXR3b3JrU2ltcGxleFJhbmtlcihnKTsgYnJlYWs7XG4gICAgY2FzZSBcInRpZ2h0LXRyZWVcIjogdGlnaHRUcmVlUmFua2VyKGcpOyBicmVhaztcbiAgICBjYXNlIFwibG9uZ2VzdC1wYXRoXCI6IGxvbmdlc3RQYXRoUmFua2VyKGcpOyBicmVhaztcbiAgICBkZWZhdWx0OiBuZXR3b3JrU2ltcGxleFJhbmtlcihnKTtcbiAgfVxufVxuXG4vLyBBIGZhc3QgYW5kIHNpbXBsZSByYW5rZXIsIGJ1dCByZXN1bHRzIGFyZSBmYXIgZnJvbSBvcHRpbWFsLlxudmFyIGxvbmdlc3RQYXRoUmFua2VyID0gbG9uZ2VzdFBhdGg7XG5cbmZ1bmN0aW9uIHRpZ2h0VHJlZVJhbmtlcihnKSB7XG4gIGxvbmdlc3RQYXRoKGcpO1xuICBmZWFzaWJsZVRyZWUoZyk7XG59XG5cbmZ1bmN0aW9uIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpIHtcbiAgbmV0d29ya1NpbXBsZXgoZyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///78093\n')},42472:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n feasibleTree = __webpack_require__(20300),\n slack = (__webpack_require__(76681).slack),\n initRank = (__webpack_require__(76681).longestPath),\n preorder = (__webpack_require__(70574).alg.preorder),\n postorder = (__webpack_require__(70574).alg.postorder),\n simplify = (__webpack_require__(11138).simplify);\n\nmodule.exports = networkSimplex;\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have "minlen" and "weight" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned "rank" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., "A Technique\n * for Drawing Directed Graphs." The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n initRank(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function(v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child),\n parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child),\n parent = childLab.parent,\n // True if the child is on the tail end of the edge in the directed graph\n childIsTail = true,\n // The graph\'s view of the tree edge we\'re inspecting\n graphEdge = g.edge(child, parent),\n // The accumulated cut value for the edge between this node and its parent\n cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function(e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim,\n label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function(w) {\n if (!_.has(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function(e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v,\n w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don\'t have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v),\n wLabel = t.node(w),\n tailLabel = vLabel,\n flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function(edge) {\n return flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel);\n });\n\n return _.minBy(candidates, function(edge) { return slack(g, edge); });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v,\n w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function(v) { return !g.node(v).parent; }),\n vs = preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function(v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI0NzIuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7QUFDM0IsbUJBQW1CLG1CQUFPLENBQUMsS0FBaUI7QUFDNUMsWUFBWSxrQ0FBdUI7QUFDbkMsZUFBZSx3Q0FBNkI7QUFDNUMsZUFBZSx5Q0FBbUM7QUFDbEQsZ0JBQWdCLDBDQUFvQztBQUNwRCxlQUFlLHFDQUEyQjs7QUFFMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsOENBQThDLHdCQUF3QjtBQUN0RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QywyQkFBMkI7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvcmFuay9uZXR3b3JrLXNpbXBsZXguanM/NzIxYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF8gPSByZXF1aXJlKFwiLi4vbG9kYXNoXCIpLFxuICAgIGZlYXNpYmxlVHJlZSA9IHJlcXVpcmUoXCIuL2ZlYXNpYmxlLXRyZWVcIiksXG4gICAgc2xhY2sgPSByZXF1aXJlKFwiLi91dGlsXCIpLnNsYWNrLFxuICAgIGluaXRSYW5rID0gcmVxdWlyZShcIi4vdXRpbFwiKS5sb25nZXN0UGF0aCxcbiAgICBwcmVvcmRlciA9IHJlcXVpcmUoXCIuLi9ncmFwaGxpYlwiKS5hbGcucHJlb3JkZXIsXG4gICAgcG9zdG9yZGVyID0gcmVxdWlyZShcIi4uL2dyYXBobGliXCIpLmFsZy5wb3N0b3JkZXIsXG4gICAgc2ltcGxpZnkgPSByZXF1aXJlKFwiLi4vdXRpbFwiKS5zaW1wbGlmeTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXR3b3JrU2ltcGxleDtcblxuLy8gRXhwb3NlIHNvbWUgaW50ZXJuYWxzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG5uZXR3b3JrU2ltcGxleC5pbml0TG93TGltVmFsdWVzID0gaW5pdExvd0xpbVZhbHVlcztcbm5ldHdvcmtTaW1wbGV4LmluaXRDdXRWYWx1ZXMgPSBpbml0Q3V0VmFsdWVzO1xubmV0d29ya1NpbXBsZXguY2FsY0N1dFZhbHVlID0gY2FsY0N1dFZhbHVlO1xubmV0d29ya1NpbXBsZXgubGVhdmVFZGdlID0gbGVhdmVFZGdlO1xubmV0d29ya1NpbXBsZXguZW50ZXJFZGdlID0gZW50ZXJFZGdlO1xubmV0d29ya1NpbXBsZXguZXhjaGFuZ2VFZGdlcyA9IGV4Y2hhbmdlRWRnZXM7XG5cbi8qXG4gKiBUaGUgbmV0d29yayBzaW1wbGV4IGFsZ29yaXRobSBhc3NpZ25zIHJhbmtzIHRvIGVhY2ggbm9kZSBpbiB0aGUgaW5wdXQgZ3JhcGhcbiAqIGFuZCBpdGVyYXRpdmVseSBpbXByb3ZlcyB0aGUgcmFua2luZyB0byByZWR1Y2UgdGhlIGxlbmd0aCBvZiBlZGdlcy5cbiAqXG4gKiBQcmVjb25kaXRpb25zOlxuICpcbiAqICAgIDEuIFRoZSBpbnB1dCBncmFwaCBtdXN0IGJlIGEgREFHLlxuICogICAgMi4gQWxsIG5vZGVzIGluIHRoZSBncmFwaCBtdXN0IGhhdmUgYW4gb2JqZWN0IHZhbHVlLlxuICogICAgMy4gQWxsIGVkZ2VzIGluIHRoZSBncmFwaCBtdXN0IGhhdmUgXCJtaW5sZW5cIiBhbmQgXCJ3ZWlnaHRcIiBhdHRyaWJ1dGVzLlxuICpcbiAqIFBvc3Rjb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEFsbCBub2RlcyBpbiB0aGUgZ3JhcGggd2lsbCBoYXZlIGFuIGFzc2lnbmVkIFwicmFua1wiIGF0dHJpYnV0ZSB0aGF0IGhhc1xuICogICAgICAgYmVlbiBvcHRpbWl6ZWQgYnkgdGhlIG5ldHdvcmsgc2ltcGxleCBhbGdvcml0aG0uIFJhbmtzIHN0YXJ0IGF0IDAuXG4gKlxuICpcbiAqIEEgcm91Z2ggc2tldGNoIG9mIHRoZSBhbGdvcml0aG0gaXMgYXMgZm9sbG93czpcbiAqXG4gKiAgICAxLiBBc3NpZ24gaW5pdGlhbCByYW5rcyB0byBlYWNoIG5vZGUuIFdlIHVzZSB0aGUgbG9uZ2VzdCBwYXRoIGFsZ29yaXRobSxcbiAqICAgICAgIHdoaWNoIGFzc2lnbnMgcmFua3MgdG8gdGhlIGxvd2VzdCBwb3NpdGlvbiBwb3NzaWJsZS4gSW4gZ2VuZXJhbCB0aGlzXG4gKiAgICAgICBsZWFkcyB0byB2ZXJ5IHdpZGUgYm90dG9tIHJhbmtzIGFuZCB1bm5lY2Vzc2FyaWx5IGxvbmcgZWRnZXMuXG4gKiAgICAyLiBDb25zdHJ1Y3QgYSBmZWFzaWJsZSB0aWdodCB0cmVlLiBBIHRpZ2h0IHRyZWUgaXMgb25lIHN1Y2ggdGhhdCBhbGxcbiAqICAgICAgIGVkZ2VzIGluIHRoZSB0cmVlIGhhdmUgbm8gc2xhY2sgKGRpZmZlcmVuY2UgYmV0d2VlbiBsZW5ndGggb2YgZWRnZVxuICogICAgICAgYW5kIG1pbmxlbiBmb3IgdGhlIGVkZ2UpLiBUaGlzIGJ5IGl0c2VsZiBncmVhdGx5IGltcHJvdmVzIHRoZSBhc3NpZ25lZFxuICogICAgICAgcmFua2luZ3MgYnkgc2hvcnRpbmcgZWRnZXMuXG4gKiAgICAzLiBJdGVyYXRpdmVseSBmaW5kIGVkZ2VzIHRoYXQgaGF2ZSBuZWdhdGl2ZSBjdXQgdmFsdWVzLiBHZW5lcmFsbHkgYVxuICogICAgICAgbmVnYXRpdmUgY3V0IHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSBlZGdlIGNvdWxkIGJlIHJlbW92ZWQgYW5kIGEgbmV3XG4gKiAgICAgICB0cmVlIGVkZ2UgY291bGQgYmUgYWRkZWQgdG8gcHJvZHVjZSBhIG1vcmUgY29tcGFjdCBncmFwaC5cbiAqXG4gKiBNdWNoIG9mIHRoZSBhbGdvcml0aG1zIGhlcmUgYXJlIGRlcml2ZWQgZnJvbSBHYW5zbmVyLCBldCBhbC4sIFwiQSBUZWNobmlxdWVcbiAqIGZvciBEcmF3aW5nIERpcmVjdGVkIEdyYXBocy5cIiBUaGUgc3RydWN0dXJlIG9mIHRoZSBmaWxlIHJvdWdobHkgZm9sbG93cyB0aGVcbiAqIHN0cnVjdHVyZSBvZiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0uXG4gKi9cbmZ1bmN0aW9uIG5ldHdvcmtTaW1wbGV4KGcpIHtcbiAgZyA9IHNpbXBsaWZ5KGcpO1xuICBpbml0UmFuayhnKTtcbiAgdmFyIHQgPSBmZWFzaWJsZVRyZWUoZyk7XG4gIGluaXRMb3dMaW1WYWx1ZXModCk7XG4gIGluaXRDdXRWYWx1ZXModCwgZyk7XG5cbiAgdmFyIGUsIGY7XG4gIHdoaWxlICgoZSA9IGxlYXZlRWRnZSh0KSkpIHtcbiAgICBmID0gZW50ZXJFZGdlKHQsIGcsIGUpO1xuICAgIGV4Y2hhbmdlRWRnZXModCwgZywgZSwgZik7XG4gIH1cbn1cblxuLypcbiAqIEluaXRpYWxpemVzIGN1dCB2YWx1ZXMgZm9yIGFsbCBlZGdlcyBpbiB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gaW5pdEN1dFZhbHVlcyh0LCBnKSB7XG4gIHZhciB2cyA9IHBvc3RvcmRlcih0LCB0Lm5vZGVzKCkpO1xuICB2cyA9IHZzLnNsaWNlKDAsIHZzLmxlbmd0aCAtIDEpO1xuICBfLmZvckVhY2godnMsIGZ1bmN0aW9uKHYpIHtcbiAgICBhc3NpZ25DdXRWYWx1ZSh0LCBnLCB2KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkN1dFZhbHVlKHQsIGcsIGNoaWxkKSB7XG4gIHZhciBjaGlsZExhYiA9IHQubm9kZShjaGlsZCksXG4gICAgICBwYXJlbnQgPSBjaGlsZExhYi5wYXJlbnQ7XG4gIHQuZWRnZShjaGlsZCwgcGFyZW50KS5jdXR2YWx1ZSA9IGNhbGNDdXRWYWx1ZSh0LCBnLCBjaGlsZCk7XG59XG5cbi8qXG4gKiBHaXZlbiB0aGUgdGlnaHQgdHJlZSwgaXRzIGdyYXBoLCBhbmQgYSBjaGlsZCBpbiB0aGUgZ3JhcGggY2FsY3VsYXRlIGFuZFxuICogcmV0dXJuIHRoZSBjdXQgdmFsdWUgZm9yIHRoZSBlZGdlIGJldHdlZW4gdGhlIGNoaWxkIGFuZCBpdHMgcGFyZW50LlxuICovXG5mdW5jdGlvbiBjYWxjQ3V0VmFsdWUodCwgZywgY2hpbGQpIHtcbiAgdmFyIGNoaWxkTGFiID0gdC5ub2RlKGNoaWxkKSxcbiAgICAgIHBhcmVudCA9IGNoaWxkTGFiLnBhcmVudCxcbiAgICAgIC8vIFRydWUgaWYgdGhlIGNoaWxkIGlzIG9uIHRoZSB0YWlsIGVuZCBvZiB0aGUgZWRnZSBpbiB0aGUgZGlyZWN0ZWQgZ3JhcGhcbiAgICAgIGNoaWxkSXNUYWlsID0gdHJ1ZSxcbiAgICAgIC8vIFRoZSBncmFwaCdzIHZpZXcgb2YgdGhlIHRyZWUgZWRnZSB3ZSdyZSBpbnNwZWN0aW5nXG4gICAgICBncmFwaEVkZ2UgPSBnLmVkZ2UoY2hpbGQsIHBhcmVudCksXG4gICAgICAvLyBUaGUgYWNjdW11bGF0ZWQgY3V0IHZhbHVlIGZvciB0aGUgZWRnZSBiZXR3ZWVuIHRoaXMgbm9kZSBhbmQgaXRzIHBhcmVudFxuICAgICAgY3V0VmFsdWUgPSAwO1xuXG4gIGlmICghZ3JhcGhFZGdlKSB7XG4gICAgY2hpbGRJc1RhaWwgPSBmYWxzZTtcbiAgICBncmFwaEVkZ2UgPSBnLmVkZ2UocGFyZW50LCBjaGlsZCk7XG4gIH1cblxuICBjdXRWYWx1ZSA9IGdyYXBoRWRnZS53ZWlnaHQ7XG5cbiAgXy5mb3JFYWNoKGcubm9kZUVkZ2VzKGNoaWxkKSwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBpc091dEVkZ2UgPSBlLnYgPT09IGNoaWxkLFxuICAgICAgICBvdGhlciA9IGlzT3V0RWRnZSA/IGUudyA6IGUudjtcblxuICAgIGlmIChvdGhlciAhPT0gcGFyZW50KSB7XG4gICAgICB2YXIgcG9pbnRzVG9IZWFkID0gaXNPdXRFZGdlID09PSBjaGlsZElzVGFpbCxcbiAgICAgICAgICBvdGhlcldlaWdodCA9IGcuZWRnZShlKS53ZWlnaHQ7XG5cbiAgICAgIGN1dFZhbHVlICs9IHBvaW50c1RvSGVhZCA/IG90aGVyV2VpZ2h0IDogLW90aGVyV2VpZ2h0O1xuICAgICAgaWYgKGlzVHJlZUVkZ2UodCwgY2hpbGQsIG90aGVyKSkge1xuICAgICAgICB2YXIgb3RoZXJDdXRWYWx1ZSA9IHQuZWRnZShjaGlsZCwgb3RoZXIpLmN1dHZhbHVlO1xuICAgICAgICBjdXRWYWx1ZSArPSBwb2ludHNUb0hlYWQgPyAtb3RoZXJDdXRWYWx1ZSA6IG90aGVyQ3V0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY3V0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGluaXRMb3dMaW1WYWx1ZXModHJlZSwgcm9vdCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICByb290ID0gdHJlZS5ub2RlcygpWzBdO1xuICB9XG4gIGRmc0Fzc2lnbkxvd0xpbSh0cmVlLCB7fSwgMSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIGRmc0Fzc2lnbkxvd0xpbSh0cmVlLCB2aXNpdGVkLCBuZXh0TGltLCB2LCBwYXJlbnQpIHtcbiAgdmFyIGxvdyA9IG5leHRMaW0sXG4gICAgICBsYWJlbCA9IHRyZWUubm9kZSh2KTtcblxuICB2aXNpdGVkW3ZdID0gdHJ1ZTtcbiAgXy5mb3JFYWNoKHRyZWUubmVpZ2hib3JzKHYpLCBmdW5jdGlvbih3KSB7XG4gICAgaWYgKCFfLmhhcyh2aXNpdGVkLCB3KSkge1xuICAgICAgbmV4dExpbSA9IGRmc0Fzc2lnbkxvd0xpbSh0cmVlLCB2aXNpdGVkLCBuZXh0TGltLCB3LCB2KTtcbiAgICB9XG4gIH0pO1xuXG4gIGxhYmVsLmxvdyA9IGxvdztcbiAgbGFiZWwubGltID0gbmV4dExpbSsrO1xuICBpZiAocGFyZW50KSB7XG4gICAgbGFiZWwucGFyZW50ID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE8gc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgd2hlbiB3ZSBpbmNyZW1lbnRhbGx5IHVwZGF0ZSBsb3cgbGltXG4gICAgZGVsZXRlIGxhYmVsLnBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBuZXh0TGltO1xufVxuXG5mdW5jdGlvbiBsZWF2ZUVkZ2UodHJlZSkge1xuICByZXR1cm4gXy5maW5kKHRyZWUuZWRnZXMoKSwgZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0cmVlLmVkZ2UoZSkuY3V0dmFsdWUgPCAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZW50ZXJFZGdlKHQsIGcsIGVkZ2UpIHtcbiAgdmFyIHYgPSBlZGdlLnYsXG4gICAgICB3ID0gZWRnZS53O1xuXG4gIC8vIEZvciB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHdlIGFzc3VtZSB0aGF0IHYgaXMgdGhlIHRhaWwgYW5kIHcgaXMgdGhlXG4gIC8vIGhlYWQsIHNvIGlmIHdlIGRvbid0IGhhdmUgdGhpcyBlZGdlIGluIHRoZSBncmFwaCB3ZSBzaG91bGQgZmxpcCBpdCB0b1xuICAvLyBtYXRjaCB0aGUgY29ycmVjdCBvcmllbnRhdGlvbi5cbiAgaWYgKCFnLmhhc0VkZ2UodiwgdykpIHtcbiAgICB2ID0gZWRnZS53O1xuICAgIHcgPSBlZGdlLnY7XG4gIH1cblxuICB2YXIgdkxhYmVsID0gdC5ub2RlKHYpLFxuICAgICAgd0xhYmVsID0gdC5ub2RlKHcpLFxuICAgICAgdGFpbExhYmVsID0gdkxhYmVsLFxuICAgICAgZmxpcCA9IGZhbHNlO1xuXG4gIC8vIElmIHRoZSByb290IGlzIGluIHRoZSB0YWlsIG9mIHRoZSBlZGdlIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBsb2dpYyB0aGF0XG4gIC8vIGNoZWNrcyBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgbm9kZXMgaW4gdGhlIGNhbmRpZGF0ZXMgZnVuY3Rpb24gYmVsb3cuXG4gIGlmICh2TGFiZWwubGltID4gd0xhYmVsLmxpbSkge1xuICAgIHRhaWxMYWJlbCA9IHdMYWJlbDtcbiAgICBmbGlwID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjYW5kaWRhdGVzID0gXy5maWx0ZXIoZy5lZGdlcygpLCBmdW5jdGlvbihlZGdlKSB7XG4gICAgcmV0dXJuIGZsaXAgPT09IGlzRGVzY2VuZGFudCh0LCB0Lm5vZGUoZWRnZS52KSwgdGFpbExhYmVsKSAmJlxuICAgICAgICAgICBmbGlwICE9PSBpc0Rlc2NlbmRhbnQodCwgdC5ub2RlKGVkZ2UudyksIHRhaWxMYWJlbCk7XG4gIH0pO1xuXG4gIHJldHVybiBfLm1pbkJ5KGNhbmRpZGF0ZXMsIGZ1bmN0aW9uKGVkZ2UpIHsgcmV0dXJuIHNsYWNrKGcsIGVkZ2UpOyB9KTtcbn1cblxuZnVuY3Rpb24gZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKSB7XG4gIHZhciB2ID0gZS52LFxuICAgICAgdyA9IGUudztcbiAgdC5yZW1vdmVFZGdlKHYsIHcpO1xuICB0LnNldEVkZ2UoZi52LCBmLncsIHt9KTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcbiAgdXBkYXRlUmFua3ModCwgZyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsIGcpIHtcbiAgdmFyIHJvb3QgPSBfLmZpbmQodC5ub2RlcygpLCBmdW5jdGlvbih2KSB7IHJldHVybiAhZy5ub2RlKHYpLnBhcmVudDsgfSksXG4gICAgICB2cyA9IHByZW9yZGVyKHQsIHJvb3QpO1xuICB2cyA9IHZzLnNsaWNlKDEpO1xuICBfLmZvckVhY2godnMsIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgcGFyZW50ID0gdC5ub2RlKHYpLnBhcmVudCxcbiAgICAgICAgZWRnZSA9IGcuZWRnZSh2LCBwYXJlbnQpLFxuICAgICAgICBmbGlwcGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIWVkZ2UpIHtcbiAgICAgIGVkZ2UgPSBnLmVkZ2UocGFyZW50LCB2KTtcbiAgICAgIGZsaXBwZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGcubm9kZSh2KS5yYW5rID0gZy5ub2RlKHBhcmVudCkucmFuayArIChmbGlwcGVkID8gZWRnZS5taW5sZW4gOiAtZWRnZS5taW5sZW4pO1xuICB9KTtcbn1cblxuLypcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWRnZSBpcyBpbiB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gaXNUcmVlRWRnZSh0cmVlLCB1LCB2KSB7XG4gIHJldHVybiB0cmVlLmhhc0VkZ2UodSwgdik7XG59XG5cbi8qXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBub2RlIGlzIGRlc2NlbmRhbnQgb2YgdGhlIHJvb3Qgbm9kZSBwZXIgdGhlXG4gKiBhc3NpZ25lZCBsb3cgYW5kIGxpbSBhdHRyaWJ1dGVzIGluIHRoZSB0cmVlLlxuICovXG5mdW5jdGlvbiBpc0Rlc2NlbmRhbnQodHJlZSwgdkxhYmVsLCByb290TGFiZWwpIHtcbiAgcmV0dXJuIHJvb3RMYWJlbC5sb3cgPD0gdkxhYmVsLmxpbSAmJiB2TGFiZWwubGltIDw9IHJvb3RMYWJlbC5saW07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42472\n')},76681:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436);\n\nmodule.exports = {\n longestPath: longestPath,\n slack: slack\n};\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) "rank" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (_.has(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.minBy(_.map(g.outEdges(v), function(e) {\n return dfs(e.w) - g.edge(e).minlen;\n }));\n\n if (rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null) { // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY2ODEuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVc7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL3JhbmsvdXRpbC5qcz81MjdhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgXyA9IHJlcXVpcmUoXCIuLi9sb2Rhc2hcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBsb25nZXN0UGF0aDogbG9uZ2VzdFBhdGgsXG4gIHNsYWNrOiBzbGFja1xufTtcblxuLypcbiAqIEluaXRpYWxpemVzIHJhbmtzIGZvciB0aGUgaW5wdXQgZ3JhcGggdXNpbmcgdGhlIGxvbmdlc3QgcGF0aCBhbGdvcml0aG0uIFRoaXNcbiAqIGFsZ29yaXRobSBzY2FsZXMgd2VsbCBhbmQgaXMgZmFzdCBpbiBwcmFjdGljZSwgaXQgeWllbGRzIHJhdGhlciBwb29yXG4gKiBzb2x1dGlvbnMuIE5vZGVzIGFyZSBwdXNoZWQgdG8gdGhlIGxvd2VzdCBsYXllciBwb3NzaWJsZSwgbGVhdmluZyB0aGUgYm90dG9tXG4gKiByYW5rcyB3aWRlIGFuZCBsZWF2aW5nIGVkZ2VzIGxvbmdlciB0aGFuIG5lY2Vzc2FyeS4gSG93ZXZlciwgZHVlIHRvIGl0c1xuICogc3BlZWQsIHRoaXMgYWxnb3JpdGhtIGlzIGdvb2QgZm9yIGdldHRpbmcgYW4gaW5pdGlhbCByYW5raW5nIHRoYXQgY2FuIGJlIGZlZFxuICogaW50byBvdGhlciBhbGdvcml0aG1zLlxuICpcbiAqIFRoaXMgYWxnb3JpdGhtIGRvZXMgbm90IG5vcm1hbGl6ZSBsYXllcnMgYmVjYXVzZSBpdCB3aWxsIGJlIHVzZWQgYnkgb3RoZXJcbiAqIGFsZ29yaXRobXMgaW4gbW9zdCBjYXNlcy4gSWYgdXNpbmcgdGhpcyBhbGdvcml0aG0gZGlyZWN0bHksIGJlIHN1cmUgdG9cbiAqIHJ1biBub3JtYWxpemUgYXQgdGhlIGVuZC5cbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBpcyBhIERBRy5cbiAqICAgIDIuIElucHV0IGdyYXBoIG5vZGUgbGFiZWxzIGNhbiBiZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBFYWNoIG5vZGUgd2lsbCBiZSBhc3NpZ24gYW4gKHVubm9ybWFsaXplZCkgXCJyYW5rXCIgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGxvbmdlc3RQYXRoKGcpIHtcbiAgdmFyIHZpc2l0ZWQgPSB7fTtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIHZhciBsYWJlbCA9IGcubm9kZSh2KTtcbiAgICBpZiAoXy5oYXModmlzaXRlZCwgdikpIHtcbiAgICAgIHJldHVybiBsYWJlbC5yYW5rO1xuICAgIH1cbiAgICB2aXNpdGVkW3ZdID0gdHJ1ZTtcblxuICAgIHZhciByYW5rID0gXy5taW5CeShfLm1hcChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gZGZzKGUudykgLSBnLmVkZ2UoZSkubWlubGVuO1xuICAgIH0pKTtcblxuICAgIGlmIChyYW5rID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtdKSBmb3IgTG9kYXNoIDNcbiAgICAgICAgcmFuayA9PT0gdW5kZWZpbmVkIHx8IC8vIHJldHVybiB2YWx1ZSBvZiBfLm1hcChbXSkgZm9yIExvZGFzaCA0XG4gICAgICAgIHJhbmsgPT09IG51bGwpIHsgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtudWxsXSlcbiAgICAgIHJhbmsgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiAobGFiZWwucmFuayA9IHJhbmspO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcuc291cmNlcygpLCBkZnMpO1xufVxuXG4vKlxuICogUmV0dXJucyB0aGUgYW1vdW50IG9mIHNsYWNrIGZvciB0aGUgZ2l2ZW4gZWRnZS4gVGhlIHNsYWNrIGlzIGRlZmluZWQgYXMgdGhlXG4gKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxlbmd0aCBvZiB0aGUgZWRnZSBhbmQgaXRzIG1pbmltdW0gbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzbGFjayhnLCBlKSB7XG4gIHJldHVybiBnLm5vZGUoZS53KS5yYW5rIC0gZy5ub2RlKGUudikucmFuayAtIGcuZWRnZShlKS5taW5sZW47XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76681\n')},11138:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar _ = __webpack_require__(38436),\n Graph = (__webpack_require__(70574).Graph);\n\nmodule.exports = {\n addDummyNode: addDummyNode,\n simplify: simplify,\n asNonCompoundGraph: asNonCompoundGraph,\n successorWeights: successorWeights,\n predecessorWeights: predecessorWeights,\n intersectRect: intersectRect,\n buildLayerMatrix: buildLayerMatrix,\n normalizeRanks: normalizeRanks,\n removeEmptyRanks: removeEmptyRanks,\n addBorderNode: addBorderNode,\n maxRank: maxRank,\n partition: partition,\n time: time,\n notime: notime\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function(v) { simplified.setNode(v, g.node(v)); });\n _.forEach(g.edges(), function(e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 },\n label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen)\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function(v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function(e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function(e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function(v) {\n var preds = {};\n _.forEach(g.inEdges(v), function(e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle\'s center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error("Not possible to find intersection inside of the rectangle");\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = h * dx / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = w * dy / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned "rank" and "order" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function() { return []; });\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v),\n rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.minBy(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n _.forEach(g.nodes(), function(v) {\n var node = g.node(v);\n if (_.has(node, "rank")) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.minBy(_.map(g.nodes(), function(v) { return g.node(v).rank; }));\n\n var layers = [];\n _.forEach(g.nodes(), function(v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0,\n nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function(vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function(v) { g.node(v).rank += delta; });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, "border", node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(_.map(g.nodes(), function(v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n }));\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function(value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + " time: " + (_.now() - start) + "ms");\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTExMzguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsUUFBUSxtQkFBTyxDQUFDLEtBQVU7QUFDMUIsWUFBWSxrQ0FBMkI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsbUNBQW1DO0FBQ3hFO0FBQ0EscURBQXFELHNCQUFzQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLCtCQUErQiw4QkFBOEI7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsS0FBSztBQUMvQyxLQUFLLG9CQUFvQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsWUFBWTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELHdCQUF3QjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxzREFBc0Qsd0JBQXdCOztBQUU5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixrQ0FBa0MsMEJBQTBCO0FBQzVEO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYWdyZS9saWIvdXRpbC5qcz85NjEzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgXyA9IHJlcXVpcmUoXCIuL2xvZGFzaFwiKSxcbiAgICBHcmFwaCA9IHJlcXVpcmUoXCIuL2dyYXBobGliXCIpLkdyYXBoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkRHVtbXlOb2RlOiBhZGREdW1teU5vZGUsXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgYXNOb25Db21wb3VuZEdyYXBoOiBhc05vbkNvbXBvdW5kR3JhcGgsXG4gIHN1Y2Nlc3NvcldlaWdodHM6IHN1Y2Nlc3NvcldlaWdodHMsXG4gIHByZWRlY2Vzc29yV2VpZ2h0czogcHJlZGVjZXNzb3JXZWlnaHRzLFxuICBpbnRlcnNlY3RSZWN0OiBpbnRlcnNlY3RSZWN0LFxuICBidWlsZExheWVyTWF0cml4OiBidWlsZExheWVyTWF0cml4LFxuICBub3JtYWxpemVSYW5rczogbm9ybWFsaXplUmFua3MsXG4gIHJlbW92ZUVtcHR5UmFua3M6IHJlbW92ZUVtcHR5UmFua3MsXG4gIGFkZEJvcmRlck5vZGU6IGFkZEJvcmRlck5vZGUsXG4gIG1heFJhbms6IG1heFJhbmssXG4gIHBhcnRpdGlvbjogcGFydGl0aW9uLFxuICB0aW1lOiB0aW1lLFxuICBub3RpbWU6IG5vdGltZVxufTtcblxuLypcbiAqIEFkZHMgYSBkdW1teSBub2RlIHRvIHRoZSBncmFwaCBhbmQgcmV0dXJuIHYuXG4gKi9cbmZ1bmN0aW9uIGFkZER1bW15Tm9kZShnLCB0eXBlLCBhdHRycywgbmFtZSkge1xuICB2YXIgdjtcbiAgZG8ge1xuICAgIHYgPSBfLnVuaXF1ZUlkKG5hbWUpO1xuICB9IHdoaWxlIChnLmhhc05vZGUodikpO1xuXG4gIGF0dHJzLmR1bW15ID0gdHlwZTtcbiAgZy5zZXROb2RlKHYsIGF0dHJzKTtcbiAgcmV0dXJuIHY7XG59XG5cbi8qXG4gKiBSZXR1cm5zIGEgbmV3IGdyYXBoIHdpdGggb25seSBzaW1wbGUgZWRnZXMuIEhhbmRsZXMgYWdncmVnYXRpb24gb2YgZGF0YVxuICogYXNzb2NpYXRlZCB3aXRoIG11bHRpLWVkZ2VzLlxuICovXG5mdW5jdGlvbiBzaW1wbGlmeShnKSB7XG4gIHZhciBzaW1wbGlmaWVkID0gbmV3IEdyYXBoKCkuc2V0R3JhcGgoZy5ncmFwaCgpKTtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24odikgeyBzaW1wbGlmaWVkLnNldE5vZGUodiwgZy5ub2RlKHYpKTsgfSk7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2ltcGxlTGFiZWwgPSBzaW1wbGlmaWVkLmVkZ2UoZS52LCBlLncpIHx8IHsgd2VpZ2h0OiAwLCBtaW5sZW46IDEgfSxcbiAgICAgICAgbGFiZWwgPSBnLmVkZ2UoZSk7XG4gICAgc2ltcGxpZmllZC5zZXRFZGdlKGUudiwgZS53LCB7XG4gICAgICB3ZWlnaHQ6IHNpbXBsZUxhYmVsLndlaWdodCArIGxhYmVsLndlaWdodCxcbiAgICAgIG1pbmxlbjogTWF0aC5tYXgoc2ltcGxlTGFiZWwubWlubGVuLCBsYWJlbC5taW5sZW4pXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gc2ltcGxpZmllZDtcbn1cblxuZnVuY3Rpb24gYXNOb25Db21wb3VuZEdyYXBoKGcpIHtcbiAgdmFyIHNpbXBsaWZpZWQgPSBuZXcgR3JhcGgoeyBtdWx0aWdyYXBoOiBnLmlzTXVsdGlncmFwaCgpIH0pLnNldEdyYXBoKGcuZ3JhcGgoKSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAoIWcuY2hpbGRyZW4odikubGVuZ3RoKSB7XG4gICAgICBzaW1wbGlmaWVkLnNldE5vZGUodiwgZy5ub2RlKHYpKTtcbiAgICB9XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbihlKSB7XG4gICAgc2ltcGxpZmllZC5zZXRFZGdlKGUsIGcuZWRnZShlKSk7XG4gIH0pO1xuICByZXR1cm4gc2ltcGxpZmllZDtcbn1cblxuZnVuY3Rpb24gc3VjY2Vzc29yV2VpZ2h0cyhnKSB7XG4gIHZhciB3ZWlnaHRNYXAgPSBfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgc3VjcyA9IHt9O1xuICAgIF8uZm9yRWFjaChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbihlKSB7XG4gICAgICBzdWNzW2Uud10gPSAoc3Vjc1tlLnddIHx8IDApICsgZy5lZGdlKGUpLndlaWdodDtcbiAgICB9KTtcbiAgICByZXR1cm4gc3VjcztcbiAgfSk7XG4gIHJldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksIHdlaWdodE1hcCk7XG59XG5cbmZ1bmN0aW9uIHByZWRlY2Vzc29yV2VpZ2h0cyhnKSB7XG4gIHZhciB3ZWlnaHRNYXAgPSBfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgcHJlZHMgPSB7fTtcbiAgICBfLmZvckVhY2goZy5pbkVkZ2VzKHYpLCBmdW5jdGlvbihlKSB7XG4gICAgICBwcmVkc1tlLnZdID0gKHByZWRzW2Uudl0gfHwgMCkgKyBnLmVkZ2UoZSkud2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBwcmVkcztcbiAgfSk7XG4gIHJldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksIHdlaWdodE1hcCk7XG59XG5cbi8qXG4gKiBGaW5kcyB3aGVyZSBhIGxpbmUgc3RhcnRpbmcgYXQgcG9pbnQgKHt4LCB5fSkgd291bGQgaW50ZXJzZWN0IGEgcmVjdGFuZ2xlXG4gKiAoe3gsIHksIHdpZHRoLCBoZWlnaHR9KSBpZiBpdCB3ZXJlIHBvaW50aW5nIGF0IHRoZSByZWN0YW5nbGUncyBjZW50ZXIuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdFJlY3QocmVjdCwgcG9pbnQpIHtcbiAgdmFyIHggPSByZWN0Lng7XG4gIHZhciB5ID0gcmVjdC55O1xuXG4gIC8vIFJlY3RhbmdsZSBpbnRlcnNlY3Rpb24gYWxnb3JpdGhtIGZyb206XG4gIC8vIGh0dHA6Ly9tYXRoLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMDgxMTMvZmluZC1lZGdlLWJldHdlZW4tdHdvLWJveGVzXG4gIHZhciBkeCA9IHBvaW50LnggLSB4O1xuICB2YXIgZHkgPSBwb2ludC55IC0geTtcbiAgdmFyIHcgPSByZWN0LndpZHRoIC8gMjtcbiAgdmFyIGggPSByZWN0LmhlaWdodCAvIDI7XG5cbiAgaWYgKCFkeCAmJiAhZHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGVcIik7XG4gIH1cblxuICB2YXIgc3gsIHN5O1xuICBpZiAoTWF0aC5hYnMoZHkpICogdyA+IE1hdGguYWJzKGR4KSAqIGgpIHtcbiAgICAvLyBJbnRlcnNlY3Rpb24gaXMgdG9wIG9yIGJvdHRvbSBvZiByZWN0LlxuICAgIGlmIChkeSA8IDApIHtcbiAgICAgIGggPSAtaDtcbiAgICB9XG4gICAgc3ggPSBoICogZHggLyBkeTtcbiAgICBzeSA9IGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gSW50ZXJzZWN0aW9uIGlzIGxlZnQgb3IgcmlnaHQgb2YgcmVjdC5cbiAgICBpZiAoZHggPCAwKSB7XG4gICAgICB3ID0gLXc7XG4gICAgfVxuICAgIHN4ID0gdztcbiAgICBzeSA9IHcgKiBkeSAvIGR4O1xuICB9XG5cbiAgcmV0dXJuIHsgeDogeCArIHN4LCB5OiB5ICsgc3kgfTtcbn1cblxuLypcbiAqIEdpdmVuIGEgREFHIHdpdGggZWFjaCBub2RlIGFzc2lnbmVkIFwicmFua1wiIGFuZCBcIm9yZGVyXCIgcHJvcGVydGllcywgdGhpc1xuICogZnVuY3Rpb24gd2lsbCBwcm9kdWNlIGEgbWF0cml4IHdpdGggdGhlIGlkcyBvZiBlYWNoIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJNYXRyaXgoZykge1xuICB2YXIgbGF5ZXJpbmcgPSBfLm1hcChfLnJhbmdlKG1heFJhbmsoZykgKyAxKSwgZnVuY3Rpb24oKSB7IHJldHVybiBbXTsgfSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KSxcbiAgICAgICAgcmFuayA9IG5vZGUucmFuaztcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocmFuaykpIHtcbiAgICAgIGxheWVyaW5nW3JhbmtdW25vZGUub3JkZXJdID0gdjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGF5ZXJpbmc7XG59XG5cbi8qXG4gKiBBZGp1c3RzIHRoZSByYW5rcyBmb3IgYWxsIG5vZGVzIGluIHRoZSBncmFwaCBzdWNoIHRoYXQgYWxsIG5vZGVzIHYgaGF2ZVxuICogcmFuayh2KSA+PSAwIGFuZCBhdCBsZWFzdCBvbmUgbm9kZSB3IGhhcyByYW5rKHcpID0gMC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFua3MoZykge1xuICB2YXIgbWluID0gXy5taW5CeShfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHsgcmV0dXJuIGcubm9kZSh2KS5yYW5rOyB9KSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAoXy5oYXMobm9kZSwgXCJyYW5rXCIpKSB7XG4gICAgICBub2RlLnJhbmsgLT0gbWluO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVtcHR5UmFua3MoZykge1xuICAvLyBSYW5rcyBtYXkgbm90IHN0YXJ0IGF0IDAsIHNvIHdlIG5lZWQgdG8gb2Zmc2V0IHRoZW1cbiAgdmFyIG9mZnNldCA9IF8ubWluQnkoXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbih2KSB7IHJldHVybiBnLm5vZGUodikucmFuazsgfSkpO1xuXG4gIHZhciBsYXllcnMgPSBbXTtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24odikge1xuICAgIHZhciByYW5rID0gZy5ub2RlKHYpLnJhbmsgLSBvZmZzZXQ7XG4gICAgaWYgKCFsYXllcnNbcmFua10pIHtcbiAgICAgIGxheWVyc1tyYW5rXSA9IFtdO1xuICAgIH1cbiAgICBsYXllcnNbcmFua10ucHVzaCh2KTtcbiAgfSk7XG5cbiAgdmFyIGRlbHRhID0gMCxcbiAgICAgIG5vZGVSYW5rRmFjdG9yID0gZy5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO1xuICBfLmZvckVhY2gobGF5ZXJzLCBmdW5jdGlvbih2cywgaSkge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHZzKSAmJiBpICUgbm9kZVJhbmtGYWN0b3IgIT09IDApIHtcbiAgICAgIC0tZGVsdGE7XG4gICAgfSBlbHNlIGlmIChkZWx0YSkge1xuICAgICAgXy5mb3JFYWNoKHZzLCBmdW5jdGlvbih2KSB7IGcubm9kZSh2KS5yYW5rICs9IGRlbHRhOyB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcsIHByZWZpeCwgcmFuaywgb3JkZXIpIHtcbiAgdmFyIG5vZGUgPSB7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIHtcbiAgICBub2RlLnJhbmsgPSByYW5rO1xuICAgIG5vZGUub3JkZXIgPSBvcmRlcjtcbiAgfVxuICByZXR1cm4gYWRkRHVtbXlOb2RlKGcsIFwiYm9yZGVyXCIsIG5vZGUsIHByZWZpeCk7XG59XG5cbmZ1bmN0aW9uIG1heFJhbmsoZykge1xuICByZXR1cm4gXy5tYXgoXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbih2KSB7XG4gICAgdmFyIHJhbmsgPSBnLm5vZGUodikucmFuaztcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocmFuaykpIHtcbiAgICAgIHJldHVybiByYW5rO1xuICAgIH1cbiAgfSkpO1xufVxuXG4vKlxuICogUGFydGl0aW9uIGEgY29sbGVjdGlvbiBpbnRvIHR3byBncm91cHM6IGBsaHNgIGFuZCBgcmhzYC4gSWYgdGhlIHN1cHBsaWVkXG4gKiBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFuIGVudHJ5IGl0IGdvZXMgaW50byBgbGhzYC4gT3RoZXJ3aXNlIGl0IGdvZXNcbiAqIGludG8gYHJocy5cbiAqL1xuZnVuY3Rpb24gcGFydGl0aW9uKGNvbGxlY3Rpb24sIGZuKSB7XG4gIHZhciByZXN1bHQgPSB7IGxoczogW10sIHJoczogW10gfTtcbiAgXy5mb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGZuKHZhbHVlKSkge1xuICAgICAgcmVzdWx0Lmxocy5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnJocy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKlxuICogUmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmbmAgd2l0aCBhIHRpbWVyLiBUaGUgd3JhcHBlciBsb2dzIHRoZVxuICogdGltZSBpdCB0YWtlcyB0byBleGVjdXRlIHRoZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGltZShuYW1lLCBmbikge1xuICB2YXIgc3RhcnQgPSBfLm5vdygpO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbnNvbGUubG9nKG5hbWUgKyBcIiB0aW1lOiBcIiArIChfLm5vdygpIC0gc3RhcnQpICsgXCJtc1wiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpbWUobmFtZSwgZm4pIHtcbiAgcmV0dXJuIGZuKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11138\n')},88177:module=>{eval('module.exports = "0.8.2";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgxNzcuanMiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGFncmUvbGliL3ZlcnNpb24uanM/NDc2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiMC44LjJcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88177\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.dayjs.7eb62159191abe48.bundle.js b/assets/demo/site/npm.dayjs.7eb62159191abe48.bundle.js
new file mode 100644
index 00000000..4245bde6
--- /dev/null
+++ b/assets/demo/site/npm.dayjs.7eb62159191abe48.bundle.js
@@ -0,0 +1 @@
+(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4920],{27484:function(module){eval('!function(t,e){ true?module.exports=e():0}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDcyMDAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1pBQXNaLFNBQVMsVUFBVSxnSEFBZ0gsc0JBQXNCLG9CQUFvQixlQUFlLHVKQUF1SixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLWR6LmpzP2Y4NGEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfZHo9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImFyLWR6XCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLYp9it2K9f2KfYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItis2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItij2K1f2KXYq1/Yq9mE2Kdf2KPYsV/YrtmFX9is2YVf2LPYqFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LG1lcmlkaWVtOmZ1bmN0aW9uKF8pe3JldHVybiBfPjEyP1wi2YVcIjpcIti1XCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2YHZiiAlc1wiLHBhc3Q6XCLZhdmG2LAgJXNcIixzOlwi2KvZiNin2YZcIixtOlwi2K/ZgtmK2YLYqVwiLG1tOlwiJWQg2K/Zgtin2KbZglwiLGg6XCLYs9in2LnYqVwiLGhoOlwiJWQg2LPYp9i52KfYqlwiLGQ6XCLZitmI2YVcIixkZDpcIiVkINij2YrYp9mFXCIsTTpcIti02YfYsVwiLE1NOlwiJWQg2KPYtNmH2LFcIix5Olwi2LPZhtipXCIseXk6XCIlZCDYs9mG2YjYp9iqXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47200\n')},87719:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ar-iq",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول".split("_"),weekStart:1,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc3MTkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc2NBQXNjLFNBQVMsVUFBVSxnSEFBZ0gsc0JBQXNCLG9CQUFvQixlQUFlLHVKQUF1SixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLWlxLmpzPzM3NDkiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfaXE9XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcImFyLWlxXCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2YPYp9mG2YjZhiDYp9mE2KvYp9mG2Ypf2LTYqNin2Ldf2KLYsNin2LFf2YbZitiz2KfZhl/Yo9mK2KfYsV/Yrdiy2YrYsdin2YZf2KrZhdmI2LJf2KLYqF/Yo9mK2YTZiNmEX9iq2LTYsdmK2YYg2KfZhNij2YjZhF8g2KrYtNix2YrZhiDYp9mE2KvYp9mG2Ypf2YPYp9mG2YjZhiDYp9mE2KPZiNmEXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItmD2KfZhtmI2YYg2KfZhNir2KfZhtmKX9i02KjYp9i3X9ii2LDYp9ixX9mG2YrYs9in2YZf2KPZitin2LFf2K3YstmK2LHYp9mGX9iq2YXZiNiyX9ii2Khf2KPZitmE2YjZhF/Yqti02LHZitmGINin2YTYo9mI2YRfINiq2LTYsdmK2YYg2KfZhNir2KfZhtmKX9mD2KfZhtmI2YYg2KfZhNij2YjZhFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItitX9mGX9irX9ixX9iuX9isX9izXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MTI/XCLZhVwiOlwi2LVcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLZgdmKICVzXCIscGFzdDpcItmF2YbYsCAlc1wiLHM6XCLYq9mI2KfZhlwiLG06XCLYr9mC2YrZgtipXCIsbW06XCIlZCDYr9mC2KfYptmCXCIsaDpcItiz2KfYudipXCIsaGg6XCIlZCDYs9in2LnYp9iqXCIsZDpcItmK2YjZhVwiLGRkOlwiJWQg2KPZitin2YVcIixNOlwi2LTZh9ixXCIsTU06XCIlZCDYo9i02YfYsVwiLHk6XCLYs9mG2KlcIix5eTpcIiVkINiz2YbZiNin2KpcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87719\n')},62376:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ar-kw",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(_){return _>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjIzNzYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNFlBQTRZLFNBQVMsVUFBVSxnSEFBZ0gsc0JBQXNCLG9CQUFvQixlQUFlLHVKQUF1SixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLWt3LmpzPzYwZTkiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfa3c9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImFyLWt3XCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi2KfYrdivX9in2KvZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi2K1f2YZf2Ktf2LFf2K5f2Kxf2LNcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihfKXtyZXR1cm4gX30sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbTpmdW5jdGlvbihfKXtyZXR1cm4gXz4xMj9cItmFXCI6XCLYtVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItmB2YogJXNcIixwYXN0Olwi2YXZhtiwICVzXCIsczpcItir2YjYp9mGXCIsbTpcItiv2YLZitmC2KlcIixtbTpcIiVkINiv2YLYp9im2YJcIixoOlwi2LPYp9i52KlcIixoaDpcIiVkINiz2KfYudin2KpcIixkOlwi2YrZiNmFXCIsZGQ6XCIlZCDYo9mK2KfZhVwiLE06XCLYtNmH2LFcIixNTTpcIiVkINij2LTZh9ixXCIseTpcItiz2YbYqVwiLHl5OlwiJWQg2LPZhtmI2KfYqlwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62376\n')},48540:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"ar-ly",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:6,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},meridiem:function(_){return _>12?"م":"ص"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1NDAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa2FBQWthLFNBQVMsc0JBQXNCLG9CQUFvQixVQUFVLGtIQUFrSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLWx5LmpzP2IxNTciXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfbHk9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksbj17bmFtZTpcImFyLWx5XCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LFcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjYsd2Vla2RheXNTaG9ydDpcItij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLYrV/Zhl/Yq1/YsV/Yrl/YrF/Ys1wiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxtZXJpZGllbTpmdW5jdGlvbihfKXtyZXR1cm4gXz4xMj9cItmFXCI6XCLYtVwifSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiRC/igI9NL+KAj1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUobixudWxsLCEwKSxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48540\n')},96817:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ar-ma",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekStart:6,weekdaysShort:"احد_إثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY4MTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1pBQXdaLFNBQVMsVUFBVSxnSEFBZ0gsc0JBQXNCLG9CQUFvQixlQUFlLHVKQUF1SixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLW1hLmpzPzUzNmYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfbWE9XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcImFyLW1hXCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6Nix3ZWVrZGF5c1Nob3J0Olwi2KfYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi2K1f2YZf2Ktf2LFf2K5f2Kxf2LNcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbTpmdW5jdGlvbihlKXtyZXR1cm4gZT4xMj9cItmFXCI6XCLYtVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItmB2YogJXNcIixwYXN0Olwi2YXZhtiwICVzXCIsczpcItir2YjYp9mGXCIsbTpcItiv2YLZitmC2KlcIixtbTpcIiVkINiv2YLYp9im2YJcIixoOlwi2LPYp9i52KlcIixoaDpcIiVkINiz2KfYudin2KpcIixkOlwi2YrZiNmFXCIsZGQ6XCIlZCDYo9mK2KfZhVwiLE06XCLYtNmH2LFcIixNTTpcIiVkINij2LTZh9ixXCIseTpcItiz2YbYqVwiLHl5OlwiJWQg2LPZhtmI2KfYqlwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///96817\n')},11573:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ar-sa",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(_){return _>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE1NzMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1pBQXNaLFNBQVMsVUFBVSxnSEFBZ0gsc0JBQXNCLG9CQUFvQixlQUFlLHVKQUF1SixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLXNhLmpzPzMwZDQiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfc2E9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImFyLXNhXCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLYrV/Zhl/Yq1/YsV/Yrl/YrF/Ys1wiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LG1lcmlkaWVtOmZ1bmN0aW9uKF8pe3JldHVybiBfPjEyP1wi2YVcIjpcIti1XCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2YHZiiAlc1wiLHBhc3Q6XCLZhdmG2LAgJXNcIixzOlwi2KvZiNin2YZcIixtOlwi2K/ZgtmK2YLYqVwiLG1tOlwiJWQg2K/Zgtin2KbZglwiLGg6XCLYs9in2LnYqVwiLGhoOlwiJWQg2LPYp9i52KfYqlwiLGQ6XCLZitmI2YVcIixkZDpcIiVkINij2YrYp9mFXCIsTTpcIti02YfYsVwiLE1NOlwiJWQg2KPYtNmH2LFcIix5Olwi2LPZhtipXCIseXk6XCIlZCDYs9mG2YjYp9iqXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11573\n')},99339:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ar-tn",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:1,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkzMzkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMFpBQTBaLFNBQVMsVUFBVSxnSEFBZ0gsc0JBQXNCLG9CQUFvQixlQUFlLHVKQUF1SixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLXRuLmpzPzI1OGYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfYXJfdG49XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcImFyLXRuXCIsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItis2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItitX9mGX9irX9ixX9iuX9isX9izXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MTI/XCLZhVwiOlwi2LVcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLZgdmKICVzXCIscGFzdDpcItmF2YbYsCAlc1wiLHM6XCLYq9mI2KfZhlwiLG06XCLYr9mC2YrZgtipXCIsbW06XCIlZCDYr9mC2KfYptmCXCIsaDpcItiz2KfYudipXCIsaGg6XCIlZCDYs9in2LnYp9iqXCIsZDpcItmK2YjZhVwiLGRkOlwiJWQg2KPZitin2YVcIixNOlwi2LTZh9ixXCIsTU06XCIlZCDYo9i02YfYsVwiLHk6XCLYs9mG2KlcIix5eTpcIiVkINiz2YbZiNin2KpcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99339\n')},63939:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),r="يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),_={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},d={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},o={name:"ar",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),months:r,monthsShort:r,weekStart:6,relativeTime:{future:"بعد %s",past:"منذ %s",s:"ثانية واحدة",m:"دقيقة واحدة",mm:"%d دقائق",h:"ساعة واحدة",hh:"%d ساعات",d:"يوم واحد",dd:"%d أيام",M:"شهر واحد",MM:"%d أشهر",y:"عام واحد",yy:"%d أعوام"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return d[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\\d/g,(function(e){return _[e]})).replace(/,/g,"،")},ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return n.default.locale(o,null,!0),o}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjM5MzkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLHdHQUF3Ryw0REFBNEQsSUFBSSxnRkFBZ0YsSUFBSSw2T0FBNk8sd0xBQXdMLHNCQUFzQiw4Q0FBOEMsWUFBWSxxQkFBcUIsd0JBQXdCLG9DQUFvQyxZQUFZLHFCQUFxQixxQkFBcUIsU0FBUyxVQUFVLGtIQUFrSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2FyLmpzPzIyYzEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfYXI9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBuPXQoZSkscj1cItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixXCIuc3BsaXQoXCJfXCIpLF89ezE6XCLZoVwiLDI6XCLZolwiLDM6XCLZo1wiLDQ6XCLZpFwiLDU6XCLZpVwiLDY6XCLZplwiLDc6XCLZp1wiLDg6XCLZqFwiLDk6XCLZqVwiLDA6XCLZoFwifSxkPXtcItmhXCI6XCIxXCIsXCLZolwiOlwiMlwiLFwi2aNcIjpcIjNcIixcItmkXCI6XCI0XCIsXCLZpVwiOlwiNVwiLFwi2aZcIjpcIjZcIixcItmnXCI6XCI3XCIsXCLZqFwiOlwiOFwiLFwi2alcIjpcIjlcIixcItmgXCI6XCIwXCJ9LG89e25hbWU6XCJhclwiLHdlZWtkYXlzOlwi2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItitX9mGX9irX9ixX9iuX9isX9izXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpyLG1vbnRoc1Nob3J0OnIsd2Vla1N0YXJ0OjYscmVsYXRpdmVUaW1lOntmdXR1cmU6XCLYqNi52K8gJXNcIixwYXN0Olwi2YXZhtiwICVzXCIsczpcItir2KfZhtmK2Kkg2YjYp9it2K/YqVwiLG06XCLYr9mC2YrZgtipINmI2KfYrdiv2KlcIixtbTpcIiVkINiv2YLYp9im2YJcIixoOlwi2LPYp9i52Kkg2YjYp9it2K/YqVwiLGhoOlwiJWQg2LPYp9i52KfYqlwiLGQ6XCLZitmI2YUg2YjYp9it2K9cIixkZDpcIiVkINij2YrYp9mFXCIsTTpcIti02YfYsSDZiNin2K3Yr1wiLE1NOlwiJWQg2KPYtNmH2LFcIix5Olwi2LnYp9mFINmI2KfYrdivXCIseXk6XCIlZCDYo9i52YjYp9mFXCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIGRbZV19KSkucmVwbGFjZSgv2IwvZyxcIixcIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKGUpe3JldHVybiBfW2VdfSkpLnJlcGxhY2UoLywvZyxcItiMXCIpfSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiRC/igI9NL+KAj1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifX07cmV0dXJuIG4uZGVmYXVsdC5sb2NhbGUobyxudWxsLCEwKSxvfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///63939\n')},88092:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var _=e(a),t={name:"az",weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},ordinal:function(a){return a}};return _.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgwOTIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdVlBQXVZLHdIQUF3SCxlQUFlLGtMQUFrTCxxQkFBcUIsV0FBVyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2F6LmpzPzBkM2QiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGEsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczphfHxzZWxmKS5kYXlqc19sb2NhbGVfYXo9ZShhLmRheWpzKX0odGhpcywoZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmXCJvYmplY3RcIj09dHlwZW9mIGEmJlwiZGVmYXVsdFwiaW4gYT9hOntkZWZhdWx0OmF9fXZhciBfPWUoYSksdD17bmFtZTpcImF6XCIsd2Vla2RheXM6XCJCYXphcl9CYXphciBlcnTJmXNpX8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLFfw4fJmXLFn8mZbmLJmV9Dw7xtyZkgYXjFn2FtxLFfQ8O8bcmZX8WeyZluYsmZXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJCYXpfQnpFX8OHQXhfw4fJmXJfQ0F4X0PDvG1fxZ7JmW5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJCel9CRV/Dh0Ffw4fJmV9DQV9Dw7xfxZ7JmVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJ5YW52YXJfZmV2cmFsX21hcnRfYXByZWxfbWF5X2l5dW5faXl1bF9hdnF1c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWtcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWSDQsy5cIixMTEw6XCJEIE1NTU0gWVlZWSDQsy4sIEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgc29ucmFcIixwYXN0OlwiJXMgyZl2dsmZbFwiLHM6XCJiaXIgbmXDp8mZIHNhbml5yZlcIixtOlwiYmlyIGTJmXFpccmZXCIsbW06XCIlZCBkyZlxaXHJmVwiLGg6XCJiaXIgc2FhdFwiLGhoOlwiJWQgc2FhdFwiLGQ6XCJiaXIgZ8O8blwiLGRkOlwiJWQgZ8O8blwiLE06XCJiaXIgYXlcIixNTTpcIiVkIGF5XCIseTpcImJpciBpbFwiLHl5OlwiJWQgaWxcIn0sb3JkaW5hbDpmdW5jdGlvbihhKXtyZXR1cm4gYX19O3JldHVybiBfLmRlZmF1bHQubG9jYWxlKHQsbnVsbCwhMCksdH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///88092\n')},60504:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"be",weekdays:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),months:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),weekStart:1,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjA1MDQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsZ2FBQWdhLFNBQVMsVUFBVSw4SEFBOEgscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9iZS5qcz9kMWQ2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2JlPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLG49e25hbWU6XCJiZVwiLHdlZWtkYXlzOlwi0L3Rj9C00LfQtdC70Y5f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNGDX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbRg1/RgdGD0LHQvtGC0YNcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi0YHRgtGD0LTQt9C10L3Rj1/Qu9GO0YLQsNCz0LBf0YHQsNC60LDQstGW0LrQsF/QutGA0LDRgdCw0LLRltC60LBf0YLRgNCw0Z7QvdGPX9GH0Y3RgNCy0LXQvdGPX9C70ZbQv9C10L3Rj1/QttC90ZbRntC90Y9f0LLQtdGA0LDRgdC90Y9f0LrQsNGB0YLRgNGL0YfQvdGW0LrQsF/Qu9GW0YHRgtCw0L/QsNC00LBf0YHQvdC10LbQvdGPXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi0YHRgtGD0LRf0LvRjtGCX9GB0LDQul/QutGA0LDRgV/RgtGA0LDQsl/Rh9GN0YDQsl/Qu9GW0L9f0LbQvdGW0LJf0LLQtdGAX9C60LDRgdGCX9C70ZbRgdGCX9GB0L3QtdC2XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVkg0LMuXCIsTExMOlwiRCBNTU1NIFlZWVkg0LMuLCBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEhIOm1tXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShuLG51bGwsITApLG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60504\n')},19091:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"bg",weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekStart:1,ordinal:function(e){var _=e%100;if(_>10&&_<20)return e+"-ти";var t=e%10;return 1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkwOTEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMllBQTJZLFlBQVksNkJBQTZCLFdBQVcsZ0VBQWdFLFVBQVUsNEdBQTRHLGVBQWUsOEtBQThLLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvYmcuanM/ZGFmNiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxfKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1fKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxfKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9iZz1fKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBfKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHQ9XyhlKSxkPXtuYW1lOlwiYmdcIix3ZWVrZGF5czpcItC90LXQtNC10LvRj1/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0Y/QtNCwX9GH0LXRgtCy0YrRgNGC0YrQul/Qv9C10YLRitC6X9GB0YrQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNGPX9GH0LXRgl/Qv9C10YJf0YHRitCxXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLRj9C90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi0Y/QvdGAX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LpcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgXz1lJTEwMDtpZihfPjEwJiZfPDIwKXJldHVybiBlK1wiLdGC0LhcIjt2YXIgdD1lJTEwO3JldHVybiAxPT09dD9lK1wiLdCy0LhcIjoyPT09dD9lK1wiLdGA0LhcIjo3PT09dHx8OD09PXQ/ZStcIi3QvNC4XCI6ZStcIi3RgtC4XCJ9LGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiRC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItGB0LvQtdC0ICVzXCIscGFzdDpcItC/0YDQtdC00LggJXNcIixzOlwi0L3Rj9C60L7Qu9C60L4g0YHQtdC60YPQvdC00LhcIixtOlwi0LzQuNC90YPRgtCwXCIsbW06XCIlZCDQvNC40L3Rg9GC0LhcIixoOlwi0YfQsNGBXCIsaGg6XCIlZCDRh9Cw0YHQsFwiLGQ6XCLQtNC10L1cIixkZDpcIiVkINC00LXQvdCwXCIsTTpcItC80LXRgdC10YZcIixNTTpcIiVkINC80LXRgdC10YbQsFwiLHk6XCLQs9C+0LTQuNC90LBcIix5eTpcIiVkINCz0L7QtNC40L3QuFwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///19091\n')},19149:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),_={name:"bi",weekdays:"Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade".split("_"),months:"Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba".split("_"),weekStart:1,weekdaysShort:"San_Man_Tus_Wen_Tos_Frae_Sar".split("_"),monthsShort:"Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"San_Ma_Tu_We_To_Fr_Sar".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"lo %s",past:"%s bifo",s:"sam seken",m:"wan minit",mm:"%d minit",h:"wan haoa",hh:"%d haoa",d:"wan dei",dd:"%d dei",M:"wan manis",MM:"%d manis",y:"wan yia",yy:"%d yia"}};return n.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkxNDkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaVlBQWlZLFNBQVMsVUFBVSxxSEFBcUgsZUFBZSxnTEFBZ0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9iaS5qcz82YTc0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2JpPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgbj1hKGUpLF89e25hbWU6XCJiaVwiLHdlZWtkYXlzOlwiU2FuZGVfTWFuZGVfVHVzZGVfV2VuZXNkZV9Ub3NkZV9GcmFlZGVfU2FyYWRlXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcmlfRmVicnVhcmlfTWFqX0VwcmVsX01laV9KdW5fSnVsYWVfT2tpc19TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EaXNlbWJhXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJTYW5fTWFuX1R1c19XZW5fVG9zX0ZyYWVfU2FyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYWpfRXByX01haV9KdW5fSnVsX09raV9TZXBfT2t0X05vdl9EaXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTYW5fTWFfVHVfV2VfVG9fRnJfU2FyXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImxvICVzXCIscGFzdDpcIiVzIGJpZm9cIixzOlwic2FtIHNla2VuXCIsbTpcIndhbiBtaW5pdFwiLG1tOlwiJWQgbWluaXRcIixoOlwid2FuIGhhb2FcIixoaDpcIiVkIGhhb2FcIixkOlwid2FuIGRlaVwiLGRkOlwiJWQgZGVpXCIsTTpcIndhbiBtYW5pc1wiLE1NOlwiJWQgbWFuaXNcIix5Olwid2FuIHlpYVwiLHl5OlwiJWQgeWlhXCJ9fTtyZXR1cm4gbi5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///19149\n')},15287:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var l=e(a),t={name:"bm",weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),weekStart:1,weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"}};return l.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUyODcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMGJBQTBiLFNBQVMsVUFBVSxxS0FBcUssZUFBZSx1TUFBdU0scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ibS5qcz8xODY2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX2JtPWUoYS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZcImRlZmF1bHRcImluIGE/YTp7ZGVmYXVsdDphfX12YXIgbD1lKGEpLHQ9e25hbWU6XCJibVwiLHdlZWtkYXlzOlwiS2FyaV9OdMmbbsmbbl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NyZtrYWxvX1p1d8mbbmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1PJm3RhbmJ1cnVrYWxvX8mUa3V0yZRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG9cIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIkthcl9OdMmbX1Rhcl9BcmFfQWxhX0p1bV9TaWJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJaYW5fRmV3X01hcl9Bd2lfTcmbX1p1d19adWxfVXRpX1PJm3RfyZRrdV9Ob3dfRGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiS2FfTnRfVGFfQXJfQWxfSnVfU2lcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihhKXtyZXR1cm4gYX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIk1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWVwiLExMTDpcIk1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbVwiLExMTEw6XCJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIGvJlG7JlFwiLHBhc3Q6XCJhIGLJmyAlcyBiyZRcIixzOlwic2FuZ2EgZGFtYSBkYW1hXCIsbTpcIm1pbml0aSBrZWxlblwiLG1tOlwibWluaXRpICVkXCIsaDpcImzJm3LJmyBrZWxlblwiLGhoOlwibMmbcsmbICVkXCIsZDpcInRpbGUga2VsZW5cIixkZDpcInRpbGUgJWRcIixNOlwia2FsbyBrZWxlblwiLE1NOlwia2FsbyAlZFwiLHk6XCJzYW4ga2VsZW5cIix5eTpcInNhbiAlZFwifX07cmV0dXJuIGwuZGVmYXVsdC5sb2NhbGUodCxudWxsLCEwKSx0fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///15287\n')},54067:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),n={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},d={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},r={name:"bn-bd",weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),weekStart:0,preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return d[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return n[e]}))},ordinal:function(e){var t=["ই","লা","রা","ঠা","শে"],_=e%100;return"["+e+(t[(_-20)%10]||t[_]||t[0])+"]"},formats:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY খ্রিস্টাব্দ",LL:"D MMMM YYYY খ্রিস্টাব্দ",LLL:"D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়",LLLL:"dddd, D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়"},meridiem:function(e){return e<4?"রাত":e<6?"ভোর":e<12?"সকাল":e<15?"দুপুর":e<18?"বিকাল":e<20?"সন্ধ্যা":"রাত"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"}};return _.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQwNjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNERBQTRELElBQUksZ0ZBQWdGLElBQUksNmJBQTZiLDhDQUE4QyxZQUFZLEdBQUcsd0JBQXdCLG9DQUFvQyxZQUFZLEdBQUcscUJBQXFCLHdDQUF3QywyQ0FBMkMsVUFBVSx1TEFBdUwsc0JBQXNCLHNGQUFzRixlQUFlLDRLQUE0SyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2JuLWJkLmpzP2NlMDUiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfYm5fYmQ9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBfPXQoZSksbj17MTpcIuCnp1wiLDI6XCLgp6hcIiwzOlwi4KepXCIsNDpcIuCnqlwiLDU6XCLgp6tcIiw2Olwi4KesXCIsNzpcIuCnrVwiLDg6XCLgp65cIiw5Olwi4KevXCIsMDpcIuCnplwifSxkPXtcIuCnp1wiOlwiMVwiLFwi4KeoXCI6XCIyXCIsXCLgp6lcIjpcIjNcIixcIuCnqlwiOlwiNFwiLFwi4KerXCI6XCI1XCIsXCLgp6xcIjpcIjZcIixcIuCnrVwiOlwiN1wiLFwi4KeuXCI6XCI4XCIsXCLgp69cIjpcIjlcIixcIuCnplwiOlwiMFwifSxyPXtuYW1lOlwiYm4tYmRcIix3ZWVrZGF5czpcIuCmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLgppzgpr7gpqjgp4Hgp5/gpr7gprDgpr9f4Kar4KeH4Kas4KeN4Kaw4KeB4Kef4Ka+4Kaw4Ka/X+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsF/gpoXgppXgp43gpp/gp4vgpqzgprBf4Kao4Kat4KeH4Kau4KeN4Kas4KawX+CmoeCmv+CmuOCnh+CmruCnjeCmrOCmsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4dcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml1/gpqzgp4Hgpqdf4Kas4KeD4Ka54KaDX+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr9cIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjAscHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIGRbZV19KSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSkpfSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PVtcIuCmh1wiLFwi4Kay4Ka+XCIsXCLgprDgpr5cIixcIuCmoOCmvlwiLFwi4Ka24KeHXCJdLF89ZSUxMDA7cmV0dXJuXCJbXCIrZSsodFsoXy0yMCklMTBdfHx0W19dfHx0WzBdKStcIl1cIn0sZm9ybWF0czp7TFQ6XCJBIGg6bW0g4Ka44Kau4KefXCIsTFRTOlwiQSBoOm1tOnNzIOCmuOCmruCnn1wiLEw6XCJERC9NTS9ZWVlZIOCmluCnjeCmsOCmv+CmuOCnjeCmn+CmvuCmrOCnjeCmplwiLExMOlwiRCBNTU1NIFlZWVkg4KaW4KeN4Kaw4Ka/4Ka44KeN4Kaf4Ka+4Kas4KeN4KamXCIsTExMOlwiRCBNTU1NIFlZWVkg4KaW4KeN4Kaw4Ka/4Ka44KeN4Kaf4Ka+4Kas4KeN4KamLCBBIGg6bW0g4Ka44Kau4KefXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIOCmluCnjeCmsOCmv+CmuOCnjeCmn+CmvuCmrOCnjeCmpiwgQSBoOm1tIOCmuOCmruCnn1wifSxtZXJpZGllbTpmdW5jdGlvbihlKXtyZXR1cm4gZTw0P1wi4Kaw4Ka+4KakXCI6ZTw2P1wi4Kat4KeL4KawXCI6ZTwxMj9cIuCmuOCmleCmvuCmslwiOmU8MTU/XCLgpqbgp4Hgpqrgp4HgprBcIjplPDE4P1wi4Kas4Ka/4KaV4Ka+4KayXCI6ZTwyMD9cIuCmuOCmqOCnjeCmp+CnjeCmr+CmvlwiOlwi4Kaw4Ka+4KakXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4Kaq4Kaw4KeHXCIscGFzdDpcIiVzIOCmhuCml+Cnh1wiLHM6XCLgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahXCIsbTpcIuCmj+CmlSDgpq7gpr/gpqjgpr/gpp9cIixtbTpcIiVkIOCmruCmv+CmqOCmv+Cmn1wiLGg6XCLgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+XCIsaGg6XCIlZCDgppjgpqjgp43gpp/gpr5cIixkOlwi4KaP4KaVIOCmpuCmv+CmqFwiLGRkOlwiJWQg4Kam4Ka/4KaoXCIsTTpcIuCmj+CmlSDgpq7gpr7gprhcIixNTTpcIiVkIOCmruCmvuCmuFwiLHk6XCLgpo/gppUg4Kas4Kab4KawXCIseXk6XCIlZCDgpqzgppvgprBcIn19O3JldHVybiBfLmRlZmF1bHQubG9jYWxlKHIsbnVsbCwhMCkscn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///54067\n')},35254:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),n={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},d={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},o={name:"bn",weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return d[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return n[e]}))},ordinal:function(e){return e},formats:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"}};return t.default.locale(o,null,!0),o}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUyNTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNERBQTRELElBQUksZ0ZBQWdGLElBQUksOGFBQThhLDhDQUE4QyxZQUFZLEdBQUcsd0JBQXdCLG9DQUFvQyxZQUFZLEdBQUcscUJBQXFCLFNBQVMsVUFBVSx1SUFBdUksZUFBZSw0S0FBNEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ibi5qcz8zMjY3Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLF8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPV8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLF8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2JuPV8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1fKGUpLG49ezE6XCLgp6dcIiwyOlwi4KeoXCIsMzpcIuCnqVwiLDQ6XCLgp6pcIiw1Olwi4KerXCIsNjpcIuCnrFwiLDc6XCLgp61cIiw4Olwi4KeuXCIsOTpcIuCnr1wiLDA6XCLgp6ZcIn0sZD17XCLgp6dcIjpcIjFcIixcIuCnqFwiOlwiMlwiLFwi4KepXCI6XCIzXCIsXCLgp6pcIjpcIjRcIixcIuCnq1wiOlwiNVwiLFwi4KesXCI6XCI2XCIsXCLgp61cIjpcIjdcIixcIuCnrlwiOlwiOFwiLFwi4KevXCI6XCI5XCIsXCLgp6ZcIjpcIjBcIn0sbz17bmFtZTpcImJuXCIsd2Vla2RheXM6XCLgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprBcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprBcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuCmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmv1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuCmnOCmvuCmqOCngV/gpqvgp4fgpqzgp43gprDgp4Ff4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4KafX+CmheCmleCnjeCmn+Cni1/gpqjgpq3gp4df4Kah4Ka/4Ka44KeHXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppdf4Kas4KeB4KanX+CmrOCng+CmueCmg1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/XCIuc3BsaXQoXCJfXCIpLHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csKGZ1bmN0aW9uKGUpe3JldHVybiBkW2VdfSkpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcZC9nLChmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pKX0sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJBIGg6bW0g4Ka44Kau4KefXCIsTFRTOlwiQSBoOm1tOnNzIOCmuOCmruCnn1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4Kaq4Kaw4KeHXCIscGFzdDpcIiVzIOCmhuCml+Cnh1wiLHM6XCLgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahXCIsbTpcIuCmj+CmlSDgpq7gpr/gpqjgpr/gpp9cIixtbTpcIiVkIOCmruCmv+CmqOCmv+Cmn1wiLGg6XCLgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+XCIsaGg6XCIlZCDgppjgpqjgp43gpp/gpr5cIixkOlwi4KaP4KaVIOCmpuCmv+CmqFwiLGRkOlwiJWQg4Kam4Ka/4KaoXCIsTTpcIuCmj+CmlSDgpq7gpr7gprhcIixNTTpcIiVkIOCmruCmvuCmuFwiLHk6XCLgpo/gppUg4Kas4Kab4KawXCIseXk6XCIlZCDgpqzgppvgprBcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKG8sbnVsbCwhMCksb30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///35254\n')},52502:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"bo",weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་དང་པོ_ཟླ་གཉིས་པ_ཟླ་གསུམ་པ_ཟླ་བཞི་པ_ཟླ་ལྔ་པ_ཟླ་དྲུག་པ_ཟླ་བདུན་པ_ཟླ་བརྒྱད་པ_ཟླ་དགུ་པ_ཟླ་བཅུ་པ_ཟླ་བཅུ་གཅིག་པ_ཟླ་བཅུ་གཉིས་པ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ལ་",past:"%s སྔོན་ལ་",s:"ཏོག་ཙམ་",m:"སྐར་མ་གཅིག་",mm:"སྐར་མ་ %d",h:"ཆུ་ཚོད་གཅིག་",hh:"ཆུ་ཚོད་ %d",d:"ཉིན་གཅིག་",dd:"ཉིན་ %d",M:"ཟླ་བ་གཅིག་",MM:"ཟླ་བ་ %d",y:"ལོ་གཅིག་",yy:"ལོ་ %d"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTI1MDIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscWxCQUFxbEIsU0FBUyxVQUFVLHVIQUF1SCxlQUFlLGdNQUFnTSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2JvLmpzPzRhMmYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfYm89ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImJvXCIsd2Vla2RheXM6XCLgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvItcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuC9ieC9suC8i+C9mOC8i1/gvZ/gvrPgvIvgvZbgvItf4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9o+C+t+C9guC8i+C9lOC8i1/gvZXgvbTgvaLgvIvgvZbgvbRf4L2U4LyL4L2m4L2E4L2m4LyLX+C9puC+pOC9uuC9k+C8i+C9lOC8i1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuC9ieC9suC8i+C9mOC8i1/gvZ/gvrPgvIvgvZbgvItf4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9o+C+t+C9guC8i+C9lOC8i1/gvZXgvbTgvaLgvIvgvZbgvbRf4L2U4LyL4L2m4L2E4L2m4LyLX+C9puC+pOC9uuC9k+C8i+C9lOC8i1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuC9n+C+s+C8i+C9keC9hOC8i+C9lOC9vF/gvZ/gvrPgvIvgvYLgvYngvbLgvabgvIvgvZRf4L2f4L6z4LyL4L2C4L2m4L204L2Y4LyL4L2UX+C9n+C+s+C8i+C9luC9nuC9suC8i+C9lF/gvZ/gvrPgvIvgvaPgvpTgvIvgvZRf4L2f4L6z4LyL4L2R4L6y4L204L2C4LyL4L2UX+C9n+C+s+C8i+C9luC9keC9tOC9k+C8i+C9lF/gvZ/gvrPgvIvgvZbgvaLgvpLgvrHgvZHgvIvgvZRf4L2f4L6z4LyL4L2R4L2C4L204LyL4L2UX+C9n+C+s+C8i+C9luC9heC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvYXgvbTgvIvgvYLgvYXgvbLgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4L2F4L204LyL4L2C4L2J4L2y4L2m4LyL4L2UXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4L2j4LyLXCIscGFzdDpcIiVzIOC9puC+lOC9vOC9k+C8i+C9o+C8i1wiLHM6XCLgvY/gvbzgvYLgvIvgvZngvZjgvItcIixtOlwi4L2m4L6Q4L2i4LyL4L2Y4LyL4L2C4L2F4L2y4L2C4LyLXCIsbW06XCLgvabgvpDgvaLgvIvgvZjgvIsgJWRcIixoOlwi4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2C4LyLXCIsaGg6XCLgvYbgvbTgvIvgvZrgvbzgvZHgvIsgJWRcIixkOlwi4L2J4L2y4L2T4LyL4L2C4L2F4L2y4L2C4LyLXCIsZGQ6XCLgvYngvbLgvZPgvIsgJWRcIixNOlwi4L2f4L6z4LyL4L2W4LyL4L2C4L2F4L2y4L2C4LyLXCIsTU06XCLgvZ/gvrPgvIvgvZbgvIsgJWRcIix5Olwi4L2j4L284LyL4L2C4L2F4L2y4L2C4LyLXCIseXk6XCLgvaPgvbzgvIsgJWRcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52502\n')},8864:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e);function r(e){return e>9?r(e%10):e}function t(e,n,u){return e+" "+function(e,n){return 2===n?function(e){return{m:"v",b:"v",d:"z"}[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[u],e)}var o={name:"br",weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),weekStart:1,weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},relativeTime:{future:"a-benn %s",past:"%s ʼzo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(r(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},meridiem:function(e){return e<12?"a.m.":"g.m."}};return u.default.locale(o,null,!0),o}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODg2NC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsV0FBVyxjQUFjLHFCQUFxQixrQkFBa0IsMkJBQTJCLHlCQUF5QixPQUFPLGtCQUFrQiw2QkFBNkIsTUFBTSxFQUFFLG1DQUFtQyxPQUFPLE9BQU8sNlhBQTZYLFNBQVMsVUFBVSxxSkFBcUosZUFBZSxzS0FBc0ssYUFBYSxxREFBcUQsNEJBQTRCLHNCQUFzQiw0QkFBNEIscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ici5qcz9lMmUxIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2JyPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdT1uKGUpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU+OT9yKGUlMTApOmV9ZnVuY3Rpb24gdChlLG4sdSl7cmV0dXJuIGUrXCIgXCIrZnVuY3Rpb24oZSxuKXtyZXR1cm4gMj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJue206XCJ2XCIsYjpcInZcIixkOlwielwifVtlLmNoYXJBdCgwKV0rZS5zdWJzdHJpbmcoMSl9KGUpOmV9KHttbTpcIm11bnV0ZW5uXCIsTU06XCJtaXpcIixkZDpcImRldmV6aFwifVt1XSxlKX12YXIgbz17bmFtZTpcImJyXCIsd2Vla2RheXM6XCJTdWxfTHVuX01ldXJ6aF9NZXJjyrxoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkdlbnZlcl9Dyrxod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiR2VuX0PKvGh3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlclwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X0x1X01lX01lcl9ZYV9Hd19TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcImhbZV1tbSBBXCIsTFRTOlwiaFtlXW1tOnNzIEFcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBbYSB2aXpdIE1NTU0gWVlZWVwiLExMTDpcIkQgW2Egdml6XSBNTU1NIFlZWVkgaFtlXW1tIEFcIixMTExMOlwiZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBoW2VdbW0gQVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImEtYmVubiAlc1wiLHBhc3Q6XCIlcyDKvHpvXCIsczpcInVuIG5lYmV1ZCBzZWdvbmRlbm5vw7lcIixtOlwidXIgdnVudXRlbm5cIixtbTp0LGg6XCJ1biBldXJcIixoaDpcIiVkIGV1clwiLGQ6XCJ1biBkZXZlemhcIixkZDp0LE06XCJ1ciBtaXpcIixNTTp0LHk6XCJ1ciBibG9helwiLHl5OmZ1bmN0aW9uKGUpe3N3aXRjaChyKGUpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA5OnJldHVybiBlK1wiIGJsb2F6XCI7ZGVmYXVsdDpyZXR1cm4gZStcIiB2bG9helwifX19LG1lcmlkaWVtOmZ1bmN0aW9uKGUpe3JldHVybiBlPDEyP1wiYS5tLlwiOlwiZy5tLlwifX07cmV0dXJuIHUuZGVmYXVsdC5sb2NhbGUobyxudWxsLCEwKSxvfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8864\n')},4502:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),a={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDUwMi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyxrYUFBa2EsU0FBUyxVQUFVLGtIQUFrSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2JzLmpzP2ZiOWIiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfYnM9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBfPXQoZSksYT17bmFtZTpcImJzXCIsd2Vla2RheXM6XCJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXJcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIm5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJuZV9wb191dF9zcl/EjWVfcGVfc3VcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSDptbVwifX07cmV0dXJuIF8uZGVmYXVsdC5sb2NhbGUoYSxudWxsLCEwKSxhfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4502\n')},33646:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,s){ true?module.exports=s(__webpack_require__(27484)):0}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=s(e),_={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d\'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return""+e+(1===e||3===e?"r":2===e?"n":4===e?"t":"è")}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzM2NDYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaVpBQWlaLDhNQUE4TSxlQUFlLCtLQUErSyxxQkFBcUIsd0RBQXdELHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvY2EuanM/MjlmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxzKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1zKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxzKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9jYT1zKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBzKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHQ9cyhlKSxfPXtuYW1lOlwiY2FcIix3ZWVrZGF5czpcIkRpdW1lbmdlX0RpbGx1bnNfRGltYXJ0c19EaW1lY3Jlc19EaWpvdXNfRGl2ZW5kcmVzX0Rpc3NhYnRlXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJEZy5fRGwuX0R0Ll9EYy5fRGouX0R2Ll9Ecy5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEZ19EbF9EdF9EY19Eal9Edl9Ec1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJHZW5lcl9GZWJyZXJfTWFyw6dfQWJyaWxfTWFpZ19KdW55X0p1bGlvbF9BZ29zdF9TZXRlbWJyZV9PY3R1YnJlX05vdmVtYnJlX0Rlc2VtYnJlXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiR2VuLl9GZWJyLl9NYXLDp19BYnIuX01haWdfSnVueV9KdWwuX0FnLl9TZXQuX09jdC5fTm92Ll9EZXMuXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW1cIixsbDpcIkQgTU1NIFlZWVlcIixsbGw6XCJEIE1NTSBZWVlZLCBIOm1tXCIsbGxsbDpcImRkZCBEIE1NTSBZWVlZLCBIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZCdhcXXDrSAlc1wiLHBhc3Q6XCJmYSAlc1wiLHM6XCJ1bnMgc2Vnb25zXCIsbTpcInVuIG1pbnV0XCIsbW06XCIlZCBtaW51dHNcIixoOlwidW5hIGhvcmFcIixoaDpcIiVkIGhvcmVzXCIsZDpcInVuIGRpYVwiLGRkOlwiJWQgZGllc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc29zXCIseTpcInVuIGFueVwiLHl5OlwiJWQgYW55c1wifSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVyblwiXCIrZSsoMT09PWV8fDM9PT1lP1wiclwiOjI9PT1lP1wiblwiOjQ9PT1lP1widFwiOlwiw6hcIil9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///33646\n')},98507:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e);function s(e){return e>1&&e<5&&1!=~~(e/10)}function r(e,n,t,r){var d=e+" ";switch(t){case"s":return n||r?"pár sekund":"pár sekundami";case"m":return n?"minuta":r?"minutu":"minutou";case"mm":return n||r?d+(s(e)?"minuty":"minut"):d+"minutami";case"h":return n?"hodina":r?"hodinu":"hodinou";case"hh":return n||r?d+(s(e)?"hodiny":"hodin"):d+"hodinami";case"d":return n||r?"den":"dnem";case"dd":return n||r?d+(s(e)?"dny":"dní"):d+"dny";case"M":return n||r?"měsíc":"měsícem";case"MM":return n||r?d+(s(e)?"měsíce":"měsíců"):d+"měsíci";case"y":return n||r?"rok":"rokem";case"yy":return n||r?d+(s(e)?"roky":"let"):d+"lety"}}var d={name:"cs",weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),months:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),monthsShort:"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"před %s",s:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTg1MDcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLFdBQVcsY0FBYyw2QkFBNkIsb0JBQW9CLFlBQVksVUFBVSxpREFBaUQsK0NBQStDLDREQUE0RCwrQ0FBK0MsNERBQTRELGlDQUFpQyxrREFBa0Qsc0NBQXNDLDJEQUEyRCxrQ0FBa0MscURBQXFELE9BQU8sMFlBQTBZLGFBQWEsVUFBVSw4SEFBOEgsZUFBZSxpRkFBaUYscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9jcy5qcz8zMTBlIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2NzPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1uKGUpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGU+MSYmZTw1JiYxIT1+fihlLzEwKX1mdW5jdGlvbiByKGUsbix0LHIpe3ZhciBkPWUrXCIgXCI7c3dpdGNoKHQpe2Nhc2VcInNcIjpyZXR1cm4gbnx8cj9cInDDoXIgc2VrdW5kXCI6XCJww6FyIHNla3VuZGFtaVwiO2Nhc2VcIm1cIjpyZXR1cm4gbj9cIm1pbnV0YVwiOnI/XCJtaW51dHVcIjpcIm1pbnV0b3VcIjtjYXNlXCJtbVwiOnJldHVybiBufHxyP2QrKHMoZSk/XCJtaW51dHlcIjpcIm1pbnV0XCIpOmQrXCJtaW51dGFtaVwiO2Nhc2VcImhcIjpyZXR1cm4gbj9cImhvZGluYVwiOnI/XCJob2RpbnVcIjpcImhvZGlub3VcIjtjYXNlXCJoaFwiOnJldHVybiBufHxyP2QrKHMoZSk/XCJob2RpbnlcIjpcImhvZGluXCIpOmQrXCJob2RpbmFtaVwiO2Nhc2VcImRcIjpyZXR1cm4gbnx8cj9cImRlblwiOlwiZG5lbVwiO2Nhc2VcImRkXCI6cmV0dXJuIG58fHI/ZCsocyhlKT9cImRueVwiOlwiZG7DrVwiKTpkK1wiZG55XCI7Y2FzZVwiTVwiOnJldHVybiBufHxyP1wibcSbc8OtY1wiOlwibcSbc8OtY2VtXCI7Y2FzZVwiTU1cIjpyZXR1cm4gbnx8cj9kKyhzKGUpP1wibcSbc8OtY2VcIjpcIm3Em3PDrWPFr1wiKTpkK1wibcSbc8OtY2lcIjtjYXNlXCJ5XCI6cmV0dXJuIG58fHI/XCJyb2tcIjpcInJva2VtXCI7Y2FzZVwieXlcIjpyZXR1cm4gbnx8cj9kKyhzKGUpP1wicm9reVwiOlwibGV0XCIpOmQrXCJsZXR5XCJ9fXZhciBkPXtuYW1lOlwiY3NcIix3ZWVrZGF5czpcIm5lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJuZV9wb1/DunRfc3RfxI10X3DDoV9zb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIm5lX3BvX8O6dF9zdF/EjXRfcMOhX3NvXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImxlZGVuX8O6bm9yX2LFmWV6ZW5fZHViZW5fa3bEm3Rlbl/EjWVydmVuX8SNZXJ2ZW5lY19zcnBlbl96w6HFmcOtX8WZw61qZW5fbGlzdG9wYWRfcHJvc2luZWNcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJsZWRfw7pub19ixZllX2R1Yl9rdsSbX8SNdm5fxI12Y19zcnBfesOhxZlfxZnDrWpfbGlzX3Byb1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlK1wiLlwifSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQgRC4gTU1NTSBZWVlZIEg6bW1cIixsOlwiRC4gTS4gWVlZWVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInphICVzXCIscGFzdDpcInDFmWVkICVzXCIsczpyLG06cixtbTpyLGg6cixoaDpyLGQ6cixkZDpyLE06cixNTTpyLHk6cix5eTpyfX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///98507\n')},16636:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"cv",weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),weekStart:1,weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY2MzYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaVlBQWlZLFNBQVMsVUFBVSw2TEFBNkwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9jdi5qcz9kNmI1Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2N2PWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLG49e25hbWU6XCJjdlwiLHdlZWtkYXlzOlwi0LLRi9GA0YHQsNGA0L3QuNC60YPQvV/RgtGD0L3RgtC40LrRg9C9X9GL0YLQu9Cw0YDQuNC60YPQvV/RjtC90LrRg9C9X9C605fSq9C90LXRgNC90LjQutGD0L1f0Y3RgNC90LXQutGD0L1f0YjTkdC80LDRgtC60YPQvVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLQutOR0YDQu9Cw0Ydf0L3QsNGA05HRgV/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YDRgtC80LVf0YPRgtORX9Kr0YPRgNC70LBf0LDQstOR0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YjRgtCw0LJcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcItCy0YvRgF/RgtGD0L1f0YvRgtC7X9GO0L1f0LrTl9KrX9GN0YDQvV/RiNOR0LxcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLQutOR0YBf0L3QsNGAX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgF/Rg9GC05Ff0qvRg9GAX9Cw0LLQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItCy0YBf0YLQvV/Ri9GCX9GO0L1f0LrSq1/RjdGAX9GI0LxcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihfKXtyZXR1cm4gX30sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELU1NLVlZWVlcIixMTDpcIllZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddXCIsTExMOlwiWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tXCIsTExMTDpcImRkZGQsIFlZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUobixudWxsLCEwKSxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16636\n')},28792:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(d,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(d){"use strict";function e(d){return d&&"object"==typeof d&&"default"in d?d:{default:d}}var _=e(d),a={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return _.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg3OTIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMGFBQTBhLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSxpTEFBaUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9jeS5qcz80NjdjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihkLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZHx8c2VsZikuZGF5anNfbG9jYWxlX2N5PWUoZC5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZCl7cmV0dXJuIGQmJlwib2JqZWN0XCI9PXR5cGVvZiBkJiZcImRlZmF1bHRcImluIGQ/ZDp7ZGVmYXVsdDpkfX12YXIgXz1lKGQpLGE9e25hbWU6XCJjeVwiLHdlZWtkYXlzOlwiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdyblwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5clwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIklvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTGxfTWFfTWVfSWFfR3dfU2FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihkKXtyZXR1cm4gZH0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJtZXduICVzXCIscGFzdDpcIiVzIHluIMO0bFwiLHM6XCJ5Y2h5ZGlnIGVpbGlhZGF1XCIsbTpcIm11bnVkXCIsbW06XCIlZCBtdW51ZFwiLGg6XCJhd3JcIixoaDpcIiVkIGF3clwiLGQ6XCJkaXdybm9kXCIsZGQ6XCIlZCBkaXdybm9kXCIsTTpcIm1pc1wiLE1NOlwiJWQgbWlzXCIseTpcImJsd3lkZHluXCIseXk6XCIlZCBmbHluZWRkXCJ9fTtyZXR1cm4gXy5kZWZhdWx0LmxvY2FsZShhLG51bGwsITApLGF9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28792\n')},17427:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=t(e),n={name:"da",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn._man._tirs._ons._tors._fre._lør.".split("_"),weekdaysMin:"sø._ma._ti._on._to._fr._lø.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"}};return d.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc0MjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscWFBQXFhLGFBQWEsVUFBVSw4SEFBOEgsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9kYS5qcz9hNDliIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2RhPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgZD10KGUpLG49e25hbWU6XCJkYVwiLHdlZWtkYXlzOlwic8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZ1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwic8O4bi5fbWFuLl90aXJzLl9vbnMuX3RvcnMuX2ZyZS5fbMO4ci5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJzw7guX21hLl90aS5fb24uX3RvLl9mci5fbMO4LlwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW51YXJfZmVicnVhcl9tYXJ0c19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bmlfanVsaV9hdWcuX3NlcHQuX29rdC5fbm92Ll9kZWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm9tICVzXCIscGFzdDpcIiVzIHNpZGVuXCIsczpcImbDpSBzZWt1bmRlclwiLG06XCJldCBtaW51dFwiLG1tOlwiJWQgbWludXR0ZXJcIixoOlwiZW4gdGltZVwiLGhoOlwiJWQgdGltZXJcIixkOlwiZW4gZGFnXCIsZGQ6XCIlZCBkYWdlXCIsTTpcImVuIG3DpW5lZFwiLE1NOlwiJWQgbcOlbmVkZXJcIix5OlwiZXQgw6VyXCIseXk6XCIlZCDDpXJcIn19O3JldHVybiBkLmRlZmF1bHQubG9jYWxlKG4sbnVsbCwhMCksbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17427\n')},73237:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),i={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function a(e,n,t){var a=i[t];return Array.isArray(a)&&(a=a[n?0:1]),a.replace("%d",e)}var r={name:"de-at",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a}};return t.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMyMzcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaVNBQWlTLGtCQUFrQixXQUFXLHdEQUF3RCxPQUFPLG1aQUFtWixhQUFhLHNCQUFzQixvSEFBb0gsZUFBZSxnRkFBZ0YscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9kZS1hdC5qcz9lZjJiIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2RlX2F0PW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1uKGUpLGk9e3M6XCJlaW4gcGFhciBTZWt1bmRlblwiLG06W1wiZWluZSBNaW51dGVcIixcImVpbmVyIE1pbnV0ZVwiXSxtbTpcIiVkIE1pbnV0ZW5cIixoOltcImVpbmUgU3R1bmRlXCIsXCJlaW5lciBTdHVuZGVcIl0saGg6XCIlZCBTdHVuZGVuXCIsZDpbXCJlaW4gVGFnXCIsXCJlaW5lbSBUYWdcIl0sZGQ6W1wiJWQgVGFnZVwiLFwiJWQgVGFnZW5cIl0sTTpbXCJlaW4gTW9uYXRcIixcImVpbmVtIE1vbmF0XCJdLE1NOltcIiVkIE1vbmF0ZVwiLFwiJWQgTW9uYXRlblwiXSx5OltcImVpbiBKYWhyXCIsXCJlaW5lbSBKYWhyXCJdLHl5OltcIiVkIEphaHJlXCIsXCIlZCBKYWhyZW5cIl19O2Z1bmN0aW9uIGEoZSxuLHQpe3ZhciBhPWlbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSkmJihhPWFbbj8wOjFdKSxhLnJlcGxhY2UoXCIlZFwiLGUpfXZhciByPXtuYW1lOlwiZGUtYXRcIix3ZWVrZGF5czpcIlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTb19Nb19EaV9NaV9Eb19Gcl9TYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei5cIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIi5cIn0sd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFRTOlwiSEg6bW06c3NcIixMVDpcIkhIOm1tXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCJ2b3IgJXNcIixzOmEsbTphLG1tOmEsaDphLGhoOmEsZDphLGRkOmEsTTphLE1NOmEseTphLHl5OmF9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShyLG51bGwsITApLHJ9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73237\n')},16148:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),a={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function i(e,n,t){var i=a[t];return Array.isArray(i)&&(i=i[n?0:1]),i.replace("%d",e)}var r={name:"de-ch",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i}};return t.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYxNDguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaVNBQWlTLGtCQUFrQixXQUFXLHdEQUF3RCxPQUFPLDRZQUE0WSxhQUFhLHNCQUFzQixvSEFBb0gsZUFBZSxnRkFBZ0YscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9kZS1jaC5qcz8wZGYzIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2RlX2NoPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1uKGUpLGE9e3M6XCJlaW4gcGFhciBTZWt1bmRlblwiLG06W1wiZWluZSBNaW51dGVcIixcImVpbmVyIE1pbnV0ZVwiXSxtbTpcIiVkIE1pbnV0ZW5cIixoOltcImVpbmUgU3R1bmRlXCIsXCJlaW5lciBTdHVuZGVcIl0saGg6XCIlZCBTdHVuZGVuXCIsZDpbXCJlaW4gVGFnXCIsXCJlaW5lbSBUYWdcIl0sZGQ6W1wiJWQgVGFnZVwiLFwiJWQgVGFnZW5cIl0sTTpbXCJlaW4gTW9uYXRcIixcImVpbmVtIE1vbmF0XCJdLE1NOltcIiVkIE1vbmF0ZVwiLFwiJWQgTW9uYXRlblwiXSx5OltcImVpbiBKYWhyXCIsXCJlaW5lbSBKYWhyXCJdLHl5OltcIiVkIEphaHJlXCIsXCIlZCBKYWhyZW5cIl19O2Z1bmN0aW9uIGkoZSxuLHQpe3ZhciBpPWFbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJihpPWlbbj8wOjFdKSxpLnJlcGxhY2UoXCIlZFwiLGUpfXZhciByPXtuYW1lOlwiZGUtY2hcIix3ZWVrZGF5czpcIlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTb19Nb19EaV9NaV9Eb19Gcl9TYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlNvX01vX0RpX01pX0RvX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei5cIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIi5cIn0sd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCJ2b3IgJXNcIixzOmksbTppLG1tOmksaDppLGhoOmksZDppLGRkOmksTTppLE1NOmkseTppLHl5Oml9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShyLG51bGwsITApLHJ9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///16148\n')},80790:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),a={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function i(e,n,t){var i=a[t];return Array.isArray(i)&&(i=i[n?0:1]),i.replace("%d",e)}var r={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i}};return t.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODA3OTAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaVNBQWlTLGtCQUFrQixXQUFXLHdEQUF3RCxPQUFPLGlaQUFpWixhQUFhLGtDQUFrQyxvSEFBb0gsZUFBZSxnRkFBZ0YscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9kZS5qcz9mZTViIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2RlPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1uKGUpLGE9e3M6XCJlaW4gcGFhciBTZWt1bmRlblwiLG06W1wiZWluZSBNaW51dGVcIixcImVpbmVyIE1pbnV0ZVwiXSxtbTpcIiVkIE1pbnV0ZW5cIixoOltcImVpbmUgU3R1bmRlXCIsXCJlaW5lciBTdHVuZGVcIl0saGg6XCIlZCBTdHVuZGVuXCIsZDpbXCJlaW4gVGFnXCIsXCJlaW5lbSBUYWdcIl0sZGQ6W1wiJWQgVGFnZVwiLFwiJWQgVGFnZW5cIl0sTTpbXCJlaW4gTW9uYXRcIixcImVpbmVtIE1vbmF0XCJdLE1NOltcIiVkIE1vbmF0ZVwiLFwiJWQgTW9uYXRlblwiXSx5OltcImVpbiBKYWhyXCIsXCJlaW5lbSBKYWhyXCJdLHl5OltcIiVkIEphaHJlXCIsXCIlZCBKYWhyZW5cIl19O2Z1bmN0aW9uIGkoZSxuLHQpe3ZhciBpPWFbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJihpPWlbbj8wOjFdKSxpLnJlcGxhY2UoXCIlZFwiLGUpfXZhciByPXtuYW1lOlwiZGVcIix3ZWVrZGF5czpcIlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTb19Nb19EaV9NaV9Eb19Gcl9TYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlK1wiLlwifSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxmb3JtYXRzOntMVFM6XCJISDptbTpzc1wiLExUOlwiSEg6bW1cIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcInZvciAlc1wiLHM6aSxtOmksbW06aSxoOmksaGg6aSxkOmksZGQ6aSxNOmksTU06aSx5OmkseXk6aX19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKHIsbnVsbCwhMCkscn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///80790\n')},11794:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"dv",weekdays:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),months:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekStart:7,weekdaysShort:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),monthsShort:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE3OTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc2dCQUFzZ0IsU0FBUyxVQUFVLDhHQUE4RyxlQUFlLHVNQUF1TSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2R2LmpzPzA2ZTgiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfZHY9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImR2XCIsd2Vla2RheXM6XCLeh96n3oveqN6H3rDejN6mX96A3q/eid6mX96H3qbegt6w3o7ep96D3qZf3oTeqt6L3qZf3oTeqt6D3qfekN6w3orept6M3qhf3oDeqt6G3qreg96qX96A3q7egt6o3oDeqN6D3qpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi3pberN6C3qreh96m3oPeqV/eit6s3oTesN6D3qreh96m3oPeqV/eid6n3oPeqN6X3qpf3oferd6V3rDeg96p3o3eql/eid6tX96W3qvegt6wX96W3qrejd6m3ofeqF/eh96v3o7ept6Q3rDek96qX96Q3qzeld6w3pPerN6J3rDehN6m3oPeql/eh96u3obesN6T3q/ehN6m3oPeql/egt6u3ojerN6J3rDehN6m3oPeql/ekd6o3pDerN6J3rDehN6m3oPeqlwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6Nyx3ZWVrZGF5c1Nob3J0Olwi3ofep96L3qjeh96w3ozepl/egN6v3onepl/eh96m3oLesN6O3qfeg96mX96E3qrei96mX96E3qreg96n3pDesN6K3qbejN6oX96A3qreht6q3oPeql/egN6u3oLeqN6A3qjeg96qXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi3pberN6C3qreh96m3oPeqV/eit6s3oTesN6D3qreh96m3oPeqV/eid6n3oPeqN6X3qpf3oferd6V3rDeg96p3o3eql/eid6tX96W3qvegt6wX96W3qrejd6m3ofeqF/eh96v3o7ept6Q3rDek96qX96Q3qzeld6w3pPerN6J3rDehN6m3oPeql/eh96u3obesN6T3q/ehN6m3oPeql/egt6u3ojerN6J3rDehN6m3oPeql/ekd6o3pDerN6J3rDehN6m3oPeqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIt6H3qfei96oX96A3q/eid6mX96H3qbegt6wX96E3qrei96mX96E3qreg96nX96A3qreht6qX96A3q7egt6oXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJEL00vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi3ozerN6D3q3ejt6m3ofeqCAlc1wiLHBhc3Q6XCLeht6q3oPeqN6C3rAgJXNcIixzOlwi3pDeqN6G3qregt6w3ozeqt6G3q7ehd6s3ofesFwiLG06XCLeid6o3oLeqN6T3qzeh96wXCIsbW06XCLeid6o3oLeqN6T3qogJWRcIixoOlwi3o7ept6R3qjeh96o3oPerN6H3rBcIixoaDpcIt6O3qbekd6o3ofeqN6D3qogJWRcIixkOlwi3oveqt6I3qbegN6s3ofesFwiLGRkOlwi3oveqt6I3qbekN6wICVkXCIsTTpcIt6J3qbegN6s3ofesFwiLE1NOlwi3onept6Q3rAgJWRcIix5Olwi3ofept6A3qbeg96s3ofesFwiLHl5Olwi3ofept6A3qbeg96qICVkXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11794\n')},65423:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"el",weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),months:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαι_Ιουν_Ιουλ_Αυγ_Σεπτ_Οκτ_Νοε_Δεκ".split("_"),ordinal:function(e){return e},weekStart:1,relativeTime:{future:"σε %s",past:"πριν %s",s:"μερικά δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένα μήνα",MM:"%d μήνες",y:"ένα χρόνο",yy:"%d χρόνια"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU0MjMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsbWFBQW1hLFNBQVMsMkJBQTJCLDhMQUE4TCxVQUFVLHVIQUF1SCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VsLmpzP2I0NTEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZWw9XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcImVsXCIsd2Vla2RheXM6XCLOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIs6az4XPgV/OlM61z4VfzqTPgc65X86kzrXPhF/OoM61zrxfzqDOsc+BX86jzrHOslwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIs6az4VfzpTOtV/OpM+BX86kzrVfzqDOtV/OoM6xX86jzrFcIi5zcGxpdChcIl9cIiksbW9udGhzOlwizpnOsc69zr/Phc6sz4HOuc6/z4JfzqbOtc6yz4HOv8+FzqzPgc65zr/Pgl/OnM6sz4HPhM65zr/Pgl/Okc+Az4HOr867zrnOv8+CX86czqzOuc6/z4JfzpnOv8+Nzr3Ouc6/z4JfzpnOv8+NzrvOuc6/z4JfzpHPjc6zzr/Phc+Dz4TOv8+CX86jzrXPgM+Ezq3OvM6yz4HOuc6/z4Jfzp/Ous+Ez47Oss+BzrnOv8+CX86dzr/Orc68zrLPgc65zr/Pgl/OlM61zrrOrc68zrLPgc65zr/PglwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIs6ZzrHOvV/Ops61zrJfzpzOsc+BX86Rz4DPgV/OnM6xzrlfzpnOv8+Fzr1fzpnOv8+FzrtfzpHPhc6zX86jzrXPgM+EX86fzrrPhF/Onc6/zrVfzpTOtc66XCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHdlZWtTdGFydDoxLHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiz4POtSAlc1wiLHBhc3Q6XCLPgM+BzrnOvSAlc1wiLHM6XCLOvM61z4HOuc66zqwgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xXCIsbTpcIs6tzr3OsSDOu861z4DPhM+MXCIsbW06XCIlZCDOu861z4DPhM6sXCIsaDpcIs68zq/OsSDPjs+BzrFcIixoaDpcIiVkIM+Oz4HOtc+CXCIsZDpcIs68zq/OsSDOvM6tz4HOsVwiLGRkOlwiJWQgzrzOrc+BzrXPglwiLE06XCLOrc69zrEgzrzOrs69zrFcIixNTTpcIiVkIM68zq7Ovc61z4JcIix5Olwizq3Ovc6xIM+Hz4HPjM69zr9cIix5eTpcIiVkIM+Hz4HPjM69zrnOsVwifSxmb3JtYXRzOntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEFcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///65423\n')},85109:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-au",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUxMDkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb1pBQW9aLFNBQVMsVUFBVSxxSEFBcUgsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi1hdS5qcz8wMjFjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuX2F1PWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpLF89e25hbWU6XCJlbi1hdVwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEFcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCIlcyBhZ29cIixzOlwiYSBmZXcgc2Vjb25kc1wiLG06XCJhIG1pbnV0ZVwiLG1tOlwiJWQgbWludXRlc1wiLGg6XCJhbiBob3VyXCIsaGg6XCIlZCBob3Vyc1wiLGQ6XCJhIGRheVwiLGRkOlwiJWQgZGF5c1wiLE06XCJhIG1vbnRoXCIsTU06XCIlZCBtb250aHNcIix5OlwiYSB5ZWFyXCIseXk6XCIlZCB5ZWFyc1wifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoXyxudWxsLCEwKSxffSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///85109\n')},55105:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=a(e),t={name:"en-ca",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return _.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUxMDUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1lBQXdZLFNBQVMsVUFBVSx3SEFBd0gsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi1jYS5qcz8zN2MyIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuX2NhPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgXz1hKGUpLHQ9e25hbWU6XCJlbi1jYVwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJNTU1NIEQsIFlZWVlcIixMTEw6XCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEFcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCIlcyBhZ29cIixzOlwiYSBmZXcgc2Vjb25kc1wiLG06XCJhIG1pbnV0ZVwiLG1tOlwiJWQgbWludXRlc1wiLGg6XCJhbiBob3VyXCIsaGg6XCIlZCBob3Vyc1wiLGQ6XCJhIGRheVwiLGRkOlwiJWQgZGF5c1wiLE06XCJhIG1vbnRoXCIsTU06XCIlZCBtb250aHNcIix5OlwiYSB5ZWFyXCIseXk6XCIlZCB5ZWFyc1wifX07cmV0dXJuIF8uZGVmYXVsdC5sb2NhbGUodCxudWxsLCEwKSx0fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55105\n')},99517:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-gb",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],t=e%100;return"["+e+(a[(t-20)%10]||a[t]||a[0])+"]"}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk1MTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMFpBQTBaLGlMQUFpTCxVQUFVLGlIQUFpSCxxQkFBcUIsb0NBQW9DLDZDQUE2QyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VuLWdiLmpzPzIxYjYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsYSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9YShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sYSk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZW5fZ2I9YShlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PWEoZSksXz17bmFtZTpcImVuLWdiXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTW9fVHVfV2VfVGhfRnJfU2FcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHllYXJTdGFydDo0LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgYT1bXCJ0aFwiLFwic3RcIixcIm5kXCIsXCJyZFwiXSx0PWUlMTAwO3JldHVyblwiW1wiK2UrKGFbKHQtMjApJTEwXXx8YVt0XXx8YVswXSkrXCJdXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///99517\n')},30758:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-ie",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA3NTguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb1pBQW9aLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi1pZS5qcz8wMjc1Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuX2llPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpLF89e25hbWU6XCJlbi1pZVwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKF8sbnVsbCwhMCksX30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///30758\n')},95805:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=a(e),t={name:"en-il",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return _.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU4MDUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1lBQXdZLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi1pbC5qcz83MGJmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuX2lsPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgXz1hKGUpLHQ9e25hbWU6XCJlbi1pbFwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9fTtyZXR1cm4gXy5kZWZhdWx0LmxvY2FsZSh0LG51bGwsITApLHR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95805\n')},88529:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),n={name:"en-in",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],t=e%100;return"["+e+(a[(t-20)%10]||a[t]||a[0])+"]"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODg1MjkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMFpBQTBaLGlMQUFpTCxVQUFVLGlIQUFpSCxxQkFBcUIsb0NBQW9DLDZDQUE2QyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VuLWluLmpzPzljODkiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsYSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9YShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sYSk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZW5faW49YShlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PWEoZSksbj17bmFtZTpcImVuLWluXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTW9fVHVfV2VfVGhfRnJfU2FcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHllYXJTdGFydDo0LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgYT1bXCJ0aFwiLFwic3RcIixcIm5kXCIsXCJyZFwiXSx0PWUlMTAwO3JldHVyblwiW1wiK2UrKGFbKHQtMjApJTEwXXx8YVt0XXx8YVswXSkrXCJdXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShuLG51bGwsITApLG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///88529\n')},50302:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),n={name:"en-nz",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){var a=["th","st","nd","rd"],t=e%100;return"["+e+(a[(t-20)%10]||a[t]||a[0])+"]"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTAzMDIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb1pBQW9aLG9DQUFvQywyQ0FBMkMsVUFBVSxxSEFBcUgsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi1uei5qcz81MjAwIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuX256PWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpLG49e25hbWU6XCJlbi1uelwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciBhPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLHQ9ZSUxMDA7cmV0dXJuXCJbXCIrZSsoYVsodC0yMCklMTBdfHxhW3RdfHxhWzBdKStcIl1cIn0sZm9ybWF0czp7TFQ6XCJoOm1tIEFcIixMVFM6XCJoOm1tOnNzIEFcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKG4sbnVsbCwhMCksbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50302\n')},35941:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-sg",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU5NDEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb1pBQW9aLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi1zZy5qcz9hY2ViIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuX3NnPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpLF89e25hbWU6XCJlbi1zZ1wiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///35941\n')},46183:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),_={name:"en-tt",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var t=["th","st","nd","rd"],a=e%100;return"["+e+(t[(a-20)%10]||t[a]||t[0])+"]"}};return a.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYxODMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMFpBQTBaLGlMQUFpTCxVQUFVLGlIQUFpSCxxQkFBcUIsb0NBQW9DLDZDQUE2QyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VuLXR0LmpzP2RkODkiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZW5fdHQ9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBhPXQoZSksXz17bmFtZTpcImVuLXR0XCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTW9fVHVfV2VfVGhfRnJfU2FcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHllYXJTdGFydDo0LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1bXCJ0aFwiLFwic3RcIixcIm5kXCIsXCJyZFwiXSxhPWUlMTAwO3JldHVyblwiW1wiK2UrKHRbKGEtMjApJTEwXXx8dFthXXx8dFswXSkrXCJdXCJ9fTtyZXR1cm4gYS5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46183\n')},25054:function(module){eval('!function(e,n){ true?module.exports=n():0}(this,(function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var n=["th","st","nd","rd"],t=e%100;return"["+e+(n[(t-20)%10]||n[t]||n[0])+"]"}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUwNTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBeUgsQ0FBQyxrQkFBa0IsYUFBYSxPQUFPLHVOQUF1TixvQ0FBb0MsNkNBQTZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lbi5qcz9lZGJmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4oKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VuPW4oKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57bmFtZTpcImVuXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIG49W1widGhcIixcInN0XCIsXCJuZFwiLFwicmRcIl0sdD1lJTEwMDtyZXR1cm5cIltcIitlKyhuWyh0LTIwKSUxMF18fG5bdF18fG5bMF0pK1wiXVwifX19KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25054\n')},74990:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(e),t={name:"eo",weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"}};return a.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ5OTAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa1pBQWtaLFNBQVMsVUFBVSw4SUFBOEksZUFBZSwyS0FBMksscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9lby5qcz81MDk3Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2VvPW8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgYT1vKGUpLHQ9e25hbWU6XCJlb1wiLHdlZWtkYXlzOlwiZGltYW7EiW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fxLVhxa1kb192ZW5kcmVkb19zYWJhdG9cIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hxa1ndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJyb1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiZGltX2x1bl9tYXJkX21lcmtfxLVhxa1fdmVuX3NhYlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRpX2x1X21hX21lX8S1YV92ZV9zYVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiWVlZWS1NTS1ERFwiLExMOlwiRFstYSBkZV0gTU1NTSwgWVlZWVwiLExMTDpcIkRbLWEgZGVdIE1NTU0sIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgW2xhXSBEWy1hIGRlXSBNTU1NLCBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwicG9zdCAlc1wiLHBhc3Q6XCJhbnRhxa0gJXNcIixzOlwic2VrdW5kb2pcIixtOlwibWludXRvXCIsbW06XCIlZCBtaW51dG9qXCIsaDpcImhvcm9cIixoaDpcIiVkIGhvcm9qXCIsZDpcInRhZ29cIixkZDpcIiVkIHRhZ29qXCIsTTpcIm1vbmF0b1wiLE1NOlwiJWQgbW9uYXRvalwiLHk6XCJqYXJvXCIseXk6XCIlZCBqYXJvalwifX07cmV0dXJuIGEuZGVmYXVsdC5sb2NhbGUodCxudWxsLCEwKSx0fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///74990\n')},3864:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es-do",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekStart:1,relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return s.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg2NC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUE2SSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyxvWkFBb1osa0xBQWtMLHFCQUFxQixhQUFhLFVBQVUscUpBQXFKLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvZXMtZG8uanM/YjY4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxvKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1vKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxvKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9lc19kbz1vKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHM9byhlKSxkPXtuYW1lOlwiZXMtZG9cIix3ZWVrZGF5czpcImRvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbWlfanVfdmlfc8OhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVuICVzXCIscGFzdDpcImhhY2UgJXNcIixzOlwidW5vcyBzZWd1bmRvc1wiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0b3NcIixoOlwidW5hIGhvcmFcIixoaDpcIiVkIGhvcmFzXCIsZDpcInVuIGTDrWFcIixkZDpcIiVkIGTDrWFzXCIsTTpcInVuIG1lc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW4gYcOxb1wiLHl5OlwiJWQgYcOxb3NcIn0sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIsK6XCJ9LGZvcm1hdHM6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQVwifX07cmV0dXJuIHMuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3864\n')},37118:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es-mx",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"}};return s.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxMTguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1lBQXdZLGtMQUFrTCxxQkFBcUIsYUFBYSxVQUFVLDZJQUE2SSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VzLW14LmpzPzM4YzQiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9byhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sbyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZXNfbXg9byhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBzPW8oZSksZD17bmFtZTpcImVzLW14XCIsd2Vla2RheXM6XCJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvX2x1X21hX21pX2p1X3ZpX3PDoVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWNcIi5zcGxpdChcIl9cIikscmVsYXRpdmVUaW1lOntmdXR1cmU6XCJlbiAlc1wiLHBhc3Q6XCJoYWNlICVzXCIsczpcInVub3Mgc2VndW5kb3NcIixtOlwidW4gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVuYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1biBkw61hXCIsZGQ6XCIlZCBkw61hc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc2VzXCIseTpcInVuIGHDsW9cIix5eTpcIiVkIGHDsW9zXCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tXCJ9fTtyZXR1cm4gcy5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37118\n')},23521:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es-pr",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return s.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM1MjEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsK1lBQStZLG1KQUFtSixlQUFlLGtMQUFrTCxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VzLXByLmpzPzIwMmIiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9byhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sbyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZXNfcHI9byhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBzPW8oZSksZD17bmFtZTpcImVzLXByXCIsbW9udGhzU2hvcnQ6XCJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcImRvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbWlfanVfdmlfc8OhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmVcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJoOm1tIEFcIixMVFM6XCJoOm1tOnNzIEFcIixMOlwiTU0vREQvWVlZWVwiLExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZXCIsTExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZW4gJXNcIixwYXN0OlwiaGFjZSAlc1wiLHM6XCJ1bm9zIHNlZ3VuZG9zXCIsbTpcInVuIG1pbnV0b1wiLG1tOlwiJWQgbWludXRvc1wiLGg6XCJ1bmEgaG9yYVwiLGhoOlwiJWQgaG9yYXNcIixkOlwidW4gZMOtYVwiLGRkOlwiJWQgZMOtYXNcIixNOlwidW4gbWVzXCIsTU06XCIlZCBtZXNlc1wiLHk6XCJ1biBhw7FvXCIseXk6XCIlZCBhw7Fvc1wifSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlK1wiwrpcIn19O3JldHVybiBzLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23521\n')},36165:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,s){ true?module.exports=s(__webpack_require__(27484)):0}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=s(e),d={name:"es-us",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return o.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYxNjUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1lBQXdZLGtMQUFrTCxxQkFBcUIsYUFBYSxVQUFVLHFKQUFxSixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VzLXVzLmpzPzA5ZDAiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUscyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9cyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0scyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZXNfdXM9cyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBvPXMoZSksZD17bmFtZTpcImVzLXVzXCIsd2Vla2RheXM6XCJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvX2x1X21hX21pX2p1X3ZpX3PDoVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWNcIi5zcGxpdChcIl9cIikscmVsYXRpdmVUaW1lOntmdXR1cmU6XCJlbiAlc1wiLHBhc3Q6XCJoYWNlICVzXCIsczpcInVub3Mgc2VndW5kb3NcIixtOlwidW4gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVuYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1biBkw61hXCIsZGQ6XCIlZCBkw61hc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc2VzXCIseTpcInVuIGHDsW9cIix5eTpcIiVkIGHDsW9zXCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifSxmb3JtYXRzOntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJNTS9ERC9ZWVlZXCIsTEw6XCJEIFtkZV0gTU1NTSBbZGVdIFlZWVlcIixMTEw6XCJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEFcIn19O3JldHVybiBvLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///36165\n')},67763:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return s.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjc3NjMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNFlBQTRZLDJJQUEySSxlQUFlLGtMQUFrTCxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2VzLmpzPzg5NzAiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9byhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sbyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfZXM9byhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBzPW8oZSksZD17bmFtZTpcImVzXCIsbW9udGhzU2hvcnQ6XCJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcImRvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbWlfanVfdmlfc8OhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmVcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIFtkZV0gTU1NTSBbZGVdIFlZWVlcIixMTEw6XCJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVuICVzXCIscGFzdDpcImhhY2UgJXNcIixzOlwidW5vcyBzZWd1bmRvc1wiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0b3NcIixoOlwidW5hIGhvcmFcIixoaDpcIiVkIGhvcmFzXCIsZDpcInVuIGTDrWFcIixkZDpcIiVkIGTDrWFzXCIsTTpcInVuIG1lc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW4gYcOxb1wiLHl5OlwiJWQgYcOxb3NcIn0sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIsK6XCJ9fTtyZXR1cm4gcy5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67763\n')},99670:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e);function u(e,a,t,u){var s={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:["%d minuti","%d minutit"],h:["ühe tunni","tund aega","üks tund"],hh:["%d tunni","%d tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:["%d kuu","%d kuud"],y:["ühe aasta","aasta","üks aasta"],yy:["%d aasta","%d aastat"]};return a?(s[t][2]?s[t][2]:s[t][1]).replace("%d",e):(u?s[t][0]:s[t][1]).replace("%d",e)}var s={name:"et",weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s pärast",past:"%s tagasi",s:u,m:u,mm:u,h:u,hh:u,d:u,dd:"%d päeva",M:u,MM:u,y:u,yy:u},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return t.default.locale(s,null,!0),s}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk2NzAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLFdBQVcsb0JBQW9CLE9BQU8scVVBQXFVLHVGQUF1RixPQUFPLHNZQUFzWSxhQUFhLDJCQUEyQiw4RkFBOEYsVUFBVSxrSEFBa0gscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ldC5qcz83M2M0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2V0PWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpO2Z1bmN0aW9uIHUoZSxhLHQsdSl7dmFyIHM9e3M6W1wibcO1bmUgc2VrdW5kaVwiLFwibcO1bmkgc2VrdW5kXCIsXCJwYWFyIHNla3VuZGl0XCJdLG06W1wiw7xoZSBtaW51dGlcIixcIsO8a3MgbWludXRcIl0sbW06W1wiJWQgbWludXRpXCIsXCIlZCBtaW51dGl0XCJdLGg6W1wiw7xoZSB0dW5uaVwiLFwidHVuZCBhZWdhXCIsXCLDvGtzIHR1bmRcIl0saGg6W1wiJWQgdHVubmlcIixcIiVkIHR1bmRpXCJdLGQ6W1wiw7xoZSBww6RldmFcIixcIsO8a3MgcMOkZXZcIl0sTTpbXCJrdXUgYWphXCIsXCJrdXUgYWVnYVwiLFwiw7xrcyBrdXVcIl0sTU06W1wiJWQga3V1XCIsXCIlZCBrdXVkXCJdLHk6W1wiw7xoZSBhYXN0YVwiLFwiYWFzdGFcIixcIsO8a3MgYWFzdGFcIl0seXk6W1wiJWQgYWFzdGFcIixcIiVkIGFhc3RhdFwiXX07cmV0dXJuIGE/KHNbdF1bMl0/c1t0XVsyXTpzW3RdWzFdKS5yZXBsYWNlKFwiJWRcIixlKToodT9zW3RdWzBdOnNbdF1bMV0pLnJlcGxhY2UoXCIlZFwiLGUpfXZhciBzPXtuYW1lOlwiZXRcIix3ZWVrZGF5czpcInDDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6RldlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiUF9FX1RfS19OX1JfTFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlBfRV9UX0tfTl9SX0xcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LHdlZWtTdGFydDoxLHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgcMOkcmFzdFwiLHBhc3Q6XCIlcyB0YWdhc2lcIixzOnUsbTp1LG1tOnUsaDp1LGhoOnUsZDp1LGRkOlwiJWQgcMOkZXZhXCIsTTp1LE1NOnUseTp1LHl5OnV9LGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW1cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKHMsbnVsbCwhMCksc30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99670\n')},46629:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=e(a),l={name:"eu",weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),weekStart:1,weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"}};return t.default.locale(l,null,!0),l}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY2MjkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsK2FBQSthLFNBQVMsVUFBVSwyUEFBMlAsZUFBZSxxTUFBcU0scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ldS5qcz9lMDhjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX2V1PWUoYS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZcImRlZmF1bHRcImluIGE/YTp7ZGVmYXVsdDphfX12YXIgdD1lKGEpLGw9e25hbWU6XCJldVwiLHdlZWtkYXlzOlwiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJpZ19hbF9hcl9hel9vZ19vbF9sclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiWVlZWS1NTS1ERFwiLExMOlwiWVlZWVtrb10gTU1NTVtyZW5dIERbYV1cIixMTEw6XCJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbVwiLExMTEw6XCJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbVwiLGw6XCJZWVlZLU0tRFwiLGxsOlwiWVlZWVtrb10gTU1NIERbYV1cIixsbGw6XCJZWVlZW2tvXSBNTU0gRFthXSBISDptbVwiLGxsbGw6XCJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgYmFycnVcIixwYXN0OlwiZHVlbGEgJXNcIixzOlwic2VndW5kbyBiYXR6dWtcIixtOlwibWludXR1IGJhdFwiLG1tOlwiJWQgbWludXR1XCIsaDpcIm9yZHUgYmF0XCIsaGg6XCIlZCBvcmR1XCIsZDpcImVndW4gYmF0XCIsZGQ6XCIlZCBlZ3VuXCIsTTpcImhpbGFiZXRlIGJhdFwiLE1NOlwiJWQgaGlsYWJldGVcIix5OlwidXJ0ZSBiYXRcIix5eTpcIiVkIHVydGVcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGwsbnVsbCwhMCksbH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///46629\n')},96953:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"fa",weekdays:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک_دو_سه_چه_پن_جم_شن".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekStart:6,months:"فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split("_"),monthsShort:"فرو_ارد_خرد_تیر_مرد_شهر_مهر_آبا_آذر_دی_بهم_اسف".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"در %s",past:"%s قبل",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY5NTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMldBQTJXLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSxzS0FBc0sscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9mYS5qcz82NDAzIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2ZhPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJmYVwiLHdlZWtkYXlzOlwi24zaqeKAjNi02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mH4oCM2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KzigIzYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZh1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi24zaqeKAjF/Yr9mIX9iz2YfigIxf2obZh1/ZvtmGX9is2YVf2LTZhlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItuMX9ivX9izX9qGX9m+X9isX9i0XCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDo2LG1vbnRoczpcItmB2LHZiNix2K/bjNmGX9in2LHYr9uM2KjZh9i02Kpf2K7Ysdiv2KfYr1/YqtuM2LFf2YXYsdiv2KfYr1/YtNmH2LHbjNmI2LFf2YXZh9ixX9ii2KjYp9mGX9ii2LDYsV/Yr9uMX9io2YfZhdmGX9in2LPZgdmG2K9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLZgdix2Yhf2KfYsdivX9iu2LHYr1/YqtuM2LFf2YXYsdivX9i02YfYsV/ZhdmH2LFf2KLYqNinX9ii2LDYsV/Yr9uMX9io2YfZhV/Yp9iz2YFcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihfKXtyZXR1cm4gX30sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLYr9ixICVzXCIscGFzdDpcIiVzINmC2KjZhFwiLHM6XCLahtmG2K8g2KvYp9mG24zZh1wiLG06XCLbjNqpINiv2YLbjNmC2YdcIixtbTpcIiVkINiv2YLbjNmC2YdcIixoOlwi24zaqSDYs9in2LnYqlwiLGhoOlwiJWQg2LPYp9i52KpcIixkOlwi24zaqSDYsdmI2LJcIixkZDpcIiVkINix2YjYslwiLE06XCLbjNqpINmF2KfZh1wiLE1NOlwiJWQg2YXYp9mHXCIseTpcItuM2qkg2LPYp9mEXCIseXk6XCIlZCDYs9in2YRcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96953\n')},47822:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(u,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(u){"use strict";function e(u){return u&&"object"==typeof u&&"default"in u?u:{default:u}}var t=e(u);function n(u,e,t,n){var i={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"päivä",dd:"%d päivää",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän".split("_")},a={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"päivän",dd:"%d päivän",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän".split("_")},s=n&&!e?a:i,_=s[t];return u<10?_.replace("%d",s.numbers[u]):_.replace("%d",u)}var i={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),ordinal:function(u){return u+"."},weekStart:1,yearStart:4,relativeTime:{future:"%s päästä",past:"%s sitten",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM[ta] YYYY",LLL:"D. MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, D. MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [klo] HH.mm",llll:"ddd, D. MMM YYYY, [klo] HH.mm"}};return t.default.locale(i,null,!0),i}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc4MjIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLFdBQVcsb0JBQW9CLE9BQU8sd1BBQXdQLElBQUksb1FBQW9RLG9CQUFvQiwyREFBMkQsT0FBTyxnYkFBZ2IsYUFBYSx1Q0FBdUMscUZBQXFGLFVBQVUsa1BBQWtQLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvZmkuanM/NmEzMiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24odSxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxlKToodT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnV8fHNlbGYpLmRheWpzX2xvY2FsZV9maT1lKHUuZGF5anMpfSh0aGlzLChmdW5jdGlvbih1KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHUpe3JldHVybiB1JiZcIm9iamVjdFwiPT10eXBlb2YgdSYmXCJkZWZhdWx0XCJpbiB1P3U6e2RlZmF1bHQ6dX19dmFyIHQ9ZSh1KTtmdW5jdGlvbiBuKHUsZSx0LG4pe3ZhciBpPXtzOlwibXV1dGFtYSBzZWt1bnRpXCIsbTpcIm1pbnV1dHRpXCIsbW06XCIlZCBtaW51dXR0aWFcIixoOlwidHVudGlcIixoaDpcIiVkIHR1bnRpYVwiLGQ6XCJww6RpdsOkXCIsZGQ6XCIlZCBww6RpdsOkw6RcIixNOlwia3V1a2F1c2lcIixNTTpcIiVkIGt1dWthdXR0YVwiLHk6XCJ2dW9zaVwiLHl5OlwiJWQgdnVvdHRhXCIsbnVtYmVyczpcIm5vbGxhX3lrc2lfa2Frc2lfa29sbWVfbmVsasOkX3ZpaXNpX2t1dXNpX3NlaXRzZW3DpG5fa2FoZGVrc2FuX3loZGVrc8OkblwiLnNwbGl0KFwiX1wiKX0sYT17czpcIm11dXRhbWFuIHNla3VubmluXCIsbTpcIm1pbnV1dGluXCIsbW06XCIlZCBtaW51dXRpblwiLGg6XCJ0dW5uaW5cIixoaDpcIiVkIHR1bm5pblwiLGQ6XCJww6RpdsOkblwiLGRkOlwiJWQgcMOkaXbDpG5cIixNOlwia3V1a2F1ZGVuXCIsTU06XCIlZCBrdXVrYXVkZW5cIix5OlwidnVvZGVuXCIseXk6XCIlZCB2dW9kZW5cIixudW1iZXJzOlwibm9sbGFuX3loZGVuX2thaGRlbl9rb2xtZW5fbmVsasOkbl92aWlkZW5fa3V1ZGVuX3NlaXRzZW3DpG5fa2FoZGVrc2FuX3loZGVrc8OkblwiLnNwbGl0KFwiX1wiKX0scz1uJiYhZT9hOmksXz1zW3RdO3JldHVybiB1PDEwP18ucmVwbGFjZShcIiVkXCIscy5udW1iZXJzW3VdKTpfLnJlcGxhY2UoXCIlZFwiLHUpfXZhciBpPXtuYW1lOlwiZmlcIix3ZWVrZGF5czpcInN1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwic3VfbWFfdGlfa2VfdG9fcGVfbGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJzdV9tYV90aV9rZV90b19wZV9sYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHUpe3JldHVybiB1K1wiLlwifSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIHDDpMOkc3TDpFwiLHBhc3Q6XCIlcyBzaXR0ZW5cIixzOm4sbTpuLG1tOm4saDpuLGhoOm4sZDpuLGRkOm4sTTpuLE1NOm4seTpuLHl5Om59LGZvcm1hdHM6e0xUOlwiSEgubW1cIixMVFM6XCJISC5tbS5zc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NW3RhXSBZWVlZXCIsTExMOlwiRC4gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW1cIixsOlwiRC5NLllZWVlcIixsbDpcIkQuIE1NTSBZWVlZXCIsbGxsOlwiRC4gTU1NIFlZWVksIFtrbG9dIEhILm1tXCIsbGxsbDpcImRkZCwgRC4gTU1NIFlZWVksIFtrbG9dIEhILm1tXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShpLG51bGwsITApLGl9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47822\n')},69197:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),r={name:"fo",weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"}};return a.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkxOTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsK1pBQStaLFNBQVMsVUFBVSxrSEFBa0gsZUFBZSxnTUFBZ00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9mby5qcz80MDQ0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2ZvPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgYT10KGUpLHI9e25hbWU6XCJmb1wiLHdlZWtkYXlzOlwic3VubnVkYWd1cl9tw6FuYWRhZ3VyX3TDvXNkYWd1cl9taWt1ZGFndXJfaMOzc2RhZ3VyX2Zyw61nZ2phZGFndXJfbGV5Z2FyZGFndXJcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHLDrWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXJcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcInN1bl9tw6FuX3TDvXNfbWlrX2jDs3NfZnLDrV9sZXlcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInN1X23DoV90w71fbWlfaMOzX2ZyX2xlXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInVtICVzXCIscGFzdDpcIiVzIHPDrcOwYW5pXCIsczpcImbDoSBzZWt1bmRcIixtOlwiZWluIG1pbnV0dHVyXCIsbW06XCIlZCBtaW51dHRpclwiLGg6XCJlaW4gdMOtbWlcIixoaDpcIiVkIHTDrW1hclwiLGQ6XCJlaW4gZGFndXJcIixkZDpcIiVkIGRhZ2FyXCIsTTpcImVpbiBtw6FuYcOwdXJcIixNTTpcIiVkIG3DoW5hw7BpclwiLHk6XCJlaXR0IMOhclwiLHl5OlwiJWQgw6FyXCJ9fTtyZXR1cm4gYS5kZWZhdWx0LmxvY2FsZShyLG51bGwsITApLHJ9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69197\n')},77989:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),_={name:"fr-ca",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return i.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc5ODkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1pBQXdaLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSwrTEFBK0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9mci1jYS5qcz84ZWU2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2ZyX2NhPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgaT1uKGUpLF89e25hbWU6XCJmci1jYVwiLHdlZWtkYXlzOlwiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZGlfbHVfbWFfbWVfamVfdmVfc2FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImRhbnMgJXNcIixwYXN0OlwiaWwgeSBhICVzXCIsczpcInF1ZWxxdWVzIHNlY29uZGVzXCIsbTpcInVuZSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwidW5lIGhldXJlXCIsaGg6XCIlZCBoZXVyZXNcIixkOlwidW4gam91clwiLGRkOlwiJWQgam91cnNcIixNOlwidW4gbW9pc1wiLE1NOlwiJWQgbW9pc1wiLHk6XCJ1biBhblwiLHl5OlwiJWQgYW5zXCJ9fTtyZXR1cm4gaS5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///77989\n')},54254:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),_={name:"fr-ch",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekStart:1,weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return i.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb2FBQW9hLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSwrTEFBK0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9mci1jaC5qcz9kY2M2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2ZyX2NoPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgaT1uKGUpLF89e25hbWU6XCJmci1jaFwiLHdlZWtkYXlzOlwiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZGlfbHVfbWFfbWVfamVfdmVfc2FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImRhbnMgJXNcIixwYXN0OlwiaWwgeSBhICVzXCIsczpcInF1ZWxxdWVzIHNlY29uZGVzXCIsbTpcInVuZSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwidW5lIGhldXJlXCIsaGg6XCIlZCBoZXVyZXNcIixkOlwidW4gam91clwiLGRkOlwiJWQgam91cnNcIixNOlwidW4gbW9pc1wiLE1NOlwiJWQgbW9pc1wiLHk6XCJ1biBhblwiLHl5OlwiJWQgYW5zXCJ9fTtyZXR1cm4gaS5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54254\n')},96023:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),i={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return""+e+(1===e?"er":"")}};return t.default.locale(i,null,!0),i}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYwMjMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa2FBQWthLGdIQUFnSCxlQUFlLDZMQUE2TCxxQkFBcUIsNkJBQTZCLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvZnIuanM/MWVhMCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxuKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1uKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxuKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9mcj1uKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHQ9bihlKSxpPXtuYW1lOlwiZnJcIix3ZWVrZGF5czpcImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRpX2x1X21hX21lX2plX3ZlX3NhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHllYXJTdGFydDo0LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJkYW5zICVzXCIscGFzdDpcImlsIHkgYSAlc1wiLHM6XCJxdWVscXVlcyBzZWNvbmRlc1wiLG06XCJ1bmUgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcInVuZSBoZXVyZVwiLGhoOlwiJWQgaGV1cmVzXCIsZDpcInVuIGpvdXJcIixkZDpcIiVkIGpvdXJzXCIsTTpcInVuIG1vaXNcIixNTTpcIiVkIG1vaXNcIix5OlwidW4gYW5cIix5eTpcIiVkIGFuc1wifSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVyblwiXCIrZSsoMT09PWU/XCJlclwiOlwiXCIpfX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoaSxudWxsLCEwKSxpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///96023\n')},93220:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),t={name:"fy",weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),weekStart:1,weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"}};return i.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTMyMjAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa2FBQWthLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSxvTUFBb00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9meS5qcz8zNjhhIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2Z5PW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgaT1uKGUpLHQ9e25hbWU6XCJmeVwiLHdlZWtkYXlzOlwic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb25cIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy5cIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcInNpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlNpX01vX1RpX1dvX1RvX0ZyX1NvXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC1NTS1ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvZXIgJXNcIixwYXN0OlwiJXMgbHluXCIsczpcImluIHBlYXIgc2Vrb25kZW5cIixtOlwiaWVuIG1pbsO6dFwiLG1tOlwiJWQgbWludXRlblwiLGg6XCJpZW4gb2VyZVwiLGhoOlwiJWQgb2VyZW5cIixkOlwiaWVuIGRlaVwiLGRkOlwiJWQgZGFnZW5cIixNOlwiaWVuIG1vYW5uZVwiLE1NOlwiJWQgbW9hbm5lblwiLHk6XCJpZW4gamllclwiLHl5OlwiJWQgamllcnJlblwifX07cmV0dXJuIGkuZGVmYXVsdC5sb2NhbGUodCxudWxsLCEwKSx0fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///93220\n')},47467:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var i=e(a),n={name:"ga",weekdays:"Dé Domhnaigh_Dé Luain_Dé Máirt_Dé Céadaoin_Déardaoin_Dé hAoine_Dé Satharn".split("_"),months:"Eanáir_Feabhra_Márta_Aibreán_Bealtaine_Méitheamh_Iúil_Lúnasa_Meán Fómhair_Deaireadh Fómhair_Samhain_Nollaig".split("_"),weekStart:1,weekdaysShort:"Dom_Lua_Mái_Céa_Déa_hAo_Sat".split("_"),monthsShort:"Eaná_Feab_Márt_Aibr_Beal_Méit_Iúil_Lúna_Meán_Deai_Samh_Noll".split("_"),weekdaysMin:"Do_Lu_Má_Ce_Dé_hA_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"}};return i.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc0NjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb2NBQW9jLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSx1TEFBdUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9nYS5qcz9iNWFiIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX2dhPWUoYS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZcImRlZmF1bHRcImluIGE/YTp7ZGVmYXVsdDphfX12YXIgaT1lKGEpLG49e25hbWU6XCJnYVwiLHdlZWtkYXlzOlwiRMOpIERvbWhuYWlnaF9Ew6kgTHVhaW5fRMOpIE3DoWlydF9Ew6kgQ8OpYWRhb2luX0TDqWFyZGFvaW5fRMOpIGhBb2luZV9Ew6kgU2F0aGFyblwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJFYW7DoWlyX0ZlYWJocmFfTcOhcnRhX0FpYnJlw6FuX0JlYWx0YWluZV9Nw6lpdGhlYW1oX0nDumlsX0zDum5hc2FfTWXDoW4gRsOzbWhhaXJfRGVhaXJlYWRoIEbDs21oYWlyX1NhbWhhaW5fTm9sbGFpZ1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiRG9tX0x1YV9Nw6FpX0PDqWFfRMOpYV9oQW9fU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiRWFuw6FfRmVhYl9Nw6FydF9BaWJyX0JlYWxfTcOpaXRfScO6aWxfTMO6bmFfTWXDoW5fRGVhaV9TYW1oX05vbGxcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEb19MdV9Nw6FfQ2VfRMOpX2hBX1NhXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaSAlc1wiLHBhc3Q6XCIlcyDDsyBzaGluXCIsczpcImPDunBsYSBzb2ljaW5kXCIsbTpcIm7Ds2ltw6lhZFwiLG1tOlwiJWQgbsOzaW3DqWFkXCIsaDpcInVhaXIgYW4gY2hsb2lnXCIsaGg6XCIlZCB1YWlyIGFuIGNobG9pZ1wiLGQ6XCJsw6FcIixkZDpcIiVkIGzDoVwiLE06XCJtw61cIixNTTpcIiVkIG3DrVwiLHk6XCJibGlhaW5cIix5eTpcIiVkIGJsaWFpblwifX07cmV0dXJuIGkuZGVmYXVsdC5sb2NhbGUobixudWxsLCEwKSxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47467\n')},54855:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,i){ true?module.exports=i(__webpack_require__(27484)):0}(this,(function(a){"use strict";function i(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var n=i(a),e={name:"gd",weekdays:"Didòmhnaich_Diluain_Dimàirt_Diciadain_Diardaoin_Dihaoine_Disathairne".split("_"),months:"Am Faoilleach_An Gearran_Am Màrt_An Giblean_An Cèitean_An t-Ògmhios_An t-Iuchar_An Lùnastal_An t-Sultain_An Dàmhair_An t-Samhain_An Dùbhlachd".split("_"),weekStart:1,weekdaysShort:"Did_Dil_Dim_Dic_Dia_Dih_Dis".split("_"),monthsShort:"Faoi_Gear_Màrt_Gibl_Cèit_Ògmh_Iuch_Lùn_Sult_Dàmh_Samh_Dùbh".split("_"),weekdaysMin:"Dò_Lu_Mà_Ci_Ar_Ha_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"}};return n.default.locale(e,null,!0),e}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ4NTUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsZ2VBQWdlLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSxrTUFBa00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9nZC5qcz8zZTdmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLGkpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWkocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGkpOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX2dkPWkoYS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZcImRlZmF1bHRcImluIGE/YTp7ZGVmYXVsdDphfX12YXIgbj1pKGEpLGU9e25hbWU6XCJnZFwiLHdlZWtkYXlzOlwiRGlkw7JtaG5haWNoX0RpbHVhaW5fRGltw6BpcnRfRGljaWFkYWluX0RpYXJkYW9pbl9EaWhhb2luZV9EaXNhdGhhaXJuZVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJBbSBGYW9pbGxlYWNoX0FuIEdlYXJyYW5fQW0gTcOgcnRfQW4gR2libGVhbl9BbiBDw6hpdGVhbl9BbiB0LcOSZ21oaW9zX0FuIHQtSXVjaGFyX0FuIEzDuW5hc3RhbF9BbiB0LVN1bHRhaW5fQW4gRMOgbWhhaXJfQW4gdC1TYW1oYWluX0FuIETDuWJobGFjaGRcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIkRpZF9EaWxfRGltX0RpY19EaWFfRGloX0Rpc1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkZhb2lfR2Vhcl9Nw6BydF9HaWJsX0PDqGl0X8OSZ21oX0l1Y2hfTMO5bl9TdWx0X0TDoG1oX1NhbWhfRMO5YmhcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEw7JfTHVfTcOgX0NpX0FyX0hhX1NhXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiYW5uIGFuICVzXCIscGFzdDpcImJobyBjaGlvbm4gJXNcIixzOlwiYmVhZ2FuIGRpb2dhblwiLG06XCJtaW9uYWlkXCIsbW06XCIlZCBtaW9uYWlkZWFuXCIsaDpcInVhaXJcIixoaDpcIiVkIHVhaXJlYW5cIixkOlwibGF0aGFcIixkZDpcIiVkIGxhdGhhXCIsTTpcIm3DrG9zXCIsTU06XCIlZCBtw6xvc2FuXCIseTpcImJsaWFkaG5hXCIseXk6XCIlZCBibGlhZGhuYVwifX07cmV0dXJuIG4uZGVmYXVsdC5sb2NhbGUoZSxudWxsLCEwKSxlfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54855\n')},90229:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"gl",weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),ordinal:function(e){return e+"º"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"fai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"}};return s.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTAyMjkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNlpBQTZaLGFBQWEsVUFBVSwySUFBMkksZUFBZSxtTEFBbUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9nbC5qcz9iZGQ4Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2dsPW8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgcz1vKGUpLGQ9e25hbWU6XCJnbFwiLHdlZWtkYXlzOlwiZG9taW5nb19sdW5zX21hcnRlc19tw6lyY29yZXNfeG92ZXNfdmVucmVzX3PDoWJhZG9cIi5zcGxpdChcIl9cIiksbW9udGhzOlwieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJkb20uX2x1bi5fbWFyLl9tw6lyLl94b3YuX3Zlbi5fc8OhYi5cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHXDsS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJkb19sdV9tYV9tw6lfeG9fdmVfc8OhXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZW4gJXNcIixwYXN0OlwiZmFpICVzXCIsczpcInVucyBzZWd1bmRvc1wiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0b3NcIixoOlwidW5oYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1biBkw61hXCIsZGQ6XCIlZCBkw61hc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc2VzXCIseTpcInVuIGFub1wiLHl5OlwiJWQgYW5vc1wifX07cmV0dXJuIHMuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///90229\n')},46312:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),_={name:"gom-latn",weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var".split("_"),months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),weekStart:1,weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"}};return a.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYzMTIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBZ0osQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1pBQXNaLFNBQVMsVUFBVSx3TUFBd00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9nb20tbGF0bi5qcz9lNTljIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2dvbV9sYXRuPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgYT10KGUpLF89e25hbWU6XCJnb20tbGF0blwiLHdlZWtkYXlzOlwiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkdmFyX0JyZXN0YXJfU3VrcmFyX1Nvbid2YXJcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbi5fRmViLl9NYXJzX0Fici5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkFpX1NtX01vX0J1X0JyX1N1X1NuXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiQSBoOm1tIFt2YXp0YV1cIixMVFM6XCJBIGg6bW06c3MgW3ZhenRhXVwiLEw6XCJERC1NTS1ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdXCIsTExMTDpcImRkZGQsIE1NTU1bYWNoZWFdIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXVwiLGxsbGw6XCJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdXCJ9fTtyZXR1cm4gYS5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46312\n')},87632:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"gu",weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc2MzIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNlpBQTZaLFNBQVMsVUFBVSxtSkFBbUosZUFBZSwrS0FBK0sscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ndS5qcz8zODZiIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2d1PWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJndVwiLHdlZWtkYXlzOlwi4Kqw4Kq14Kq/4Kq14Kq+4KqwX+CquOCri+CqruCqteCqvuCqsF/gqq7gqoLgqpfgqrPgqrXgqr7gqrBf4Kqs4KuB4Kqn4KuN4Kq14Kq+4KqwX+Cql+CrgeCqsOCrgeCqteCqvuCqsF/gqrbgq4HgqpXgq43gqrDgqrXgqr7gqrBf4Kq24Kqo4Kq/4Kq14Kq+4KqwXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuCqnOCqvuCqqOCrjeCqr+CrgeCqhuCqsOCrgF/gqqvgq4fgqqzgq43gqrDgq4HgqobgqrDgq4Bf4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqv+Cqsl/gqq7gq4df4Kqc4KuC4KqoX+CqnOCrgeCqsuCqvuCqiF/gqpHgqpfgqrjgq43gqp9f4Kq44Kqq4KuN4Kqf4KuH4Kqu4KuN4Kqs4KqwX+CqkeCqleCrjeCqn+CrjeCqrOCqsF/gqqjgqrXgq4fgqq7gq43gqqzgqrBf4Kqh4Kq/4Kq44KuH4Kqu4KuN4Kqs4KqwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgqpzgqr7gqqjgq43gqq/gq4EuX+Cqq+Crh+CqrOCrjeCqsOCrgS5f4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqvy5f4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr4uX+CqkeCqly5f4Kq44Kqq4KuN4Kqf4KuHLl/gqpHgqpXgq43gqp/gq40uX+CqqOCqteCrhy5f4Kqh4Kq/4Kq44KuHLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCqsF/gqrjgq4tf4Kqu4KqCX+CqrOCrgV/gqpfgq4Ff4Kq24KuBX+CqtlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4dcIixMVFM6XCJBIGg6bW06c3Mg4Kq14Kq+4KqX4KuN4Kqv4KuHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4dcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4dcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDgqq7gqr5cIixwYXN0OlwiJXMg4Kqq4KuH4Kq54Kqy4Kq+XCIsczpcIuCqheCqruCrgeCqlSDgqqrgqrPgq4tcIixtOlwi4KqP4KqVIOCqruCqv+CqqOCqv+Cqn1wiLG1tOlwiJWQg4Kqu4Kq/4Kqo4Kq/4KqfXCIsaDpcIuCqj+CqlSDgqpXgqrLgqr7gqpVcIixoaDpcIiVkIOCqleCqsuCqvuCqlVwiLGQ6XCLgqo/gqpUg4Kqm4Kq/4Kq14Kq4XCIsZGQ6XCIlZCDgqqbgqr/gqrXgqrhcIixNOlwi4KqP4KqVIOCqruCqueCqv+CqqOCri1wiLE1NOlwiJWQg4Kqu4Kq54Kq/4Kqo4KuLXCIseTpcIuCqj+CqlSDgqrXgqrDgq43gqrdcIix5eTpcIiVkIOCqteCqsOCrjeCqt1wifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///87632\n')},45418:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(Y,M){ true?module.exports=M(__webpack_require__(27484)):0}(this,(function(Y){"use strict";function M(Y){return Y&&"object"==typeof Y&&"default"in Y?Y:{default:Y}}var d=M(Y),e={s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:"%d שעות",hh2:"שעתיים",d:"יום",dd:"%d ימים",dd2:"יומיים",M:"חודש",MM:"%d חודשים",MM2:"חודשיים",y:"שנה",yy:"%d שנים",yy2:"שנתיים"};function _(Y,M,d){return(e[d+(2===Y?"2":"")]||e[d]).replace("%d",Y)}var l={name:"he",weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳".split("_"),months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ".split("_"),relativeTime:{future:"בעוד %s",past:"לפני %s",s:_,m:_,mm:_,h:_,hh:_,d:_,dd:_,M:_,MM:_,y:_,yy:_},ordinal:function(Y){return Y},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"}};return d.default.locale(l,null,!0),l}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU0MTguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsK0xBQStMLGtCQUFrQixrREFBa0QsT0FBTyxxVkFBcVYsaUZBQWlGLHFCQUFxQixTQUFTLFNBQVMsMk1BQTJNLFVBQVUsNk1BQTZNLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvaGUuanM/Y2UwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oWSxNKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1NKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxNKTooWT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOll8fHNlbGYpLmRheWpzX2xvY2FsZV9oZT1NKFkuZGF5anMpfSh0aGlzLChmdW5jdGlvbihZKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBNKFkpe3JldHVybiBZJiZcIm9iamVjdFwiPT10eXBlb2YgWSYmXCJkZWZhdWx0XCJpbiBZP1k6e2RlZmF1bHQ6WX19dmFyIGQ9TShZKSxlPXtzOlwi157Xodek16gg16nXoNeZ15XXqlwiLHNzOlwiJWQg16nXoNeZ15XXqlwiLG06XCLXk9en15RcIixtbTpcIiVkINeT16fXldeqXCIsaDpcItep16LXlFwiLGhoOlwiJWQg16nXoteV16pcIixoaDI6XCLXqdei16rXmdeZ151cIixkOlwi15nXldedXCIsZGQ6XCIlZCDXmdee15nXnVwiLGRkMjpcIteZ15XXnteZ15nXnVwiLE06XCLXl9eV15PXqVwiLE1NOlwiJWQg15fXldeT16nXmdedXCIsTU0yOlwi15fXldeT16nXmdeZ151cIix5Olwi16nXoNeUXCIseXk6XCIlZCDXqdeg15nXnVwiLHl5MjpcItep16DXqteZ15nXnVwifTtmdW5jdGlvbiBfKFksTSxkKXtyZXR1cm4oZVtkKygyPT09WT9cIjJcIjpcIlwiKV18fGVbZF0pLnJlcGxhY2UoXCIlZFwiLFkpfXZhciBsPXtuYW1lOlwiaGVcIix3ZWVrZGF5czpcIteo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi15DXs1/XkdezX9eS17Nf15PXs1/XlNezX9eV17Nf16nXs1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIteQ17Nf15HXs1/XktezX9eT17Nf15TXs1/XlV/XqdezXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIteZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi15nXoNeVX9ek15HXqF/Xnteo16Vf15DXpNeoX9ee15DXmV/XmdeV16Bf15nXldecX9eQ15XXkl/Xodek15hf15DXldenX9eg15XXkV/Xk9em155cIi5zcGxpdChcIl9cIikscmVsYXRpdmVUaW1lOntmdXR1cmU6XCLXkdei15XXkyAlc1wiLHBhc3Q6XCLXnNek16DXmSAlc1wiLHM6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sb3JkaW5hbDpmdW5jdGlvbihZKXtyZXR1cm4gWX0sZm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBb15FdTU1NTSBZWVlZXCIsTExMOlwiRCBb15FdTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbVwiLGw6XCJEL00vWVlZWVwiLGxsOlwiRCBNTU0gWVlZWVwiLGxsbDpcIkQgTU1NIFlZWVkgSEg6bW1cIixsbGxsOlwiZGRkLCBEIE1NTSBZWVlZIEhIOm1tXCJ9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIFvXkV1NTU1NIFlZWVlcIixMTEw6XCJEIFvXkV1NTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBb15FdTU1NTSBZWVlZIEhIOm1tXCIsbDpcIkQvTS9ZWVlZXCIsbGw6XCJEIE1NTSBZWVlZXCIsbGxsOlwiRCBNTU0gWVlZWSBISDptbVwiLGxsbGw6XCJkZGQsIEQgTU1NIFlZWVkgSEg6bW1cIn19O3JldHVybiBkLmRlZmF1bHQubG9jYWxlKGwsbnVsbCwhMCksbH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45418\n')},77573:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"hi",weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1NzMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb1lBQW9ZLFNBQVMsVUFBVSx1SUFBdUksZUFBZSw4S0FBOEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9oaS5qcz8yOTUyIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2hpPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJoaVwiLHdlZWtkYXlzOlwi4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLLgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuCknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgpJzgpKguX+Ckq+CkvOCksC5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliC5f4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLIuX+CkheCkly5f4KS44KS/4KSkLl/gpIXgpJXgpY3gpJ/gpYIuX+CkqOCktS5f4KSm4KS/4KS4LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+CktlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkEgaDptbSDgpKzgpJzgpYdcIixMVFM6XCJBIGg6bW06c3Mg4KSs4KSc4KWHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYdcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYdcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDgpK7gpYfgpIJcIixwYXN0OlwiJXMg4KSq4KS54KSy4KWHXCIsczpcIuCkleClgeCkmyDgpLngpYAg4KSV4KWN4KS34KSjXCIsbTpcIuCkj+CklSDgpK7gpL/gpKjgpJ9cIixtbTpcIiVkIOCkruCkv+CkqOCkn1wiLGg6XCLgpI/gpJUg4KSY4KSC4KSf4KS+XCIsaGg6XCIlZCDgpJjgpILgpJ/gpYdcIixkOlwi4KSP4KSVIOCkpuCkv+CkqFwiLGRkOlwiJWQg4KSm4KS/4KSoXCIsTTpcIuCkj+CklSDgpK7gpLngpYDgpKjgpYdcIixNTTpcIiVkIOCkruCkueClgOCkqOClh1wiLHk6XCLgpI/gpJUg4KS14KSw4KWN4KS3XCIseXk6XCIlZCDgpLXgpLDgpY3gpLdcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///77573\n')},96257:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),s="siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),n="siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),_=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/,o=function(e,a){return _.test(a)?s[e.month()]:n[e.month()]};o.s=n,o.f=s;var i={name:"hr",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),months:o,monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},relativeTime:{future:"za %s",past:"prije %s",s:"sekunda",m:"minuta",mm:"%d minuta",h:"sat",hh:"%d sati",d:"dan",dd:"%d dana",M:"mjesec",MM:"%d mjeseci",y:"godina",yy:"%d godine"},ordinal:function(e){return e+"."}};return t.default.locale(i,null,!0),i}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYyNTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLDBSQUEwUiw0Q0FBNEMsWUFBWSxPQUFPLDBUQUEwVCxnSEFBZ0gsZUFBZSxvS0FBb0sscUJBQXFCLGVBQWUscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9oci5qcz9kYjkxIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2hyPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpLHM9XCJzaWplxI1uamFfdmVsamHEjWVfb8W+dWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhXCIuc3BsaXQoXCJfXCIpLG49XCJzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWNcIi5zcGxpdChcIl9cIiksXz0vRFtvRF0/KFxcW1teW1xcXV0qXFxdfFxccykrTU1NTT8vLG89ZnVuY3Rpb24oZSxhKXtyZXR1cm4gXy50ZXN0KGEpP3NbZS5tb250aCgpXTpuW2UubW9udGgoKV19O28ucz1uLG8uZj1zO3ZhciBpPXtuYW1lOlwiaHJcIix3ZWVrZGF5czpcIm5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIm5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibmVfcG9fdXRfc3JfxI1lX3BlX3N1XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpvLG1vbnRoc1Nob3J0Olwic2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLlwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiemEgJXNcIixwYXN0OlwicHJpamUgJXNcIixzOlwic2VrdW5kYVwiLG06XCJtaW51dGFcIixtbTpcIiVkIG1pbnV0YVwiLGg6XCJzYXRcIixoaDpcIiVkIHNhdGlcIixkOlwiZGFuXCIsZGQ6XCIlZCBkYW5hXCIsTTpcIm1qZXNlY1wiLE1NOlwiJWQgbWplc2VjaVwiLHk6XCJnb2RpbmFcIix5eTpcIiVkIGdvZGluZVwifSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlK1wiLlwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoaSxudWxsLCEwKSxpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///96257\n')},98889:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=n(e),a={name:"ht",weekdays:"dimanch_lendi_madi_mèkredi_jedi_vandredi_samdi".split("_"),months:"janvye_fevriye_mas_avril_me_jen_jiyè_out_septanm_oktòb_novanm_desanm".split("_"),weekdaysShort:"dim._len._mad._mèk._jed._van._sam.".split("_"),monthsShort:"jan._fev._mas_avr._me_jen_jiyè._out_sept._okt._nov._des.".split("_"),weekdaysMin:"di_le_ma_mè_je_va_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"nan %s",past:"sa gen %s",s:"kèk segond",m:"yon minit",mm:"%d minit",h:"inèdtan",hh:"%d zè",d:"yon jou",dd:"%d jou",M:"yon mwa",MM:"%d mwa",y:"yon ane",yy:"%d ane"}};return d.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTg4ODkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMFhBQTBYLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSw2S0FBNksscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9odC5qcz9jNzM5Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2h0PW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgZD1uKGUpLGE9e25hbWU6XCJodFwiLHdlZWtkYXlzOlwiZGltYW5jaF9sZW5kaV9tYWRpX23DqGtyZWRpX2plZGlfdmFuZHJlZGlfc2FtZGlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFudnllX2ZldnJpeWVfbWFzX2F2cmlsX21lX2plbl9qaXnDqF9vdXRfc2VwdGFubV9va3TDsmJfbm92YW5tX2Rlc2FubVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZGltLl9sZW4uX21hZC5fbcOoay5famVkLl92YW4uX3NhbS5cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2Zldi5fbWFzX2F2ci5fbWVfamVuX2ppecOoLl9vdXRfc2VwdC5fb2t0Ll9ub3YuX2Rlcy5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJkaV9sZV9tYV9tw6hfamVfdmFfc2FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm5hbiAlc1wiLHBhc3Q6XCJzYSBnZW4gJXNcIixzOlwia8OoayBzZWdvbmRcIixtOlwieW9uIG1pbml0XCIsbW06XCIlZCBtaW5pdFwiLGg6XCJpbsOoZHRhblwiLGhoOlwiJWQgesOoXCIsZDpcInlvbiBqb3VcIixkZDpcIiVkIGpvdVwiLE06XCJ5b24gbXdhXCIsTU06XCIlZCBtd2FcIix5OlwieW9uIGFuZVwiLHl5OlwiJWQgYW5lXCJ9fTtyZXR1cm4gZC5kZWZhdWx0LmxvY2FsZShhLG51bGwsITApLGF9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///98889\n')},68562:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),r={name:"hu",weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s múlva",past:"%s",s:function(e,n,t,r){return"néhány másodperc"+(r||n?"":"e")},m:function(e,n,t,r){return"egy perc"+(r||n?"":"e")},mm:function(e,n,t,r){return e+" perc"+(r||n?"":"e")},h:function(e,n,t,r){return"egy "+(r||n?"óra":"órája")},hh:function(e,n,t,r){return e+" "+(r||n?"óra":"órája")},d:function(e,n,t,r){return"egy "+(r||n?"nap":"napja")},dd:function(e,n,t,r){return e+" "+(r||n?"nap":"napja")},M:function(e,n,t,r){return"egy "+(r||n?"hónap":"hónapja")},MM:function(e,n,t,r){return e+" "+(r||n?"hónap":"hónapja")},y:function(e,n,t,r){return"egy "+(r||n?"év":"éve")},yy:function(e,n,t,r){return e+" "+(r||n?"év":"éve")}},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return t.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg1NjIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsK1lBQStZLGFBQWEsMkJBQTJCLGdEQUFnRCx1Q0FBdUMscUJBQXFCLCtCQUErQixzQkFBc0IsK0JBQStCLHFCQUFxQixrQ0FBa0Msc0JBQXNCLGtDQUFrQyxxQkFBcUIsa0NBQWtDLHNCQUFzQixrQ0FBa0MscUJBQXFCLHNDQUFzQyxzQkFBc0Isc0NBQXNDLHFCQUFxQiwrQkFBK0Isc0JBQXNCLGdDQUFnQyxVQUFVLHNIQUFzSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2h1LmpzPzBhNDEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbil7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9bihyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sbik6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfaHU9bihlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PW4oZSkscj17bmFtZTpcImh1XCIsd2Vla2RheXM6XCJ2YXPDoXJuYXBfaMOpdGbFkV9rZWRkX3N6ZXJkYV9jc8O8dMO2cnTDtmtfcMOpbnRla19zem9tYmF0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJ2YXNfaMOpdF9rZWRkX3N6ZV9jc8O8dF9ww6luX3N6b1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInZfaF9rX3N6ZV9jc19wX3N6b1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW51w6FyX2ZlYnJ1w6FyX23DoXJjaXVzX8OhcHJpbGlzX23DoWp1c19qw7puaXVzX2rDumxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX23DoXJjX8OhcHJfbcOhal9qw7puX2rDumxfYXVnX3N6ZXB0X29rdF9ub3ZfZGVjXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LHdlZWtTdGFydDoxLHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgbcO6bHZhXCIscGFzdDpcIiVzXCIsczpmdW5jdGlvbihlLG4sdCxyKXtyZXR1cm5cIm7DqWjDoW55IG3DoXNvZHBlcmNcIisocnx8bj9cIlwiOlwiZVwiKX0sbTpmdW5jdGlvbihlLG4sdCxyKXtyZXR1cm5cImVneSBwZXJjXCIrKHJ8fG4/XCJcIjpcImVcIil9LG1tOmZ1bmN0aW9uKGUsbix0LHIpe3JldHVybiBlK1wiIHBlcmNcIisocnx8bj9cIlwiOlwiZVwiKX0saDpmdW5jdGlvbihlLG4sdCxyKXtyZXR1cm5cImVneSBcIisocnx8bj9cIsOzcmFcIjpcIsOzcsOhamFcIil9LGhoOmZ1bmN0aW9uKGUsbix0LHIpe3JldHVybiBlK1wiIFwiKyhyfHxuP1wiw7NyYVwiOlwiw7Nyw6FqYVwiKX0sZDpmdW5jdGlvbihlLG4sdCxyKXtyZXR1cm5cImVneSBcIisocnx8bj9cIm5hcFwiOlwibmFwamFcIil9LGRkOmZ1bmN0aW9uKGUsbix0LHIpe3JldHVybiBlK1wiIFwiKyhyfHxuP1wibmFwXCI6XCJuYXBqYVwiKX0sTTpmdW5jdGlvbihlLG4sdCxyKXtyZXR1cm5cImVneSBcIisocnx8bj9cImjDs25hcFwiOlwiaMOzbmFwamFcIil9LE1NOmZ1bmN0aW9uKGUsbix0LHIpe3JldHVybiBlK1wiIFwiKyhyfHxuP1wiaMOzbmFwXCI6XCJow7NuYXBqYVwiKX0seTpmdW5jdGlvbihlLG4sdCxyKXtyZXR1cm5cImVneSBcIisocnx8bj9cIsOpdlwiOlwiw6l2ZVwiKX0seXk6ZnVuY3Rpb24oZSxuLHQscil7cmV0dXJuIGUrXCIgXCIrKHJ8fG4/XCLDqXZcIjpcIsOpdmVcIil9fSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIllZWVkuTU0uREQuXCIsTEw6XCJZWVlZLiBNTU1NIEQuXCIsTExMOlwiWVlZWS4gTU1NTSBELiBIOm1tXCIsTExMTDpcIllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUocixudWxsLCEwKSxyfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68562\n')},38242:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"hy-am",weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),months:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),weekStart:1,weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzgyNDIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc2JBQXNiLFNBQVMsVUFBVSw0SEFBNEgsZUFBZSwrSkFBK0oscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9oeS1hbS5qcz84YTdmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2h5X2FtPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJoeS1hbVwiLHdlZWtkYXlzOlwi1a/Vq9aA1aHVr9WrX9Wl1oDVr9W41oLVt9Wh1aLVqdWrX9Wl1oDVpdaE1bfVodWi1anVq1/VudW41oDVpdaE1bfVodWi1anVq1/VsNWr1bbVo9W31aHVotWp1atf1bjWgtaA1aLVodWpX9W31aHVotWh1alcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVq1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0Olwi1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1alcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLVsNW21b5f1oPVv9aAX9W01oDVv1/VodW61oBf1bTVtdW9X9Ww1bbVvV/VsNWs1b1f1oXVo9W9X9W91brVv1/VsNWv1b9f1bbVtNWiX9Wk1a/Vv1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItWv1oDVr1/VpdaA1a9f1aXWgNaEX9W51oDWhF/VsNW21aNf1bjWgtaA1aJf1bfVotWpXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWSDVqS5cIixMTEw6XCJEIE1NTU0gWVlZWSDVqS4sIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDVsNWl1b/VuFwiLHBhc3Q6XCIlcyDVodW81aHVu1wiLHM6XCLVtNWrINaE1aHVttWrINW+1aHVtdaA1a/VtdWh1bZcIixtOlwi1oDVuNW61aVcIixtbTpcIiVkINaA1bjVutWlXCIsaDpcItWq1aHVtFwiLGhoOlwiJWQg1arVodW0XCIsZDpcItaF1oBcIixkZDpcIiVkINaF1oBcIixNOlwi1aHVtNWr1b1cIixNTTpcIiVkINWh1bTVq9W9XCIseTpcItW/1aHWgNWrXCIseXk6XCIlZCDVv9Wh1oDVq1wifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///38242\n')},83783:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM3ODMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMseVhBQXlYLGlJQUFpSSxlQUFlLHFMQUFxTCxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2lkLmpzPzk1OWUiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsYSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9YShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sYSk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfaWQ9YShlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PWEoZSksXz17bmFtZTpcImlkXCIsd2Vla2RheXM6XCJNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHVcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIk1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiTWdfU25fU2xfUmJfS21fSm1fU2JcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZGFsYW0gJXNcIixwYXN0OlwiJXMgeWFuZyBsYWx1XCIsczpcImJlYmVyYXBhIGRldGlrXCIsbTpcInNlbWVuaXRcIixtbTpcIiVkIG1lbml0XCIsaDpcInNlamFtXCIsaGg6XCIlZCBqYW1cIixkOlwic2VoYXJpXCIsZGQ6XCIlZCBoYXJpXCIsTTpcInNlYnVsYW5cIixNTTpcIiVkIGJ1bGFuXCIseTpcInNldGFodW5cIix5eTpcIiVkIHRhaHVuXCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///83783\n')},98980:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(u,r){ true?module.exports=r(__webpack_require__(27484)):0}(this,(function(u){"use strict";function r(u){return u&&"object"==typeof u&&"default"in u?u:{default:u}}var n=r(u),e={s:["nokkrar sekúndur","nokkrar sekúndur","nokkrum sekúndum"],m:["mínúta","mínútu","mínútu"],mm:["mínútur","mínútur","mínútum"],h:["klukkustund","klukkustund","klukkustund"],hh:["klukkustundir","klukkustundir","klukkustundum"],d:["dagur","dag","degi"],dd:["dagar","daga","dögum"],M:["mánuður","mánuð","mánuði"],MM:["mánuðir","mánuði","mánuðum"],y:["ár","ár","ári"],yy:["ár","ár","árum"]};function t(u,r,n,t){var a=function(u,r,n,t){var a=t?0:n?1:2,d=2===u.length&&r%10==1?u[0]:u,m=e[d][a];return 1===u.length?m:"%d "+m}(n,u,t,r);return a.replace("%d",u)}var a={name:"is",weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),ordinal:function(u){return u},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t}};return n.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTg5ODAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsbVlBQW1ZLG9CQUFvQix3QkFBd0IseURBQXlELDhCQUE4QixVQUFVLHlCQUF5QixPQUFPLHFhQUFxYSxTQUFTLFVBQVUsNEhBQTRILGVBQWUsMkZBQTJGLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvaXMuanM/ZGI2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24odSxyKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1yKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxyKToodT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnV8fHNlbGYpLmRheWpzX2xvY2FsZV9pcz1yKHUuZGF5anMpfSh0aGlzLChmdW5jdGlvbih1KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHUpe3JldHVybiB1JiZcIm9iamVjdFwiPT10eXBlb2YgdSYmXCJkZWZhdWx0XCJpbiB1P3U6e2RlZmF1bHQ6dX19dmFyIG49cih1KSxlPXtzOltcIm5va2tyYXIgc2Vrw7puZHVyXCIsXCJub2trcmFyIHNla8O6bmR1clwiLFwibm9ra3J1bSBzZWvDum5kdW1cIl0sbTpbXCJtw61uw7p0YVwiLFwibcOtbsO6dHVcIixcIm3DrW7DunR1XCJdLG1tOltcIm3DrW7DunR1clwiLFwibcOtbsO6dHVyXCIsXCJtw61uw7p0dW1cIl0saDpbXCJrbHVra3VzdHVuZFwiLFwia2x1a2t1c3R1bmRcIixcImtsdWtrdXN0dW5kXCJdLGhoOltcImtsdWtrdXN0dW5kaXJcIixcImtsdWtrdXN0dW5kaXJcIixcImtsdWtrdXN0dW5kdW1cIl0sZDpbXCJkYWd1clwiLFwiZGFnXCIsXCJkZWdpXCJdLGRkOltcImRhZ2FyXCIsXCJkYWdhXCIsXCJkw7ZndW1cIl0sTTpbXCJtw6FudcOwdXJcIixcIm3DoW51w7BcIixcIm3DoW51w7BpXCJdLE1NOltcIm3DoW51w7BpclwiLFwibcOhbnXDsGlcIixcIm3DoW51w7B1bVwiXSx5OltcIsOhclwiLFwiw6FyXCIsXCLDoXJpXCJdLHl5OltcIsOhclwiLFwiw6FyXCIsXCLDoXJ1bVwiXX07ZnVuY3Rpb24gdCh1LHIsbix0KXt2YXIgYT1mdW5jdGlvbih1LHIsbix0KXt2YXIgYT10PzA6bj8xOjIsZD0yPT09dS5sZW5ndGgmJnIlMTA9PTE/dVswXTp1LG09ZVtkXVthXTtyZXR1cm4gMT09PXUubGVuZ3RoP206XCIlZCBcIittfShuLHUsdCxyKTtyZXR1cm4gYS5yZXBsYWNlKFwiJWRcIix1KX12YXIgYT17bmFtZTpcImlzXCIsd2Vla2RheXM6XCJzdW5udWRhZ3VyX23DoW51ZGFndXJfw75yacOwanVkYWd1cl9tacOwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2bDtnN0dWRhZ3VyX2xhdWdhcmRhZ3VyXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbsO6YXJfZmVicsO6YXJfbWFyc19hcHLDrWxfbWHDrV9qw7puw61fasO6bMOtX8OhZ8O6c3Rfc2VwdGVtYmVyX29rdMOzYmVyX27Ds3ZlbWJlcl9kZXNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0Olwic3VuX23DoW5fw75yaV9tacOwX2ZpbV9mw7ZzX2xhdVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbWFyX2Fwcl9tYcOtX2rDum5fasO6bF/DoWfDul9zZXBfb2t0X27Ds3ZfZGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTcOhX8Oecl9NaV9GaV9Gw7ZfTGFcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbih1KXtyZXR1cm4gdX0sZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgW2tsLl0gSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVmdGlyICVzXCIscGFzdDpcImZ5cmlyICVzIHPDrcOwYW5cIixzOnQsbTp0LG1tOnQsaDp0LGhoOnQsZDp0LGRkOnQsTTp0LE1NOnQseTp0LHl5OnR9fTtyZXR1cm4gbi5kZWZhdWx0LmxvY2FsZShhLG51bGwsITApLGF9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///98980\n')},83706:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(e),t={name:"it-ch",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un\'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"}};return n.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODM3MDYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNFpBQTRaLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSxxTEFBcUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9pdC1jaC5qcz83NzNjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2l0X2NoPW8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgbj1vKGUpLHQ9e25hbWU6XCJpdC1jaFwiLHdlZWtkYXlzOlwiZG9tZW5pY2FfbHVuZWTDrF9tYXJ0ZWTDrF9tZXJjb2xlZMOsX2dpb3ZlZMOsX3ZlbmVyZMOsX3NhYmF0b1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmVcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbWVfZ2lfdmVfc2FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInRyYSAlc1wiLHBhc3Q6XCIlcyBmYVwiLHM6XCJhbGN1bmkgc2Vjb25kaVwiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0aVwiLGg6XCJ1bidvcmFcIixoaDpcIiVkIG9yZVwiLGQ6XCJ1biBnaW9ybm9cIixkZDpcIiVkIGdpb3JuaVwiLE06XCJ1biBtZXNlXCIsTU06XCIlZCBtZXNpXCIseTpcInVuIGFubm9cIix5eTpcIiVkIGFubmlcIn19O3JldHVybiBuLmRlZmF1bHQubG9jYWxlKHQsbnVsbCwhMCksdH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83706\n')},15551:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=o(e),n={name:"it",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un\' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"º"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU1NTEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsOFlBQThZLGdIQUFnSCxlQUFlLHFMQUFxTCxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2l0LmpzPzc2ZWYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9byhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sbyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfaXQ9byhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PW8oZSksbj17bmFtZTpcIml0XCIsd2Vla2RheXM6XCJkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJkb19sdV9tYV9tZV9naV92ZV9zYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmVcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsbW9udGhzU2hvcnQ6XCJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwidHJhICVzXCIscGFzdDpcIiVzIGZhXCIsczpcInF1YWxjaGUgc2Vjb25kb1wiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0aVwiLGg6XCJ1bicgb3JhXCIsaGg6XCIlZCBvcmVcIixkOlwidW4gZ2lvcm5vXCIsZGQ6XCIlZCBnaW9ybmlcIixNOlwidW4gbWVzZVwiLE1NOlwiJWQgbWVzaVwiLHk6XCJ1biBhbm5vXCIseXk6XCIlZCBhbm5pXCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUobixudWxsLCEwKSxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///15551\n')},76831:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ja",weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e){return e+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiem:function(e){return e<12?"午前":"午後"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY4MzEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMlJBQTJSLGFBQWEsVUFBVSwwTEFBMEwsc0JBQXNCLHNCQUFzQixlQUFlLHFIQUFxSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2phLmpzPzIxMDYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfamE9XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcImphXCIsd2Vla2RheXM6XCLml6Xmm5zml6Vf5pyI5puc5pelX+eBq+abnOaXpV/msLTmm5zml6Vf5pyo5puc5pelX+mHkeabnOaXpV/lnJ/mm5zml6VcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuaXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcn1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuaXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcn1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLml6VcIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVkvTU0vRERcIixMTDpcIllZWVnlubRN5pyIROaXpVwiLExMTDpcIllZWVnlubRN5pyIROaXpSBISDptbVwiLExMTEw6XCJZWVlZ5bm0TeaciETml6UgZGRkZCBISDptbVwiLGw6XCJZWVlZL01NL0REXCIsbGw6XCJZWVlZ5bm0TeaciETml6VcIixsbGw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixsbGxsOlwiWVlZWeW5tE3mnIhE5pelKGRkZCkgSEg6bW1cIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MTI/XCLljYjliY1cIjpcIuWNiOW+jFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVz5b6MXCIscGFzdDpcIiVz5YmNXCIsczpcIuaVsOenklwiLG06XCIx5YiGXCIsbW06XCIlZOWIhlwiLGg6XCIx5pmC6ZaTXCIsaGg6XCIlZOaZgumWk1wiLGQ6XCIx5pelXCIsZGQ6XCIlZOaXpVwiLE06XCIx44O25pyIXCIsTU06XCIlZOODtuaciFwiLHk6XCIx5bm0XCIseXk6XCIlZOW5tFwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76831\n')},42641:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),_={name:"jv",weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),weekStart:1,weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI2NDEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1lBQXNZLFNBQVMsVUFBVSxpSUFBaUksZUFBZSx1TkFBdU4scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9qdi5qcz84MjZkIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2p2PW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1uKGUpLF89e25hbWU6XCJqdlwiLHdlZWtkYXlzOlwiTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHVcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXJcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIk1pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiTWdfU25fU2xfUmJfS21fSm1fU3BcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwid29udGVuIGluZyAlc1wiLHBhc3Q6XCIlcyBpbmdrYW5nIGtlcGVuZ2tlclwiLHM6XCJzYXdldGF3aXMgZGV0aWtcIixtOlwic2V0dW5nZ2FsIG1lbml0XCIsbW06XCIlZCBtZW5pdFwiLGg6XCJzZXR1bmdnYWwgamFtXCIsaGg6XCIlZCBqYW1cIixkOlwic2VkaW50ZW5cIixkZDpcIiVkIGRpbnRlblwiLE06XCJzZXd1bGFuXCIsTU06XCIlZCB3dWxhblwiLHk6XCJzZXRhdW5cIix5eTpcIiVkIHRhdW5cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKF8sbnVsbCwhMCksX30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42641\n')},46622:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ka",weekdays:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s შემდეგ",past:"%s წინ",s:"წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათის",d:"დღეს",dd:"%d დღის განმავლობაში",M:"თვის",MM:"%d თვის",y:"წელი",yy:"%d წლის"},ordinal:function(_){return _}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY2MjIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1pBQXdaLHFIQUFxSCxlQUFlLHdLQUF3SyxxQkFBcUIsV0FBVyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2thLmpzPzQ2MzYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfa2E9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImthXCIsd2Vla2RheXM6XCLhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5hcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuGDmeGDleGDmF/hg53hg6Dhg6hf4YOh4YOQ4YObX+GDneGDl+GDrl/hg67hg6Phg5df4YOe4YOQ4YOgX+GDqOGDkOGDkVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuGDmeGDlV/hg53hg6Bf4YOh4YOQX+GDneGDl1/hg67hg6Nf4YOe4YOQX+GDqOGDkFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hf4YOX4YOU4YOR4YOU4YOg4YOV4YOQ4YOa4YOYX+GDm+GDkOGDoOGDouGDmF/hg5Dhg57hg6Dhg5jhg5rhg5hf4YOb4YOQ4YOY4YOh4YOYX+GDmOGDleGDnOGDmOGDoeGDmF/hg5jhg5Xhg5rhg5jhg6Hhg5hf4YOQ4YOS4YOV4YOY4YOh4YOi4YOdX+GDoeGDlOGDpeGDouGDlOGDm+GDkeGDlOGDoOGDmF/hg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hf4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYX+GDk+GDlOGDmeGDlOGDm+GDkeGDlOGDoOGDmFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuGDmOGDkOGDnF/hg5fhg5Thg5Ff4YOb4YOQ4YOgX+GDkOGDnuGDoF/hg5vhg5Dhg5hf4YOY4YOV4YOcX+GDmOGDleGDml/hg5Dhg5Lhg5Vf4YOh4YOU4YOlX+GDneGDpeGDol/hg5zhg53hg5Rf4YOT4YOU4YOZXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLGZvcm1hdHM6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOGDqOGDlOGDm+GDk+GDlOGDklwiLHBhc3Q6XCIlcyDhg6zhg5jhg5xcIixzOlwi4YOs4YOQ4YOb4YOYXCIsbTpcIuGDrOGDo+GDl+GDmFwiLG1tOlwiJWQg4YOs4YOj4YOX4YOYXCIsaDpcIuGDoeGDkOGDkOGDl+GDmFwiLGhoOlwiJWQg4YOh4YOQ4YOQ4YOX4YOY4YOhXCIsZDpcIuGDk+GDpuGDlOGDoVwiLGRkOlwiJWQg4YOT4YOm4YOY4YOhIOGDkuGDkOGDnOGDm+GDkOGDleGDmuGDneGDkeGDkOGDqOGDmFwiLE06XCLhg5fhg5Xhg5jhg6FcIixNTTpcIiVkIOGDl+GDleGDmOGDoVwiLHk6XCLhg6zhg5Thg5rhg5hcIix5eTpcIiVkIOGDrOGDmuGDmOGDoVwifSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46622\n')},32921:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"kk",weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekStart:1,relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzI5MjEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdVlBQXVZLG9MQUFvTCxxQkFBcUIsU0FBUyxVQUFVLG1IQUFtSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2trLmpzPzY3NGMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfa2s9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcImtrXCIsd2Vla2RheXM6XCLQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRllwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0LbQtdC6X9C00q/QuV/RgdC10Llf0YHTmdGAX9Cx0LXQuV/QttKx0Lxf0YHQtdC9XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0LbQul/QtNC5X9GB0Llf0YHRgF/QsdC5X9C20Lxf0YHQvVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLSm9Cw0qPRgtCw0YBf0LDSm9C/0LDQvV/QvdCw0YPRgNGL0Ldf0YHTmdGD0ZbRgF/QvNCw0LzRi9GAX9C80LDRg9GB0YvQvF/RiNGW0LvQtNC1X9GC0LDQvNGL0Ldf0pvRi9GA0LrSr9C50LXQul/Sm9Cw0LfQsNC9X9Kb0LDRgNCw0YjQsF/QttC10LvRgtC+0pvRgdCw0L1cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLSm9Cw0qNf0LDSm9C/X9C90LDRg1/RgdOZ0YNf0LzQsNC8X9C80LDRg1/RiNGW0Ltf0YLQsNC8X9Kb0YvRgF/Sm9Cw0Ldf0pvQsNGAX9C20LXQu1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINGW0YjRltC90LTQtVwiLHBhc3Q6XCIlcyDQsdKx0YDRi9C9XCIsczpcItCx0ZbRgNC90LXRiNC1INGB0LXQutGD0L3QtFwiLG06XCLQsdGW0YAg0LzQuNC90YPRglwiLG1tOlwiJWQg0LzQuNC90YPRglwiLGg6XCLQsdGW0YAg0YHQsNKT0LDRglwiLGhoOlwiJWQg0YHQsNKT0LDRglwiLGQ6XCLQsdGW0YAg0LrSr9C9XCIsZGQ6XCIlZCDQutKv0L1cIixNOlwi0LHRltGAINCw0LlcIixNTTpcIiVkINCw0LlcIix5Olwi0LHRltGAINC20YvQu1wiLHl5OlwiJWQg0LbRi9C7XCJ9LG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///32921\n')},45567:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"km",weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekStart:1,weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1NjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa1lBQWtZLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSw0S0FBNEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9rbS5qcz8zZTRlIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2ttPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJrbVwiLHdlZWtkYXlzOlwi4Z6i4Z624Z6R4Z634Z6P4Z+S4Z6ZX+GeheGfkOGek+GfkuGekV/hnqLhnoThn5LhnoLhnrbhnppf4Z6W4Z674Z6SX+GeluGfkuGemuGeoOGen+GfkuGelOGej+Get+GfjV/hnp/hnrvhnoDhn5Lhnppf4Z6f4Z+F4Z6a4Z+NXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuGemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68XCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuGeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Gen1wiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVz4Z6R4Z+A4Z6PXCIscGFzdDpcIiVz4Z6Y4Z674Z6TXCIsczpcIuGelOGfieGeu+Gek+GfkuGemOGetuGek+GenOGet+Gek+GetuGekeGeuFwiLG06XCLhnpjhnr3hnpnhnpPhnrbhnpHhnrhcIixtbTpcIiVkIOGek+GetuGekeGeuFwiLGg6XCLhnpjhnr3hnpnhnpjhn4nhn4ThnoRcIixoaDpcIiVkIOGemOGfieGfhOGehFwiLGQ6XCLhnpjhnr3hnpnhnpDhn5LhnoThn4NcIixkZDpcIiVkIOGekOGfkuGehOGfg1wiLE06XCLhnpjhnr3hnpnhnoHhn4JcIixNTTpcIiVkIOGegeGfglwiLHk6XCLhnpjhnr3hnpnhnobhn5LhnpPhnrbhn4ZcIix5eTpcIiVkIOGehuGfkuGek+GetuGfhlwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45567\n')},21113:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"kn",weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExMTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMGFBQTBhLFNBQVMsVUFBVSx1SEFBdUgsZUFBZSxnTUFBZ00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9rbi5qcz9kMmRlIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2tuPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJrblwiLHdlZWtkYXlzOlwi4LKt4LK+4LKo4LOB4LK14LK+4LKwX+CyuOCzhuCzguCzleCyruCyteCyvuCysF/gsq7gsoLgspfgsrPgsrXgsr7gsrBf4LKs4LOB4LKn4LK14LK+4LKwX+Cyl+CzgeCysOCzgeCyteCyvuCysF/gsrbgs4HgspXgs43gsrDgsrXgsr7gsrBf4LK24LKo4LK/4LK14LK+4LKwXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuCynOCyqOCyteCysOCyv1/gsqvgs4bgsqzgs43gsrDgsrXgsrDgsr9f4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKC4LKs4LKw4LONX+CyheCyleCzjeCyn+CzhuCzguCzleCyrOCysOCzjV/gsqjgsrXgs4bgsoLgsqzgsrDgs41f4LKh4LK/4LK44LOG4LKC4LKs4LKw4LONXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgspzgsqhf4LKr4LOG4LKs4LON4LKwX+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCygl/gsoXgspXgs43gsp/gs4bgs4Lgs5Vf4LKo4LK14LOG4LKCX+CyoeCyv+CyuOCzhuCyglwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+CytlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkEgaDptbVwiLExUUzpcIkEgaDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZLCBBIGg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOCyqOCyguCypOCysFwiLHBhc3Q6XCIlcyDgsrngsr/gsoLgsqbgs4ZcIixzOlwi4LKV4LOG4LKy4LK14LOBIOCyleCzjeCyt+Cyo+Cyl+Cys+CzgVwiLG06XCLgspLgsoLgsqbgs4Eg4LKo4LK/4LKu4LK/4LK3XCIsbW06XCIlZCDgsqjgsr/gsq7gsr/gsrdcIixoOlwi4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhlwiLGhoOlwiJWQg4LKX4LKC4LKf4LOGXCIsZDpcIuCykuCyguCypuCzgSDgsqbgsr/gsqhcIixkZDpcIiVkIOCypuCyv+CyqFwiLE06XCLgspLgsoLgsqbgs4Eg4LKk4LK/4LKC4LKX4LKz4LOBXCIsTU06XCIlZCDgsqTgsr/gsoLgspfgsrPgs4FcIix5Olwi4LKS4LKC4LKm4LOBIOCyteCysOCzjeCyt1wiLHl5OlwiJWQg4LK14LKw4LON4LK3XCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///21113\n')},19132:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=_(e),t={name:"ko",weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},meridiem:function(e){return e<12?"오전":"오후"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"}};return d.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkxMzIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMlJBQTJSLFNBQVMsVUFBVSwwTkFBME4sc0JBQXNCLHNCQUFzQixlQUFlLHlIQUF5SCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL2tvLmpzPzFiYzAiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfa289XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBkPV8oZSksdD17bmFtZTpcImtvXCIsd2Vla2RheXM6XCLsnbzsmpTsnbxf7JuU7JqU7J28X+2ZlOyalOydvF/siJjsmpTsnbxf66qp7JqU7J28X+q4iOyalOydvF/thqDsmpTsnbxcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCIx7JuUXzLsm5RfM+yblF807JuUXzXsm5RfNuyblF837JuUXzjsm5RfOeyblF8xMOyblF8xMeyblF8xMuyblFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIllZWVkuTU0uREQuXCIsTEw6XCJZWVlZ64WEIE1NTU0gROydvFwiLExMTDpcIllZWVnrhYQgTU1NTSBE7J28IEEgaDptbVwiLExMTEw6XCJZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbVwiLGw6XCJZWVlZLk1NLkRELlwiLGxsOlwiWVlZWeuFhCBNTU1NIETsnbxcIixsbGw6XCJZWVlZ64WEIE1NTU0gROydvCBBIGg6bW1cIixsbGxsOlwiWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW1cIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MTI/XCLsmKTsoIRcIjpcIuyYpO2bhFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIO2bhFwiLHBhc3Q6XCIlcyDsoIRcIixzOlwi66qHIOy0iFwiLG06XCIx67aEXCIsbW06XCIlZOu2hFwiLGg6XCLtlZwg7Iuc6rCEXCIsaGg6XCIlZOyLnOqwhFwiLGQ6XCLtlZjro6hcIixkZDpcIiVk7J28XCIsTTpcIu2VnCDri6xcIixNTTpcIiVk64usXCIseTpcIuydvCDrhYRcIix5eTpcIiVk64WEXCJ9fTtyZXR1cm4gZC5kZWZhdWx0LmxvY2FsZSh0LG51bGwsITApLHR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///19132\n')},94888:function(__unused_webpack_module,exports,__webpack_require__){eval('!function(e,t){ true?t(exports,__webpack_require__(27484)):0}(this,(function(e,t){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(t),d={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},o={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},u=["کانوونی دووەم","شوبات","ئادار","نیسان","ئایار","حوزەیران","تەممووز","ئاب","ئەیلوول","تشرینی یەکەم","تشرینی دووەم","کانوونی یەکەم"],i={name:"ku",months:u,monthsShort:u,weekdays:"یەکشەممە_دووشەممە_سێشەممە_چوارشەممە_پێنجشەممە_هەینی_شەممە".split("_"),weekdaysShort:"یەکشەم_دووشەم_سێشەم_چوارشەم_پێنجشەم_هەینی_شەممە".split("_"),weekStart:6,weekdaysMin:"ی_د_س_چ_پ_هـ_ش".split("_"),preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return o[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\\d/g,(function(e){return d[e]})).replace(/,/g,"،")},ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiem:function(e){return e<12?"پ.ن":"د.ن"},relativeTime:{future:"لە %s",past:"لەمەوپێش %s",s:"چەند چرکەیەک",m:"یەک خولەک",mm:"%d خولەک",h:"یەک کاتژمێر",hh:"%d کاتژمێر",d:"یەک ڕۆژ",dd:"%d ڕۆژ",M:"یەک مانگ",MM:"%d مانگ",y:"یەک ساڵ",yy:"%d ساڵ"}};r.default.locale(i,null,!0),e.default=i,e.englishToArabicNumbersMap=d,Object.defineProperty(e,"__esModule",{value:!0})}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ4ODguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxXQUFXLG1CQUFPLENBQUMsS0FBTyxHQUFHLENBQXVKLENBQUMscUJBQXFCLGFBQWEsY0FBYywrQ0FBK0MsV0FBVyxjQUFjLDREQUE0RCxJQUFJLGdGQUFnRiwySUFBMkkscVFBQXFRLDhDQUE4QyxZQUFZLHFCQUFxQix3QkFBd0Isb0NBQW9DLFlBQVkscUJBQXFCLHFCQUFxQixTQUFTLFVBQVUsaUhBQWlILHNCQUFzQix3QkFBd0IsZUFBZSwyTEFBMkwsNEdBQTRHLFNBQVMsRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUva3UuanM/ZmFmYSJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT90KGV4cG9ydHMscmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImV4cG9ydHNcIixcImRheWpzXCJdLHQpOnQoKGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfa3U9e30sZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciByPW4odCksZD17MTpcItmhXCIsMjpcItmiXCIsMzpcItmjXCIsNDpcItmkXCIsNTpcItmlXCIsNjpcItmmXCIsNzpcItmnXCIsODpcItmoXCIsOTpcItmpXCIsMDpcItmgXCJ9LG89e1wi2aFcIjpcIjFcIixcItmiXCI6XCIyXCIsXCLZo1wiOlwiM1wiLFwi2aRcIjpcIjRcIixcItmlXCI6XCI1XCIsXCLZplwiOlwiNlwiLFwi2adcIjpcIjdcIixcItmoXCI6XCI4XCIsXCLZqVwiOlwiOVwiLFwi2aBcIjpcIjBcIn0sdT1bXCLaqdin2YbZiNmI2YbbjCDYr9mI2YjbldmFXCIsXCLYtNmI2KjYp9iqXCIsXCLYptin2K/Yp9ixXCIsXCLZhtuM2LPYp9mGXCIsXCLYptin24zYp9ixXCIsXCLYrdmI2LLblduM2LHYp9mGXCIsXCLYqtuV2YXZhdmI2YjYslwiLFwi2KbYp9ioXCIsXCLYptuV24zZhNmI2YjZhFwiLFwi2KrYtNix24zZhtuMINuM25XaqduV2YVcIixcItiq2LTYsduM2YbbjCDYr9mI2YjbldmFXCIsXCLaqdin2YbZiNmI2YbbjCDbjNuV2qnbldmFXCJdLGk9e25hbWU6XCJrdVwiLG1vbnRoczp1LG1vbnRoc1Nob3J0OnUsd2Vla2RheXM6XCLbjNuV2qnYtNuV2YXZhduVX9iv2YjZiNi025XZhdmF25Vf2LPbjti025XZhdmF25Vf2obZiNin2LHYtNuV2YXZhduVX9m+247Zhtis2LTbldmF2YXblV/Zh9uV24zZhtuMX9i025XZhdmF25VcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItuM25Xaqdi025XZhV/Yr9mI2YjYtNuV2YVf2LPbjti025XZhV/ahtmI2KfYsdi025XZhV/ZvtuO2YbYrNi025XZhV/Zh9uV24zZhtuMX9i025XZhdmF25VcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjYsd2Vla2RheXNNaW46XCLbjF/Yr1/Ys1/ahl/Zvl/Zh9mAX9i0XCIuc3BsaXQoXCJfXCIpLHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV19KSkucmVwbGFjZSgv2IwvZyxcIixcIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKGUpe3JldHVybiBkW2VdfSkpLnJlcGxhY2UoLywvZyxcItiMXCIpfSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbTpmdW5jdGlvbihlKXtyZXR1cm4gZTwxMj9cItm+LtmGXCI6XCLYry7ZhlwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItmE25UgJXNcIixwYXN0Olwi2YTbldmF25XZiNm+247YtCAlc1wiLHM6XCLahtuV2YbYryDahtix2qnblduM25XaqVwiLG06XCLbjNuV2qkg2K7ZiNmE25XaqVwiLG1tOlwiJWQg2K7ZiNmE25XaqVwiLGg6XCLbjNuV2qkg2qnYp9iq2pjZhduO2LFcIixoaDpcIiVkINqp2KfYqtqY2YXbjtixXCIsZDpcItuM25XaqSDalduG2phcIixkZDpcIiVkINqV24bamFwiLE06XCLbjNuV2qkg2YXYp9mG2q9cIixNTTpcIiVkINmF2KfZhtqvXCIseTpcItuM25XaqSDYs9in2rVcIix5eTpcIiVkINiz2KfatVwifX07ci5kZWZhdWx0LmxvY2FsZShpLG51bGwsITApLGUuZGVmYXVsdD1pLGUuZW5nbGlzaFRvQXJhYmljTnVtYmVyc01hcD1kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///94888\n')},60466:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ky",weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),weekStart:1,weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjA0NjYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsOFlBQThZLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSxvTEFBb0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9reS5qcz9jNDExIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2t5PWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJreVwiLHdlZWtkYXlzOlwi0JbQtdC60YjQtdC80LHQuF/QlNKv0LnRiNOp0LzQsdKvX9Co0LXQudGI0LXQvNCx0Lhf0KjQsNGA0YjQtdC80LHQuF/QkdC10LnRiNC10LzQsdC4X9CW0YPQvNCwX9CY0YjQtdC80LHQuFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YxcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcItCW0LXQul/QlNKv0Llf0KjQtdC5X9Co0LDRgF/QkdC10Llf0JbRg9C8X9CY0YjQtVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItGP0L3Qsl/RhNC10LJf0LzQsNGA0YJf0LDQv9GAX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0JbQul/QlNC5X9Co0Llf0KjRgF/QkdC5X9CW0Lxf0JjRiFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINC40YfQuNC90LTQtVwiLHBhc3Q6XCIlcyDQvNGD0YDRg9C9XCIsczpcItCx0LjRgNC90LXRh9C1INGB0LXQutGD0L3QtFwiLG06XCLQsdC40YAg0LzSr9C906nRglwiLG1tOlwiJWQg0LzSr9C906nRglwiLGg6XCLQsdC40YAg0YHQsNCw0YJcIixoaDpcIiVkINGB0LDQsNGCXCIsZDpcItCx0LjRgCDQutKv0L1cIixkZDpcIiVkINC60q/QvVwiLE06XCLQsdC40YAg0LDQuVwiLE1NOlwiJWQg0LDQuVwiLHk6XCLQsdC40YAg0LbRi9C7XCIseXk6XCIlZCDQttGL0LtcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///60466\n')},91796:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),n={name:"lb",weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),weekStart:1,weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTE3OTYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscWFBQXFhLFNBQVMsVUFBVSw4SUFBOEkscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9sYi5qcz9jMGFlIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLF8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPV8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLF8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2xiPV8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1fKGUpLG49e25hbWU6XCJsYlwiLHdlZWtkYXlzOlwiU29ubmRlZ19Nw6lpbmRlZ19Ew6tuc2NoZGVnX03Dq3R0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZ1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJfRmVicnVhcl9Nw6RlcnpfQWJyw6tsbF9NZWVfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiU28uX03DqS5fRMOrLl9Nw6suX0RvLl9Gci5fU2EuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU29fTcOpX0TDq19Nw6tfRG9fRnJfU2FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJIOm1tIFtBdWVyXVwiLExUUzpcIkg6bW06c3MgW0F1ZXJdXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl1cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKG4sbnVsbCwhMCksbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91796\n')},68894:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"lo",weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg4OTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa1lBQWtZLFNBQVMsVUFBVSxtSEFBbUgsZUFBZSxpTEFBaUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9sby5qcz9hM2VmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX2xvPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJsb1wiLHdlZWtkYXlzOlwi4Lqt4Lqy4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuC6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6slwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuC6l1/guohf4Lqt4LqEX+C6nl/gup7guqtf4Lqq4LqBX+C6qlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCLguqfgurHguplkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi4Lqt4Lq14LqBICVzXCIscGFzdDpcIiVz4Lqc4LuI4Lqy4LqZ4Lqh4LqyXCIsczpcIuC6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tVwiLG06XCIxIOC6meC6suC6l+C6tVwiLG1tOlwiJWQg4LqZ4Lqy4LqX4Lq1XCIsaDpcIjEg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHXCIsaGg6XCIlZCDguorgurvgu4jguqfgu4LguqHguodcIixkOlwiMSDguqHgurfgu4lcIixkZDpcIiVkIOC6oeC6t+C7iVwiLE06XCIxIOC7gOC6lOC6t+C6reC6mVwiLE1NOlwiJWQg4LuA4LqU4Lq34Lqt4LqZXCIseTpcIjEg4Lqb4Lq1XCIseXk6XCIlZCDgupvgurVcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///68894\n')},78768:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,s){ true?module.exports=s(__webpack_require__(27484)):0}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=s(e),d="sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),a="sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),l=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,M=function(e,s){return l.test(s)?d[e.month()]:a[e.month()]};M.s=a,M.f=d;var t={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_šeš".split("_"),weekdaysMin:"s_p_a_t_k_pn_š".split("_"),months:M,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"už %s",past:"prieš %s",s:"kelias sekundes",m:"minutę",mm:"%d minutes",h:"valandą",hh:"%d valandas",d:"dieną",dd:"%d dienas",M:"mėnesį",MM:"%d mėnesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return i.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg3NjguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLDJUQUEyVCw0Q0FBNEMsWUFBWSxPQUFPLDhUQUE4VCxhQUFhLDJCQUEyQix3TEFBd0wsU0FBUyxtU0FBbVMsVUFBVSxxU0FBcVMscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9sdC5qcz8yNmNmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHMpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXMocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHMpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2x0PXMoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgaT1zKGUpLGQ9XCJzYXVzaW9fdmFzYXJpb19rb3ZvX2JhbGFuZMW+aW9fZ2VndcW+xJdzX2JpcsW+ZWxpb19saWVwb3NfcnVncGrFq8SNaW9fcnVnc8SXam9fc3BhbGlvX2xhcGtyacSNaW9fZ3J1b2TFvmlvXCIuc3BsaXQoXCJfXCIpLGE9XCJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1xb7El19iaXLFvmVsaXNfbGllcGFfcnVncGrFq3Rpc19ydWdzxJdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzXCIuc3BsaXQoXCJfXCIpLGw9L0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT98TU1NTT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK0Rbb0RdPy8sTT1mdW5jdGlvbihlLHMpe3JldHVybiBsLnRlc3Qocyk/ZFtlLm1vbnRoKCldOmFbZS5tb250aCgpXX07TS5zPWEsTS5mPWQ7dmFyIHQ9e25hbWU6XCJsdFwiLHdlZWtkYXlzOlwic2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlxI1pYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfxaFlxaF0YWRpZW5pc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwic2VrX3Bpcl9hbnRfdHJlX2tldF9wZW5fxaFlxaFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJzX3BfYV90X2tfcG5fxaFcIi5zcGxpdChcIl9cIiksbW9udGhzOk0sbW9udGhzU2hvcnQ6XCJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlK1wiLlwifSx3ZWVrU3RhcnQ6MSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInXFviAlc1wiLHBhc3Q6XCJwcmllxaEgJXNcIixzOlwia2VsaWFzIHNla3VuZGVzXCIsbTpcIm1pbnV0xJlcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwidmFsYW5kxIVcIixoaDpcIiVkIHZhbGFuZGFzXCIsZDpcImRpZW7EhVwiLGRkOlwiJWQgZGllbmFzXCIsTTpcIm3El25lc8SvXCIsTU06XCIlZCBtxJduZXNpdXNcIix5OlwibWV0dXNcIix5eTpcIiVkIG1ldHVzXCJ9LGZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXVwiLExMTDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dXCIsTExMTDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dXCIsbDpcIllZWVktTU0tRERcIixsbDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXVwiLGxsbDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dXCIsbGxsbDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl1cIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXVwiLExMTDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dXCIsTExMTDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dXCIsbDpcIllZWVktTU0tRERcIixsbDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXVwiLGxsbDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dXCIsbGxsbDpcIllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl1cIn19O3JldHVybiBpLmRlZmF1bHQubG9jYWxlKHQsbnVsbCwhMCksdH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///78768\n')},30953:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,s){ true?module.exports=s(__webpack_require__(27484)):0}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=s(e),d={name:"lv",weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},relativeTime:{future:"pēc %s",past:"pirms %s",s:"dažām sekundēm",m:"minūtes",mm:"%d minūtēm",h:"stundas",hh:"%d stundām",d:"dienas",dd:"%d dienām",M:"mēneša",MM:"%d mēnešiem",y:"gada",yy:"%d gadiem"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA5NTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsOFpBQThaLFNBQVMsVUFBVSwrSUFBK0ksZUFBZSwyTEFBMkwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9sdi5qcz84ZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHMpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXMocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHMpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX2x2PXMoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1zKGUpLGQ9e25hbWU6XCJsdlwiLHdlZWtkYXlzOlwic3bEk3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlxaFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW52xIFyaXNfZmVicnXEgXJpc19tYXJ0c19hcHLEq2xpc19tYWlqc19qxatuaWpzX2rFq2xpanNfYXVndXN0c19zZXB0ZW1icmlzX29rdG9icmlzX25vdmVtYnJpc19kZWNlbWJyaXNcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIlN2X1BfT19UX0NfUGtfU1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbWFyX2Fwcl9tYWlfasWrbl9qxatsX2F1Z19zZXBfb2t0X25vdl9kZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdl9QX09fVF9DX1BrX1NcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVkuXCIsTEw6XCJZWVlZLiBbZ2FkYV0gRC4gTU1NTVwiLExMTDpcIllZWVkuIFtnYWRhXSBELiBNTU1NLCBISDptbVwiLExMTEw6XCJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJwxJNjICVzXCIscGFzdDpcInBpcm1zICVzXCIsczpcImRhxb7EgW0gc2VrdW5kxJNtXCIsbTpcIm1pbsWrdGVzXCIsbW06XCIlZCBtaW7Fq3TEk21cIixoOlwic3R1bmRhc1wiLGhoOlwiJWQgc3R1bmTEgW1cIixkOlwiZGllbmFzXCIsZGQ6XCIlZCBkaWVuxIFtXCIsTTpcIm3Ek25lxaFhXCIsTU06XCIlZCBtxJNuZcWhaWVtXCIseTpcImdhZGFcIix5eTpcIiVkIGdhZGllbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///30953\n')},18066:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),a={name:"me",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTgwNjYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNlpBQTZaLFNBQVMsVUFBVSxrSEFBa0gscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9tZS5qcz82MTkxIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX21lPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgXz10KGUpLGE9e25hbWU6XCJtZVwiLHdlZWtkYXlzOlwibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwibmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi5cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIm5lX3BvX3V0X3NyX8SNZV9wZV9zdVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tXCJ9fTtyZXR1cm4gXy5kZWZhdWx0LmxvY2FsZShhLG51bGwsITApLGF9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18066\n')},68602:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e),t={name:"mi",weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),weekStart:1,weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"}};return i.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg2MDIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd2NBQXdjLFNBQVMsVUFBVSx5SEFBeUgsZUFBZSw2TEFBNkwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9taS5qcz81ZGQ2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX21pPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgaT1hKGUpLHQ9e25hbWU6XCJtaVwiLHdlZWtkYXlzOlwiUsSBdGFwdV9NYW5lX1TFq3JlaV9XZW5lcmVpX1TEgWl0ZV9QYXJhaXJlX0jEgXRhcmVpXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIktvaGktdMSBdGVfSHVpLXRhbmd1cnVfUG91dMWrLXRlLXJhbmdpX1BhZW5nYS13aMSBd2jEgV9IYXJhdHVhX1BpcGlyaV9IxY1uZ29pbmdvaV9IZXJlLXR1cmkta8WNa8SBX01haHVydV9XaGlyaW5nYS3EgS1udWt1X1doaXJpbmdhLcSBLXJhbmdpX0hha2loZWFcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIlRhX01hX1TFq19XZV9UxIFpX1BhX0jEgVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIktvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0jFjW5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlRhX01hX1TFq19XZV9UxIFpX1BhX0jEgVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBbaV0gSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaSByb3RvIGkgJXNcIixwYXN0OlwiJXMgaSBtdWFcIixzOlwidGUgaMSTa29uYSBydWFydWFcIixtOlwiaGUgbWVuZXRpXCIsbW06XCIlZCBtZW5ldGlcIixoOlwidGUgaGFvcmFcIixoaDpcIiVkIGhhb3JhXCIsZDpcImhlIHJhXCIsZGQ6XCIlZCByYVwiLE06XCJoZSBtYXJhbWFcIixNTTpcIiVkIG1hcmFtYVwiLHk6XCJoZSB0YXVcIix5eTpcIiVkIHRhdVwifX07cmV0dXJuIGkuZGVmYXVsdC5sb2NhbGUodCxudWxsLCEwKSx0fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68602\n')},51560:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"mk",weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),weekStart:1,weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTE1NjAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNllBQTZZLFNBQVMsVUFBVSw0R0FBNEcsZUFBZSw4S0FBOEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9tay5qcz9kNjQ2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLF8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPV8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLF8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX21rPV8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1fKGUpLGQ9e25hbWU6XCJta1wiLHdlZWtkYXlzOlwi0L3QtdC00LXQu9CwX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0L7Qul/Qv9C10YLQvtC6X9GB0LDQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLRmNCw0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvdC4X9GY0YPQu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4XCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0LVf0YfQtdGCX9C/0LXRgl/RgdCw0LFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLRmNCw0L1f0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQulwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItC9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWFcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi0L/QvtGB0LvQtSAlc1wiLHBhc3Q6XCLQv9GA0LXQtCAlc1wiLHM6XCLQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuFwiLG06XCLQvNC40L3Rg9GC0LBcIixtbTpcIiVkINC80LjQvdGD0YLQuFwiLGg6XCLRh9Cw0YFcIixoaDpcIiVkINGH0LDRgdCwXCIsZDpcItC00LXQvVwiLGRkOlwiJWQg0LTQtdC90LBcIixNOlwi0LzQtdGB0LXRhlwiLE1NOlwiJWQg0LzQtdGB0LXRhtC4XCIseTpcItCz0L7QtNC40L3QsFwiLHl5OlwiJWQg0LPQvtC00LjQvdC4XCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///51560\n')},4017:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ml",weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDAxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyx3YkFBd2IsU0FBUyxVQUFVLHVJQUF1SSxlQUFlLDRNQUE0TSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL21sLmpzPzU2MGUiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfbWw9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcIm1sXCIsd2Vla2RheXM6XCLgtJ7gtL7gtK/gtLHgtL7gtLTgtY3gtJpf4LSk4LS/4LSZ4LWN4LSV4LSz4LS+4LS04LWN4LSaX+C0muC1iuC0teC1jeC0teC0vuC0tOC1jeC0ml/gtKzgtYHgtKfgtKjgtL7gtLTgtY3gtJpf4LS14LWN4LSv4LS+4LS04LS+4LS04LWN4LSaX+C0teC1huC0s+C1jeC0s+C0v+C0r+C0vuC0tOC1jeC0ml/gtLbgtKjgtL/gtK/gtL7gtLTgtY3gtJpcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi4LSc4LSo4LWB4LS14LSw4LS/X+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0v1/gtK7gtL7gtbzgtJrgtY3gtJrgtY1f4LSP4LSq4LWN4LSw4LS/4LW9X+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWIX+C0k+C0l+C0uOC1jeC0seC1jeC0seC1jV/gtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtbxf4LSS4LSV4LWN4LSf4LWL4LSs4LW8X+C0qOC0teC0guC0rOC1vF/gtKHgtL/gtLjgtILgtKzgtbxcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuC0nuC0vuC0r+C1vF/gtKTgtL/gtJngtY3gtJXgtb5f4LSa4LWK4LS14LWN4LS1X+C0rOC1geC0p+C1u1/gtLXgtY3gtK/gtL7gtLTgtIJf4LS14LWG4LSz4LWN4LSz4LS/X+C0tuC0qOC0v1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuC0nOC0qOC1gS5f4LSr4LWG4LSs4LWN4LSw4LWBLl/gtK7gtL7gtbwuX+C0j+C0quC1jeC0sOC0vy5f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYguX+C0k+C0ly5f4LS44LWG4LSq4LWN4LSx4LWN4LSxLl/gtJLgtJXgtY3gtJ/gtYsuX+C0qOC0teC0gi5f4LSh4LS/4LS44LSCLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuC0nuC0vl/gtKTgtL9f4LSa4LWKX+C0rOC1gV/gtLXgtY3gtK/gtL5f4LS14LWGX+C0tlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkEgaDptbSAt4LSo4LWBXCIsTFRTOlwiQSBoOm1tOnNzIC3gtKjgtYFcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYFcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4LSV4LS04LS/4LSe4LWN4LSe4LWNXCIscGFzdDpcIiVzIOC0ruC1geC1u+C0quC1jVwiLHM6XCLgtIXgtb3gtKog4LSo4LS/4LSu4LS/4LS34LSZ4LWN4LSZ4LW+XCIsbTpcIuC0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY1cIixtbTpcIiVkIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jVwiLGg6XCLgtJLgtLDgtYEg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8XCIsaGg6XCIlZCDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbxcIixkOlwi4LSS4LSw4LWBIOC0puC0v+C0teC0uOC0glwiLGRkOlwiJWQg4LSm4LS/4LS14LS44LSCXCIsTTpcIuC0kuC0sOC1gSDgtK7gtL7gtLjgtIJcIixNTTpcIiVkIOC0ruC0vuC0uOC0glwiLHk6XCLgtJLgtLDgtYEg4LS14LW84LS34LSCXCIseXk6XCIlZCDgtLXgtbzgtLfgtIJcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4017\n')},94717:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"mn",weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},relativeTime:{future:"%s",past:"%s",s:"саяхан",m:"м",mm:"%dм",h:"1ц",hh:"%dц",d:"1ө",dd:"%dө",M:"1с",MM:"%dс",y:"1ж",yy:"%dж"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ3MTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMseWZBQXlmLFNBQVMsVUFBVSxtSUFBbUksZUFBZSxrSEFBa0gscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9tbi5qcz8zNDUzIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX21uPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJtblwiLHdlZWtkYXlzOlwi0J3Rj9C8X9CU0LDQstCw0LBf0JzRj9Cz0LzQsNGAX9Cb0YXQsNCz0LLQsF/Qn9Kv0YDRjdCyX9CR0LDQsNGB0LDQvV/QkdGP0LzQsdCwXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcItCd0Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0KXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAX9CT0YPRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CU06nRgNOp0LLQtNKv0LPRjdGN0YAg0YHQsNGAX9Ci0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JfRg9GA0LPQsNC00YPQs9Cw0LDRgCDRgdCw0YBf0JTQvtC70LTRg9Cz0LDQsNGAINGB0LDRgF/QndCw0LnQvNC00YPQs9Cw0LDRgCDRgdCw0YBf0JXRgdC00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CQ0YDQstCw0L0g0L3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LLQsNC9INGF0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0J3Rj9C8X9CU0LDQsl/QnNGP0LNf0JvRhdCwX9Cf0q/RgF/QkdCw0LBf0JHRj9C8XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiMSDRgdCw0YBfMiDRgdCw0YBfMyDRgdCw0YBfNCDRgdCw0YBfNSDRgdCw0YBfNiDRgdCw0YBfNyDRgdCw0YBfOCDRgdCw0YBfOSDRgdCw0YBfMTAg0YHQsNGAXzExINGB0LDRgF8xMiDRgdCw0YBcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLQndGPX9CU0LBf0JzRj1/Qm9GFX9Cf0q9f0JHQsF/QkdGPXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJZWVlZINC+0L3RiyBNTU1N0YvQvSBEXCIsTExMOlwiWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbVwiLExMTEw6XCJkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXNcIixwYXN0OlwiJXNcIixzOlwi0YHQsNGP0YXQsNC9XCIsbTpcItC8XCIsbW06XCIlZNC8XCIsaDpcIjHRhlwiLGhoOlwiJWTRhlwiLGQ6XCIx06lcIixkZDpcIiVk06lcIixNOlwiMdGBXCIsTU06XCIlZNGBXCIseTpcIjHQtlwiLHl5OlwiJWTQtlwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///94717\n')},15473:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"mr",weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"}};return t.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU0NzMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaWFBQWlhLFNBQVMsVUFBVSxpSkFBaUoscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9tci5qcz9iZTBkIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX21yPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLG49e25hbWU6XCJtclwiLHdlZWtkYXlzOlwi4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLPgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuCknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOCkv+Cksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCliF/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cks1/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaLl/gpI/gpKrgpY3gpLDgpL8uX+CkruClhy5f4KSc4KWC4KSoLl/gpJzgpYHgpLLgpYguX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+CktlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkEgaDptbSDgpLXgpL7gpJzgpKTgpL5cIixMVFM6XCJBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+XCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL5cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL5cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKG4sbnVsbCwhMCksbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15473\n')},77387:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"ms-my",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),weekStart:1,weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczODcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa1lBQWtZLFNBQVMsVUFBVSxpSUFBaUksZUFBZSx1TEFBdUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9tcy1teS5qcz9lNjE5Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX21zX215PWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1hKGUpLF89e25hbWU6XCJtcy1teVwiLHdlZWtkYXlzOlwiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJBaF9Jc19TbF9SYl9LbV9KbV9TYlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhILm1tXCIsTFRTOlwiSEgubW0uc3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJkYWxhbSAlc1wiLHBhc3Q6XCIlcyB5YW5nIGxlcGFzXCIsczpcImJlYmVyYXBhIHNhYXRcIixtOlwic2VtaW5pdFwiLG1tOlwiJWQgbWluaXRcIixoOlwic2VqYW1cIixoaDpcIiVkIGphbVwiLGQ6XCJzZWhhcmlcIixkZDpcIiVkIGhhcmlcIixNOlwic2VidWxhblwiLE1NOlwiJWQgYnVsYW5cIix5Olwic2V0YWh1blwiLHl5OlwiJWQgdGFodW5cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKF8sbnVsbCwhMCksX30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///77387\n')},5742:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),s={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return t.default.locale(s,null,!0),s}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyxvWEFBb1gsaUhBQWlILGVBQWUscUxBQXFMLHFCQUFxQixlQUFlLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvbXMuanM/ODE1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxhKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1hKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxhKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9tcz1hKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHQ9YShlKSxzPXtuYW1lOlwibXNcIix3ZWVrZGF5czpcIkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiQWhfSXNfU2xfUmJfS21fSm1fU2JcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXNcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsZm9ybWF0czp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEgubW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEgubW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJkYWxhbSAlc1wiLHBhc3Q6XCIlcyB5YW5nIGxlcGFzXCIsczpcImJlYmVyYXBhIHNhYXRcIixtOlwic2VtaW5pdFwiLG1tOlwiJWQgbWluaXRcIixoOlwic2VqYW1cIixoaDpcIiVkIGphbVwiLGQ6XCJzZWhhcmlcIixkZDpcIiVkIGhhcmlcIixNOlwic2VidWxhblwiLE1NOlwiJWQgYnVsYW5cIix5Olwic2V0YWh1blwiLHl5OlwiJWQgdGFodW5cIn0sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIi5cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKHMsbnVsbCwhMCksc30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5742\n')},28477:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),i={name:"mt",weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),weekStart:1,weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"}};return a.default.locale(i,null,!0),i}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0NzcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdVpBQXVaLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSw0S0FBNEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9tdC5qcz85ZTYwIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX210PXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgYT10KGUpLGk9e25hbWU6XCJtdFwiLHdlZWtkYXlzOlwiSWwtxKZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ8SnYV9JbC3EpmFtaXNfSWwtxKBpbWfEp2FfSXMtU2lidFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV/EoHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EacSLZW1icnVcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIsSmYWRfVG5lX1RsaV9FcmJfxKZhbV/EoGltX1NpYlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GcmFfTWFyX0Fwcl9NZWpfxKB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpxItcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLEpmFfVG5fVGxfRXJfxKZhX8SgaV9TaVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImbigJkgJXNcIixwYXN0OlwiJXMgaWx1XCIsczpcImZ0aXQgc2Vrb25kaVwiLG06XCJtaW51dGFcIixtbTpcIiVkIG1pbnV0aVwiLGg6XCJzaWVnxKdhXCIsaGg6XCIlZCBzaWVnxKdhdFwiLGQ6XCLEoXVybmF0YVwiLGRkOlwiJWQgxKFyYW5ldFwiLE06XCJ4YWhhclwiLE1NOlwiJWQgeGh1clwiLHk6XCJzZW5hXCIseXk6XCIlZCBzbmlcIn19O3JldHVybiBhLmRlZmF1bHQubG9jYWxlKGksbnVsbCwhMCksaX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///28477\n')},62966:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"my",weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),weekStart:1,weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI5NjYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsbVpBQW1aLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSwyTEFBMkwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9teS5qcz8wNjZjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX215PWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJteVwiLHdlZWtkYXlzOlwi4YCQ4YCU4YCE4YC64YC54YCC4YCU4YC94YCxX+GAkOGAlOGAhOGAuuGAueGAnOGArF/hgKHhgIThgLrhgLnhgILhgKtf4YCX4YCv4YCS4YC54YCT4YCf4YCw4YC4X+GAgOGAvOGArOGAnuGAleGAkOGAseGAuF/hgJ7hgLHhgKzhgIDhgLzhgKxf4YCF4YCU4YCxXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuGAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLhgIfhgJThgLpf4YCW4YCxX+GAmeGAkOGAul/hgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgJzhgK3hgK/hgIThgLpf4YCe4YC8X+GAheGAgOGAul/hgKHhgLHhgKzhgIDhgLpf4YCU4YCt4YCvX+GAkuGArlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuGAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArFwiLHBhc3Q6XCLhgJzhgL3hgJThgLrhgIHhgLLhgLfhgJ7hgLHhgKwgJXMg4YCAXCIsczpcIuGAheGAgOGAueGAgOGAlOGAui7hgKHhgJThgIrhgLrhgLjhgIThgJrhgLpcIixtOlwi4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6XCIsbW06XCIlZCDhgJnhgK3hgJThgIXhgLpcIixoOlwi4YCQ4YCF4YC64YCU4YCs4YCb4YCuXCIsaGg6XCIlZCDhgJThgKzhgJvhgK5cIixkOlwi4YCQ4YCF4YC64YCb4YCA4YC6XCIsZGQ6XCIlZCDhgJvhgIDhgLpcIixNOlwi4YCQ4YCF4YC64YCcXCIsTU06XCIlZCDhgJxcIix5Olwi4YCQ4YCF4YC64YCU4YC+4YCF4YC6XCIseXk6XCIlZCDhgJThgL7hgIXhgLpcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///62966\n')},19682:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),a={name:"nb",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"}};return n.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk2ODIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1lBQXdZLGFBQWEsa0NBQWtDLCtIQUErSCxlQUFlLHlMQUF5TCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL25iLmpzP2JhYjEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfbmI9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBuPXQoZSksYT17bmFtZTpcIm5iXCIsd2Vla2RheXM6XCJzw7huZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7hyZGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJzw7guX21hLl90aS5fb24uX3RvLl9mci5fbMO4LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInPDuF9tYV90aV9vbl90b19mcl9sw7hcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbi5fZmViLl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LHdlZWtTdGFydDoxLHllYXJTdGFydDo0LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW1cIixMTExMOlwiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvbSAlc1wiLHBhc3Q6XCIlcyBzaWRlblwiLHM6XCJub2VuIHNla3VuZGVyXCIsbTpcImV0dCBtaW51dHRcIixtbTpcIiVkIG1pbnV0dGVyXCIsaDpcImVuIHRpbWVcIixoaDpcIiVkIHRpbWVyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnZXJcIixNOlwiZW4gbcOlbmVkXCIsTU06XCIlZCBtw6VuZWRlclwiLHk6XCJldHQgw6VyXCIseXk6XCIlZCDDpXJcIn19O3JldHVybiBuLmRlZmF1bHQubG9jYWxlKGEsbnVsbCwhMCksYX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19682\n')},14149:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ne",weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मे_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),relativeTime:{future:"%s पछि",past:"%s अघि",s:"सेकेन्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"घन्टा",hh:"%d घन्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक वर्ष",yy:"%d वर्ष"},ordinal:function(e){return(""+e).replace(/\\d/g,(function(e){return"०१२३४५६७८९"[e]}))},formats:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNDkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaWFBQWlhLHdLQUF3SyxxQkFBcUIsd0NBQXdDLHNCQUFzQixHQUFHLFVBQVUsaUpBQWlKLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvbmUuanM/MjRhMiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxfKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1fKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxfKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9uZT1fKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBfKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIHQ9XyhlKSxkPXtuYW1lOlwibmVcIix3ZWVrZGF5czpcIuCkhuCkh+CkpOCkrOCkvuCksF/gpLjgpYvgpK7gpKzgpL7gpLBf4KSu4KSZ4KWN4KSX4KSy4KSs4KS+4KSwX+CkrOClgeCkp+CkrOCkvuCksF/gpKzgpL/gpLngpL/gpKzgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KSs4KS+4KSwX+CktuCkqOCkv+CkrOCkvuCksFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4KSG4KSH4KSkLl/gpLjgpYvgpK4uX+CkruCkmeCljeCkl+Cksi5f4KSs4KWB4KSnLl/gpKzgpL/gpLngpL8uX+CktuClgeCkleCljeCksC5f4KS24KSo4KS/LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCkhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti5cIi5zcGxpdChcIl9cIiksbW9udGhzOlwi4KSc4KSo4KS14KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KS/4KSyX+CkruClh1/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+Ckt+CljeCkn1/gpLjgpYfgpKrgpY3gpJ/gpYfgpK7gpY3gpKzgpLBf4KSF4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkreClh+CkruCljeCkrOCksF/gpKHgpL/gpLjgpYfgpK7gpY3gpKzgpLBcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgpJzgpKguX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkvy5f4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIguX+CkheCkly5f4KS44KWH4KSq4KWN4KSfLl/gpIXgpJXgpY3gpJ/gpYsuX+CkqOCli+CkreClhy5f4KSh4KS/4KS44KWHLlwiLnNwbGl0KFwiX1wiKSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOCkquCkm+Ckv1wiLHBhc3Q6XCIlcyDgpIXgpJjgpL9cIixzOlwi4KS44KWH4KSV4KWH4KSo4KWN4KShXCIsbTpcIuCkj+CklSDgpK7gpL/gpKjgpYfgpJ9cIixtbTpcIiVkIOCkruCkv+CkqOClh+Ckn1wiLGg6XCLgpJjgpKjgpY3gpJ/gpL5cIixoaDpcIiVkIOCkmOCkqOCljeCkn+CkvlwiLGQ6XCLgpI/gpJUg4KSm4KS/4KSoXCIsZGQ6XCIlZCDgpKbgpL/gpKhcIixNOlwi4KSP4KSVIOCkruCkueCkv+CkqOCkvlwiLE1NOlwiJWQg4KSu4KS54KS/4KSo4KS+XCIseTpcIuCkj+CklSDgpLXgpLDgpY3gpLdcIix5eTpcIiVkIOCkteCksOCljeCkt1wifSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybihcIlwiK2UpLnJlcGxhY2UoL1xcZC9nLChmdW5jdGlvbihlKXtyZXR1cm5cIuClpuClp+ClqOClqeClquClq+ClrOClreClruClr1wiW2VdfSkpfSxmb3JtYXRzOntMVDpcIkHgpJXgpYsgaDptbSDgpKzgpJzgpYdcIixMVFM6XCJB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYdcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYdcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14149\n')},37496:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),d={name:"nl-be",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),weekStart:1,weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"}};return n.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0OTYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsbWFBQW1hLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSxvTUFBb00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9ubC1iZS5qcz8wZDA2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX25sX2JlPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgbj1hKGUpLGQ9e25hbWU6XCJubC1iZVwiLHdlZWtkYXlzOlwiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZ1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJ6b19tYV9kaV93b19kb192cl96YVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwib3ZlciAlc1wiLHBhc3Q6XCIlcyBnZWxlZGVuXCIsczpcImVlbiBwYWFyIHNlY29uZGVuXCIsbTpcIsOpw6luIG1pbnV1dFwiLG1tOlwiJWQgbWludXRlblwiLGg6XCLDqcOpbiB1dXJcIixoaDpcIiVkIHV1clwiLGQ6XCLDqcOpbiBkYWdcIixkZDpcIiVkIGRhZ2VuXCIsTTpcIsOpw6luIG1hYW5kXCIsTU06XCIlZCBtYWFuZGVuXCIseTpcIsOpw6luIGphYXJcIix5eTpcIiVkIGphYXJcIn19O3JldHVybiBuLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37496\n')},99182:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=a(e),n={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return"["+e+(1===e||8===e||e>=20?"ste":"de")+"]"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return d.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxODIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMseVlBQXlZLGlEQUFpRCxrQ0FBa0MsZ0hBQWdILGVBQWUsb01BQW9NLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvbmwuanM/MzhiYyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxhKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1hKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxhKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9ubD1hKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIGQ9YShlKSxuPXtuYW1lOlwibmxcIix3ZWVrZGF5czpcInpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInpvX21hX2RpX3dvX2RvX3ZyX3phXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuXCJbXCIrZSsoMT09PWV8fDg9PT1lfHxlPj0yMD9cInN0ZVwiOlwiZGVcIikrXCJdXCJ9LHdlZWtTdGFydDoxLHllYXJTdGFydDo0LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC1NTS1ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvdmVyICVzXCIscGFzdDpcIiVzIGdlbGVkZW5cIixzOlwiZWVuIHBhYXIgc2Vjb25kZW5cIixtOlwiZWVuIG1pbnV1dFwiLG1tOlwiJWQgbWludXRlblwiLGg6XCJlZW4gdXVyXCIsaGg6XCIlZCB1dXJcIixkOlwiZWVuIGRhZ1wiLGRkOlwiJWQgZGFnZW5cIixNOlwiZWVuIG1hYW5kXCIsTU06XCIlZCBtYWFuZGVuXCIseTpcImVlbiBqYWFyXCIseXk6XCIlZCBqYWFyXCJ9fTtyZXR1cm4gZC5kZWZhdWx0LmxvY2FsZShuLG51bGwsITApLG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///99182\n')},92722:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),a={name:"nn",weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eitt minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månadar",y:"eitt år",yy:"%d år"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"}};return n.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI3MjIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNFhBQTRYLGFBQWEsMkJBQTJCLDZMQUE2TCxVQUFVLGdJQUFnSSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL25uLmpzPzkwYWUiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfbm49dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBuPXQoZSksYT17bmFtZTpcIm5uXCIsd2Vla2RheXM6XCJzdW5kYWdfbcOlbmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInN1bl9tw6VuX3R5c19vbnNfdG9yX2ZyZV9sYXVcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJzdV9tw6VfdHlfb25fdG9fZnJfbGFcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LHdlZWtTdGFydDoxLHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwib20gJXNcIixwYXN0OlwiZm9yICVzIHNpZGFuXCIsczpcIm5va3JlIHNla3VuZFwiLG06XCJlaXR0IG1pbnV0dFwiLG1tOlwiJWQgbWludXR0XCIsaDpcImVpbiB0aW1lXCIsaGg6XCIlZCB0aW1hclwiLGQ6XCJlaW4gZGFnXCIsZGQ6XCIlZCBkYWdhclwiLE06XCJlaW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRhclwiLHk6XCJlaXR0IMOlclwiLHl5OlwiJWQgw6VyXCJ9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgW2tsLl0gSDptbVwiLExMTEw6XCJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbVwifX07cmV0dXJuIG4uZGVmYXVsdC5sb2NhbGUoYSxudWxsLCEwKSxhfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///92722\n')},76159:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,d){ true?module.exports=d(__webpack_require__(27484)):0}(this,(function(e){"use strict";function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=d(e),s={name:"oc-lnc",weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"Dg_Dl_Dm_Dc_Dj_Dv_Ds".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),months:"genièr_febrièr_març_abrial_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),monthsShort:"gen_feb_març_abr_mai_junh_julh_ago_set_oct_nov_dec".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm"},relativeTime:{future:"d\'aquí %s",past:"fa %s",s:"unas segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},ordinal:function(e){return e+"º"}};return n.default.locale(s,null,!0),s}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYxNTkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBOEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsb1lBQW9ZLG1JQUFtSSxlQUFlLG1MQUFtTCxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL29jLWxuYy5qcz9hYTMzIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX29jX2xuYz1kKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIG49ZChlKSxzPXtuYW1lOlwib2MtbG5jXCIsd2Vla2RheXM6XCJkaW1lbmdlX2RpbHVuc19kaW1hcnNfZGltw6hjcmVzX2RpasOydXNfZGl2ZW5kcmVzX2Rpc3NhYnRlXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJEZ19EbF9EbV9EY19Eal9Edl9Ec1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRnX2RsX2RtX2RjX2RqX2R2X2RzXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImdlbmnDqHJfZmVicmnDqHJfbWFyw6dfYWJyaWFsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3TDsmJyZV9ub3ZlbWJyZV9kZWNlbWJyZVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImdlbl9mZWJfbWFyw6dfYWJyX21haV9qdW5oX2p1bGhfYWdvX3NldF9vY3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBbZGVdIFlZWVlcIixMTEw6XCJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImQnYXF1w60gJXNcIixwYXN0OlwiZmEgJXNcIixzOlwidW5hcyBzZWdvbmRhc1wiLG06XCJ1bmEgbWludXRhXCIsbW06XCIlZCBtaW51dGFzXCIsaDpcInVuYSBvcmFcIixoaDpcIiVkIG9yYXNcIixkOlwidW4gam9yblwiLGRkOlwiJWQgam9ybnNcIixNOlwidW4gbWVzXCIsTU06XCIlZCBtZXNlc1wiLHk6XCJ1biBhblwiLHl5OlwiJWQgYW5zXCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifX07cmV0dXJuIG4uZGVmYXVsdC5sb2NhbGUocyxudWxsLCEwKSxzfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76159\n')},35914:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"pa-in",weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU5MTQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscVpBQXFaLFNBQVMsVUFBVSx1SUFBdUksZUFBZSxnTEFBZ0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9wYS1pbi5qcz9mMGYxIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3BhX2luPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJwYS1pblwiLHdlZWtkYXlzOlwi4KiQ4Kik4Ki14Ki+4KiwX+CouOCpi+CoruCoteCovuCosF/gqK7gqbDgqJfgqLLgqLXgqL7gqLBf4Kis4KmB4Kin4Ki14Ki+4KiwX+CoteCpgOCosOCoteCovuCosF/gqLjgqLzgqYHgqbHgqJXgqLDgqLXgqL7gqLBf4Ki44Ki84Kio4KmA4Kia4Kiw4Ki14Ki+4KiwXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYBcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkEgaDptbSDgqLXgqJzgqYdcIixMVFM6XCJBIGg6bW06c3Mg4Ki14Kic4KmHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYdcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYdcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDgqLXgqL/gqbHgqJpcIixwYXN0OlwiJXMg4Kiq4Ki/4Kib4Kiy4KmHXCIsczpcIuColeCpgeConSDgqLjgqJXgqL/gqbDgqJ9cIixtOlwi4KiH4KiVIOCoruCov+CpsOCon1wiLG1tOlwiJWQg4Kiu4Ki/4Kmw4KifXCIsaDpcIuCoh+CpseColSDgqJjgqbDgqJ/gqL5cIixoaDpcIiVkIOComOCpsOCon+Cph1wiLGQ6XCLgqIfgqbHgqJUg4Kim4Ki/4KioXCIsZGQ6XCIlZCDgqKbgqL/gqKhcIixNOlwi4KiH4Kmx4KiVIOCoruCoueCpgOCoqOCovlwiLE1NOlwiJWQg4Kiu4Ki54KmA4Kio4KmHXCIseTpcIuCoh+CpseColSDgqLjgqL7gqLJcIix5eTpcIiVkIOCouOCovuCoslwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35914\n')},81987:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=t(e);function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function n(e,t,i){var n=e+" ";switch(i){case"m":return t?"minuta":"minutę";case"mm":return n+(a(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return n+(a(e)?"godziny":"godzin");case"MM":return n+(a(e)?"miesiące":"miesięcy");case"yy":return n+(a(e)?"lata":"lat")}}var r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),_="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),s=/D MMMM/,d=function(e,t){return s.test(t)?r[e.month()]:_[e.month()]};d.s=_,d.f=r;var o={name:"pl",weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),months:d,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:n,mm:n,h:n,hh:n,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:n,y:"rok",yy:n},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return i.default.locale(o,null,!0),o}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODE5ODcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLFdBQVcsY0FBYyxzQ0FBc0Msa0JBQWtCLFlBQVksVUFBVSxtQ0FBbUMsMENBQTBDLHFDQUFxQyw0Q0FBNEMsK0NBQStDLHVDQUF1QyxpUUFBaVEsNENBQTRDLFlBQVksT0FBTyxtU0FBbVMsYUFBYSx1Q0FBdUMsdUhBQXVILFVBQVUsbUhBQW1ILHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvcGwuanM/NDU0YiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9wbD10KGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIGk9dChlKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJTEwPDUmJmUlMTA+MSYmfn4oZS8xMCklMTAhPTF9ZnVuY3Rpb24gbihlLHQsaSl7dmFyIG49ZStcIiBcIjtzd2l0Y2goaSl7Y2FzZVwibVwiOnJldHVybiB0P1wibWludXRhXCI6XCJtaW51dMSZXCI7Y2FzZVwibW1cIjpyZXR1cm4gbisoYShlKT9cIm1pbnV0eVwiOlwibWludXRcIik7Y2FzZVwiaFwiOnJldHVybiB0P1wiZ29kemluYVwiOlwiZ29kemluxJlcIjtjYXNlXCJoaFwiOnJldHVybiBuKyhhKGUpP1wiZ29kemlueVwiOlwiZ29kemluXCIpO2Nhc2VcIk1NXCI6cmV0dXJuIG4rKGEoZSk/XCJtaWVzacSFY2VcIjpcIm1pZXNpxJljeVwiKTtjYXNlXCJ5eVwiOnJldHVybiBuKyhhKGUpP1wibGF0YVwiOlwibGF0XCIpfX12YXIgcj1cInN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZcWbbmlhX3Bhxbpkemllcm5pa2FfbGlzdG9wYWRhX2dydWRuaWFcIi5zcGxpdChcIl9cIiksXz1cInN0eWN6ZcWEX2x1dHlfbWFyemVjX2t3aWVjaWXFhF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWXFhF93cnplc2llxYRfcGHFumR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWXFhFwiLnNwbGl0KFwiX1wiKSxzPS9EIE1NTU0vLGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy50ZXN0KHQpP3JbZS5tb250aCgpXTpfW2UubW9udGgoKV19O2Qucz1fLGQuZj1yO3ZhciBvPXtuYW1lOlwicGxcIix3ZWVrZGF5czpcIm5pZWR6aWVsYV9wb25pZWR6aWHFgmVrX3d0b3Jla1/Fm3JvZGFfY3p3YXJ0ZWtfcGnEhXRla19zb2JvdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIm5kel9wb25fd3RfxZtyX2N6d19wdF9zb2JcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJOZF9Qbl9XdF/FmnJfQ3pfUHRfU29cIi5zcGxpdChcIl9cIiksbW9udGhzOmQsbW9udGhzU2hvcnQ6XCJzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnVcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIi5cIn0sd2Vla1N0YXJ0OjEseWVhclN0YXJ0OjQscmVsYXRpdmVUaW1lOntmdXR1cmU6XCJ6YSAlc1wiLHBhc3Q6XCIlcyB0ZW11XCIsczpcImtpbGthIHNla3VuZFwiLG06bixtbTpuLGg6bixoaDpuLGQ6XCIxIGR6aWXFhFwiLGRkOlwiJWQgZG5pXCIsTTpcIm1pZXNpxIVjXCIsTU06bix5Olwicm9rXCIseXk6bn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn19O3JldHVybiBpLmRlZmF1bHQubG9jYWxlKG8sbnVsbCwhMCksb30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81987\n')},57548:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,o){ true?module.exports=o(__webpack_require__(27484)):0}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(e),s={name:"pt-br",weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"º"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return a.default.locale(s,null,!0),s}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc1NDguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaWFBQWlhLGFBQWEsVUFBVSx5SkFBeUosZUFBZSxvTEFBb0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9wdC1ici5qcz9iNzJiIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3B0X2JyPW8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgYT1vKGUpLHM9e25hbWU6XCJwdC1iclwiLHdlZWtkYXlzOlwiZG9taW5nb19zZWd1bmRhLWZlaXJhX3RlcsOnYS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJhX3PDoWJhZG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3PDoWJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEb18ywqpfM8KqXzTCql81wqpfNsKqX1PDoVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJyb1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6XCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZXCIsTExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVtICVzXCIscGFzdDpcImjDoSAlc1wiLHM6XCJwb3Vjb3Mgc2VndW5kb3NcIixtOlwidW0gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVtYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1bSBkaWFcIixkZDpcIiVkIGRpYXNcIixNOlwidW0gbcOqc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW0gYW5vXCIseXk6XCIlZCBhbm9zXCJ9fTtyZXR1cm4gYS5kZWZhdWx0LmxvY2FsZShzLG51bGwsITApLHN9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///57548\n')},15001:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=a(e),t={name:"pt",weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sab".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sa".split("_"),months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"º"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return o.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMDEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsOFpBQThaLGFBQWEsa0NBQWtDLHlKQUF5SixlQUFlLG9MQUFvTCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3B0LmpzPzZjYzMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsYSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9YShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sYSk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfcHQ9YShlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBvPWEoZSksdD17bmFtZTpcInB0XCIsd2Vla2RheXM6XCJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc2FiXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiRG9fMsKqXzPCql80wqpfNcKqXzbCql9TYVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJyb1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6XCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCLCulwifSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZXCIsTExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVtICVzXCIscGFzdDpcImjDoSAlc1wiLHM6XCJhbGd1bnMgc2VndW5kb3NcIixtOlwidW0gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVtYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1bSBkaWFcIixkZDpcIiVkIGRpYXNcIixNOlwidW0gbcOqc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW0gYW5vXCIseXk6XCIlZCBhbm9zXCJ9fTtyZXR1cm4gby5kZWZhdWx0LmxvY2FsZSh0LG51bGwsITApLHR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///15001\n')},123:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=e(a),u={name:"rn",weekdays:"Ku wa Mungu_Ku wa Mbere_Ku wa Kabiri_Ku wa Gatatu_Ku wa Kane_Ku wa Gatanu_Ku wa Gatandatu".split("_"),weekdaysShort:"Kngu_Kmbr_Kbri_Ktat_Kkan_Ktan_Kdat".split("_"),weekdaysMin:"K7_K1_K2_K3_K4_K5_K6".split("_"),months:"Nzero_Ruhuhuma_Ntwarante_Ndamukiza_Rusama_Ruhenshi_Mukakaro_Myandagaro_Nyakanga_Gitugutu_Munyonyo_Kigarama".split("_"),monthsShort:"Nzer_Ruhuh_Ntwar_Ndam_Rus_Ruhen_Muk_Myand_Nyak_Git_Muny_Kig".split("_"),weekStart:1,ordinal:function(a){return a},relativeTime:{future:"mu %s",past:"%s",s:"amasegonda",m:"Umunota",mm:"%d iminota",h:"isaha",hh:"%d amasaha",d:"Umunsi",dd:"%d iminsi",M:"ukwezi",MM:"%d amezi",y:"umwaka",yy:"%d imyaka"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return t.default.locale(u,null,!0),u}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIzLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsS0FBb0Qsa0JBQWtCLG1CQUFPLENBQUMsS0FBTyxHQUFHLENBQTBJLENBQUMsbUJBQW1CLGFBQWEsY0FBYywrQ0FBK0MsV0FBVyxjQUFjLDBkQUEwZCxTQUFTLGVBQWUsMktBQTJLLFVBQVUsbUhBQW1ILHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvcm4uanM/MTZhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oYSxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxlKTooYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmF8fHNlbGYpLmRheWpzX2xvY2FsZV9ybj1lKGEuZGF5anMpfSh0aGlzLChmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGEpe3JldHVybiBhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmXCJkZWZhdWx0XCJpbiBhP2E6e2RlZmF1bHQ6YX19dmFyIHQ9ZShhKSx1PXtuYW1lOlwicm5cIix3ZWVrZGF5czpcIkt1IHdhIE11bmd1X0t1IHdhIE1iZXJlX0t1IHdhIEthYmlyaV9LdSB3YSBHYXRhdHVfS3Ugd2EgS2FuZV9LdSB3YSBHYXRhbnVfS3Ugd2EgR2F0YW5kYXR1XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJLbmd1X0ttYnJfS2JyaV9LdGF0X0trYW5fS3Rhbl9LZGF0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiSzdfSzFfSzJfSzNfSzRfSzVfSzZcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiTnplcm9fUnVodWh1bWFfTnR3YXJhbnRlX05kYW11a2l6YV9SdXNhbWFfUnVoZW5zaGlfTXVrYWthcm9fTXlhbmRhZ2Fyb19OeWFrYW5nYV9HaXR1Z3V0dV9NdW55b255b19LaWdhcmFtYVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIk56ZXJfUnVodWhfTnR3YXJfTmRhbV9SdXNfUnVoZW5fTXVrX015YW5kX055YWtfR2l0X011bnlfS2lnXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLG9yZGluYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwibXUgJXNcIixwYXN0OlwiJXNcIixzOlwiYW1hc2Vnb25kYVwiLG06XCJVbXVub3RhXCIsbW06XCIlZCBpbWlub3RhXCIsaDpcImlzYWhhXCIsaGg6XCIlZCBhbWFzYWhhXCIsZDpcIlVtdW5zaVwiLGRkOlwiJWQgaW1pbnNpXCIsTTpcInVrd2V6aVwiLE1NOlwiJWQgYW1lemlcIix5OlwidW13YWthXCIseXk6XCIlZCBpbXlha2FcIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKHUsbnVsbCwhMCksdX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n')},18146:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,i){ true?module.exports=i(__webpack_require__(27484)):0}(this,(function(e){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=i(e),_={name:"ro",weekdays:"Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"câteva secunde",m:"un minut",mm:"%d minute",h:"o oră",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lună",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTgxNDYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdVpBQXVaLDZHQUE2RyxlQUFlLDBLQUEwSyxxQkFBcUIsV0FBVyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3JvLmpzP2E5NWEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsaSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9aShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0saSk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfcm89aShlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PWkoZSksXz17bmFtZTpcInJvXCIsd2Vla2RheXM6XCJEdW1pbmljxINfTHVuaV9NYXLIm2lfTWllcmN1cmlfSm9pX1ZpbmVyaV9Tw6JtYsSDdMSDXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9Tw6JtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiRHVfTHVfTWFfTWlfSm9fVmlfU8OiXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIklhbnVhcmllX0ZlYnJ1YXJpZV9NYXJ0aWVfQXByaWxpZV9NYWlfSXVuaWVfSXVsaWVfQXVndXN0X1NlcHRlbWJyaWVfT2N0b21icmllX05vaWVtYnJpZV9EZWNlbWJyaWVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJJYW4uX0ZlYnIuX01hcnQuX0Fwci5fTWFpX0l1bi5fSXVsLl9BdWcuX1NlcHQuX09jdC5fTm92Ll9EZWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJwZXN0ZSAlc1wiLHBhc3Q6XCJhY3VtICVzXCIsczpcImPDonRldmEgc2VjdW5kZVwiLG06XCJ1biBtaW51dFwiLG1tOlwiJWQgbWludXRlXCIsaDpcIm8gb3LEg1wiLGhoOlwiJWQgb3JlXCIsZDpcIm8gemlcIixkZDpcIiVkIHppbGVcIixNOlwibyBsdW7Eg1wiLE1NOlwiJWQgbHVuaVwiLHk6XCJ1biBhblwiLHl5OlwiJWQgYW5pXCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18146\n')},70600:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(_){"use strict";function t(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var e=t(_),n="января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),s="январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),r="янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),o="янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_"),i=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/;function d(_,t,e){var n,s;return"m"===e?t?"минута":"минуту":_+" "+(n=+_,s={mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[e].split("_"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}var u=function(_,t){return i.test(t)?n[_.month()]:s[_.month()]};u.s=s,u.f=n;var a=function(_,t){return i.test(t)?r[_.month()]:o[_.month()]};a.s=o,a.f=r;var m={name:"ru",weekdays:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),months:u,monthsShort:a,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:d,mm:d,h:"час",hh:d,d:"день",dd:d,M:"месяц",MM:d,y:"год",yy:d},ordinal:function(_){return _},meridiem:function(_){return _<4?"ночи":_<12?"утра":_<17?"дня":"вечера"}};return e.default.locale(m,null,!0),m}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA2MDAuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLHNZQUFzWSxrQkFBa0IsUUFBUSxpREFBaUQsb0lBQW9JLDBGQUEwRixvQkFBb0IsNENBQTRDLFlBQVksb0JBQW9CLDRDQUE0QyxZQUFZLE9BQU8sMlBBQTJQLHdIQUF3SCxlQUFlLHVIQUF1SCxxQkFBcUIsU0FBUyxzQkFBc0Isb0RBQW9ELHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvcnUuanM/OWIzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oXyx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooXz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOl98fHNlbGYpLmRheWpzX2xvY2FsZV9ydT10KF8uZGF5anMpfSh0aGlzLChmdW5jdGlvbihfKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KF8pe3JldHVybiBfJiZcIm9iamVjdFwiPT10eXBlb2YgXyYmXCJkZWZhdWx0XCJpbiBfP186e2RlZmF1bHQ6X319dmFyIGU9dChfKSxuPVwi0Y/QvdCy0LDRgNGPX9GE0LXQstGA0LDQu9GPX9C80LDRgNGC0LBf0LDQv9GA0LXQu9GPX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LPRg9GB0YLQsF/RgdC10L3RgtGP0LHRgNGPX9C+0LrRgtGP0LHRgNGPX9C90L7Rj9Cx0YDRj1/QtNC10LrQsNCx0YDRj1wiLnNwbGl0KFwiX1wiKSxzPVwi0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMXCIuc3BsaXQoXCJfXCIpLHI9XCLRj9C90LIuX9GE0LXQstGALl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui5cIi5zcGxpdChcIl9cIiksbz1cItGP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgNGCX9Cw0L/RgC5f0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui5cIi5zcGxpdChcIl9cIiksaT0vRFtvRF0/KFxcW1teW1xcXV0qXFxdfFxccykrTU1NTT8vO2Z1bmN0aW9uIGQoXyx0LGUpe3ZhciBuLHM7cmV0dXJuXCJtXCI9PT1lP3Q/XCLQvNC40L3Rg9GC0LBcIjpcItC80LjQvdGD0YLRg1wiOl8rXCIgXCIrKG49K18scz17bW06dD9cItC80LjQvdGD0YLQsF/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRglwiOlwi0LzQuNC90YPRgtGDX9C80LjQvdGD0YLRi1/QvNC40L3Rg9GCXCIsaGg6XCLRh9Cw0YFf0YfQsNGB0LBf0YfQsNGB0L7QslwiLGRkOlwi0LTQtdC90Yxf0LTQvdGPX9C00L3QtdC5XCIsTU06XCLQvNC10YHRj9GGX9C80LXRgdGP0YbQsF/QvNC10YHRj9GG0LXQslwiLHl5Olwi0LPQvtC0X9Cz0L7QtNCwX9C70LXRglwifVtlXS5zcGxpdChcIl9cIiksbiUxMD09MSYmbiUxMDAhPTExP3NbMF06biUxMD49MiYmbiUxMDw9NCYmKG4lMTAwPDEwfHxuJTEwMD49MjApP3NbMV06c1syXSl9dmFyIHU9ZnVuY3Rpb24oXyx0KXtyZXR1cm4gaS50ZXN0KHQpP25bXy5tb250aCgpXTpzW18ubW9udGgoKV19O3Uucz1zLHUuZj1uO3ZhciBhPWZ1bmN0aW9uKF8sdCl7cmV0dXJuIGkudGVzdCh0KT9yW18ubW9udGgoKV06b1tfLm1vbnRoKCldfTthLnM9byxhLmY9cjt2YXIgbT17bmFtZTpcInJ1XCIsd2Vla2RheXM6XCLQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbQsF/RgdGD0LHQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0LLRgdC6X9C/0L3QtF/QstGC0YBf0YHRgNC0X9GH0YLQsl/Qv9GC0L1f0YHQsdGCXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSxtb250aHM6dSxtb250aHNTaG9ydDphLHdlZWtTdGFydDoxLHllYXJTdGFydDo0LGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVkg0LMuXCIsTExMOlwiRCBNTU1NIFlZWVkg0LMuLCBIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZINCzLiwgSDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItGH0LXRgNC10LcgJXNcIixwYXN0OlwiJXMg0L3QsNC30LDQtFwiLHM6XCLQvdC10YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0XCIsbTpkLG1tOmQsaDpcItGH0LDRgVwiLGhoOmQsZDpcItC00LXQvdGMXCIsZGQ6ZCxNOlwi0LzQtdGB0Y/RhlwiLE1NOmQseTpcItCz0L7QtFwiLHl5OmR9LG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LG1lcmlkaWVtOmZ1bmN0aW9uKF8pe3JldHVybiBfPDQ/XCLQvdC+0YfQuFwiOl88MTI/XCLRg9GC0YDQsFwiOl88MTc/XCLQtNC90Y9cIjpcItCy0LXRh9C10YDQsFwifX07cmV0dXJuIGUuZGVmYXVsdC5sb2NhbGUobSxudWxsLCEwKSxtfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///70600\n')},6509:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var u=e(a),t={name:"rw",weekdays:"Ku Cyumweru_Kuwa Mbere_Kuwa Kabiri_Kuwa Gatatu_Kuwa Kane_Kuwa Gatanu_Kuwa Gatandatu".split("_"),months:"Mutarama_Gashyantare_Werurwe_Mata_Gicurasi_Kamena_Nyakanga_Kanama_Nzeri_Ukwakira_Ugushyingo_Ukuboza".split("_"),relativeTime:{future:"mu %s",past:"%s",s:"amasegonda",m:"Umunota",mm:"%d iminota",h:"isaha",hh:"%d amasaha",d:"Umunsi",dd:"%d iminsi",M:"ukwezi",MM:"%d amezi",y:"umwaka",yy:"%d imyaka"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(a){return a}};return u.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYywwUEFBMFAsMktBQTJLLFVBQVUsaUhBQWlILHFCQUFxQixXQUFXLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvcncuanM/NGI4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oYSxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxlKTooYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmF8fHNlbGYpLmRheWpzX2xvY2FsZV9ydz1lKGEuZGF5anMpfSh0aGlzLChmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGEpe3JldHVybiBhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmXCJkZWZhdWx0XCJpbiBhP2E6e2RlZmF1bHQ6YX19dmFyIHU9ZShhKSx0PXtuYW1lOlwicndcIix3ZWVrZGF5czpcIkt1IEN5dW13ZXJ1X0t1d2EgTWJlcmVfS3V3YSBLYWJpcmlfS3V3YSBHYXRhdHVfS3V3YSBLYW5lX0t1d2EgR2F0YW51X0t1d2EgR2F0YW5kYXR1XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIk11dGFyYW1hX0dhc2h5YW50YXJlX1dlcnVyd2VfTWF0YV9HaWN1cmFzaV9LYW1lbmFfTnlha2FuZ2FfS2FuYW1hX056ZXJpX1Vrd2FraXJhX1VndXNoeWluZ29fVWt1Ym96YVwiLnNwbGl0KFwiX1wiKSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm11ICVzXCIscGFzdDpcIiVzXCIsczpcImFtYXNlZ29uZGFcIixtOlwiVW11bm90YVwiLG1tOlwiJWQgaW1pbm90YVwiLGg6XCJpc2FoYVwiLGhoOlwiJWQgYW1hc2FoYVwiLGQ6XCJVbXVuc2lcIixkZDpcIiVkIGltaW5zaVwiLE06XCJ1a3dlemlcIixNTTpcIiVkIGFtZXppXCIseTpcInVtd2FrYVwiLHl5OlwiJWQgaW15YWthXCJ9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LG9yZGluYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9fTtyZXR1cm4gdS5kZWZhdWx0LmxvY2FsZSh0LG51bGwsITApLHR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6509\n')},65437:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"sd",weekdays:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),months:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekStart:1,weekdaysShort:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),monthsShort:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekdaysMin:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU0MzcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdVpBQXVaLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSwwS0FBMEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zZC5qcz8zZTE3Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3NkPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJzZFwiLHdlZWtkYXlzOlwi2KLahtixX9iz2YjZhdixX9in2rHYp9ix2Yhf2KfYsdio2Llf2K7ZhdmK2LNf2KzZhdi5X9qH2Ybah9ixXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcItis2YbZiNix2Ypf2YHZitio2LHZiNix2Ypf2YXYp9ix2oZf2KfZvtix2YrZhF/Zhdim2Ypf2KzZiNmGX9is2YjZhNin2KHZkF/Yotqv2LPZvV/Ys9mK2b7ZvdmF2KjYsV/Yotqq2b3ZiNio2LFf2YbZiNmF2KjYsV/aitiz2YXYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLYotqG2LFf2LPZiNmF2LFf2Kfasdin2LHZiF/Yp9ix2KjYuV/YrtmF2YrYs1/YrNmF2Llf2ofZhtqH2LFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLYrNmG2YjYsdmKX9mB2YrYqNix2YjYsdmKX9mF2KfYsdqGX9in2b7YsdmK2YRf2YXYptmKX9is2YjZhl/YrNmI2YTYp9ih2ZBf2KLar9iz2b1f2LPZitm+2b3Zhdio2LFf2KLaqtm92YjYqNixX9mG2YjZhdio2LFf2orYs9mF2KjYsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItii2obYsV/Ys9mI2YXYsV/Yp9qx2KfYsdmIX9in2LHYqNi5X9iu2YXZitizX9is2YXYuV/ah9mG2ofYsVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDZvtmI2KFcIixwYXN0OlwiJXMg2Kfas1wiLHM6XCLahtmG2K8g2LPZitqq2YbailwiLG06XCLZh9qqINmF2YbZvVwiLG1tOlwiJWQg2YXZhtm9XCIsaDpcItmH2qog2qrZhNin2qpcIixoaDpcIiVkINqq2YTYp9qqXCIsZDpcItmH2qog2o/ZitmG2YfZhlwiLGRkOlwiJWQg2o/ZitmG2YfZhlwiLE06XCLZh9qqINmF2YfZitmG2YhcIixNTTpcIiVkINmF2YfZitmG2KdcIix5Olwi2YfaqiDYs9in2YRcIix5eTpcIiVkINiz2KfZhFwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///65437\n')},772:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),t={name:"se",weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),weekStart:1,weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"}};return n.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsS0FBb0Qsa0JBQWtCLG1CQUFPLENBQUMsS0FBTyxHQUFHLENBQTBJLENBQUMsbUJBQW1CLGFBQWEsY0FBYywrQ0FBK0MsV0FBVyxjQUFjLHVlQUF1ZSxTQUFTLFVBQVUsK0lBQStJLGVBQWUsdU5BQXVOLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvc2UuanM/NzExYyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxhKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1hKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxhKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9zZT1hKGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIG49YShlKSx0PXtuYW1lOlwic2VcIix3ZWVrZGF5czpcInNvdG5hYmVhaXZpX3Z1b3Nzw6FyZ2FfbWHFi8WLZWLDoXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2zDoXZ2YXJkYXRcIi5zcGxpdChcIl9cIiksbW9udGhzOlwib8SRxJFhamFnZW3DoW5udV9ndW92dmFtw6FubnVfbmp1a8SNYW3DoW5udV9jdW/Fi29tw6FubnVfbWllc3NlbcOhbm51X2dlYXNzZW3DoW5udV9zdW9pZG5lbcOhbm51X2JvcmdlbcOhbm51X8SNYWvEjWFtw6FubnVfZ29sZ2dvdG3DoW5udV9za8OhYm1hbcOhbm51X2p1b3ZsYW3DoW5udVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0Olwic290bl92dW9zX21hxYtfZ2Fza19kdW9yX2JlYXJfbMOhdlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIm/EkcSRal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfxI1ha8SNX2dvbGdfc2vDoWJfanVvdlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInNfdl9tX2dfZF9iX0xcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIk1NTU0gRC4gW2IuXSBZWVlZXCIsTExMOlwiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW1cIixMTExMOlwiZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBnZWHFvmVzXCIscGFzdDpcIm1hxYtpdCAlc1wiLHM6XCJtb2FkZGUgc2VrdW5kZGF0XCIsbTpcIm9rdGEgbWludWh0YVwiLG1tOlwiJWQgbWludWh0YXRcIixoOlwib2t0YSBkaWltbXVcIixoaDpcIiVkIGRpaW1tdXRcIixkOlwib2t0YSBiZWFpdmlcIixkZDpcIiVkIGJlYWl2dml0XCIsTTpcIm9rdGEgbcOhbm51XCIsTU06XCIlZCBtw6FudXRcIix5Olwib2t0YSBqYWhraVwiLHl5OlwiJWQgamFnaXRcIn19O3JldHVybiBuLmRlZmF1bHQubG9jYWxlKHQsbnVsbCwhMCksdH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n')},77109:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"si",weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),months:"දුරුතු_නවම්_මැදින්_බක්_වෙසක්_පොසොන්_ඇසළ_නිකිණි_බිනර_වප්_ඉල්_උඳුවප්".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන".split("_"),monthsShort:"දුරු_නව_මැදි_බක්_වෙස_පොසො_ඇස_නිකි_බින_වප්_ඉල්_උඳු".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්ර_සි_සෙ".split("_"),ordinal:function(_){return _},formats:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"විනාඩිය",mm:"විනාඩි %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcxMDkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMseVhBQXlYLFNBQVMsVUFBVSxnSUFBZ0ksZUFBZSxnS0FBZ0sscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zaS5qcz8zNTFjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3NpPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJzaVwiLHdlZWtkYXlzOlwi4LaJ4La74LeS4Lav4LePX+C3g+C2s+C3lOC2r+C3j1/gtoXgtp/gt4Tgtrvgt5Tgt4Dgt4/gtq/gt49f4La24Lav4LeP4Lav4LePX+C2tuC3iuKAjeC2u+C3hOC3g+C3iuC2tOC2reC3kuC2seC3iuC2r+C3j1/gt4Pgt5Lgtprgt5Tgtrvgt4/gtq/gt49f4LeD4LeZ4Lax4LeD4LeU4La74LeP4Lav4LePXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuC2r+C3lOC2u+C3lOC2reC3lF/gtrHgt4Dgtrjgt4pf4La44LeQ4Lav4LeS4Lax4LeKX+C2tuC2muC3il/gt4Dgt5ngt4Pgtprgt4pf4La04Lec4LeD4Lec4Lax4LeKX+C2h+C3g+C3hV/gtrHgt5Lgtprgt5Lgtqvgt5Jf4La24LeS4Lax4La7X+C3gOC2tOC3il/gtongtr3gt4pf4LaL4Laz4LeU4LeA4La04LeKXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgtongtrvgt5Jf4LeD4Laz4LeUX+C2heC2n1/gtrbgtq/gt49f4La24LeK4oCN4La74LeEX+C3g+C3kuC2muC3lF/gt4Pgt5ngtrFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgtq/gt5Tgtrvgt5Rf4Lax4LeAX+C2uOC3kOC2r+C3kl/gtrbgtprgt4pf4LeA4LeZ4LeDX+C2tOC3nOC3g+C3nF/gtofgt4Nf4Lax4LeS4Laa4LeSX+C2tuC3kuC2sV/gt4DgtrTgt4pf4LaJ4La94LeKX+C2i+C2s+C3lFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuC2iV/gt4Nf4LaFX+C2tl/gtrbgt4rigI3gtrtf4LeD4LeSX+C3g+C3mVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcImEgaDptbVwiLExUUzpcImEgaDptbTpzc1wiLEw6XCJZWVlZL01NL0REXCIsTEw6XCJZWVlZIE1NTU0gRFwiLExMTDpcIllZWVkgTU1NTSBELCBhIGg6bW1cIixMTExMOlwiWVlZWSBNTU1NIEQgW+C3gOC3kOC2seC3kl0gZGRkZCwgYSBoOm1tOnNzXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXPgtprgt5LgtrHgt4pcIixwYXN0OlwiJXPgtprgtqcg4La04LeZ4La7XCIsczpcIuC2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtrpcIixtOlwi4LeA4LeS4Lax4LeP4Lap4LeS4La6XCIsbW06XCLgt4Dgt5LgtrHgt4/gtqngt5IgJWRcIixoOlwi4La04LeQ4La6XCIsaGg6XCLgtrTgt5DgtrogJWRcIixkOlwi4Lav4LeS4Lax4La6XCIsZGQ6XCLgtq/gt5LgtrEgJWRcIixNOlwi4La44LeP4LeD4La6XCIsTU06XCLgtrjgt4/gt4MgJWRcIix5Olwi4LeA4LeD4La7XCIseXk6XCLgt4Dgt4PgtrsgJWRcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///77109\n')},35627:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e);function r(e){return e>1&&e<5&&1!=~~(e/10)}function o(e,t,n,o){var a=e+" ";switch(n){case"s":return t||o?"pár sekúnd":"pár sekundami";case"m":return t?"minúta":o?"minútu":"minútou";case"mm":return t||o?a+(r(e)?"minúty":"minút"):a+"minútami";case"h":return t?"hodina":o?"hodinu":"hodinou";case"hh":return t||o?a+(r(e)?"hodiny":"hodín"):a+"hodinami";case"d":return t||o?"deň":"dňom";case"dd":return t||o?a+(r(e)?"dni":"dní"):a+"dňami";case"M":return t||o?"mesiac":"mesiacom";case"MM":return t||o?a+(r(e)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return t||o?"rok":"rokom";case"yy":return t||o?a+(r(e)?"roky":"rokov"):a+"rokmi"}}var a={name:"sk",weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),months:"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),monthsShort:"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"pred %s",s:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o}};return n.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU2MjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLFdBQVcsY0FBYyw2QkFBNkIsb0JBQW9CLFlBQVksVUFBVSxpREFBaUQsK0NBQStDLDREQUE0RCwrQ0FBK0MsNERBQTRELGlDQUFpQyxvREFBb0Qsd0NBQXdDLGdFQUFnRSxrQ0FBa0Msd0RBQXdELE9BQU8sNllBQTZZLGFBQWEsVUFBVSw4SEFBOEgsZUFBZSxpRkFBaUYscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zay5qcz8zMDBiIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3NrPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgbj10KGUpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU+MSYmZTw1JiYxIT1+fihlLzEwKX1mdW5jdGlvbiBvKGUsdCxuLG8pe3ZhciBhPWUrXCIgXCI7c3dpdGNoKG4pe2Nhc2VcInNcIjpyZXR1cm4gdHx8bz9cInDDoXIgc2Vrw7puZFwiOlwicMOhciBzZWt1bmRhbWlcIjtjYXNlXCJtXCI6cmV0dXJuIHQ/XCJtaW7DunRhXCI6bz9cIm1pbsO6dHVcIjpcIm1pbsO6dG91XCI7Y2FzZVwibW1cIjpyZXR1cm4gdHx8bz9hKyhyKGUpP1wibWluw7p0eVwiOlwibWluw7p0XCIpOmErXCJtaW7DunRhbWlcIjtjYXNlXCJoXCI6cmV0dXJuIHQ/XCJob2RpbmFcIjpvP1wiaG9kaW51XCI6XCJob2Rpbm91XCI7Y2FzZVwiaGhcIjpyZXR1cm4gdHx8bz9hKyhyKGUpP1wiaG9kaW55XCI6XCJob2TDrW5cIik6YStcImhvZGluYW1pXCI7Y2FzZVwiZFwiOnJldHVybiB0fHxvP1wiZGXFiFwiOlwiZMWIb21cIjtjYXNlXCJkZFwiOnJldHVybiB0fHxvP2ErKHIoZSk/XCJkbmlcIjpcImRuw61cIik6YStcImTFiGFtaVwiO2Nhc2VcIk1cIjpyZXR1cm4gdHx8bz9cIm1lc2lhY1wiOlwibWVzaWFjb21cIjtjYXNlXCJNTVwiOnJldHVybiB0fHxvP2ErKHIoZSk/XCJtZXNpYWNlXCI6XCJtZXNpYWNvdlwiKTphK1wibWVzaWFjbWlcIjtjYXNlXCJ5XCI6cmV0dXJuIHR8fG8/XCJyb2tcIjpcInJva29tXCI7Y2FzZVwieXlcIjpyZXR1cm4gdHx8bz9hKyhyKGUpP1wicm9reVwiOlwicm9rb3ZcIik6YStcInJva21pXCJ9fXZhciBhPXtuYW1lOlwic2tcIix3ZWVrZGF5czpcIm5lZGXEvmFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV/FoXR2cnRva19waWF0b2tfc29ib3RhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJuZV9wb191dF9zdF/FoXRfcGlfc29cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJuZV9wb191dF9zdF/FoXRfcGlfc29cIi5zcGxpdChcIl9cIiksbW9udGhzOlwiamFudcOhcl9mZWJydcOhcl9tYXJlY19hcHLDrWxfbcOhal9qw7puX2rDumxfYXVndXN0X3NlcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHllYXJTdGFydDo0LG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCBELiBNTU1NIFlZWVkgSDptbVwiLGw6XCJELiBNLiBZWVlZXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiemEgJXNcIixwYXN0OlwicHJlZCAlc1wiLHM6byxtOm8sbW06byxoOm8saGg6byxkOm8sZGQ6byxNOm8sTU06byx5Om8seXk6b319O3JldHVybiBuLmRlZmF1bHQubG9jYWxlKGEsbnVsbCwhMCksYX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///35627\n')},82544:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),n={name:"sl",weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),weekStart:1,weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},relativeTime:{future:"čez %s",past:"pred %s",s:"nekaj sekund",m:"minuta",mm:"%d minut",h:"ura",hh:"%d ur",d:"dan",dd:"%d dni",M:"mesec",MM:"%d mesecev",y:"leto",yy:"%d let"}};return _.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI1NDQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsK1pBQStaLGFBQWEsVUFBVSxnSEFBZ0gsZUFBZSxpS0FBaUsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zbC5qcz84YmQ5Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3NsPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgXz10KGUpLG49e25hbWU6XCJzbFwiLHdlZWtkYXlzOlwibmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX8SNZXRydGVrX3BldGVrX3NvYm90YVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJqYW51YXJfZmVicnVhcl9tYXJlY19hcHJpbF9tYWpfanVuaWpfanVsaWpfYXZndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJuZWQuX3Bvbi5fdG9yLl9zcmUuX8SNZXQuX3BldC5fc29iLlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibmVfcG9fdG9fc3JfxI1lX3BlX3NvXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrXCIuXCJ9LGZvcm1hdHM6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLEjWV6ICVzXCIscGFzdDpcInByZWQgJXNcIixzOlwibmVrYWogc2VrdW5kXCIsbTpcIm1pbnV0YVwiLG1tOlwiJWQgbWludXRcIixoOlwidXJhXCIsaGg6XCIlZCB1clwiLGQ6XCJkYW5cIixkZDpcIiVkIGRuaVwiLE06XCJtZXNlY1wiLE1NOlwiJWQgbWVzZWNldlwiLHk6XCJsZXRvXCIseXk6XCIlZCBsZXRcIn19O3JldHVybiBfLmRlZmF1bHQubG9jYWxlKG4sbnVsbCwhMCksbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82544\n')},88341:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),n={name:"sq",weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),weekStart:1,weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"}};return _.default.locale(n,null,!0),n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgzNDEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1lBQXNZLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSx1TEFBdUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zcS5qcz85NmIwIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3NxPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgXz10KGUpLG49e25hbWU6XCJzcVwiLHdlZWtkYXlzOlwiRSBEaWVsX0UgSMOrbsOrX0UgTWFydMOrX0UgTcOrcmt1csOrX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1bsOrXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX07Dq250b3JfRGhqZXRvclwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiRGllX0jDq25fTWFyX03Dq3JfRW5qX1ByZV9TaHRcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fU2hrX01hcl9QcmlfTWFqX1Flcl9Lb3JfR3VzX1NodF9UZXRfTsOrbl9EaGpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEX0hfTWFfTcOrX0VfUF9TaFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm7DqyAlc1wiLHBhc3Q6XCIlcyBtw6sgcGFyw6tcIixzOlwiZGlzYSBzZWtvbmRhXCIsbTpcIm5qw6sgbWludXTDq1wiLG1tOlwiJWQgbWludXRhXCIsaDpcIm5qw6sgb3LDq1wiLGhoOlwiJWQgb3LDq1wiLGQ6XCJuasOrIGRpdMOrXCIsZGQ6XCIlZCBkaXTDq1wiLE06XCJuasOrIG11YWpcIixNTTpcIiVkIG11YWpcIix5OlwibmrDqyB2aXRcIix5eTpcIiVkIHZpdGVcIn19O3JldHVybiBfLmRlZmF1bHQubG9jYWxlKG4sbnVsbCwhMCksbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///88341\n')},37101:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e),a={words:{m:["један минут","једног минута"],mm:["%d минут","%d минута","%d минута"],h:["један сат","једног сата"],hh:["%d сат","%d сата","%d сати"],d:["један дан","једног дана"],dd:["%d дан","%d дана","%d дана"],M:["један месец","једног месеца"],MM:["%d месец","%d месеца","%d месеци"],y:["једну годину","једне године"],yy:["%d годину","%d године","%d година"]},correctGrammarCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},relativeTimeFormatter:function(e,t,r,d){var i=a.words[r];if(1===r.length)return"y"===r&&t?"једна година":d||t?i[0]:i[1];var m=a.correctGrammarCase(e,i);return"yy"===r&&t&&"%d годину"===m?e+" година":m.replace("%d",e)}},d={name:"sr-cyrl",weekdays:"Недеља_Понедељак_Уторак_Среда_Четвртак_Петак_Субота".split("_"),weekdaysShort:"Нед._Пон._Уто._Сре._Чет._Пет._Суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),months:"Јануар_Фебруар_Март_Април_Мај_Јун_Јул_Август_Септембар_Октобар_Новембар_Децембар".split("_"),monthsShort:"Јан._Феб._Мар._Апр._Мај_Јун_Јул_Авг._Сеп._Окт._Нов._Дец.".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:a.relativeTimeFormatter,mm:a.relativeTimeFormatter,h:a.relativeTimeFormatter,hh:a.relativeTimeFormatter,d:a.relativeTimeFormatter,dd:a.relativeTimeFormatter,M:a.relativeTimeFormatter,MM:a.relativeTimeFormatter,y:a.relativeTimeFormatter,yy:a.relativeTimeFormatter},ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"}};return r.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxMDEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBK0ksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsT0FBTywrVkFBK1Ysa0NBQWtDLHNFQUFzRSx5Q0FBeUMsaUJBQWlCLCtEQUErRCxnQ0FBZ0Msa0VBQWtFLElBQUksc1pBQXNaLDJUQUEyVCxxQkFBcUIsYUFBYSxVQUFVLHNIQUFzSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3NyLWN5cmwuanM/YTBmZCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9zcl9jeXJsPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgcj10KGUpLGE9e3dvcmRzOnttOltcItGY0LXQtNCw0L0g0LzQuNC90YPRglwiLFwi0ZjQtdC00L3QvtCzINC80LjQvdGD0YLQsFwiXSxtbTpbXCIlZCDQvNC40L3Rg9GCXCIsXCIlZCDQvNC40L3Rg9GC0LBcIixcIiVkINC80LjQvdGD0YLQsFwiXSxoOltcItGY0LXQtNCw0L0g0YHQsNGCXCIsXCLRmNC10LTQvdC+0LMg0YHQsNGC0LBcIl0saGg6W1wiJWQg0YHQsNGCXCIsXCIlZCDRgdCw0YLQsFwiLFwiJWQg0YHQsNGC0LhcIl0sZDpbXCLRmNC10LTQsNC9INC00LDQvVwiLFwi0ZjQtdC00L3QvtCzINC00LDQvdCwXCJdLGRkOltcIiVkINC00LDQvVwiLFwiJWQg0LTQsNC90LBcIixcIiVkINC00LDQvdCwXCJdLE06W1wi0ZjQtdC00LDQvSDQvNC10YHQtdGGXCIsXCLRmNC10LTQvdC+0LMg0LzQtdGB0LXRhtCwXCJdLE1NOltcIiVkINC80LXRgdC10YZcIixcIiVkINC80LXRgdC10YbQsFwiLFwiJWQg0LzQtdGB0LXRhtC4XCJdLHk6W1wi0ZjQtdC00L3RgyDQs9C+0LTQuNC90YNcIixcItGY0LXQtNC90LUg0LPQvtC00LjQvdC1XCJdLHl5OltcIiVkINCz0L7QtNC40L3Rg1wiLFwiJWQg0LPQvtC00LjQvdC1XCIsXCIlZCDQs9C+0LTQuNC90LBcIl19LGNvcnJlY3RHcmFtbWFyQ2FzZTpmdW5jdGlvbihlLHQpe3JldHVybiBlJTEwPj0xJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/ZSUxMD09MT90WzBdOnRbMV06dFsyXX0scmVsYXRpdmVUaW1lRm9ybWF0dGVyOmZ1bmN0aW9uKGUsdCxyLGQpe3ZhciBpPWEud29yZHNbcl07aWYoMT09PXIubGVuZ3RoKXJldHVyblwieVwiPT09ciYmdD9cItGY0LXQtNC90LAg0LPQvtC00LjQvdCwXCI6ZHx8dD9pWzBdOmlbMV07dmFyIG09YS5jb3JyZWN0R3JhbW1hckNhc2UoZSxpKTtyZXR1cm5cInl5XCI9PT1yJiZ0JiZcIiVkINCz0L7QtNC40L3Rg1wiPT09bT9lK1wiINCz0L7QtNC40L3QsFwiOm0ucmVwbGFjZShcIiVkXCIsZSl9fSxkPXtuYW1lOlwic3ItY3lybFwiLHdlZWtkYXlzOlwi0J3QtdC00LXRmdCwX9Cf0L7QvdC10LTQtdGZ0LDQul/Qo9GC0L7RgNCw0Lpf0KHRgNC10LTQsF/Qp9C10YLQstGA0YLQsNC6X9Cf0LXRgtCw0Lpf0KHRg9Cx0L7RgtCwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLQndC10LQuX9Cf0L7QvS5f0KPRgtC+Ll/QodGA0LUuX9Cn0LXRgi5f0J/QtdGCLl/QodGD0LEuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRg1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLQiNCw0L3Rg9Cw0YBf0KTQtdCx0YDRg9Cw0YBf0JzQsNGA0YJf0JDQv9GA0LjQu1/QnNCw0Zhf0IjRg9C9X9CI0YPQu1/QkNCy0LPRg9GB0YJf0KHQtdC/0YLQtdC80LHQsNGAX9Ce0LrRgtC+0LHQsNGAX9Cd0L7QstC10LzQsdCw0YBf0JTQtdGG0LXQvNCx0LDRgFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItCI0LDQvS5f0KTQtdCxLl/QnNCw0YAuX9CQ0L/RgC5f0JzQsNGYX9CI0YPQvV/QiNGD0Ltf0JDQstCzLl/QodC10L8uX9Ce0LrRgi5f0J3QvtCyLl/QlNC10YYuXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi0LfQsCAlc1wiLHBhc3Q6XCLQv9GA0LUgJXNcIixzOlwi0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuFwiLG06YS5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIsbW06YS5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIsaDphLnJlbGF0aXZlVGltZUZvcm1hdHRlcixoaDphLnJlbGF0aXZlVGltZUZvcm1hdHRlcixkOmEucmVsYXRpdmVUaW1lRm9ybWF0dGVyLGRkOmEucmVsYXRpdmVUaW1lRm9ybWF0dGVyLE06YS5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIsTU06YS5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIseTphLnJlbGF0aXZlVGltZUZvcm1hdHRlcix5eTphLnJlbGF0aXZlVGltZUZvcm1hdHRlcn0sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIi5cIn0sZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJELiBNLiBZWVlZLlwiLExMOlwiRC4gTU1NTSBZWVlZLlwiLExMTDpcIkQuIE1NTU0gWVlZWS4gSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW1cIn19O3JldHVybiByLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37101\n')},50617:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),r={words:{m:["jedan minut","jednog minuta"],mm:["%d minut","%d minuta","%d minuta"],h:["jedan sat","jednog sata"],hh:["%d sat","%d sata","%d sati"],d:["jedan dan","jednog dana"],dd:["%d dan","%d dana","%d dana"],M:["jedan mesec","jednog meseca"],MM:["%d mesec","%d meseca","%d meseci"],y:["jednu godinu","jedne godine"],yy:["%d godinu","%d godine","%d godina"]},correctGrammarCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},relativeTimeFormatter:function(e,t,a,d){var n=r.words[a];if(1===a.length)return"y"===a&&t?"jedna godina":d||t?n[0]:n[1];var i=r.correctGrammarCase(e,n);return"yy"===a&&t&&"%d godinu"===i?e+" godina":i.replace("%d",e)}},d={name:"sr",weekdays:"Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota".split("_"),weekdaysShort:"Ned._Pon._Uto._Sre._Čet._Pet._Sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),months:"Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar".split("_"),monthsShort:"Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.".split("_"),weekStart:1,relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:r.relativeTimeFormatter,mm:r.relativeTimeFormatter,h:r.relativeTimeFormatter,hh:r.relativeTimeFormatter,d:r.relativeTimeFormatter,dd:r.relativeTimeFormatter,M:r.relativeTimeFormatter,MM:r.relativeTimeFormatter,y:r.relativeTimeFormatter,yy:r.relativeTimeFormatter},ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"}};return a.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA2MTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsT0FBTywrVkFBK1Ysa0NBQWtDLHNFQUFzRSx5Q0FBeUMsaUJBQWlCLCtEQUErRCxnQ0FBZ0Msa0VBQWtFLElBQUksbVpBQW1aLDJUQUEyVCxxQkFBcUIsYUFBYSxVQUFVLHNIQUFzSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3NyLmpzP2M3MjciXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sdCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfc3I9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciBhPXQoZSkscj17d29yZHM6e206W1wiamVkYW4gbWludXRcIixcImplZG5vZyBtaW51dGFcIl0sbW06W1wiJWQgbWludXRcIixcIiVkIG1pbnV0YVwiLFwiJWQgbWludXRhXCJdLGg6W1wiamVkYW4gc2F0XCIsXCJqZWRub2cgc2F0YVwiXSxoaDpbXCIlZCBzYXRcIixcIiVkIHNhdGFcIixcIiVkIHNhdGlcIl0sZDpbXCJqZWRhbiBkYW5cIixcImplZG5vZyBkYW5hXCJdLGRkOltcIiVkIGRhblwiLFwiJWQgZGFuYVwiLFwiJWQgZGFuYVwiXSxNOltcImplZGFuIG1lc2VjXCIsXCJqZWRub2cgbWVzZWNhXCJdLE1NOltcIiVkIG1lc2VjXCIsXCIlZCBtZXNlY2FcIixcIiVkIG1lc2VjaVwiXSx5OltcImplZG51IGdvZGludVwiLFwiamVkbmUgZ29kaW5lXCJdLHl5OltcIiVkIGdvZGludVwiLFwiJWQgZ29kaW5lXCIsXCIlZCBnb2RpbmFcIl19LGNvcnJlY3RHcmFtbWFyQ2FzZTpmdW5jdGlvbihlLHQpe3JldHVybiBlJTEwPj0xJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/ZSUxMD09MT90WzBdOnRbMV06dFsyXX0scmVsYXRpdmVUaW1lRm9ybWF0dGVyOmZ1bmN0aW9uKGUsdCxhLGQpe3ZhciBuPXIud29yZHNbYV07aWYoMT09PWEubGVuZ3RoKXJldHVyblwieVwiPT09YSYmdD9cImplZG5hIGdvZGluYVwiOmR8fHQ/blswXTpuWzFdO3ZhciBpPXIuY29ycmVjdEdyYW1tYXJDYXNlKGUsbik7cmV0dXJuXCJ5eVwiPT09YSYmdCYmXCIlZCBnb2RpbnVcIj09PWk/ZStcIiBnb2RpbmFcIjppLnJlcGxhY2UoXCIlZFwiLGUpfX0sZD17bmFtZTpcInNyXCIsd2Vla2RheXM6XCJOZWRlbGphX1BvbmVkZWxqYWtfVXRvcmFrX1NyZWRhX8SMZXR2cnRha19QZXRha19TdWJvdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIk5lZC5fUG9uLl9VdG8uX1NyZS5fxIxldC5fUGV0Ll9TdWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibmVfcG9fdXRfc3JfxI1lX3BlX3N1XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcl9GZWJydWFyX01hcnRfQXByaWxfTWFqX0p1bl9KdWxfQXZndXN0X1NlcHRlbWJhcl9Pa3RvYmFyX05vdmVtYmFyX0RlY2VtYmFyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuLl9GZWIuX01hci5fQXByLl9NYWpfSnVuX0p1bF9BdmcuX1NlcC5fT2t0Ll9Ob3YuX0RlYy5cIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEscmVsYXRpdmVUaW1lOntmdXR1cmU6XCJ6YSAlc1wiLHBhc3Q6XCJwcmUgJXNcIixzOlwibmVrb2xpa28gc2VrdW5kaVwiLG06ci5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIsbW06ci5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIsaDpyLnJlbGF0aXZlVGltZUZvcm1hdHRlcixoaDpyLnJlbGF0aXZlVGltZUZvcm1hdHRlcixkOnIucmVsYXRpdmVUaW1lRm9ybWF0dGVyLGRkOnIucmVsYXRpdmVUaW1lRm9ybWF0dGVyLE06ci5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIsTU06ci5yZWxhdGl2ZVRpbWVGb3JtYXR0ZXIseTpyLnJlbGF0aXZlVGltZUZvcm1hdHRlcix5eTpyLnJlbGF0aXZlVGltZUZvcm1hdHRlcn0sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZStcIi5cIn0sZm9ybWF0czp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJELiBNLiBZWVlZLlwiLExMOlwiRC4gTU1NTSBZWVlZLlwiLExMTDpcIkQuIE1NTU0gWVlZWS4gSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW1cIn19O3JldHVybiBhLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50617\n')},64127:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(e),i={name:"ss",weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),months:"Bhimbidvwane_Indlovana_Indlov\'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),weekStart:1,weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"}};return a.default.locale(i,null,!0),i}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdWJBQXViLFNBQVMsVUFBVSxxSEFBcUgsZUFBZSw0TUFBNE0scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zcy5qcz8yOGQwIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3NzPW4oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgYT1uKGUpLGk9e25hbWU6XCJzc1wiLHdlZWtkYXlzOlwiTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsb1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJCaGltYmlkdndhbmVfSW5kbG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdla2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5nY2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWdcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkxpX1VzX0xiX0x0X0xzX0xoX1VnXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm5nYSAlc1wiLHBhc3Q6XCJ3ZW50ZWthIG5nYSAlc1wiLHM6XCJlbWl6dXp3YW5hIGxvbWNhbmVcIixtOlwidW16dXp1XCIsbW06XCIlZCBlbWl6dXp1XCIsaDpcImxpaG9yYVwiLGhoOlwiJWQgZW1haG9yYVwiLGQ6XCJsaWxhbmdhXCIsZGQ6XCIlZCBlbWFsYW5nYVwiLE06XCJpbnlhbmdhXCIsTU06XCIlZCB0aW55YW5nYVwiLHk6XCJ1bW55YWthXCIseXk6XCIlZCBpbWlueWFrYVwifX07cmV0dXJuIGEuZGVmYXVsdC5sb2NhbGUoaSxudWxsLCEwKSxpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///64127\n')},19911:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),d={name:"sv-fi",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var t=e%10;return"["+e+(1===t||2===t?"a":"e")+"]"},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY, [kl.] HH.mm",LLLL:"dddd, D. MMMM YYYY, [kl.] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [kl.] HH.mm",llll:"ddd, D. MMM YYYY, [kl.] HH.mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return a.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk5MTEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMseVpBQXlaLFdBQVcsdUNBQXVDLFVBQVUsb09BQW9PLGVBQWUsNkxBQTZMLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvc3YtZmkuanM/NThlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9zdl9maT10KGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIGE9dChlKSxkPXtuYW1lOlwic3YtZmlcIix3ZWVrZGF5czpcInPDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInPDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2clwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInPDtl9tw6VfdGlfb25fdG9fZnJfbMO2XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuXCJbXCIrZSsoMT09PXR8fDI9PT10P1wiYVwiOlwiZVwiKStcIl1cIn0sZm9ybWF0czp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSwgW2tsLl0gSEgubW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZLCBba2wuXSBISC5tbVwiLGw6XCJELk0uWVlZWVwiLGxsOlwiRC4gTU1NIFlZWVlcIixsbGw6XCJELiBNTU0gWVlZWSwgW2tsLl0gSEgubW1cIixsbGxsOlwiZGRkLCBELiBNTU0gWVlZWSwgW2tsLl0gSEgubW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvbSAlc1wiLHBhc3Q6XCJmw7ZyICVzIHNlZGFuXCIsczpcIm7DpWdyYSBzZWt1bmRlclwiLG06XCJlbiBtaW51dFwiLG1tOlwiJWQgbWludXRlclwiLGg6XCJlbiB0aW1tZVwiLGhoOlwiJWQgdGltbWFyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnYXJcIixNOlwiZW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRlclwiLHk6XCJldHQgw6VyXCIseXk6XCIlZCDDpXJcIn19O3JldHVybiBhLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19911\n')},91876:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),d={name:"sv",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var t=e%10;return"["+e+(1===t||2===t?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return a.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTE4NzYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1pBQXNaLFdBQVcsdUNBQXVDLFVBQVUsK0tBQStLLGVBQWUsNkxBQTZMLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvc3YuanM/MTUyYiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9zdj10KGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIGE9dChlKSxkPXtuYW1lOlwic3ZcIix3ZWVrZGF5czpcInPDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInPDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2clwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInPDtl9tw6VfdGlfb25fdG9fZnJfbMO2XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuXCJbXCIrZSsoMT09PXR8fDI9PT10P1wiYVwiOlwiZVwiKStcIl1cIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbVwiLGxsbDpcIkQgTU1NIFlZWVkgSEg6bW1cIixsbGxsOlwiZGRkIEQgTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvbSAlc1wiLHBhc3Q6XCJmw7ZyICVzIHNlZGFuXCIsczpcIm7DpWdyYSBzZWt1bmRlclwiLG06XCJlbiBtaW51dFwiLG1tOlwiJWQgbWludXRlclwiLGg6XCJlbiB0aW1tZVwiLGhoOlwiJWQgdGltbWFyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnYXJcIixNOlwiZW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRlclwiLHk6XCJldHQgw6VyXCIseXk6XCIlZCDDpXJcIn19O3JldHVybiBhLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91876\n')},46148:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var i=e(a),t={name:"sw",weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekStart:1,ordinal:function(a){return a},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return i.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYxNDguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1pBQXNaLFNBQVMsZUFBZSx3TUFBd00sVUFBVSxtSEFBbUgscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS9zdy5qcz84Njk2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX3N3PWUoYS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZcImRlZmF1bHRcImluIGE/YTp7ZGVmYXVsdDphfX12YXIgaT1lKGEpLHQ9e25hbWU6XCJzd1wiLHdlZWtkYXlzOlwiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2lcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkpwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3NcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJKMl9KM19KNF9KNV9BbF9Jal9KMVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLG9yZGluYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgYmFhZGF5ZVwiLHBhc3Q6XCJ0b2tlYSAlc1wiLHM6XCJoaXZpIHB1bmRlXCIsbTpcImRha2lrYSBtb2phXCIsbW06XCJkYWtpa2EgJWRcIixoOlwic2FhIGxpbW9qYVwiLGhoOlwibWFzYWEgJWRcIixkOlwic2lrdSBtb2phXCIsZGQ6XCJtYXNpa3UgJWRcIixNOlwibXdlemkgbW1vamFcIixNTTpcIm1pZXppICVkXCIseTpcIm13YWthIG1tb2phXCIseXk6XCJtaWFrYSAlZFwifSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifX07cmV0dXJuIGkuZGVmYXVsdC5sb2NhbGUodCxudWxsLCEwKSx0fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46148\n')},55596:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ta",weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OTYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc2VBQXNlLFNBQVMsVUFBVSxtSEFBbUgsZUFBZSwwTkFBME4scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90YS5qcz9hZWExIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3RhPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJ0YVwiLHdlZWtkYXlzOlwi4K6e4K6+4K6v4K6/4K6x4K+N4K6x4K+B4K6V4K+N4K6V4K6/4K604K6u4K+IX+CupOCuv+CumeCvjeCuleCun+CvjeCuleCuv+CutOCuruCviF/grprgr4bgrrXgr43grrXgrr7grq/gr43grpXgrr/grrTgrq7gr4hf4K6q4K+B4K6k4K6p4K+N4K6V4K6/4K604K6u4K+IX+CuteCuv+Cur+CuvuCutOCuleCvjeCuleCuv+CutOCuruCviF/grrXgr4bgrrPgr43grrPgrr/grpXgr43grpXgrr/grrTgrq7gr4hf4K6a4K6p4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuCunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgrp7grr7grq/grr/grrHgr4Ff4K6k4K6/4K6Z4K+N4K6V4K6z4K+NX+CumuCvhuCuteCvjeCuteCuvuCur+CvjV/grqrgr4HgrqTgrqngr41f4K614K6/4K6v4K6+4K604K6p4K+NX+CuteCvhuCus+CvjeCus+Cuv1/grprgrqngrr9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+CumlwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSwgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4K6H4K6y4K+NXCIscGFzdDpcIiVzIOCuruCvgeCuqeCvjVwiLHM6XCLgrpLgrrDgr4Eg4K6a4K6/4K6yIOCuteCuv+CuqOCuvuCun+Cuv+CuleCus+CvjVwiLG06XCLgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NXCIsbW06XCIlZCDgrqjgrr/grq7grr/grp/grpngr43grpXgrrPgr41cIixoOlwi4K6S4K6w4K+BIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr41cIixoaDpcIiVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr41cIixkOlwi4K6S4K6w4K+BIOCuqOCuvuCus+CvjVwiLGRkOlwiJWQg4K6o4K6+4K6f4K+N4K6V4K6z4K+NXCIsTTpcIuCukuCusOCvgSDgrq7grr7grqTgrq7gr41cIixNTTpcIiVkIOCuruCuvuCupOCumeCvjeCuleCus+CvjVwiLHk6XCLgrpLgrrDgr4Eg4K614K6w4K+B4K6f4K6u4K+NXCIseXk6XCIlZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr41cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///55596\n')},45159:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"te",weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDUxNTkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMlpBQTJaLFNBQVMsVUFBVSx1SEFBdUgsZUFBZSxvTUFBb00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90ZS5qcz82Mjc2Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3RlPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJ0ZVwiLHdlZWtkYXlzOlwi4LCG4LCm4LC/4LC14LC+4LCw4LCCX+CwuOCxi+CwruCwteCwvuCwsOCwgl/gsK7gsILgsJfgsLPgsLXgsL7gsLDgsIJf4LCs4LGB4LCn4LC14LC+4LCw4LCCX+Cwl+CxgeCwsOCxgeCwteCwvuCwsOCwgl/gsLbgsYHgsJXgsY3gsLDgsLXgsL7gsLDgsIJf4LC24LCo4LC/4LC14LC+4LCw4LCCXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuCwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgsIbgsKbgsL9f4LC44LGL4LCuX+CwruCwguCwl+Cws1/gsKzgsYHgsKdf4LCX4LGB4LCw4LGBX+CwtuCxgeCwleCxjeCwsF/gsLbgsKjgsL9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgsJzgsKguX+Cwq+Cwv+CwrOCxjeCwsC5f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwvy5f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCXLl/gsLjgsYbgsKrgsY0uX+CwheCwleCxjeCwn+Cxiy5f4LCo4LC1Ll/gsKHgsL/gsLjgsYYuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4LCGX+CwuOCxi1/gsK7gsIJf4LCs4LGBX+Cwl+CxgV/gsLbgsYFf4LC2XCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4LCy4LGLXCIscGFzdDpcIiVzIOCwleCxjeCwsOCwv+CwpOCwglwiLHM6XCLgsJXgsYrgsKjgsY3gsKjgsL8g4LCV4LGN4LC34LCj4LC+4LCy4LGBXCIsbTpcIuCwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIJcIixtbTpcIiVkIOCwqOCwv+CwruCwv+Cwt+CwvuCwsuCxgVwiLGg6XCLgsJLgsJUg4LCX4LCC4LCfXCIsaGg6XCIlZCDgsJfgsILgsJ/gsLLgsYFcIixkOlwi4LCS4LCVIOCwsOCxi+CwnOCxgVwiLGRkOlwiJWQg4LCw4LGL4LCc4LGB4LCy4LGBXCIsTTpcIuCwkuCwlSDgsKjgsYbgsLJcIixNTTpcIiVkIOCwqOCxhuCwsuCwsuCxgVwiLHk6XCLgsJLgsJUg4LC44LCC4LC14LCk4LGN4LC44LCw4LCCXCIseXk6XCIlZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYFcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45159\n')},99157:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=t(e),a={name:"tet",weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),weekStart:1,weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"}};return u.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsZ1pBQWdaLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSwrTEFBK0wscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90ZXQuanM/M2EzYyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV90ZXQ9dChlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB1PXQoZSksYT17bmFtZTpcInRldFwiLHdlZWtkYXlzOlwiRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHVcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFuZWlydV9GZXZlcmVpcnVfTWFyc3VfQWJyaWxfTWFpdV9KdcOxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3ZlbWJydV9EZXplbWJydVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEb19TZWdfVGVfS3VfS2lfU2VzX1NhXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaWhhICVzXCIscGFzdDpcIiVzIGxpdWJhXCIsczpcIm1pbnV0dSBiYWx1blwiLG06XCJtaW51dHUgaWRhXCIsbW06XCJtaW51dHUgJWRcIixoOlwib3JhcyBpZGFcIixoaDpcIm9yYXMgJWRcIixkOlwibG9yb24gaWRhXCIsZGQ6XCJsb3JvbiAlZFwiLE06XCJmdWxhbiBpZGFcIixNTTpcImZ1bGFuICVkXCIseTpcInRpbmFuIGlkYVwiLHl5OlwidGluYW4gJWRcIn19O3JldHVybiB1LmRlZmF1bHQubG9jYWxlKGEsbnVsbCwhMCksYX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99157\n')},9928:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"tg",weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkyOC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyxnWUFBZ1ksU0FBUyxVQUFVLGlIQUFpSCxlQUFlLDhLQUE4SyxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3RnLmpzPzUxMTUiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfdGc9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcInRnXCIsd2Vla2RheXM6XCLRj9C60YjQsNC90LHQtV/QtNGD0YjQsNC90LHQtV/RgdC10YjQsNC90LHQtV/Rh9C+0YDRiNCw0L3QsdC1X9C/0LDQvdK30YjQsNC90LHQtV/St9GD0LzRitCwX9GI0LDQvdCx0LVcIi5zcGxpdChcIl9cIiksbW9udGhzOlwi0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLRj9GI0LFf0LTRiNCxX9GB0YjQsV/Rh9GI0LFf0L/RiNCxX9K30YPQvF/RiNC90LFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQulwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItGP0Yhf0LTRiF/RgdGIX9GH0Yhf0L/RiF/St9C8X9GI0LFcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihfKXtyZXR1cm4gX30sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLQsdCw0YrQtNC4ICVzXCIscGFzdDpcIiVzINC/0LXRiFwiLHM6XCLRj9C60YfQsNC90LQg0YHQvtC90LjRj1wiLG06XCLRj9C6INC00LDSm9C40pvQsFwiLG1tOlwiJWQg0LTQsNKb0LjSm9CwXCIsaDpcItGP0Log0YHQvtCw0YJcIixoaDpcIiVkINGB0L7QsNGCXCIsZDpcItGP0Log0YDTr9C3XCIsZGQ6XCIlZCDRgNOv0LdcIixNOlwi0Y/QuiDQvNC+0rNcIixNTTpcIiVkINC80L7Ss1wiLHk6XCLRj9C6INGB0L7Qu1wiLHl5OlwiJWQg0YHQvtC7XCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9928\n')},62019:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"th",weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"},ordinal:function(_){return _+"."}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjIwMTkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNlpBQTZaLDRIQUE0SCxlQUFlLDRLQUE0SyxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3RoLmpzP2UyNzEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfdGg9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcInRoXCIsd2Vla2RheXM6XCLguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYxcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuC4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKpf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuC4reC4si5f4LiILl/guK0uX+C4ni5f4Lie4LikLl/guKguX+C4qi5cIi5zcGxpdChcIl9cIiksbW9udGhzOlwi4Lih4LiB4Lij4Liy4LiE4LihX+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jF/guKHguLXguJnguLLguITguKFf4LmA4Lih4Lip4Liy4Lii4LiZX+C4nuC4pOC4qeC4oOC4suC4hOC4oV/guKHguLTguJbguLjguJnguLLguKLguJlf4LiB4Lij4LiB4LiO4Liy4LiE4LihX+C4quC4tOC4h+C4q+C4suC4hOC4oV/guIHguLHguJnguKLguLLguKLguJlf4LiV4Li44Lil4Liy4LiE4LihX+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mV/guJjguLHguJnguKfguLLguITguKFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLguKEu4LiELl/guIEu4LieLl/guKHguLUu4LiELl/guYDguKEu4LiiLl/guJ4u4LiELl/guKHguLQu4LiiLl/guIEu4LiELl/guKou4LiELl/guIEu4LiiLl/guJUu4LiELl/guJ4u4LiiLl/guJgu4LiELlwiLnNwbGl0KFwiX1wiKSxmb3JtYXRzOntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW1cIixMTExMOlwi4Lin4Lix4LiZZGRkZOC4l+C4teC5iCBEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIuC4reC4teC4gSAlc1wiLHBhc3Q6XCIlc+C4l+C4teC5iOC5geC4peC5ieC4p1wiLHM6XCLguYTguKHguYjguIHguLXguYjguKfguLTguJnguLLguJfguLVcIixtOlwiMSDguJnguLLguJfguLVcIixtbTpcIiVkIOC4meC4suC4l+C4tVwiLGg6XCIxIOC4iuC4seC5iOC4p+C5guC4oeC4h1wiLGhoOlwiJWQg4LiK4Lix4LmI4Lin4LmC4Lih4LiHXCIsZDpcIjEg4Lin4Lix4LiZXCIsZGQ6XCIlZCDguKfguLHguJlcIixNOlwiMSDguYDguJTguLfguK3guJlcIixNTTpcIiVkIOC5gOC4lOC4t+C4reC4mVwiLHk6XCIxIOC4m+C4tVwiLHl5OlwiJWQg4Lib4Li1XCJ9LG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF8rXCIuXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///62019\n')},75817:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),_={name:"tk",weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e){return e+"."}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzU4MTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMFhBQTBYLGlIQUFpSCxlQUFlLDhLQUE4SyxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3RrLmpzPzYyNzYiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbil7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9bihyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sbik6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfdGs9bihlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PW4oZSksXz17bmFtZTpcInRrXCIsd2Vla2RheXM6XCLDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLDnWVrX0R1xZ9fU2nFn1/Dh2FyX1Blbl9Bbm5fxZ5lblwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIsOda19ExZ9fU8WfX8OHcl9Qbl9Bbl/Fnm5cIi5zcGxpdChcIl9cIiksbW9udGhzOlwiw51hbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYcO9X0nDvXVuX0nDvXVsX0F3Z3VzdF9TZW50w71hYnJfT2t0w71hYnJfTm/DvWFicl9EZWthYnJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLDnWFuX0Zld19NYXJfQXByX01hw71fScO9bl9Jw71sX0F3Z19TZW5fT2t0X05vw71fRGVrXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgc2/FiFwiLHBhc3Q6XCIlcyDDtsWIXCIsczpcImJpcm7DpMOnZSBzZWt1bnRcIixtOlwiYmlyIG1pbnV0XCIsbW06XCIlZCBtaW51dFwiLGg6XCJiaXIgc2FnYXRcIixoaDpcIiVkIHNhZ2F0XCIsZDpcImJpciBnw7xuXCIsZGQ6XCIlZCBnw7xuXCIsTTpcImJpciBhw71cIixNTTpcIiVkIGHDvVwiLHk6XCJiaXIgw715bFwiLHl5OlwiJWQgw715bFwifSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlK1wiLlwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoXyxudWxsLCEwKSxffSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///75817\n')},46513:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,a){ true?module.exports=a(__webpack_require__(27484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),t={name:"tl-ph",weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),weekStart:1,weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"}};return n.default.locale(t,null,!0),t}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY1MTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscVpBQXFaLFNBQVMsVUFBVSxvSEFBb0gsZUFBZSxxTkFBcU4scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90bC1waC5qcz9kYzFhIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLGEpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWEocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGEpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3RsX3BoPWEoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgbj1hKGUpLHQ9e25hbWU6XCJ0bC1waFwiLHdlZWtkYXlzOlwiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZVwiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx3ZWVrZGF5c1Nob3J0OlwiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJMaV9MdV9NYV9NaV9IdV9CaV9TYWJcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIk1NL0QvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJzYSBsb29iIG5nICVzXCIscGFzdDpcIiVzIGFuZyBuYWthbGlwYXNcIixzOlwiaWxhbmcgc2VndW5kb1wiLG06XCJpc2FuZyBtaW51dG9cIixtbTpcIiVkIG1pbnV0b1wiLGg6XCJpc2FuZyBvcmFzXCIsaGg6XCIlZCBvcmFzXCIsZDpcImlzYW5nIGFyYXdcIixkZDpcIiVkIGFyYXdcIixNOlwiaXNhbmcgYnV3YW5cIixNTTpcIiVkIGJ1d2FuXCIseTpcImlzYW5nIHRhb25cIix5eTpcIiVkIHRhb25cIn19O3JldHVybiBuLmRlZmF1bHQubG9jYWxlKHQsbnVsbCwhMCksdH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///46513\n')},97296:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,j){ true?module.exports=j(__webpack_require__(27484)):0}(this,(function(a){"use strict";function j(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=j(a),e={name:"tlh",weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),weekStart:1,weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return t.default.locale(e,null,!0),e}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTcyOTYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscW9CQUFxb0IsU0FBUyxVQUFVLG1IQUFtSCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3RsaC5qcz85NzdjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLGope1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWoocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGopOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX3RsaD1qKGEuZGF5anMpfSh0aGlzLChmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBqKGEpe3JldHVybiBhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmXCJkZWZhdWx0XCJpbiBhP2E6e2RlZmF1bHQ6YX19dmFyIHQ9aihhKSxlPXtuYW1lOlwidGxoXCIsd2Vla2RheXM6XCJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphalwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJ0ZXJh4oCZIGphciB3YeKAmV90ZXJh4oCZIGphciBjaGHigJlfdGVyYeKAmSBqYXIgd2VqX3RlcmHigJkgamFyIGxvU190ZXJh4oCZIGphciB2YWdoX3RlcmHigJkgamFyIGphdl90ZXJh4oCZIGphciBTb2NoX3RlcmHigJkgamFyIGNob3JnaF90ZXJh4oCZIGphciBIdXRfdGVyYeKAmSBqYXIgd2HigJltYUhfdGVyYeKAmSBqYXIgd2HigJltYUggd2HigJlfdGVyYeKAmSBqYXIgd2HigJltYUggY2hh4oCZXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphalwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphciB3YeKAmV9qYXIgY2hh4oCZX2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFyIEh1dF9qYXIgd2HigJltYUhfamFyIHdh4oCZbWFIIHdh4oCZX2phciB3YeKAmW1hSCBjaGHigJlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphalwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZSxudWxsLCEwKSxlfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///97296\n')},73035:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=e(a),_={name:"tr",weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){return a+"."}};return t.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMwMzUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsd1hBQXdYLGlIQUFpSCxlQUFlLGlMQUFpTCxxQkFBcUIsZUFBZSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3RyLmpzPzg1ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGEsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczphfHxzZWxmKS5kYXlqc19sb2NhbGVfdHI9ZShhLmRheWpzKX0odGhpcywoZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmXCJvYmplY3RcIj09dHlwZW9mIGEmJlwiZGVmYXVsdFwiaW4gYT9hOntkZWZhdWx0OmF9fXZhciB0PWUoYSksXz17bmFtZTpcInRyXCIsd2Vla2RheXM6XCJQYXphcl9QYXphcnRlc2lfU2FsxLFfw4dhcsWfYW1iYV9QZXLFn2VtYmVfQ3VtYV9DdW1hcnRlc2lcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlBhel9QdHNfU2FsX8OHYXJfUGVyX0N1bV9DdHNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJQel9QdF9TYV/Dh2FfUGVfQ3VfQ3RcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiT2Nha1/FnnViYXRfTWFydF9OaXNhbl9NYXnEsXNfSGF6aXJhbl9UZW1tdXpfQcSfdXN0b3NfRXlsw7xsX0VraW1fS2FzxLFtX0FyYWzEsWtcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJPY2FfxZ51Yl9NYXJfTmlzX01heV9IYXpfVGVtX0HEn3VfRXlsX0VraV9LYXNfQXJhXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgc29ucmFcIixwYXN0OlwiJXMgw7ZuY2VcIixzOlwiYmlya2HDpyBzYW5peWVcIixtOlwiYmlyIGRha2lrYVwiLG1tOlwiJWQgZGFraWthXCIsaDpcImJpciBzYWF0XCIsaGg6XCIlZCBzYWF0XCIsZDpcImJpciBnw7xuXCIsZGQ6XCIlZCBnw7xuXCIsTTpcImJpciBheVwiLE1NOlwiJWQgYXlcIix5OlwiYmlyIHnEsWxcIix5eTpcIiVkIHnEsWxcIn0sb3JkaW5hbDpmdW5jdGlvbihhKXtyZXR1cm4gYStcIi5cIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKF8sbnVsbCwhMCksX30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73035\n')},57797:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),a={name:"tzl",weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),weekStart:1,weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"}};return t.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3OTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsMllBQTJZLFNBQVMsVUFBVSxzSkFBc0oscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90emwuanM/MDU3NiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSxfKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1fKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxfKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV90emw9XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksYT17bmFtZTpcInR6bFwiLHdlZWtkYXlzOlwiU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJTw7psX0zDum5fTWFpX03DoXJfWGjDul9WacOpX1PDoXRcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTw7pfTMO6X01hX03DoV9YaF9WaV9Tw6FcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9ybWF0czp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gW2RhbGxhc10gWVlZWVwiLExMTDpcIkQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbVwiLExMTEw6XCJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoYSxudWxsLCEwKSxhfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57797\n')},30261:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,s){ true?module.exports=s(__webpack_require__(27484)):0}(this,(function(a){"use strict";function s(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var n=s(a),i={name:"tzm-latn",weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekStart:6,weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"}};return n.default.locale(i,null,!0),i}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAyNjEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBZ0osQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsbWVBQW1lLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSwyS0FBMksscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90em0tbGF0bi5qcz85MmU0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihhLHMpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXMocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHMpOihhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6YXx8c2VsZikuZGF5anNfbG9jYWxlX3R6bV9sYXRuPXMoYS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHMoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZcImRlZmF1bHRcImluIGE/YTp7ZGVmYXVsdDphfX12YXIgbj1zKGEpLGk9e25hbWU6XCJ0em0tbGF0blwiLHdlZWtkYXlzOlwiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhc1wiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJpbm5heXJfYnLLpGF5csukX21hcsukc8ukX2licmlyX21heXl3X3l3bnl3X3l3bHl3el/Jo3fFoXRfxaF3dGFuYmlyX2t0y6R3YnLLpF9ud3dhbmJpcl9kd2puYmlyXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDo2LHdlZWtkYXlzU2hvcnQ6XCJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpclwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXNcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihhKXtyZXR1cm4gYX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImRhZGtoIHMgeWFuICVzXCIscGFzdDpcInlhbiAlc1wiLHM6XCJpbWlrXCIsbTpcIm1pbnXhuI1cIixtbTpcIiVkIG1pbnXhuI1cIixoOlwic2HJm2FcIixoaDpcIiVkIHRhc3NhyZtpblwiLGQ6XCJhc3NcIixkZDpcIiVkIG9zc2FuXCIsTTpcImF5b3dyXCIsTU06XCIlZCBpeXlpcm5cIix5OlwiYXNnYXNcIix5eTpcIiVkIGlzZ2FzblwifX07cmV0dXJuIG4uZGVmYXVsdC5sb2NhbGUoaSxudWxsLCEwKSxpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///30261\n')},84722:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"tzm",weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekStart:6,weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ3MjIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa2RBQWtkLFNBQVMsVUFBVSxnSEFBZ0gsZUFBZSwwS0FBMEsscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS90em0uanM/ZWQxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oXyxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxlKTooXz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOl98fHNlbGYpLmRheWpzX2xvY2FsZV90em09ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcInR6bVwiLHdlZWtkYXlzOlwi4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIuK1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDo2LHdlZWtkYXlzU2hvcnQ6XCLitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZlcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuK0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi4rS34rSw4rS34rWFIOK1mSDitaLitLDitY8gJXNcIixwYXN0Olwi4rWi4rSw4rWPICVzXCIsczpcIuK1ieK1juK1ieK0vVwiLG06XCLitY7itYnitY/itZPitLpcIixtbTpcIiVkIOK1juK1ieK1j+K1k+K0ulwiLGg6XCLitZnitLDitYTitLBcIixoaDpcIiVkIOK1nOK0sOK1meK1meK0sOK1hOK1ieK1j1wiLGQ6XCLitLDitZnitZlcIixkZDpcIiVkIG/itZnitZnitLDitY9cIixNOlwi4rSw4rWib+K1k+K1lFwiLE1NOlwiJWQg4rWJ4rWi4rWi4rWJ4rWU4rWPXCIseTpcIuK0sOK1meK0s+K0sOK1mVwiLHl5OlwiJWQg4rWJ4rWZ4rSz4rSw4rWZ4rWPXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///84722\n')},80313:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ug-cn",weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekStart:1,weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODAzMTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsNmFBQTZhLFNBQVMsVUFBVSx1SkFBdUosZUFBZSxxTEFBcUwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS91Zy1jbi5qcz8xOTJmIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3VnX2NuPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJ1Zy1jblwiLHdlZWtkYXlzOlwi2YrbldmD2LTbldmG2KjblV/Yr9uI2LTbldmG2KjblV/Ys9uV2YrYtNuV2YbYqNuVX9qG2KfYsdi025XZhtio25Vf2b7bldmK2LTbldmG2KjblV/YrNuI2YXblV/YtNuV2YbYqNuVXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcItmK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCLZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJXCIsTExMOlwiWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tXCIsTExMTDpcImRkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDZg9uQ2YrZidmGXCIscGFzdDpcIiVzINio24fYsduH2YZcIixzOlwi2YbbldqG2obblSDYs9uQ2YPZiNmG2KpcIixtOlwi2KjZidixINmF2YnZhtuH2KpcIixtbTpcIiVkINmF2YnZhtuH2KpcIixoOlwi2KjZidixINiz2KfYptuV2KpcIixoaDpcIiVkINiz2KfYptuV2KpcIixkOlwi2KjZidixINmD24jZhlwiLGRkOlwiJWQg2YPbiNmGXCIsTTpcItio2YnYsSDYptin2YpcIixNTTpcIiVkINim2KfZilwiLHk6XCLYqNmJ2LEg2YrZidmEXCIseXk6XCIlZCDZitmJ2YRcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///80313\n')},64144:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),s="січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),n="січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),o=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/;function d(_,e,t){var s,n;return"m"===t?e?"хвилина":"хвилину":"h"===t?e?"година":"годину":_+" "+(s=+_,n={ss:e?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:e?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:e?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[t].split("_"),s%10==1&&s%100!=11?n[0]:s%10>=2&&s%10<=4&&(s%100<10||s%100>=20)?n[1]:n[2])}var i=function(_,e){return o.test(e)?s[_.month()]:n[_.month()]};i.s=n,i.f=s;var r={name:"uk",weekdays:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),weekdaysShort:"ндл_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:i,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:d,mm:d,h:d,hh:d,d:"день",dd:d,M:"місяць",MM:d,y:"рік",yy:d},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"}};return t.default.locale(r,null,!0),r}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxNDQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGdRQUFnUSxrQkFBa0IsUUFBUSwrRUFBK0UsaU9BQWlPLDBGQUEwRixvQkFBb0IsNENBQTRDLFlBQVksT0FBTyxnVEFBZ1QsK0dBQStHLHFCQUFxQixTQUFTLFVBQVUsOEhBQThILHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvdWsuanM/MDgzNSJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oXyxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxlKTooXz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOl98fHNlbGYpLmRheWpzX2xvY2FsZV91az1lKF8uZGF5anMpfSh0aGlzLChmdW5jdGlvbihfKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKF8pe3JldHVybiBfJiZcIm9iamVjdFwiPT10eXBlb2YgXyYmXCJkZWZhdWx0XCJpbiBfP186e2RlZmF1bHQ6X319dmFyIHQ9ZShfKSxzPVwi0YHRltGH0L3Rj1/Qu9GO0YLQvtCz0L5f0LHQtdGA0LXQt9C90Y9f0LrQstGW0YLQvdGPX9GC0YDQsNCy0L3Rj1/Rh9C10YDQstC90Y9f0LvQuNC/0L3Rj1/RgdC10YDQv9C90Y9f0LLQtdGA0LXRgdC90Y9f0LbQvtCy0YLQvdGPX9C70LjRgdGC0L7Qv9Cw0LTQsF/Qs9GA0YPQtNC90Y9cIi5zcGxpdChcIl9cIiksbj1cItGB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjFwiLnNwbGl0KFwiX1wiKSxvPS9EW29EXT8oXFxbW15bXFxdXSpcXF18XFxzKStNTU1NPy87ZnVuY3Rpb24gZChfLGUsdCl7dmFyIHMsbjtyZXR1cm5cIm1cIj09PXQ/ZT9cItGF0LLQuNC70LjQvdCwXCI6XCLRhdCy0LjQu9C40L3Rg1wiOlwiaFwiPT09dD9lP1wi0LPQvtC00LjQvdCwXCI6XCLQs9C+0LTQuNC90YNcIjpfK1wiIFwiKyhzPStfLG49e3NzOmU/XCLRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LRcIjpcItGB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtFwiLG1tOmU/XCLRhdCy0LjQu9C40L3QsF/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L1cIjpcItGF0LLQuNC70LjQvdGDX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvVwiLGhoOmU/XCLQs9C+0LTQuNC90LBf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L1cIjpcItCz0L7QtNC40L3Rg1/Qs9C+0LTQuNC90Lhf0LPQvtC00LjQvVwiLGRkOlwi0LTQtdC90Yxf0LTQvdGWX9C00L3RltCyXCIsTU06XCLQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyXCIseXk6XCLRgNGW0Lpf0YDQvtC60Lhf0YDQvtC60ZbQslwifVt0XS5zcGxpdChcIl9cIikscyUxMD09MSYmcyUxMDAhPTExP25bMF06cyUxMD49MiYmcyUxMDw9NCYmKHMlMTAwPDEwfHxzJTEwMD49MjApP25bMV06blsyXSl9dmFyIGk9ZnVuY3Rpb24oXyxlKXtyZXR1cm4gby50ZXN0KGUpP3NbXy5tb250aCgpXTpuW18ubW9udGgoKV19O2kucz1uLGkuZj1zO3ZhciByPXtuYW1lOlwidWtcIix3ZWVrZGF5czpcItC90LXQtNGW0LvRj1/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00LBf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGPX9GB0YPQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0L3QtNC7X9C/0L3QtF/QstGC0YBf0YHRgNC0X9GH0YLQsl/Qv9GC0L1f0YHQsdGCXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSxtb250aHM6aSxtb250aHNTaG9ydDpcItGB0ZbRh1/Qu9GO0YJf0LHQtdGAX9C60LLRltGCX9GC0YDQsNCyX9GH0LXRgNCyX9C70LjQv1/RgdC10YDQv1/QstC10YBf0LbQvtCy0YJf0LvQuNGB0YJf0LPRgNGD0LRcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEscmVsYXRpdmVUaW1lOntmdXR1cmU6XCLQt9CwICVzXCIscGFzdDpcIiVzINGC0L7QvNGDXCIsczpcItC00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0XCIsbTpkLG1tOmQsaDpkLGhoOmQsZDpcItC00LXQvdGMXCIsZGQ6ZCxNOlwi0LzRltGB0Y/RhtGMXCIsTU06ZCx5Olwi0YDRltC6XCIseXk6ZH0sb3JkaW5hbDpmdW5jdGlvbihfKXtyZXR1cm4gX30sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZINGALlwiLExMTDpcIkQgTU1NTSBZWVlZINGALiwgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbVwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUocixudWxsLCEwKSxyfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///64144\n')},92957:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ur",weekdays:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),months:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekStart:1,weekdaysShort:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),monthsShort:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekdaysMin:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI5NTcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMscVpBQXFaLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSx3S0FBd0sscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS91ci5qcz81OGQ0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3VyPWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJ1clwiLHdlZWtkYXlzOlwi2KfYqtmI2KfYsV/ZvtuM2LFf2YXZhtqv2YRf2KjYr9q+X9is2YXYudix2KfYql/YrNmF2LnbgV/bgdmB2KrbgVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLYrNmG2YjYsduMX9mB2LHZiNix24xf2YXYp9ix2oZf2KfZvtix24zZhF/Zhdim24xf2KzZiNmGX9is2YjZhNin2KbbjF/Yp9qv2LPYql/Ys9iq2YXYqNixX9in2qnYqtmI2KjYsV/ZhtmI2YXYqNixX9iv2LPZhdio2LFcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcItin2KrZiNin2LFf2b7bjNixX9mF2Ybar9mEX9io2K/avl/YrNmF2LnYsdin2Kpf2KzZhdi524Ff24HZgdiq24FcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLYrNmG2YjYsduMX9mB2LHZiNix24xf2YXYp9ix2oZf2KfZvtix24zZhF/Zhdim24xf2KzZiNmGX9is2YjZhNin2KbbjF/Yp9qv2LPYql/Ys9iq2YXYqNixX9in2qnYqtmI2KjYsV/ZhtmI2YXYqNixX9iv2LPZhdio2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLYp9iq2YjYp9ixX9m+24zYsV/ZhdmG2q/ZhF/YqNiv2r5f2KzZhdi52LHYp9iqX9is2YXYuduBX9uB2YHYqtuBXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oXyl7cmV0dXJuIF99LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGTYjCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINio2LnYr1wiLHBhc3Q6XCIlcyDZgtio2YRcIixzOlwi2obZhtivINiz24zaqdmG2ohcIixtOlwi2KfbjNqpINmF2YbZuVwiLG1tOlwiJWQg2YXZhtm5XCIsaDpcItin24zaqSDar9q+2YbZuduBXCIsaGg6XCIlZCDar9q+2YbZuduSXCIsZDpcItin24zaqSDYr9mGXCIsZGQ6XCIlZCDYr9mGXCIsTTpcItin24zaqSDZhdin24FcIixNTTpcIiVkINmF2KfbgVwiLHk6XCLYp9uM2qkg2LPYp9mEXCIseXk6XCIlZCDYs9in2YRcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92957\n')},98727:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(a,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var n=e(a),_={name:"uz-latn",weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),weekStart:1,weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"}};return n.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTg3MjcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBK0ksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsdVpBQXVaLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSw4TEFBOEwscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS91ei1sYXRuLmpzPzg0ZDciXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGEsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczphfHxzZWxmKS5kYXlqc19sb2NhbGVfdXpfbGF0bj1lKGEuZGF5anMpfSh0aGlzLChmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGEpe3JldHVybiBhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmXCJkZWZhdWx0XCJpbiBhP2E6e2RlZmF1bHQ6YX19dmFyIG49ZShhKSxfPXtuYW1lOlwidXotbGF0blwiLHdlZWtkYXlzOlwiWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIllhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJZYWtfRHVzaF9TZXNoX0Nob3JfUGF5X0p1bV9TaGFuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0Rla1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIllhX0R1X1NlX0Nob19QYV9KdV9TaGFcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihhKXtyZXR1cm4gYX0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJZYXFpbiAlcyBpY2hpZGFcIixwYXN0OlwiQmlyIG5lY2hhICVzIG9sZGluXCIsczpcInNvbml5YVwiLG06XCJiaXIgZGFxaXFhXCIsbW06XCIlZCBkYXFpcWFcIixoOlwiYmlyIHNvYXRcIixoaDpcIiVkIHNvYXRcIixkOlwiYmlyIGt1blwiLGRkOlwiJWQga3VuXCIsTTpcImJpciBveVwiLE1NOlwiJWQgb3lcIix5OlwiYmlyIHlpbFwiLHl5OlwiJWQgeWlsXCJ9fTtyZXR1cm4gbi5kZWZhdWx0LmxvY2FsZShfLG51bGwsITApLF99KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///98727\n')},7486:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"uz",weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUEwSSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyw4WEFBOFgsU0FBUyxVQUFVLGlIQUFpSCxlQUFlLDJMQUEyTCxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3V6LmpzPzQ4MzEiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKF8sZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sZSk6KF89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpffHxzZWxmKS5kYXlqc19sb2NhbGVfdXo9ZShfLmRheWpzKX0odGhpcywoZnVuY3Rpb24oXyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShfKXtyZXR1cm4gXyYmXCJvYmplY3RcIj09dHlwZW9mIF8mJlwiZGVmYXVsdFwiaW4gXz9fOntkZWZhdWx0Ol99fXZhciB0PWUoXyksZD17bmFtZTpcInV6XCIsd2Vla2RheXM6XCLQr9C60YjQsNC90LHQsF/QlNGD0YjQsNC90LHQsF/QodC10YjQsNC90LHQsF/Qp9C+0YDRiNCw0L3QsdCwX9Cf0LDQudGI0LDQvdCx0LBf0JbRg9C80LBf0KjQsNC90LHQsFwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YBcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcItCv0LrRiF/QlNGD0Yhf0KHQtdGIX9Cn0L7RgF/Qn9Cw0Llf0JbRg9C8X9Co0LDQvVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItGP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0K/Qul/QlNGDX9Ch0LVf0KfQvl/Qn9CwX9CW0YNf0KjQsFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8pe3JldHVybiBffSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJEIE1NTU0gWVlZWSwgZGRkZCBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItCv0LrQuNC9ICVzINC40YfQuNC00LBcIixwYXN0Olwi0JHQuNGAINC90LXRh9CwICVzINC+0LvQtNC40L1cIixzOlwi0YTRg9GA0YHQsNGCXCIsbTpcItCx0LjRgCDQtNCw0LrQuNC60LBcIixtbTpcIiVkINC00LDQutC40LrQsFwiLGg6XCLQsdC40YAg0YHQvtCw0YJcIixoaDpcIiVkINGB0L7QsNGCXCIsZDpcItCx0LjRgCDQutGD0L1cIixkZDpcIiVkINC60YPQvVwiLE06XCLQsdC40YAg0L7QuVwiLE1NOlwiJWQg0L7QuVwiLHk6XCLQsdC40YAg0LnQuNC7XCIseXk6XCIlZCDQudC40LtcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7486\n')},37553:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(t,n){ true?module.exports=n(__webpack_require__(27484)):0}(this,(function(t){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var h=n(t),_={name:"vi",weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"}};return h.default.locale(_,null,!0),_}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1NTMuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsaWFBQWlhLFNBQVMsVUFBVSxxTkFBcU4sZUFBZSwrS0FBK0sscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS92aS5qcz9jMzk1Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LG4pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLG4pOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfbG9jYWxlX3ZpPW4odC5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImRlZmF1bHRcImluIHQ/dDp7ZGVmYXVsdDp0fX12YXIgaD1uKHQpLF89e25hbWU6XCJ2aVwiLHdlZWtkYXlzOlwiY2jhu6cgbmjhuq10X3Ro4bupIGhhaV90aOG7qSBiYV90aOG7qSB0xrBfdGjhu6kgbsSDbV90aOG7qSBzw6F1X3Ro4bupIGLhuqN5XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcInRow6FuZyAxX3Row6FuZyAyX3Row6FuZyAzX3Row6FuZyA0X3Row6FuZyA1X3Row6FuZyA2X3Row6FuZyA3X3Row6FuZyA4X3Row6FuZyA5X3Row6FuZyAxMF90aMOhbmcgMTFfdGjDoW5nIDEyXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJDTl9UMl9UM19UNF9UNV9UNl9UN1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIlRoMDFfVGgwMl9UaDAzX1RoMDRfVGgwNV9UaDA2X1RoMDdfVGgwOF9UaDA5X1RoMTBfVGgxMV9UaDEyXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiQ05fVDJfVDNfVDRfVDVfVDZfVDdcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBbbsSDbV0gWVlZWVwiLExMTDpcIkQgTU1NTSBbbsSDbV0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW1cIixsOlwiREQvTS9ZWVlZXCIsbGw6XCJEIE1NTSBZWVlZXCIsbGxsOlwiRCBNTU0gWVlZWSBISDptbVwiLGxsbGw6XCJkZGQsIEQgTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyB04bubaVwiLHBhc3Q6XCIlcyB0csaw4bubY1wiLHM6XCJ2w6BpIGdpw6J5XCIsbTpcIm3hu5l0IHBow7p0XCIsbW06XCIlZCBwaMO6dFwiLGg6XCJt4buZdCBnaeG7nVwiLGhoOlwiJWQgZ2nhu51cIixkOlwibeG7mXQgbmfDoHlcIixkZDpcIiVkIG5nw6B5XCIsTTpcIm3hu5l0IHRow6FuZ1wiLE1NOlwiJWQgdGjDoW5nXCIseTpcIm3hu5l0IG7Eg21cIix5eTpcIiVkIG7Eg21cIn19O3JldHVybiBoLmRlZmF1bHQubG9jYWxlKF8sbnVsbCwhMCksX30pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37553\n')},55321:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,t){ true?module.exports=t(__webpack_require__(27484)):0}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),d={name:"x-pseudo",weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),weekStart:1,weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"}};return _.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUzMjEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBZ0osQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsa2RBQWtkLFNBQVMsVUFBVSxpSEFBaUgsZUFBZSx1TUFBdU0scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS94LXBzZXVkby5qcz9mZDNjIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3hfcHNldWRvPXQoZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgXz10KGUpLGQ9e25hbWU6XCJ4LXBzZXVkb1wiLHdlZWtkYXlzOlwiU37DusOxZMOhfsO9X03Ds37DsWTDocO9fl9Uw7rDqX5zZMOhw71+X1fDqWR+w7HDqXNkfsOhw71fVH5ow7pyc35kw6HDvV9+RnLDrWR+w6HDvV9TfsOhdMO6cn5kw6HDvVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKfsOhw7HDusOhfnLDvV9GfsOpYnLDun7DoXLDvV9+TcOhcmN+aF/DgXB+csOtbF9+TcOhw71ffkrDusOxw6l+X0rDumx+w71fw4HDun5nw7pzdH5fU8OpcH50w6ltYn7DqXJfw5N+Y3TDs2J+w6lyX8ORfsOzdsOpbX5iw6lyX35Ew6ljw6l+bWLDqXJcIi5zcGxpdChcIl9cIiksd2Vla1N0YXJ0OjEsd2Vla2RheXNTaG9ydDpcIlN+w7rDsV9+TcOzw7FfflTDusOpX35Xw6lkX35UaMO6X35GcsOtX35Tw6F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSn7DocOxX35Gw6liX35Nw6FyX37DgXByX35Nw6HDvV9+SsO6w7FffkrDumxffsOBw7pnX35Tw6lwX37Dk2N0X37DkcOzdl9+RMOpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoVwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIsOtfsOxICVzXCIscGFzdDpcIiVzIMOhfmfDs1wiLHM6XCLDoSB+ZsOpdyB+c8OpY8OzfsOxZHNcIixtOlwiw6Egfm3DrcOxfsO6dMOpXCIsbW06XCIlZCBtfsOtw7HDun50w6lzXCIsaDpcIsOhfsOxIGjDs37DunJcIixoaDpcIiVkIGh+w7PDunJzXCIsZDpcIsOhIH5kw6HDvVwiLGRkOlwiJWQgZH7DocO9c1wiLE06XCLDoSB+bcOzw7F+dGhcIixNTTpcIiVkIG1+w7PDsXR+aHNcIix5Olwiw6EgfsO9w6nDoXJcIix5eTpcIiVkIMO9fsOpw6Fyc1wifX07cmV0dXJuIF8uZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55321\n')},14724:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),a={name:"yo",weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),weekStart:1,weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"}};return t.default.locale(a,null,!0),a}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQ3MjQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMseWFBQXlhLFNBQVMsVUFBVSxxSEFBcUgsZUFBZSx3TUFBd00scUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS95by5qcz84YjA5Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLF8pe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPV8ocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLF8pOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfbG9jYWxlX3lvPV8oZS5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImRlZmF1bHRcImluIGU/ZTp7ZGVmYXVsdDplfX12YXIgdD1fKGUpLGE9e25hbWU6XCJ5b1wiLHdlZWtkYXlzOlwiQcyAacyAa3XMgV9BamXMgV9JzIBz4bq5zIFndW5f4buMauG7jcyBcnXMgV/hu4xq4buNzIFi4buNX+G6uHRpzIBfQcyAYmHMgW3hurnMgXRhXCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIlPhurnMgXLhurnMgV9FzIByZcyAbGXMgF/hurhy4bq5zIBuYcyAX0nMgGdiZcyBX0XMgGJpYmlfT8yAa3XMgGR1X0Fn4bq5bW9fT8yAZ3XMgW5fT3dld2Vf4buMzIB3YcyAcmHMgF9CZcyBbHXMgV/hu4zMgHDhurnMgMyAXCIuc3BsaXQoXCJfXCIpLHdlZWtTdGFydDoxLHdlZWtkYXlzU2hvcnQ6XCJBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJT4bq5zIFyX0XMgHJsX+G6uHJuX0nMgGdiX0XMgGJpX0/MgGt1zIBfQWfhurlfT8yAZ3XMgV9Pd2Vf4buMzIB3YcyAX0JlzIFsX+G7jMyAcOG6ucyAzIBcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJBzIBpzIBfQWpfScyAc1/hu4xyX+G7jGJf4bq4dF9BzIBiXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGZvcm1hdHM6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm5pzIEgJXNcIixwYXN0OlwiJXMga+G7jWphzIFcIixzOlwiacyAc+G6uWp1zIEgYWF5YcyBIGRpZVwiLG06XCJpzIBz4bq5anXMgSBrYW5cIixtbTpcImnMgHPhurlqdcyBICVkXCIsaDpcIndhzIFrYXRpIGthblwiLGhoOlwid2HMgWthdGkgJWRcIixkOlwi4buNauG7jcyBIGthblwiLGRkOlwi4buNauG7jcyBICVkXCIsTTpcIm9zdcyAIGthblwiLE1NOlwib3N1zIAgJWRcIix5Olwi4buNZHXMgW4ga2FuXCIseXk6XCLhu41kdcyBbiAlZFwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoYSxudWxsLCEwKSxhfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///14724\n')},33852:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,_){return"W"===_?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,_){var t=100*e+_;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzM4NTIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1NBQXNTLDBCQUEwQixrQ0FBa0Msc0xBQXNMLGVBQWUsK0hBQStILHdCQUF3QixjQUFjLHdFQUF3RSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3poLWNuLmpzPzA0MDAiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfemhfY249XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcInpoLWNuXCIsd2Vla2RheXM6XCLmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuWRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuaXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSxfKXtyZXR1cm5cIldcIj09PV8/ZStcIuWRqFwiOmUrXCLml6VcIn0sd2Vla1N0YXJ0OjEseWVhclN0YXJ0OjQsZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVkvTU0vRERcIixMTDpcIllZWVnlubRN5pyIROaXpVwiLExMTDpcIllZWVnlubRN5pyIROaXpUFo54K5bW3liIZcIixMTExMOlwiWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIZcIixsOlwiWVlZWS9NL0RcIixsbDpcIllZWVnlubRN5pyIROaXpVwiLGxsbDpcIllZWVnlubRN5pyIROaXpSBISDptbVwiLGxsbGw6XCJZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXPlhoVcIixwYXN0OlwiJXPliY1cIixzOlwi5Yeg56eSXCIsbTpcIjEg5YiG6ZKfXCIsbW06XCIlZCDliIbpkp9cIixoOlwiMSDlsI/ml7ZcIixoaDpcIiVkIOWwj+aXtlwiLGQ6XCIxIOWkqVwiLGRkOlwiJWQg5aSpXCIsTTpcIjEg5Liq5pyIXCIsTU06XCIlZCDkuKrmnIhcIix5OlwiMSDlubRcIix5eTpcIiVkIOW5tFwifSxtZXJpZGllbTpmdW5jdGlvbihlLF8pe3ZhciB0PTEwMCplK187cmV0dXJuIHQ8NjAwP1wi5YeM5pmoXCI6dDw5MDA/XCLml6nkuIpcIjp0PDExMDA/XCLkuIrljYhcIjp0PDEzMDA/XCLkuK3ljYhcIjp0PDE4MDA/XCLkuIvljYhcIjpcIuaZmuS4ilwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33852\n')},2390:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"zh-hk",months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),ordinal:function(_,e){return"W"===e?_+"週":_+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d 分鐘",h:"一小時",hh:"%d 小時",d:"一天",dd:"%d 天",M:"一個月",MM:"%d 個月",y:"一年",yy:"%d 年"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM5MC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLEtBQU8sR0FBRyxDQUE2SSxDQUFDLG1CQUFtQixhQUFhLGNBQWMsK0NBQStDLFdBQVcsY0FBYyxzU0FBc1MsMEJBQTBCLFVBQVUseUdBQXlHLGVBQWUsNEhBQTRILHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9sb2NhbGUvemgtaGsuanM/MzUzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oXyxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSxlKTooXz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOl98fHNlbGYpLmRheWpzX2xvY2FsZV96aF9oaz1lKF8uZGF5anMpfSh0aGlzLChmdW5jdGlvbihfKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKF8pe3JldHVybiBfJiZcIm9iamVjdFwiPT10eXBlb2YgXyYmXCJkZWZhdWx0XCJpbiBfP186e2RlZmF1bHQ6X319dmFyIHQ9ZShfKSxkPXtuYW1lOlwiemgtaGtcIixtb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha1cIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbihfLGUpe3JldHVyblwiV1wiPT09ZT9fK1wi6YCxXCI6XytcIuaXpVwifSxmb3JtYXRzOntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiWVlZWS9NTS9ERFwiLExMOlwiWVlZWeW5tE3mnIhE5pelXCIsTExMOlwiWVlZWeW5tE3mnIhE5pelIEhIOm1tXCIsTExMTDpcIllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc+WFp1wiLHBhc3Q6XCIlc+WJjVwiLHM6XCLlub7np5JcIixtOlwi5LiA5YiG6ZCYXCIsbW06XCIlZCDliIbpkJhcIixoOlwi5LiA5bCP5pmCXCIsaGg6XCIlZCDlsI/mmYJcIixkOlwi5LiA5aSpXCIsZGQ6XCIlZCDlpKlcIixNOlwi5LiA5YCL5pyIXCIsTU06XCIlZCDlgIvmnIhcIix5Olwi5LiA5bm0XCIseXk6XCIlZCDlubRcIn19O3JldHVybiB0LmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2390\n')},43901:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(_,e){ true?module.exports=e(__webpack_require__(27484)):0}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"zh-tw",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_,e){return"W"===e?_+"週":_+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"},meridiem:function(_,e){var t=100*_+e;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDM5MDEuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBNkksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsc1NBQXNTLDBCQUEwQixVQUFVLHNMQUFzTCxlQUFlLCtIQUErSCx3QkFBd0IsY0FBYyx3RUFBd0UscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL2xvY2FsZS96aC10dy5qcz8yMmE1Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihfLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImRheWpzXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImRheWpzXCJdLGUpOihfPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6X3x8c2VsZikuZGF5anNfbG9jYWxlX3poX3R3PWUoXy5kYXlqcyl9KHRoaXMsKGZ1bmN0aW9uKF8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoXyl7cmV0dXJuIF8mJlwib2JqZWN0XCI9PXR5cGVvZiBfJiZcImRlZmF1bHRcImluIF8/Xzp7ZGVmYXVsdDpffX12YXIgdD1lKF8pLGQ9e25hbWU6XCJ6aC10d1wiLHdlZWtkYXlzOlwi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha1cIi5zcGxpdChcIl9cIiksbW9udGhzOlwi5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIhcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciFwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKF8sZSl7cmV0dXJuXCJXXCI9PT1lP18rXCLpgLFcIjpfK1wi5pelXCJ9LGZvcm1hdHM6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZL01NL0REXCIsTEw6XCJZWVlZ5bm0TeaciETml6VcIixMTEw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixMTExMOlwiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbVwiLGw6XCJZWVlZL00vRFwiLGxsOlwiWVlZWeW5tE3mnIhE5pelXCIsbGxsOlwiWVlZWeW5tE3mnIhE5pelIEhIOm1tXCIsbGxsbDpcIllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc+WFp1wiLHBhc3Q6XCIlc+WJjVwiLHM6XCLlub7np5JcIixtOlwiMSDliIbpkJhcIixtbTpcIiVkIOWIhumQmFwiLGg6XCIxIOWwj+aZglwiLGhoOlwiJWQg5bCP5pmCXCIsZDpcIjEg5aSpXCIsZGQ6XCIlZCDlpKlcIixNOlwiMSDlgIvmnIhcIixNTTpcIiVkIOWAi+aciFwiLHk6XCIxIOW5tFwiLHl5OlwiJWQg5bm0XCJ9LG1lcmlkaWVtOmZ1bmN0aW9uKF8sZSl7dmFyIHQ9MTAwKl8rZTtyZXR1cm4gdDw2MDA/XCLlh4zmmahcIjp0PDkwMD9cIuaXqeS4ilwiOnQ8MTEwMD9cIuS4iuWNiFwiOnQ8MTMwMD9cIuS4reWNiFwiOnQ8MTgwMD9cIuS4i+WNiFwiOlwi5pma5LiKXCJ9fTtyZXR1cm4gdC5kZWZhdWx0LmxvY2FsZShkLG51bGwsITApLGR9KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43901\n')},32009:function(module,__unused_webpack_exports,__webpack_require__){eval('!function(e,_){ true?module.exports=_(__webpack_require__(27484)):0}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"zh",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,_){return"W"===_?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s后",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,_){var t=100*e+_;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return t.default.locale(d,null,!0),d}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzIwMDkuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxrQkFBa0IsbUJBQU8sQ0FBQyxLQUFPLEdBQUcsQ0FBMEksQ0FBQyxtQkFBbUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLGNBQWMsbVNBQW1TLDBCQUEwQixrQ0FBa0Msc0xBQXNMLGVBQWUsK0hBQStILHdCQUF3QixjQUFjLHdFQUF3RSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3poLmpzPzc4OTQiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsXyl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9XyhyZXF1aXJlKFwiZGF5anNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZGF5anNcIl0sXyk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19sb2NhbGVfemg9XyhlLmRheWpzKX0odGhpcywoZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lOntkZWZhdWx0OmV9fXZhciB0PV8oZSksZD17bmFtZTpcInpoXCIsd2Vla2RheXM6XCLmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuWRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuaXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24oZSxfKXtyZXR1cm5cIldcIj09PV8/ZStcIuWRqFwiOmUrXCLml6VcIn0sd2Vla1N0YXJ0OjEseWVhclN0YXJ0OjQsZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVkvTU0vRERcIixMTDpcIllZWVnlubRN5pyIROaXpVwiLExMTDpcIllZWVnlubRN5pyIROaXpUFo54K5bW3liIZcIixMTExMOlwiWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIZcIixsOlwiWVlZWS9NL0RcIixsbDpcIllZWVnlubRN5pyIROaXpVwiLGxsbDpcIllZWVnlubRN5pyIROaXpSBISDptbVwiLGxsbGw6XCJZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXPlkI5cIixwYXN0OlwiJXPliY1cIixzOlwi5Yeg56eSXCIsbTpcIjEg5YiG6ZKfXCIsbW06XCIlZCDliIbpkp9cIixoOlwiMSDlsI/ml7ZcIixoaDpcIiVkIOWwj+aXtlwiLGQ6XCIxIOWkqVwiLGRkOlwiJWQg5aSpXCIsTTpcIjEg5Liq5pyIXCIsTU06XCIlZCDkuKrmnIhcIix5OlwiMSDlubRcIix5eTpcIiVkIOW5tFwifSxtZXJpZGllbTpmdW5jdGlvbihlLF8pe3ZhciB0PTEwMCplK187cmV0dXJuIHQ8NjAwP1wi5YeM5pmoXCI6dDw5MDA/XCLml6nkuIpcIjp0PDExMDA/XCLkuIrljYhcIjp0PDEzMDA/XCLkuK3ljYhcIjp0PDE4MDA/XCLkuIvljYhcIjpcIuaZmuS4ilwifX07cmV0dXJuIHQuZGVmYXVsdC5sb2NhbGUoZCxudWxsLCEwKSxkfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32009\n')},28734:function(module){eval('!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg3MzQuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBcUksQ0FBQyxrQkFBa0IsYUFBYSxxQkFBcUIsNkJBQTZCLHFCQUFxQiw0QkFBNEIsMENBQTBDLCtHQUErRyxJQUFJLGtCQUFrQixVQUFVLHFDQUFxQyxnQ0FBZ0MsK0JBQStCLGtDQUFrQyx3Q0FBd0Msc0RBQXNELHlEQUF5RCxzRUFBc0UsOENBQThDLDhCQUE4QixxQ0FBcUMsNkNBQTZDLGtCQUFrQixHQUFHLHlCQUF5QiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vYWR2YW5jZWRGb3JtYXQuanM/MjAxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5wcm90b3R5cGUsbj1yLmZvcm1hdDtyLmZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBuLmJpbmQodGhpcykoZSk7dmFyIHM9dGhpcy4kdXRpbHMoKSxhPShlfHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIpLnJlcGxhY2UoL1xcWyhbXlxcXV0rKV18UXx3b3x3d3x3fFdXfFd8enp6fHp8Z2dnZ3xHR0dHfERvfFh8eHxrezEsMn18Uy9nLChmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwiUVwiOnJldHVybiBNYXRoLmNlaWwoKHQuJE0rMSkvMyk7Y2FzZVwiRG9cIjpyZXR1cm4gci5vcmRpbmFsKHQuJEQpO2Nhc2VcImdnZ2dcIjpyZXR1cm4gdC53ZWVrWWVhcigpO2Nhc2VcIkdHR0dcIjpyZXR1cm4gdC5pc29XZWVrWWVhcigpO2Nhc2VcIndvXCI6cmV0dXJuIHIub3JkaW5hbCh0LndlZWsoKSxcIldcIik7Y2FzZVwid1wiOmNhc2VcInd3XCI6cmV0dXJuIHMucyh0LndlZWsoKSxcIndcIj09PWU/MToyLFwiMFwiKTtjYXNlXCJXXCI6Y2FzZVwiV1dcIjpyZXR1cm4gcy5zKHQuaXNvV2VlaygpLFwiV1wiPT09ZT8xOjIsXCIwXCIpO2Nhc2VcImtcIjpjYXNlXCJra1wiOnJldHVybiBzLnMoU3RyaW5nKDA9PT10LiRIPzI0OnQuJEgpLFwia1wiPT09ZT8xOjIsXCIwXCIpO2Nhc2VcIlhcIjpyZXR1cm4gTWF0aC5mbG9vcih0LiRkLmdldFRpbWUoKS8xZTMpO2Nhc2VcInhcIjpyZXR1cm4gdC4kZC5nZXRUaW1lKCk7Y2FzZVwielwiOnJldHVyblwiW1wiK3Qub2Zmc2V0TmFtZSgpK1wiXVwiO2Nhc2VcInp6elwiOnJldHVyblwiW1wiK3Qub2Zmc2V0TmFtZShcImxvbmdcIikrXCJdXCI7ZGVmYXVsdDpyZXR1cm4gZX19KSk7cmV0dXJuIG4uYmluZCh0aGlzKShhKX19fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///28734\n')},10285:function(module){eval('!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAyODUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBd0ksQ0FBQyxrQkFBa0IsYUFBYSxPQUFPLHdIQUF3SCwrRUFBK0UsSUFBSSx3REFBd0QsZUFBZSw4QkFBOEIsa0JBQWtCLG1CQUFtQixZQUFZLHNDQUFzQyx5QkFBeUIsc0JBQXNCLGVBQWUsb0JBQW9CLG1EQUFtRCwrQkFBK0IsSUFBSSxnQkFBZ0IsV0FBVyx3Q0FBd0MsaUJBQWlCLG1CQUFtQixNQUFNLFlBQVksTUFBTSxnQ0FBZ0MsT0FBTyxPQUFPLHlCQUF5QixTQUFTLElBQUksaUJBQWlCLHVCQUF1QixtQkFBbUIsdUJBQXVCLHNCQUFzQix5QkFBeUIsb0JBQW9CLHdCQUF3QixXQUFXLEVBQUUsY0FBYyxxQkFBcUIsdU1BQXVNLGlDQUFpQywrQkFBK0IsTUFBTSxpREFBaUQsd0RBQXdELDBEQUEwRCxvQkFBb0IsaUJBQWlCLHVCQUF1QixtQkFBbUIsc0JBQXNCLCtCQUErQix1QkFBdUIsbUJBQW1CLDZDQUE2QyxlQUFlLFlBQVksRUFBRSx1QkFBdUIsY0FBYyxRQUFRLG1CQUFtQiw0Q0FBNEMsSUFBSSxHQUFHLElBQUkscUJBQXFCLHlCQUF5QixxRkFBcUYscUJBQXFCLEdBQUcsNEJBQTRCLElBQUksTUFBTSxzQ0FBc0MsUUFBUSxpQkFBaUIsMEJBQTBCLG1CQUFtQixZQUFZLFNBQVMsSUFBSSxNQUFNLFdBQVcsa0NBQWtDLEtBQUsscURBQXFELCtCQUErQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyw4REFBOEQsT0FBTyx1QkFBdUIseUVBQXlFLDRCQUE0QixvQkFBb0IsOEJBQThCLFVBQVUsV0FBVyx1QkFBdUIsMENBQTBDLHdFQUF3RSxJQUFJLDhEQUE4RCxtS0FBbUssZ0NBQWdDLGdDQUFnQyx1SEFBdUgsU0FBUyxxQkFBcUIsNkdBQTZHLGtEQUFrRCxLQUFLLE1BQU0sWUFBWSxzQkFBc0IsZ0JBQWdCLHNDQUFzQyxNQUFNLDhCQUE4QixzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0LmpzPzQxZjMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19wbHVnaW5fY3VzdG9tUGFyc2VGb3JtYXQ9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPXtMVFM6XCJoOm1tOnNzIEFcIixMVDpcImg6bW0gQVwiLEw6XCJNTS9ERC9ZWVlZXCIsTEw6XCJNTU1NIEQsIFlZWVlcIixMTEw6XCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEFcIn0sdD0vKFxcW1teW10qXFxdKXwoWy1fOi8uLCgpXFxzXSspfChBfGF8WVlZWXxZWT98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyxuPS9cXGRcXGQvLHI9L1xcZFxcZD8vLGk9L1xcZCpbXi1fOi8sKClcXHNcXGRdKy8sbz17fSxzPWZ1bmN0aW9uKGUpe3JldHVybihlPStlKSsoZT42OD8xOTAwOjJlMyl9O3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzW2VdPSt0fX0sZj1bL1srLV1cXGRcXGQ6PyhcXGRcXGQpP3xaLyxmdW5jdGlvbihlKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiAwO2lmKFwiWlwiPT09ZSlyZXR1cm4gMDt2YXIgdD1lLm1hdGNoKC8oWystXXxcXGRcXGQpL2cpLG49NjAqdFsxXSsoK3RbMl18fDApO3JldHVybiAwPT09bj8wOlwiK1wiPT09dFswXT8tbjpufShlKX1dLGg9ZnVuY3Rpb24oZSl7dmFyIHQ9b1tlXTtyZXR1cm4gdCYmKHQuaW5kZXhPZj90OnQucy5jb25jYXQodC5mKSl9LHU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPW8ubWVyaWRpZW07aWYocil7Zm9yKHZhciBpPTE7aTw9MjQ7aSs9MSlpZihlLmluZGV4T2YocihpLDAsdCkpPi0xKXtuPWk+MTI7YnJlYWt9fWVsc2Ugbj1lPT09KHQ/XCJwbVwiOlwiUE1cIik7cmV0dXJuIG59LGQ9e0E6W2ksZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249dShlLCExKX1dLGE6W2ksZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249dShlLCEwKX1dLFM6Wy9cXGQvLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZX1dLFNTOltuLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitlfV0sU1NTOlsvXFxkezN9LyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0rZX1dLHM6W3IsYShcInNlY29uZHNcIildLHNzOltyLGEoXCJzZWNvbmRzXCIpXSxtOltyLGEoXCJtaW51dGVzXCIpXSxtbTpbcixhKFwibWludXRlc1wiKV0sSDpbcixhKFwiaG91cnNcIildLGg6W3IsYShcImhvdXJzXCIpXSxISDpbcixhKFwiaG91cnNcIildLGhoOltyLGEoXCJob3Vyc1wiKV0sRDpbcixhKFwiZGF5XCIpXSxERDpbbixhKFwiZGF5XCIpXSxEbzpbaSxmdW5jdGlvbihlKXt2YXIgdD1vLm9yZGluYWwsbj1lLm1hdGNoKC9cXGQrLyk7aWYodGhpcy5kYXk9blswXSx0KWZvcih2YXIgcj0xO3I8PTMxO3IrPTEpdChyKS5yZXBsYWNlKC9cXFt8XFxdL2csXCJcIik9PT1lJiYodGhpcy5kYXk9cil9XSxNOltyLGEoXCJtb250aFwiKV0sTU06W24sYShcIm1vbnRoXCIpXSxNTU06W2ksZnVuY3Rpb24oZSl7dmFyIHQ9aChcIm1vbnRoc1wiKSxuPShoKFwibW9udGhzU2hvcnRcIil8fHQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgwLDMpfSkpKS5pbmRleE9mKGUpKzE7aWYobjwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPW4lMTJ8fG59XSxNTU1NOltpLGZ1bmN0aW9uKGUpe3ZhciB0PWgoXCJtb250aHNcIikuaW5kZXhPZihlKSsxO2lmKHQ8MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD10JTEyfHx0fV0sWTpbL1srLV0/XFxkKy8sYShcInllYXJcIildLFlZOltuLGZ1bmN0aW9uKGUpe3RoaXMueWVhcj1zKGUpfV0sWVlZWTpbL1xcZHs0fS8sYShcInllYXJcIildLFo6ZixaWjpmfTtmdW5jdGlvbiBjKG4pe3ZhciByLGk7cj1uLGk9byYmby5mb3JtYXRzO2Zvcih2YXIgcz0obj1yLnJlcGxhY2UoLyhcXFtbXlxcXV0rXSl8KExUUz98bHsxLDR9fEx7MSw0fSkvZywoZnVuY3Rpb24odCxuLHIpe3ZhciBvPXImJnIudG9VcHBlckNhc2UoKTtyZXR1cm4gbnx8aVtyXXx8ZVtyXXx8aVtvXS5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChNTU1NfE1NfEREfGRkZGQpL2csKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdHx8bi5zbGljZSgxKX0pKX0pKSkubWF0Y2godCksYT1zLmxlbmd0aCxmPTA7ZjxhO2YrPTEpe3ZhciBoPXNbZl0sdT1kW2hdLGM9dSYmdVswXSxsPXUmJnVbMV07c1tmXT1sP3tyZWdleDpjLHBhcnNlcjpsfTpoLnJlcGxhY2UoL15cXFt8XFxdJC9nLFwiXCIpfXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wLHI9MDtuPGE7bis9MSl7dmFyIGk9c1tuXTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSlyKz1pLmxlbmd0aDtlbHNle3ZhciBvPWkucmVnZXgsZj1pLnBhcnNlcixoPWUuc2xpY2UociksdT1vLmV4ZWMoaClbMF07Zi5jYWxsKHQsdSksZT1lLnJlcGxhY2UodSxcIlwiKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUuYWZ0ZXJub29uO2lmKHZvaWQgMCE9PXQpe3ZhciBuPWUuaG91cnM7dD9uPDEyJiYoZS5ob3Vycys9MTIpOjEyPT09biYmKGUuaG91cnM9MCksZGVsZXRlIGUuYWZ0ZXJub29ufX0odCksdH19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtuLnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsZSYmZS5wYXJzZVR3b0RpZ2l0WWVhciYmKHM9ZS5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIHI9dC5wcm90b3R5cGUsaT1yLnBhcnNlO3IucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRlLHI9ZS51dGMscz1lLmFyZ3M7dGhpcy4kdT1yO3ZhciBhPXNbMV07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBmPSEwPT09c1syXSxoPSEwPT09c1szXSx1PWZ8fGgsZD1zWzJdO2gmJihkPXNbMl0pLG89dGhpcy4kbG9jYWxlKCksIWYmJmQmJihvPW4uTHNbZF0pLHRoaXMuJGQ9ZnVuY3Rpb24oZSx0LG4pe3RyeXtpZihbXCJ4XCIsXCJYXCJdLmluZGV4T2YodCk+LTEpcmV0dXJuIG5ldyBEYXRlKChcIlhcIj09PXQ/MWUzOjEpKmUpO3ZhciByPWModCkoZSksaT1yLnllYXIsbz1yLm1vbnRoLHM9ci5kYXksYT1yLmhvdXJzLGY9ci5taW51dGVzLGg9ci5zZWNvbmRzLHU9ci5taWxsaXNlY29uZHMsZD1yLnpvbmUsbD1uZXcgRGF0ZSxtPXN8fChpfHxvPzE6bC5nZXREYXRlKCkpLE09aXx8bC5nZXRGdWxsWWVhcigpLFk9MDtpJiYhb3x8KFk9bz4wP28tMTpsLmdldE1vbnRoKCkpO3ZhciBwPWF8fDAsdj1mfHwwLEQ9aHx8MCxnPXV8fDA7cmV0dXJuIGQ/bmV3IERhdGUoRGF0ZS5VVEMoTSxZLG0scCx2LEQsZys2MCpkLm9mZnNldCoxZTMpKTpuP25ldyBEYXRlKERhdGUuVVRDKE0sWSxtLHAsdixELGcpKTpuZXcgRGF0ZShNLFksbSxwLHYsRCxnKX1jYXRjaChlKXtyZXR1cm4gbmV3IERhdGUoXCJcIil9fSh0LGEsciksdGhpcy5pbml0KCksZCYmITAhPT1kJiYodGhpcy4kTD10aGlzLmxvY2FsZShkKS4kTCksdSYmdCE9dGhpcy5mb3JtYXQoYSkmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKSxvPXt9fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbD1hLmxlbmd0aCxtPTE7bTw9bDttKz0xKXtzWzFdPWFbbS0xXTt2YXIgTT1uLmFwcGx5KHRoaXMscyk7aWYoTS5pc1ZhbGlkKCkpe3RoaXMuJGQ9TS4kZCx0aGlzLiRMPU0uJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWwmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKX1lbHNlIGkuY2FsbCh0aGlzLGUpfX19KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10285\n')},96036:function(module){eval('!function(n,e){ true?module.exports=e():0}(this,(function(){"use strict";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format("MMMM"):u(n,"months")},monthsShort:function(e){return e?e.format("MMM"):u(n,"monthsShort","months",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format("dddd"):u(n,"weekdays")},weekdaysMin:function(e){return e?e.format("dd"):u(n,"weekdaysMin","weekdays",2)},weekdaysShort:function(e){return e?e.format("ddd"):u(n,"weekdaysShort","weekdays",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),"months")},t.monthsShort=function(){return u(i(),"monthsShort","months",3)},t.weekdays=function(n){return u(i(),"weekdays",null,null,n)},t.weekdaysShort=function(n){return u(i(),"weekdaysShort","weekdays",3,n)},t.weekdaysMin=function(n){return u(i(),"weekdaysMin","weekdays",2,n)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYwMzYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBaUksQ0FBQyxrQkFBa0IsYUFBYSx1QkFBdUIsZ0NBQWdDLDRCQUE0Qix1QkFBdUIsdUVBQXVFLG9CQUFvQixHQUFHLGVBQWUsa0JBQWtCLDRCQUE0Qix1QkFBdUIsR0FBRyxjQUFjLHdCQUF3QixpQkFBaUIsaUNBQWlDLG1FQUFtRSxxQkFBcUIsR0FBRyw2QkFBNkIsY0FBYyxXQUFXLE9BQU8sbUJBQW1CLHdDQUF3Qyx5QkFBeUIsdURBQXVELDJCQUEyQixnQ0FBZ0Msc0JBQXNCLDBDQUEwQyx5QkFBeUIsd0RBQXdELDJCQUEyQiwyREFBMkQsNEJBQTRCLHdCQUF3QixtRUFBbUUsd0JBQXdCLHNCQUFzQix5QkFBeUIsVUFBVSxPQUFPLDBCQUEwQixzQkFBc0IscUJBQXFCLG9CQUFvQiwwQkFBMEIseUJBQXlCLHdCQUF3Qix1QkFBdUIsbUJBQW1CLGtCQUFrQix3QkFBd0IsdUJBQXVCLDRCQUE0QixjQUFjLHdDQUF3QyxxQkFBcUIsdUJBQXVCLDBCQUEwQix1Q0FBdUMsd0JBQXdCLHFDQUFxQyw2QkFBNkIsNkNBQTZDLDJCQUEyQiw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2xvY2FsZURhdGEuanM/NTc1YSJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24obixlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToobj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOm58fHNlbGYpLmRheWpzX3BsdWdpbl9sb2NhbGVEYXRhPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24obixlLHQpe3ZhciByPWUucHJvdG90eXBlLG89ZnVuY3Rpb24obil7cmV0dXJuIG4mJihuLmluZGV4T2Y/bjpuLnMpfSx1PWZ1bmN0aW9uKG4sZSx0LHIsdSl7dmFyIGk9bi5uYW1lP246bi4kbG9jYWxlKCksYT1vKGlbZV0pLHM9byhpW3RdKSxmPWF8fHMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gbi5zbGljZSgwLHIpfSkpO2lmKCF1KXJldHVybiBmO3ZhciBkPWkud2Vla1N0YXJ0O3JldHVybiBmLm1hcCgoZnVuY3Rpb24obixlKXtyZXR1cm4gZlsoZSsoZHx8MCkpJTddfSkpfSxpPWZ1bmN0aW9uKCl7cmV0dXJuIHQuTHNbdC5sb2NhbGUoKV19LGE9ZnVuY3Rpb24obixlKXtyZXR1cm4gbi5mb3JtYXRzW2VdfHxmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChNTU1NfE1NfEREfGRkZGQpL2csKGZ1bmN0aW9uKG4sZSx0KXtyZXR1cm4gZXx8dC5zbGljZSgxKX0pKX0obi5mb3JtYXRzW2UudG9VcHBlckNhc2UoKV0pfSxzPWZ1bmN0aW9uKCl7dmFyIG49dGhpcztyZXR1cm57bW9udGhzOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UuZm9ybWF0KFwiTU1NTVwiKTp1KG4sXCJtb250aHNcIil9LG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUpe3JldHVybiBlP2UuZm9ybWF0KFwiTU1NXCIpOnUobixcIm1vbnRoc1Nob3J0XCIsXCJtb250aHNcIiwzKX0sZmlyc3REYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gbi4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwfSx3ZWVrZGF5czpmdW5jdGlvbihlKXtyZXR1cm4gZT9lLmZvcm1hdChcImRkZGRcIik6dShuLFwid2Vla2RheXNcIil9LHdlZWtkYXlzTWluOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UuZm9ybWF0KFwiZGRcIik6dShuLFwid2Vla2RheXNNaW5cIixcIndlZWtkYXlzXCIsMil9LHdlZWtkYXlzU2hvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS5mb3JtYXQoXCJkZGRcIik6dShuLFwid2Vla2RheXNTaG9ydFwiLFwid2Vla2RheXNcIiwzKX0sbG9uZ0RhdGVGb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGEobi4kbG9jYWxlKCksZSl9LG1lcmlkaWVtOnRoaXMuJGxvY2FsZSgpLm1lcmlkaWVtLG9yZGluYWw6dGhpcy4kbG9jYWxlKCkub3JkaW5hbH19O3IubG9jYWxlRGF0YT1mdW5jdGlvbigpe3JldHVybiBzLmJpbmQodGhpcykoKX0sdC5sb2NhbGVEYXRhPWZ1bmN0aW9uKCl7dmFyIG49aSgpO3JldHVybntmaXJzdERheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiBuLndlZWtTdGFydHx8MH0sd2Vla2RheXM6ZnVuY3Rpb24oKXtyZXR1cm4gdC53ZWVrZGF5cygpfSx3ZWVrZGF5c1Nob3J0OmZ1bmN0aW9uKCl7cmV0dXJuIHQud2Vla2RheXNTaG9ydCgpfSx3ZWVrZGF5c01pbjpmdW5jdGlvbigpe3JldHVybiB0LndlZWtkYXlzTWluKCl9LG1vbnRoczpmdW5jdGlvbigpe3JldHVybiB0Lm1vbnRocygpfSxtb250aHNTaG9ydDpmdW5jdGlvbigpe3JldHVybiB0Lm1vbnRoc1Nob3J0KCl9LGxvbmdEYXRlRm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBhKG4sZSl9LG1lcmlkaWVtOm4ubWVyaWRpZW0sb3JkaW5hbDpuLm9yZGluYWx9fSx0Lm1vbnRocz1mdW5jdGlvbigpe3JldHVybiB1KGkoKSxcIm1vbnRoc1wiKX0sdC5tb250aHNTaG9ydD1mdW5jdGlvbigpe3JldHVybiB1KGkoKSxcIm1vbnRoc1Nob3J0XCIsXCJtb250aHNcIiwzKX0sdC53ZWVrZGF5cz1mdW5jdGlvbihuKXtyZXR1cm4gdShpKCksXCJ3ZWVrZGF5c1wiLG51bGwsbnVsbCxuKX0sdC53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKG4pe3JldHVybiB1KGkoKSxcIndlZWtkYXlzU2hvcnRcIixcIndlZWtkYXlzXCIsMyxuKX0sdC53ZWVrZGF5c01pbj1mdW5jdGlvbihuKXtyZXR1cm4gdShpKCksXCJ3ZWVrZGF5c01pblwiLFwid2Vla2RheXNcIiwyLG4pfX19KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///96036\n')},56176:function(module){eval('!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t="YYYY-MM-DDTHH:mm:ssZ");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYxNzYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBc0ksQ0FBQyxrQkFBa0IsYUFBYSxPQUFPLHlIQUF5SCx1QkFBdUIsNkJBQTZCLG9DQUFvQyx1Q0FBdUMsNkNBQTZDLHNDQUFzQyxJQUFJLEdBQUcsSUFBSSxxQkFBcUIseUJBQXlCLHFGQUFxRixxQkFBcUIsR0FBRyxHQUFHLGdCQUFnQixJQUFJLHdCQUF3QiIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vbG9jYWxpemVkRm9ybWF0LmpzP2E5YmQiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19wbHVnaW5fbG9jYWxpemVkRm9ybWF0PXQoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17TFRTOlwiaDptbTpzcyBBXCIsTFQ6XCJoOm1tIEFcIixMOlwiTU0vREQvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBXCJ9O3JldHVybiBmdW5jdGlvbih0LG8sbil7dmFyIHI9by5wcm90b3R5cGUsaT1yLmZvcm1hdDtuLmVuLmZvcm1hdHM9ZSxyLmZvcm1hdD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1cIllZWVktTU0tRERUSEg6bW06c3NaXCIpO3ZhciBvPXRoaXMuJGxvY2FsZSgpLmZvcm1hdHMsbj1mdW5jdGlvbih0LG8pe3JldHVybiB0LnJlcGxhY2UoLyhcXFtbXlxcXV0rXSl8KExUUz98bHsxLDR9fEx7MSw0fSkvZywoZnVuY3Rpb24odCxuLHIpe3ZhciBpPXImJnIudG9VcHBlckNhc2UoKTtyZXR1cm4gbnx8b1tyXXx8ZVtyXXx8b1tpXS5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChNTU1NfE1NfEREfGRkZGQpL2csKGZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdHx8by5zbGljZSgxKX0pKX0pKX0odCx2b2lkIDA9PT1vP3t9Om8pO3JldHVybiBpLmNhbGwodGhpcyxuKX19fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56176\n')},29387:function(module){eval('!function(t,e){ true?module.exports=e():0}(this,(function(){"use strict";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||"short",o=t+"|"+i,r=e[o];return r||(r=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,v=r[0]+"-"+r[1]+"-"+r[2]+" "+l+":"+r[4]+":"+r[5]+":000",h=+e;return(o.utc(v).valueOf()-(h-=h%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n=this.utcOffset(),i=this.toDate(),a=i.toLocaleString("en-US",{timeZone:t}),u=Math.round((i-new Date(a))/1e3/60),f=o(a).$set("millisecond",this.$ms).utcOffset(15*-Math.round(i.getTimezoneOffset()/15)-u,!0);if(e){var s=f.utcOffset();f=f.add(n-s,"minute")}return f.$x.$timezone=t,f},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return"timezonename"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"));return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if("string"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkzODcuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBK0gsQ0FBQyxrQkFBa0IsYUFBYSxPQUFPLDhDQUE4QyxNQUFNLHVCQUF1Qix3QkFBd0IsaUJBQWlCLEVBQUUsa0NBQWtDLGlCQUFpQixFQUFFLCtDQUErQyw4Q0FBOEMsa0lBQWtJLFlBQVksTUFBTSwwQkFBMEIsaUJBQWlCLDBCQUEwQixXQUFXLE1BQU0scUNBQXFDLDRCQUE0QixxRkFBcUYsMENBQTBDLGVBQWUsbUJBQW1CLGtCQUFrQixtRUFBbUUsV0FBVyxvSUFBb0ksTUFBTSxvQkFBb0Isc0JBQXNCLDBCQUEwQiwwQkFBMEIsNERBQTRELGVBQWUsb0JBQW9CLDRDQUE0QyxHQUFHLG1CQUFtQixnQkFBZ0Isd0JBQXdCLHdEQUF3RCxnREFBZ0QsOENBQThDLHNCQUFzQixpQ0FBaUMsd0NBQXdDLHNCQUFzQiwwQkFBMEIscUJBQXFCLDJCQUEyQiwwREFBMEQsNkRBQTZELDBCQUEwQix1QkFBdUIsd0RBQXdELDZCQUE2QixNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi90aW1lem9uZS5qcz8zY2Y1Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX3RpbWV6b25lPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17eWVhcjowLG1vbnRoOjEsZGF5OjIsaG91cjozLG1pbnV0ZTo0LHNlY29uZDo1fSxlPXt9O3JldHVybiBmdW5jdGlvbihuLGksbyl7dmFyIHIsYT1mdW5jdGlvbih0LG4saSl7dm9pZCAwPT09aSYmKGk9e30pO3ZhciBvPW5ldyBEYXRlKHQpLHI9ZnVuY3Rpb24odCxuKXt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9bi50aW1lWm9uZU5hbWV8fFwic2hvcnRcIixvPXQrXCJ8XCIraSxyPWVbb107cmV0dXJuIHJ8fChyPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tVVNcIix7aG91cjEyOiExLHRpbWVab25lOnQseWVhcjpcIm51bWVyaWNcIixtb250aDpcIjItZGlnaXRcIixkYXk6XCIyLWRpZ2l0XCIsaG91cjpcIjItZGlnaXRcIixtaW51dGU6XCIyLWRpZ2l0XCIsc2Vjb25kOlwiMi1kaWdpdFwiLHRpbWVab25lTmFtZTppfSksZVtvXT1yKSxyfShuLGkpO3JldHVybiByLmZvcm1hdFRvUGFydHMobyl9LHU9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk9YShlLG4pLHI9W10sdT0wO3U8aS5sZW5ndGg7dSs9MSl7dmFyIGY9aVt1XSxzPWYudHlwZSxtPWYudmFsdWUsYz10W3NdO2M+PTAmJihyW2NdPXBhcnNlSW50KG0sMTApKX12YXIgZD1yWzNdLGw9MjQ9PT1kPzA6ZCx2PXJbMF0rXCItXCIrclsxXStcIi1cIityWzJdK1wiIFwiK2wrXCI6XCIrcls0XStcIjpcIityWzVdK1wiOjAwMFwiLGg9K2U7cmV0dXJuKG8udXRjKHYpLnZhbHVlT2YoKS0oaC09aCUxZTMpKS82ZTR9LGY9aS5wcm90b3R5cGU7Zi50ej1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PXIpO3ZhciBuPXRoaXMudXRjT2Zmc2V0KCksaT10aGlzLnRvRGF0ZSgpLGE9aS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOnR9KSx1PU1hdGgucm91bmQoKGktbmV3IERhdGUoYSkpLzFlMy82MCksZj1vKGEpLiRzZXQoXCJtaWxsaXNlY29uZFwiLHRoaXMuJG1zKS51dGNPZmZzZXQoMTUqLU1hdGgucm91bmQoaS5nZXRUaW1lem9uZU9mZnNldCgpLzE1KS11LCEwKTtpZihlKXt2YXIgcz1mLnV0Y09mZnNldCgpO2Y9Zi5hZGQobi1zLFwibWludXRlXCIpfXJldHVybiBmLiR4LiR0aW1lem9uZT10LGZ9LGYub2Zmc2V0TmFtZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLiR4LiR0aW1lem9uZXx8by50ei5ndWVzcygpLG49YSh0aGlzLnZhbHVlT2YoKSxlLHt0aW1lWm9uZU5hbWU6dH0pLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVyblwidGltZXpvbmVuYW1lXCI9PT10LnR5cGUudG9Mb3dlckNhc2UoKX0pKTtyZXR1cm4gbiYmbi52YWx1ZX07dmFyIHM9Zi5zdGFydE9mO2Yuc3RhcnRPZj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLiR4fHwhdGhpcy4keC4kdGltZXpvbmUpcmV0dXJuIHMuY2FsbCh0aGlzLHQsZSk7dmFyIG49byh0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpKTtyZXR1cm4gcy5jYWxsKG4sdCxlKS50eih0aGlzLiR4LiR0aW1lem9uZSwhMCl9LG8udHo9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4mJmUsYT1ufHxlfHxyLGY9dSgrbygpLGEpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVybiBvKHQpLnR6KGEpO3ZhciBzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LTYwKmUqMWUzLG89dShpLG4pO2lmKGU9PT1vKXJldHVybltpLGVdO3ZhciByPXUoaS09NjAqKG8tZSkqMWUzLG4pO3JldHVybiBvPT09cj9baSxvXTpbdC02MCpNYXRoLm1pbihvLHIpKjFlMyxNYXRoLm1heChvLHIpXX0oby51dGModCxpKS52YWx1ZU9mKCksZixhKSxtPXNbMF0sYz1zWzFdLGQ9byhtKS51dGNPZmZzZXQoYyk7cmV0dXJuIGQuJHguJHRpbWV6b25lPWEsZH0sby50ei5ndWVzcz1mdW5jdGlvbigpe3JldHVybiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmV9LG8udHouc2V0RGVmYXVsdD1mdW5jdGlvbih0KXtyPXR9fX0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29387\n')},70178:function(module){eval('!function(t,i){ true?module.exports=i():0}(this,(function(){"use strict";var t="minute",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if("string"==typeof s&&(s=function(t){void 0===t&&(t="");var s=t.match(i);if(!s)return null;var f=(""+s[0]).match(e)||["-",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:"+"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAxNzguanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFvRCxvQkFBb0IsQ0FBMEgsQ0FBQyxrQkFBa0IsYUFBYSx5REFBeUQsdUJBQXVCLGtCQUFrQixrQkFBa0IsT0FBTyw4QkFBOEIsZ0JBQWdCLG1CQUFtQix1QkFBdUIsc0JBQXNCLEVBQUUscUNBQXFDLG9CQUFvQix3QkFBd0Isc0JBQXNCLEdBQUcsY0FBYyxvQkFBb0IseUZBQXlGLGFBQWEsa0JBQWtCLFlBQVksY0FBYyw0TUFBNE0sbUJBQW1CLGtCQUFrQiwwQkFBMEIsc0JBQXNCLG1FQUFtRSxzQ0FBc0MsbUJBQW1CLGlCQUFpQixrQkFBa0IsNkRBQTZELDRCQUE0QiwwQkFBMEIsb0NBQW9DLHFDQUFxQyxVQUFVLG9FQUFvRSwwREFBMEQsa0JBQWtCLFVBQVUsZUFBZSxxQkFBcUIsK0NBQStDLHNCQUFzQixzQkFBc0IsdUdBQXVHLCtCQUErQixvQkFBb0IsZ0JBQWdCLDBCQUEwQixtQ0FBbUMsdUJBQXVCLG9DQUFvQyxlQUFlLHFCQUFxQiw2RkFBNkYsYUFBYSx1QkFBdUIsK0NBQStDLGtDQUFrQyx5QkFBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcnlvc3RhdC13ZWIvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3V0Yy5qcz8yMjkwIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGkpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWkoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGkpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX3V0Yz1pKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9XCJtaW51dGVcIixpPS9bKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9nLGU9LyhbKy1dfFxcZFxcZCkvZztyZXR1cm4gZnVuY3Rpb24ocyxmLG4pe3ZhciB1PWYucHJvdG90eXBlO24udXRjPWZ1bmN0aW9uKHQpe3ZhciBpPXtkYXRlOnQsdXRjOiEwLGFyZ3M6YXJndW1lbnRzfTtyZXR1cm4gbmV3IGYoaSl9LHUudXRjPWZ1bmN0aW9uKGkpe3ZhciBlPW4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiEwfSk7cmV0dXJuIGk/ZS5hZGQodGhpcy51dGNPZmZzZXQoKSx0KTplfSx1LmxvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiExfSl9O3ZhciBvPXUucGFyc2U7dS5wYXJzZT1mdW5jdGlvbih0KXt0LnV0YyYmKHRoaXMuJHU9ITApLHRoaXMuJHV0aWxzKCkudSh0LiRvZmZzZXQpfHwodGhpcy4kb2Zmc2V0PXQuJG9mZnNldCksby5jYWxsKHRoaXMsdCl9O3ZhciByPXUuaW5pdDt1LmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiR1KXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRVVENGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRVVENNb250aCgpLHRoaXMuJEQ9dC5nZXRVVENEYXRlKCksdGhpcy4kVz10LmdldFVUQ0RheSgpLHRoaXMuJEg9dC5nZXRVVENIb3VycygpLHRoaXMuJG09dC5nZXRVVENNaW51dGVzKCksdGhpcy4kcz10LmdldFVUQ1NlY29uZHMoKSx0aGlzLiRtcz10LmdldFVUQ01pbGxpc2Vjb25kcygpfWVsc2Ugci5jYWxsKHRoaXMpfTt2YXIgYT11LnV0Y09mZnNldDt1LnV0Y09mZnNldD1mdW5jdGlvbihzLGYpe3ZhciBuPXRoaXMuJHV0aWxzKCkudTtpZihuKHMpKXJldHVybiB0aGlzLiR1PzA6bih0aGlzLiRvZmZzZXQpP2EuY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHMmJihzPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiXCIpO3ZhciBzPXQubWF0Y2goaSk7aWYoIXMpcmV0dXJuIG51bGw7dmFyIGY9KFwiXCIrc1swXSkubWF0Y2goZSl8fFtcIi1cIiwwLDBdLG49ZlswXSx1PTYwKitmWzFdKyArZlsyXTtyZXR1cm4gMD09PXU/MDpcIitcIj09PW4/dTotdX0ocyksbnVsbD09PXMpKXJldHVybiB0aGlzO3ZhciB1PU1hdGguYWJzKHMpPD0xNj82MCpzOnMsbz10aGlzO2lmKGYpcmV0dXJuIG8uJG9mZnNldD11LG8uJHU9MD09PXMsbztpZigwIT09cyl7dmFyIHI9dGhpcy4kdT90aGlzLnRvRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk6LTEqdGhpcy51dGNPZmZzZXQoKTsobz10aGlzLmxvY2FsKCkuYWRkKHUrcix0KSkuJG9mZnNldD11LG8uJHguJGxvY2FsT2Zmc2V0PXJ9ZWxzZSBvPXRoaXMudXRjKCk7cmV0dXJuIG99O3ZhciBoPXUuZm9ybWF0O3UuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBpPXR8fCh0aGlzLiR1P1wiWVlZWS1NTS1ERFRISDptbTpzc1taXVwiOlwiXCIpO3JldHVybiBoLmNhbGwodGhpcyxpKX0sdS52YWx1ZU9mPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kdXRpbHMoKS51KHRoaXMuJG9mZnNldCk/MDp0aGlzLiRvZmZzZXQrKHRoaXMuJHguJGxvY2FsT2Zmc2V0fHx0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiB0aGlzLiRkLnZhbHVlT2YoKS02ZTQqdH0sdS5pc1VUQz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy4kdX0sdS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LHUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b1VUQ1N0cmluZygpfTt2YXIgbD11LnRvRGF0ZTt1LnRvRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cInNcIj09PXQmJnRoaXMuJG9mZnNldD9uKHRoaXMuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzczpTU1NcIikpLnRvRGF0ZSgpOmwuY2FsbCh0aGlzKX07dmFyIGM9dS5kaWZmO3UuZGlmZj1mdW5jdGlvbih0LGksZSl7aWYodCYmdGhpcy4kdT09PXQuJHUpcmV0dXJuIGMuY2FsbCh0aGlzLHQsaSxlKTt2YXIgcz10aGlzLmxvY2FsKCksZj1uKHQpLmxvY2FsKCk7cmV0dXJuIGMuY2FsbChzLGYsaSxlKX19fSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///70178\n')},79790:i=>{"use strict";i.exports=JSON.parse('[{"key":"af","name":"Afrikaans"},{"key":"am","name":"Amharic"},{"key":"ar-dz","name":"Arabic (Algeria)"},{"key":"ar-iq","name":" Arabic (Iraq)"},{"key":"ar-kw","name":"Arabic (Kuwait)"},{"key":"ar-ly","name":"Arabic (Lybia)"},{"key":"ar-ma","name":"Arabic (Morocco)"},{"key":"ar-sa","name":"Arabic (Saudi Arabia)"},{"key":"ar-tn","name":" Arabic (Tunisia)"},{"key":"ar","name":"Arabic"},{"key":"az","name":"Azerbaijani"},{"key":"be","name":"Belarusian"},{"key":"bg","name":"Bulgarian"},{"key":"bi","name":"Bislama"},{"key":"bm","name":"Bambara"},{"key":"bn-bd","name":"Bengali (Bangladesh)"},{"key":"bn","name":"Bengali"},{"key":"bo","name":"Tibetan"},{"key":"br","name":"Breton"},{"key":"bs","name":"Bosnian"},{"key":"ca","name":"Catalan"},{"key":"cs","name":"Czech"},{"key":"cv","name":"Chuvash"},{"key":"cy","name":"Welsh"},{"key":"da","name":"Danish"},{"key":"de-at","name":"German (Austria)"},{"key":"de-ch","name":"German (Switzerland)"},{"key":"de","name":"German"},{"key":"dv","name":"Maldivian"},{"key":"el","name":"Greek"},{"key":"en-au","name":"English (Australia)"},{"key":"en-ca","name":"English (Canada)"},{"key":"en-gb","name":"English (United Kingdom)"},{"key":"en-ie","name":"English (Ireland)"},{"key":"en-il","name":"English (Israel)"},{"key":"en-in","name":"English (India)"},{"key":"en-nz","name":"English (New Zealand)"},{"key":"en-sg","name":"English (Singapore)"},{"key":"en-tt","name":"English (Trinidad & Tobago)"},{"key":"en","name":"English"},{"key":"eo","name":"Esperanto"},{"key":"es-do","name":"Spanish (Dominican Republic)"},{"key":"es","name":"Spanish"},{"key":"et","name":"Estonian"},{"key":"eu","name":"Basque"},{"key":"fa","name":"Persian"},{"key":"fi","name":"Finnish"},{"key":"fo","name":"Faroese"},{"key":"fr-ca","name":"French (Canada)"},{"key":"fr-ch","name":"French (Switzerland)"},{"key":"fr","name":"French"},{"key":"fy","name":"Frisian"},{"key":"ga","name":"Irish or Irish Gaelic"},{"key":"gd","name":"Scottish Gaelic"},{"key":"gl","name":"Galician"},{"key":"gom-latn","name":"Konkani Latin script"},{"key":"gu","name":"Gujarati"},{"key":"he","name":"Hebrew"},{"key":"hi","name":"Hindi"},{"key":"hr","name":"Croatian"},{"key":"ht","name":"Haitian Creole (Haiti)"},{"key":"hu","name":"Hungarian"},{"key":"hy-am","name":"Armenian"},{"key":"id","name":"Indonesian"},{"key":"is","name":"Icelandic"},{"key":"it-ch","name":"Italian (Switzerland)"},{"key":"it","name":"Italian"},{"key":"ja","name":"Japanese"},{"key":"jv","name":"Javanese"},{"key":"ka","name":"Georgian"},{"key":"kk","name":"Kazakh"},{"key":"km","name":"Cambodian"},{"key":"kn","name":"Kannada"},{"key":"ko","name":"Korean"},{"key":"ku","name":"Kurdish"},{"key":"ky","name":"Kyrgyz"},{"key":"lb","name":"Luxembourgish"},{"key":"lo","name":"Lao"},{"key":"lt","name":"Lithuanian"},{"key":"lv","name":"Latvian"},{"key":"me","name":"Montenegrin"},{"key":"mi","name":"Maori"},{"key":"mk","name":"Macedonian"},{"key":"ml","name":"Malayalam"},{"key":"mn","name":"Mongolian"},{"key":"mr","name":"Marathi"},{"key":"ms-my","name":"Malay"},{"key":"ms","name":"Malay"},{"key":"mt","name":"Maltese (Malta)"},{"key":"my","name":"Burmese"},{"key":"nb","name":"Norwegian Bokmål"},{"key":"ne","name":"Nepalese"},{"key":"nl-be","name":"Dutch (Belgium)"},{"key":"nl","name":"Dutch"},{"key":"nn","name":"Nynorsk"},{"key":"oc-lnc","name":"Occitan, lengadocian dialecte"},{"key":"pa-in","name":"Punjabi (India)"},{"key":"pl","name":"Polish"},{"key":"pt-br","name":"Portuguese (Brazil)"},{"key":"pt","name":"Portuguese"},{"key":"rn","name":"Kirundi"},{"key":"ro","name":"Romanian"},{"key":"ru","name":"Russian"},{"key":"rw","name":"Kinyarwanda (Rwanda)"},{"key":"sd","name":"Sindhi"},{"key":"se","name":"Northern Sami"},{"key":"si","name":"Sinhalese"},{"key":"sk","name":"Slovak"},{"key":"sl","name":"Slovenian"},{"key":"sq","name":"Albanian"},{"key":"sr-cyrl","name":"Serbian Cyrillic"},{"key":"sr","name":"Serbian"},{"key":"ss","name":"siSwati"},{"key":"sv-fi","name":"Finland Swedish"},{"key":"sv","name":"Swedish"},{"key":"sw","name":"Swahili"},{"key":"ta","name":"Tamil"},{"key":"te","name":"Telugu"},{"key":"tet","name":"Tetun Dili (East Timor)"},{"key":"tg","name":"Tajik"},{"key":"th","name":"Thai"},{"key":"tk","name":"Turkmen"},{"key":"tl-ph","name":"Tagalog (Philippines)"},{"key":"tlh","name":"Klingon"},{"key":"tr","name":"Turkish"},{"key":"tzl","name":"Talossan"},{"key":"tzm-latn","name":"Central Atlas Tamazight Latin"},{"key":"tzm","name":"Central Atlas Tamazight"},{"key":"ug-cn","name":"Uyghur (China)"},{"key":"uk","name":"Ukrainian"},{"key":"ur","name":"Urdu"},{"key":"uz-latn","name":"Uzbek Latin"},{"key":"uz","name":"Uzbek"},{"key":"vi","name":"Vietnamese"},{"key":"x-pseudo","name":"Pseudo"},{"key":"yo","name":"Yoruba Nigeria"},{"key":"zh-cn","name":"Chinese (China)"},{"key":"zh-hk","name":"Chinese (Hong Kong)"},{"key":"zh-tw","name":"Chinese (Taiwan)"},{"key":"zh","name":"Chinese"},{"key":"es-mx","name":"Spanish (Mexico)"},{"key":"es-pr","name":"Spanish (Puerto Rico)"},{"key":"es-us","name":"Spanish (United States)"}]')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.deepmerge.1471578175a44b46.bundle.js b/assets/demo/site/npm.deepmerge.1471578175a44b46.bundle.js
new file mode 100644
index 00000000..0759846d
--- /dev/null
+++ b/assets/demo/site/npm.deepmerge.1471578175a44b46.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4753],{9996:module=>{eval("\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFLElBQUk7QUFDTjs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2NyeW9zdGF0LXdlYi8uL25vZGVfbW9kdWxlcy9kZWVwbWVyZ2UvZGlzdC9janMuanM/Njg2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpc01lcmdlYWJsZU9iamVjdCA9IGZ1bmN0aW9uIGlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSB7XG5cdHJldHVybiBpc05vbk51bGxPYmplY3QodmFsdWUpXG5cdFx0JiYgIWlzU3BlY2lhbCh2YWx1ZSlcbn07XG5cbmZ1bmN0aW9uIGlzTm9uTnVsbE9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG59XG5cbmZ1bmN0aW9uIGlzU3BlY2lhbCh2YWx1ZSkge1xuXHR2YXIgc3RyaW5nVmFsdWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG5cdHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcblx0XHR8fCBzdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG5cdFx0fHwgaXNSZWFjdEVsZW1lbnQodmFsdWUpXG59XG5cbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9iNWFjOTYzZmI3OTFkMTI5OGU3ZjM5NjIzNjM4M2JjOTU1ZjkxNmMxL3NyYy9pc29tb3JwaGljL2NsYXNzaWMvZWxlbWVudC9SZWFjdEVsZW1lbnQuanMjTDIxLUwyNVxudmFyIGNhblVzZVN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBjYW5Vc2VTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG5cbmZ1bmN0aW9uIGlzUmVhY3RFbGVtZW50KHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG59XG5cbmZ1bmN0aW9uIGVtcHR5VGFyZ2V0KHZhbCkge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpID8gW10gOiB7fVxufVxuXG5mdW5jdGlvbiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCh2YWx1ZSwgb3B0aW9ucykge1xuXHRyZXR1cm4gKG9wdGlvbnMuY2xvbmUgIT09IGZhbHNlICYmIG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QodmFsdWUpKVxuXHRcdD8gZGVlcG1lcmdlKGVtcHR5VGFyZ2V0KHZhbHVlKSwgdmFsdWUsIG9wdGlvbnMpXG5cdFx0OiB2YWx1ZVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0QXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRyZXR1cm4gdGFyZ2V0LmNvbmNhdChzb3VyY2UpLm1hcChmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0cmV0dXJuIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKGVsZW1lbnQsIG9wdGlvbnMpXG5cdH0pXG59XG5cbmZ1bmN0aW9uIGdldE1lcmdlRnVuY3Rpb24oa2V5LCBvcHRpb25zKSB7XG5cdGlmICghb3B0aW9ucy5jdXN0b21NZXJnZSkge1xuXHRcdHJldHVybiBkZWVwbWVyZ2Vcblx0fVxuXHR2YXIgY3VzdG9tTWVyZ2UgPSBvcHRpb25zLmN1c3RvbU1lcmdlKGtleSk7XG5cdHJldHVybiB0eXBlb2YgY3VzdG9tTWVyZ2UgPT09ICdmdW5jdGlvbicgPyBjdXN0b21NZXJnZSA6IGRlZXBtZXJnZVxufVxuXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlT3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkge1xuXHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc1xuXHRcdD8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpLmZpbHRlcihmdW5jdGlvbihzeW1ib2wpIHtcblx0XHRcdHJldHVybiBPYmplY3QucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0YXJnZXQsIHN5bWJvbClcblx0XHR9KVxuXHRcdDogW11cbn1cblxuZnVuY3Rpb24gZ2V0S2V5cyh0YXJnZXQpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldCkuY29uY2F0KGdldEVudW1lcmFibGVPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSlcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlJc09uT2JqZWN0KG9iamVjdCwgcHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gcHJvcGVydHkgaW4gb2JqZWN0XG5cdH0gY2F0Y2goXykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG59XG5cbi8vIFByb3RlY3RzIGZyb20gcHJvdG90eXBlIHBvaXNvbmluZyBhbmQgdW5leHBlY3RlZCBtZXJnaW5nIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4uXG5mdW5jdGlvbiBwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSB7XG5cdHJldHVybiBwcm9wZXJ0eUlzT25PYmplY3QodGFyZ2V0LCBrZXkpIC8vIFByb3BlcnRpZXMgYXJlIHNhZmUgdG8gbWVyZ2UgaWYgdGhleSBkb24ndCBleGlzdCBpbiB0aGUgdGFyZ2V0IHlldCxcblx0XHQmJiAhKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSAvLyB1bnNhZmUgaWYgdGhleSBleGlzdCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLFxuXHRcdFx0JiYgT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGFyZ2V0LCBrZXkpKSAvLyBhbmQgYWxzbyB1bnNhZmUgaWYgdGhleSdyZSBub25lbnVtZXJhYmxlLlxufVxuXG5mdW5jdGlvbiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHR2YXIgZGVzdGluYXRpb24gPSB7fTtcblx0aWYgKG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QodGFyZ2V0KSkge1xuXHRcdGdldEtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHRhcmdldFtrZXldLCBvcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXHRnZXRLZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcblx0XHRpZiAocHJvcGVydHlJc1Vuc2FmZSh0YXJnZXQsIGtleSkpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChwcm9wZXJ0eUlzT25PYmplY3QodGFyZ2V0LCBrZXkpICYmIG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3Qoc291cmNlW2tleV0pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gZ2V0TWVyZ2VGdW5jdGlvbihrZXksIG9wdGlvbnMpKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uXG59XG5cbmZ1bmN0aW9uIGRlZXBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0b3B0aW9ucy5hcnJheU1lcmdlID0gb3B0aW9ucy5hcnJheU1lcmdlIHx8IGRlZmF1bHRBcnJheU1lcmdlO1xuXHRvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0ID0gb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCB8fCBpc01lcmdlYWJsZU9iamVjdDtcblx0Ly8gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQgaXMgYWRkZWQgdG8gYG9wdGlvbnNgIHNvIHRoYXQgY3VzdG9tIGFycmF5TWVyZ2UoKVxuXHQvLyBpbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSBpdC4gVGhlIGNhbGxlciBtYXkgbm90IHJlcGxhY2UgaXQuXG5cdG9wdGlvbnMuY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQgPSBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZDtcblxuXHR2YXIgc291cmNlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc291cmNlKTtcblx0dmFyIHRhcmdldElzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRhcmdldCk7XG5cdHZhciBzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoID0gc291cmNlSXNBcnJheSA9PT0gdGFyZ2V0SXNBcnJheTtcblxuXHRpZiAoIXNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2gpIHtcblx0XHRyZXR1cm4gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQoc291cmNlLCBvcHRpb25zKVxuXHR9IGVsc2UgaWYgKHNvdXJjZUlzQXJyYXkpIHtcblx0XHRyZXR1cm4gb3B0aW9ucy5hcnJheU1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBtZXJnZU9iamVjdCh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucylcblx0fVxufVxuXG5kZWVwbWVyZ2UuYWxsID0gZnVuY3Rpb24gZGVlcG1lcmdlQWxsKGFycmF5LCBvcHRpb25zKSB7XG5cdGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheScpXG5cdH1cblxuXHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKHByZXYsIG5leHQpIHtcblx0XHRyZXR1cm4gZGVlcG1lcmdlKHByZXYsIG5leHQsIG9wdGlvbnMpXG5cdH0sIHt9KVxufTtcblxudmFyIGRlZXBtZXJnZV8xID0gZGVlcG1lcmdlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBtZXJnZV8xO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9996\n")}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.delaunator.c3fe326120717ae0.bundle.js b/assets/demo/site/npm.delaunator.c3fe326120717ae0.bundle.js
new file mode 100644
index 00000000..8ce07d89
--- /dev/null
+++ b/assets/demo/site/npm.delaunator.c3fe326120717ae0.bundle.js
@@ -0,0 +1 @@
+(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[4568],{88030:function(module){eval("(function (global, factory) {\n true ? module.exports = factory() :\n 0;\n}(this, function () { 'use strict';\n\n var EPSILON = Math.pow(2, -52);\n var EDGE_STACK = new Uint32Array(512);\n\n var Delaunator = function Delaunator(coords) {\n var n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') { throw new Error('Expected coords to contain numbers.'); }\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n var maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n };\n\n Delaunator.from = function from (points, getX, getY) {\n if ( getX === void 0 ) getX = defaultGetX;\n if ( getY === void 0 ) getY = defaultGetY;\n\n var n = points.length;\n var coords = new Float64Array(n * 2);\n\n for (var i = 0; i < n; i++) {\n var p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n };\n\n Delaunator.prototype.update = function update () {\n var ref = this;\n var coords = ref.coords;\n var hullPrev = ref._hullPrev;\n var hullNext = ref._hullNext;\n var hullTri = ref._hullTri;\n var hullHash = ref._hullHash;\n var n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n\n for (var i = 0; i < n; i++) {\n var x = coords[2 * i];\n var y = coords[2 * i + 1];\n if (x < minX) { minX = x; }\n if (y < minY) { minY = y; }\n if (x > maxX) { maxX = x; }\n if (y > maxY) { maxY = y; }\n this._ids[i] = i;\n }\n var cx = (minX + maxX) / 2;\n var cy = (minY + maxY) / 2;\n\n var minDist = Infinity;\n var i0, i1, i2;\n\n // pick a seed point close to the center\n for (var i$1 = 0; i$1 < n; i$1++) {\n var d = dist(cx, cy, coords[2 * i$1], coords[2 * i$1 + 1]);\n if (d < minDist) {\n i0 = i$1;\n minDist = d;\n }\n }\n var i0x = coords[2 * i0];\n var i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (var i$2 = 0; i$2 < n; i$2++) {\n if (i$2 === i0) { continue; }\n var d$1 = dist(i0x, i0y, coords[2 * i$2], coords[2 * i$2 + 1]);\n if (d$1 < minDist && d$1 > 0) {\n i1 = i$2;\n minDist = d$1;\n }\n }\n var i1x = coords[2 * i1];\n var i1y = coords[2 * i1 + 1];\n\n var minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (var i$3 = 0; i$3 < n; i$3++) {\n if (i$3 === i0 || i$3 === i1) { continue; }\n var r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i$3], coords[2 * i$3 + 1]);\n if (r < minRadius) {\n i2 = i$3;\n minRadius = r;\n }\n }\n var i2x = coords[2 * i2];\n var i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (var i$4 = 0; i$4 < n; i$4++) {\n this._dists[i$4] = (coords[2 * i$4] - coords[0]) || (coords[2 * i$4 + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n var hull = new Uint32Array(n);\n var j = 0;\n for (var i$5 = 0, d0 = -Infinity; i$5 < n; i$5++) {\n var id = this._ids[i$5];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {\n var i$6 = i1;\n var x$1 = i1x;\n var y$1 = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i$6;\n i2x = x$1;\n i2y = y$1;\n }\n\n var center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (var i$7 = 0; i$7 < n; i$7++) {\n this._dists[i$7] = dist(coords[2 * i$7], coords[2 * i$7 + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n var hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (var k = 0, xp = (void 0), yp = (void 0); k < this._ids.length; k++) {\n var i$8 = this._ids[k];\n var x$2 = coords[2 * i$8];\n var y$2 = coords[2 * i$8 + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x$2 - xp) <= EPSILON && Math.abs(y$2 - yp) <= EPSILON) { continue; }\n xp = x$2;\n yp = y$2;\n\n // skip seed triangle points\n if (i$8 === i0 || i$8 === i1 || i$8 === i2) { continue; }\n\n // find a visible edge on the convex hull using edge hash\n var start = 0;\n for (var j$1 = 0, key = this._hashKey(x$2, y$2); j$1 < this._hashSize; j$1++) {\n start = hullHash[(key + j$1) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) { break; }\n }\n\n start = hullPrev[start];\n var e = start, q = (void 0);\n while (q = hullNext[e], !orient(x$2, y$2, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) { continue; } // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n var t = this._addTriangle(e, i$8, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i$8] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n var n$1 = hullNext[e];\n while (q = hullNext[n$1], orient(x$2, y$2, coords[2 * n$1], coords[2 * n$1 + 1], coords[2 * q], coords[2 * q + 1])) {\n t = this._addTriangle(n$1, i$8, q, hullTri[i$8], -1, hullTri[n$1]);\n hullTri[i$8] = this._legalize(t + 2);\n hullNext[n$1] = n$1; // mark as removed\n hullSize--;\n n$1 = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient(x$2, y$2, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {\n t = this._addTriangle(q, i$8, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i$8] = e;\n hullNext[e] = hullPrev[n$1] = i$8;\n hullNext[i$8] = n$1;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x$2, y$2)] = i$8;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (var i$9 = 0, e$1 = this._hullStart; i$9 < hullSize; i$9++) {\n this.hull[i$9] = e$1;\n e$1 = hullNext[e$1];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n };\n\n Delaunator.prototype._hashKey = function _hashKey (x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n };\n\n Delaunator.prototype._legalize = function _legalize (a) {\n var ref = this;\n var triangles = ref._triangles;\n var halfedges = ref._halfedges;\n var coords = ref.coords;\n\n var i = 0;\n var ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n var b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/\\a\n * / || \\ / \\\n * / a||b \\flip/___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\/br\n * \\||/ \\ /\n * pr pr\n */\n var a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) { break; }\n a = EDGE_STACK[--i];\n continue;\n }\n\n var b0 = b - b % 3;\n var al = a0 + (a + 1) % 3;\n var bl = b0 + (b + 2) % 3;\n\n var p0 = triangles[ar];\n var pr = triangles[a];\n var pl = triangles[al];\n var p1 = triangles[bl];\n\n var illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n var hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n var e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n var br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) { break; }\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n };\n\n Delaunator.prototype._link = function _link (a, b) {\n this._halfedges[a] = b;\n if (b !== -1) { this._halfedges[b] = a; }\n };\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n Delaunator.prototype._addTriangle = function _addTriangle (i0, i1, i2, a, b, c) {\n var t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n };\n\n // monotonically increases with real angle, but doesn't need expensive trigonometry\n function pseudoAngle(dx, dy) {\n var p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n }\n\n function dist(ax, ay, bx, by) {\n var dx = ax - bx;\n var dy = ay - by;\n return dx * dx + dy * dy;\n }\n\n // return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check\n function orientIfSure(px, py, rx, ry, qx, qy) {\n var l = (ry - py) * (qx - px);\n var r = (rx - px) * (qy - py);\n return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;\n }\n\n // a more robust orientation test that's stable in a given triangle (to fix robustness issues)\n function orient(rx, ry, qx, qy, px, py) {\n var sign = orientIfSure(px, py, rx, ry, qx, qy) ||\n orientIfSure(rx, ry, qx, qy, px, py) ||\n orientIfSure(qx, qy, px, py, rx, ry);\n return sign < 0;\n }\n\n function inCircle(ax, ay, bx, by, cx, cy, px, py) {\n var dx = ax - px;\n var dy = ay - py;\n var ex = bx - px;\n var ey = by - py;\n var fx = cx - px;\n var fy = cy - py;\n\n var ap = dx * dx + dy * dy;\n var bp = ex * ex + ey * ey;\n var cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n }\n\n function circumradius(ax, ay, bx, by, cx, cy) {\n var dx = bx - ax;\n var dy = by - ay;\n var ex = cx - ax;\n var ey = cy - ay;\n\n var bl = dx * dx + dy * dy;\n var cl = ex * ex + ey * ey;\n var d = 0.5 / (dx * ey - dy * ex);\n\n var x = (ey * bl - dy * cl) * d;\n var y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n }\n\n function circumcenter(ax, ay, bx, by, cx, cy) {\n var dx = bx - ax;\n var dy = by - ay;\n var ex = cx - ax;\n var ey = cy - ay;\n\n var bl = dx * dx + dy * dy;\n var cl = ex * ex + ey * ey;\n var d = 0.5 / (dx * ey - dy * ex);\n\n var x = ax + (ey * bl - dy * cl) * d;\n var y = ay + (dx * cl - ex * bl) * d;\n\n return {x: x, y: y};\n }\n\n function quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (var i = left + 1; i <= right; i++) {\n var temp = ids[i];\n var tempDist = dists[temp];\n var j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) { ids[j + 1] = ids[j--]; }\n ids[j + 1] = temp;\n }\n } else {\n var median = (left + right) >> 1;\n var i$1 = left + 1;\n var j$1 = right;\n swap(ids, median, i$1);\n if (dists[ids[left]] > dists[ids[right]]) { swap(ids, left, right); }\n if (dists[ids[i$1]] > dists[ids[right]]) { swap(ids, i$1, right); }\n if (dists[ids[left]] > dists[ids[i$1]]) { swap(ids, left, i$1); }\n\n var temp$1 = ids[i$1];\n var tempDist$1 = dists[temp$1];\n while (true) {\n do { i$1++; } while (dists[ids[i$1]] < tempDist$1);\n do { j$1--; } while (dists[ids[j$1]] > tempDist$1);\n if (j$1 < i$1) { break; }\n swap(ids, i$1, j$1);\n }\n ids[left + 1] = ids[j$1];\n ids[j$1] = temp$1;\n\n if (right - i$1 + 1 >= j$1 - left) {\n quicksort(ids, dists, i$1, right);\n quicksort(ids, dists, left, j$1 - 1);\n } else {\n quicksort(ids, dists, left, j$1 - 1);\n quicksort(ids, dists, i$1, right);\n }\n }\n }\n\n function swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n }\n\n function defaultGetX(p) {\n return p[0];\n }\n function defaultGetY(p) {\n return p[1];\n }\n\n return Delaunator;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RlbGF1bmF0b3IvZGVsYXVuYXRvci5qcz9iNzc2Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRGVsYXVuYXRvciA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICAgIHZhciBFREdFX1NUQUNLID0gbmV3IFVpbnQzMkFycmF5KDUxMik7XG5cbiAgICB2YXIgRGVsYXVuYXRvciA9IGZ1bmN0aW9uIERlbGF1bmF0b3IoY29vcmRzKSB7XG4gICAgICAgIHZhciBuID0gY29vcmRzLmxlbmd0aCA+PiAxO1xuICAgICAgICBpZiAobiA+IDAgJiYgdHlwZW9mIGNvb3Jkc1swXSAhPT0gJ251bWJlcicpIHsgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBjb29yZHMgdG8gY29udGFpbiBudW1iZXJzLicpOyB9XG5cbiAgICAgICAgdGhpcy5jb29yZHMgPSBjb29yZHM7XG5cbiAgICAgICAgLy8gYXJyYXlzIHRoYXQgd2lsbCBzdG9yZSB0aGUgdHJpYW5ndWxhdGlvbiBncmFwaFxuICAgICAgICB2YXIgbWF4VHJpYW5nbGVzID0gTWF0aC5tYXgoMiAqIG4gLSA1LCAwKTtcbiAgICAgICAgdGhpcy5fdHJpYW5nbGVzID0gbmV3IFVpbnQzMkFycmF5KG1heFRyaWFuZ2xlcyAqIDMpO1xuICAgICAgICB0aGlzLl9oYWxmZWRnZXMgPSBuZXcgSW50MzJBcnJheShtYXhUcmlhbmdsZXMgKiAzKTtcblxuICAgICAgICAvLyB0ZW1wb3JhcnkgYXJyYXlzIGZvciB0cmFja2luZyB0aGUgZWRnZXMgb2YgdGhlIGFkdmFuY2luZyBjb252ZXggaHVsbFxuICAgICAgICB0aGlzLl9oYXNoU2l6ZSA9IE1hdGguY2VpbChNYXRoLnNxcnQobikpO1xuICAgICAgICB0aGlzLl9odWxsUHJldiA9IG5ldyBVaW50MzJBcnJheShuKTsgLy8gZWRnZSB0byBwcmV2IGVkZ2VcbiAgICAgICAgdGhpcy5faHVsbE5leHQgPSBuZXcgVWludDMyQXJyYXkobik7IC8vIGVkZ2UgdG8gbmV4dCBlZGdlXG4gICAgICAgIHRoaXMuX2h1bGxUcmkgPSBuZXcgVWludDMyQXJyYXkobik7IC8vIGVkZ2UgdG8gYWRqYWNlbnQgdHJpYW5nbGVcbiAgICAgICAgdGhpcy5faHVsbEhhc2ggPSBuZXcgSW50MzJBcnJheSh0aGlzLl9oYXNoU2l6ZSkuZmlsbCgtMSk7IC8vIGFuZ3VsYXIgZWRnZSBoYXNoXG5cbiAgICAgICAgLy8gdGVtcG9yYXJ5IGFycmF5cyBmb3Igc29ydGluZyBwb2ludHNcbiAgICAgICAgdGhpcy5faWRzID0gbmV3IFVpbnQzMkFycmF5KG4pO1xuICAgICAgICB0aGlzLl9kaXN0cyA9IG5ldyBGbG9hdDY0QXJyYXkobik7XG5cbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9O1xuXG4gICAgRGVsYXVuYXRvci5mcm9tID0gZnVuY3Rpb24gZnJvbSAocG9pbnRzLCBnZXRYLCBnZXRZKSB7XG4gICAgICAgICAgICBpZiAoIGdldFggPT09IHZvaWQgMCApIGdldFggPSBkZWZhdWx0R2V0WDtcbiAgICAgICAgICAgIGlmICggZ2V0WSA9PT0gdm9pZCAwICkgZ2V0WSA9IGRlZmF1bHRHZXRZO1xuXG4gICAgICAgIHZhciBuID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvb3JkcyA9IG5ldyBGbG9hdDY0QXJyYXkobiAqIDIpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGNvb3Jkc1syICogaV0gPSBnZXRYKHApO1xuICAgICAgICAgICAgY29vcmRzWzIgKiBpICsgMV0gPSBnZXRZKHApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBEZWxhdW5hdG9yKGNvb3Jkcyk7XG4gICAgfTtcblxuICAgIERlbGF1bmF0b3IucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gICAgICAgIHZhciByZWYgPSAgdGhpcztcbiAgICAgICAgICAgIHZhciBjb29yZHMgPSByZWYuY29vcmRzO1xuICAgICAgICAgICAgdmFyIGh1bGxQcmV2ID0gcmVmLl9odWxsUHJldjtcbiAgICAgICAgICAgIHZhciBodWxsTmV4dCA9IHJlZi5faHVsbE5leHQ7XG4gICAgICAgICAgICB2YXIgaHVsbFRyaSA9IHJlZi5faHVsbFRyaTtcbiAgICAgICAgICAgIHZhciBodWxsSGFzaCA9IHJlZi5faHVsbEhhc2g7XG4gICAgICAgIHZhciBuID0gY29vcmRzLmxlbmd0aCA+PiAxO1xuXG4gICAgICAgIC8vIHBvcHVsYXRlIGFuIGFycmF5IG9mIHBvaW50IGluZGljZXM7IGNhbGN1bGF0ZSBpbnB1dCBkYXRhIGJib3hcbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgeCA9IGNvb3Jkc1syICogaV07XG4gICAgICAgICAgICB2YXIgeSA9IGNvb3Jkc1syICogaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSB7IG1pblggPSB4OyB9XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIHsgbWluWSA9IHk7IH1cbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgeyBtYXhYID0geDsgfVxuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSB7IG1heFkgPSB5OyB9XG4gICAgICAgICAgICB0aGlzLl9pZHNbaV0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjeCA9IChtaW5YICsgbWF4WCkgLyAyO1xuICAgICAgICB2YXIgY3kgPSAobWluWSArIG1heFkpIC8gMjtcblxuICAgICAgICB2YXIgbWluRGlzdCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgaTAsIGkxLCBpMjtcblxuICAgICAgICAvLyBwaWNrIGEgc2VlZCBwb2ludCBjbG9zZSB0byB0aGUgY2VudGVyXG4gICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IG47IGkkMSsrKSB7XG4gICAgICAgICAgICB2YXIgZCA9IGRpc3QoY3gsIGN5LCBjb29yZHNbMiAqIGkkMV0sIGNvb3Jkc1syICogaSQxICsgMV0pO1xuICAgICAgICAgICAgaWYgKGQgPCBtaW5EaXN0KSB7XG4gICAgICAgICAgICAgICAgaTAgPSBpJDE7XG4gICAgICAgICAgICAgICAgbWluRGlzdCA9IGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGkweCA9IGNvb3Jkc1syICogaTBdO1xuICAgICAgICB2YXIgaTB5ID0gY29vcmRzWzIgKiBpMCArIDFdO1xuXG4gICAgICAgIG1pbkRpc3QgPSBJbmZpbml0eTtcblxuICAgICAgICAvLyBmaW5kIHRoZSBwb2ludCBjbG9zZXN0IHRvIHRoZSBzZWVkXG4gICAgICAgIGZvciAodmFyIGkkMiA9IDA7IGkkMiA8IG47IGkkMisrKSB7XG4gICAgICAgICAgICBpZiAoaSQyID09PSBpMCkgeyBjb250aW51ZTsgfVxuICAgICAgICAgICAgdmFyIGQkMSA9IGRpc3QoaTB4LCBpMHksIGNvb3Jkc1syICogaSQyXSwgY29vcmRzWzIgKiBpJDIgKyAxXSk7XG4gICAgICAgICAgICBpZiAoZCQxIDwgbWluRGlzdCAmJiBkJDEgPiAwKSB7XG4gICAgICAgICAgICAgICAgaTEgPSBpJDI7XG4gICAgICAgICAgICAgICAgbWluRGlzdCA9IGQkMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgaTF4ID0gY29vcmRzWzIgKiBpMV07XG4gICAgICAgIHZhciBpMXkgPSBjb29yZHNbMiAqIGkxICsgMV07XG5cbiAgICAgICAgdmFyIG1pblJhZGl1cyA9IEluZmluaXR5O1xuXG4gICAgICAgIC8vIGZpbmQgdGhlIHRoaXJkIHBvaW50IHdoaWNoIGZvcm1zIHRoZSBzbWFsbGVzdCBjaXJjdW1jaXJjbGUgd2l0aCB0aGUgZmlyc3QgdHdvXG4gICAgICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IG47IGkkMysrKSB7XG4gICAgICAgICAgICBpZiAoaSQzID09PSBpMCB8fCBpJDMgPT09IGkxKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICB2YXIgciA9IGNpcmN1bXJhZGl1cyhpMHgsIGkweSwgaTF4LCBpMXksIGNvb3Jkc1syICogaSQzXSwgY29vcmRzWzIgKiBpJDMgKyAxXSk7XG4gICAgICAgICAgICBpZiAociA8IG1pblJhZGl1cykge1xuICAgICAgICAgICAgICAgIGkyID0gaSQzO1xuICAgICAgICAgICAgICAgIG1pblJhZGl1cyA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGkyeCA9IGNvb3Jkc1syICogaTJdO1xuICAgICAgICB2YXIgaTJ5ID0gY29vcmRzWzIgKiBpMiArIDFdO1xuXG4gICAgICAgIGlmIChtaW5SYWRpdXMgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAvLyBvcmRlciBjb2xsaW5lYXIgcG9pbnRzIGJ5IGR4IChvciBkeSBpZiBhbGwgeCBhcmUgaWRlbnRpY2FsKVxuICAgICAgICAgICAgLy8gYW5kIHJldHVybiB0aGUgbGlzdCBhcyBhIGh1bGxcbiAgICAgICAgICAgIGZvciAodmFyIGkkNCA9IDA7IGkkNCA8IG47IGkkNCsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzdHNbaSQ0XSA9IChjb29yZHNbMiAqIGkkNF0gLSBjb29yZHNbMF0pIHx8IChjb29yZHNbMiAqIGkkNCArIDFdIC0gY29vcmRzWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1aWNrc29ydCh0aGlzLl9pZHMsIHRoaXMuX2Rpc3RzLCAwLCBuIC0gMSk7XG4gICAgICAgICAgICB2YXIgaHVsbCA9IG5ldyBVaW50MzJBcnJheShuKTtcbiAgICAgICAgICAgIHZhciBqID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkkNSA9IDAsIGQwID0gLUluZmluaXR5OyBpJDUgPCBuOyBpJDUrKykge1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX2lkc1tpJDVdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kaXN0c1tpZF0gPiBkMCkge1xuICAgICAgICAgICAgICAgICAgICBodWxsW2orK10gPSBpZDtcbiAgICAgICAgICAgICAgICAgICAgZDAgPSB0aGlzLl9kaXN0c1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5odWxsID0gaHVsbC5zdWJhcnJheSgwLCBqKTtcbiAgICAgICAgICAgIHRoaXMudHJpYW5nbGVzID0gbmV3IFVpbnQzMkFycmF5KDApO1xuICAgICAgICAgICAgdGhpcy5oYWxmZWRnZXMgPSBuZXcgVWludDMyQXJyYXkoMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzd2FwIHRoZSBvcmRlciBvZiB0aGUgc2VlZCBwb2ludHMgZm9yIGNvdW50ZXItY2xvY2t3aXNlIG9yaWVudGF0aW9uXG4gICAgICAgIGlmIChvcmllbnQoaTB4LCBpMHksIGkxeCwgaTF5LCBpMngsIGkyeSkpIHtcbiAgICAgICAgICAgIHZhciBpJDYgPSBpMTtcbiAgICAgICAgICAgIHZhciB4JDEgPSBpMXg7XG4gICAgICAgICAgICB2YXIgeSQxID0gaTF5O1xuICAgICAgICAgICAgaTEgPSBpMjtcbiAgICAgICAgICAgIGkxeCA9IGkyeDtcbiAgICAgICAgICAgIGkxeSA9IGkyeTtcbiAgICAgICAgICAgIGkyID0gaSQ2O1xuICAgICAgICAgICAgaTJ4ID0geCQxO1xuICAgICAgICAgICAgaTJ5ID0geSQxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNlbnRlciA9IGNpcmN1bWNlbnRlcihpMHgsIGkweSwgaTF4LCBpMXksIGkyeCwgaTJ5KTtcbiAgICAgICAgdGhpcy5fY3ggPSBjZW50ZXIueDtcbiAgICAgICAgdGhpcy5fY3kgPSBjZW50ZXIueTtcblxuICAgICAgICBmb3IgKHZhciBpJDcgPSAwOyBpJDcgPCBuOyBpJDcrKykge1xuICAgICAgICAgICAgdGhpcy5fZGlzdHNbaSQ3XSA9IGRpc3QoY29vcmRzWzIgKiBpJDddLCBjb29yZHNbMiAqIGkkNyArIDFdLCBjZW50ZXIueCwgY2VudGVyLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29ydCB0aGUgcG9pbnRzIGJ5IGRpc3RhbmNlIGZyb20gdGhlIHNlZWQgdHJpYW5nbGUgY2lyY3VtY2VudGVyXG4gICAgICAgIHF1aWNrc29ydCh0aGlzLl9pZHMsIHRoaXMuX2Rpc3RzLCAwLCBuIC0gMSk7XG5cbiAgICAgICAgLy8gc2V0IHVwIHRoZSBzZWVkIHRyaWFuZ2xlIGFzIHRoZSBzdGFydGluZyBodWxsXG4gICAgICAgIHRoaXMuX2h1bGxTdGFydCA9IGkwO1xuICAgICAgICB2YXIgaHVsbFNpemUgPSAzO1xuXG4gICAgICAgIGh1bGxOZXh0W2kwXSA9IGh1bGxQcmV2W2kyXSA9IGkxO1xuICAgICAgICBodWxsTmV4dFtpMV0gPSBodWxsUHJldltpMF0gPSBpMjtcbiAgICAgICAgaHVsbE5leHRbaTJdID0gaHVsbFByZXZbaTFdID0gaTA7XG5cbiAgICAgICAgaHVsbFRyaVtpMF0gPSAwO1xuICAgICAgICBodWxsVHJpW2kxXSA9IDE7XG4gICAgICAgIGh1bGxUcmlbaTJdID0gMjtcblxuICAgICAgICBodWxsSGFzaC5maWxsKC0xKTtcbiAgICAgICAgaHVsbEhhc2hbdGhpcy5faGFzaEtleShpMHgsIGkweSldID0gaTA7XG4gICAgICAgIGh1bGxIYXNoW3RoaXMuX2hhc2hLZXkoaTF4LCBpMXkpXSA9IGkxO1xuICAgICAgICBodWxsSGFzaFt0aGlzLl9oYXNoS2V5KGkyeCwgaTJ5KV0gPSBpMjtcblxuICAgICAgICB0aGlzLnRyaWFuZ2xlc0xlbiA9IDA7XG4gICAgICAgIHRoaXMuX2FkZFRyaWFuZ2xlKGkwLCBpMSwgaTIsIC0xLCAtMSwgLTEpO1xuXG4gICAgICAgIGZvciAodmFyIGsgPSAwLCB4cCA9ICh2b2lkIDApLCB5cCA9ICh2b2lkIDApOyBrIDwgdGhpcy5faWRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgaSQ4ID0gdGhpcy5faWRzW2tdO1xuICAgICAgICAgICAgdmFyIHgkMiA9IGNvb3Jkc1syICogaSQ4XTtcbiAgICAgICAgICAgIHZhciB5JDIgPSBjb29yZHNbMiAqIGkkOCArIDFdO1xuXG4gICAgICAgICAgICAvLyBza2lwIG5lYXItZHVwbGljYXRlIHBvaW50c1xuICAgICAgICAgICAgaWYgKGsgPiAwICYmIE1hdGguYWJzKHgkMiAtIHhwKSA8PSBFUFNJTE9OICYmIE1hdGguYWJzKHkkMiAtIHlwKSA8PSBFUFNJTE9OKSB7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICB4cCA9IHgkMjtcbiAgICAgICAgICAgIHlwID0geSQyO1xuXG4gICAgICAgICAgICAvLyBza2lwIHNlZWQgdHJpYW5nbGUgcG9pbnRzXG4gICAgICAgICAgICBpZiAoaSQ4ID09PSBpMCB8fCBpJDggPT09IGkxIHx8IGkkOCA9PT0gaTIpIHsgY29udGludWU7IH1cblxuICAgICAgICAgICAgLy8gZmluZCBhIHZpc2libGUgZWRnZSBvbiB0aGUgY29udmV4IGh1bGwgdXNpbmcgZWRnZSBoYXNoXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaiQxID0gMCwga2V5ID0gdGhpcy5faGFzaEtleSh4JDIsIHkkMik7IGokMSA8IHRoaXMuX2hhc2hTaXplOyBqJDErKykge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gaHVsbEhhc2hbKGtleSArIGokMSkgJSB0aGlzLl9oYXNoU2l6ZV07XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9PSAtMSAmJiBzdGFydCAhPT0gaHVsbE5leHRbc3RhcnRdKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0ID0gaHVsbFByZXZbc3RhcnRdO1xuICAgICAgICAgICAgdmFyIGUgPSBzdGFydCwgcSA9ICh2b2lkIDApO1xuICAgICAgICAgICAgd2hpbGUgKHEgPSBodWxsTmV4dFtlXSwgIW9yaWVudCh4JDIsIHkkMiwgY29vcmRzWzIgKiBlXSwgY29vcmRzWzIgKiBlICsgMV0sIGNvb3Jkc1syICogcV0sIGNvb3Jkc1syICogcSArIDFdKSkge1xuICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgIGlmIChlID09PSBzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlID09PSAtMSkgeyBjb250aW51ZTsgfSAvLyBsaWtlbHkgYSBuZWFyLWR1cGxpY2F0ZSBwb2ludDsgc2tpcCBpdFxuXG4gICAgICAgICAgICAvLyBhZGQgdGhlIGZpcnN0IHRyaWFuZ2xlIGZyb20gdGhlIHBvaW50XG4gICAgICAgICAgICB2YXIgdCA9IHRoaXMuX2FkZFRyaWFuZ2xlKGUsIGkkOCwgaHVsbE5leHRbZV0sIC0xLCAtMSwgaHVsbFRyaVtlXSk7XG5cbiAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGZsaXAgdHJpYW5nbGVzIGZyb20gdGhlIHBvaW50IHVudGlsIHRoZXkgc2F0aXNmeSB0aGUgRGVsYXVuYXkgY29uZGl0aW9uXG4gICAgICAgICAgICBodWxsVHJpW2kkOF0gPSB0aGlzLl9sZWdhbGl6ZSh0ICsgMik7XG4gICAgICAgICAgICBodWxsVHJpW2VdID0gdDsgLy8ga2VlcCB0cmFjayBvZiBib3VuZGFyeSB0cmlhbmdsZXMgb24gdGhlIGh1bGxcbiAgICAgICAgICAgIGh1bGxTaXplKys7XG5cbiAgICAgICAgICAgIC8vIHdhbGsgZm9yd2FyZCB0aHJvdWdoIHRoZSBodWxsLCBhZGRpbmcgbW9yZSB0cmlhbmdsZXMgYW5kIGZsaXBwaW5nIHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgICB2YXIgbiQxID0gaHVsbE5leHRbZV07XG4gICAgICAgICAgICB3aGlsZSAocSA9IGh1bGxOZXh0W24kMV0sIG9yaWVudCh4JDIsIHkkMiwgY29vcmRzWzIgKiBuJDFdLCBjb29yZHNbMiAqIG4kMSArIDFdLCBjb29yZHNbMiAqIHFdLCBjb29yZHNbMiAqIHEgKyAxXSkpIHtcbiAgICAgICAgICAgICAgICB0ID0gdGhpcy5fYWRkVHJpYW5nbGUobiQxLCBpJDgsIHEsIGh1bGxUcmlbaSQ4XSwgLTEsIGh1bGxUcmlbbiQxXSk7XG4gICAgICAgICAgICAgICAgaHVsbFRyaVtpJDhdID0gdGhpcy5fbGVnYWxpemUodCArIDIpO1xuICAgICAgICAgICAgICAgIGh1bGxOZXh0W24kMV0gPSBuJDE7IC8vIG1hcmsgYXMgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGh1bGxTaXplLS07XG4gICAgICAgICAgICAgICAgbiQxID0gcTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gd2FsayBiYWNrd2FyZCBmcm9tIHRoZSBvdGhlciBzaWRlLCBhZGRpbmcgbW9yZSB0cmlhbmdsZXMgYW5kIGZsaXBwaW5nXG4gICAgICAgICAgICBpZiAoZSA9PT0gc3RhcnQpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAocSA9IGh1bGxQcmV2W2VdLCBvcmllbnQoeCQyLCB5JDIsIGNvb3Jkc1syICogcV0sIGNvb3Jkc1syICogcSArIDFdLCBjb29yZHNbMiAqIGVdLCBjb29yZHNbMiAqIGUgKyAxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IHRoaXMuX2FkZFRyaWFuZ2xlKHEsIGkkOCwgZSwgLTEsIGh1bGxUcmlbZV0sIGh1bGxUcmlbcV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWdhbGl6ZSh0ICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGh1bGxUcmlbcV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICBodWxsTmV4dFtlXSA9IGU7IC8vIG1hcmsgYXMgcmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgICBodWxsU2l6ZS0tO1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaHVsbCBpbmRpY2VzXG4gICAgICAgICAgICB0aGlzLl9odWxsU3RhcnQgPSBodWxsUHJldltpJDhdID0gZTtcbiAgICAgICAgICAgIGh1bGxOZXh0W2VdID0gaHVsbFByZXZbbiQxXSA9IGkkODtcbiAgICAgICAgICAgIGh1bGxOZXh0W2kkOF0gPSBuJDE7XG5cbiAgICAgICAgICAgIC8vIHNhdmUgdGhlIHR3byBuZXcgZWRnZXMgaW4gdGhlIGhhc2ggdGFibGVcbiAgICAgICAgICAgIGh1bGxIYXNoW3RoaXMuX2hhc2hLZXkoeCQyLCB5JDIpXSA9IGkkODtcbiAgICAgICAgICAgIGh1bGxIYXNoW3RoaXMuX2hhc2hLZXkoY29vcmRzWzIgKiBlXSwgY29vcmRzWzIgKiBlICsgMV0pXSA9IGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmh1bGwgPSBuZXcgVWludDMyQXJyYXkoaHVsbFNpemUpO1xuICAgICAgICBmb3IgKHZhciBpJDkgPSAwLCBlJDEgPSB0aGlzLl9odWxsU3RhcnQ7IGkkOSA8IGh1bGxTaXplOyBpJDkrKykge1xuICAgICAgICAgICAgdGhpcy5odWxsW2kkOV0gPSBlJDE7XG4gICAgICAgICAgICBlJDEgPSBodWxsTmV4dFtlJDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJpbSB0eXBlZCB0cmlhbmdsZSBtZXNoIGFycmF5c1xuICAgICAgICB0aGlzLnRyaWFuZ2xlcyA9IHRoaXMuX3RyaWFuZ2xlcy5zdWJhcnJheSgwLCB0aGlzLnRyaWFuZ2xlc0xlbik7XG4gICAgICAgIHRoaXMuaGFsZmVkZ2VzID0gdGhpcy5faGFsZmVkZ2VzLnN1YmFycmF5KDAsIHRoaXMudHJpYW5nbGVzTGVuKTtcbiAgICB9O1xuXG4gICAgRGVsYXVuYXRvci5wcm90b3R5cGUuX2hhc2hLZXkgPSBmdW5jdGlvbiBfaGFzaEtleSAoeCwgeSkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihwc2V1ZG9BbmdsZSh4IC0gdGhpcy5fY3gsIHkgLSB0aGlzLl9jeSkgKiB0aGlzLl9oYXNoU2l6ZSkgJSB0aGlzLl9oYXNoU2l6ZTtcbiAgICB9O1xuXG4gICAgRGVsYXVuYXRvci5wcm90b3R5cGUuX2xlZ2FsaXplID0gZnVuY3Rpb24gX2xlZ2FsaXplIChhKSB7XG4gICAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IHJlZi5fdHJpYW5nbGVzO1xuICAgICAgICAgICAgdmFyIGhhbGZlZGdlcyA9IHJlZi5faGFsZmVkZ2VzO1xuICAgICAgICAgICAgdmFyIGNvb3JkcyA9IHJlZi5jb29yZHM7XG5cbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgYXIgPSAwO1xuXG4gICAgICAgIC8vIHJlY3Vyc2lvbiBlbGltaW5hdGVkIHdpdGggYSBmaXhlZC1zaXplIHN0YWNrXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB2YXIgYiA9IGhhbGZlZGdlc1thXTtcblxuICAgICAgICAgICAgLyogaWYgdGhlIHBhaXIgb2YgdHJpYW5nbGVzIGRvZXNuJ3Qgc2F0aXNmeSB0aGUgRGVsYXVuYXkgY29uZGl0aW9uXG4gICAgICAgICAgICAgKiAocDEgaXMgaW5zaWRlIHRoZSBjaXJjdW1jaXJjbGUgb2YgW3AwLCBwbCwgcHJdKSwgZmxpcCB0aGVtLFxuICAgICAgICAgICAgICogdGhlbiBkbyB0aGUgc2FtZSBjaGVjay9mbGlwIHJlY3Vyc2l2ZWx5IGZvciB0aGUgbmV3IHBhaXIgb2YgdHJpYW5nbGVzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogICAgICAgcGwgICAgICAgICAgICAgICAgcGxcbiAgICAgICAgICAgICAqICAgICAgL3x8XFwgICAgICAgICAgICAgIC8gIFxcXG4gICAgICAgICAgICAgKiAgIGFsLyB8fCBcXGJsICAgICAgICBhbC9cXGFcbiAgICAgICAgICAgICAqICAgIC8gIHx8ICBcXCAgICAgICAgICAvICBcXFxuICAgICAgICAgICAgICogICAvICBhfHxiICBcXGZsaXAvX19fYXJfX19cXFxuICAgICAgICAgICAgICogcDBcXCAgIHx8ICAgL3AxICAgPT4gICBwMFxcLS0tYmwtLS0vcDFcbiAgICAgICAgICAgICAqICAgIFxcICB8fCAgLyAgICAgICAgICBcXCAgL1xuICAgICAgICAgICAgICogICBhclxcIHx8IC9iciAgICAgICAgIGJcXC9iclxuICAgICAgICAgICAgICogICAgICBcXHx8LyAgICAgICAgICAgICAgXFwgIC9cbiAgICAgICAgICAgICAqICAgICAgIHByICAgICAgICAgICAgICAgIHByXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBhMCA9IGEgLSBhICUgMztcbiAgICAgICAgICAgIGFyID0gYTAgKyAoYSArIDIpICUgMztcblxuICAgICAgICAgICAgaWYgKGIgPT09IC0xKSB7IC8vIGNvbnZleCBodWxsIGVkZ2VcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgeyBicmVhazsgfVxuICAgICAgICAgICAgICAgIGEgPSBFREdFX1NUQUNLWy0taV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBiMCA9IGIgLSBiICUgMztcbiAgICAgICAgICAgIHZhciBhbCA9IGEwICsgKGEgKyAxKSAlIDM7XG4gICAgICAgICAgICB2YXIgYmwgPSBiMCArIChiICsgMikgJSAzO1xuXG4gICAgICAgICAgICB2YXIgcDAgPSB0cmlhbmdsZXNbYXJdO1xuICAgICAgICAgICAgdmFyIHByID0gdHJpYW5nbGVzW2FdO1xuICAgICAgICAgICAgdmFyIHBsID0gdHJpYW5nbGVzW2FsXTtcbiAgICAgICAgICAgIHZhciBwMSA9IHRyaWFuZ2xlc1tibF07XG5cbiAgICAgICAgICAgIHZhciBpbGxlZ2FsID0gaW5DaXJjbGUoXG4gICAgICAgICAgICAgICAgY29vcmRzWzIgKiBwMF0sIGNvb3Jkc1syICogcDAgKyAxXSxcbiAgICAgICAgICAgICAgICBjb29yZHNbMiAqIHByXSwgY29vcmRzWzIgKiBwciArIDFdLFxuICAgICAgICAgICAgICAgIGNvb3Jkc1syICogcGxdLCBjb29yZHNbMiAqIHBsICsgMV0sXG4gICAgICAgICAgICAgICAgY29vcmRzWzIgKiBwMV0sIGNvb3Jkc1syICogcDEgKyAxXSk7XG5cbiAgICAgICAgICAgIGlmIChpbGxlZ2FsKSB7XG4gICAgICAgICAgICAgICAgdHJpYW5nbGVzW2FdID0gcDE7XG4gICAgICAgICAgICAgICAgdHJpYW5nbGVzW2JdID0gcDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGJsID0gaGFsZmVkZ2VzW2JsXTtcblxuICAgICAgICAgICAgICAgIC8vIGVkZ2Ugc3dhcHBlZCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgaHVsbCAocmFyZSk7IGZpeCB0aGUgaGFsZmVkZ2UgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgaWYgKGhibCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLl9odWxsU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9odWxsVHJpW2VdID09PSBibCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2h1bGxUcmlbZV0gPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuX2h1bGxQcmV2W2VdO1xuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChlICE9PSB0aGlzLl9odWxsU3RhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9saW5rKGEsIGhibCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGluayhiLCBoYWxmZWRnZXNbYXJdKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9saW5rKGFyLCBibCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYnIgPSBiMCArIChiICsgMSkgJSAzO1xuXG4gICAgICAgICAgICAgICAgLy8gZG9uJ3Qgd29ycnkgYWJvdXQgaGl0dGluZyB0aGUgY2FwOiBpdCBjYW4gb25seSBoYXBwZW4gb24gZXh0cmVtZWx5IGRlZ2VuZXJhdGUgaW5wdXRcbiAgICAgICAgICAgICAgICBpZiAoaSA8IEVER0VfU1RBQ0subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIEVER0VfU1RBQ0tbaSsrXSA9IGJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICBhID0gRURHRV9TVEFDS1stLWldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyO1xuICAgIH07XG5cbiAgICBEZWxhdW5hdG9yLnByb3RvdHlwZS5fbGluayA9IGZ1bmN0aW9uIF9saW5rIChhLCBiKSB7XG4gICAgICAgIHRoaXMuX2hhbGZlZGdlc1thXSA9IGI7XG4gICAgICAgIGlmIChiICE9PSAtMSkgeyB0aGlzLl9oYWxmZWRnZXNbYl0gPSBhOyB9XG4gICAgfTtcblxuICAgIC8vIGFkZCBhIG5ldyB0cmlhbmdsZSBnaXZlbiB2ZXJ0ZXggaW5kaWNlcyBhbmQgYWRqYWNlbnQgaGFsZi1lZGdlIGlkc1xuICAgIERlbGF1bmF0b3IucHJvdG90eXBlLl9hZGRUcmlhbmdsZSA9IGZ1bmN0aW9uIF9hZGRUcmlhbmdsZSAoaTAsIGkxLCBpMiwgYSwgYiwgYykge1xuICAgICAgICB2YXIgdCA9IHRoaXMudHJpYW5nbGVzTGVuO1xuXG4gICAgICAgIHRoaXMuX3RyaWFuZ2xlc1t0XSA9IGkwO1xuICAgICAgICB0aGlzLl90cmlhbmdsZXNbdCArIDFdID0gaTE7XG4gICAgICAgIHRoaXMuX3RyaWFuZ2xlc1t0ICsgMl0gPSBpMjtcblxuICAgICAgICB0aGlzLl9saW5rKHQsIGEpO1xuICAgICAgICB0aGlzLl9saW5rKHQgKyAxLCBiKTtcbiAgICAgICAgdGhpcy5fbGluayh0ICsgMiwgYyk7XG5cbiAgICAgICAgdGhpcy50cmlhbmdsZXNMZW4gKz0gMztcblxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuXG4gICAgLy8gbW9ub3RvbmljYWxseSBpbmNyZWFzZXMgd2l0aCByZWFsIGFuZ2xlLCBidXQgZG9lc24ndCBuZWVkIGV4cGVuc2l2ZSB0cmlnb25vbWV0cnlcbiAgICBmdW5jdGlvbiBwc2V1ZG9BbmdsZShkeCwgZHkpIHtcbiAgICAgICAgdmFyIHAgPSBkeCAvIChNYXRoLmFicyhkeCkgKyBNYXRoLmFicyhkeSkpO1xuICAgICAgICByZXR1cm4gKGR5ID4gMCA/IDMgLSBwIDogMSArIHApIC8gNDsgLy8gWzAuLjFdXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzdChheCwgYXksIGJ4LCBieSkge1xuICAgICAgICB2YXIgZHggPSBheCAtIGJ4O1xuICAgICAgICB2YXIgZHkgPSBheSAtIGJ5O1xuICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIDJkIG9yaWVudGF0aW9uIHNpZ24gaWYgd2UncmUgY29uZmlkZW50IGluIGl0IHRocm91Z2ggSi4gU2hld2NodWsncyBlcnJvciBib3VuZCBjaGVja1xuICAgIGZ1bmN0aW9uIG9yaWVudElmU3VyZShweCwgcHksIHJ4LCByeSwgcXgsIHF5KSB7XG4gICAgICAgIHZhciBsID0gKHJ5IC0gcHkpICogKHF4IC0gcHgpO1xuICAgICAgICB2YXIgciA9IChyeCAtIHB4KSAqIChxeSAtIHB5KTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGwgLSByKSA+PSAzLjMzMDY2OTA3Mzg3NTQ3MTZlLTE2ICogTWF0aC5hYnMobCArIHIpID8gbCAtIHIgOiAwO1xuICAgIH1cblxuICAgIC8vIGEgbW9yZSByb2J1c3Qgb3JpZW50YXRpb24gdGVzdCB0aGF0J3Mgc3RhYmxlIGluIGEgZ2l2ZW4gdHJpYW5nbGUgKHRvIGZpeCByb2J1c3RuZXNzIGlzc3VlcylcbiAgICBmdW5jdGlvbiBvcmllbnQocngsIHJ5LCBxeCwgcXksIHB4LCBweSkge1xuICAgICAgICB2YXIgc2lnbiA9IG9yaWVudElmU3VyZShweCwgcHksIHJ4LCByeSwgcXgsIHF5KSB8fFxuICAgICAgICBvcmllbnRJZlN1cmUocngsIHJ5LCBxeCwgcXksIHB4LCBweSkgfHxcbiAgICAgICAgb3JpZW50SWZTdXJlKHF4LCBxeSwgcHgsIHB5LCByeCwgcnkpO1xuICAgICAgICByZXR1cm4gc2lnbiA8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5DaXJjbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgICAgIHZhciBkeCA9IGF4IC0gcHg7XG4gICAgICAgIHZhciBkeSA9IGF5IC0gcHk7XG4gICAgICAgIHZhciBleCA9IGJ4IC0gcHg7XG4gICAgICAgIHZhciBleSA9IGJ5IC0gcHk7XG4gICAgICAgIHZhciBmeCA9IGN4IC0gcHg7XG4gICAgICAgIHZhciBmeSA9IGN5IC0gcHk7XG5cbiAgICAgICAgdmFyIGFwID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgIHZhciBicCA9IGV4ICogZXggKyBleSAqIGV5O1xuICAgICAgICB2YXIgY3AgPSBmeCAqIGZ4ICsgZnkgKiBmeTtcblxuICAgICAgICByZXR1cm4gZHggKiAoZXkgKiBjcCAtIGJwICogZnkpIC1cbiAgICAgICAgICAgICAgIGR5ICogKGV4ICogY3AgLSBicCAqIGZ4KSArXG4gICAgICAgICAgICAgICBhcCAqIChleCAqIGZ5IC0gZXkgKiBmeCkgPCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNpcmN1bXJhZGl1cyhheCwgYXksIGJ4LCBieSwgY3gsIGN5KSB7XG4gICAgICAgIHZhciBkeCA9IGJ4IC0gYXg7XG4gICAgICAgIHZhciBkeSA9IGJ5IC0gYXk7XG4gICAgICAgIHZhciBleCA9IGN4IC0gYXg7XG4gICAgICAgIHZhciBleSA9IGN5IC0gYXk7XG5cbiAgICAgICAgdmFyIGJsID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgIHZhciBjbCA9IGV4ICogZXggKyBleSAqIGV5O1xuICAgICAgICB2YXIgZCA9IDAuNSAvIChkeCAqIGV5IC0gZHkgKiBleCk7XG5cbiAgICAgICAgdmFyIHggPSAoZXkgKiBibCAtIGR5ICogY2wpICogZDtcbiAgICAgICAgdmFyIHkgPSAoZHggKiBjbCAtIGV4ICogYmwpICogZDtcblxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaXJjdW1jZW50ZXIoYXgsIGF5LCBieCwgYnksIGN4LCBjeSkge1xuICAgICAgICB2YXIgZHggPSBieCAtIGF4O1xuICAgICAgICB2YXIgZHkgPSBieSAtIGF5O1xuICAgICAgICB2YXIgZXggPSBjeCAtIGF4O1xuICAgICAgICB2YXIgZXkgPSBjeSAtIGF5O1xuXG4gICAgICAgIHZhciBibCA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgICB2YXIgY2wgPSBleCAqIGV4ICsgZXkgKiBleTtcbiAgICAgICAgdmFyIGQgPSAwLjUgLyAoZHggKiBleSAtIGR5ICogZXgpO1xuXG4gICAgICAgIHZhciB4ID0gYXggKyAoZXkgKiBibCAtIGR5ICogY2wpICogZDtcbiAgICAgICAgdmFyIHkgPSBheSArIChkeCAqIGNsIC0gZXggKiBibCkgKiBkO1xuXG4gICAgICAgIHJldHVybiB7eDogeCwgeTogeX07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVpY2tzb3J0KGlkcywgZGlzdHMsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPD0gMjApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBsZWZ0ICsgMTsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBpZHNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBEaXN0ID0gZGlzdHNbdGVtcF07XG4gICAgICAgICAgICAgICAgdmFyIGogPSBpIC0gMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaiA+PSBsZWZ0ICYmIGRpc3RzW2lkc1tqXV0gPiB0ZW1wRGlzdCkgeyBpZHNbaiArIDFdID0gaWRzW2otLV07IH1cbiAgICAgICAgICAgICAgICBpZHNbaiArIDFdID0gdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtZWRpYW4gPSAobGVmdCArIHJpZ2h0KSA+PiAxO1xuICAgICAgICAgICAgdmFyIGkkMSA9IGxlZnQgKyAxO1xuICAgICAgICAgICAgdmFyIGokMSA9IHJpZ2h0O1xuICAgICAgICAgICAgc3dhcChpZHMsIG1lZGlhbiwgaSQxKTtcbiAgICAgICAgICAgIGlmIChkaXN0c1tpZHNbbGVmdF1dID4gZGlzdHNbaWRzW3JpZ2h0XV0pIHsgc3dhcChpZHMsIGxlZnQsIHJpZ2h0KTsgfVxuICAgICAgICAgICAgaWYgKGRpc3RzW2lkc1tpJDFdXSA+IGRpc3RzW2lkc1tyaWdodF1dKSB7IHN3YXAoaWRzLCBpJDEsIHJpZ2h0KTsgfVxuICAgICAgICAgICAgaWYgKGRpc3RzW2lkc1tsZWZ0XV0gPiBkaXN0c1tpZHNbaSQxXV0pIHsgc3dhcChpZHMsIGxlZnQsIGkkMSk7IH1cblxuICAgICAgICAgICAgdmFyIHRlbXAkMSA9IGlkc1tpJDFdO1xuICAgICAgICAgICAgdmFyIHRlbXBEaXN0JDEgPSBkaXN0c1t0ZW1wJDFdO1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBkbyB7IGkkMSsrOyB9IHdoaWxlIChkaXN0c1tpZHNbaSQxXV0gPCB0ZW1wRGlzdCQxKTtcbiAgICAgICAgICAgICAgICBkbyB7IGokMS0tOyB9IHdoaWxlIChkaXN0c1tpZHNbaiQxXV0gPiB0ZW1wRGlzdCQxKTtcbiAgICAgICAgICAgICAgICBpZiAoaiQxIDwgaSQxKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgc3dhcChpZHMsIGkkMSwgaiQxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkc1tsZWZ0ICsgMV0gPSBpZHNbaiQxXTtcbiAgICAgICAgICAgIGlkc1tqJDFdID0gdGVtcCQxO1xuXG4gICAgICAgICAgICBpZiAocmlnaHQgLSBpJDEgKyAxID49IGokMSAtIGxlZnQpIHtcbiAgICAgICAgICAgICAgICBxdWlja3NvcnQoaWRzLCBkaXN0cywgaSQxLCByaWdodCk7XG4gICAgICAgICAgICAgICAgcXVpY2tzb3J0KGlkcywgZGlzdHMsIGxlZnQsIGokMSAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWlja3NvcnQoaWRzLCBkaXN0cywgbGVmdCwgaiQxIC0gMSk7XG4gICAgICAgICAgICAgICAgcXVpY2tzb3J0KGlkcywgZGlzdHMsIGkkMSwgcmlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICAgICAgdmFyIHRtcCA9IGFycltpXTtcbiAgICAgICAgYXJyW2ldID0gYXJyW2pdO1xuICAgICAgICBhcnJbal0gPSB0bXA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdEdldFgocCkge1xuICAgICAgICByZXR1cm4gcFswXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdEdldFkocCkge1xuICAgICAgICByZXR1cm4gcFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gRGVsYXVuYXRvcjtcblxufSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///88030\n")}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.delaunay-find.38efd7a4daa9cf41.bundle.js b/assets/demo/site/npm.delaunay-find.38efd7a4daa9cf41.bundle.js
new file mode 100644
index 00000000..9c326bcd
--- /dev/null
+++ b/assets/demo/site/npm.delaunay-find.38efd7a4daa9cf41.bundle.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[5525],{33759:(__unused_webpack_module,exports,__webpack_require__)=>{eval('var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\nexports.Z = void 0;\n\nvar _delaunator = _interopRequireDefault(__webpack_require__(88030));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n// From https://github.com/d3/d3-delaunay/blob/master/src/delaunay.js\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n} // A triangulation is collinear if all its triangles have a non-null area\n\n\nfunction collinear(d) {\n var triangles = d.triangles,\n coords = d.coords;\n\n for (var i = 0; i < triangles.length; i += 3) {\n var a = 2 * triangles[i];\n var b = 2 * triangles[i + 1];\n var c = 2 * triangles[i + 2];\n var cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1]) - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]); // eslint-disable-next-line no-magic-numbers\n\n if (cross > 1e-10) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n} // eslint-disable-next-line max-params\n\n\nfunction flatArray(points, fx, fy, that) {\n var n = points.length;\n var array = new Float64Array(n * 2);\n\n for (var i = 0; i < n; ++i) {\n var p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n\n return array;\n}\n\nvar Delaunay =\n/*#__PURE__*/\nfunction () {\n function Delaunay(points) {\n var delaunator = new _delaunator["default"](points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = delaunator.coords;\n\n this._init(delaunator);\n } // eslint-disable-next-line max-statements, complexity\n\n\n var _proto = Delaunay.prototype;\n\n _proto._init = function _init(delaunator) {\n var d = delaunator;\n var points = this.points; // check for collinear\n // eslint-disable-next-line no-magic-numbers\n\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({\n length: points.length / 2\n }, function (_, i) {\n return i;\n }).sort(function (i, j) {\n return points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1];\n }); // for exact neighbors\n\n var e = this.collinear[0];\n var f = this.collinear[this.collinear.length - 1];\n var bounds = [points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1]];\n var r = 1e-8 * // eslint-disable-line no-magic-numbers\n Math.sqrt(Math.pow(bounds[3] - bounds[1], 2) + Math.pow(bounds[2] - bounds[0], 2));\n\n for (var i = 0, n = points.length / 2; i < n; ++i) {\n var p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n\n delaunator = new _delaunator["default"](points);\n }\n\n var halfedges = this.halfedges = delaunator.halfedges;\n var hull = this.hull = delaunator.hull;\n var triangles = this.triangles = delaunator.triangles;\n var inedges = this.inedges.fill(-1);\n\n var hullIndex = this._hullIndex.fill(-1); // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n\n\n for (var _e = 0, _n = halfedges.length; _e < _n; ++_e) {\n var _p = triangles[_e % 3 === 2 ? _e - 2 : _e + 1];\n if (halfedges[_e] === -1 || inedges[_p] === -1) inedges[_p] = _e;\n }\n\n for (var _i = 0, _n2 = hull.length; _i < _n2; ++_i) {\n hullIndex[hull[_i]] = _i;\n } // degenerate case: 1 or 2 (distinct) points\n\n\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n inedges[hull[0]] = 1;\n if (hull.length === 2) inedges[hull[1]] = 0;\n }\n } // eslint-disable-next-line max-statements\n ;\n\n _proto.neighbors = function neighbors(i) {\n var results = [];\n var inedges = this.inedges,\n hull = this.hull,\n _hullIndex = this._hullIndex,\n halfedges = this.halfedges,\n triangles = this.triangles;\n var e0 = inedges[i];\n if (e0 === -1) return results; // coincident point\n\n var e = e0;\n var p0 = -1;\n\n do {\n p0 = triangles[e];\n results.push(p0);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n\n e = halfedges[e];\n\n if (e === -1) {\n var p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) results.push(p);\n break;\n }\n } while (e !== e0);\n\n return results;\n };\n\n _proto.find = function find(x, y, i) {\n if (i === void 0) {\n i = 0;\n }\n\n // eslint-disable-next-line no-self-compare\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n var i0 = i;\n var c;\n\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) {\n i = c;\n }\n\n return c;\n };\n\n _proto._step = function _step(i, x, y) {\n var inedges = this.inedges,\n points = this.points;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n var c = i;\n var dc = Math.pow(x - points[i * 2], 2) + Math.pow(y - points[i * 2 + 1], 2);\n\n for (var _iterator = this.neighbors(i), _isArray = Array.isArray(_iterator), _i2 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i2 >= _iterator.length) break;\n _ref = _iterator[_i2++];\n } else {\n _i2 = _iterator.next();\n if (_i2.done) break;\n _ref = _i2.value;\n }\n\n var t = _ref;\n var dt = Math.pow(x - points[t * 2], 2) + Math.pow(y - points[t * 2 + 1], 2);\n\n if (dt < dc) {\n dc = dt;\n c = t;\n }\n }\n\n return c;\n };\n\n return Delaunay;\n}(); // eslint-disable-next-line max-params\n\n\nexports.Z = Delaunay;\n\nDelaunay.from = function (points, fx, fy, that) {\n if (fx === void 0) {\n fx = pointX;\n }\n\n if (fy === void 0) {\n fy = pointY;\n }\n\n return new Delaunay(flatArray(points, fx, fy, that));\n}; // only public methods will be .from and .find//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzM3NTkuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViLHlCQUFrQjtBQUNsQixTQUFrQjs7QUFFbEIseUNBQXlDLG1CQUFPLENBQUMsS0FBMEI7O0FBRTNFLHVDQUF1Qyx1Q0FBdUM7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQSx1SUFBdUk7O0FBRXZJO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sR0FBRzs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxPQUFPO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDLHNEQUFzRDtBQUN0RDs7O0FBR0EsNENBQTRDLFNBQVM7QUFDckQ7QUFDQTtBQUNBOztBQUVBLHdDQUF3QyxVQUFVO0FBQ2xEO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJKQUEySjtBQUMzSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLElBQUk7OztBQUdMLFNBQWtCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3J5b3N0YXQtd2ViLy4vbm9kZV9tb2R1bGVzL2RlbGF1bmF5LWZpbmQvbGliL2luZGV4LmpzP2I5ZjUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9kZWxhdW5hdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGVsYXVuYXRvci9kZWxhdW5hdG9yLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLWRlbGF1bmF5L2Jsb2IvbWFzdGVyL3NyYy9kZWxhdW5heS5qc1xuZnVuY3Rpb24gcG9pbnRYKHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmZ1bmN0aW9uIHBvaW50WShwKSB7XG4gIHJldHVybiBwWzFdO1xufSAvLyBBIHRyaWFuZ3VsYXRpb24gaXMgY29sbGluZWFyIGlmIGFsbCBpdHMgdHJpYW5nbGVzIGhhdmUgYSBub24tbnVsbCBhcmVhXG5cblxuZnVuY3Rpb24gY29sbGluZWFyKGQpIHtcbiAgdmFyIHRyaWFuZ2xlcyA9IGQudHJpYW5nbGVzLFxuICAgICAgY29vcmRzID0gZC5jb29yZHM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICB2YXIgYSA9IDIgKiB0cmlhbmdsZXNbaV07XG4gICAgdmFyIGIgPSAyICogdHJpYW5nbGVzW2kgKyAxXTtcbiAgICB2YXIgYyA9IDIgKiB0cmlhbmdsZXNbaSArIDJdO1xuICAgIHZhciBjcm9zcyA9IChjb29yZHNbY10gLSBjb29yZHNbYV0pICogKGNvb3Jkc1tiICsgMV0gLSBjb29yZHNbYSArIDFdKSAtIChjb29yZHNbYl0gLSBjb29yZHNbYV0pICogKGNvb3Jkc1tjICsgMV0gLSBjb29yZHNbYSArIDFdKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcblxuICAgIGlmIChjcm9zcyA+IDFlLTEwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGppdHRlcih4LCB5LCByKSB7XG4gIHJldHVybiBbeCArIE1hdGguc2luKHggKyB5KSAqIHIsIHkgKyBNYXRoLmNvcyh4IC0geSkgKiByXTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblxuXG5mdW5jdGlvbiBmbGF0QXJyYXkocG9pbnRzLCBmeCwgZnksIHRoYXQpIHtcbiAgdmFyIG4gPSBwb2ludHMubGVuZ3RoO1xuICB2YXIgYXJyYXkgPSBuZXcgRmxvYXQ2NEFycmF5KG4gKiAyKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIGFycmF5W2kgKiAyXSA9IGZ4LmNhbGwodGhhdCwgcCwgaSwgcG9pbnRzKTtcbiAgICBhcnJheVtpICogMiArIDFdID0gZnkuY2FsbCh0aGF0LCBwLCBpLCBwb2ludHMpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG52YXIgRGVsYXVuYXkgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEZWxhdW5heShwb2ludHMpIHtcbiAgICB2YXIgZGVsYXVuYXRvciA9IG5ldyBfZGVsYXVuYXRvcltcImRlZmF1bHRcIl0ocG9pbnRzKTtcbiAgICB0aGlzLmluZWRnZXMgPSBuZXcgSW50MzJBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgdGhpcy5faHVsbEluZGV4ID0gbmV3IEludDMyQXJyYXkocG9pbnRzLmxlbmd0aCAvIDIpO1xuICAgIHRoaXMucG9pbnRzID0gZGVsYXVuYXRvci5jb29yZHM7XG5cbiAgICB0aGlzLl9pbml0KGRlbGF1bmF0b3IpO1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cywgY29tcGxleGl0eVxuXG5cbiAgdmFyIF9wcm90byA9IERlbGF1bmF5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uX2luaXQgPSBmdW5jdGlvbiBfaW5pdChkZWxhdW5hdG9yKSB7XG4gICAgdmFyIGQgPSBkZWxhdW5hdG9yO1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50czsgLy8gY2hlY2sgZm9yIGNvbGxpbmVhclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG5cbiAgICBpZiAoZC5odWxsICYmIGQuaHVsbC5sZW5ndGggPiAyICYmIGNvbGxpbmVhcihkKSkge1xuICAgICAgdGhpcy5jb2xsaW5lYXIgPSBJbnQzMkFycmF5LmZyb20oe1xuICAgICAgICBsZW5ndGg6IHBvaW50cy5sZW5ndGggLyAyXG4gICAgICB9LCBmdW5jdGlvbiAoXywgaSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH0pLnNvcnQoZnVuY3Rpb24gKGksIGopIHtcbiAgICAgICAgcmV0dXJuIHBvaW50c1syICogaV0gLSBwb2ludHNbMiAqIGpdIHx8IHBvaW50c1syICogaSArIDFdIC0gcG9pbnRzWzIgKiBqICsgMV07XG4gICAgICB9KTsgLy8gZm9yIGV4YWN0IG5laWdoYm9yc1xuXG4gICAgICB2YXIgZSA9IHRoaXMuY29sbGluZWFyWzBdO1xuICAgICAgdmFyIGYgPSB0aGlzLmNvbGxpbmVhclt0aGlzLmNvbGxpbmVhci5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBib3VuZHMgPSBbcG9pbnRzWzIgKiBlXSwgcG9pbnRzWzIgKiBlICsgMV0sIHBvaW50c1syICogZl0sIHBvaW50c1syICogZiArIDFdXTtcbiAgICAgIHZhciByID0gMWUtOCAqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgTWF0aC5zcXJ0KE1hdGgucG93KGJvdW5kc1szXSAtIGJvdW5kc1sxXSwgMikgKyBNYXRoLnBvdyhib3VuZHNbMl0gLSBib3VuZHNbMF0sIDIpKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2ludHMubGVuZ3RoIC8gMjsgaSA8IG47ICsraSkge1xuICAgICAgICB2YXIgcCA9IGppdHRlcihwb2ludHNbMiAqIGldLCBwb2ludHNbMiAqIGkgKyAxXSwgcik7XG4gICAgICAgIHBvaW50c1syICogaV0gPSBwWzBdO1xuICAgICAgICBwb2ludHNbMiAqIGkgKyAxXSA9IHBbMV07XG4gICAgICB9XG5cbiAgICAgIGRlbGF1bmF0b3IgPSBuZXcgX2RlbGF1bmF0b3JbXCJkZWZhdWx0XCJdKHBvaW50cyk7XG4gICAgfVxuXG4gICAgdmFyIGhhbGZlZGdlcyA9IHRoaXMuaGFsZmVkZ2VzID0gZGVsYXVuYXRvci5oYWxmZWRnZXM7XG4gICAgdmFyIGh1bGwgPSB0aGlzLmh1bGwgPSBkZWxhdW5hdG9yLmh1bGw7XG4gICAgdmFyIHRyaWFuZ2xlcyA9IHRoaXMudHJpYW5nbGVzID0gZGVsYXVuYXRvci50cmlhbmdsZXM7XG4gICAgdmFyIGluZWRnZXMgPSB0aGlzLmluZWRnZXMuZmlsbCgtMSk7XG5cbiAgICB2YXIgaHVsbEluZGV4ID0gdGhpcy5faHVsbEluZGV4LmZpbGwoLTEpOyAvLyBDb21wdXRlIGFuIGluZGV4IGZyb20gZWFjaCBwb2ludCB0byBhbiAoYXJiaXRyYXJ5KSBpbmNvbWluZyBoYWxmZWRnZVxuICAgIC8vIFVzZWQgdG8gZ2l2ZSB0aGUgZmlyc3QgbmVpZ2hib3Igb2YgZWFjaCBwb2ludDsgZm9yIHRoaXMgcmVhc29uLFxuICAgIC8vIG9uIHRoZSBodWxsIHdlIGdpdmUgcHJpb3JpdHkgdG8gZXh0ZXJpb3IgaGFsZmVkZ2VzXG5cblxuICAgIGZvciAodmFyIF9lID0gMCwgX24gPSBoYWxmZWRnZXMubGVuZ3RoOyBfZSA8IF9uOyArK19lKSB7XG4gICAgICB2YXIgX3AgPSB0cmlhbmdsZXNbX2UgJSAzID09PSAyID8gX2UgLSAyIDogX2UgKyAxXTtcbiAgICAgIGlmIChoYWxmZWRnZXNbX2VdID09PSAtMSB8fCBpbmVkZ2VzW19wXSA9PT0gLTEpIGluZWRnZXNbX3BdID0gX2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbjIgPSBodWxsLmxlbmd0aDsgX2kgPCBfbjI7ICsrX2kpIHtcbiAgICAgIGh1bGxJbmRleFtodWxsW19pXV0gPSBfaTtcbiAgICB9IC8vIGRlZ2VuZXJhdGUgY2FzZTogMSBvciAyIChkaXN0aW5jdCkgcG9pbnRzXG5cblxuICAgIGlmIChodWxsLmxlbmd0aCA8PSAyICYmIGh1bGwubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50cmlhbmdsZXMgPSBuZXcgSW50MzJBcnJheSgzKS5maWxsKC0xKTtcbiAgICAgIHRoaXMuaGFsZmVkZ2VzID0gbmV3IEludDMyQXJyYXkoMykuZmlsbCgtMSk7XG4gICAgICB0aGlzLnRyaWFuZ2xlc1swXSA9IGh1bGxbMF07XG4gICAgICB0aGlzLnRyaWFuZ2xlc1sxXSA9IGh1bGxbMV07XG4gICAgICB0aGlzLnRyaWFuZ2xlc1syXSA9IGh1bGxbMV07XG4gICAgICBpbmVkZ2VzW2h1bGxbMF1dID0gMTtcbiAgICAgIGlmIChodWxsLmxlbmd0aCA9PT0gMikgaW5lZGdlc1todWxsWzFdXSA9IDA7XG4gICAgfVxuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICA7XG5cbiAgX3Byb3RvLm5laWdoYm9ycyA9IGZ1bmN0aW9uIG5laWdoYm9ycyhpKSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICB2YXIgaW5lZGdlcyA9IHRoaXMuaW5lZGdlcyxcbiAgICAgICAgaHVsbCA9IHRoaXMuaHVsbCxcbiAgICAgICAgX2h1bGxJbmRleCA9IHRoaXMuX2h1bGxJbmRleCxcbiAgICAgICAgaGFsZmVkZ2VzID0gdGhpcy5oYWxmZWRnZXMsXG4gICAgICAgIHRyaWFuZ2xlcyA9IHRoaXMudHJpYW5nbGVzO1xuICAgIHZhciBlMCA9IGluZWRnZXNbaV07XG4gICAgaWYgKGUwID09PSAtMSkgcmV0dXJuIHJlc3VsdHM7IC8vIGNvaW5jaWRlbnQgcG9pbnRcblxuICAgIHZhciBlID0gZTA7XG4gICAgdmFyIHAwID0gLTE7XG5cbiAgICBkbyB7XG4gICAgICBwMCA9IHRyaWFuZ2xlc1tlXTtcbiAgICAgIHJlc3VsdHMucHVzaChwMCk7XG4gICAgICBlID0gZSAlIDMgPT09IDIgPyBlIC0gMiA6IGUgKyAxO1xuICAgICAgaWYgKHRyaWFuZ2xlc1tlXSAhPT0gaSkgYnJlYWs7IC8vIGJhZCB0cmlhbmd1bGF0aW9uXG5cbiAgICAgIGUgPSBoYWxmZWRnZXNbZV07XG5cbiAgICAgIGlmIChlID09PSAtMSkge1xuICAgICAgICB2YXIgcCA9IGh1bGxbKF9odWxsSW5kZXhbaV0gKyAxKSAlIGh1bGwubGVuZ3RoXTtcbiAgICAgICAgaWYgKHAgIT09IHAwKSByZXN1bHRzLnB1c2gocCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGUgIT09IGUwKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZCh4LCB5LCBpKSB7XG4gICAgaWYgKGkgPT09IHZvaWQgMCkge1xuICAgICAgaSA9IDA7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICgoeCA9ICt4LCB4ICE9PSB4KSB8fCAoeSA9ICt5LCB5ICE9PSB5KSkgcmV0dXJuIC0xO1xuICAgIHZhciBpMCA9IGk7XG4gICAgdmFyIGM7XG5cbiAgICB3aGlsZSAoKGMgPSB0aGlzLl9zdGVwKGksIHgsIHkpKSA+PSAwICYmIGMgIT09IGkgJiYgYyAhPT0gaTApIHtcbiAgICAgIGkgPSBjO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9O1xuXG4gIF9wcm90by5fc3RlcCA9IGZ1bmN0aW9uIF9zdGVwKGksIHgsIHkpIHtcbiAgICB2YXIgaW5lZGdlcyA9IHRoaXMuaW5lZGdlcyxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5wb2ludHM7XG4gICAgaWYgKGluZWRnZXNbaV0gPT09IC0xIHx8ICFwb2ludHMubGVuZ3RoKSByZXR1cm4gKGkgKyAxKSAlIChwb2ludHMubGVuZ3RoID4+IDEpO1xuICAgIHZhciBjID0gaTtcbiAgICB2YXIgZGMgPSBNYXRoLnBvdyh4IC0gcG9pbnRzW2kgKiAyXSwgMikgKyBNYXRoLnBvdyh5IC0gcG9pbnRzW2kgKiAyICsgMV0sIDIpO1xuXG4gICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gdGhpcy5uZWlnaGJvcnMoaSksIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheShfaXRlcmF0b3IpLCBfaTIgPSAwLCBfaXRlcmF0b3IgPSBfaXNBcnJheSA/IF9pdGVyYXRvciA6IF9pdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdKCk7Oykge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIGlmIChfaXNBcnJheSkge1xuICAgICAgICBpZiAoX2kyID49IF9pdGVyYXRvci5sZW5ndGgpIGJyZWFrO1xuICAgICAgICBfcmVmID0gX2l0ZXJhdG9yW19pMisrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pMiA9IF9pdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChfaTIuZG9uZSkgYnJlYWs7XG4gICAgICAgIF9yZWYgPSBfaTIudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0ID0gX3JlZjtcbiAgICAgIHZhciBkdCA9IE1hdGgucG93KHggLSBwb2ludHNbdCAqIDJdLCAyKSArIE1hdGgucG93KHkgLSBwb2ludHNbdCAqIDIgKyAxXSwgMik7XG5cbiAgICAgIGlmIChkdCA8IGRjKSB7XG4gICAgICAgIGRjID0gZHQ7XG4gICAgICAgIGMgPSB0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9O1xuXG4gIHJldHVybiBEZWxhdW5heTtcbn0oKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IERlbGF1bmF5O1xuXG5EZWxhdW5heS5mcm9tID0gZnVuY3Rpb24gKHBvaW50cywgZngsIGZ5LCB0aGF0KSB7XG4gIGlmIChmeCA9PT0gdm9pZCAwKSB7XG4gICAgZnggPSBwb2ludFg7XG4gIH1cblxuICBpZiAoZnkgPT09IHZvaWQgMCkge1xuICAgIGZ5ID0gcG9pbnRZO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBEZWxhdW5heShmbGF0QXJyYXkocG9pbnRzLCBmeCwgZnksIHRoYXQpKTtcbn07IC8vIG9ubHkgcHVibGljIG1ldGhvZHMgd2lsbCBiZSAuZnJvbSBhbmQgLmZpbmQiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33759\n')}}]);
\ No newline at end of file
diff --git a/assets/demo/site/npm.dompurify.9c9d18bb7cd01f80.bundle.js b/assets/demo/site/npm.dompurify.9c9d18bb7cd01f80.bundle.js
new file mode 100644
index 00000000..a76f28d9
--- /dev/null
+++ b/assets/demo/site/npm.dompurify.9c9d18bb7cd01f80.bundle.js
@@ -0,0 +1 @@
+(self.webpackChunkcryostat_web=self.webpackChunkcryostat_web||[]).push([[8370],{27856:function(module){eval("/*! @license DOMPurify 2.4.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.4/LICENSE */\n\n(function (global, factory) {\n true ? module.exports = factory() :\n 0;\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n }\n\n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var hasOwnProperty = Object.hasOwnProperty,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\n\n var _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\n\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n\n if (!construct) {\n construct = function construct(Func, args) {\n return _construct(Func, _toConsumableArray(args));\n };\n }\n\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringToString = unapply(String.prototype.toString);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n var regExpTest = unapply(RegExp.prototype.test);\n var typeErrorCreate = unconstruct(TypeError);\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return apply(func, thisArg, args);\n };\n }\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return construct(func, args);\n };\n }\n /* Add properties to a lookup table */\n\n function addToSet(set, array, transformCaseFunc) {\n transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;\n\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n var l = array.length;\n\n while (l--) {\n var element = array[l];\n\n if (typeof element === 'string') {\n var lcElement = transformCaseFunc(element);\n\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n }\n /* Shallow clone an object */\n\n function clone(object) {\n var newObject = create(null);\n var property;\n\n for (property in object) {\n if (apply(hasOwnProperty, object, [property]) === true) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n }\n /* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\n\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n }\n\n var html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG\n\n var svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n\n var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n var mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']); // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n\n var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n var text = freeze(['#text']);\n\n var html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n var svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n var mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n\n var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n var TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n var DOCTYPE_NAME = seal(/^html$/i);\n\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\n\n\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n } // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n\n\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html) {\n return html;\n },\n createScriptURL: function createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n\n\n DOMPurify.version = '2.4.4';\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n HTMLFormElement = window.HTMLFormElement,\n DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n var ElementPrototype = Element.prototype;\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n createDocumentFragment = _document.createDocumentFragment,\n getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n var documentMode = {};\n\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n var hooks = {};\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n ERB_EXPR$1 = ERB_EXPR,\n TMPLIT_EXPR$1 = TMPLIT_EXPR,\n DATA_ATTR$1 = DATA_ATTR,\n ARIA_ATTR$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n /* Allowed attribute names */\n\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n\n var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n\n var FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n\n var FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n\n var ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n\n var ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n\n var ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n\n var SAFE_FOR_TEMPLATES = false;\n /* Decide if document with ... should be returned */\n\n var WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n\n var SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n\n var FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n\n var RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n\n var RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n\n var RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n\n var SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n\n var SANITIZE_NAMED_PROPS = false;\n var SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n\n var KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n\n var IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n\n var USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n\n var ALLOWED_NAMESPACES = null;\n var DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n /* Parsing of strict XHTML documents */\n\n var PARSER_MEDIA_TYPE;\n var SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n var transformCaseFunc;\n /* Keep a reference to config to pass to hooks */\n\n var CONFIG = null;\n /* Ideally, do not touch anything below this line */\n\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n var isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n\n\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n\n\n if (!cfg || _typeof(cfg) !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n\n\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n\n\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n ALLOWED_ATTR = [];\n\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n\n\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n\n\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n\n\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n\n\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n } // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n\n\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n\n var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n\n var ALL_SVG_TAGS = addToSet({}, svg$1);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via